diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/rubik')
6 files changed, 7217 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/rubik/example-rot1.bat b/Master/texmf-dist/source/latex/rubik/example-rot1.bat new file mode 100755 index 00000000000..3fc9ec4b31e --- /dev/null +++ b/Master/texmf-dist/source/latex/rubik/example-rot1.bat @@ -0,0 +1,2 @@ + pdflatex --shell-escape example-rot1.tex
+ pdflatex --shell-escape example-rot1.tex
\ No newline at end of file diff --git a/Master/texmf-dist/source/latex/rubik/example-rot2.bat b/Master/texmf-dist/source/latex/rubik/example-rot2.bat new file mode 100755 index 00000000000..e648b587ac7 --- /dev/null +++ b/Master/texmf-dist/source/latex/rubik/example-rot2.bat @@ -0,0 +1 @@ +pdflatex --shell-escape example-rot2.tex
diff --git a/Master/texmf-dist/source/latex/rubik/rubikcube.dtx b/Master/texmf-dist/source/latex/rubik/rubikcube.dtx new file mode 100644 index 00000000000..053c01df17f --- /dev/null +++ b/Master/texmf-dist/source/latex/rubik/rubikcube.dtx @@ -0,0 +1,6076 @@ +% \iffalse meta-comment +% +%% rubikcube.dtx +%% Copyright 2014 RWD Nickalls (dick@nickalls.org) and A Syropoulos (asyropoulos@yahoo.com) +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work are RWD Nickalls and A Syropoulos +% +% +% This work consists of the files rubikcube.dtx and rubikcube.ins +% and the derived file rubikcube.sty. +% +%<*readme> +% +% The rubikcube package provides a collection of LaTeX commands and macros +% for the typesetting of Rubik cube configurations and rotation +% sequences using the TikZ graphic language. +% +% Please report errors or suggestions for improvement to +% +% Dick Nickalls or Apostolos Syropoulos +% +% This package requires the basic TikZ package to be loaded already +%</readme> +% +%<*driver> +\listfiles +\documentclass{ltxdoc} +\IfFileExists{rubikcube.sty}{\usepackage{rubikcube}}{% + \GenericWarning{rubikcube.dtx}{Package file rubikcube.sty not found. + Documentation will be messed up!^^J + (Generate rubikcube.sty by (La)TeXing rubikcube.ins, and then^^J + process rubikcube.dtx again)^^J}\stop +}% +\usepackage{ifpdf} +\usepackage{url} %% for references +\usepackage{supertabular} %% for Notation table +%%\OnlyDescription +\EnableCrossrefs +\CodelineIndex +\CodelineNumbered +\RecordChanges +\setcounter{StandardModuleDepth}{1} +\begin{document} + \DocInput{rubikcube.dtx} + \PrintChanges + \PrintIndex +\end{document} +%</driver> +% \fi +% +% +% +% \CheckSum{3912} +% +%%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% +% \title{The \textsf{rubikcube} package} +% +% \author{ +% RWD Nickalls (dick@nickalls.org) \\ +% A Syropoulos (asyropoulos@yahoo.com) +% } +% \date{This file describes version \RCfileversion, last revised \RCfiledate} +% \maketitle +% +% \begin{abstract} +% The \rubikcube\ package provides LaTeX commands and macros +% for typesetting Rubik cube (3x3x3) notation, configurations, and +% rotation sequences using the TikZ graphic language. +% \end{abstract} +% +% \bigskip +% \hfil +% \begin{minipage}{2cm} +% \centering +% \begin{tikzpicture}[scale=0.4] +% \RubikFaceUpAll{W} +% \RubikFaceFrontAll{O} +% \RubikFaceRightAll{G} +% \DrawRubikCubeRU +% \end{tikzpicture} +% \end{minipage} +% \begin{minipage}{2cm} +% \centering +% \begin{tikzpicture}[scale=0.4] +% \DrawRubikLayerFaceAll{W} +% \DrawRubikLayerSideT {R}{R}{R} +% \DrawRubikLayerSideLR{B} {G} +% {B} {G} +% {B} {G} +% \DrawRubikLayerSideB {O}{O}{O} +% \draw[thick,->,color=magenta] (1.5,0.5) -- (2.4, 1.4); +% \draw[thick,->] (2.5,1.5) -- (1.6, 2.4); +% \draw[thick,->,color=magenta] (1.3, 2.3) -- (1.3, 0.5); +% \draw[thick,<->, color=blue] (0.5,2.6) -- (2.5, 2.6); +% \draw[thick,<->, color=blue] (0.5,0.3) -- (2.5, 0.3); +% \end{tikzpicture} +% \end{minipage} +% \RubikF\RubikR\RubikU\RubikRp\RubikUp\RubikFp\ +% \ \ $\longrightarrow$ +% \begin{minipage}{2cm} +% \centering +% \begin{tikzpicture}[scale=0.4] +% \DrawRubikLayerFace{W}{W}{B} +% {W}{W}{O} +% {W}{R}{B} +% \DrawRubikLayerSideT {G}{G}{R} +% \DrawRubikLayerSideLR{R} {W} +% {B} {W} +% {O} {W} +% \DrawRubikLayerSideB {G}{W}{O} +% \end{tikzpicture} +% \end{minipage} +% \hfil +% +% \bigskip +% +% \tableofcontents +% +% \pagebreak +% +% \section{Introduction} +% +% The \rubikcube\ package provides a collection of \LaTeX\ commands +% and macros for typesetting Rubik cube configurations and layer-rotation +% instructions using the PGF/TikZ graphic languages---see examples below. +% We have extended slightly the layer-rotation hieroglyphic notation, originally +% developed by Garfath-Cox (1981), and improved by Duvoid (2010, 2011). +% +% The \textsf{rubikcube} package has been road-tested on a Microsoft +% platform (with MikTeX and Strawberry Perl) +% and on a Linux platform ({\TeX}Live and Mandriva). +% +% +% Useful web sites for solvers are the Speedsolving website, and those +% maintained by Duvoid, by Fridrich, by Jelinek, by Reid, and by Vandenburgh (see References). +% For the mathematics and group theory associated with Rubik's cube see Chen (2004), +% Joyner (2008), Hutchings (2011), Rokicki \textit{et al.}\ (2013). +% +% +% \subsection{Requirements} +% +% The \rubikcube\ package requires the TikZ package. +% +% +% \subsection{Supporting tool---the \textsf{rubikrotation} package} +% \label{sec:addons} +% +% The \textsf{rubikrotation} package, is a dynamic extension to +% the \rubikcube\ package. It consists of the Perl program +% \texttt{rubikrotation.pl} and style option \texttt{rubikrotation.sty}. +% The \textsf{rubikrotation} package implements rotation sequences and +% random scrambling of the 3x3x3 Rubik cube on-the-fly using a +% \cmd{\RubikRotation}\marg{rotation-sequence} command. It returns the +% new state in a form which is then used by the \rubikcube\ package. +% +% Since the \cmd{\RubikRotation} command works by \textsc{call}ing the +% \texttt{rubikrotation.pl} program, it follows that the \textsf{rubikrotation} +% package requires (a)~Perl to be installed, +% and (b)~\LaTeX\ needs to be run using the \texttt{--shell-escape} commandline option. +% See the \textsf{rubikrotation} documentation for details. +% The \textsf{rubikrotation} package has been road-tested on a Microsoft +% platform (with MikTeX and Strawberry Perl) +% and on a Linux platform ({\TeX}Live and Mandriva). +% +% +% \subsection{Copyright} +% Copyright 2014 RWD Nickalls and A Syropoulos. +% +% \medskip +% {\noindent}This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either +% version 1.3c of this license or any +% later version. The latest version of this licence is in +% http://www.latex-project.org/lppl.txt +% +% +% \section{Installation} +% +% +% \subsection{Generating the files} +% +% Place the file \texttt{rubikcube.zip} into a temporary directory, and unzip it. +% This will generate the following files: +% \begin{verbatim} +% rubikcube.ins +% rubikcube.dtx +% rubikcube.sty +% rubikcube.pdf +% example-cube.tex +% example-cube.pdf +% Rubik_doc_figA.pdf +% Rubik_doc_figB.pdf +% Rubik_doc_figC.pdf +% Rubik_doc_figD.pdf +% Rubik_doc_figE.pdf +%\end{verbatim} +% The style option \texttt{rubikcube.sty} is generated by running (pdf)\LaTeX\ on +% the file \texttt{rubikcube.ins} as follows: +%\begin{verbatim} +% pdflatex rubikcube.ins +%\end{verbatim} +% The documentation file (\texttt{rubikcube.pdf}) was generated using the following +% steps: +% \begin{verbatim} +% pdflatex rubikcube.dtx +% pdflatex rubikcube.dtx +% makeindex -s gind.ist rubikcube +% makeindex -s gglo.ist -o rubikcube.gls rubikcube.glo +% pdflatex rubikcube.dtx +%\end{verbatim} +% +% +% \subsection{Placing the files} +% +% Place the files either in the local working directory, or where your system +% will find them. For a Linux system with a standard \TeX\ Directory Structure (TDS), then: +% +%\medskip +%{\noindent}*.sty $\rightarrow$ +% \texttt{/usr/local/texlive/texmf-local/tex/latex/local/rubikcube/} +%{\newline}*.pdf $\rightarrow$ \texttt{/usr/local/texlive/texmf-local/doc/rubikcube/} +% +% \medskip +% {\noindent}Finally, (depending on your system) update the \TeX\ file database using the +% \texttt{texhash} command. +% +% +% \subsection{Usage} +% +% Load the package by using the command \cmd{\usepackage\{rubikcube\}}. +% Note that the \rubikcube\ package requires the TikZ package, and so always load TikZ +% before \rubikcube\ as follows: +% \begin{quote} +%\begin{verbatim} +% \usepackage{tikz} +% \usepackage{rubikcube} +%\end{verbatim} +% \end{quote} +% However, the \rubikcube\ package does check for the presence of TikZ, and will +% load it if TikZ is not already loaded. +% +% +% \section{TikZ picture environment} +% +% For a basic introduction to the use of TikZ see the following manuals +% (from CTAN or from \texttt{http://altermundus.com/}). +% \begin{itemize} +% \item \texttt{pgfmanual.pdf}, version 2.10 (2012) (900 pages) +% \item tkz-base-screen.pdf +% \end{itemize} +% An example of the TikZ picture environment for use with \rubikcube\ is as follows +% If no scale is used (default scale = 1), then each of the small cubie sides +% will have a length of 1~cm. +% \begin{quote} +%\begin{verbatim} +% \begin{tikzpicture}[scale=0.5] +% .... +% \end{tikzpicture} +%\end{verbatim} +% \end{quote} +% A very useful feature of TikZ is that it automatically +% minimises the surrounding white-space, and consequently this is +% mostly quite sufficient. +% +% However, when making complicated side-by-side figures it is +% sometimes helpful to place each sub-figure in a surrounding minipage. +% In this case, a useful approach is to first adjust +% the `scale' parameter to obtain the appropriate size, and +% then adjust the minipage width as necessary. +% +% Note that sometimes a temporary \cmd{\fbox\{\}} can be a useful aid when +% trying to visualise the full extent of the minipage +% (and its whitespace). In this case remember to include a +% trailing \% after the first brace \{ of the fbox command in order not to +% collect any extra `space', as follows: +% \begin{quote} +%\begin{verbatim} +% \fbox{% +% \begin{minipage}{2cm} +% \centering +% \begin{tikzpicture}[scale=0.5] +% .... +% \end{tikzpicture} +% \end{minipage} +% } +%\end{verbatim} +% \end{quote} +% Unexpected spacing between two adjacent images, or between an +% image and adjacent text, is usually related to inappropriate +% (and hidden) white-space associated with the image or its +% associated \cmd{\minipage}. +% +% +% \subsection{\rubikcube\ commands} +% +% Although the \rubikcube\ package has been designed with TikZ in mind, +% it is important to appreciate that of all the various \rubikcube\ +% commands only the `Draw...' commands actually have to be used within +% a TikZ picture environment. +% +% Indeed, using \rubikcube\ +% commands outside the TikZ picture environment can make for useful +% flexibility when a documant is generating more than one figure +% or image. This is because the scope of a command when used inside +% a TikZ environment is constrained to be `local' to that particular +% environment, and hence its influence is not accessable outside +% the environment. +% +% For example, +% +% \subsection{\cmd{\draw} error message} +% \label{drawerrormessage} +% +% If a \cmd{\Draw...} command is used \textit{outside} a TikZ picture +% environment, then \LaTeX\ issues a \cmd{\draw} ``Undefined control +% sequence'' error message, indicating that it is trying to draw +% something using an undefined TikZ \cmd{\draw} command. +% +% For example, if we try to run the \rubikcube\ command +% \cmd{\DrawRubikFlat} without a surrounding TikZ picture environment +% you will see something like the following error message. +%\begin{verbatim} +%! Undefined control sequence. +%\FlatUp ... }{#1}\pgfmathsetmacro {\uy }{#2}\draw +% [line join=round,... +%l.56 \DrawRubikFlat +%\end{verbatim} +% +% +% \section{Command conventions} +% \label{sec:conventions} +% +% +% \DescribeMacro{\rubikcube} +% This command generates the logo \rubikcube. +% +% +% \subsection{Capital letters} +% +% Each `word' in a command (except the word `text') starts with a capital letter. +% For example, \cmd{\DrawRubikCubeRU}, \cmd{\DrawCubieRU}. +% However, in line with \LaTeX, `text' commands start with a lowercase `t'; +% for example \cmd{\textCubieRU}. Letters for colours (R, O, Y, G, B, W, X) are +% always written in uppercase. How the six face letters are written depends +% on the command; sometimes in uppercase (eg \cmd{\rrD}, \cmd{\rrDs}, \cmd{\rrDa} ), +% and sometimes in lowercase (eg~\cmd{\rrSu}, \cmd{\rrd}, \cmd{\rrhf}). +% +% \subsection{XYZ argument ordering} +% +% Many commands have an appended two (XY) or three (XYZ) ordered letter code +% which is used to for specifying some feature of the command; perhaps +% either face or cubie colours or a viewpoint direction. +% +% The convention is that the letter codes are ordered in the XYZ order; +% ie the first code relates to an X-related parameter; +% for example L (Left) or R (Right); the second relates to a Y-related +% parameter; for example U (Up) or D (Down); the third (if required) +% relates to a Z-related parameter; for example F (Front) or B (Back). +% +% \textsc{example}: |\DrawCubieRU{G}{Y}{O}| draws a cubie from +% the RightUp viewpoint. The sequence of colour codes for the three visible +% faces are XYZ ordered, and hence result in the cube having a Green Right face, +% Yellow Up face and Orange Front face. +% +% +% \subsection{Trailing \% on end of \rubikcube\ commands} +% +% It is important to include a trailing \% on the end of \rubikcube\ +% commands when used \textit{outside} a TikZ picture environment. +% This is to prevent unwanted `space' characters appearing in +% the graphics. Note that a useful feature of the TikZ environment +% is that it automatically minimises any such space. +% +% +% \section{Rubik rotation commands and notation} +% \label{sec:RubikCommands} +% +% We use the standard Rubik cube notation of WCA (2012)---see article~12---and +% also the `s' (Slice) and `a' (anti-Slice) notation described in the +% `Notation and terminology' section +% in the `Pretty patterns' page on the website of +% Fridrich (\url{http://www.ws.binghamton.edu/fridrich/ptrns.html}). +% By the term \rubikcube\ we denote only the familiar +% 3x3x3 puzzle cube. We denote similar puzzle cubes of a different size by +% the term NCubes (NxNxN). +% +% It is recommended that commas are used to separate sequestial +% Rubik moves or commands to avoid ambiguity, especially when using just +% lettercodes on their own. +% For example, in the following sequence the commas usefully remove any ambiguity: +% \rrU,\rrLw2,\rrUsp,\rrDa \ \ (|\rrU,\rrLw2,\rrUsp,\rrDa|). +% +% +% +% \subsection{Overview} +% +% The \rubikcube\ notation comprises a range of +% commands for moves or rotations (e.g.,~\rrR, \rry, \rrBw) and their equivalent hieroglyphs +% (e.g.,~\rrhR, \rrhy, \rrhBw), as well as commands for drawing 3x3x3 cubes and single cubies. +% +% Note that there are a few rotation commands which do not have arrow +% hieroglyphs---their their rotation is not visible from the \textsc{front} face +% and hence cannot easily be rendered as an arrow hieroglyph. Consequently these +% rotations have a simple `letter' hieroglyph +% in the form of the letter-code in a square; for example \rrhBw, \rrhSb. +% +% \DescribeMacro{\rr..} +% The letter-code of a rotation is typeset (as in text) using the rubik-rotation +% \cmd{\rr..} stem: ie \rrR\ is typeset using the command \cmd{\rrR}. +% The hieroglyph of a rotation command is generated (in text) by +% \DescribeMacro{\rrh..} +% using instead the stem \cmd{\rrh..}. \ Thus the command \cmd{\rrhR} generates +% \rrhR\ which is the hieroglyph associated with \rrR. +% +% \DescribeMacro{\Rubik..} +% A vertically combined lettercode and its hieroglyph is generated using the command +% stem \cmd{\Rubik..}. For example, \RubikR\ is generated by the command \cmd{\RubikR}, +% with the square hieroglyph sitting on the baseline. +% For some hieroglyphs, eg~the \rrhx, \rrhy, \rrhz\ denoting 90~degree axis rotations, +% the only difference between the \cmd{\rrh..} and \cmd{\Rubik..} forms is that +% the \cmd{\Rubik..} form is eleveted to sit on the baseline just like the other +% \cmd{\Rubik..} hieroglyphs. +% For example \cmd{\rrhyp} generates \rrhyp, while +% \cmd{\Rubikyp} generates \Rubikyp. +% +% \DescribeMacro{\textRubik..} +% A horizontally combined lettercode and its hieroglyph (in sequence as in text) +% is generated using the command stem \cmd{\textRubik..}. +% For example, \textRubikR\ is typeset using the command \cmd{\textRubikR}. +% A list of all commands and their associated hieroglyphs is given in +% Section~\ref{sec:listofcommands}. +% +% +% +% \subsection{Face rotations} +% +% \DescribeMacro{\rrU} +% \DescribeMacro{\rrD} +% \DescribeMacro{\rrL} +% \DescribeMacro{\rrR} +% \DescribeMacro{\rrF} +% \DescribeMacro{\rrB} +% The six main faces of the cube are denoted as \textsc{front} (towards the observer), +% \textsc{back}, \textsc{left}, \textsc{right}, \textsc{up}, \textsc{down}. +% The uppercase initial letter of each face-name (\rrF, \rrB, \rrL, \rrR, \rrU, \rrD) +% denotes a clockwise 90-degree rotation of the face as shown in +% Figure~\ref{fig:notation}. +% For example, \rrD\ is generated by the `rubik rotation' command \cmd{\rrD}. +% +% \DescribeMacro{\rrUp} +% \DescribeMacro{\rrDp} +% \DescribeMacro{\rrLp} +% \DescribeMacro{\rrRp} +% \DescribeMacro{\rrFp} +% \DescribeMacro{\rrBp} +% An appended prime~$^\prime$ indicates an anticlockwise rotation; eg \rrFp. +% This is sometimes written as \rrF$\boldmath{^{-1}}$. The `prime' notation is +% achieved by appending a lowercase `p' to the face rotation command. For example, \rrRp\ +% is generated by \cmd{\rrRp}. +% +% \begin{figure}[hbt] +% \centering +% \ifpdf +% \includegraphics[height=6cm]{Rubik_doc_figA.pdf} +% \fi +% \caption{\label{fig:notation}} +% \end{figure} +% +% +% \subsection{Slice rotations} +% +% \DescribeMacro{\rrSu} +% \DescribeMacro{\rrSd} +% \DescribeMacro{\rrSl} +% \DescribeMacro{\rrSr} +% \DescribeMacro{\rrSf} +% \DescribeMacro{\rrSb} +% The Rubik cube (3x3x3) has three orthogonal so-called `inner' slices, whose +ve +% rotation direction follows that of a named face. For example the inner slice +% rotation between the \textsc{right} and \textsc{left} faces whose rotation +% direction follows the rotation \rrR\ (rotation is isomorphic to \rrR) is denoted +% as \rrSr, which is typeset using the command \cmd{\rrSr}. Note that in these cases +% the trailing \texttt{r} in the command is lowercase. +% +% \DescribeMacro{\rrSup} +% \DescribeMacro{\rrSdp} +% \DescribeMacro{\rrSlp} +% \DescribeMacro{\rrSrp} +% \DescribeMacro{\rrSfp} +% \DescribeMacro{\rrSbp} +% Each of these slice rotations (S rotations) has a reversed (primed) p-form, +% the command for which is generated by appending the suffix `p'. +% For example the inner slice rotations \rrSlp\ (\cmd{\rrSlp}) and +% \rrSr\ (\cmd{\rrSr}) are identical. +% The equivalence is more obvious when we see their respective hieroglyphs. +% For example, in this case \linebreak \rrSlp\ (\cmd{\rrSlp}) +% $\equiv$ \rrhSlp\ (\cmd{\rrhSlP}), +% and \rrSr\ (\cmd{\rrSr}) $\equiv$ \rrhSr\ (\cmd{\rrhSr}). +% +% \pagebreak +% +% \subsubsection*{MES slice notation} +% +% \DescribeMacro{\rrM} +% \DescribeMacro{\rrE} +% \DescribeMacro{\rrS} +% \DescribeMacro{\rrMp} +% \DescribeMacro{\rrEp} +% \DescribeMacro{\rrSp} +% An alternative and somewhat confusing (and hence is non-standard) slice notation +% which is sometimes used is the following +% so-called MES notation, as used in the Waterman algorithm +% (Treep and Waterman 1987). +% \begin{itemize} +% \item[\rrM] \ (\textsc{middle} slice, between the \textsc{left} +% and \textsc{right} faces; direction follows \rrL), +% \item[\rrE] \ (\textsc{equator} slice, between the \textsc{up} and \textsc{down} +% faces; direction follows \rrD), +% \item[\rrS] \ (\textsc{standing} slice, between the \textsc{front} and +% \textsc{back} faces; +% direction follows \rrF). +% \end{itemize} +% Each of these also has a reversed (prime) version. +% The equivalent S notations are therefore as follows: \rrE\ $\equiv$ \rrSd, +% \rrEp\ $\equiv$ \rrSu, +% \rrM\ $\equiv$ \rrSl, \rrMp\ $\equiv$ \rrSr, \rrS\ $\equiv$ \rrSf, \rrSp\ $\equiv$ \rrSb. +% +% +% +% \subsubsection*{Singmaster slice notation} +% +% \DescribeMacro{\rrUs} +% \DescribeMacro{\rrDs} +% \DescribeMacro{\rrLs} +% \DescribeMacro{\rrRs} +% \DescribeMacro{\rrFs} +% \DescribeMacro{\rrBs} +% These are an alternative (but somewhat less intuitive) form of +% slice notation which can be thought of as complementing the +% inner slice rotations. These were originally described by +% Singmaster (Frey and Singmaster, 1982). +% See the link to `notation' on the `Pretty patterns' page of the +% Fridrich website. +% +% Each of these commands denotes a rotation of two opposite faces +% in the same direction. For example, \textRubikUs\ $\equiv$ \textRubikU\ + \textRubikDp, +% which is typeset as: +% \newline |\textRubikUs\ $\equiv$ \textRubikU\ + \textRubikDp|, +% i.e., for \rrUs\ both face-rotations are in the \textit{same} direction +% as \rrU. +% +% +% \subsubsection*{Anti-slice notation} +% +% \DescribeMacro{\rrUa} +% \DescribeMacro{\rrDa} +% \DescribeMacro{\rrLa} +% \DescribeMacro{\rrRa} +% \DescribeMacro{\rrFa} +% \DescribeMacro{\rrBa} +% Each of these commands denotes a rotation of two opposite faces +% in \textit{opposite} directions. +% For example, \textRubikUa\ $\equiv$ \textRubikU\ + \textRubikD, +% which is typeset as: +% \newline |\textRubikUa\ $\equiv$ \textRubikU\ + \textRubikD|. +% See the link to `notation' on the `Pretty patterns' page of the +% Fridrich website. +% +% +% \subsection{Wide rotations} +% +% \DescribeMacro{\rrUw} +% \DescribeMacro{\rrDw} +% \DescribeMacro{\rrLw} +% \DescribeMacro{\rrRw} +% \DescribeMacro{\rrFw} +% \DescribeMacro{\rrBw} +% The clockwise \textit{combined} rotation of an outer face AND its inner slice +% (officially known as a `double outer slice' rotation) is denoted by appending a +% lowercase \textbf{\textsf{\footnotesize{w}}} (denoting `wide') to a face rotation command. +% For example, a \textsc{right} double outer slice rotation is denoted as \rrRw. +% Similarly, the prime $^\prime$ version \rrLwp\ is generated by \cmd{\rrLwp}. +% +% The superscript~$^2$, or sometimes just an ordinary 2, indicates that the rotation +% is applied twice. For example \rrR\textbf{$^2$} or \rrR\textbf{2} +% denote \textit{two} successive 90~degree clockwise rotations of the \textsc{right} face. +% +% +% +% \subsection{Axis rotations} +% +% \DescribeMacro{\rrx} +% \DescribeMacro{\rry} +% \DescribeMacro{\rrz} +% \DescribeMacro{\rrhx} +% \DescribeMacro{\rrhy} +% \DescribeMacro{\rrhz} +% Whole-cube clockwise rotations of 90-degrees about about the orthogonal axes centred +% on the \textsc{right}, \textsc{up}, \textsc{front} faces are denoted +% as \rrx, \rry, \rrz\ (the \cmd{\rr..} forms) respectively, +% with their hieroglyphs (the \cmd{\rrh..} forms) being denoted +% as \rrhx, \rrhy, \rrhz\ in order to distinguish them from square layer-rotation +% hieroglyphs. +% Note that \rrx, \rry, \rrz\ rotations are always expressed in lowercase, +% and hence this practice is extended also to the commands. +% +% An \rrx\textbf{2} rotation (two \rrx\ rotations one after +% the other, ie~\rrhx\ \rrhx) denotes rotating +% the cube 180~degrees about its x axis so as to bring the \textsc{down} face +% into the \textsc{up} position. +% +% An appended prime~$^\prime$ indicates an anticlockwise rotation; +% for example, \rrxp\ (which is generated by appending a `p' to the end of +% the command, ie~\cmd{\rrxp}). +% +% \DescribeMacro{\Rubikx} +% \DescribeMacro{\Rubiky} +% \DescribeMacro{\Rubikz} +% These \cmd{\Rubik..} forms (and their prime `p' versions) generate the same +% hieroglyphs as their \cmd{\rrh..} versions, except that their spacing is +% similar to that associated with the `square box' \cmd{\Rubik..} hieroglyphs. +% Consequently when typesetting an axis command in a sequence of `square-box' +% \cmd{\Rubik..} commands, it is better to use the \cmd{\Rubik..} form rather than +% the equivalent \cmd{\rrh..} form (see the examples in Section~\ref{sec:examples}). +% There are no \cmd{\textRubik..} forms for the axis commands (since they are +% not necessary). +% +% +% \subsubsection*{The u, d, l, r, f, b notation} +% +% \DescribeMacro{\rru} +% \DescribeMacro{\rrd} +% \DescribeMacro{\rrl} +% \DescribeMacro{\rrr} +% \DescribeMacro{\rrf} +% \DescribeMacro{\rrb} +% A commonly used alternative for the \rrx, \rry, \rrz\ notation +% (and endorsed by the WCA) uses the +% lowercase face letter to denote a 90~degree whole-cube rotation in the same +% sense as that of the standard face rotations. +% +% {\noindent}Thus +% \rru\ $\equiv$ \rry, \ \rrd\ $\equiv$ \rryp, \ +% \rrl\ $\equiv$ \rrxp, \ \rrr\ $\equiv$ \rrx, \ +% \rrf\ $\equiv$ \rrz, \ \rrb\ $\equiv$ \rrzp, +% +% {\noindent}For example, \rrd\ is generated by the command \cmd{\rrd}. +% +% {\noindent}Note that these moves do not have prime $^\prime$ versions +% since \rru\ is the opposite of \rrd, \rrl\ is the opposite of \rrr, and +% \rrf\ is the opposite of \rrb. +% +% \DescribeMacro{\rrh..} +% \DescribeMacro{\Rubik..} +% As with the \rrhx, \rrhy, \rrhz\ forms (described above) there also +% equivalent \cmd{\rrh..} and \cmd{\Rubik..} forms. For example, +% \rrhd\ is generated by the command \cmd{\rrhd}. +% +% +% \subsection{Examples} +% \label{sec:examples} +% \begin{quote} +% \rrR\ is generated by the `rubik rotation' command \cmd{\rrR} +% +% \rrFw\ is generated by the `rubik rotation' command \cmd{\rrFw} +% +% \rrL$^2$ is generated by \cmd{\rrL}\verb!$^2$! +% +% \rrRp\ is generated by \cmd{\rrRp} +% +% \rrFwp\ is generated by \cmd{\rrFwp} +% +% \rrx\ and \rrhy\ and \Rubikzp\ are generated by +% \cmd{\rrx} and \cmd{\rrhy} and \cmd{\Rubikzp} +% +% \rrf\ and \rrhb\ are generated by \cmd{\rrf} and \cmd{\rrhb} +% +% The sequence \rrU\rrU\rrR\rrR\ is generated by \cmd{\rrU}\cmd{\rrU}\cmd{\rrR}\cmd{\rrR} +% \end{quote} +% +% \bigskip +% +% {\noindent}\RubikF\RubikR\RubikU\Rubiky\RubikRp\RubikLwp\ +% \ \ \verb!\RubikF\RubikR\RubikU\Rubiky\RubikRp\RubikLwp! +% +% \bigskip +% +% {\noindent}The equivalent `text' version of the first three +% rotations above (and their commands) are as follows: +% +% \bigskip +% +% {\noindent}\textRubikF\ \textRubikR\ \textRubikU\ \ \ \ +% \verb!\textRubikF\ \textRubikR\ \textRubikU! +% +% \bigskip +% {\noindent}Writing the first sequence using only letter-codes or only hieroglyphs, we have: +% +% \bigskip +% +% {\noindent}\rrF\rrR\rrU\rry\rrRp \ \ \ \ +% \verb!\rrF\rrR\rrU\rry\rrRp! +% +% \bigskip +% +% {\noindent}\rrhF\rrhR\rrhU\rrhy\rrhRp \ \ \ \ +% \verb!\rrhF\rrhR\rrhU\rrhy\rrhRp\! +% +% \bigskip +% +% The following shows the importance of using commas to avoid ambiguity: +% +% \bigskip +% +% {\noindent}\rrD,\rrU2,\rrF2,\rrDs2,\rrB, \ \ \ \ \verb!\rrD,\rrU2,\rrF2,\rrDs2,\rrB,! +% +% \bigskip +% +% {\noindent}\rrhD,\rrhU2,\rrhF2,\rrhDs2,\rrhB, \ \ \ \ \verb!\rrhD,\rrhU2,\rrhF2,\rrhDs2,\rrhB,! +% +% +% \subsection{Listing of all rotation commands} +% \label{sec:listofcommands} +% +% Note that all these commands also have a \cmd{\Rubik..} equivalent form which +% typesets both the hieroglyph and its lettercode in a vertical format, +% as shown in the above `Examples' section. These have been ommitted here +% owing to the difficulty of including this form easily in the following table. +% +% Note also that some \cmd{\rrh..} commands (eg~the \cmd{\rrhB..} commands) +% show only the lettercode in a square box. This is because these rotations, which +% do not have a `true' visual representation as seen from the \textsc{front} face, +% are somewhat ambiguous unless typeset with the associated lettercode (ie using the +% \cmd{\Rtbik..} or \cmd{\textRubik..} commands). +% +% \newcommand{\dnstrut}{\rule{0pt}{17pt}} +% \newcommand{\dns}{\hspace{2mm}} +% \newcommand{\dnsp}{\hspace{2mm}} +% +% +% +% \begin{supertabular}[lll]{p{3cm} p{3cm} p{4cm}} +% \dnstrut\rrU\dns\cmd{\rrU} +% & \rrhU\dns\cmd{\rrhU} +% & \textRubikU\dns\cmd{\textRubikU} \nonumber\\ +% \dnstrut\rrUp\dns\cmd{\rrUp} +% & \rrhUp\dns\cmd{\rrhUp} +% & \textRubikUp\dns\cmd{\textRubikUp} \nonumber\\ +% \dnstrut\rrUw\dns\cmd{\rrUw} +% & \rrhUw\dns\cmd{\rrhUw} +% & \textRubikUw\dns\cmd{\textRubikUw} \nonumber\\ +% \dnstrut\rrUwp\dns\cmd{\rrUwp} +% & \rrhUwp\dns\cmd{\rrhUwp} +% & \textRubikUwp\dns\cmd{\textRubikUwp} \nonumber\\ +% \dnstrut\rrUs\dns\cmd{\rrUs} +% & \rrhUs\dns\cmd{\rrhUs} +% & \textRubikUs\dns\cmd{\textRubikUs} \nonumber\\ +% \dnstrut\rrUsp\dns\cmd{\rrUsp} +% & \rrhUsp\dns\cmd{\rrhUsp} +% & \textRubikUsp\dns\cmd{\textRubikUsp} \nonumber\\ +% \dnstrut\rrUa\dns\cmd{\rrUa} +% & \rrhUa\dns\cmd{\rrhUa} +% & \textRubikUa\dns\cmd{\textRubikUa} \nonumber\\ +% \dnstrut\rrUap\dns\cmd{\rrUap} +% & \rrhUap\dns\cmd{\rrhUap} +% & \textRubikUap\dns\cmd{\textRubikUap} \nonumber\\ +% \end{supertabular} +% +% +% \begin{supertabular}[lll]{p{3cm} p{3cm} p{4cm}} +% \dnstrut\rrD\dns\cmd{\rrD} +% & \rrhD\dns\cmd{\rrhD} +% & \textRubikD\dns\cmd{\textRubikD} \nonumber\\ +% \dnstrut\rrDp\dns\cmd{\rrDp} +% & \rrhDp\dns\cmd{\rrhDp} +% & \textRubikDp\dns\cmd{\textRubikDp} \nonumber\\ +% \dnstrut\rrDw\dns\cmd{\rrDw} +% & \rrhDw\dns\cmd{\rrhDw} +% & \textRubikDw\dns\cmd{\textRubikDw} \nonumber\\ +% \dnstrut\rrDwp\dns\cmd{\rrDwp} +% & \rrhDwp\dns\cmd{\rrhDwp} +% & \textRubikDwp\dns\cmd{\textRubikDwp} \nonumber\\ +% \dnstrut\rrDs\dns\cmd{\rrDs} +% & \rrhDs\dns\cmd{\rrhDs} +% & \textRubikDs\dns\cmd{\textRubikDs} \nonumber\\ +% \dnstrut\rrDsp\dns\cmd{\rrDsp} +% & \rrhDsp\dns\cmd{\rrhDsp} +% & \textRubikDsp\dns\cmd{\textRubikDsp} \nonumber\\ +% \dnstrut\rrDa\dns\cmd{\rrDa} +% & \rrhDa\dns\cmd{\rrhDa} +% & \textRubikDa\dns\cmd{\textRubikDa} \nonumber\\ +% \dnstrut\rrDap\dns\cmd{\rrDap} +% & \rrhDap\dns\cmd{\rrhDap} +% & \textRubikDap\dns\cmd{\textRubikDap} \nonumber\\ +% \end{supertabular} +% +% +% \begin{supertabular}[lll]{p{3cm} p{3cm} p{4cm}} +% \dnstrut\rrL\dns\cmd{\rrL} +% & \rrhL\dns\cmd{\rrhL} +% & \textRubikL\dns\cmd{\textRubikL} \nonumber\\ +% \dnstrut\rrLp\dns\cmd{\rrLp} +% & \rrhLp\dns\cmd{\rrhLp} +% & \textRubikLp\dns\cmd{\textRubikLp} \nonumber\\ +% \dnstrut\rrLw\dns\cmd{\rrLw} +% & \rrhLw\dns\cmd{\rrhLw} +% & \textRubikLw\dns\cmd{\textRubikLw} \nonumber\\ +% \dnstrut\rrLwp\dns\cmd{\rrLwp} +% & \rrhLwp\dns\cmd{\rrhLwp} +% & \textRubikLwp\dns\cmd{\textRubikLwp} \nonumber\\ +% \dnstrut\rrLs\dns\cmd{\rrLs} +% & \rrhLs\dns\cmd{\rrhLs} +% & \textRubikLs\dns\cmd{\textRubikLs} \nonumber\\ +% \dnstrut\rrLsp\dns\cmd{\rrLsp} +% & \rrhLsp\dns\cmd{\rrhLsp} +% & \textRubikLsp\dns\cmd{\textRubikLsp} \nonumber\\ +% \dnstrut\rrLa\dns\cmd{\rrLa} +% & \rrhLa\dns\cmd{\rrhLa} +% & \textRubikLa\dns\cmd{\textRubikLa} \nonumber\\ +% \dnstrut\rrLap\dns\cmd{\rrLap} +% & \rrhLap\dns\cmd{\rrhLap} +% & \textRubikLap\dns\cmd{\textRubikLap} \nonumber\\ +% \end{supertabular} +% +% +% \begin{supertabular}[lll]{p{3cm} p{3cm} p{4cm}} +% \dnstrut\rrR\dns\cmd{\rrR} +% & \rrhR\dns\cmd{\rrhR} +% & \textRubikR\dns\cmd{\textRubikR} \nonumber\\ +% \dnstrut\rrRp\dns\cmd{\rrRp} +% & \rrhRp\dns\cmd{\rrhRp} +% & \textRubikRp\dns\cmd{\textRubikRp} \nonumber\\ +% \dnstrut\rrRw\dns\cmd{\rrRw} +% & \rrhRw\dns\cmd{\rrhRw} +% & \textRubikRw\dns\cmd{\textRubikRw} \nonumber\\ +% \dnstrut\rrRwp\dns\cmd{\rrRwp} +% & \rrhRwp\dns\cmd{\rrhRwp} +% & \textRubikRwp\dns\cmd{\textRubikRwp} \nonumber\\ +% \dnstrut\rrRs\dns\cmd{\rrRs} +% & \rrhRs\dns\cmd{\rrhRs} +% & \textRubikRs\dns\cmd{\textRubikRs} \nonumber\\ +% \dnstrut\rrRsp\dns\cmd{\rrRsp} +% & \rrhRsp\dns\cmd{\rrhRsp} +% & \textRubikRsp\dns\cmd{\textRubikRsp} \nonumber\\ +% \dnstrut\rrRa\dns\cmd{\rrRa} +% & \rrhRa\dns\cmd{\rrhRa} +% & \textRubikRa\dns\cmd{\textRubikRa} \nonumber\\ +% \dnstrut\rrRap\dns\cmd{\rrRap} +% & \rrhRap\dns\cmd{\rrhRap} +% & \textRubikRap\dns\cmd{\textRubikRap} \nonumber\\ +% \end{supertabular} +% +% +% \begin{supertabular}[lll]{p{3cm} p{3cm} p{4cm}} +% \dnstrut\rrF\dns\cmd{\rrF} +% & \rrhF\dns\cmd{\rrhF} +% & \textRubikF\dns\cmd{\textRubikF} \nonumber\\ +% \dnstrut\rrFp\dns\cmd{\rrFp} +% & \rrhFp\dns\cmd{\rrhFp} +% & \textRubikFp\dns\cmd{\textRubikFp} \nonumber\\ +% \dnstrut\rrFw\dns\cmd{\rrFw} +% & \rrhFw\dns\cmd{\rrhFw} +% & \textRubikFw\dns\cmd{\textRubikFw} \nonumber\\ +% \dnstrut\rrFwp\dns\cmd{\rrFwp} +% & \rrhFwp\dns\cmd{\rrhFwp} +% & \textRubikFwp\dns\cmd{\textRubikFwp} \nonumber\\ +% \dnstrut\rrFs\dns\cmd{\rrFs} +% & \rrhFs\dns\cmd{\rrhFs} +% & \textRubikFs\dns\cmd{\textRubikFs} \nonumber\\ +% \dnstrut\rrFsp\dns\cmd{\rrFsp} +% & \rrhFsp\dns\cmd{\rrhFsp} +% & \textRubikFsp\dns\cmd{\textRubikFsp} \nonumber\\ +% \dnstrut\rrFa\dns\cmd{\rrFa} +% & \rrhFa\dns\cmd{\rrhFa} +% & \textRubikFa\dns\cmd{\textRubikFa} \nonumber\\ +% \dnstrut\rrFap\dns\cmd{\rrFap} +% & \rrhFap\dns\cmd{\rrhFap} +% & \textRubikFap\dns\cmd{\textRubikFap} \nonumber\\ +% \end{supertabular} +% +% +% \begin{supertabular}[lll]{p{3cm} p{3cm} p{4cm}} +% \dnstrut\rrB\dns\cmd{\rrB} +% & \rrhB\dns\cmd{\rrhB} +% & \textRubikB\dns\cmd{\textRubikB} \nonumber\\ +% \dnstrut\rrBp\dns\cmd{\rrBp} +% & \rrhBp\dns\cmd{\rrhBp} +% & \textRubikBp\dns\cmd{\textRubikBp} \nonumber\\ +% \dnstrut\rrBw\dns\cmd{\rrBw} +% & \rrhBw\dns\cmd{\rrhBw} +% & \textRubikBw\dns\cmd{\textRubikBw} \nonumber\\ +% \dnstrut\rrBwp\dns\cmd{\rrBwp} +% & \rrhBwp\dns\cmd{\rrhBwp} +% & \textRubikBwp\dns\cmd{\textRubikBwp} \nonumber\\ +% \dnstrut\rrBs\dns\cmd{\rrBs} +% & \rrhBs\dns\cmd{\rrhBs} +% & \textRubikBs\dns\cmd{\textRubikBs} \nonumber\\ +% \dnstrut\rrBsp\dns\cmd{\rrBsp} +% & \rrhBsp\dns\cmd{\rrhBsp} +% & \textRubikBsp\dns\cmd{\textRubikBsp} \nonumber\\ +% \dnstrut\rrBa\dns\cmd{\rrBa} +% & \rrhBa\dns\cmd{\rrhBa} +% & \textRubikBa\dns\cmd{\textRubikBa} \nonumber\\ +% \dnstrut\rrBap\dns\cmd{\rrBap} +% & \rrhBap\dns\cmd{\rrhBap} +% & \textRubikBap\dns\cmd{\textRubikBap} \nonumber\\ +% \end{supertabular} +% +% +% \begin{supertabular}[lll]{p{3cm} p{3cm} p{4cm}} +% \dnstrut\rrSu\dns\cmd{\rrSu} +% & \rrhSu\dns\cmd{\rrhSu} +% & \textRubikSu\dns\cmd{\textRubikSu} \nonumber\\ +% \dnstrut\rrSup\dns\cmd{\rrSup} +% & \rrhSup\dns\cmd{\rrhSup} +% & \textRubikSup\dns\cmd{\textRubikSup} \nonumber\\ +% \dnstrut\rrSd\dns\cmd{\rrSd} +% & \rrhSd\dns\cmd{\rrhSd} +% & \textRubikSd\dns\cmd{\textRubikSd} \nonumber\\ +% \dnstrut\rrSdp\dns\cmd{\rrSdp} +% & \rrhSdp\dns\cmd{\rrhSdp} +% & \textRubikSdp\dns\cmd{\textRubikSdp} \nonumber\\ +% \dnstrut\rrSl\dns\cmd{\rrSl} +% & \rrhSl\dns\cmd{\rrhSl} +% & \textRubikSl\dns\cmd{\textRubikSl} \nonumber\\ +% \dnstrut\rrSlp\dns\cmd{\rrSlp} +% & \rrhSlp\dns\cmd{\rrhSlp} +% & \textRubikSlp\dns\cmd{\textRubikSlp} \nonumber\\ +% \dnstrut\rrSr\dns\cmd{\rrSr} +% & \rrhSr\dns\cmd{\rrhSr} +% & \textRubikSr\dns\cmd{\textRubikSr} \nonumber\\ +% \dnstrut\rrSrp\dns\cmd{\rrSrp} +% & \rrhSrp\dns\cmd{\rrhSrp} +% & \textRubikSrp\dns\cmd{\textRubikSrp} \nonumber\\ +% \dnstrut\rrSf\dns\cmd{\rrSf} +% & \rrhSf\dns\cmd{\rrhSf} +% & \textRubikSf\dns\cmd{\textRubikSf} \nonumber\\ +% \dnstrut\rrSfp\dns\cmd{\rrSfp} +% & \rrhSfp\dns\cmd{\rrhSfp} +% & \textRubikSfp\dns\cmd{\textRubikSfp} \nonumber\\ +% \dnstrut\rrSb\dns\cmd{\rrSb} +% & \rrhSb\dns\cmd{\rrhSb} +% & \textRubikSb\dns\cmd{\textRubikSb} \nonumber\\ +% \dnstrut\rrSbp\dns\cmd{\rrSbp} +% & \rrhSbp\dns\cmd{\rrhSbp} +% & \textRubikSbp\dns\cmd{\textRubikSbp} \nonumber\\ +% \end{supertabular} +% +% +% \begin{supertabular}[lll]{p{3cm} p{3cm} p{4cm}} +% \dnstrut\rrE\dns\cmd{\rrE} +% & \rrhE\dns\cmd{\rrhE} +% & \textRubikE\dns\cmd{\textRubikE} \nonumber\\ +% \dnstrut\rrEp\dns\cmd{\rrEp} +% & \rrhEp\dns\cmd{\rrhEp} +% & \textRubikEp\dns\cmd{\textRubikEp} \nonumber\\ +% \dnstrut\rrM\dns\cmd{\rrM} +% & \rrhM\dns\cmd{\rrhM} +% & \textRubikM\dns\cmd{\textRubikM} \nonumber\\ +% \dnstrut\rrMp\dns\cmd{\rrMp} +% & \rrhMp\dns\cmd{\rrhMp} +% & \textRubikMp\dns\cmd{\textRubikMp} \nonumber\\ +% \dnstrut\rrS\dns\cmd{\rrS} +% & \rrhS\dns\cmd{\rrhS} +% & \textRubikS\dns\cmd{\textRubikS} \nonumber\\ +% \dnstrut\rrSp\dns\cmd{\rrSp} +% & \rrhSp\dns\cmd{\rrhSp} +% & \textRubikSp\dns\cmd{\textRubikSp} \nonumber\\ +% \end{supertabular} +% +% +% \begin{supertabular}[lll]{p{3cm} p{3cm} p{4cm}} +% \dnstrut\rrx\dns\cmd{\rrx} +% & \rrhx\dns\cmd{\rrhx} +% & \Rubikx\dns\cmd{\Rubikx} \nonumber\\ +% \dnstrut\rrxp\dns\cmd{\rrxp} +% & \rrhxp\dns\cmd{\rrhxp} +% & \Rubikxp\dns\cmd{\Rubikxp} \nonumber\\ +% \dnstrut\rry\dns\cmd{\rry} +% & \rrhy\dns\cmd{\rrhy} +% & \Rubiky\dns\cmd{\Rubiky} \nonumber\\ +% \dnstrut\rryp\dns\cmd{\rryp} +% & \rrhyp\dns\cmd{\rrhyp} +% & \Rubikyp\dns\cmd{\Rubikyp} \nonumber\\ +% \dnstrut\rrz\dns\cmd{\rrz} +% & \rrhz\dns\cmd{\rrhz} +% & \Rubikz\dns\cmd{\Rubikz} \nonumber\\ +% \dnstrut\rrzp\dns\cmd{\rrzp} +% & \rrhzp\dns\cmd{\rrhzp} +% & \Rubikzp\dns\cmd{\Rubikzp} \nonumber\\ +% \end{supertabular} +% +% +% \begin{supertabular}[lll]{p{3cm} p{3cm} p{4cm}} +% \dnstrut\rru\dns\cmd{\rru} +% & \rrhu\dns\cmd{\rrhu} +% & \Rubiku\dns\cmd{\Rubiku} \nonumber\\ +% \dnstrut\rrd\dns\cmd{\rrd} +% & \rrhd\dns\cmd{\rrhd} +% & \Rubikd\dns\cmd{\Rubikd} \nonumber\\ +% \dnstrut\rrl\dns\cmd{\rrl} +% & \rrhl\dns\cmd{\rrhl} +% & \Rubikl\dns\cmd{\Rubikl} \nonumber\\ +% \dnstrut\rrr\dns\cmd{\rrr} +% & \rrhr\dns\cmd{\rrhr} +% & \Rubikr\dns\cmd{\Rubikr} \nonumber\\ +% \dnstrut\rrf\dns\cmd{\rrf} +% & \rrhf\dns\cmd{\rrhf} +% & \Rubikf\dns\cmd{\Rubikf} \nonumber\\ +% \dnstrut\rrb\dns\cmd{\rrb} +% & \rrhb\dns\cmd{\rrhb} +% & \Rubikb\dns\cmd{\Rubikb} \nonumber\\ +% \end{supertabular} +% +% +% +% \section{Colours} +% +% The \rubikcube\ package defines seven colours which are defined as follows: +% red~(R), orange~(O), yellow~(Y), green~(G), blue~(B), white~(W), +% and grey~(X). Now according to the following webpage\,\footnote{I thank Peter Bartal +% for pointing this out.} +% +% \medskip +% \noindent\texttt{http://The-Rubiks-Cube.deviantart.com/journal/Using-Official-Rubik} +% \newline\texttt{-s-Cube-Colors-268760351} +% +% \medskip +% {\noindent}the official Rubik cube colours are defined as +% \begin{quote} +%\begin{verbatim} +% .... colours which are red (PMS 200C*), green (PMS 347C*), +% blue (PMS 293C*), orange (PMS 021C*), yellow (PMS 012C*) +% and white. +% ..... +% Pantone colors can not be accurately converted to RGB colors, +% the colors the web runs on. But they can be approximated. +% Through some research, I have found some estimations which +% may help you which I have listed below. Remember, these are +% just approximate RGB equivalents to the official Rubik's Cube +% colors. +% +% Red: 200C #C41E3A (www.perbang.dk/rgb/c41e3a/) +% Green: 347C #009E60 (www.perbang.dk/rgb/009e60/) +% Blue: 293C #0051BA (www.perbang.dk/rgb/0051ba/) +% Orange: 021C "Pantone Orange" #FF5800 (www.perbang.dk/rgb/ff5800/) +% Yellow: 012C "Pantone Yellow" #FFD500 (www.perbang.dk/rgb/ffd500/) +% White: N/A #FFFFFF +% +% Red {HTML}{C41E3A} +% green {HTML}{009E60} +% Blue {HTML}{0051BA} +% Yellow {HTML}{FFD500} +% Orange {HTML}{FF5800} +% White {HTML}{FFFFFF} +%\end{verbatim} +% \end{quote} +% However, we have optimised these prescribed colours very slightly +% for screen \& print use (for example, the yellow was made very +% slightly brighter), and so the actual colours as used by +% the \rubikcube\ package are as follows: +% +% \begin{quote} +%\begin{verbatim} +% \definecolor{R}{HTML}{C41E33} +% \definecolor{G}{HTML}{00BE38} +% \definecolor{B}{HTML}{0051BA} +% \definecolor{Y}{HTML}{FFFF00} +% \colorlet{O}{orange} +% \colorlet{W}{white} +% \colorlet{X}{black!30}% +%\end{verbatim} +% \end{quote} +% Different colours can be allocated to the ROYGBWX letters (using the +% \cmd{\colorlet} command) as required. For example, the standard `red' +% colour could be allocated to the letter R using the command +% \begin{quote} +% \cmd{\colorlet\{R\}\{red\}} +% \end{quote} +% However, it is important to appreciate that the letter codes +% ROYGBWX are `hardwired' into many of the macros in the \rubikcube\ package, +% so don't change these. +% +% +% \section{Rubik face coordinates} +% \label{sec:coordinates} +% +% The coordinate origin of each view of the Rubik cube is located +% at the bottom left corner of the \textsc{front} face, as shown in +% Figure~\ref{fig:cubesquaregraph}. Note also that the bottom left +% corner of the cube itself is at $(-1,-1)$, +% and hence the default height and width of the cube is 4cm. +% +% \begin{figure}[hbt] +% \centering +% \ifpdf +% \includegraphics[height=3cm]{Rubik_doc_figB.pdf} +% \else +% \includegraphics[height=3cm]{Rubik_doc_figB.eps} +% \fi +% +% \parbox{9cm}{\caption{\label{fig:cubesquaregraph}Origin of coordinates +% is at the bottom left corner of the grey \textsc{front} face. +% The bottom left corner of the cube itself is at $(-1,-1)$, +% and hence the default height and width of the 3D-cube is 4cm.}} +% \end{figure} +% +% This is an important feature since knowing the location of the +% origin enables one to easily use any of the TikZ commands +% (eg~\cmd{\draw} and \cmd{\node} commands) to superimpose lines, +% arrows and text etc onto the Rubik cube (see Section~\ref{sec:arrows}). +% +% +% \subsection{Size of cube \cmd{\minipage}} +% +% Since the the default height and width of the 3D-cube is 4cm (see above), +% it follows that the width of the \cmd{\minipage} required for a cube in a TikZ +% picture environment can be easily calculated. For example, if the TikZ +% scale used is $0.5$, then the appropriate width of the required minipage +% is $0.5 \times 4\mbox{cm} = 2\mbox{cm}$. +% +% The default width of the semi-flat cube representation is 10cm, and that of the +% flat cube is 12cm. +% +% \section{Commands} +% +% All |rubikcube| commands assume a 3x3x3 cube by default. +% There are three primary command categories: \cmd{\Draw..} commands +% (which must be used \textit{inside} a TikZ picture environment), +% `parameter-allocation' commands (either inside or outside a TikZ environment), +% and commands which can be used in ordinary text (eg~rotation commands). +% +% A \cmd{\Draw..} command typesets +% either a Rubik cube, cubie or a layer using parameters set or defined via +% previous parameter-allocation commands (eg~face colours, dimensions etc). +% +% +% \subsection{Draw commands} +% +% \DescribeMacro{\DrawRubikCubeXY} +% \DescribeMacro{\DrawCubieXYxyz} +% These commands draw Rubik cubes and single cubies in one of four +% orientations as denoted by the terminal XY viewing-direction code RU (RightUp), +% RD (RightDown), LU (LeftUp), LD (LeftDown). For example, the command +% \begin{quote} +% \cmd{\DrawRubikCubeRU} +% \end{quote} +% will draw a Rubik cube as viewed from the RightUp direction, as +% shown in the following figure. +% +% \bigskip +% +% \begin{minipage}{2.8cm} +% \begin{tikzpicture}[scale=0.7] +% \DrawRubikCubeRU +% \end{tikzpicture} +% \end{minipage} +% \hspace{5mm} +% \begin{minipage}{0.6\textwidth} +%\begin{verbatim} +% \begin{tikzpicture}[scale=0.7] +% \DrawRubikCubeRU +% \end{tikzpicture} +%\end{verbatim} +% \end{minipage} +% +% \bigskip +% +% {\noindent}Note that in the above example all the cubies are displayed +% in the default grey colour, since no Face colours have been specified. +% +% Since \LaTeX\ commands have a maximum limit of only 9 parameters, +% it is necessary to use separate commands +% (`Face' and `Slice' commands---see below) in order to accommodate +% all 27 visible colours of a 3D~Rubik cube. +% +% Since a single cubie has only three visible faces we can include +% colour parameters in \cmd{\DrawCubie} commands. Consequently \cmd{\DrawCubie} +% commands have the format +% \begin{quote} +% \cmd{\DrawCubieXY\{x\}\{y\}\{z\}} +% \end{quote} +% where the XY pair denote the viewing direction as before, and +% the xyz denote the face colours associated with each of the three axes. +% +% For example, the command \cmd{\DrawCubieRU\{O\}\{Y\}\{G\}} draws a +% single cubie as viewed from the RightUp direction, +% with face colours Orange (x-axis), Yellow (y-axis), Green (z-axis), as follows. +% +% \bigskip +% +% \begin{minipage}{1.35cm} +% \begin{tikzpicture}[scale=1] +% \DrawCubieRU{O}{Y}{G} +% \end{tikzpicture} +% \end{minipage} +% \hspace{1cm} +% \begin{minipage}{0.6\textwidth} +%\begin{verbatim} +% \begin{tikzpicture}[scale=1] +% \DrawCubieRU{O}{Y}{G} +% \end{tikzpicture} +%\end{verbatim} +% \end{minipage} +% +% \bigskip +% +% +% +% \begin{figure}[hbt] +% \centering +% \ifpdf +% \includegraphics[height=4cm]{Rubik_doc_figC.pdf} +% \else +% \includegraphics[height=4cm]{Rubik_doc_figC.eps} +% \fi +% \vspace{-5mm}\caption{\label{fig:cubiedydx}Cubie dy dx parameters} +% \end{figure} +% +% \DescribeMacro{\Cubiedy} +% \DescribeMacro{\Cubiedx} +% Minor cubie configuration changes can be effected +% (within a TikZ picture environment) by adjusting the dy and dx +% values ($> 0$; no units) shown in Figure~\ref{fig:cubiedydx} +% via the two commands +% \begin{quote} +% \cmd{\Cubiedy\{\}} \\ +% \cmd{\Cubiedx\{\}} +% \end{quote} +% as shown in the folowing example. +% +% \bigskip +% +% \begin{minipage}{1.7cm} +% \begin{tikzpicture}[scale=1] +% \Cubiedy{0.4} +% \Cubiedx{0.8} +% \DrawCubieRU{O}{Y}{G} +% \end{tikzpicture} +% \end{minipage} +% \hspace{2cm} +% \begin{minipage}{0.6\textwidth} +%\begin{verbatim} +% \begin{tikzpicture}[scale=1] +% \Cubiedy{0.4} +% \Cubiedx{0.8} +% \DrawCubieRU{O}{Y}{G} +% \end{tikzpicture} +%\end{verbatim} +% \end{minipage} +% +% \bigskip +% +% {\noindent}Note that the \textsc{front} of the cubie is a unit square, +% and the graphic origin of the cubie image is at the bottom left corner of the +% \textsc{front} (see also the section on Arrows). +% The default values of dy and dx are 0.4. +% +% \medskip +% +% \DescribeMacro{\textCubieRU} +% \DescribeMacro{\textCubieRD} +% \DescribeMacro{\textCubieLU} +% \DescribeMacro{\textCubieLD} +% For convenience, there are also four (smaller) `text' versions \textCubieRU{O}{Y}{G} +% of the four \cmd{\DrawCubie} commands for +% use in ordinary text, as follows: +% \begin{quote} +% \textCubieRU{O}{Y}{G} \ \ |\textCubieRU{O}{Y}{G}| +% +% \medskip +% +% \textCubieRD{O}{Y}{G} \ \ |\textCubieRD{O}{Y}{G}| +% +% \medskip +% +% \textCubieLU{O}{Y}{G} \ \ |\textCubieLU{O}{Y}{G}| +% +% \medskip +% +% \textCubieLD{O}{Y}{G} \ \ |\textCubieLD{O}{Y}{G}| +% \end{quote} +% Note that the \cmd{\textCubieXY} commands are not influenced by the +% \cmd{\Cubiedy}, \cmd{\Cubiedx} commands as their size is preset for text use. +% +% Other \cmd{\Draw..} commands which we shall meet later are +% \texttt{DrawRubikLayerFace..}, \texttt{DrawRubikLayerSide..}, +% \texttt{DrawNCube..}, \texttt{DrawRubikFlat} and \texttt{DrawRubikCubeFlat}. +% +% +% \subsubsection{\cmd{\draw} error message} +% +% See also section~\ref{drawerrormessage} regarding the error message associated with +% using a \cmd{\Draw...} command \textit{outside} a TikZ picture environment. +% +% +% \subsection{Face commands} +% +% \DescribeMacro{\RubikFaceUp} +% \DescribeMacro{\RubikFaceDown} +% \DescribeMacro{\RubikFaceLeft} +% \DescribeMacro{\RubikFaceRight} +% \DescribeMacro{\RubikFaceFront} +% \DescribeMacro{\RubikFaceBack} +% These commands take nine colour arguments and allocate colours to the +% individual cubies of a Rubik cube face. +% The ordering is isomorphic to the sequence 1--9, i.e.,~numbering the small +% squares 1-3~(top row, left to right), 4-6~(middle row, left to right), +% 7-9~(bottom row, left to right), as follows: +% \begin{quote} +% \fbox{ +% \begin{minipage}{1.6cm} +% \#1 \#2 \#3 +% +% \#4 \#5 \#6 +% +% \#7 \#8 \#9 +% \end{minipage} +% } +% \end{quote} +% Conveniently, \LaTeX\ allows the colour arguments to be separated by spaces +% (e.g.,~separated in groups of three), or even spread across several +% lines (e.g.,~in a square block to resemble a 9-face) in order to +% make the command more visually intuitive, as in the following examples. +% \begin{quote} +%\begin{verbatim} +% \RubikFaceUp{G}{B}{G} {G}{W}{O} {G}{O}{G} +% +% \RubikFaceFront{O}{W}{R} +% {W}{W}{W} +% {G}{W}{G} +% +%\end{verbatim} +% \end{quote} +% +% \DescribeMacro{\RubikFaceUpAll} +% \DescribeMacro{\RubikFaceDownAll} +% \DescribeMacro{\RubikFaceLeftAll} +% \DescribeMacro{\RubikFaceRightAll} +% \DescribeMacro{\RubikFaceFrontAll} +% \DescribeMacro{\RubikFaceBackAll} +% For convenience, each of these commands has an associated +% `\textsc{all}' command which allocates the same colour to all the cubies +% on a 9-face, as follows (only a single colour argument is required): +% +% If you want a particular face to be \textsc{all} grey, then one can +% either omit the particular `Face' command (since the +% default colour is grey), or use a `Face' command specifying the +% colour-code~X; for example, \cmd{\RubikFaceUpAll\{X\}}. +% However, if you do use a Face command, then all of the command's +% colour arguments must be used, as otherwise you will generate a +% `missing parameter' error, and no colour will be +% allocated (i.e.,~you will see a black-hole). +% Use of these commands is shown in the following figure. +% +% \bigskip +% +% \begin{minipage}{2.8cm} +% \begin{tikzpicture}[scale=0.7] +% \RubikFaceUpAll{X} +% \RubikFaceRightAll{R} +% \RubikFaceFront{W}{Y}{G} +% {W}{Y}{G} +% {W}{Y}{G} +% \DrawRubikCubeRU +% \end{tikzpicture} +% \end{minipage} +% \hspace{5mm} +% \begin{minipage}{0.6\textwidth} +%\begin{verbatim} +% \begin{tikzpicture}[scale=0.7] +% \RubikFaceUpAll{X} +% \RubikFaceRightAll{R} +% \RubikFaceFront{W}{Y}{G} +% {W}{Y}{G} +% {W}{Y}{G} +% \DrawRubikCubeRU +% \end{tikzpicture} +%\end{verbatim} +% \end{minipage} +% +% +% \subsection{RubikCubeSolved command} +% +% \DescribeMacro{\RubikCubeSolved} +% This command sets all the face colours to that of a standard `solved' cube +% as shown in the following semi-flat image. +% This command is equivalent to the following set of face commands: +%\begin{verbatim} +% \RubikFaceUpAll{W}% +% \RubikFaceDownAll{Y}% +% \RubikFaceLeftAll{B}% +% \RubikFaceRightAll{G}% +% \RubikFaceFrontAll{O}% +% \RubikFaceBackAll{R}% +%\end{verbatim} +% +% \begin{tikzpicture}[scale=0.6] +% \RubikCubeSolved +% \DrawRubikCubeFlat +% \end{tikzpicture} +% +% Users can easily set their own alternative `solved' face/colour configuration by `renewing' +% this command as follows---remember to include the trailing \% (note that the colours +% ROYGBWX are currently hardwired so don't use a different set of uppercase letters). +%\begin{verbatim} +% \renewcommand{\RubikCubeSolved}{% +% \RubikFaceUpAll{..}% +% \RubikFaceDownAll{..}% +% \RubikFaceLeftAll{..}% +% \RubikFaceRightAll{..}% +% \RubikFaceFrontAll{..}% +% \RubikFaceBackAll{..}% +% } +%\end{verbatim} +% +% +% \subsection{Slice commands} +% +% \DescribeMacro{\RubikSliceTopX} +% \DescribeMacro{\RubikSliceEquatorX} +% \DescribeMacro{\RubikSliceBottomX} +% These three commands allocate the six visible cubie colours associated with a +% \textit{horizontal} slice of a Rubik cube. +% There are three pairs of Slice commands; one pair +% (Left view \& Right view) for each of the horizontal slices Top, Equator, Bottom. +% The six colour arguments associated with a given slice run in sequence +% from left to right irrespective of the viewpoint, eg \#1 \#2 \#3 \#4 \#5 \#6. +% +% Since the viewpoint of the Rubik cube (from the Right or from the Left) +% influences which face the colours are associated with, it is necessary +% to have the view (R or L) represented in the command name. +% +% The format of the `slice' command is shown in the following example. +% The Rubik cube is shown from the LeftDown (LD) view +% and consequently each of the `slice' commands in this +% particular example ends in L, consistent with +% the final \cmd{\DrawRubikCubeLD} command. +% +% \bigskip +% +% \begin{minipage}{2.8cm} +% \centering +% \begin{tikzpicture}[scale=0.7] +% \RubikFaceDownAll{Y} +% \RubikSliceTopL {G}{G}{G} {R}{R}{R} +% \RubikSliceEquatorL{R}{R}{R} {B}{B}{B} +% \RubikSliceBottomL {O}{O}{O} {G}{G}{G} +% \DrawRubikCubeLD +% \end{tikzpicture} +% \end{minipage} +% \hspace{5mm} +% \begin{minipage}{0.6\textwidth} +%\begin{verbatim} +% \begin{tikzpicture}[scale=0.7] +% \RubikFaceDownAll{Y} +% \RubikSliceTopL {G}{G}{G} {R}{R}{R} +% \RubikSliceEquatorL {R}{R}{R} {B}{B}{B} +% \RubikSliceBottomL {O}{O}{O} {G}{G}{G} +% \DrawRubikCubeLD +% \end{tikzpicture} +%\end{verbatim} +% \end{minipage} +% +% +% \subsection{LayerFace \& LayerSide commands} +% \label{sec:layerface} +% +% These commands are mainly intended for drawing final layer +% configurations (ie typically using the yellow face in the \textsc{up} position) +% with or without the associated side faces of the cubies of the top layer. +% +% \subsubsection{LayerFace} +% +% \DescribeMacro{\DrawRubikLayerFace} +% This LayerFace command draws a simple Rubik cube 3x3 face and allocates colours to the 9 cubies. +% The command takes nine ordered colour arguments. +% Their use is illustrated in the following example, which shows a yellow cross configuration. +% +% \bigskip +% +% \begin{minipage}{2.5cm} +% \centering +% \begin{tikzpicture}[scale=0.7] +% \DrawRubikLayerFace{X}{Y}{X} +% {Y}{Y}{Y} +% {X}{Y}{X} +% \end{tikzpicture} +% \end{minipage} +% \hspace{1cm} +% \begin{minipage}{0.6\textwidth} +%\begin{verbatim} +% \begin{tikzpicture}[scale=0.7] +% \DrawRubikLayerFace{X}{Y}{X} +% {Y}{Y}{Y} +% {X}{Y}{X} +% \end{tikzpicture} +%\end{verbatim} +% \end{minipage} +% +% \medskip +% +% \subsubsection{\cmd{\draw} error message} +% +% See also section~\ref{drawerrormessage} regarding the error message associated with +% using a \cmd{\Draw...} command \textit{outside} a TikZ picture environment. +% +% \medskip +% +% \subsubsection{LayerSide} +% +% \DescribeMacro{\DrawLayerSideXYp} +% LayerSide commands draw the associated side colours of +% the top layer as small rectangular sidebars. +% The LayerSide commands adopt a three-letter XYp \textbf{position} notation +% where the XY pair define the location (X:[Left \verb!|! Middle \verb!|! Right]; +% Y:[Top \verb!|! Equator \verb!|! Bottom]) of a particular cubie in the layer face. +% +% \begin{figure}[hbt] +% \centering +% \ifpdf +% \includegraphics[height=3cm]{Rubik_doc_figD.pdf} +% \else +% \includegraphics[height=3cm]{Rubik_doc_figD.eps} +% \fi +% \vspace{-5mm}\caption{\label{fig:facenotation}LayerSide letter-codes } +% \end{figure} +% +% Since corner cubies have two side faces, the `p' parameter +% (p:[x\verb!|!y]) is required to denote the directional `position' of +% the cubie side-face relative to the cubicle XY position +% (x indicates adjacent along the x-axis, and y indicates adjacent along the y-axis). +% Since edge cubies have only one side face, the `p' parameter is optional +% (for consistency), since it is not strictly necessary. +% +% \medskip\noindent\textbf{Commands}: \ +% Various different LayerSide commands are available: those for +% drawing a single colour side bar, and others for facilitating +% drawing all 12 side bars. +% For example, \textit{either} of the following commands +% +% \begin{quote} +%\begin{verbatim} +% \DrawRubikLayerSideLE{G} +% \DrawRubikLayerSideLEx{G} +%\end{verbatim} +% \end{quote} +% draws a single small vertical green rectangle +% \begin{tikzpicture}[scale=0.5] +% \DrawRubikLayerSideLEx{G} +% \end{tikzpicture} +% just to the left of the Left Equator (LE) square of the 9-face. +% The following commands draw all three side bars of a given side (Top, Bottom, Left, Right) +% \begin{quote} +%\begin{verbatim} +% \DrawRubikLayerSideT{}{}{} +% \DrawRubikLayerSideB{}{}{} +% \DrawRubikLayerSideL{}{}{} +% \DrawRubikLayerSideR{}{}{} +%\end{verbatim} +% \end{quote} +% where the T and B forms require the colour parameters to be in left-right +% horizontal order (eg, left, middle, right), +% while the L and R forms require the colour parameters to be in top-down +% vertical order (eg, top, equator, bottom). +% Note that this means that the colour parameters of the L and R commands +% can (if required) then be positioned intuitively (vertically) as follows: +% \begin{quote} +%\begin{verbatim} +% \DrawRubikLayerSideL{} +% {} +% {} +%\end{verbatim} +% \end{quote} +% Extending this idea, the L and R forms are combined in the LR command, +% which takes six colour arguments ordered in left-right pairs, +% \begin{quote} +%\begin{verbatim} +% \DrawRubikLayerSideLR{}{} {}{} {}{} +%\end{verbatim} +% \end{quote} +% so that they can also be written vertically as left-right pairs. +% Use of these commands is shown in the following two examples. +% +% \bigskip +% +% \begin{minipage}{2.5cm} +% \centering +% \begin{tikzpicture}[scale=0.7] +% +% +% \DrawRubikLayerFace{X}{Y}{X} +% {Y}{Y}{Y} +% {X}{Y}{X} +% +% \DrawRubikLayerSideLTy{B} +% \DrawRubikLayerSideLTx{O} +% \DrawRubikLayerSideLE{G} +% \DrawRubikLayerSideR{O} +% {B} +% {R} +% \DrawRubikLayerSideB{R}{G}{O} +% \node (LT) at (0.5, 2.5) [red]{\small\textsf{LT}}; +% \node (LE) at (0.5, 1.5) [red]{\small\textsf{LE}}; +% \end{tikzpicture} +% \end{minipage} +% \hspace{1cm} +% \begin{minipage}{0.6\textwidth} +%\begin{verbatim} +% \begin{tikzpicture}[scale=0.7] +% \DrawRubikLayerFace{X}{Y}{X} +% {Y}{Y}{Y} +% {X}{Y}{X} +% +% \DrawRubikLayerSideLTy{B} +% \DrawRubikLayerSideLTx{O} +% \DrawRubikLayerSideLE{G} +% +% \DrawRubikLayerSideR{O}{B}{R} +% \DrawRubikLayerSideB{R}{G}{O} +% +% \node (LT) at (0.5, 2.5) +% [red]{\small\textsf{LT}}; +% \node (LE) at (0.5, 1.5) +% [red]{\small\textsf{LE}}; +% \end{tikzpicture} +%\end{verbatim} +% \end{minipage} +% +% \bigskip +% +% \begin{minipage}{2.5cm} +% \centering +% \begin{tikzpicture}[scale=0.7] +% +% \DrawRubikLayerFace{G}{Y}{R} +% {Y}{Y}{Y} +% {B}{Y}{Y} +% +% \DrawRubikLayerSideT {Y}{B}{B} +% \DrawRubikLayerSideLR{R} {Y} +% {R} {O} +% {Y} {O} +% \DrawRubikLayerSideB {O}{G}{G} +% +% \end{tikzpicture} +% \end{minipage} +% \hspace{1cm} +% \begin{minipage}{0.6\textwidth} +%\begin{verbatim} +% \begin{tikzpicture}[scale=0.7] +% \DrawRubikLayerFace{G}{Y}{R} +% {Y}{Y}{Y} +% {B}{Y}{Y} +% +% \DrawRubikLayerSideT {Y}{B}{B} +% \DrawRubikLayerSideLR{R} {Y} +% {R} {O} +% {Y} {O} +% \DrawRubikLayerSideB {O}{G}{G} +% \end{tikzpicture} +%\end{verbatim} +% \end{minipage} +% +% \bigskip +% +% The default values (size) of the sidebars are as follows: +% width (0.3), length(1) and separation from the square face (0.3). +% Note that the default value of the length of a cubie side is 1. +% These sidebar values (decimal values $\geq 0$; no units) can be +% changed from their default values using the three commands. +% \begin{quote} +% \cmd{\RubikSideBarWidth\{\}}\\ +% \cmd{\RubikSideBarLength\{\}}\\ +% \cmd{\RubikSideBarSep\{\}} +% \end{quote} +% Values set in the document preamble will apply globally, while values +% set within a TikZ picture environment will apply only locally to that +% particular environment, as shown in the following example where we have +% set both the sidebar width and length to 0.7. +% +% \bigskip +% +% \begin{minipage}{2.5cm} +% \centering +% \begin{tikzpicture}[scale=0.7] +% +% +% \DrawRubikLayerFace{X}{Y}{X} +% {Y}{Y}{Y} +% {X}{Y}{X} +% +% \RubikSideBarWidth{0.7} +% \RubikSideBarLength{0.7} +% \DrawRubikLayerSideMTy{G} +% \end{tikzpicture} +% \end{minipage} +% \hspace{1cm} +% \begin{minipage}{0.6\textwidth} +%\begin{verbatim} +% \begin{tikzpicture}[scale=0.7] +% \DrawRubikLayerFace{X}{Y}{X} +% {Y}{Y}{Y} +% {X}{Y}{X} +% \RubikSideBarWidth{0.7} +% \RubikSideBarLength{0.7} +% \DrawRubikLayerSideMTy{G} +% \end{tikzpicture} +%\end{verbatim} +% \end{minipage} +% +% \bigskip +% +% Note also that changing the sidebar-width or sidebar-separation +% values may well also change the surrounding white-space (use \cmd{\fbox} +% to visualise this) and may therefore require some fine-tuning of the +% minipage width setting in order to optimise appearance. +% +% Since the \textsc{front} face drawn using the \cmd{\DrawRubikCube} command is +% identical with that drawn using the \cmd{\DrawLayerFace} command it +% follows that LayerSide commands can also be used in conjunction with +% the \textsc{front} face drawn using \cmd{\DrawRubikCube} command, as +% shown in the following example. +% +% \bigskip +% +% \begin{minipage}{2.5cm} +% \centering +% \begin{tikzpicture}[scale=0.7] +% \RubikFaceUp {X}{W}{X}% +% {W}{W}{W}% +% {X}{W}{X}% +% +% \RubikFaceFront{O}{O}{X}% +% {O}{O}{X}% +% {X}{X}{W}% +% +% \RubikFaceRight{X}{G}{G}% +% {X}{G}{G}% +% {G}{X}{X}% +% \DrawRubikCubeRU +% +% \DrawRubikLayerSideL{O}{B}{R} +% \DrawRubikLayerSideB{R}{G}{O} +% \end{tikzpicture} +% \end{minipage} +% \hspace{1cm} +% \begin{minipage}{0.6\textwidth} +%\begin{verbatim} +% \begin{tikzpicture}[scale=0.7] +% \RubikFaceUp {X}{W}{X}% +% {W}{W}{W}% +% {X}{W}{X}% +% +% \RubikFaceFront{O}{O}{X}% +% {O}{O}{X}% +% {X}{X}{W}% +% +% \RubikFaceRight{X}{G}{G}% +% {X}{G}{G}% +% {G}{X}{X}% +% \DrawRubikCubeRU +% +% \DrawRubikLayerSideL{O}{B}{R} +% \DrawRubikLayerSideB{R}{G}{O} +% \end{tikzpicture} +%\end{verbatim} +% \end{minipage} +% +% \bigskip +% +% {\noindent}Note that since using a left or a right \cmd{\DrawRubikLayerSide} +% command in conjunction with a \cmd{\DrawRubikCube} command will necessarily +% increase the width of the image, one may also have to adjust the width of +% the associated minipage. +% +% +% \subsection{Flat commands} +% \label{sec:flatcommands} +% +% \DescribeMacro{\DrawRubikFlat} +% \DescribeMacro{\DrawRubikCubeFlat} +% Flat commands are used to draw `flat' representations of the cube. +% The most standard format, which is generated by the command \cmd{\DrawRubikFlat}, +% is shown in the following example. +% +% \bigskip +% +% \begin{minipage}{0.4\textwidth} +% \centering +% \begin{tikzpicture}[scale=0.4] +% \RubikCubeSolved +% +% \DrawRubikFlat +% \node (U) at (1.5, 4.5) [black]{\small\textsf{U}}; +% \node (D) at (1.5, -1.5) [black]{\small\textsf{D}}; +% \node (L) at (-1.5, 1.5) [black]{\small\textsf{L}}; +% \node (R) at (4.5, 1.5) [black]{\small\textsf{R}}; +% \node (F) at (1.5, 1.5) [black]{\small\textsf{F}}; +% \node (B) at (7.5, 1.5) [black]{\small\textsf{B}}; +% \end{tikzpicture} +% \noindent\strut\hspace{5mm}\texttt{$\backslash$DrawRubikFlat} +% \end{minipage} +% \begin{minipage}{5cm} +%\begin{verbatim} +% \begin{tikzpicture}[scale=0.4] +% \RubikCubeSolved +% \DrawRubikFlat +% \end{tikzpicture} +%\end{verbatim} +% \end{minipage} +% +% \bigskip +% +% The addition of text (numbers or letters) in the faces is +% straightforward---the origin of the 1-unit grid is located at the +% bottom left corner of the front face (green here). +% The letters were placed using the following TikZ code: +% +%\begin{verbatim} +% \node (U) at (1.5, 4.5) [black]{\small\textsf{U}}; +% \node (D) at (1.5, -1.5) [black]{\small\textsf{D}}; +% \node (L) at (-1.5, 1.5) [black]{\small\textsf{L}}; +% \node (R) at (4.5, 1.5) [black]{\small\textsf{R}}; +% \node (F) at (1.5, 1.5) [black]{\small\textsf{F}}; +% \node (B) at (7.5, 1.5) [black]{\small\textsf{B}}; +%\end{verbatim} +% +% {\noindent}An interesting `semi-flat' alternative format uses the standard +% view of the cube and appends the three hidden sides +% (see Rokicki \textit{etal.}, 2013), which is generated by the +% command \cmd{\DrawRubikCubeFlat} as follows. +% +% \bigskip +% +% \begin{minipage}{5cm} +% \begin{tikzpicture}[scale=0.5] +% \RubikCubeSolved +% \DrawRubikCubeFlat +% \end{tikzpicture} +% \end{minipage} +% \begin{minipage}{5cm} +%\begin{verbatim} +% \begin{tikzpicture}[scale=0.5] +% \RubikCubeSolved +% \DrawRubikCubeFlat +% \end{tikzpicture} +%\end{verbatim} +% \end{minipage} +% +% \medskip +% +% \subsubsection{\cmd{\draw} error message} +% +% See also section~\ref{drawerrormessage} regarding the error message associated with +% using a \cmd{\Draw...} command \textit{outside} a TikZ picture environment. +% +% +% \section[NCube]{NCube (NxNxN)} +% \label{sec:NCube} +% +% \DescribeMacro{\DrawNCubeAll} +% An `NCube' is a solved NxNxN cube drawn from the RU direction; +% (ie.~only shows faces \textsc{up}, \textsc{front}, \textsc{right}). +% The cubie colours of each face are All the same. +% \begin{quote} +% \cmd{\DrawNCubeAll\{N\}\{Xcolour\}\{Ycolour\}\{Zcolour\}}. +% \end{quote} +% This command takes four ordered parameters (N, X, Y, Z)---the number +% (integer; $N>0$) of cubies along an edge, followed by three face +% colours in XYZ order. +% Since the viewpoint is only from the RU direction, the three colour +% parameters are: X(Right), Y(Up), Z(Front). +% +% \bigskip +% +% \begin{minipage}{0.4\textwidth} +% \begin{tikzpicture}[scale=0.5] +% \DrawNCubeAll{5}{O}{Y}{G} +% \end{tikzpicture} +% \end{minipage} +% \begin{minipage}{0.5\textwidth} +%\begin{verbatim} +% \begin{tikzpicture}[scale=0.5] +% \DrawNCubeAll{5}{O}{Y}{G} +% \end{tikzpicture} +%\end{verbatim} +% \end{minipage} +% +% \medskip +% +% \subsubsection{\cmd{\draw} error message} +% +% See also section~\ref{drawerrormessage} regarding the error message associated with +% using a \cmd{\Draw...} command \textit{outside} a TikZ picture environment. +% +% +% \section{Arrows} +% \label{sec:arrows} +% +% The \rubikcube\ package does not offer any special commands for drawing +% arrows since it is straightforward just to include the appropriate TikZ +% `draw' commands in the \texttt{tikzpicture} environment. +% +% In order to facilitate using the standard TikZ `draw' commands both +% the RubikCubeFaceFront and LayerFace commands have the coordinate origin +% at the bottom left corner, and draw `faces' consisting of 9~unit-squares +% in a 3x3 grid, as shown in Figure~\ref{fig:facegraph}. +% Consequently the start and finish coordinates for any arrow or line are +% easy to determine. +% +% \begin{figure}[hbt] +% \centering +% \ifpdf +% \includegraphics[height=3cm]{Rubik_doc_figE.pdf} +% \else +% \includegraphics[height=3cm]{Rubik_doc_figE.eps} +% \fi +% \vspace{-5mm}\caption{\label{fig:facegraph}RubikCubeFaceFront and RubikLayerFace coordinates} +% \end{figure} +% +% Thus, to draw an `ultra thick' green arrow from the centre of cubie LB +% (say point A) to the centre of cubie ME +% (say point B)---see Figure~\ref{fig:facegraph}---we first determine +% the coordinates of $A$ \& $B$, namely $A (0.5, 0.5)$, $B (1.5, 1.5)$. +% Now, to draw the arrow from $A$ to $B$ we just include the following TikZ +% command in the \texttt{tikzpicture} environment. +% \begin{quote} +%\begin{verbatim} +% \draw[->,ultra thick,color=green] (0.5,0.5) -- (1.5, 1.5); +%\end{verbatim} +% \end{quote} +% The following example shows the cubie changes in the \textsc{up} face +% generated by the rotation sequence \rrF\rrR\rrU\rrRp\rrUp\rrFp. +% The magenta arrows indicate movement \textit{with} cubie rotations, +% while the black arrow indicates movement \textit{without} rotation. +% +% This example also highlights the fact that when there are several arrows, +% the start and end positions often need to be offset slightly away from cubie centres. +% +% \bigskip +% \noindent +% \begin{minipage}{2.5cm} +% \centering +% \begin{tikzpicture}[scale=0.7] +% +% \DrawRubikLayerFaceAll{W} +% +% \draw[->,thick,color=magenta] (1.5,0.5) -- (2.4, 1.4); +% \draw[->,thick] (2.5,1.5) -- (1.6, 2.4); +% \draw[->,thick,color=magenta] (1.3, 2.3) -- (1.3, 0.5); +% \draw[<->,thick,color=magenta] (0.5,2.6) -- (2.5, 2.6); +% \draw[<->,thick,color=magenta] (0.5,0.3) -- (2.5, 0.3); +% \end{tikzpicture} +% \end{minipage} +% \begin{minipage}{0.6\textwidth} +%\begin{verbatim} +% \begin{tikzpicture}[scale=0.7] +% \DrawRubikLayerFaceAll{W} +% \draw[->,thick,color=magenta] (1.5,0.5) -- (2.4, 1.4); +% \draw[->,thick] (2.5,1.5) -- (1.6, 2.4); +% \draw[->,thick,color=magenta] (1.3, 2.3) -- (1.3, 0.5); +% \draw[<->,thick,color=magenta] (0.5,2.6) -- (2.5, 2.6); +% \draw[<->,thick,color=magenta] (0.5,0.3) -- (2.5, 0.3); +% \end{tikzpicture} +%\end{verbatim} +% \end{minipage} +% +% \bigskip +% Since the coordinates shown in Figure~\ref{fig:facegraph} extend +% outwards in all directions, they can also be used as a guide for drawing +% arrows (or other structures) outside this 3x3 `face' square. This approach +% is shown in the following example, where we have changed the TikZ scale +% to~0.4 in order to generate a small figure, and also reduced the minipage +% width to minimise surrounding white-space, in order to facilitate placing the +% figure and the code side-by-side. +% +% \bigskip +% +% \noindent +% \begin{minipage}{1.8cm} +% \centering +% \begin{tikzpicture}[scale=0.4] +% +% \DrawRubikLayerFace{G}{Y}{R}% +% {Y}{Y}{Y}% +% {B}{Y}{Y}% +% +% \DrawRubikLayerSideT {Y}{B}{B} +% \DrawRubikLayerSideLR{R} {Y} +% {R} {O} +% {Y} {O} +% \DrawRubikLayerSideB {O}{G}{G} +% +% \draw[->,ultra thick,color=green] (0.5,5) -- (0.5, 4); +% \end{tikzpicture} +% \end{minipage} +% \begin{minipage}{0.6\textwidth} +%\begin{verbatim} +% \begin{minipage}{1.8cm} +% \centering +% \begin{tikzpicture}[scale=0.4] +% \DrawRubikLayerFace{G}{Y}{R} +% {Y}{Y}{Y} +% {B}{Y}{Y} +% +% \DrawRubikLayerSideT {Y}{B}{B} +% \DrawRubikLayerSideLR{R} {Y} +% {R} {O} +% {Y} {O} +% \DrawRubikLayerSideB {O}{G}{G} +% \draw[->,ultra thick,color=green] (0.5,5) -- (0.5, 4); +% \end{tikzpicture} +% \end{minipage} +%\end{verbatim} +% \end{minipage} +% +% \bigskip +% +% {\noindent}The following example shows an arrow on the Rubik cube. +% The origin of coordinates is at the bottom left corner of the +% \textsc{front} face (see Section~\ref{sec:coordinates}). +% +% \bigskip +% \noindent +% \begin{minipage}{2.8cm} +% \centering +% \begin{tikzpicture}[scale=0.7] +% +% \RubikFaceFront{O}{O}{O} +% {O}{O}{X} +% {X}{O}{X} +% +% \RubikFaceRight{G}{G}{G} +% {X}{G}{G} +% {X}{X}{X} +% +% \RubikFaceDown {X}{G}{X} +% {X}{Y}{X} +% {X}{X}{X} +% +% \DrawRubikCubeRD +% \draw[ultra thick,->,color=blue] +% (1.5,0.5) -- (2.5, 1.5); +% \end{tikzpicture} +% \end{minipage} +% \hspace{1cm} +% \begin{minipage}{0.6\textwidth} +%\begin{verbatim} +% \begin{tikzpicture}[scale=0.7] +% +% \RubikFaceFront{O}{O}{O} +% {O}{O}{X} +% {X}{O}{X} +% +% \RubikFaceRight{G}{G}{G} +% {X}{G}{G} +% {X}{X}{X} +% +% \RubikFaceDown {X}{G}{X} +% {X}{Y}{X} +% {X}{X}{X} +% +% \DrawRubikCubeRD +% \draw[ultra thick,->,color=blue] +% (1.5,0.5) -- (2.5, 1.5); +% \end{tikzpicture} +%\end{verbatim} +% \end{minipage} +% +% +% +% \section{Final example} +% +% We now present, as a final example, the code used to draw the front page figure: +% +% \bigskip +% \hfil +% \begin{minipage}{2cm} +% \centering +% \begin{tikzpicture}[scale=0.4] +% \RubikCubeSolved +% \DrawRubikCubeRU +% \end{tikzpicture} +% \end{minipage} +% \begin{minipage}{2cm} +% \centering +% \begin{tikzpicture}[scale=0.4] +% \DrawRubikLayerFaceAll{W} +% \DrawRubikLayerSideT {R}{R}{R} +% \DrawRubikLayerSideLR{B} {G} +% {B} {G} +% {B} {G} +% \DrawRubikLayerSideB {O}{O}{O} +% \draw[thick,->,color=magenta] (1.5,0.5) -- (2.4, 1.4); +% \draw[thick,->] (2.5,1.5) -- (1.6, 2.4); +% \draw[thick,->,color=magenta] (1.3, 2.3) -- (1.3, 0.5); +% \draw[thick,<->, color=blue] (0.5,2.6) -- (2.5, 2.6); +% \draw[thick,<->, color=blue] (0.5,0.3) -- (2.5, 0.3); +% \end{tikzpicture} +% \end{minipage} +% \RubikF\RubikR\RubikU\RubikRp\RubikUp\RubikFp\ +% \ \ $\longrightarrow$ +% \begin{minipage}{2cm} +% \centering +% \begin{tikzpicture}[scale=0.4] +% \DrawRubikLayerFace{W}{W}{B} +% {W}{W}{O} +% {W}{R}{B} +% \DrawRubikLayerSideT {G}{G}{R} +% \DrawRubikLayerSideLR{R} {W} +% {B} {W} +% {O} {W} +% \DrawRubikLayerSideB {G}{W}{O} +% \end{tikzpicture} +% \end{minipage} +% \hfil +% +% \bigskip +% +%\begin{verbatim} +% \hfil +% \begin{minipage}{2cm} +% \centering +% \begin{tikzpicture}[scale=0.4] +% \RubikCubeSolved +% \DrawRubikCubeRU +% \end{tikzpicture} +% \end{minipage} +% \begin{minipage}{2cm} +% \centering +% \begin{tikzpicture}[scale=0.4] +% \DrawRubikLayerFaceAll{W} +% \DrawRubikLayerSideT {R}{R}{R} +% \DrawRubikLayerSideLR{B} {G} +% {B} {G} +% {B} {G} +% \DrawRubikLayerSideB {O}{O}{O} +% \draw[thick,->,color=magenta] (1.5,0.5) -- (2.4, 1.4); +% \draw[thick,->] (2.5,1.5) -- (1.6, 2.4); +% \draw[thick,->,color=magenta] (1.3, 2.3) -- (1.3, 0.5); +% \draw[thick,<->, color=blue] (0.5,2.6) -- (2.5, 2.6); +% \draw[thick,<->, color=blue] (0.5,0.3) -- (2.5, 0.3); +% \end{tikzpicture} +% \end{minipage} +% \RubikF\RubikR\RubikU\RubikRp\RubikUp\RubikFp\ +% \ \ $\longrightarrow$ +% \begin{minipage}{2cm} +% \centering +% \begin{tikzpicture}[scale=0.4] +% \DrawRubikLayerFace{W}{W}{B} +% {W}{W}{O} +% {W}{R}{B} +% \DrawRubikLayerSideT {G}{G}{R} +% \DrawRubikLayerSideLR{R} {W} +% {B} {W} +% {O} {W} +% \DrawRubikLayerSideB {G}{W}{O} +% \end{tikzpicture} +% \end{minipage} +% \hfil +%\end{verbatim} +% +% +% \section{Known issues \& shortcomings} +% +% Please contact the authors regarding any errors, shortcomings and ideas etc. +% +% \begin{itemize} +% +% \item The rotation hieroglyphs are optimised for a 10pt font, and do +% not scale with document font size. This may be implemented in the future, +% and will require careful mapping of the TikZ scale factor to font point +% size, or just replacing all length parameters by a multiple of \cmd{\em} or \cmd{\en} etc. +% At the moment it seems to work reasonably well with both 11pt and 12pt fonts. +% +% \item The sidebars can only be drawn in relation to either a Front face of a +% cube, or a LayerFace. +% +% \item The \textsc{front} face as drawn using the \cmd{\DrawNCubeAll} macro does +% not have its origin at the bottom left corner. Not regarded as a significant +% problem since this macros is really just a cosmetic fix/tool for drawing a +% neat NxNxN cube. +% +% \end{itemize} +% +% +% \section{Acknowledgements} +% +% We would like to thank Peter Bartal and Peter Grill for useful ideas and +% suggestions. We have built on some of the initial +% ideas of Bartal (2011), and have cited these instances in the code documentation. +% +% +% +% \section{Future supporting packages} +% +% Since Rubik-type cubes currently exist in a variety of sizes (from 2x2x2 to 11x11x11) +% it is possible that similar packages dealing with cubes of other sizes may be made in +% the future. Supporting tools may also be made +% using various programming languages, eg Lua etc. Consequently the naming of such +% packages and tools, and even the associated CTAN directories, needs to be given +% some thought in order to prevent possible confusion. +% We suggest, therefore, the following directory structure for CTAN might be appropriate. +% +% $$ +% \textsc{rubik} \left\{ +% \begin{array}{l} +% \mbox{rubiktools}\\ +% \mbox{rubik2x}\\ +% \mbox{rubik3x}\\ +% \ldots\\ +% \mbox{rubik11x}\\ +% \end{array} +% \right.\\ +% $$ +% +% \section{References} +% +% +% \begin{itemize} +% +% +% \item Bartal P (2011) +% +% \url{http://tex.stackexchange.com/questions/34482/} +% +% \item Chen JJ (2004). Group theory and the Rubik's cube. +% \url{http://www.math.harvard.edu/~jjchen/docs/Group_Theory_and_the_Rubik's_Cube.pdf} +% +% \item Demaine ED, Demaine ML, Eisenstat S, Lubiw A and Winslow A (2011). +% Algorithms for solving Rubik's cubes. +% \url{http://www.arxiv.org/abs/1106.5736/} +% +% \item Garfath-Cox, A (1981). \textit{The cube}, (Bolden Publishing Co., +% East Molesey, Surrey) pp.32. [copy in British Library] +% +% +% \item Duvoid T (2010). +% M\'{e}thode simple pour remonter le Rubik's cube. +% \newline\url{http://duvoid.fr/rubik/rubik-debutant-couleurs.pdf} +% \newline\url{http://duvoid.fr/rubik/sources/notation_en.eps} +% \newline\url{http://duvoid.fr/rubik/sources/rubik-debutant-couleurs.tex} +% +% \item Duvoid T (2011). +% M\'{e}thode avanc\'{e}e pour remonter le Rubik's cube. +% \newline\url{http://duvoid.fr/rubik/rubik-friddrich-couleurs.pdf} +% \newline\url{http://duvoid.fr/rubik/sources/rubik-friddrich-couleurs.tex} +% +% \item Fridrich J. \ \ \url{http://www.ws.binghamton.edu/fridrich/}. +% See the useful `notation' section on the `Pretty patterns' webpage at +% \url{http://www.ws.binghamton.edu/fridrich/ptrns.html}. +% +% \item Golomb SW (1982). Rubik's cube and quarks. \textit{American Scientist}; +% \underline{70}, pp.~257--259. + +% +% \item Gymrek M (2009). The mathematics of toys and games. +% \newline\url{http://wen.mit.edu/sp.268/www/rubik.pdf} +% +% \item Hofstadter D (1981). Rubik cube. \textit{Scientific American}; March issue. +% +% \item Hutchings M (2011). The mathematics of Rubik's cube (slide presentation). +% \url{http://math.berkeley.edu/~hutching/} +% +% +% \item Jelinek website (Jelinek J). Rubik's cube solution method. \url{http://rubikscube.info/} +% +% \item Joyner D (2008). \textit{Adventures in group theory: +% Rubik's cube, Merlin's machine and other mathematical toys}. +% \url{http://mike.verdone.ca/media/rubiks.pdf} +% +% +% \item Kriz J and Siegel P (2008). Rubik's cube-inspired puzzles demonstrate math's simple groups. +% \textit{Scientific American}; [? July 2008] +% +% +% \item Learntofish (2010). +% \url{http://learntofish.wordpress.com/2010/10/08/20-moves-suffice-to-solve-the-rubiks-cube/} +% +% \item Randelhofer website (Randelhofer W). Pretty patterns. +% \url{http://www.randelhofer.ch/rubik/patterns/U080.01.html} +% +% \item Reid M. \ \ \url{http://www.math.ucf.edu/~reid/Rubik/} +% +% +% \item Rokicki T, Kociemba H, Davidson M and Dethridge J (2013). The diameter of the +% Rubik's cube is twenty. \textit{SIAM.\ J.\ Discrete Math.}, \underline{27}, 1082--1105. +% (\url{http://tomas.rokicki.com/rubik20.pdf}) +% +% \item Rubik's cube. See Section on notation. +% \newline\url{http://en.wikipedia.org/wiki/Rubik's_Cube} +% +% \item Speedsolving website. \url{www.speedsolving.com/} +% +% \item Tran R (2005). A mathematical approach to solving Rubik's cube. +% \url{http://www.math.ubc.ca/~cass/courses/m308/projects/rtran/rtran.pdf} +% +% +% \item Treep A and Waterman M (1987). Marc Waterman's Algorithm, Part 2. +% \textit{Cubism For Fun 15}, p.~10 (Nederlandse Kubus Club) +% [cited from \textit{Wikipedia} (Rubik's cube)] + +% +% \item Vandenbergh L. \ \ \textsc{cubezone} (\url{http://www.cubezone.be}). +% +% \item WCA (2012). World Cube Association Regulations. See Section~12 for notation. +% \url{http://www.worldcubeassociation.org/regulations.htm} +% +% +% \end{itemize} +% +% +% +% ^^A ================================================== +% \StopEventually{\PrintIndex} +% +% +% +% \section{The code} +% +% The conventions we adopt regarding capital letters and the +% XYZ argument ordering are detailed in Section~\ref{sec:conventions}. +% +% +% \subsection{ Package heading} +% +% \begin{macrocode} +%<*rubikcube> +\def\RCfileversion{2.0}% +\def\RCfiledate{2014/01/20}% +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{rubikcube}[\RCfiledate\space (v\RCfileversion)] +% \end{macrocode} +% The package requires TikZ +% \begin{macrocode} +\@ifpackageloaded{tikz}{}{% + \typeout{---rubikcube requires the TikZ package.}% + \RequirePackage{tikz}}% +% \end{macrocode} +% +% \begin{macro}{\rubikcube} +% First we create a suitable logo +% \begin{macrocode} +\newcommand{\rubikcube}{\textsf{rubikcube}}% +% \end{macrocode} +% \end{macro} +% +% +% \subsection{ Some useful internal commands} +% +% \begin{macro}{\@rr} +% \begin{macro}{\@rrp} +% \begin{macro}{\@rrw} +% \begin{macro}{\@rrwp} +% \begin{macro}{\@rrs} +% \begin{macro}{\@rrsp} +% \begin{macro}{\@rra} +% \begin{macro}{\@rrap} +% \begin{macro}{\@xyzh} +% \begin{macro}{\@xyzhp} +% \begin{macro}{\@xyzRubik} +% \begin{macro}{\@xyzRubikp} +% \begin{macro}{\@SquareLetter} +% \begin{macro}{\@hRubik} +% Internal commands. These are used to generate the +% prime, w, w-prime, s, s-prime, a, a-prime +% rotation commands. The \cmd{\@xyz..} commands are used to generate the +% x,y,z,u,d,l,r,f,b, and their prime rotation commands. +% The \cmd{\@SquareLetter} command is used to form the separate square hieroglyph form +% used for rotations with no \textsc{front} representation +% (eg B.., Fs, Fsp, Fa, Fap, S, Sp, Sf, Sfp, Sb, Sbp). +% The \cmd{\@hRubik} is the vertical shift used to raise the box carying the rotation +% letter-code in \cmd{\Rubik..} commands not visible from the front. +% +% The idea is that by using these internal +% tools we will be able to more easily standardise the size and position +% of all the various glyphs. However, these internal tools are currently +% only partially implemented (= work in progress). +% \begin{macrocode} +\newcommand{\@rr}[1]{\textbf{\textsf{#1}}} +\newcommand{\@rrp}[1]{\textbf{\textsf{#1}$^\prime$}} +\newcommand{\@rrw}[1]{\textbf{\textsf{#1\footnotesize{w}}}} +\newcommand{\@rrwp}[1]{\textbf{\textsf{#1\footnotesize{w}}$^\prime$}} +\newcommand{\@rrs}[1]{\textbf{\textsf{#1\footnotesize{s}}}} +\newcommand{\@rrsp}[1]{\textbf{\textsf{#1\footnotesize{s}}$^\prime$}} +\newcommand{\@rra}[1]{\textbf{\textsf{#1\footnotesize{a}}}} +\newcommand{\@rrap}[1]{\textbf{\textsf{#1\footnotesize{a}}$^\prime$}} +\newcommand{\@xyzh}[1]{\textbf{[\textsf{#1}]}\,} +\newcommand{\@xyzhp}[1]{\textbf{[\textsf{#1}$^\prime$]}\,} +\newcommand{\@xyzRubik}[1]{\raisebox{3.45pt}{\textbf{[\textsf{#1}]}}} +\newcommand{\@xyzRubikp}[1]{\raisebox{3.45pt}{\textbf{[\textsf{#1}$^\prime$]}}} +\newcommand{\@SquareLetter}[1]{\setlength\fboxsep{2.5pt}\fboxrule=0.8pt% + \fbox{\rule[-1pt]{0pt}{8.5pt}\raisebox{-0.5pt}{#1}}} +\newlength\@hRubik% +\setlength{\@hRubik}{0.185cm}% +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsection{ Colours} +% +% These colour allocations were initially defined by Peter Bartal (2011). +% Now modified so that grey is defined as {black!30}. +% +% \begin{macrocode} +\definecolor{R}{HTML}{C41E33}% +\definecolor{G}{HTML}{00BE38}% +\definecolor{B}{HTML}{0051BA}% +\definecolor{Y}{HTML}{FFFF00}% +\colorlet{X}{black!30}% grey +\colorlet{O}{orange}% +\colorlet{W}{white}% +% \end{macrocode} +% +% \subsection{ Face commands} +% +% Cubeface notation = U,D,L,R,F,B (Singmaster) +% {\newline}Cubiesquare notation = t,b,l,r = top,bottom,left,right. +% Need to use t,b for cubiesquares to avoid confusion with cubeFace notation. +% Number the cubiesquares on a face 1-9, starting topleft, ending bottom right, as follows: +% {\newline}\strut\hspace{1cm}Up row \ \ \ \ \ (1,2,3) = tl, tm, tr +% {\newline}\strut\hspace{1cm}middle row (4,5,6) = ml, mm, mr +% {\newline}\strut\hspace{1cm}bottom row (7,8,9) = bl, bm, br +% +% \begin{macro}{\RubikFaceUp} +% \begin{macro}{\RubikFaceDown} +% \begin{macro}{\RubikFaceLeft} +% \begin{macro}{\RubikFaceRight} +% \begin{macro}{\RubikFaceFront} +% \begin{macro}{\RubikFaceBack} +% These 5 commands allocate a colour to each of the 9 cubiesquares in the +% specified face (Up, Down, Left, Right, Front, Back). Each command takes 9 arguments +% (colour codes) in the order 1--9 as specified above. +% +% {\noindent}For example, \cmd{\RubikFaceUp\{R\}\{O\}\{Y\} \{G\}\{B\}\{W\} \{X\}\{R\}\{G\}} +% +% +% {\noindent}Each of the 9 \cmd{\def\{\}} commands below allocates one colour +% to a specific cubiesquare, using a simple three-letter encoding. +% Each letter is an initial letter of the words Up, Down, Left, Right, Front, Back, +% left, middle, right, top, middle, bottom. +% For example in the command \cmd{\Urt\{\#1\}} +% the U stands for the Up face of the cube, while the \texttt{rt} stands +% for the ``right-top'' cubiesquare on this face. Note that the order +% of the two lowercase letters (in this case \texttt{rt}) are written +% in the $x,y$ order; ie the first of the two lowercase letters relates to the $x$ +% direction (either left, middle, or right), while the second lowercase letter +% relates to the $y$ direction (either top, middle, or bottom) +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macrocode} +\newcommand{\RubikFaceUp}[9]{% +\def\Ult{#1}\def\Umt{#2}\def\Urt{#3}% +\def\Ulm{#4}\def\Umm{#5}\def\Urm{#6}% +\def\Ulb{#7}\def\Umb{#8}\def\Urb{#9}% +} +\newcommand{\RubikFaceFront}[9]{% +\def\Flt{#1}\def\Fmt{#2}\def\Frt{#3}% +\def\Flm{#4}\def\Fmm{#5}\def\Frm{#6}% +\def\Flb{#7}\def\Fmb{#8}\def\Frb{#9}% +} +\newcommand{\RubikFaceRight}[9]{% +\def\Rlt{#1}\def\Rmt{#2}\def\Rrt{#3}% +\def\Rlm{#4}\def\Rmm{#5}\def\Rrm{#6}% +\def\Rlb{#7}\def\Rmb{#8}\def\Rrb{#9}% +} +\newcommand{\RubikFaceDown}[9]{% +\def\Dlt{#1}\def\Dmt{#2}\def\Drt{#3}% +\def\Dlm{#4}\def\Dmm{#5}\def\Drm{#6}% +\def\Dlb{#7}\def\Dmb{#8}\def\Drb{#9}% +} +\newcommand{\RubikFaceLeft}[9]{% +\def\Llt{#1}\def\Lmt{#2}\def\Lrt{#3}% +\def\Llm{#4}\def\Lmm{#5}\def\Lrm{#6}% +\def\Llb{#7}\def\Lmb{#8}\def\Lrb{#9}% +} +\newcommand{\RubikFaceBack}[9]{% +\def\Blt{#1}\def\Bmt{#2}\def\Brt{#3}% +\def\Blm{#4}\def\Bmm{#5}\def\Brm{#6}% +\def\Blb{#7}\def\Bmb{#8}\def\Brb{#9}% +} +% \end{macrocode} +% +% \begin{macro}{\RubikFaceUpAll} +% \begin{macro}{\RubikFaceDownAll} +% \begin{macro}{\RubikFaceLeftAll} +% \begin{macro}{\RubikFaceRightAll} +% \begin{macro}{\RubikFaceFrontAll} +% \begin{macro}{\RubikFaceBackAll} +% These 5 commands allocate the same colour to all 9 cubiesquares in the specified face (Up, Down, Left, Right, Front). Each command therefore takes only 1 argument (one of the colour codes). +% +% {\noindent}For example, \cmd{\RubikFaceUpAll\{R\}} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macrocode} +\newcommand{\RubikFaceUpAll}[1]{% +\def\Ult{#1}\def\Umt{#1}\def\Urt{#1}% +\def\Ulm{#1}\def\Umm{#1}\def\Urm{#1}% +\def\Ulb{#1}\def\Umb{#1}\def\Urb{#1}% +} +\newcommand{\RubikFaceFrontAll}[1]{% +\def\Flt{#1}\def\Fmt{#1}\def\Frt{#1}% +\def\Flm{#1}\def\Fmm{#1}\def\Frm{#1}% +\def\Flb{#1}\def\Fmb{#1}\def\Frb{#1}% +} +\newcommand{\RubikFaceRightAll}[1]{% +\def\Rlt{#1}\def\Rmt{#1}\def\Rrt{#1}% +\def\Rlm{#1}\def\Rmm{#1}\def\Rrm{#1}% +\def\Rlb{#1}\def\Rmb{#1}\def\Rrb{#1}% +} +\newcommand{\RubikFaceLeftAll}[1]{% +\def\Llt{#1}\def\Lmt{#1}\def\Lrt{#1}% +\def\Llm{#1}\def\Lmm{#1}\def\Lrm{#1}% +\def\Llb{#1}\def\Lmb{#1}\def\Lrb{#1}% +} +\newcommand{\RubikFaceDownAll}[1]{% +\def\Dlt{#1}\def\Dmt{#1}\def\Drt{#1}% +\def\Dlm{#1}\def\Dmm{#1}\def\Drm{#1}% +\def\Dlb{#1}\def\Dmb{#1}\def\Drb{#1}% +} +\newcommand{\RubikFaceBackAll}[1]{% +\def\Blt{#1}\def\Bmt{#1}\def\Brt{#1}% +\def\Blm{#1}\def\Bmm{#1}\def\Brm{#1}% +\def\Blb{#1}\def\Bmb{#1}\def\Brb{#1}% +} +% \end{macrocode} +% +% {\noindent}We now use these commands to initialise all visible faces to default colour grey (X) +% +% \begin{macrocode} +\RubikFaceUpAll{X}% +\RubikFaceDownAll{X}% +\RubikFaceLeftAll{X}% +\RubikFaceRightAll{X}% +\RubikFaceFrontAll{X}% +\RubikFaceBackAll{X}% +% \end{macrocode} +% +% +% \subsection{ RubikCubeSolved command} +% +% \begin{macro}{\RubikCubeSolved} +% This command sets the face/colour configuration (state) of a typical +% solved Rubik cube. +% \begin{macrocode} +\newcommand{\RubikCubeSolved}{% + \RubikFaceUpAll{W}% + \RubikFaceDownAll{Y}% + \RubikFaceLeftAll{B}% + \RubikFaceRightAll{G}% + \RubikFaceFrontAll{O}% + \RubikFaceBackAll{R}% +} +% \end{macrocode} +% \end{macro} +% +% +% \subsection{ Slice macros} +% +% \begin{macro}{\RubikSliceTopR} +% \begin{macro}{\RubikSliceTopL} +% \begin{macro}{\RubikSliceEquatorR} +% \begin{macro}{\RubikSliceEquatorL} +% \begin{macro}{\RubikSliceBottomR} +% \begin{macro}{\RubikSliceBottomL} +% These 6 commands allocate colours for the 6 visible ordered +% cubiesquares along the side of a horizontal slice +% ordered 1--6 from left to right. We require both L view +% and R view versions. +% \begin{macrocode} +\newcommand{\RubikSliceTopR}[6]{% +\def\Flt{#1}\def\Fmt{#2}\def\Frt{#3}% +\def\Rlt{#4}\def\Rmt{#5}\def\Rrt{#6}% +} +\newcommand{\RubikSliceTopL}[6]{% +\def\Llt{#1}\def\Lmt{#2}\def\Lrt{#3}% +\def\Flt{#4}\def\Fmt{#5}\def\Frt{#6}% +} +\newcommand{\RubikSliceEquatorR}[6]{% +\def\Flm{#1}\def\Fmm{#2}\def\Frm{#3}% +\def\Rlm{#4}\def\Rmm{#5}\def\Rrm{#6}% +} +\newcommand{\RubikSliceEquatorL}[6]{% +\def\Llm{#1}\def\Lmm{#2}\def\Lrm{#3}% +\def\Flm{#4}\def\Fmm{#5}\def\Frm{#6}% +} +\newcommand{\RubikSliceBottomR}[6]{% +\def\Flb{#1}\def\Fmb{#2}\def\Frb{#3}% +\def\Rlb{#4}\def\Rmb{#5}\def\Rrb{#6}% +} +\newcommand{\RubikSliceBottomL}[6]{% +\def\Llb{#1}\def\Lmb{#2}\def\Lrb{#3}% +\def\Flb{#4}\def\Fmb{#5}\def\Frb{#6}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsection{ Cube drawing macros} +% +% Since the three visible sides of a Rubik cube have up to 27 non-grey colours, +% and \TeX\ has only 9 macro parameters available, we are forced to draw +% Rubik cubes by first specifying the colours on each of the three faces, +% and then using a `DrawRubikCubeXY' command, where the trailing XY code +% defines the view direction (X = either R, L; Y = either U, D). +% The order of the XY code is important: X first, Y second. +% +% On each face the cubies are drawn in the following order: Top row +% (left to right), Middle row (left to right), Bottom row (left to right). +% +% The TikZ draw cycle for each cubie square on a Rubik cube face cycles +% through the four corners of the cubie in the following order: +% lb $\rightarrow$ lt $\rightarrow$ rt $\rightarrow$ rb; the code being lb (LeftBottom), +% lt (LeftTop), rt (RightTop), rb (RightBottom) +% (only need four coords) origin at bottom left of front face. +% +% \begin{macro}{\DrawRubikCubeFrontFace} +% This `FrontFace' command is an `internal' command which draws and paints +% all the cubiesquares on the front face of a cube. It is used by all +% of the cube drawing macros which display the front face. +% The 9 colours are allocated by an earlier \cmd{\RubikFaceFront} command. +% These Face macros are based, in part, on those of Peter Bartal (2011). +% \begin{macrocode} +\newcommand{\DrawRubikCubeFrontFace}{% +% ---top row left to right +\draw[line join=round,line cap=round,ultra thick,fill=\Flt]% +(0,2) -- (0, 3) -- (1,3) -- (1,2) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Fmt]% +(1,2) -- (1, 3) -- (2,3) -- (2,2) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Frt]% +(2,2) -- (2, 3) -- (3,3) -- (3,2) -- cycle; +% -----middle row left to right +\draw[line join=round,line cap=round,ultra thick,fill=\Flm]% +(0,1) -- (0, 2) -- (1,2) -- (1,1) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Fmm]% +(1,1) -- (1, 2) -- (2,2) -- (2,1) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Frm]% +(2,1) -- (2, 2) -- (3,2) -- (3,1) -- cycle; +% ----bottom row left to right +\draw[line join=round,line cap=round,ultra thick,fill=\Flb]% +(0,0) -- (0, 1) -- (1,1) -- (1,0) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Fmb]% +(1,0) -- (1, 1) -- (2,1) -- (2,0) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Frb]% +(2,0) -- (2, 1) -- (3,1) -- (3,0) -- cycle; +} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{ Viewing direction} +% +% The command `DrawRubikCubeXY' command uses a trailing XY code +% to specify the view direction (X = either R, L; Y = either U, D). +% The order of the XY code is important: X first, Y second (so its easy +% to remember). +% +% \begin{macro}{\DrawRubikCubeRU} +% This command draws and paints a Rubik cube as viewed from +% the Right Upper (RU) viewpoint. It starts by using the internal +% command \cmd{\DrawRubikCubeFrontFace} to draw the Front face, +% and then draws the Up face followed by the Right face. +% The colours are allocated by the last \cmd{\RubikFaceUp} +% and \cmd{\RubikFaceRight} commands. +% \end{macro} +% \begin{macrocode} +\newcommand{\DrawRubikCubeRU}{% +\DrawRubikCubeFrontFace %% frontface +%%-----------Up face---------- +%%---top row +\draw[line join=round,line cap=round,ultra thick,fill=\Ult]% +(0.66,3.66) -- (1,4) -- (2,4) -- (1.66,3.66) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Umt]% +(1.66,3.66) -- (2,4) -- (3,4) -- (2.66,3.66) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Urt]% +(2.66,3.66) -- (3,4) -- (4,4) -- (3.66,3.66) -- cycle; +%%---middle row +\draw[line join=round,line cap=round,ultra thick,fill=\Ulm]% +(0.33,3.33) -- (0.66,3.66) -- (1.66,3.66) -- (1.33,3.33) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Umm]% +(1.33,3.33) -- (1.66,3.66) -- (2.66,3.66) -- (2.33,3.33) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Urm]% +(2.33,3.33) -- (2.66,3.66) -- (3.66,3.66) -- (3.33,3.33) -- cycle; +%%---bottom row +\draw[line join=round,line cap=round,ultra thick,fill=\Ulb]% +(0,3) -- (0.33,3.33) -- (1.33,3.33) -- (1,3) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Umb]% +(1,3) -- (1.33,3.33) -- (2.33,3.33) -- (2,3) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Urb]% +(2,3) -- (2.33,3.33) -- (3.33,3.33) -- (3,3) -- cycle; +%%-----------Right face---------- +%%---top row +\draw[line join=round,line cap=round,ultra thick,fill=\Rlt]% +(3,2) -- (3, 3) -- (3.33,3.33) -- (3.33,2.33) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Rmt]% +(3.33,2.33) -- (3.33, 3.33) -- (3.66,3.66) -- (3.66,2.66) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Rrt]% +(3.66,2.66) -- (3.66, 3.66) -- (4,4) -- (4,3) -- cycle; +%%---middle row +\draw[line join=round,line cap=round,ultra thick,fill=\Rlm]% +(3,1) -- (3, 2) -- (3.33,2.33) -- (3.33,1.33) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Rmm]% +(3.33,1.33) -- (3.33, 2.33) -- (3.66,2.66) -- (3.66,1.66) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Rrm]% +(3.66,1.66) -- (3.66, 2.66) -- (4,3) -- (4,2) -- cycle; +%%---bottom row +\draw[line join=round,line cap=round,ultra thick,fill=\Rlb]% +(3,0) -- (3, 1) -- (3.33,1.33) -- (3.33,0.33) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Rmb]% +(3.33,0.33) -- (3.33, 1.33) -- (3.66,1.66) -- (3.66,0.66) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Rrb]% +(3.66,0.66) -- (3.66, 1.66) -- (4,2) -- (4,1) -- cycle; +} +% \end{macrocode} +% +% \begin{macro}{\DrawRubikCube} +% This command is equivalent to the previous \cmd{\DrawRubikCubeRU} +% and hence is the default form (ie if one omits the trailing XY +% viewpoint code). +% \end{macro} +% \begin{macrocode} +\newcommand{\DrawRubikCube}{\DrawRubikCubeRU} +% \end{macrocode} +% +% +% \begin{macro}{\DrawRubikCubeRD} +% This command draws and paints a Rubik cube as viewed from +% the Right Down (RD) viewpoint. +% \end{macro} +% \begin{macrocode} +\newcommand{\DrawRubikCubeRD}{% +\DrawRubikCubeFrontFace %% frontface +%%----------Right face-------- +%%---top row +\draw[line join=round,line cap=round,ultra thick,fill=\Rlt]% +(3,2) -- (3, 3) -- (3.33,2.66) -- (3.33,1.66) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Rmt]% +(3.33,1.66) -- (3.33, 2.66) -- (3.66,2.33) -- (3.66,1.33) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Rrt]% +(3.66,1.33) -- (3.66, 2.33) -- (4,2) -- (4,1) -- cycle; +%%---middle row +\draw[line join=round,line cap=round,ultra thick,fill=\Rlm]% +(3,1) -- (3, 2) -- (3.33,1.66) -- (3.33,0.66) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Rmm]% +(3.33,0.66) -- (3.33, 1.66) -- (3.66,1.33) -- (3.66,0.33) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Rrm]% +(3.66,0.33) -- (3.66, 1.33) -- (4,1) -- (4,0) -- cycle; +%%---bottom row +\draw[line join=round,line cap=round,ultra thick,fill=\Rlb]% +(3,0) -- (3, 1) -- (3.33,0.66) -- (3.33,-0.33) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Rmb]% +(3.33,-0.33) -- (3.33, 0.66) -- (3.66,0.33) -- (3.66,-0.66) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Rrb]% +(3.66,-0.66) -- (3.66, 0.33) -- (4,0) -- (4,-1) -- cycle; +%%-----------Down face--------- +%%---top row +\draw[line join=round,line cap=round,ultra thick,fill=\Dlt]% +(0.33,-0.33) -- (0, 0) -- (1,0) -- (1.33,-0.33) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Dmt]% +(1.33,-0.33) -- (1, 0) -- (2,0) -- (2.33,-0.33) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Drt]% +(2.33,-0.33) -- (2, 0) -- (3,0) -- (3.33,-0.33) -- cycle; +%%---middle row +\draw[line join=round,line cap=round,ultra thick,fill=\Dlm]% +(0.66,-0.66) -- (0.33, -0.33) -- (1.33,-0.33) -- (1.66,-0.66) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Dmm]% +(1.66,-0.66) -- (1.33, -0.33) -- (2.33,-0.33) -- (2.66,-0.66) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Drm]% +(2.66,-0.66) -- (2.33, -0.33) -- (3.33,-0.33) -- (3.66,-0.66) -- cycle; +%%---bottom row +\draw[line join=round,line cap=round,ultra thick,fill=\Dlb]% +(1,-1) -- (0.66, -0.66) -- (1.66,-0.66) -- (2,-1) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Dmb]% +(2,-1) -- (1.66, -0.66) -- (2.66,-0.66) -- (3,-1) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Drb]% +(3,-1) -- (2.66, -0.66) -- (3.66,-0.66) -- (4,-1) -- cycle; +} +% \end{macrocode} +% +% \begin{macro}{\DrawRubikCubeLD} +% This command draws and paints a Rubik cube as viewed from +% the Left Down (LD) viewpoint. +% \end{macro} +% \begin{macrocode} +\newcommand{\DrawRubikCubeLD}{% +\DrawRubikCubeFrontFace %% frontface +%%------------Left face-------- +%%---top row +\draw[line join=round,line cap=round,ultra thick,fill=\Llt]% +(-1,1) -- (-1, 2) -- (-0.66,2.33) -- (-0.66,1.33) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Lmt]% +(-0.66,1.33) -- (-0.66, 2.33) -- (-0.33,2.66) -- (-0.33,1.66) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Lrt]% +(-0.33,1.66) -- (-0.33, 2.66) -- (0,3) -- (0,2) -- cycle; +%%---middle row +\draw[line join=round,line cap=round,ultra thick,fill=\Llm]% +(-1,0) -- (-1, 1) -- (-0.66,1.33) -- (-0.66,0.33) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Lmm]% +(-0.66,0.33) -- (-0.66, 1.33) -- (-0.33,1.66) -- (-0.33,0.66) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Lrm]% +(-0.33,0.66) -- (-0.33, 1.66) -- (0,2) -- (0,1) -- cycle; +%%---bottom row +\draw[line join=round,line cap=round,ultra thick,fill=\Llb]% +(-1,-1) -- (-1, 0) -- (-0.66,0.33) -- (-0.66,-0.66) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Lmb]% +(-0.66,-0.66) -- (-0.66, 0.33) -- (-0.33,0.66) -- (-0.33,-0.33) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Lrb]% +(-0.33,-0.33) -- (-0.33, 0.66) -- (0,1) -- (0,0) -- cycle; +%%------------Down face---------- +%%---top row +\draw[line join=round,line cap=round,ultra thick,fill=\Dlt]% +(-0.33,-0.33) -- (0, 0) -- (1,0) -- (0.66,-0.33) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Dmt]% +(0.66,-0.33) -- (1, 0) -- (2,0) -- (1.66,-0.33) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Drt]% +(1.66,-0.33) -- (2, 0) -- (3,0) -- (2.66,-0.33) -- cycle; +%%---middle row +\draw[line join=round,line cap=round,ultra thick,fill=\Dlm]% +(-0.66,-0.66) -- (-0.33, -0.33) -- (0.66,-0.33) -- (0.33,-0.66) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Dmm]% +(0.33,-0.66) -- (0.66, -0.33) -- (1.66,-0.33) -- (1.33,-0.66) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Drm]% +(1.33,-0.66) -- (1.66, -0.33) -- (2.66,-0.33) -- (2.33,-0.66) -- cycle; +%%---bottom row +\draw[line join=round,line cap=round,ultra thick,fill=\Dlb]% +(-1,-1) -- (-0.66, -0.66) -- (0.33,-0.66) -- (0,-1) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Dmb]% +(0,-1) -- (0.33, -0.66) -- (1.33,-0.66) -- (1,-1) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Drb]% +(1,-1) -- (1.33, -0.66) -- (2.33,-0.66) -- (2,-1) -- cycle; +} +% \end{macrocode} +% +% +% \begin{macro}{\DrawRubikCubeLU} +% This command draws and paints a Rubik cube as viewed from +% the Left Up (LU) viewpoint. +% \end{macro} +% \begin{macrocode} +\newcommand{\DrawRubikCubeLU}{% +\DrawRubikCubeFrontFace %% frontface +%%-----------Left face----------- +%%---top row +\draw[line join=round,line cap=round,ultra thick,fill=\Llt]% +(-1,3) -- (-1, 4) -- (-0.66,3.66) -- (-0.66,2.66) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Lmt]% +(-0.66,2.66) -- (-0.66, 3.66) -- (-0.33,3.33) -- (-0.33,2.33) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Lrt]% +(-0.33,2.33) -- (-0.33, 3.33) -- (0,3) -- (0,2) -- cycle; +%%---middle row +\draw[line join=round,line cap=round,ultra thick,fill=\Llm]% +(-1,2) -- (-1, 3) -- (-0.66,2.66) -- (-0.66,1.66) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Lmm]% +(-0.66,1.66) -- (-0.66, 2.66) -- (-0.33,2.33) -- (-0.33,1.33) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Lrm]% +(-0.33,1.33) -- (-0.33, 2.33) -- (0,2) -- (0,1) -- cycle; +%%---bottom row +\draw[line join=round,line cap=round,ultra thick,fill=\Llb]% +(-1,1) -- (-1, 2) -- (-0.66,1.66) -- (-0.66,0.66) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Lmb]% +(-0.66,0.66) -- (-0.66, 1.66) -- (-0.33,1.33) -- (-0.33,0.33) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Lrb]% +(-0.33,0.33) -- (-0.33, 1.33) -- (0,1) -- (0,0) -- cycle; +%%-----------Up face--------- +%%---top row +\draw[line join=round,line cap=round,ultra thick,fill=\Ult]% +(-0.66,3.66) -- (-1, 4) -- (0,4) -- (0.33,3.66) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Umt]% +(0.33,3.66) -- (0, 4) -- (1,4) -- (1.33,3.66) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Urt]% +(1.33,3.66) -- (1, 4) -- (2,4) -- (2.33,3.66) -- cycle; +%%---middle row +\draw[line join=round,line cap=round,ultra thick,fill=\Ulm]% +(-0.33,3.33) -- (-0.66, 3.66) -- (0.33,3.66) -- (0.66,3.33) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Umm]% +(0.66,3.33) -- (0.33, 3.66) -- (1.33,3.66) -- (1.66,3.33) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Urm]% +(1.66,3.33) -- (1.33, 3.66) -- (2.33,3.66) -- (2.66,3.33) -- cycle; +%%---bottom row +\draw[line join=round,line cap=round,ultra thick,fill=\Ulb]% +(0,3) -- (-0.33, 3.33) -- (0.66,3.33) -- (1,3) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Umb]% +(1,3) -- (0.66, 3.33) -- (1.66,3.33) -- (2,3) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Urb]% +(2,3) -- (1.66, 3.33) -- (2.66,3.33) -- (3,3) -- cycle;% +\ %%trailing space +} +% \end{macrocode} +% +% +% \subsection{ LayerFace commands} +% +% \begin{macro}{\DrawRubikLayerFace} +% \begin{macro}{\DrawRubikLayerFaceAll} +% [Nov 2, 2013] These two LayerFace commands draw and paint a single +% 9-cubie face. The first command takes 9 ordered colour parameters, +% (ordered in layers from top left to bottom right, so \texttt{\#1} +% is the placeholder for the colour of the TopLeft cubie etc.) +% The second takes only one colour parameter (since all the +% colours are the same). +% The drawing origin (0,0) = bottom left corner. Cubies are drawn +% from left to right. +% NOTE: this macro is SAME as the internal command +% \cmd{\DrawRubikCubeFrontFace} +% which is used for drawing the front face of a cube. +% \end{macro} +% \end{macro} +% \begin{macrocode} +\newcommand{\DrawRubikLayerFace}[9]{% +%%-----------FRONT face--------- +%%---top row +\draw[line join=round,line cap=round,ultra thick,fill=#1]% +(0,2) -- (0, 3) -- (1,3) -- (1,2) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=#2]% +(1,2) -- (1, 3) -- (2,3) -- (2,2) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=#3]% +(2,2) -- (2, 3) -- (3,3) -- (3,2) -- cycle; +%%-----middle row +\draw[line join=round,line cap=round,ultra thick,fill=#4]% +(0,1) -- (0, 2) -- (1,2) -- (1,1) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=#5]% +(1,1) -- (1, 2) -- (2,2) -- (2,1) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=#6]% +(2,1) -- (2, 2) -- (3,2) -- (3,1) -- cycle; +%%----bottom row +\draw[line join=round,line cap=round,ultra thick,fill=#7]% +(0,0) -- (0, 1) -- (1,1) -- (1,0) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=#8]% +(1,0) -- (1, 1) -- (2,1) -- (2,0) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=#9]% +(2,0) -- (2, 1) -- (3,1) -- (3,0) -- cycle; +} +\newcommand{\DrawRubikLayerFaceAll}[1]{% +%%----------FRONT face----------- +%%---top row +\draw[line join=round,line cap=round,ultra thick,fill=#1]% +(0,2) -- (0, 3) -- (1,3) -- (1,2) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=#1]% +(1,2) -- (1, 3) -- (2,3) -- (2,2) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=#1]% +(2,2) -- (2, 3) -- (3,3) -- (3,2) -- cycle; +%%-----middle row +\draw[line join=round,line cap=round,ultra thick,fill=#1]% +(0,1) -- (0, 2) -- (1,2) -- (1,1) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=#1]% +(1,1) -- (1, 2) -- (2,2) -- (2,1) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=#1]% +(2,1) -- (2, 2) -- (3,2) -- (3,1) -- cycle; +%%----bottom row +\draw[line join=round,line cap=round,ultra thick,fill=#1]% +(0,0) -- (0, 1) -- (1,1) -- (1,0) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=#1]% +(1,0) -- (1, 1) -- (2,1) -- (2,0) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=#1]% +(2,0) -- (2, 1) -- (3,1) -- (3,0) -- cycle; +} +% \end{macrocode} +% +% +% \subsection{ Flat commands} +% +% \begin{macro}{\FlatUp} +% \begin{macro}{\FlatDown} +% \begin{macro}{\FlatLeft} +% \begin{macro}{\FlatRight} +% \begin{macro}{\FlatFront} +% \begin{macro}{\FlatBack} +% Each of these six internal `Flat' commands draws a separate face. +% Each command (except \cmd{\FlatFront}) takes two arguments, +% namely an X-coordinate and Y-coordinate of the bottom left +% corner of the face. This (X,Y) pair allows the user to position +% the face. Note that the \cmd{\FlatFront} command takes no arguments, +% since by definition the bottom left corner of this face is (0,0). +% +% \textsc{example}: The following command positions the Up face so +% that its bottom left corner is located at (0,3): +% \begin{quote} +% \cmd{\FlatUp\{0\}\{3\}} +% \end{quote} +% These internal commands are used by the commands \cmd{\DrawRubikFlat} +% and \cmd{\DrawRubikCubeFlat} to draw various flat representations +% of a Rubik's cube. +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macrocode} +\newcommand{\FlatUp}[2]{% +\pgfmathsetmacro{\ux}{#1}% +\pgfmathsetmacro{\uy}{#2}% +%%---top row +\draw[line join=round,line cap=round,ultra thick,fill=\Ult]% +(\ux + 0,\uy + 2) -- (\ux + 0,\uy + 3) -- (\ux + 1,\uy + 3)% + -- (\ux + 1,\uy + 2) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Umt]% +(\ux + 1,\uy + 2) -- (\ux + 1,\uy + 3) -- (\ux + 2,\uy + 3)% + -- (\ux + 2,\uy + 2) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Urt]% +(\ux + 2,\uy + 2) -- (\ux + 2,\uy + 3) -- (\ux + 3,\uy + 3)% + -- (\ux + 3,\uy + 2) -- cycle; +%%-----middle row +\draw[line join=round,line cap=round,ultra thick,fill=\Ulm]% +(\ux + 0,\uy + 1) -- (\ux + 0,\uy + 2) -- (\ux + 1,\uy + 2)% + -- (\ux + 1,\uy + 1) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Umm]% +(\ux + 1,\uy + 1) -- (\ux + 1,\uy + 2) -- (\ux + 2,\uy + 2)% + -- (\ux + 2,\uy + 1) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Urm]% +(\ux + 2,\uy + 1) -- (\ux + 2,\uy + 2) -- (\ux + 3,\uy + 2)% + -- (\ux + 3,\uy + 1) -- cycle; +%%----bottom row +\draw[line join=round,line cap=round,ultra thick,fill=\Ulb]% +(\ux + 0,\uy + 0) -- (\ux + 0,\uy + 1) -- (\ux + 1,\uy + 1)% + -- (\ux + 1,\uy + 0) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Umb]% +(\ux + 1,\uy + 0) -- (\ux + 1,\uy + 1) -- (\ux + 2,\uy + 1)% + -- (\ux + 2,\uy + 0) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Urb]% +(\ux + 2,\uy + 0) -- (\ux + 2,\uy + 1) -- (\ux + 3,\uy + 1)% + -- (\ux + 3,\uy + 0) -- cycle; +} +%%------------------------- +\newcommand{\FlatDown}[2]{% +\pgfmathsetmacro{\ddx}{#1}% +\pgfmathsetmacro{\ddy}{#2}% +%%---top row +\draw[line join=round,line cap=round,ultra thick,fill=\Dlt]% +(\ddx + 0,\ddy + 2) -- (\ddx + 0,\ddy + 3) -- (\ddx + 1,\ddy + 3)% + -- (\ddx + 1,\ddy + 2) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Dmt]% +(\ddx + 1,\ddy + 2) -- (\ddx + 1,\ddy + 3) -- (\ddx + 2,\ddy + 3)% + -- (\ddx + 2,\ddy + 2) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Drt]% +(\ddx + 2,\ddy + 2) -- (\ddx + 2,\ddy + 3) -- (\ddx + 3,\ddy + 3)% + -- (\ddx + 3,\ddy + 2) -- cycle; +%%-----middle row +\draw[line join=round,line cap=round,ultra thick,fill=\Dlm]% +(\ddx + 0,\ddy + 1) -- (\ddx + 0,\ddy + 2) -- (\ddx + 1,\ddy + 2)% + -- (\ddx + 1,\ddy + 1) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Dmm]% +(\ddx + 1,\ddy + 1) -- (\ddx + 1,\ddy + 2) -- (\ddx + 2,\ddy + 2)% + -- (\ddx + 2,\ddy + 1) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Drm]% +(\ddx + 2,\ddy + 1) -- (\ddx + 2,\ddy + 2) -- (\ddx + 3,\ddy + 2)% + -- (\ddx + 3,\ddy + 1) -- cycle; +%%----bottom row +\draw[line join=round,line cap=round,ultra thick,fill=\Dlb]% +(\ddx + 0,\ddy + 0) -- (\ddx + 0,\ddy + 1) -- (\ddx + 1,\ddy + 1)% + -- (\ddx + 1,\ddy + 0) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Dmb]% +(\ddx + 1,\ddy + 0) -- (\ddx + 1,\ddy + 1) -- (\ddx + 2,\ddy + 1)% + -- (\ddx + 2,\ddy + 0) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Drb]% +(\ddx + 2,\ddy + 0) -- (\ddx + 2,\ddy + 1) -- (\ddx + 3,\ddy + 1)% + -- (\ddx + 3,\ddy + 0) -- cycle; +} +%%----------------------- +\newcommand{\FlatFront}{% +%%---top row +\draw[line join=round,line cap=round,ultra thick,fill=\Flt]% +(0,2) -- (0, 3) -- (1,3) -- (1,2) -- cycle; +%% +\draw[line join=round,line cap=round,ultra thick,fill=\Fmt]% +(1,2) -- (1, 3) -- (2,3) -- (2,2) -- cycle; +%% +\draw[line join=round,line cap=round,ultra thick,fill=\Frt]% +(2,2) -- (2, 3) -- (3,3) -- (3,2) -- cycle; +%%-----middle row +\draw[line join=round,line cap=round,ultra thick,fill=\Flm]% +(0,1) -- (0, 2) -- (1,2) -- (1,1) -- cycle; +%% +\draw[line join=round,line cap=round,ultra thick,fill=\Fmm]% +(1,1) -- (1, 2) -- (2,2) -- (2,1) -- cycle; +%% +\draw[line join=round,line cap=round,ultra thick,fill=\Frm]% +(2,1) -- (2, 2) -- (3,2) -- (3,1) -- cycle; +%%----bottom row +\draw[line join=round,line cap=round,ultra thick,fill=\Flb]% +(0,0) -- (0, 1) -- (1,1) -- (1,0) -- cycle; +%% +\draw[line join=round,line cap=round,ultra thick,fill=\Fmb]% +(1,0) -- (1, 1) -- (2,1) -- (2,0) -- cycle; +%% +\draw[line join=round,line cap=round,ultra thick,fill=\Frb]% +(2,0) -- (2, 1) -- (3,1) -- (3,0) -- cycle; +} +%%------------------------- +\newcommand{\FlatBack}[2]{% +\pgfmathsetmacro{\bx}{#1}% +\pgfmathsetmacro{\by}{#2}% +%%---top row +\draw[line join=round,line cap=round,ultra thick,fill=\Blt]% +(\bx + 0,\by + 2) -- (\bx + 0,\by + 3) -- (\bx + 1,\by + 3)% + -- (\bx + 1,\by + 2) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Bmt]% +(\bx + 1,\by + 2) -- (\bx + 1,\by + 3) -- (\bx + 2,\by + 3)% + -- (\bx + 2,\by + 2) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Brt]% +(\bx + 2,\by + 2) -- (\bx + 2,\by + 3) -- (\bx + 3,\by + 3)% + -- (\bx + 3,\by + 2) -- cycle; +%%-----middle row +\draw[line join=round,line cap=round,ultra thick,fill=\Blm]% +(\bx + 0,\by + 1) -- (\bx + 0,\by + 2) -- (\bx + 1,\by + 2)% + -- (\bx + 1,\by + 1) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Bmm]% +(\bx + 1,\by + 1) -- (\bx + 1,\by + 2) -- (\bx + 2,\by + 2)% + -- (\bx + 2,\by + 1) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Brm]% +(\bx + 2,\by + 1) -- (\bx + 2,\by + 2) -- (\bx + 3,\by + 2)% + -- (\bx + 3,\by + 1) -- cycle; +%%----bottom row +\draw[line join=round,line cap=round,ultra thick,fill=\Blb]% +(\bx + 0,\by + 0) -- (\bx + 0,\by + 1) -- (\bx + 1,\by + 1)% + -- (\bx + 1,\by + 0) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Bmb]% +(\bx + 1,\by + 0) -- (\bx + 1,\by + 1) -- (\bx + 2,\by + 1)% + -- (\bx + 2,\by + 0) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Brb]% +(\bx + 2,\by + 0) -- (\bx + 2,\by + 1) -- (\bx + 3,\by + 1)% + -- (\bx + 3,\by + 0) -- cycle; +} +%%------------------------- +\newcommand{\FlatLeft}[2]{% +\pgfmathsetmacro{\lx}{#1}% +\pgfmathsetmacro{\ly}{#2}% +%%---top row +\draw[line join=round,line cap=round,ultra thick,fill=\Llt]% +(\lx + 0,2) -- (\lx + 0, 3) -- (\lx + 1,3) -- (\lx + 1,2) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Lmt]% +(\lx + 1,2) -- (\lx + 1, 3) -- (\lx + 2,3) -- (\lx + 2,2) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Lrt]% +(\lx + 2,2) -- (\lx + 2, 3) -- (\lx + 3,3) -- (\lx + 3,2) -- cycle; +%%-----middle row +\draw[line join=round,line cap=round,ultra thick,fill=\Llm]% +(\lx + 0,1) -- (\lx + 0, 2) -- (\lx + 1,2) -- (\lx + 1,1) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Lmm]% +(\lx + 1,1) -- (\lx + 1, 2) -- (\lx + 2,2) -- (\lx + 2,1) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Lrm]% +(\lx + 2,1) -- (\lx + 2, 2) -- (\lx + 3,2) -- (\lx + 3,1) -- cycle; +%%----bottom row +\draw[line join=round,line cap=round,ultra thick,fill=\Llb]% +(\lx + 0,0) -- (\lx + 0, 1) -- (\lx + 1,1) -- (\lx + 1,0) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Lmb]% +(\lx + 1,0) -- (\lx + 1, 1) -- (\lx + 2,1) -- (\lx + 2,0) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Lrb]% +(\lx + 2,0) -- (\lx + 2, 1) -- (\lx + 3,1) -- (\lx + 3,0) -- cycle; +} +%%-------------------------- +\newcommand{\FlatRight}[2]{% +\pgfmathsetmacro{\rx}{#1}% %3 +\pgfmathsetmacro{\ry}{#2}% %0 +%%---top row +\draw[line join=round,line cap=round,ultra thick,fill=\Rlt]% +(\rx + 0,2) -- (\rx + 0, 3) -- (\rx + 1,3) -- (\rx + 1,2) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Rmt]% +(\rx + 1,2) -- (\rx + 1, 3) -- (\rx + 2,3) -- (\rx + 2,2) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Rrt]% +(\rx + 2,2) -- (\rx + 2, 3) -- (\rx + 3,3) -- (\rx + 3,2) -- cycle; +%%-----middle row +\draw[line join=round,line cap=round,ultra thick,fill=\Rlm]% +(\rx + 0,1) -- (\rx + 0, 2) -- (\rx + 1,2) -- (\rx + 1,1) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Rmm]% +(\rx + 1,1) -- (\rx + 1, 2) -- (\rx + 2,2) -- (\rx + 2,1) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Rrm]% +(\rx + 2,1) -- (\rx + 2, 2) -- (\rx + 3,2) -- (\rx + 3,1) -- cycle; +%%----bottom row +\draw[line join=round,line cap=round,ultra thick,fill=\Rlb]% +(\rx + 0,0) -- (\rx + 0, 1) -- (\rx + 1,1) -- (\rx + 1,0) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Rmb]% +(\rx + 1,0) -- (\rx + 1, 1) -- (\rx + 2,1) -- (\rx + 2,0) -- cycle; +\draw[line join=round,line cap=round,ultra thick,fill=\Rrb]% +(\rx + 2,0) -- (\rx + 2, 1) -- (\rx + 3,1) -- (\rx + 3,0) -- cycle; +} +% \end{macrocode} +% +% \begin{macro}{\DrawRubikFlat} +% Draws a standard flat representation of the Rubik's +% cube (colours only) +% \begin{macrocode} +\newcommand{\DrawRubikFlat}{% + \FlatUp{0}{3}% + \FlatDown{0}{-3}% + \FlatLeft{-3}{0}% + \FlatFront% + \FlatRight{3}{0}% + \FlatBack{6}{0}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\DrawRubikCubeFlat} +% Draws a Rubik's cube together with the three hidden faces +% (colours only) +% \begin{macrocode} +\newcommand{\DrawRubikCubeFlat}{% + \DrawRubikCube% + \FlatDown{0}{-3}% + \FlatLeft{-3}{0}% + \FlatBack{4}{1}% +} +% \end{macrocode} +% \end{macro} +% +% +% \subsection{ SideBar commands} +% +% SideBar commands draw narrow bars of colour indicating the +% side colours of each of the cubies forming the side of +% a given layer (face). +% +% \begin{macro}{\RubikSideBarWidth} +% \begin{macro}{\RubikSideBarLength} +% \begin{macro}{\RubikSideBarSep} +% These three commands allow the user to set the Width, Length +% and Separation parameters for the sidebar (in decimal values, +% where 1 is equivalent to the length of the side of a cubie). +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macrocode} +\newcommand{\RubikSideBarWidth}[1]{\pgfmathsetmacro{\bw}{#1}} +\newcommand{\RubikSideBarLength}[1]{\pgfmathsetmacro{\bl}{#1}} +\newcommand{\RubikSideBarSep}[1]{\pgfmathsetmacro{\bs}{#1}} +% \end{macrocode} +% We first set some default values +% \begin{macrocode} +\RubikSideBarWidth{0.3}% +\RubikSideBarLength{1}% +\RubikSideBarSep{0.3}% +% \end{macrocode} +% +% +% \subsubsection{ Allocating a colour to a single cubie sidebar} +% +% \begin{macro}{\side@barT} +% \begin{macro}{\side@barB} +% \begin{macro}{\side@barL} +% \begin{macro}{\side@barR} +% Internal commands. +% Full length face SideBars are really multiple instances of +% single cubie bars, +% each of which is drawn using one of four internal SideBar +% commands---one for each of the sides which we shall +% call Top, Bottom, Left, Right. +% Each SideBar command takes two arguments: one for cubie position +% \marg{$ 1 \mid 2 \mid 3$} and one for +% the colour-code \marg{$ R \mid O \mid Y \mid G \mid B \mid W \mid X $}. +% +% \textsc{example}: the following command allocates a colour to a single +% cubie sidebar on the Left of a Rubik face: +% \begin{quote} +% \cmd{\side@barL}\marg{cubie-position}\marg{colour-code} +% \end{quote} +% There are three cubie positions on each of the four sides +% of a face, and these +% are numbered 1 to 3 starting from the bottom left corner (1,1). +% The SideBar command also implements the set (or default) +% Length (\cmd{\bl}), Width (\cmd{\bw}) and Separation (\cmd{\bs}) +% values mentioned above. \cmd{\blh} = Half \cmd{\bl} = \cmd{\bl}/2. +% Note that the TikZ \cmd{\pgfmathsetmacro} commands (which do the maths) +% must be inside the TeX sidebar command in order to work. +% The start point of Draw command for each bar rectangle +% is botton Left corner of the bar =(\cmd{\dx},\cmd{\dy}) +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macrocode} +\newcommand{\side@barL}[2]{% +%% #1 = cubie possn no, #2 = colour +\pgfmathsetmacro{\blh}{\bl*(0.5)}% +\pgfmathsetmacro{\dx}{0 - \bs - \bw}% +\pgfmathsetmacro{\dy}{#1-1+0.5-\blh}% +\draw[fill=#2] (\dx,\dy) -- (\dx,\dy + \bl) + -- (\dx+\bw,\dy+\bl) -- (\dx+\bw,\dy) -- cycle; +} +\newcommand{\side@barR}[2]{% +%% #1 = cubie possn no, #2 = colour +\pgfmathsetmacro{\blh}{\bl*(0.5)}% +\pgfmathsetmacro{\dx}{3 + \bs}% +\pgfmathsetmacro{\dy}{#1 -1+0.5-\blh}% +\draw[fill=#2] (\dx,\dy) -- (\dx,\dy + \bl) + -- (\dx+\bw,\dy+\bl) -- (\dx+\bw,\dy) -- cycle; +} +\newcommand{\side@barT}[2]{% +%% #1 = cubie possn no, #2 = colour +\pgfmathsetmacro{\blh}{\bl*(0.5)}% +\pgfmathsetmacro{\dx}{#1 -1+0.5-\blh}% +\pgfmathsetmacro{\dy}{3 +\bs}% +\draw[fill=#2] (\dx,\dy) -- (\dx,\dy + \bw) + -- (\dx+\bl,\dy+\bw) -- (\dx+\bl,\dy) -- cycle; +} +\newcommand{\side@barB}[2]{% +%% #1 = cubie possn no, #2 = colour +\pgfmathsetmacro{\blh}{\bl*(0.5)}% +\pgfmathsetmacro{\dx}{#1 -1+0.5-\blh}% +\pgfmathsetmacro{\dy}{0 -\bs-\bw}% +\draw[fill=#2] (\dx,\dy) -- (\dx,\dy + \bw) + -- (\dx+\bl,\dy+\bw) -- (\dx+\bl,\dy) -- cycle; +} +% \end{macrocode} +% +% +% \subsubsection{ Drawing a single cubie sidebar} +% +% \begin{macro}{\DrawRubikLayerSideX$_1$X$_2$X$_3$} +% This command draws the sidebars using the above \cmd{\sidebar} command. +% The X$_1$X$_2$X$_2$ parameters refer to the options Left, Middle, +% Right, Top, Equator, Bottom, x, y, as follows: +% \begin{quote} +% X$_1$ is an $x$ parameter: either $\langle L\mid M \mid R\rangle$ +% {\newline}X$_2$ is an $y$ parameter: either $\langle T\mid E \mid B\rangle$ +% {\newline}X$_3$ is an extra parameter: either $\langle x\mid y \rangle$, +% required by corner sidebars to indicate whether the sidebar was either +% above or below $\langle y \rangle$, or to the left or +% right $\langle x \rangle$ of the associated cubie. +% An $X_3$ parameter is not required for the sidebar of an edge cubie, since +% only one location is posible in these cases. +% \end{quote} +% For example, the following command +% \begin{quote} +% \cmd{\DrawRubikLayerSideLTy\{G\}} +% \end{quote} +% draws a Green sidebar above the Top Left cubie. +% \end{macro} +% +% \begin{macrocode} +%%---Left side +\newcommand{\DrawRubikLayerSideLTx}[1]{\side@barL{3}{#1}} +\newcommand{\DrawRubikLayerSideLEx}[1]{\side@barL{2}{#1}} +\newcommand{\DrawRubikLayerSideLE}[1]{\side@barL{2}{#1}} +\newcommand{\DrawRubikLayerSideLBx}[1]{\side@barL{1}{#1}} +%---Right side +\newcommand{\DrawRubikLayerSideRTx}[1]{\side@barR{3}{#1}} +\newcommand{\DrawRubikLayerSideREx}[1]{\side@barR{2}{#1}} +\newcommand{\DrawRubikLayerSideRE}[1]{\side@barR{2}{#1}} +\newcommand{\DrawRubikLayerSideRBx}[1]{\side@barR{1}{#1}} +%---Top side +\newcommand{\DrawRubikLayerSideLTy}[1]{\side@barT{1}{#1}} +\newcommand{\DrawRubikLayerSideMTy}[1]{\side@barT{2}{#1}} +\newcommand{\DrawRubikLayerSideMT}[1]{\side@barT{2}{#1}} +\newcommand{\DrawRubikLayerSideRTy}[1]{\side@barT{3}{#1}} +%---Bottom side +\newcommand{\DrawRubikLayerSideLBy}[1]{\side@barB{1}{#1}} +\newcommand{\DrawRubikLayerSideMBy}[1]{\side@barB{2}{#1}} +\newcommand{\DrawRubikLayerSideMB}[1]{\side@barB{2}{#1}} +\newcommand{\DrawRubikLayerSideRBy}[1]{\side@barB{3}{#1}} +% \end{macrocode} +% +% +% \subsubsection{ Drawing multiple cubie sidebars} +% +% \begin{macro}{\DrawRubikLayerSideT} +% \begin{macro}{\DrawRubikLayerSideB} +% \begin{macro}{\DrawRubikLayerSideL} +% \begin{macro}{\DrawRubikLayerSideR} +% These commands allow the drawing of 3 small sidebars along +% one particular side (Top, Bottom, Left, Right), as indicated +% by the appended T, B, L, R letter code. +% Each command takes three ordered colour arguments, which are ordered +% either from left to right (the T and B forms), or from top to bottom +% (the L and R forms) +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macrocode} +%%--Top side--- +\newcommand{\DrawRubikLayerSideT}[3]{% + \DrawRubikLayerSideLTy{#1}% + \DrawRubikLayerSideMTy{#2}% + \DrawRubikLayerSideRTy{#3}% +} +%%--Bottom side--- +\newcommand{\DrawRubikLayerSideB}[3]{% + \DrawRubikLayerSideLBy{#1}% + \DrawRubikLayerSideMBy{#2}% + \DrawRubikLayerSideRBy{#3}% +} +%%--Left side-------- +%% colours run vertically DOWN +\newcommand{\DrawRubikLayerSideL}[3]{% + \DrawRubikLayerSideLTx{#1}% + \DrawRubikLayerSideLEx{#2}% + \DrawRubikLayerSideLBx{#3}% +} +%%--Right side-------- +%% colours run vertically DOWN +\newcommand{\DrawRubikLayerSideR}[3]{% + \DrawRubikLayerSideRTx{#1}% + \DrawRubikLayerSideREx{#2}% + \DrawRubikLayerSideRBx{#3}% +} +% \end{macrocode} +% +% \begin{macro}{\DrawRubikLayerSideLR} +% This command draws six cubie sidebars, three on each side, drawn in (L, R) +% pairs. The command takes six colour arguments, ordered in pairs, +% as shown in the following example. +% \begin{quote} +%\begin{verbatim} +% \DrawRubikLayerSideLR{G} {G} +% {R} {B} +% {Y} {B} +%\end{verbatim} +% \end{quote} +% \begin{macrocode} +\newcommand{\DrawRubikLayerSideLR}[6]{% + \DrawRubikLayerSideLTx{#1}% + \DrawRubikLayerSideRTx{#2}% + \DrawRubikLayerSideLEx{#3}% + \DrawRubikLayerSideREx{#4}% + \DrawRubikLayerSideLBx{#5}% + \DrawRubikLayerSideRBx{#6}% +} +% \end{macrocode} +% \end{macro} +% +% +% \subsection{ NCube command} +% +% \textsc{history}: The essence of this command was originally developed by Peter Bartal +% as his command \cmd{\rubikcube} (see Bartal, +% 2011). We have modified it, as follows (June 2012): +% \newline\strut\hspace{\parindent}(1) adjusted to use the TikZ \cmd{\pgfmathsetmacro\{\}\{\}} command, +% \newline\strut\hspace{\parindent}(2) renamed to \cmd{\DrawNCubeAll}. +% +% \begin{macro}{\DrawNCubeAll} +% {\noindent}This command draws a solved NxNxN Rubik's cube from the RightUp viewpoint. +% All cubies on a given face have the same colour. +% The command takes four ordered arguments, as follows: +% \newline\strut\hspace{\parindent}\#1 = number of cubies ($n>0$) along each side, +% \newline\strut\hspace{\parindent}\#2, \#3, \#4 = colors of the visible faces (in X,Y,Z order); +% X=Right face colour, Y=Up face colour, Z=Front face colour. +% +% \begin{macrocode} +\newcommand{\DrawNCubeAll}[4]{% + \pgfmathsetmacro{\ncubes}{#1-1}% +%% need to subtract 1 from the given number of cubies per side +%% to avoid the origin of the initial cube to be displaced + \foreach \x in {0,...,\ncubes}{% + \foreach \y in {0,...,\ncubes}{% + \foreach \z in {0,...,\ncubes}{% + \cube@dxdydz{1}{#2}{#3}{#4}{\x}{\y}{\z}% + }}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\cube@dxdydz} +% This internal command is used only by the \cmd{\DrawNCubeAll} command. +% The original version of this command was developed by Peter Bartal (see Bartal, 2011). +% It was modified (2012) by RWD Nickalls (to implement a more +% intuitive X, Y, Z ordering of parameters), and also by Peter Grill (see below). +% +% The cube need not be in the origin, the distances of +% the Down-behind [L] corner from +% the origin are taken as parameters. +% The command takes 7 ordered arguments: +% \newline\strut\hspace{\parindent}1 - length of an edge +% \newline\strut\hspace{\parindent}2 - color of the X face (Right) (RWDN) +% \newline\strut\hspace{\parindent}3 - color of the Y face (Up) (RWDN) +% \newline\strut\hspace{\parindent}4 - color of the Z face (Front) (RWDN) +% \newline\strut\hspace{\parindent}5 - x-position in space +% \newline\strut\hspace{\parindent}6 - y-position in space +% \newline\strut\hspace{\parindent}7 - z-position in space +% +% \textsc{usage}: |\cube@dxdydz{1}{cX}{cY}{cZ}{x}{y}{z}| +% +% {\noindent}The original code +% |\pgfmathparse{#1+#5}\let\dy\pgfmathresult| +% {\newline} was changed to the more intuitive |\pgfmathsetmacro{\dx}{#1+#5}| +% (suggested by Peter Grill 2011). +% +% \textsc{changes}: RWD Nickalls (2012): +% (1) added the [line join=round,line cap=round] +% options to each of the TikZ `draw' commands, in order to improve +% the line joining (first two options); (2) adjusted the \cmd{\cube@dxdydz} macro +% to adopt the ordered XYZ face colour notation +% (by reassigning \#2, \#3, \#4). +% \begin{macrocode} +\newcommand{\cube@dxdydz}[7]{% + \pgfmathsetmacro{\dx}{#1+#5}% +%% calculates the 'displacement' (distance from the origin) of the +%% far corners of the cube along the x axis from the arguments + \pgfmathsetmacro{\dy}{#1+#6}% +%% calculates the 'displacement' (distance from the origin) of the +%% far corners of the cube along the y axis from the arguments + \pgfmathsetmacro{\dz}{#1+#7}% +%% calculates the 'displacement' (distance from the origin) of the +%% far corners of the cube along the z axis from the arguments +%% Draw FRONT face (using the X colour = #4) + \draw[line join=round,line cap=round,ultra thick,fill=#4]% + (#5,#6,\dz) -- (\dx,#6,\dz) -- (\dx,\dy,\dz) -- (#5,\dy,\dz) -- cycle; +%% The 'rectangle' command does not work with 3D coordinates, +%% so this is the way to draw the squres with space coordinates +%% Draw UP face (using the Y colour = #3) + \draw[line join=round,line cap=round,ultra thick,fill=#3]% + (#5,\dy,\dz) -- (\dx,\dy,\dz) -- (\dx,\dy,#7) -- (#5,\dy,#7) -- cycle; +%% Draw RIGHT face (using the X colour = #2) + \draw[line join=round,line cap=round,ultra thick,fill=#2]% + (\dx,#6,\dz) -- (\dx,#6,#7) -- (\dx,\dy,#7) -- (\dx,\dy,\dz) -- cycle; + } +% \end{macrocode} +% \end{macro} +% +% +% \subsection{ Drawing single cubies} +% +% \begin{macro}{\Cubiedx} +% \begin{macro}{\Cubiedy} +% These two commands set the value of the two length parameters +% \texttt{cx} and \texttt{cy}, and allow the user to vary the size +% (adjust \texttt{cy}) and horizontal viewpoint (adjust \texttt{cx}) +% of a single cubie (described in more detail in the \rubikcube\ +% package documentation). +% Note that we cannot use the names \texttt{dx}, \texttt{dy} since these have been +% used before (see above). However we use \texttt{dx}, \texttt{dy} in the command names +% since these will be more readily understood by the user. +% \begin{macrocode} +\newcommand{\Cubiedx}[1]{\pgfmathsetmacro{\cx}{#1}} +\newcommand{\Cubiedy}[1]{\pgfmathsetmacro{\cy}{#1}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% We now set the default values (cx=cy=0.4) +% \begin{macrocode} +\Cubiedx{0.4} +\Cubiedy{0.4} +% \end{macrocode} +% +% +% \begin{macro}{\DrawCubieRU} +% \begin{macro}{\DrawCubieRD} +% \begin{macro}{\DrawCubieLU} +% \begin{macro}{\DrawCubieLD} +% These four commands draw a single cubie from the RightUp, RightDown, +% LeftUp, LeftDown viewpoint. The viewpoint is specified using an appended +% two-letter XY ordered viewpoint code: either RU, RD, LU, LD. +% These commands take three arguments, namely three different XYZ +% ordered colour codes (R,O,Y,G,B,W,X). +% \newline\textsc{format}: \cmd{\DrawCubieRU}\marg{colourX}\marg{colourY}\marg{colourZ} +% \newline\textsc{usage}: |\DrawCubieRU{G}{B}{W}| +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macrocode} +\newcommand{\DrawCubieRU}[3]{% +%% Front face (z) +\draw[line join=round,line cap=round,ultra thick,fill=#3]% + (0,0) -- (0, 1) -- (1, 1) -- (1,0) -- cycle; +%% Up face(y) +\draw[line join=round,line cap=round,ultra thick,fill=#2]% + (0,1) -- (\cx, 1+\cy) -- (1+\cx,1+\cy) -- (1,1) -- cycle; +%% Right face(x) +\draw[line join=round,line cap=round,ultra thick,fill=#1]% + (1,0) -- (1,1) -- (1+\cx,1+\cy) -- (1+\cx, \cy) -- cycle; +} +\newcommand{\DrawCubieRD}[3]{% +%% Front face (z) +\draw[line join=round,line cap=round,ultra thick,fill=#3]% + (0,0) -- (0, 1) -- (1, 1) -- (1,0) -- cycle; +%% Down face (y) +\draw[line join=round,line cap=round,ultra thick,fill=#2]% + (\cx,-\cy) -- (0, 0) -- (1,0) -- (1+\cx,-\cy) -- cycle; +%% Right face (x) +\draw[line join=round,line cap=round,ultra thick,fill=#1]% + (1,0) -- (1,1) -- (1+\cx,-\cy+1) -- (1+\cx, -\cy) -- cycle; +} +\newcommand{\DrawCubieLD}[3]{% +%% Front face (z) +\draw[line join=round,line cap=round,ultra thick,fill=#3]% + (0,0) -- (0, 1) -- (1, 1) -- (1,0) -- cycle; +%% Down face (y) +\draw[line join=round,line cap=round,ultra thick,fill=#2]% + (-\cx,-\cy) -- (0, 0) -- (1,0) -- (1-\cx,-\cy) -- cycle; +%% Left face (x) +\draw[line join=round,line cap=round,ultra thick,fill=#1]% + (-\cx,-\cy) -- (-\cx,-\cy+1) -- (0,1) -- (0,0) -- cycle; +} +\newcommand{\DrawCubieLU}[3]{% +%% Front face (z) +\draw[line join=round,line cap=round,ultra thick,fill=#3]% + (0,0) -- (0, 1) -- (1, 1) -- (1,0) -- cycle; +%% Up face (y) +\draw[line join=round,line cap=round,ultra thick,fill=#2]% + (-\cx,1+\cy) -- (1-\cx, 1+\cy) -- (1,1) -- (0,1) -- cycle; +%% Left face (x) +\draw[line join=round,line cap=round,ultra thick,fill=#1]% + (-\cx, \cy) -- (-\cx,\cy+1) -- (0,1) -- (0,0) -- cycle; +} +% \end{macrocode} +% +% +% \subsection{ Text cubies} +% +% \begin{macro}{\textCubieRU} +% \begin{macro}{\textCubieRD} +% \begin{macro}{\textCubieLU} +% \begin{macro}{\textCubieLD} +% These four commands draw a single `text' cubie from the RightUp, RightDown, +% LeftUp, LeftDown viewpoint. +% They are `text' forms of the DrawCubie' versions described above. +% Their size is scaled to be suitable for use with 10--12 point fonts. +% +% As before, the viewpoint is specified using an appended +% two-letter XY ordered viewpoint code: either RU, RD, LU, LD. +% These commands take three arguments, namely three different XYZ +% ordered colour codes (R,O,Y,G,B,W,X). +% \newline\textsc{format}: \cmd{\textCubieRU}\marg{colourX}\marg{colourY}\marg{colourZ} +% \newline\textsc{usage}: |\textCubieRU{G}{B}{W}| +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macrocode} +\newcommand{\textCubieRU}[3]{% +\begin{minipage}{0.66cm} +\centering +\begin{tikzpicture}[scale=0.5] +\Cubiedx{0.4}\Cubiedy{0.4} +\DrawCubieRU{#1}{#2}{#3} +\end{tikzpicture} +\end{minipage} +} +\newcommand{\textCubieRD}[3]{% +\begin{minipage}{0.66cm} +\centering +\begin{tikzpicture}[scale=0.5] +\Cubiedx{0.4}\Cubiedy{0.4} +\DrawCubieRD{#1}{#2}{#3} +\end{tikzpicture} +\end{minipage} +} +\newcommand{\textCubieLD}[3]{% +\begin{minipage}{0.66cm} +\centering +\begin{tikzpicture}[scale=0.5] +\Cubiedx{0.4}\Cubiedy{0.4} +\DrawCubieLD{#1}{#2}{#3} +\end{tikzpicture} +\end{minipage} +} +\newcommand{\textCubieLU}[3]{% +\begin{minipage}{0.66cm} +\centering +\begin{tikzpicture}[scale=0.5] +\Cubiedx{0.4}\Cubiedy{0.4} +\DrawCubieLU{#1}{#2}{#3} +\end{tikzpicture} +\end{minipage} +} +% \end{macrocode} +% +% +% \subsection{ Rotation commands --- face and slice} +% +% \textsc{notation}: We require a special notation to denote the +% various Rubik rotations (denoted +% by the stem rr). These rotations can be denoted either using a letter code +% say, \cmd{\rrR} for a Right face rotation, or by the equivalent hieroglyph +% denoted as \cmd{\rrhR} (Rubik rotation hieroglyph Right) etc. +% Commands such as \cmd{\RubikXXXX} typeset a pair of rr and rrh vertically. +% Commands such as \cmd{\textRubikXXXX} typeset the pair rr and rrh horizontally +% (ie a sort of `text' mode). +% +% The square hieroglyphs are built up in stages. We first create an internal +% command for drawing the square (\cmd{\DrawNotationBox}), and then draw the +% contents (lines, arrows, arcs of circles, and sometimes just text). +% (for the TikZ ARC command see TikZ pgfmanual2012 page p146 (\S 14.8)). +% +% The presence of small overfilled hboxes associated with these squares +% were originally checked using the ltugboat.cls, and all fixed mainly +% by setting the associated minipages $\rightarrow$ width = 0.6cm, +% and using TKZ scale=0.5. +% NOTE: do not use a trailing |%| after each |\end{tikzpicture}| +% as we actually need a small space to appear when used in text. +% +% +% \begin{macro}{\DrawNotationBox} +% This command draws the surrounding square box of all the hieroglyphs. +% Note that we start at (0,0) and draw to the final point +% in order to make a nice corner join. +% +% \begin{macrocode} +\newcommand{\DrawNotationBox}{% + \draw [thick] (0,0) -- (0,1) -- (1,1) -- (1,0) -- (0,0) -- (0,1)% +} +% \end{macrocode} +% \end{macro} +% +% We now define a number of points and line-segments inside the square +% (eg.; \cmd{\sd}, \cmd{\sh} \ldots\ etc.) which will be required +% for use in drawing the various lines and arrows. +% Some hieroglyphs contain either one circular arc, or two concentric arcs, +% and these arcs require both a center and a start point. +% +%\begin{macrocode} +\pgfmathsetmacro{\sd}{0.25} % horiz space +\pgfmathsetmacro{\sdd}{2*\sd} +\pgfmathsetmacro{\sddd}{3*\sd} +\pgfmathsetmacro{\sh}{0.6} % height +\pgfmathsetmacro{\sb}{0.2} % base +\pgfmathsetmacro{\sbh}{\sb + \sh} % UP +\pgfmathsetmacro{\scx}{\sdd+0.2} % Start of CircleX +\pgfmathsetmacro{\scy}{\sd*2/3} % Start of CircleY +\pgfmathsetmacro{\sqcx}{\scx-0.13} %% SQuare CenterX +\pgfmathsetmacro{\sqcy}{\scy+0.25} %% SQuare CenterY +% \end{macrocode} +% +% +% \subsubsection{ Rotation B} +% +% \begin{macro}{\rrB} +% \begin{macro}{\SquareB} +% \begin{macro}{\rrhB} +% \begin{macro}{\RubikB} +% \begin{macro}{\textRubikB} +% These commands all draw forms which denote the B rotation. +% Not visible from the front. +% \begin{macrocode} +\newcommand{\rrB}{\@rr{B}} +\newcommand{\SquareB}{\@SquareLetter{\rrB}} +\newcommand{\rrhB}{\raisebox{-0.25mm}{\SquareB}\,} +\newcommand{\RubikB}{\raisebox{\@hRubik}{\SquareB}\,} +\newcommand{\textRubikB}{\rrhB\,} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Bp} +% +% \begin{macro}{\rrBp} +% \begin{macro}{\SquareBp} +% \begin{macro}{\rrhBp} +% \begin{macro}{\RubikBp} +% \begin{macro}{\textRubikBp} +% These commands all draw forms which denote the Bp rotation. +% Not visible from the front. +% \begin{macrocode} +\newcommand{\rrBp}{\@rrp{B}} +\newcommand{\SquareBp}{\@SquareLetter{\rrBp}} +\newcommand{\rrhBp}{\raisebox{-0.25mm}{\SquareBp}\,} +\newcommand{\RubikBp}{\raisebox{\@hRubik}{\SquareBp}\,} +\newcommand{\textRubikBp}{\rrhBp\,} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Bw} +% +% \begin{macro}{\rrBw} +% \begin{macro}{\SquareBw} +% \begin{macro}{\rrhBw} +% \begin{macro}{\RubikBw} +% \begin{macro}{\textRubikBw} +% These commands all draw forms which denote the Bw rotation. +% Not visible from the front. +% \begin{macrocode} +%\newcommand{\rrBw}{\textbf{\textsf{Bw}}} +\newcommand{\rrBw}{\@rrw{B}} +\newcommand{\SquareBw}{\@SquareLetter{\rrBw}} +\newcommand{\rrhBw}{\raisebox{-0.25mm}{\SquareBw}\,} +\newcommand{\RubikBw}{\raisebox{\@hRubik}{\SquareBw}\,} +\newcommand{\textRubikBw}{\rrhBw\,} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Bwp} +% +% \begin{macro}{\rrBwp} +% \begin{macro}{\SquareBwp} +% \begin{macro}{\rrhBwp} +% \begin{macro}{\RubikBwp} +% \begin{macro}{\textRubikBwp} +% These commands all draw forms which denote the Bwp rotation. +% Not visible from the front. +% \begin{macrocode} +%\newcommand{\rrBwp}{\textbf{\textsf{Bwp}}} +\newcommand{\rrBwp}{\@rrwp{B}} +\newcommand{\SquareBwp}{\@SquareLetter{\rrBwp}} +\newcommand{\rrhBwp}{\raisebox{-0.25mm}{\SquareBwp}\,} +\newcommand{\RubikBwp}{\raisebox{\@hRubik}{\SquareBwp}\,} +\newcommand{\textRubikBwp}{\rrhBwp\,} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Bs} +% +% \begin{macro}{\rrBs} +% \begin{macro}{\SquareBs} +% \begin{macro}{\rrhBs} +% \begin{macro}{\RubikBs} +% \begin{macro}{\textRubikBs} +% These commands all draw forms which denote the Bs rotation. +% Not visible from the front. +% \begin{macrocode} +%\newcommand{\rrBs}{\textbf{\textsf{Bs}}} +\newcommand{\rrBs}{\@rrs{B}} +\newcommand{\SquareBs}{\@SquareLetter{\rrBs}} +\newcommand{\rrhBs}{\raisebox{-0.25mm}{\SquareBs}\,} +\newcommand{\RubikBs}{\raisebox{\@hRubik}{\SquareBs}\,} +\newcommand{\textRubikBs}{\rrhBs\,} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Bsp} +% +% \begin{macro}{\rrBsp} +% \begin{macro}{\SquareBsp} +% \begin{macro}{\rrhBsp} +% \begin{macro}{\RubikBsp} +% \begin{macro}{\textRubikBsp} +% These commands all draw forms which denote the Bsp rotation. +% Not visible from the front. +% \begin{macrocode} +%\newcommand{\rrBsp}{\textbf{\textsf{Bsp}}} +\newcommand{\rrBsp}{\@rrsp{B}} +\newcommand{\SquareBsp}{\@SquareLetter{\rrBsp}} +\newcommand{\rrhBsp}{\raisebox{-0.25mm}{\SquareBsp}\,} +\newcommand{\RubikBsp}{\raisebox{\@hRubik}{\SquareBsp}\,} +\newcommand{\textRubikBsp}{\rrhBsp\,} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Ba} +% +% \begin{macro}{\rrBa} +% \begin{macro}{\SquareBa} +% \begin{macro}{\rrhBa} +% \begin{macro}{\RubikBa} +% \begin{macro}{\textRubikBa} +% These commands all draw forms which denote the Ba rotation. +% Not visible from the front. +% \begin{macrocode} +%\newcommand{\rrBa}{\textbf{\textsf{Ba}}} +\newcommand{\rrBa}{\@rra{B}} +\newcommand{\SquareBa}{\@SquareLetter{\rrBa}} +\newcommand{\rrhBa}{\raisebox{-0.25mm}{\SquareBa}\,} +\newcommand{\RubikBa}{\raisebox{\@hRubik}{\SquareBa}\,} +\newcommand{\textRubikBa}{\rrhBa\,} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Bap} +% +% \begin{macro}{\rrBap} +% \begin{macro}{\SquareBap} +% \begin{macro}{\rrhBap} +% \begin{macro}{\RubikBap} +% \begin{macro}{\textRubikBap} +% These commands all draw forms which denote the Bap rotation. +% Not visible from the front. +% \begin{macrocode} +%\newcommand{\rrBap}{\textbf{\textsf{Bap}}} +\newcommand{\rrBap}{\@rrap{B}} +\newcommand{\SquareBap}{\@SquareLetter{\rrBap}} +\newcommand{\rrhBap}{\raisebox{-0.25mm}{\SquareBap}\,} +\newcommand{\RubikBap}{\raisebox{\@hRubik}{\SquareBap}\,} +\newcommand{\textRubikBap}{\rrhBap\,} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation D} +% +% \begin{macro}{\rrD} +% \begin{macro}{\SquareD} +% \begin{macro}{\rrhD} +% \begin{macro}{\RubikD} +% \begin{macro}{\textRubikD} +% These commands all draw forms which denote the D rotation. +% \begin{macrocode} +\newcommand{\rrD}{\textbf{\textsf{D}}} +%% +\newcommand{\SquareD}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick] (\sb,\sddd) -- (\sbh, \sddd); +\draw [thick] (\sb,\sdd) -- (\sbh, \sdd); +\draw [thick, ->] (\sb,\sd) -- (\sbh, \sd); +\end{tikzpicture}%% +} +\newcommand{\rrhD}{\raisebox{-0.333\height}{\SquareD}\,} +%% +\newcommand{\RubikD}{% +\begin{minipage}{0.6cm} +\centering +\SquareD\\ +\rrD +\end{minipage}% +} +\newcommand{\textRubikD}{\rrD\,\rrhD} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Dp} +% +% \begin{macro}{\rrDp} +% \begin{macro}{\SquareDp} +% \begin{macro}{\rrhDp} +% \begin{macro}{\RubikDp} +% \begin{macro}{\textRubikDp} +% These commands all draw forms which denote the Dp rotation. +% \begin{macrocode} +\newcommand{\rrDp}{\textbf{\textsf{D}$^\prime$}} +%% +\newcommand{\SquareDp}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick] (\sb,\sddd) -- (\sbh, \sddd); +\draw [thick] (\sb,\sdd) -- (\sbh, \sdd); +\draw [thick, <-] (\sb,\sd) -- (\sbh, \sd); +\end{tikzpicture}% +} +\newcommand{\rrhDp}{\raisebox{-0.333\height}{\SquareDp}\,} +%% +\newcommand{\RubikDp}{% +\begin{minipage}{0.6cm} +\centering +\SquareDp\\ +\rrDp +\end{minipage}% +} +\newcommand{\textRubikDp}{\rrDp\,\rrhDp} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Dw} +% +% \begin{macro}{\rrDw} +% \begin{macro}{\SquareDw} +% \begin{macro}{\rrhDw} +% \begin{macro}{\RubikDw} +% \begin{macro}{\textRubikDw} +% These commands all draw forms which denote the Dw rotation. +% \begin{macrocode} +\newcommand{\rrDw}{\textbf{\textsf{D\footnotesize{w}}}} +%% +\newcommand{\SquareDw}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick] (\sb,\sddd) -- (\sbh, \sddd); +\draw [thick, ->] (\sb,\sdd) -- (\sbh, \sdd); +\draw [thick, ->] (\sb,\sd) -- (\sbh, \sd); +\end{tikzpicture}% +} +\newcommand{\rrhDw}{\raisebox{-0.333\height}{\SquareDw}\,} +%% +\newcommand{\RubikDw}{% +\begin{minipage}{0.6cm} +\centering +\SquareDw\\ +\rrDw +\end{minipage}% +} +\newcommand{\textRubikDw}{\rrDw\,\rrhDw} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Dwp} +% +% \begin{macro}{\rrDwp} +% \begin{macro}{\SquareDwp} +% \begin{macro}{\rrhDwp} +% \begin{macro}{\RubikDwp} +% \begin{macro}{\textRubikDwp} +% These commands all draw forms which denote the Dwp rotation. +% \begin{macrocode} +\newcommand{\rrDwp}{\textbf{\textsf{D\footnotesize{w}}$^\prime$}} +%% +\newcommand{\SquareDwp}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick] (\sb,\sddd) -- (\sbh, \sddd); +\draw [thick, <-] (\sb,\sdd) -- (\sbh, \sdd); +\draw [thick, <-] (\sb,\sd) -- (\sbh, \sd); +\end{tikzpicture}% +} +\newcommand{\rrhDwp}{\raisebox{-0.333\height}{\SquareDwp}\,} +%% +\newcommand{\RubikDwp}{% +\begin{minipage}{0.6cm} +\centering +\SquareDwp\\ +\rrDwp +\end{minipage}% +} +\newcommand{\textRubikDwp}{\rrDwp\,\rrhDwp} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Ds} +% +% \begin{macro}{\rrDs} +% \begin{macro}{\SquareDs} +% \begin{macro}{\rrhDs} +% \begin{macro}{\RubikDs} +% \begin{macro}{\textRubikDs} +% These commands all draw forms which denote the Ds rotation. +% \begin{macrocode} +\newcommand{\rrDs}{\@rrs{D}} +%% +\newcommand{\SquareDs}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick, ->] (\sb,\sddd) -- (\sbh, \sddd); +\draw [thick] (\sb,\sdd) -- (\sbh, \sdd); +\draw [thick, ->] (\sb,\sd) -- (\sbh, \sd); +\end{tikzpicture}% +} +\newcommand{\rrhDs}{\raisebox{-0.333\height}{\SquareDs}\,} +%% +\newcommand{\RubikDs}{% +\begin{minipage}{0.6cm} +\centering +\SquareDs\\ +\rrDs +\end{minipage}% +} +\newcommand{\textRubikDs}{\rrDs\,\rrhDs} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Dsp} +% +% \begin{macro}{\rrDsp} +% \begin{macro}{\SquareDsp} +% \begin{macro}{\rrhDsp} +% \begin{macro}{\RubikDsp} +% \begin{macro}{\textRubikDsp} +% These commands all draw forms which denote the Dsp rotation. +% \begin{macrocode} +\newcommand{\rrDsp}{\@rrsp{D}} +%% +\newcommand{\SquareDsp}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick, <-] (\sb,\sddd) -- (\sbh, \sddd); +\draw [thick] (\sb,\sdd) -- (\sbh, \sdd); +\draw [thick, <-] (\sb,\sd) -- (\sbh, \sd); +\end{tikzpicture}% +} +\newcommand{\rrhDsp}{\raisebox{-0.333\height}{\SquareDsp}\,} +%% +\newcommand{\RubikDsp}{% +\begin{minipage}{0.6cm} +\centering +\SquareDsp\\ +\rrDsp +\end{minipage}% +} +\newcommand{\textRubikDsp}{\rrDsp\,\rrhDsp} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Da} +% +% \begin{macro}{\rrDa} +% \begin{macro}{\SquareDa} +% \begin{macro}{\rrhDa} +% \begin{macro}{\RubikDa} +% \begin{macro}{\textRubikDa} +% These commands all draw forms which denote the Da rotation. +% \begin{macrocode} +\newcommand{\rrDa}{\@rra{D}} +%% +\newcommand{\SquareDa}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick, <-] (\sb,\sddd) -- (\sbh, \sddd); +\draw [thick] (\sb,\sdd) -- (\sbh, \sdd); +\draw [thick, ->] (\sb,\sd) -- (\sbh, \sd); +\end{tikzpicture}% +} +\newcommand{\rrhDa}{\raisebox{-0.333\height}{\SquareDa}\,} +%% +\newcommand{\RubikDa}{% +\begin{minipage}{0.6cm} +\centering +\SquareDa\\ +\rrDa +\end{minipage}% +} +\newcommand{\textRubikDa}{\rrDa\,\rrhDa} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Dap} +% +% \begin{macro}{\rrDap} +% \begin{macro}{\SquareDap} +% \begin{macro}{\rrhDap} +% \begin{macro}{\RubikDap} +% \begin{macro}{\textRubikDap} +% These commands all draw forms which denote the Dap rotation. +% \begin{macrocode} +\newcommand{\rrDap}{\@rrap{D}} +%% +\newcommand{\SquareDap}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick, ->] (\sb,\sddd) -- (\sbh, \sddd); +\draw [thick] (\sb,\sdd) -- (\sbh, \sdd); +\draw [thick, <-] (\sb,\sd) -- (\sbh, \sd); +\end{tikzpicture}% +} +\newcommand{\rrhDap}{\raisebox{-0.333\height}{\SquareDap}\,} +%% +\newcommand{\RubikDap}{% +\begin{minipage}{0.6cm} +\centering +\SquareDap\\ +\rrDap +\end{minipage}% +} +\newcommand{\textRubikDap}{\rrDap\,\rrhDap} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation E} +% +% \begin{macro}{\rrE} +% \begin{macro}{\SquareE} +% \begin{macro}{\rrhE} +% \begin{macro}{\RubikE} +% \begin{macro}{\textRubikE} +% These commands all draw forms which denote the E rotation. +% \begin{macrocode} +\newcommand{\rrE}{\textbf{\textsf{E}}} +%% +\newcommand{\SquareE}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick] (\sb,\sddd) -- (\sbh, \sddd); +\draw [thick, ->] (\sb,\sdd) -- (\sbh, \sdd); +\draw [thick] (\sb,\sd) -- (\sbh, \sd); +\end{tikzpicture}% +} +\newcommand{\rrhE}{\raisebox{-0.333\height}{\SquareE}\,} +%% +\newcommand{\RubikE}{% +\begin{minipage}{0.6cm} +\centering +\SquareE\\ +\rrE +\end{minipage}% +} +\newcommand{\textRubikE}{\rrE\,\rrhE} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Ep} +% +% \begin{macro}{\rrEp} +% \begin{macro}{\SquareEp} +% \begin{macro}{\rrhEp} +% \begin{macro}{\RubikEp} +% \begin{macro}{\textRubikEp} +% These commands all draw forms which denote the Ep rotation. +% \begin{macrocode} +\newcommand{\rrEp}{\textbf{\textsf{E}$^\prime$}} +%% +\newcommand{\SquareEp}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick] (\sb,\sddd) -- (\sbh, \sddd); +\draw [thick, <-] (\sb,\sdd) -- (\sbh, \sdd); +\draw [thick] (\sb,\sd) -- (\sbh, \sd); +\end{tikzpicture}% +} +\newcommand{\rrhEp}{\raisebox{-0.333\height}{\SquareEp}\,} +%% +\newcommand{\RubikEp}{% +\begin{minipage}{0.6cm} +\centering +\SquareEp\\ +\rrEp +\end{minipage}% +} +\newcommand{\textRubikEp}{\rrEp\,\rrhEp} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation F} +% +% \begin{macro}{\rrF} +% \begin{macro}{\SquareF} +% \begin{macro}{\rrhF} +% \begin{macro}{\RubikF} +% \begin{macro}{\textRubikF} +% These commands all draw forms which denote the F rotation. +% \begin{macrocode} +\newcommand{\rrF}{\textbf{\textsf{F}}} +%% +\newcommand{\SquareF}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick, <-] (\scx, \scy) arc[radius=0.35, start angle=-60, delta angle=290]; +\end{tikzpicture}% +} +\newcommand{\rrhF}{\raisebox{-0.333\height}{\SquareF}\,} +%% +\newcommand{\RubikF}{% +\begin{minipage}{0.6cm} +\centering +\SquareF\\ +\rrF +\end{minipage}% +} +\newcommand{\textRubikF}{\rrF\,\rrhF} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Fp} +% +% \begin{macro}{\rrFp} +% \begin{macro}{\SquareFp} +% \begin{macro}{\rrhFp} +% \begin{macro}{\RubikFp} +% \begin{macro}{\textRubikFp} +% These commands all draw forms which denote the Fp rotation. +% \begin{macrocode} +\newcommand{\rrFp}{\textbf{\textsf{F}$^\prime$}} +%% +\newcommand{\SquareFp}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick, ->] (\scx, \scy) arc[radius=0.35, start angle=-60, delta angle=290]; +\end{tikzpicture}% +} +\newcommand{\rrhFp}{\raisebox{-0.333\height}{\SquareFp}\,} +%% +\newcommand{\RubikFp}{% +\begin{minipage}{0.6cm} +\centering +\SquareFp\\ +\rrFp +\end{minipage}% +} +\newcommand{\textRubikFp}{\rrFp\,\rrhFp} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Fw} +% +% \begin{macro}{\rrFw} +% \begin{macro}{\SquareFw} +% \begin{macro}{\rrhFw} +% \begin{macro}{\RubikFw} +% \begin{macro}{\textRubikFw} +% These commands all draw forms which denote the Fw rotation. +% \begin{macrocode} +\newcommand{\rrFw}{\textbf{\textsf{F\footnotesize{w}}}} +%% +\newcommand{\SquareFw}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick, <-] (\scx, \scy) arc[radius=0.35, start angle=-60, delta angle=290]; +\draw [thick] (\sqcx,\sqcy) arc[radius=0.1, start angle=-60, delta angle=360]; +%\node (squareLab) at (0.5,0.5) {$o$}; +\end{tikzpicture}% +} +\newcommand{\rrhFw}{\raisebox{-0.333\height}{\SquareFw}\,} +%% +\newcommand{\RubikFw}{% +\begin{minipage}{0.6cm} +\centering +\SquareFw\\ +\rrFw +\end{minipage}% +} +\newcommand{\textRubikFw}{\rrFw\,\rrhFw} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Fwp} +% +% \begin{macro}{\rrFwp} +% \begin{macro}{\SquareFwp} +% \begin{macro}{\rrhFwp} +% \begin{macro}{\RubikFwp} +% \begin{macro}{\textRubikFwp} +% These commands all draw forms which denote the Fwp rotation. +% \begin{macrocode} +\newcommand{\rrFwp}{\textbf{\textsf{F\footnotesize{w}}$^\prime$}} +%% +\newcommand{\SquareFwp}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick, ->] (\scx, \scy) arc[radius=0.35, start angle=-60, delta angle=290]; +\draw [thick] (\sqcx,\sqcy) arc[radius=0.1, start angle=-60, delta angle=360]; +\end{tikzpicture}% +} +\newcommand{\rrhFwp}{\raisebox{-0.333\height}{\SquareFwp}\,} +%% +\newcommand{\RubikFwp}{% +\begin{minipage}{0.6cm} +\centering +\SquareFwp\\ +\rrFwp +\end{minipage}% +} +\newcommand{\textRubikFwp}{\rrFwp\,\rrhFwp} +%% +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Fs} +% +% \begin{macro}{\rrFs} +% \begin{macro}{\rrhFs} +% \begin{macro}{\RubikFs} +% \begin{macro}{\textRubikFs} +% These commands draw forms of the Singmaster Fs slice rotation. +% We need to just make square with Fs in square; +% adjust box height using a \cmd{\rule}; +% adjust \cmd{\fboxsep} (default=3pt); +% adjust \cmd{\fboxrule} (default=0.4pt); +% bounded by \{\} so no need to reset to defaults. +% Not visible from the front. +% \begin{macrocode} +\newcommand{\rrFs}{\@rrs{F}} +\newcommand{\SquareFs}{\@SquareLetter{\rrFs}} +\newcommand{\rrhFs}{\raisebox{-0.25mm}{\SquareFs}\,} +\newcommand{\RubikFs}{\raisebox{\@hRubik}{\SquareFs}\,} +\newcommand{\textRubikFs}{\rrhFs\,} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Fsp} +% +% \begin{macro}{\rrFsp} +% \begin{macro}{\rrhFsp} +% \begin{macro}{\RubikFsp} +% \begin{macro}{\textRubikFsp} +% These commands draw forms of the Singmaster Fsp slice rotation. +% We need to just make square with Fsp in square; +% adjust box height using a \cmd{\rule}; +% adjust \cmd{\fboxsep} (default=3pt); +% adjust \cmd{\fboxrule} (default=0.4pt); +% bounded by \{\} so no need to reset to defaults. +% Not visible from the front. +% \begin{macrocode} +\newcommand{\rrFsp}{\@rrsp{F}} +\newcommand{\SquareFsp}{\@SquareLetter{\rrFsp}} +\newcommand{\rrhFsp}{\raisebox{-0.25mm}{\SquareFsp}\,} +\newcommand{\RubikFsp}{\raisebox{\@hRubik}{\SquareFsp}\,} +\newcommand{\textRubikFsp}{\rrhFsp\,} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Fa} +% +% \begin{macro}{\rrFa} +% \begin{macro}{\rrhFa} +% \begin{macro}{\RubikFa} +% \begin{macro}{\textRubikFa} +% These commands draw forms of the Singmaster Fa slice rotation. +% We need to just make square with Fa in square; +% adjust box height using a \cmd{\rule}; +% adjust \cmd{\fboxsep} (default=3pt); +% adjust \cmd{\fboxrule} (default=0.4pt); +% bounded by \{\} so no need to reset to defaults. +% Not visible from the front. +% \begin{macrocode} +\newcommand{\rrFa}{\@rra{F}} +\newcommand{\SquareFa}{\@SquareLetter{\rrFa}} +\newcommand{\rrhFa}{\raisebox{-0.25mm}{\SquareFa}\,} +\newcommand{\RubikFa}{\raisebox{\@hRubik}{\SquareFa}\,} +\newcommand{\textRubikFa}{\rrhFa\,} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Fap} +% +% \begin{macro}{\rrFap} +% \begin{macro}{\rrhFap} +% \begin{macro}{\RubikFap} +% \begin{macro}{\textRubikFap} +% These commands draw forms of the Singmaster Fap slice rotation. +% We need to just make square with Fap in square; +% adjust box height using a \cmd{\rule}; +% adjust \cmd{\fboxsep} (default=3pt); +% adjust \cmd{\fboxrule} (default=0.4pt); +% bounded by \{\} so no need to reset to defaults. +% Not visible from the front. +% \begin{macrocode} +\newcommand{\rrFap}{\@rrap{F}} +\newcommand{\SquareFap}{\@SquareLetter{\rrFap}} +\newcommand{\rrhFap}{\raisebox{-0.25mm}{\SquareFap}\,} +\newcommand{\RubikFap}{\raisebox{\@hRubik}{\SquareFap}\,} +\newcommand{\textRubikFap}{\rrhFap\,} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation L} +% +% \begin{macro}{\rrL} +% \begin{macro}{\SquareL} +% \begin{macro}{\rrhL} +% \begin{macro}{\RubikL} +% \begin{macro}{\textRubikL} +% These commands all draw forms which denote the L rotation. +% \begin{macrocode} +\newcommand{\rrL}{\textbf{\textsf{L}}} +%% +\newcommand{\SquareL}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick, <-] (\sd, \sb) -- (\sd, \sbh); +\draw [thick] (\sdd,\sb) -- (\sdd, \sbh); +\draw [thick] (\sddd, \sb) -- (\sddd, \sbh); +\end{tikzpicture}% +} +\newcommand{\rrhL}{\raisebox{-0.333\height}{\SquareL}\,} +%% +\newcommand{\RubikL}{% +\begin{minipage}{0.6cm} +\centering +\SquareL\\ +\rrL +\end{minipage}% +} +\newcommand{\textRubikL}{\rrL\,\rrhL} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Lp} +% +% \begin{macro}{\rrLp} +% \begin{macro}{\SquareLp} +% \begin{macro}{\rrhLp} +% \begin{macro}{\RubikLp} +% \begin{macro}{\textRubikLp} +% These commands all draw forms which denote the Lp rotation. +% \begin{macrocode} +\newcommand{\rrLp}{\textbf{\textsf{L}$^\prime$}} +%% +\newcommand{\SquareLp}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick,->] (\sd, \sb) -- (\sd, \sbh); +\draw [thick] (\sdd,\sb) -- (\sdd, \sbh); +\draw [thick] (\sddd, \sb) -- (\sddd, \sbh); +\end{tikzpicture}% +} +\newcommand{\rrhLp}{\raisebox{-0.333\height}{\SquareLp}\,} +%% +\newcommand{\RubikLp}{% +\begin{minipage}{0.6cm} +\centering +\SquareLp\\ +\rrLp +\end{minipage}% +} +\newcommand{\textRubikLp}{\rrLp\,\rrhLp} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Lw} +% +% \begin{macro}{\rrLw} +% \begin{macro}{\SquareLw} +% \begin{macro}{\rrhLw} +% \begin{macro}{\RubikLw} +% \begin{macro}{\textRubikLw} +% These commands all draw forms which denote the Lw rotation. +% \begin{macrocode} +\newcommand{\rrLw}{\textbf{\textsf{L\footnotesize{w}}}} +%% +\newcommand{\SquareLw}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick, <-] (\sd, \sb) -- (\sd, \sbh); +\draw [thick, <-] (\sdd,\sb) -- (\sdd, \sbh); +\draw [thick] (\sddd, \sb) -- (\sddd, \sbh); +\end{tikzpicture}% +} +\newcommand{\rrhLw}{\raisebox{-0.333\height}{\SquareLw}\,} +%% +\newcommand{\RubikLw}{% +\begin{minipage}{0.6cm} +\centering +\SquareLw\\ +\rrLw +\end{minipage}% +} +\newcommand{\textRubikLw}{\rrLw\,\rrhLw} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Lwp} +% +% \begin{macro}{\rrLwp} +% \begin{macro}{\SquareLwp} +% \begin{macro}{\rrhLwp} +% \begin{macro}{\RubikLwp} +% \begin{macro}{\textRubikLwp} +% These commands all draw forms which denote the Lwp rotation. +% \begin{macrocode} +\newcommand{\rrLwp}{\textbf{\textsf{L\footnotesize{w}}$^\prime$}} +%% +\newcommand{\SquareLwp}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick,->] (\sd, \sb) -- (\sd, \sbh); +\draw [thick,->] (\sdd,\sb) -- (\sdd, \sbh); +\draw [thick] (\sddd, \sb) -- (\sddd, \sbh); +\end{tikzpicture}% +} +\newcommand{\rrhLwp}{\raisebox{-0.333\height}{\SquareLwp}\,} +%% +\newcommand{\RubikLwp}{% +\begin{minipage}{0.6cm} +\centering +\SquareLwp\\ +\rrLwp +\end{minipage}% +} +\newcommand{\textRubikLwp}{\rrLwp\,\rrhLwp} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Ls} +% +% \begin{macro}{\rrLs} +% \begin{macro}{\SquareLs} +% \begin{macro}{\rrhLs} +% \begin{macro}{\RubikLs} +% \begin{macro}{\textRubikLs} +% These commands all draw forms which denote the Ls rotation. +% \begin{macrocode} +\newcommand{\rrLs}{\@rrs{L}} +%% +\newcommand{\SquareLs}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick, <-] (\sd, \sb) -- (\sd, \sbh); +\draw [thick] (\sdd,\sb) -- (\sdd, \sbh); +\draw [thick, <-] (\sddd, \sb) -- (\sddd, \sbh); +\end{tikzpicture}% +} +\newcommand{\rrhLs}{\raisebox{-0.333\height}{\SquareLs}\,} +%% +\newcommand{\RubikLs}{% +\begin{minipage}{0.6cm} +\centering +\SquareLs\\ +\rrLs +\end{minipage}% +} +\newcommand{\textRubikLs}{\rrLs\,\rrhLs} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Lsp} +% +% \begin{macro}{\rrLsp} +% \begin{macro}{\SquareLsp} +% \begin{macro}{\rrhLsp} +% \begin{macro}{\RubikLsp} +% \begin{macro}{\textRubikLsp} +% These commands all draw forms which denote the Lsp rotation. +% \begin{macrocode} +\newcommand{\rrLsp}{\@rrsp{L}} +%% +\newcommand{\SquareLsp}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick, ->] (\sd, \sb) -- (\sd, \sbh); +\draw [thick] (\sdd,\sb) -- (\sdd, \sbh); +\draw [thick, ->] (\sddd, \sb) -- (\sddd, \sbh); +\end{tikzpicture}% +} +\newcommand{\rrhLsp}{\raisebox{-0.333\height}{\SquareLsp}\,} +%% +\newcommand{\RubikLsp}{% +\begin{minipage}{0.6cm} +\centering +\SquareLsp\\ +\rrLsp +\end{minipage}% +} +\newcommand{\textRubikLsp}{\rrLsp\,\rrhLsp} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation La} +% +% \begin{macro}{\rrLa} +% \begin{macro}{\SquareLa} +% \begin{macro}{\rrhLa} +% \begin{macro}{\RubikLa} +% \begin{macro}{\textRubikLa} +% These commands all draw forms which denote the La rotation. +% \begin{macrocode} +\newcommand{\rrLa}{\@rra{L}} +%% +\newcommand{\SquareLa}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick, <-] (\sd, \sb) -- (\sd, \sbh); +\draw [thick] (\sdd,\sb) -- (\sdd, \sbh); +\draw [thick, ->] (\sddd, \sb) -- (\sddd, \sbh); +\end{tikzpicture}% +} +\newcommand{\rrhLa}{\raisebox{-0.333\height}{\SquareLa}\,} +%% +\newcommand{\RubikLa}{% +\begin{minipage}{0.6cm} +\centering +\SquareLa\\ +\rrLa +\end{minipage}% +} +\newcommand{\textRubikLa}{\rrLa\,\rrhLa} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Lap} +% +% \begin{macro}{\rrLap} +% \begin{macro}{\SquareLap} +% \begin{macro}{\rrhLap} +% \begin{macro}{\RubikLap} +% \begin{macro}{\textRubikLap} +% These commands all draw forms which denote the Lap rotation. +% \begin{macrocode} +\newcommand{\rrLap}{\@rrap{L}} +%% +\newcommand{\SquareLap}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick, ->] (\sd, \sb) -- (\sd, \sbh); +\draw [thick] (\sdd,\sb) -- (\sdd, \sbh); +\draw [thick, <-] (\sddd, \sb) -- (\sddd, \sbh); +\end{tikzpicture}% +} +\newcommand{\rrhLap}{\raisebox{-0.333\height}{\SquareLap}\,} +%% +\newcommand{\RubikLap}{% +\begin{minipage}{0.6cm} +\centering +\SquareLap\\ +\rrLap +\end{minipage}% +} +\newcommand{\textRubikLap}{\rrLap\,\rrhLap} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation M} +% +% \begin{macro}{\rrM} +% \begin{macro}{\SquareM} +% \begin{macro}{\rrhM} +% \begin{macro}{\RubikM} +% \begin{macro}{\textRubikM} +% These commands all draw forms which denote the M rotation. +% \begin{macrocode} +\newcommand{\rrM}{\textbf{\textsf{M}}} +%% +\newcommand{\SquareM}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick] (\sd, \sb) -- (\sd, \sbh); +\draw [thick, <-] (\sdd,\sb) -- (\sdd, \sbh); +\draw [thick] (\sddd, \sb) -- (\sddd, \sbh); +\end{tikzpicture}% +} +\newcommand{\rrhM}{\raisebox{-0.333\height}{\SquareM}\,} +%% +\newcommand{\RubikM}{% +\begin{minipage}{0.6cm} +\centering +\SquareM\\ +\rrM +\end{minipage}% +} +\newcommand{\textRubikM}{\rrM\,\rrhM} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Mp} +% +% \begin{macro}{\rrMp} +% \begin{macro}{\SquareMp} +% \begin{macro}{\rrhMp} +% \begin{macro}{\RubikMp} +% \begin{macro}{\textRubikMp} +% These commands all draw forms which denote the Mp rotation. +% \begin{macrocode} +\newcommand{\rrMp}{\textbf{\textsf{M}$^\prime$}} +%% +\newcommand{\SquareMp}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick] (\sd, \sb) -- (\sd, \sbh); +\draw [thick,->] (\sdd,\sb) -- (\sdd, \sbh); +\draw [thick] (\sddd, \sb) -- (\sddd, \sbh); +\end{tikzpicture}% +} +\newcommand{\rrhMp}{\raisebox{-0.333\height}{\SquareMp}\,} +%% +\newcommand{\RubikMp}{% +\begin{minipage}{0.6cm} +\centering +\SquareMp\\ +\rrMp +\end{minipage}% +} +\newcommand{\textRubikMp}{\rrMp\,\rrhMp} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation R} +% +% \begin{macro}{\rrR} +% \begin{macro}{\SquareR} +% \begin{macro}{\rrhR} +% \begin{macro}{\RubikR} +% \begin{macro}{\textRubikR} +% These commands all draw forms which denote the R rotation. +% \begin{macrocode} +\newcommand{\rrR}{\textbf{\textsf{R}}} +%% +\newcommand{\SquareR}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +%% draw three lines in the square, one with an arrow +\draw [thick] (\sd, \sb) -- (\sd, \sbh); +\draw [thick] (\sdd,\sb) -- (\sdd, \sbh); +\draw [thick, ->] (\sddd, \sb) -- (\sddd, \sbh); +\end{tikzpicture}% +} +\newcommand{\rrhR}{\raisebox{-0.333\height}{\SquareR}\,} +%% +\newcommand{\RubikR}{% +\begin{minipage}{0.6cm} +\centering +\SquareR\\ +\rrR +\end{minipage}% +} +\newcommand{\textRubikR}{\rrR\,\rrhR} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Rp} +% +% \begin{macro}{\rrRp} +% \begin{macro}{\SquareRp} +% \begin{macro}{\rrhRp} +% \begin{macro}{\RubikRp} +% \begin{macro}{\textRubikRp} +% These commands all draw forms which denote the Rp rotation. +% \begin{macrocode} +\newcommand{\rrRp}{\textbf{\textsf{R}$^\prime$}} +%% +\newcommand{\SquareRp}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick] (\sd, \sb) -- (\sd, \sbh); +\draw [thick] (\sdd,\sb) -- (\sdd, \sbh); +\draw [thick, <-] (\sddd, \sb) -- (\sddd, \sbh); +\end{tikzpicture}% +} +\newcommand{\rrhRp}{\raisebox{-0.333\height}{\SquareRp}\,} +%% +\newcommand{\RubikRp}{% +\begin{minipage}{0.6cm} +\centering +\SquareRp\\ +\rrRp +\end{minipage}% +} +\newcommand{\textRubikRp}{\rrRp\,\rrhRp} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Rw} +% +% \begin{macro}{\rrRw} +% \begin{macro}{\SquareRw} +% \begin{macro}{\rrhRw} +% \begin{macro}{\RubikRw} +% \begin{macro}{\textRubikRw} +% These commands all draw forms which denote the Rw rotation. +% \begin{macrocode} +\newcommand{\rrRw}{\textbf{\textsf{R\footnotesize{w}}}} +%% +\newcommand{\SquareRw}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick] (\sd, \sb) -- (\sd, \sbh); +\draw [thick, ->] (\sdd,\sb) -- (\sdd, \sbh); +\draw [thick, ->] (\sddd, \sb) -- (\sddd, \sbh); +\end{tikzpicture}% +} +\newcommand{\rrhRw}{\raisebox{-0.333\height}{\SquareRw}\,} +%% +\newcommand{\RubikRw}{% +\begin{minipage}{0.6cm} +\centering +\SquareRw\\ +\rrRw +\end{minipage}% +} +\newcommand{\textRubikRw}{\rrRw\,\rrhRw} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Rwp} +% +% \begin{macro}{\rrRwp} +% \begin{macro}{\SquareRwp} +% \begin{macro}{\rrhRwp} +% \begin{macro}{\RubikRwp} +% \begin{macro}{\textRubikRwp} +% These commands all draw forms which denote the Rwp rotation. +% \begin{macrocode} +\newcommand{\rrRwp}{\textbf{\textsf{R\footnotesize{w}}$^\prime$}} +%% +\newcommand{\SquareRwp}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick] (\sd, \sb) -- (\sd, \sbh); +\draw [thick, <-] (\sdd,\sb) -- (\sdd, \sbh); +\draw [thick, <-] (\sddd, \sb) -- (\sddd, \sbh); +\end{tikzpicture}% +} +\newcommand{\rrhRwp}{\raisebox{-0.333\height}{\SquareRwp}\,} +%% +\newcommand{\RubikRwp}{% +\begin{minipage}{0.6cm} +\centering +\SquareRwp\\ +\rrRwp +\end{minipage}% +} +\newcommand{\textRubikRwp}{\rrRwp\,\rrhRwp} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Rs} +% +% \begin{macro}{\rrRs} +% \begin{macro}{\SquareRs} +% \begin{macro}{\rrhRs} +% \begin{macro}{\RubikRs} +% \begin{macro}{\textRubikRs} +% These commands all draw forms which denote the Rs rotation. +% \begin{macrocode} +\newcommand{\rrRs}{\@rrs{R}} +%% +\newcommand{\SquareRs}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick,->] (\sd, \sb) -- (\sd, \sbh); +\draw [thick] (\sdd,\sb) -- (\sdd, \sbh); +\draw [thick,->] (\sddd, \sb) -- (\sddd, \sbh); +\end{tikzpicture}% +} +\newcommand{\rrhRs}{\raisebox{-0.333\height}{\SquareRs}\,} +%% +\newcommand{\RubikRs}{% +\begin{minipage}{0.6cm} +\centering +\SquareRs\\ +\rrRs +\end{minipage}% +} +\newcommand{\textRubikRs}{\rrRs\,\rrhRs} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Rsp} +% +% \begin{macro}{\rrRsp} +% \begin{macro}{\SquareRsp} +% \begin{macro}{\rrhRsp} +% \begin{macro}{\RubikRsp} +% \begin{macro}{\textRubikRsp} +% These commands all draw forms which denote the Rsp rotation. +% \begin{macrocode} +\newcommand{\rrRsp}{\@rrsp{R}} +%% +\newcommand{\SquareRsp}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick,<-] (\sd, \sb) -- (\sd, \sbh); +\draw [thick] (\sdd,\sb) -- (\sdd, \sbh); +\draw [thick,<-] (\sddd, \sb) -- (\sddd, \sbh); +\end{tikzpicture}% +} +\newcommand{\rrhRsp}{\raisebox{-0.333\height}{\SquareRsp}\,} +%% +\newcommand{\RubikRsp}{% +\begin{minipage}{0.6cm} +\centering +\SquareRsp\\ +\rrRsp +\end{minipage}% +} +\newcommand{\textRubikRsp}{\rrRsp\,\rrhRsp} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Ra} +% +% \begin{macro}{\rrRa} +% \begin{macro}{\SquareRa} +% \begin{macro}{\rrhRa} +% \begin{macro}{\RubikRa} +% \begin{macro}{\textRubikRa} +% These commands all draw forms which denote the Ra rotation. +% \begin{macrocode} +\newcommand{\rrRa}{\@rra{R}} +%% +\newcommand{\SquareRa}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick,<-] (\sd, \sb) -- (\sd, \sbh); +\draw [thick] (\sdd,\sb) -- (\sdd, \sbh); +\draw [thick,->] (\sddd, \sb) -- (\sddd, \sbh); +\end{tikzpicture}% +} +\newcommand{\rrhRa}{\raisebox{-0.333\height}{\SquareRa}\,} +%% +\newcommand{\RubikRa}{% +\begin{minipage}{0.6cm} +\centering +\SquareRa\\ +\rrRa +\end{minipage}% +} +\newcommand{\textRubikRa}{\rrRa\,\rrhRa} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Rap} +% +% \begin{macro}{\rrRap} +% \begin{macro}{\SquareRap} +% \begin{macro}{\rrhRap} +% \begin{macro}{\RubikRap} +% \begin{macro}{\textRubikRap} +% These commands all draw forms which denote the Rap rotation. +% \begin{macrocode} +\newcommand{\rrRap}{\@rrap{R}} +%% +\newcommand{\SquareRap}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick,->] (\sd, \sb) -- (\sd, \sbh); +\draw [thick] (\sdd,\sb) -- (\sdd, \sbh); +\draw [thick,<-] (\sddd, \sb) -- (\sddd, \sbh); +\end{tikzpicture}% +} +\newcommand{\rrhRap}{\raisebox{-0.333\height}{\SquareRap}\,} +%% +\newcommand{\RubikRap}{% +\begin{minipage}{0.6cm} +\centering +\SquareRap\\ +\rrRap +\end{minipage}% +} +\newcommand{\textRubikRap}{\rrRap\,\rrhRap} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation S} +% +% \begin{macro}{\rrS} +% \begin{macro}{\SquareS} +% \begin{macro}{\rrhS} +% \begin{macro}{\RubikS} +% \begin{macro}{\textRubikS} +% These commands all draw forms which denote the S rotation. +% Not visible from the front. +% \begin{macrocode} +\newcommand{\rrS}{\@rr{S}} +\newcommand{\SquareS}{\@SquareLetter{\rrS}} +\newcommand{\rrhS}{\raisebox{-0.25mm}{\SquareS}\,} +\newcommand{\RubikS}{\raisebox{\@hRubik}{\SquareS}\,} +\newcommand{\textRubikS}{\rrhS\,} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Sp} +% +% \begin{macro}{\rrSp} +% \begin{macro}{\SquareSp} +% \begin{macro}{\rrhSp} +% \begin{macro}{\RubikSp} +% \begin{macro}{\textRubikSp} +% These commands all draw forms which denote the Sp rotation. +% Not visible from the front. +% \begin{macrocode} +\newcommand{\rrSp}{\@rrp{S}} +\newcommand{\SquareSp}{\@SquareLetter{\rrSp}} +\newcommand{\rrhSp}{\raisebox{-0.25mm}{\SquareSp}\,} +\newcommand{\RubikSp}{\raisebox{\@hRubik}{\SquareSp}\,} +\newcommand{\textRubikSp}{\rrhSp\,} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Su} +% +% \begin{macro}{\rrSu} +% \begin{macro}{\rrhSu} +% \begin{macro}{\RubikSu} +% \begin{macro}{\textRubikSu} +% These commands draw forms of the Singmaster Su slice rotation. +% We also need to finetune the spacing +% between these `slice' hieroglyphs (especially Fs and Bs). +% \begin{macrocode} +\newcommand{\rrSu}{\textbf{\textsf{S\footnotesize{u}}}} +\newcommand{\rrhSu}{\rrhEp}% +\newcommand{\RubikSu}{% +\begin{minipage}{0.6cm} +\centering +\SquareEp\\ +\rrSu +\end{minipage}% +} +\newcommand{\textRubikSu}{\rrSu\,\rrhEp} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Sup} +% +% \begin{macro}{\rrSup} +% \begin{macro}{\rrhSup} +% \begin{macro}{\RubikSup} +% \begin{macro}{\textRubikSup} +% These commands draw forms of the Singmaster Sup slice rotation. +% We also need to finetune the spacing +% between these `slice' hieroglyphs (especially Fs and Bs). +% \begin{macrocode} +\newcommand{\rrSup}{\textbf{\textsf{S\footnotesize{u}}$^\prime$}} +\newcommand{\rrhSup}{\rrhE}% +\newcommand{\RubikSup}{% +\begin{minipage}{0.6cm} +\centering +\SquareE\\ +\rrSup +\end{minipage}% +} +\newcommand{\textRubikSup}{\rrSup\,\rrhE} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Sd} +% +% \begin{macro}{\rrSd} +% \begin{macro}{\rrhSd} +% \begin{macro}{\RubikSd} +% \begin{macro}{\textRubikSd} +% These commands draw forms of the Singmaster Sd slice rotation. +% \begin{macrocode} +\newcommand{\rrSd}{\textbf{\textsf{S\footnotesize{d}}}} +\newcommand{\rrhSd}{\rrhE}% +\newcommand{\RubikSd}{% +\begin{minipage}{0.6cm} +\centering +\SquareE\\ +\rrSd +\end{minipage}% +} +\newcommand{\textRubikSd}{\rrSd\,\rrhE} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Sdp} +% +% \begin{macro}{\rrSdp} +% \begin{macro}{\rrhSdp} +% \begin{macro}{\RubikSdp} +% \begin{macro}{\textRubikSdp} +% These commands draw forms of the Singmaster Sdp slice rotation. +% \begin{macrocode} +\newcommand{\rrSdp}{\textbf{\textsf{S\footnotesize{d}}$^\prime$}} +\newcommand{\rrhSdp}{\rrhEp}% +\newcommand{\RubikSdp}{% +\begin{minipage}{0.6cm} +\centering +\SquareEp\\ +\rrSdp +\end{minipage}% +} +\newcommand{\textRubikSdp}{\rrSdp\,\rrhEp} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Sl} +% +% \begin{macro}{\rrSl} +% \begin{macro}{\rrhSl} +% \begin{macro}{\RubikSl} +% \begin{macro}{\textRubikSl} +% These commands draw forms of the Singmaster Sl slice rotation. +% \begin{macrocode} +\newcommand{\rrSl}{\textbf{\textsf{S\footnotesize{l}}}} +\newcommand{\rrhSl}{\rrhM}% +\newcommand{\RubikSl}{% +\begin{minipage}{0.6cm} +\centering +\SquareM\\ +\rrSl +\end{minipage}% +} +\newcommand{\textRubikSl}{\rrSl\,\rrhM} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Slp} +% +% \begin{macro}{\rrSlp} +% \begin{macro}{\rrhSlp} +% \begin{macro}{\RubikSlp} +% \begin{macro}{\textRubikSlp} +% These commands draw forms of the Singmaster Slp slice rotation. +% \begin{macrocode} +\newcommand{\rrSlp}{\textbf{\textsf{S\footnotesize{l}}$^\prime$}} +\newcommand{\rrhSlp}{\rrhMp}% +\newcommand{\RubikSlp}{% +\begin{minipage}{0.6cm} +\centering +\SquareMp\\ +\rrSlp +\end{minipage}% +} +\newcommand{\textRubikSlp}{\rrSlp\,\rrhMp} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Sr} +% +% \begin{macro}{\rrSr} +% \begin{macro}{\rrhSr} +% \begin{macro}{\RubikSr} +% \begin{macro}{\textRubikSr} +% These commands draw forms of the Singmaster Sr slice rotation. +% \begin{macrocode} +\newcommand{\rrSr}{\textbf{\textsf{S\footnotesize{r}}}} +\newcommand{\rrhSr}{\rrhMp}% +\newcommand{\RubikSr}{% +\begin{minipage}{0.6cm} +\centering +\SquareMp\\ +\rrSr +\end{minipage}% +} +\newcommand{\textRubikSr}{\rrSr\,\rrhMp} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Srp} +% +% \begin{macro}{\rrSrp} +% \begin{macro}{\rrhSrp} +% \begin{macro}{\RubikSrp} +% \begin{macro}{\textRubikSrp} +% These commands draw forms of the Singmaster Srp slice rotation. +% \begin{macrocode} +\newcommand{\rrSrp}{\textbf{\textsf{S\footnotesize{r}}$^\prime$}} +\newcommand{\rrhSrp}{\rrhM}% +\newcommand{\RubikSrp}{% +\begin{minipage}{0.6cm} +\centering +\SquareM\\ +\rrSrp +\end{minipage}% +} +\newcommand{\textRubikSrp}{\rrSrp\,\rrhM} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Sf} +% +% \begin{macro}{\rrSf} +% \begin{macro}{\rrhSf} +% \begin{macro}{\RubikSf} +% \begin{macro}{\textRubikSf} +% These commands draw forms of the Singmaster Sf slice rotation. +% We need to just make square with Sf in square; +% adjust box height using a \cmd{\rule}; +% adjust \cmd{\fboxsep} (default=3pt); +% adjust \cmd{\fboxrule} (default=0.4pt); +% bounded by \{\} so no need to reset to defaults. +% Not visible from the front. +% \begin{macrocode} +\newcommand{\rrSf}{\textbf{\textsf{S\footnotesize{f}}}} +\newcommand{\SquareSf}{\@SquareLetter{\rrSf}} +\newcommand{\rrhSf}{\raisebox{-0.25mm}{\SquareSf}\,} +\newcommand{\RubikSf}{\raisebox{\@hRubik}{\SquareSf}\,} +\newcommand{\textRubikSf}{\rrhSf\,} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Sfp} +% +% \begin{macro}{\rrSfp} +% \begin{macro}{\rrhSfp} +% \begin{macro}{\RubikSfp} +% \begin{macro}{\textRubikSfp} +% These commands draw forms of the Singmaster Sfp slice rotation. +% We need to just make square with Sfp in square; +% adjust box height using a \cmd{\rule}; +% adjust \cmd{\fboxsep} (default=3pt); +% adjust \cmd{\fboxrule} (default=0.4pt); +% bounded by \{\} so no need to reset to defaults. +% Not visible from the front. +% \begin{macrocode} +\newcommand{\rrSfp}{\textbf{\textsf{S\footnotesize{f}}$^\prime$}} +\newcommand{\SquareSfp}{\@SquareLetter{\rrSfp}} +\newcommand{\rrhSfp}{\raisebox{-0.25mm}{\SquareSfp}\,} +\newcommand{\RubikSfp}{\raisebox{\@hRubik}{\SquareSfp}\,} +\newcommand{\textRubikSfp}{\rrhSfp\,} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Sb} +% +% \begin{macro}{\rrSb} +% \begin{macro}{\rrhSb} +% \begin{macro}{\RubikSb} +% \begin{macro}{\textRubikSb} +% These commands draw forms of the Singmaster Sb slice rotation. +% We need to just make square with Sb in square; +% adjust box height using a \cmd{\rule}; +% adjust \cmd{\fboxsep} (default=3pt); +% adjust \cmd{\fboxrule} (default=0.4pt); +% bounded by \{\} so no need to reset to defaults. +% Not visible from the front. +% \begin{macrocode} +\newcommand{\rrSb}{\textbf{\textsf{S\footnotesize{b}}}} +\newcommand{\SquareSb}{\@SquareLetter{\rrSb}} +\newcommand{\rrhSb}{\raisebox{-0.25mm}{\SquareSb}\,} +\newcommand{\RubikSb}{\raisebox{\@hRubik}{\SquareSb}\,} +\newcommand{\textRubikSb}{\rrhSb\,} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Sbp} +% +% \begin{macro}{\rrSbp} +% \begin{macro}{\rrhSbp} +% \begin{macro}{\RubikSbp} +% \begin{macro}{\textRubikSbp} +% These commands draw forms of the Singmaster Sbp slice rotation. +% We need to just make square with Sbp in square; +% adjust box height using a \cmd{\rule}; +% adjust \cmd{\fboxsep} (default=3pt); +% adjust \cmd{\fboxrule} (default=0.4pt); +% bounded by \{\} so no need to reset to defaults. +% Not visible from th front. +% \begin{macrocode} +\newcommand{\rrSbp}{\textbf{\textsf{S\footnotesize{b}}$^\prime$}} +\newcommand{\SquareSbp}{\@SquareLetter{\rrSbp}} +\newcommand{\rrhSbp}{\raisebox{-0.25mm}{\SquareSbp}\,} +\newcommand{\RubikSbp}{\raisebox{\@hRubik}{\SquareSbp}\,} +\newcommand{\textRubikSbp}{\rrhSbp\,} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation U} +% +% \begin{macro}{\rrU} +% \begin{macro}{\SquareU} +% \begin{macro}{\rrhU} +% \begin{macro}{\RubikU} +% \begin{macro}{\textRubikU} +% These commands all draw forms which denote the U rotation. +% \begin{macrocode} +\newcommand{\rrU}{\textbf{\textsf{U}}} +%% +\newcommand{\SquareU}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick, <-] (\sb,\sddd) -- (\sbh, \sddd); +\draw [thick] (\sb,\sdd) -- (\sbh, \sdd); +\draw [thick] (\sb,\sd) -- (\sbh, \sd); +\end{tikzpicture}% +} +\newcommand{\rrhU}{\raisebox{-0.333\height}{\SquareU}\,} +%% +\newcommand{\RubikU}{% +\begin{minipage}{0.6cm} +\centering +\SquareU\\ +\rrU +\end{minipage}%% +} +\newcommand{\textRubikU}{\rrU\,\rrhU} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Uw} +% +% \begin{macro}{\rrUw} +% \begin{macro}{\SquareUw} +% \begin{macro}{\rrhUw} +% \begin{macro}{\RubikUw} +% \begin{macro}{\textRubikUw} +% These commands all draw forms which denote the Uw rotation. +% \begin{macrocode} +\newcommand{\rrUw}{\textbf{\textsf{U\footnotesize{w}}}} +%% +\newcommand{\SquareUw}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick, <-] (\sb,\sddd) -- (\sbh, \sddd); +\draw [thick, <-] (\sb,\sdd) -- (\sbh, \sdd); +\draw [thick] (\sb,\sd) -- (\sbh, \sd); +\end{tikzpicture}% +} +% +\newcommand{\rrhUw}{\raisebox{-0.333\height}{\SquareUw}\,} +%% +\newcommand{\RubikUw}{% +\begin{minipage}{0.6cm} +\centering +\SquareUw\\ +\rrUw +\end{minipage}%% +} +%% +\newcommand{\textRubikUw}{\rrUw\,\rrhUw} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Up} +% +% \begin{macro}{\rrUp} +% \begin{macro}{\SquareUp} +% \begin{macro}{\rrhUp} +% \begin{macro}{\RubikUp} +% \begin{macro}{\textRubikUp} +% These commands all draw forms which denote the Up rotation. +% \begin{macrocode} +\newcommand{\rrUp}{\textbf{\textsf{U}$^\prime$}} +%% +\newcommand{\SquareUp}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick, ->] (\sb,\sddd) -- (\sbh, \sddd); +\draw [thick] (\sb,\sdd) -- (\sbh, \sdd); +\draw [thick] (\sb,\sd) -- (\sbh, \sd); +\end{tikzpicture}% +} +\newcommand{\rrhUp}{\raisebox{-0.333\height}{\SquareUp}\,} +%% +\newcommand{\RubikUp}{% +\begin{minipage}{0.6cm} +\centering +\SquareUp\\ +\rrUp +\end{minipage}%% +} +\newcommand{\textRubikUp}{\rrUp\,\rrhUp} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Uwp} +% +% \begin{macro}{\rrUwp} +% \begin{macro}{\SquareUwp} +% \begin{macro}{\rrhUwp} +% \begin{macro}{\RubikUwp} +% \begin{macro}{\textRubikUwp} +% These commands all draw forms which denote the Uwp rotation. +% \begin{macrocode} +\newcommand{\rrUwp}{\textbf{\textsf{U\footnotesize{w}}$^\prime$}} +%% +\newcommand{\SquareUwp}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick, ->] (\sb,\sddd) -- (\sbh, \sddd); +\draw [thick, ->] (\sb,\sdd) -- (\sbh, \sdd); +\draw [thick] (\sb,\sd) -- (\sbh, \sd); +\end{tikzpicture}% +} +\newcommand{\rrhUwp}{\raisebox{-0.333\height}{\SquareUwp}\,} +%% +\newcommand{\RubikUwp}{% +\begin{minipage}{0.6cm} +\centering +\SquareUwp\\ +\rrUwp +\end{minipage}%% +} +\newcommand{\textRubikUwp}{\rrUwp\,\rrhUwp} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Us} +% +% \begin{macro}{\rrUs} +% \begin{macro}{\SquareUs} +% \begin{macro}{\rrhUs} +% \begin{macro}{\RubikUs} +% \begin{macro}{\textRubikUs} +% These commands all draw forms which denote the Us rotation. +% \begin{macrocode} +\newcommand{\rrUs}{\@rrs{U}} +%% +\newcommand{\SquareUs}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick, <-] (\sb,\sddd) -- (\sbh, \sddd); +\draw [thick] (\sb,\sdd) -- (\sbh, \sdd); +\draw [thick, <-] (\sb,\sd) -- (\sbh, \sd); +\end{tikzpicture}% +} +\newcommand{\rrhUs}{\raisebox{-0.333\height}{\SquareUs}\,} +%% +\newcommand{\RubikUs}{% +\begin{minipage}{0.6cm} +\centering +\SquareUs\\ +\rrUs +\end{minipage}% +} +\newcommand{\textRubikUs}{\rrUs\,\rrhUs} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Usp} +% +% \begin{macro}{\rrUsp} +% \begin{macro}{\SquareUsp} +% \begin{macro}{\rrhUs} +% \begin{macro}{\RubikUs} +% \begin{macro}{\textRubikUsp} +% These commands all draw forms which denote the Usp rotation. +% \begin{macrocode} +\newcommand{\rrUsp}{\@rrsp{U}} +%% +\newcommand{\SquareUsp}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick, ->] (\sb,\sddd) -- (\sbh, \sddd); +\draw [thick] (\sb,\sdd) -- (\sbh, \sdd); +\draw [thick, ->] (\sb,\sd) -- (\sbh, \sd); +\end{tikzpicture}% +} +\newcommand{\rrhUsp}{\raisebox{-0.333\height}{\SquareUsp}\,} +%% +\newcommand{\RubikUsp}{% +\begin{minipage}{0.6cm} +\centering +\SquareUsp\\ +\rrUsp +\end{minipage}% +} +\newcommand{\textRubikUsp}{\rrUsp\,\rrhUsp} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Ua} +% +% \begin{macro}{\rrUa} +% \begin{macro}{\SquareUa} +% \begin{macro}{\rrhUa} +% \begin{macro}{\RubikUa} +% \begin{macro}{\textRubikUa} +% These commands all draw forms which denote the Ua rotation. +% \begin{macrocode} +\newcommand{\rrUa}{\@rra{U}} +%% +\newcommand{\SquareUa}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick, <-] (\sb,\sddd) -- (\sbh, \sddd); +\draw [thick] (\sb,\sdd) -- (\sbh, \sdd); +\draw [thick, ->] (\sb,\sd) -- (\sbh, \sd); +\end{tikzpicture}% +} +\newcommand{\rrhUa}{\raisebox{-0.333\height}{\SquareUa}\,} +%% +\newcommand{\RubikUa}{% +\begin{minipage}{0.6cm} +\centering +\SquareUa\\ +\rrUa +\end{minipage}% +} +\newcommand{\textRubikUa}{\rrUa\,\rrhUa} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotation Uap} +% +% \begin{macro}{\rrUap} +% \begin{macro}{\SquareUap} +% \begin{macro}{\rrhUap} +% \begin{macro}{\RubikUap} +% \begin{macro}{\textRubikUap} +% These commands all draw forms which denote the Uap rotation. +% \begin{macrocode} +\newcommand{\rrUap}{\@rrap{U}} +%% +\newcommand{\SquareUap}{% +\begin{tikzpicture}[scale=0.5] +\DrawNotationBox; +\draw [thick, ->] (\sb,\sddd) -- (\sbh, \sddd); +\draw [thick] (\sb,\sdd) -- (\sbh, \sdd); +\draw [thick, <-] (\sb,\sd) -- (\sbh, \sd); +\end{tikzpicture}% +} +\newcommand{\rrhUap}{\raisebox{-0.333\height}{\SquareUap}\,} +%% +\newcommand{\RubikUap}{% +\begin{minipage}{0.6cm} +\centering +\SquareUap\\ +\rrUap +\end{minipage}% +} +\newcommand{\textRubikUap}{\rrUap\,\rrhUap} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsection{ Rotation commands --- axis rotations} +% +% \subsubsection{ Rotations x and xp} +% +% \begin{macro}{\rrx} +% \begin{macro}{\rrhx} +% \begin{macro}{\Rubikx} +% These commands all draw forms which denote the x rotation. +% \begin{macrocode} +\newcommand{\rrx}{\textbf{\textsf{x}}} +\newcommand{\Rubikx}{\@xyzRubik{x}} +\newcommand{\rrhx}{\@xyzh{x}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{\rrxp} +% \begin{macro}{\rrhxp} +% \begin{macro}{\Rubikxp} +% These commands all draw forms which denote the xp rotation. +% \begin{macrocode} +\newcommand{\rrxp}{\textbf{\textsf{x}$^\prime$}} +\newcommand{\Rubikxp}{\@xyzRubikp{x}} +\newcommand{\rrhxp}{\@xyzhp{x}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotations y and yp} +% +% \begin{macro}{\rry} +% \begin{macro}{\rrhy} +% \begin{macro}{\Rubiky} +% These commands all draw forms which denote the y rotation. +% \begin{macrocode} +\newcommand{\rry}{\textbf{\textsf{y}}} +\newcommand{\Rubiky}{\@xyzRubik{y}} +\newcommand{\rrhy}{\@xyzh{y}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{\rryp} +% \begin{macro}{\rrhyp} +% \begin{macro}{\Rubikyp} +% These commands all draw forms which denote the yp rotation. +% \begin{macrocode} +\newcommand{\rryp}{\textbf{\textsf{y}$^\prime$}} +\newcommand{\Rubikyp}{\@xyzRubikp{y}} +\newcommand{\rrhyp}{\@xyzhp{y}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotations z and zp} +% +% \begin{macro}{\rrz} +% \begin{macro}{\rrhz} +% \begin{macro}{\Rubikz} +% These commands all draw forms which denote the z rotation. +% \begin{macrocode} +\newcommand{\rrz}{\textbf{\textsf{z}}} +\newcommand{\Rubikz}{\@xyzRubik{z}} +\newcommand{\rrhz}{\@xyzh{z}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{\rrzp} +% \begin{macro}{\rrhzp} +% \begin{macro}{\Rubikzp} +% These commands all draw forms which denote the zp rotation. +% \begin{macrocode} +\newcommand{\rrzp}{\textbf{\textsf{z}$^\prime$}} +\newcommand{\Rubikzp}{\@xyzRubikp{z}} +\newcommand{\rrhzp}{\@xyzhp{z}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotations u and d} +% +% \begin{macro}{\rru} +% \begin{macro}{\rrhu} +% \begin{macro}{\Rubiku} +% These commands all draw forms which denote the u rotation. +% \begin{macrocode} +\newcommand{\rru}{\textbf{\textsf{u}}} +\newcommand{\Rubiku}{\@xyzRubik{u}} +\newcommand{\rrhu}{\@xyzh{u}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{\rrd} +% \begin{macro}{\rrhd} +% \begin{macro}{\Rubikd} +% These commands all draw forms which denote the d rotation. +% \begin{macrocode} +\newcommand{\rrd}{\textbf{\textsf{d}}} +\newcommand{\Rubikd}{\@xyzRubik{d}} +\newcommand{\rrhd}{\@xyzh{d}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotations l and r} +% +% \begin{macro}{\rrl} +% \begin{macro}{\rrhl} +% \begin{macro}{\Rubikl} +% These commands all draw forms which denote the l rotation. +% \begin{macrocode} +\newcommand{\rrl}{\textbf{\textsf{l}}} +\newcommand{\Rubikl}{\@xyzRubik{l}} +\newcommand{\rrhl}{\@xyzh{l}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{\rrr} +% \begin{macro}{\rrhr} +% \begin{macro}{\Rubikr} +% These commands all draw forms which denote the r rotation. +% \begin{macrocode} +\newcommand{\rrr}{\textbf{\textsf{r}}} +\newcommand{\Rubikr}{\@xyzRubik{r}} +\newcommand{\rrhr}{\@xyzh{r}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{ Rotations f and b} +% +% \begin{macro}{\rrf} +% \begin{macro}{\rrhf} +% \begin{macro}{\Rubikf} +% These commands all draw forms which denote the f rotation. +% \begin{macrocode} +\newcommand{\rrf}{\textbf{\textsf{f}}} +\newcommand{\Rubikf}{\@xyzRubik{f}} +\newcommand{\rrhf}{\@xyzh{f}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{\rrb} +% \begin{macro}{\rrhb} +% \begin{macro}{\Rubikb} +% These commands all draw forms which denote the b rotation. +% \begin{macrocode} +\newcommand{\rrb}{\textbf{\textsf{b}}} +\newcommand{\Rubikb}{\@xyzRubik{b}} +\newcommand{\rrhb}{\@xyzh{b}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% -------------------------- +% End of this package +% -------------------------- +% \begin{macrocode} +%</rubikcube> +% \end{macrocode} +% +% +% +% +% \Finale +% +\endinput diff --git a/Master/texmf-dist/source/latex/rubik/rubikcube.ins b/Master/texmf-dist/source/latex/rubik/rubikcube.ins new file mode 100644 index 00000000000..5b5d6d5f45a --- /dev/null +++ b/Master/texmf-dist/source/latex/rubik/rubikcube.ins @@ -0,0 +1,76 @@ +%% rubikcube.dtx +%% Copyright 2014 RWD Nickalls (dick@nickalls.org) and A Syropoulos (asyropoulos@yahoo.com) +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work are RWD Nickalls and A Syropoulos +%% +%% +%% This work consists of the files rubikcube.dtx and rubikcube.ins +%% and the derived file rubikcube.sty. +%% +%% --------------- start of docstrip commands ------------------ +%% +\def\batchfile{rubikcube.ins} +\input docstrip.tex + +\preamble + +----------------------------------------------------------------- + Authors: RWD Nickalls (dick@nickalls.org) + and Apostolos Syropoulos (asyropoulos@yahoo.com) + + Copyright 2014 RWD Nickalls and A Syropoulos + + + This work may be distributed and/or modified under the + conditions of the LaTeX Project Public License, either + version 1.3 of this license or (at your option) any + later version: <http://www.latex-project.org/lppl.txt> + + This work consists of the files listed in the README file. +----------------------------------------------------------------- + + This is a LaTeX/TikZ package for drawing Rubik cubes + Please report errors or suggestions for improvement to + + RWD Nickalls (dick@nickalls.org) + Apostolos Syropoulos (asyropoulos@yahoo.com) + + This package requires the basic TikZ package to be loaded already +------------------------------------------------------------------ +\endpreamble + +\keepsilent %%disables most of the screen output +%% \askforoverwritefalse %%enables automatic overwriting of .sty +\generate{\file{rubikcube.sty}{\from{rubikcube.dtx}{rubikcube}}} + +%%now write a screen message for the user +\obeyspaces +\Msg{*******************************************************} +\Msg{* *} +\Msg{* To finish the installation you have to move the *} +\Msg{* following file into a directory searched by TeX: *} +\Msg{* *} +\Msg{* rubikcube.sty *} +\Msg{* *} +\Msg{* To produce the documentation run the file *} +\Msg{* rubikcube.dtx through LaTeX. *} +\Msg{* For an index, process any filename.idx file by *} +\Msg{* makeindex -s gind.ist filename *} +\Msg{* For list of changes, process any filename.glo file *} +\Msg{* makeindex -s gglo.ist -o filename.gls filename.glo *} +\Msg{* *} +\Msg{* Happy TeXing! *} +\Msg{*******************************************************} + +\endbatchfile +%%------------EOF--------------- diff --git a/Master/texmf-dist/source/latex/rubik/rubikrotation.dtx b/Master/texmf-dist/source/latex/rubik/rubikrotation.dtx new file mode 100644 index 00000000000..8ffc824499a --- /dev/null +++ b/Master/texmf-dist/source/latex/rubik/rubikrotation.dtx @@ -0,0 +1,987 @@ +% \iffalse meta-comment +% rubikrotation.dtx +% +% Authors: RWD Nickalls (dick@nickalls.org) +% and Apostolos Syropoulos (asyropoulos@yahoo.com) + +% Copyright 2014 RWD Nickalls + A Syropoulos +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either +% version 1.3c of this license or (at your option) any +% later version. The latest version of this licence is in +% +% http://www.latex-project.org/lppl.txt +% +%<*readme> +% +% The rubikrotation package provides a collection of LaTeX commands and macros +% for the typesetting of Rubik cube configurations and rotation +% sequences using the TikZ graphic language. +% +% Please report errors or suggestions for improvement to +% +% Dick Nickalls or Apostolos Syropoulos +% +% This package requires the basic TikZ package to be loaded already +%</readme> +% +%<*driver> +\listfiles +\documentclass{ltxdoc} +\IfFileExists{rubikrotation.sty}{\usepackage{rubikrotation}}{% + \GenericWarning{rubikrotation.dtx}{Package file rubikrotation.sty not found. + Documentation will be messed up!^^J + (Generate rubikrotation.sty by (La)TeXing rubikrotation.ins, and then^^J + process rubikrotation.dtx again)^^J}\stop +}% +\usepackage{ifpdf} +\usepackage{url} %% for references +\usepackage{graphicx} %% for the two pdf figs +%%\OnlyDescription +\EnableCrossrefs +\CodelineIndex +\CodelineNumbered +\RecordChanges +\setcounter{StandardModuleDepth}{1} +\begin{document} + \DocInput{rubikrotation.dtx} + \PrintChanges + \PrintIndex +\end{document} +%</driver> +% \fi +% +% +% +% \CheckSum{302} +% +%%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% +% +% \title{The \textsf{rubikrotation} package} +% +% \author{ +% RWD Nickalls (dick@nickalls.org) \\ +% A Syropoulos (asyropoulos@yahoo.com) +% } +% \date{This file describes version \RRfileversion, last revised \RRfiledate} +% \maketitle +% +% \begin{abstract} +% The \rubikrotation\ package is an extension for the +% \textsf{rubikcube} package. It provides the \cmd{\RubikRotation} command which +% processes on-the-fly a sequence of Rubik rotation moves (using the Perl script +% \texttt{rubikrotation.pl}) and returns the new Rubik cube state. It implements +% some basic checking of the Rubik state, and also offers a command for displaying +% any errors (\cmd{\ShowRubikErrors}). +% This package requires access to the \TeX\ \texttt{write18} facility by using the +% \texttt{--shell-escape} commandline switch. +% The \textsf{rubikrotation} package has been road-tested on a Microsoft +% platform (with MikTeX and Strawberry Perl), on a Linux platform ({\TeX}Live and Mandriva), +% and on OpenIndiana (a Solaris platform). +% \end{abstract} +% +% +% \bigskip +% +% \tableofcontents +% +% \section{Introduction} +% +% The \rubikrotation\ package is a dynamic extension to the \textsc{rubikcube} package. +% It consists of a style option (\texttt{rubikrotation.sty}) and a +% Perl script (\texttt{rubikrotation.pl}). +% +% The primary role of the \rubikrotation\ package is to implement on-the-fly Rubik +% rotation sequences using the \cmd{\RubikRotation} command. Consequently, this +% package requires the use of the \texttt{--shell-escape} switch to allow +% commandline control of the Perl script, which is really the `engine' of this package. +% The \textsf{rubikrotation} package has been road-tested on a Microsoft +% platform (with MikTeX and Strawberry Perl\,\footnote{`Strawberry Perl' +% (\texttt{http://strawberryperl.com}) is a free Perl +% environment for MS Windows, designed to be as close as possible to the Perl +% environment of Unix/Linux systems.}) +% and on a Linux platform ({\TeX}Live and Mandriva). +% +% The following commands are made available by \texttt{rubikrotation.sty}. +% \begin{quote} +% \begin{verbatim} +% \RubikRotation{} +% \SaveRubikState +% \CheckRubikState +% \ShowRubikErrors +%\end{verbatim} +% \end{quote} +% Note that if the Perl script is not located in the local working directory, then +% some care is needed regarding placing it where your system can both find it and +% also run it. In this case, the setting up of a simple one or two-line configuration +% file may be useful or even necessary, depending on your system +% (see section on `installation' below). +% +% +% \section{Requirements} +% +% The \rubikrotation\ package requires the TikZ and the \textsc{rubikcube} packages. +% +% +% \section{Installation} +% +% \subsection{Generating the files} +% +% Place the file \texttt{rubikrotation.zip} into a temporary directory, and unzip it. +% This will generate the following files: +% \begin{verbatim} +% rubikrotation.ins +% rubikrotation.dtx +% rubikrotation.sty +% rubikrotation.pl +% rubikrotation.PDF +% example-rot1.tex +% example-rot1.PDF +% example-rot2.tex +% example-rot2.PDF +%\end{verbatim} +% The style option \texttt{rubikrotation.sty} is generated by running (pdf)\LaTeX\ on +% the file \texttt{rubikrotation.ins} as follows: +%\begin{verbatim} +% pdflatex rubikrotation.ins +%\end{verbatim} +% The documentation file (\texttt{rubikrotation.pdf}) was generated using the following +% steps: +% \begin{verbatim} +% pdflatex --shell-escape rubikrotation.dtx +% pdflatex --shell-escape rubikrotation.dtx +% makeindex -s gind.ist rubikrotation +% makeindex -s gglo.ist -o rubikrotation.gls rubikrotation.glo +% pdflatex --shell-escape rubikrotation.dtx +%\end{verbatim} +% + +% +% \subsection{Placing the files} +% \label{sec:placingfiles} +% +% Place the files either in the local working directory, or where your system +% will find them. For a Linux system with a standard \TeX\ Directory Structure (TDS), then: +% +%\medskip +%{\noindent}*.sty $\rightarrow$ +% \texttt{/usr/local/texlive/texmf-local/tex/latex/local/rubikrotation/} +%{\newline}*.cfg $\rightarrow$ +% \texttt{/usr/local/texlive/texmf-local/tex/latex/local/rubikrotation/} +%{\newline}*.pdf $\rightarrow$ \texttt{/usr/local/texlive/texmf-local/doc/rubikrotation/} +%{\newline}*.pl $\rightarrow$ \texttt{/usr/local/bin/} +% +% \medskip +% {\noindent}Finally, (depending on your system) update the \TeX\ file database using the +% \texttt{texhash} command. + +% +% \subsection{Configuration file} +% \label{sec:configfile} +% +% A plane text configuration file with the name \texttt{rubikrotation.cfg} (if one exists) +% will be read by the system. Such a file allows the user to +% adjust (a)~the filename of the Perl script (\texttt{rubikrotation.pl}) +% and (b)~the commandline code used by \texttt{rubikrotation.sty} for calling the +% Perl script. This sort of fine-tuning is sometimes convenient, and even necessary +% (depending on your system), for locating and running the Perl script. +% For example, on some systems it maybe preferable to use a different \textsc{path}, +% file name and/or a different commandline code to call the script. +% +% +% \DescribeMacro{\rubikperlname} +% \DescribeMacro{\rubikperlcmd} +% The configuration file is essentially a convenient software vehicle for feeding some +% additional \LaTeX\ code to the style option, and hence allow the contents of some +% commands to be adjusted and/or fine-tuned. +% For the \rubikrotation\ package there are two particular commands we may wish to adjust. +% The first is that defining the filename of the Perl script, namely +% \cmd{\rubikperlname}. The second is that defining the commandline call, +% namely \cmd{\rubikperlcmd}. +% The default definitions for these (detailed in Section~\ref{sec:usefulcommands}) +% are as follows: +%\begin{verbatim} +% \newcommand{\rubikperlname}{rubikrotation.pl} +% \newcommand{\rubikperlcmd}{perl \rubikperlname} +%\end{verbatim} +% +% +% For example, we might wish to test out a slightly modified Perl script, say +% with the name \texttt{rubikrotationV3.pl}. In this case we simply create, +% in the local working directory, a plane text configuration file +% (called \texttt{rubikrotation.cfg}) which includes the following line: +%\begin{verbatim} +%\renewcommand{\rubikperlname}{rubikrotationV3.pl} +%\end{verbatim} +% +% Alternatively, say, if the Perl script is being installed on a Linux platform, then +% it would be standard to install it in the directory \texttt{/usr/local/bin}. +% A convenient approach in this case, therefore, would be to indicate this new \textsc{path} +% by including the following line in the configuration file: +%\begin{verbatim} +%\renewcommand{\rubikperlname}{/usr/local/bin/rubikrotation.pl} +%\end{verbatim} +% and, since this would then be an essentially permanent feature, we would then +% place the configuration file with the style option in the +% \texttt{texmf-local/...} directory as described in section~\ref{sec:placingfiles} +% (placing files). Note that in this case, we have \textit{not} made the Perl script +% `executable', since the default commandline code is effectively +% \texttt{perl \rubikperlname}, and this works just as it is. +% +% However, if the Perl script \textit{is} made `executable', then +% a different commandline code will have to be used instead. +% For example, suppose the Perl script is made executable and renamed to just +% \texttt{rubikrotation} (ie with no filename extension), then we now have to +% omit the `perl' from the default commandline. Consequently, we now need to make +% two command changes, which we implement by including the following +% two lines in the configuration file: +%\begin{verbatim} +%\renewcommand{\rubikperlname}{/usr/local/bin/rubikrotation} +%\renewcommand{\rubikperlcmd}{\rubikperlname} +%\end{verbatim} +% +% +% \section{Usage} +% +% Load the packages \texttt{rubikcube.sty} +% and \texttt{rubikrotation.sty} in the \TeX\ file \textit{after} loading +% the TikZ package, as follows: +% \begin{verbatim} +% \usepackage{tikz} +% \usepackage{rubikcube,rubikrotation} +%\end{verbatim} +% and run (pdf)\LaTeX\ using the \texttt{--shell-escape} commandline switch +% (see following section). +% +% +% \subsection{Enabling the \TeX\ `shell' facility} +% +% In order to enable the \TeX\ `write18' facility (so it can run the Perl script) +% we will need to invoke (pdf)\LaTeX\ using the \texttt{--shell-escape} switch; say, as follows. +% \begin{verbatim} +% pdflatex --shell-escape filename.tex +%\end{verbatim} +% In practice, it is probably most convenient to run this via a +% bash/batch file---something like the following, both of which +% automatically show the graphic output: +% \begin{verbatim} +% pdflatex --shell-escape filename.tex +% xpdf filename.pdf +%\end{verbatim} +% or +% \begin{verbatim} +% latex --shell-escape filename.tex +% dvips filename.dvi +% gv filename.ps +%\end{verbatim} +% +% +% \subsection{Test files} +% +% Two example tex files (which demonstrate the use of the package commands) are +% included in the package, namely: +% \begin{verbatim} +% example-rot1.tex (shows 5 worked examples) +% example-rot2.tex (is a `test' file for experimenting with different commands) +%\end{verbatim} +% These need to be run using \texttt{--shell-escape} switch; for example: +% \begin{verbatim} +% pdflatex --shell-escape example-rot1.tex +%\end{verbatim} +% If the files give unexpected results, check-out the log file to see if the system +% has had any difficulties finding files etc. +% +% +% +% \section{Commands} +% +% The \textit{only} commands which \textit{must} be used inside a TikZ picture +% environment are the \cmd{\Draw...} commands (these are all provided by +% the \textsc{rubikcube} package), although most commands can be placed +% inside a TikZ environment if necessary. However, using commands outside the environment +% generally offers maximum flexibility, since the effects of commands used inside +% a TikZ picture environment are `local' to that picture environment, and are not +% therefore accessable outside the environment. +% +% The only command which must \textit{not} +% be inside a TikZ environment is the \cmd{\ShowRubikErrors} command +% (see the notes on this command below). +% +% +% \subsection{\cmd{\RubikRotation} command} +% +% \DescribeMacro{\RubikRotation} +% The \cmd{\RubikRotation}\marg{comma separated sequence} command processes +% a comma separated sequence of rotations, and returns the final state. +% For example, if we wanted to see the effect of the rotations +% \textbf{R, R, L, U, D} on a solved Rubik cube, we could use the +% following commands. +% \begin{verbatim} +% \begin{tikzpicture}[scale=0.7] +% \RubikCubeSolved +% \RubikRotation{R2,L,U,D} +% \DrawRubikCubeRU +% \end{tikzpicture} +%\end{verbatim} +% The \cmd{\RubikRotation} command results in \LaTeX\ first writing +% the current Rubik state to a text file (\texttt{rubikstate.dat}), +% and then calling the Perl program \texttt{rubikrotation.pl}. The Perl +% program then reads the current rubik state from the (\texttt{rubikstate.dat}) +% file, performs all the rotations, and then writes the new rubik state +% (and any error messages) to the file \texttt{rubikstateNEW.dat}, +% which is then input on-the-fly by the \LaTeX\ file and used to generate +% some graphic image of the cube. +% +% Note that the \cmd{\RubikRotation} command can be either inside +% or before the Tikz picture environment. In fact only the `\cmd{\Draw...}' +% commands (from the \textsc{rubikcube} package) actually need to be inside +% a TikZ picture environment. Consequently this makes for great flexibility. +% +% \subsubsection{Arguments prefixed with a *} +% +% If any of the comma separated arguments (strings) is prefixed with a * it is +% not processed as a rotation. This feature therefore allows a string argument +% to be used as a label, which can be very useful. +% For example, we can use the * feature to label the following +% sequence as generating the so-called +% `sixspot' configuration (described by Reid): +% \begin{verbatim} +% \RubikRotation{*sixspot,U,Dp,R,Lp,F,Bp,U,Dp} +%\end{verbatim} +% Alternatively, and probably more conveniently, we could simply use +% the name `sixspot' to define a new command, as follows (which therefore allows +% one to store lots of different rotation sequences by name alone): +% \begin{verbatim} +% \newcommand{\sixspot}{U,Dp,R,Lp,F,Bp,U,Dp} +%\end{verbatim} +% With this `newcommand' we are now able to generate the graphic (sixspot cube) +% much more easily using the following code: +% +% \medskip +% +% \begin{minipage}{6cm} +% \begin{verbatim} +% \begin{tikzpicture}[scale=0.7] +% \RubikCubeSolved +% \RubikRotation{\sixspot} +% \DrawRubikCubeRU +% \end{tikzpicture} +%\end{verbatim} +% \end{minipage} +% \begin{minipage}{3.4cm} +% \centering +% \ifpdf +% \includegraphics[height=3cm]{Rubikrot_doc_figA.pdf} +% \else +% \fi +% \end{minipage} +% +% +% \medskip +% +% In practice, it is quite useful to go one step further and include +% the \texttt{*} label feature as well in the newcommand, as follows: +% \begin{verbatim} +% \newcommand{\sixspot}{*sixspot,U,Dp,R,Lp,F,Bp,U,Dp} +%\end{verbatim} +% since this has the great advantage of making the particular +% rotation sequence identified by the label-name visible in the log file. +% For example, the following command, which uses the rotations \textbf{x2} +% and \textbf{y} to initially rotate the `solved' cube before applying +% the `sixspot' sequence of rotations, +% \begin{verbatim} +% \RubikRotation{x2,y,\sixspot} +%\end{verbatim} +% will then be represented in the log file as +% \begin{verbatim} +% ...command=rotation,x2,y,*sixspot,U,Dp,R,Lp,F,Bp,U,Dp +% ...arguments passed to `rotation' sub = x2 y *sixspot U Dp R Lp F Bp U Dp (n= 11) +% ...rotation x OK (= rrR + rrSr + rrLp) +% ...rotation x OK (= rrR + rrSr + rrLp) +% ...rotation y OK (= rrU + rrSu + rrDp) +% ...*sixspot is a label OK +% ...rotation U OK +% ...rotation Dp OK +% ...rotation R OK +% ...rotation Lp OK +% ...rotation F OK +% ...rotation Bp OK +% ...rotation U OK +% ...rotation Dp OK +%\end{verbatim} +% In this way, several named rotation sequences can be easily distinguished +% in the log file from adjacent rotation commands. +% +% +% \subsubsection{Random rotations} +% +% The \cmd{\RubikRotation} command can also be used to scramble the +% cube using a random sequence of rotations. If the first argument +% is the lowercase word `random' \textsc{and} the second argument +% is an integer $n$, ($1\leq n \leq 200$), then a random sequence +% of $n$ rotations will be performed; otherwise a default value +% of 50 is used (for example, if the second argument is not an integer). +% If $n > 200$ then the value $n=200$ will be used. +% +% For example, the following commands will scramble a solved cube using a +% sequence of 120 random rotations, and display the state in the form of +% a semi-flat cube. +% +% \medskip +% +% \begin{minipage}{5.5cm} +%\begin{verbatim} +% \RubikCubeSolved% +% \RubikRotation{random,120}% +% \begin{tikzpicture}[scale=0.5] +% \DrawRubikCubeFlat +% \end{tikzpicture} +%\end{verbatim} +% \end{minipage} +% \begin{minipage}{3.4cm} +% \centering +% \ifpdf +% \includegraphics[height=4cm]{Rubikrot_doc_figB.pdf} +% \else +% \fi +% \end{minipage} +% +% Note that in this particular example (above), only +% the \cmd{\Draw..} command is inside the TikZ picture environment---a useful +% method when more than one figure is being drawn. Note also, that when such +% commands are outside a TikZ picture environment, they should have a +% trailing \% to stop additional white space being included. +% +% \medskip +% +% The procedure is that all the possible rotations are first allocated +% a different number (integer) and collected into an array. Then a +% sequence of $n$ randomised numbers is generated and mapped to the array +% to generate the associated sequence of random rotations. +% The sequence used is detailed in the \texttt{.log} file. +% +% +% \subsection{\cmd{\SaveRubikState}} +% +% \DescribeMacro{\SaveRubikState} +% The command \cmd{\SaveRubikState}\marg{filename} saves the state (configuration) +% of the Rubik cube to the file \marg{filename} in the standard \cmd{\RubikFace...} +% format. Consequently such a file can then be input at a later stage so it can be +% drawn or processed in the usual way (inside the TikZ picture environment). +% +% For example, the following commands would save the so-called `sixspot' configuration +% (generated by the rotations \textbf{U, Dp, R, Lp, F, Bp, U, Dp}) +% to the file \verb!sixspot.tex!. +%\begin{verbatim} +% \RubikCubeSolved% +% \RubikRotation{*sixspot,U,Dp,R,Lp,F,Bp,U,Dp}% +% \SaveRubikState{sixspot.tex}% +%\end{verbatim} +% The form of the file \verb!sixspot.tex! will then be as follows---the +% filename (commented out) is automatically written to the top of the +% file for convenience. +%\begin{verbatim} +% % filename: sixspot.tex +% \RubikFaceUp{O}{O}{O}{O}{W}{O}{O}{O}{O}% +% \RubikFaceDown{R}{R}{R}{R}{Y}{R}{R}{R}{R}% +% \RubikFaceLeft{Y}{Y}{Y}{Y}{B}{Y}{Y}{Y}{Y}% +% \RubikFaceRight{W}{W}{W}{W}{G}{W}{W}{W}{W}% +% \RubikFaceFront{G}{G}{G}{G}{O}{G}{G}{G}{G}% +% \RubikFaceBack{B}{B}{B}{B}{R}{B}{B}{B}{B}% +%\end{verbatim} +% We can therefore access and draw this configuration later, when required, +% simply by inputting the file as follows: +%\begin{verbatim} +%\begin{tikzpicture} +% \input{sixspot.tex} +% \DrawRubikCubeFlat +%\end{tikzpicture} +%\end{verbatim} +% +% +% \subsection{\cmd{\CheckRubikState} command} +% +% \DescribeMacro{\CheckRubikState} +% Since it is easy to inadvertently define an invalid Rubik cube +% (eg enter an invalid number of, say, yellow cubies), this command +% checks the current colour state of all the cubies +% of a 3x3x3 Rubik cube, and shows the number of cubies of each colour. +% An ERROR: code is issued if the number of cubies having a given colour exceeds 6. +% The results are written to the the \texttt{.log} file, and displayed under +% the graphic if the \cmd{\ShowRubikErrors} command is used. +% +% One can check the current Rubik state (for errors) by issuing the command +%\begin{verbatim} +% \CheckRubikState% +%\end{verbatim} +% Note that such a check is implemented automatically with each \cmd{\RubikRotation} command. +% +% +% +% +% \subsection{\cmd{\ShowRubikErrors} command} +% +% \DescribeMacro{\ShowRubikErrors} +% +% Any errors which arise can be made visible using the +% command \cmd{\ShowRubikErrors}. +% This command places a copy of the `error' file (\texttt{rubikstateERRORS.dat}) +% underneath the image so you can see any errors if there are any---all this +% detail can also be found in the \texttt{.log} file. +% +% Consequently, this command must be placed \textit{after} a TikZ picture +% environment---it cannot be used inside a TikZ environment. In fact this command +% is probably best placed at the end of the document (if there are several such +% environments), where it will reveal all rotation errors generated while +% processing the document. +% +% +% \section{Files generated} +% +% +% Whenever the \cmd{\RubikRotation} or \cmd{\CheckRubikState} commands are used, +% three small temporary plain text files for holding data are generated as +% follows (they are refreshed with each \LaTeX\ run, and are not actively deleted). +% \begin{itemize} +% \item \LaTeX\ writes Rubik state data to the file \texttt{rubikstate.dat}. +% +% \item Perl reads the file \texttt{rubikstate.dat} and then writes +% the new rubik state to the file \texttt{rubikstateNEW.dat}. +% +% \item Perl also writes error data to the file \texttt{rubikstateERRORS.dat}. +% A copy of this file is displayed under the image when the command +% \cmd{\ShowRubikErrors} is used after (outside) the TikZ picture environment. +% +% \end{itemize} +% +% +% \section{General overview} +% +% When \LaTeX\ loads the \rubikrotation\ package the following steps are implemented. +% \begin{itemize} +% +% +% \item[1.] A check is made to see if \texttt{fancyvrb.sty} is loaded: if not +% then this package is loaded if it is available (this package is required +% for inputting the file \texttt{rubikstateERRORS.dat}). +% +% \item[2.] A check is made to see if a configuration file (\texttt{rubikrotation.cfg}) +% exists: if so then this file is input. +% +% \item[3.] The text file \texttt{rubikstateNEW.dat} is overwritten (if it exists): +% otherwise the file is created (this prevents an `old' file being used by \LaTeX). +% +% \item[4.] The plain text file \texttt{rubikstateERRORS.dat} is created. +% This file collects error messages generated by the Perl script. +% +% \end{itemize} +% +% +% When a \cmd{\RubikRotation} command is processed it first writes the current +% colour configuration of each face (the `rubik state') to the temporary file +% \texttt{rubikstate.dat} (to be read by the Perl script \texttt{rubikrotation.pl}). +% The \cmd{\RubikRotation} command also appends the keyword ` +% \texttt{checkrubik}' as well as a copy of the string of Rubik rotations. +% It then calls the Perl script \texttt{rubikrotation.pl}. +% +% For example, if we use the command \cmd{\RubikCubeSolved} +% followed by the command \verb!\RubikRotation{U,D,L,R}! then the associated +% \texttt{rubikstate.dat} file would be as follows: +% \begin{verbatim} +% % filename: rubikstate.dat +% up,W,W,W,W,W,W,W,W,W +% down,Y,Y,Y,Y,Y,Y,Y,Y,Y +% left,B,B,B,B,B,B,B,B,B +% right,G,G,G,G,G,G,G,G,G +% front,O,O,O,O,O,O,O,O,O +% back,R,R,R,R,R,R,R,R,R +% checkstate +% rotation,U,D,L,R +%\end{verbatim} +% Alternatively, if the \cmd{\RubikRotation} command was +% \verb!\RubikRotation{random, 45}! then the last line written to the file +% would be the string `\texttt{rotation,random,45}' +% A \cmd{\CheckRubikState} command triggers the same sequence of events except +% no `rotation' line is written. +% +% The action of the Perl program is controlled by the keywords (first argument of +% each line) associated with each line of the file \texttt{rubikstate.dat}. +% When control passes to Perl, the Perl program starts by loading the +% rubikstate (prompted by the keywords up, down, +% left, right, front, back). Next the program performs +% some basic checks (prompted by the key word `checkstate'), and then it processes +% the sequence of Rubik rotations (prompted by the keyword `rotation'). +% If, instead, the second argument of the `rotation' string is the keyword `random', and +% provided this is followed by a valid integer, say $n$, then the Perl program performs +% a sequence of $n$ random rotations. +% Finally, the Perl program writes the final `rubikstate' to the text file +% \texttt{rubikstateNEW.dat}. All error messages are written to the +% text file \texttt{rubikstateERRORS.dat} and also to the \LaTeX\ log file. +% +% Control then reverts to \LaTeX\ which then inputs the file +% \texttt{rubikstateNEW.dat}. If there are more \cmd{\RubikRotation} commands +% then this cycle repeats accordingly. Eventually a `\texttt{Draw...}' command +% of some form is reached and the final rubikstate is drawn in a TikZ picture +% environment. +% +% If the TikZ picture environment is followed by a \cmd{\ShowRubikErrors} command, +% then a `verbatim' copy of the \texttt{rubikstateERRORS.dat} file is displayed +% immediately under the graphic. Once the graphic is error-free, then the +% \cmd{\ShowRubikErrors} can be removed or commented out. +% +% +% +% ^^A ================================================== +% \StopEventually{\PrintIndex} +% +% +% +% \section{The code (\texttt{rubikrotation.sty})} +% +% \subsection{Package heading} +% +% \begin{macrocode} +%<*rubikrotation> +\def\RRfileversion{2.0}% +\def\RRfiledate{2014/01/20}% +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{rubikrotation}[\RRfiledate\space (v\RRfileversion)] +% \end{macrocode} +% +% +% {\noindent}The package requires rubikcube.sty. Do not automatically +% load rubikcube.sty since this makes it difficult to errorcheck new +% versions (for the moment at least). +% \begin{macrocode} +\@ifpackageloaded{rubikcube}{}{% + \typeout{---rubikrotation requires the rubikcube package.}% + }% +% \end{macrocode} +% +% +% +% {\noindent}The \rubikrotation\ package requires access to the fancyvrb package +% for the \cmd{\VerbatimInput\{\}} command which we use for inputting and displaying +% the error file. +% \begin{macrocode} +\@ifpackageloaded{fancyvrb}{}{% + \typeout{---rubikrotation requires the fancyvrb package% + for VerbatimInput{} command.}% + \RequirePackage{fancyvrb}} +% \end{macrocode} +% \medskip +% +% +%\subsection{Some useful commands} +% \label{sec:usefulcommands} +% \begin{macro}{\rubikrotation} +% First we create a suitable logo +% \begin{macrocode} +\newcommand{\rubikrotation}{\textsf{rubikrotation}} +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\@comment} +% \begin{macro}{\@commentone} +% We require access to the percent character so we can write comments +% in files, including the log file. +% We first define percentchar for the write statement +% (From Abrahams PW, Berry K and Hargreaves KA (1990), ``TeX for the Impatient'', p~292; +% available from: CTAN.../info/impatient/) +% \begin{macrocode} +{\catcode`\%=12 \global\def\rubikpercentchar{%}}% +\newcommand{\@comment}{\rubikpercentchar\rubikpercentchar\space}% +\newcommand{\@commentone}{\rubikpercentchar}% +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\@print} +%% We need a simple print command for writing comments to a file. +% \begin{macrocode} +\newcommand{\@print}[1]{\immediate\write\outfile{#1}} +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\rubikperlname} +% This holds the name of the Perl-5 script . It is used later to check +% whether the Perl script exists or not. A plain text configuration file +% \verb!rubikrotation.cfg! can be used to change the default name of the +% Perl script using a renewcommand. +% \begin{macrocode} +\newcommand{\rubikperlname}{rubikrotation.pl} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\rubikperlcmd} +% This holds the commandline code for calling the the Perl script. +% A plain text configuration file \verb!rubikrotation.cfg! can be used to +% change the default commandline code using a renewcommand. +% \begin{macrocode} +\newcommand{\rubikperlcmd}{perl \rubikperlname} +% \end{macrocode} +% \end{macro} +% +% +%\subsection{Configuration file} +% If a config file exists (rubikrotation.cfg) then input it here, +% ie \textit{after} defining the \cmd{\rubikperlname} and \cmd{\rubikperlcmd} +% commands and \textit{before} creating the \texttt{rubikstateERRORS.dat} file. +% \begin{macrocode} +\typeout{---checking for config file (rubikrotation.cfg)...} +\IfFileExists{rubikrotation.cfg}{% + \input{rubikrotation.cfg}% + }{\typeout{---no config file available}% +}% +% \end{macrocode} +% +% +% \subsection{Clean file rubikstateNEW.dat} +% +% {\noindent}We need to clean any existing (old) rubikstateNEW.dat file, +% since if the TeX shell switch is accidentally not used then Perl will +% not be CALLed and hence this file will not be renewed +% (ie an `old' image may be used). +% \begin{macrocode} +\typeout{---cleaning file rubikstateNEW.dat}% +\newwrite\outfile% +\immediate\openout\outfile=rubikstateNEW.dat% +\@print{\@comment rubikstateNEW.dat (by TeX)}% +\immediate\closeout\outfile% +% \end{macrocode} +% +% +% \subsection{rubikstateERRORS.dat} +% +% {\noindent}The \rubikrotation\ package requires the Perl program. +% We first open the file \texttt{rubikstateERRORS.dat} which is used +% by the Perl program (\texttt{rubikrotation.pl}) for writing its error +% messages to. This file is accessed and displayed by the command +% \cmd{\ShowRubikErrors}. +% +% \textsc{important note}: this file is created fresh each time LaTeX is run +% and hence the Perl program only appends data to it during the \LaTeX\ run, +% so this file just grows until either it is destroyed or recreated---a useful +% feature to keep since the file accumulates all error messages as the +% .tex file is processed. +% We can't make the Perl program create the file since the Perl program is only +% CALLed if we use a \cmd{\RubikRotation} or \cmd{\CheckRubikState} +% command (which we may not!)---so it has to be created (opened) here. +% +% The following code first opens the file, and then checks to see if +% the Perl program (\cmd{\rubikperlname}) exists; +% if the Perl prog does exist then all is OK, +% otherwise we write an error message to the file. +% \begin{macrocode} +\typeout{---creating file rubikstateERRORS.dat}% +\newwrite\outfile% +\immediate\openout\outfile=rubikstateERRORS.dat% +\@print{\@comment rubikstateERRORS.dat}% +\typeout{---checking for Perl script \rubikperlname...} + \IfFileExists{\rubikperlname}{% + \typeout{---\rubikperlname\space exists OK}% + }{\typeout{** ERROR: cannot find Perl program \rubikperlname}% + \@print{\@comment ** ERROR: cannot find Perl program \rubikperlname}}% +\immediate\closeout\outfile% +% \end{macrocode} +% +% +% \subsection{Setting up a newwrite and file-access for new files} +% +% Having set up all the primary files, we now need to set up a newwrite for +% all subsequent files openings (eg for rubikstate.dat and saving +% to arbitrary filenames by the \cmd{\SaveRubikState} command). Otherwise, we +% can easily exceed the LaTeX limit of 15. From here-on \TeX\ will use openout7 +% when opening and writing to files. We will implement new openings using +% the command \verb!\@openstatefile! (see below). +% \begin{macrocode} +\typeout{---setting up newwrite for rubikrotation to use...}% +\newwrite\outfile% +% \end{macrocode} +% +% +% \begin{macro}{\@openstatefile} +% \begin{macro}{\@closestatefile} +% We also need commands for easy file opening and and closing +% for new instances of the file \texttt{rubikstate.dat} etc. +% Note that for this we are therefore using the same outfile number as set up +% by the \verb!\newwrite...! above. +% \begin{macrocode} +\newcommand{\@openstatefile}{\immediate\openout\outfile=rubikstate.dat} +\newcommand{\@closestatefile}{\immediate\closeout\outfile} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \subsection{Saving the Rubik state} +% +% \begin{macro}{\@printrubikstate} +% This command writes the Rubik configuration (state) to +% the file \texttt{rubikstate.dat}, and is used by the \cmd{\RubikRotation} command. +% The file \texttt{rubikstate.dat} is read by the Perl program, and represents +% the state on which the new \cmd{\RubikRotation} command acts. +% Note that we append the key-word \texttt{checkstate} to the end of the file +% in order to trigger the Perl program to implement its \texttt{checkstate} subroutine. +% \begin{macrocode} +\newcommand{\@printrubikstate}{% + \@print{up,\Ult,\Umt,\Urt,\Ulm,\Umm,\Urm,\Ulb,\Umb,\Urb}% + \@print{down,\Dlt,\Dmt,\Drt,\Dlm,\Dmm,\Drm,\Dlb,\Dmb,\Drb}% + \@print{left,\Llt,\Lmt,\Lrt,\Llm,\Lmm,\Lrm,\Llb,\Lmb,\Lrb}% + \@print{right,\Rlt,\Rmt,\Rrt,\Rlm,\Rmm,\Rrm,\Rlb,\Rmb,\Rrb}% + \@print{front,\Flt,\Fmt,\Frt,\Flm,\Fmm,\Frm,\Flb,\Fmb,\Frb}% + \@print{back,\Blt,\Bmt,\Brt,\Blm,\Bmm,\Brm,\Blb,\Bmb,\Brb}% + \@print{checkstate}% +} +% \end{macrocode} +% \end{macro} +% +% +% \subsection{RubikRotation command} +% +% \begin{macro}{\RubikRotation} +% The \cmd{\RubikRotation}\marg{comma separated sequence} +% command (a)~writes the current Rubik state to the file +% \texttt{rubikstate.dat}, and then (b)~CALLs the Perl program. +% It also writes comments to the data file and also to the log file. +% \begin{macrocode} +\newcommand{\RubikRotation}[1]{\IfFileExists{\rubikperlname}{% + \typeout{---NEW rotation command------------------}% + \typeout{---command = RubikRotation{#1}}% + \typeout{---Perl script \rubikperlname\space exists OK}% + \typeout{---writing current Rubik state to file rubikstate.dat}% + \@openstatefile% open data file + \@print{\@comment filename: rubikstate.dat}% + \@printrubikstate% + \@print{rotation,#1}% + \@closestatefile% close data file + \typeout{---running Perl script}% + \immediate\write18{\rubikperlcmd}% + \typeout{---inputting NEW datafile (from Perl)}% + \input{rubikstateNEW.dat}% + \typeout{-----------------------------------------}% + }{\typeout{** ERROR: \rubikperlname\space does not exist}% +}} +% \end{macrocode} +% \end{macro} +% +% +% \subsection{ShowRubikErrors command} +% +% \begin{macro}{\ShowRubikErrors} +% This command inputs the file \texttt{rubikstateERRORS.dat}. +% \begin{macrocode} +\newcommand{\ShowRubikErrors}{% + \typeout{---ShowRubikErrors: inputting file rubikstateERRORS.dat}% + \VerbatimInput{rubikstateERRORS.dat}} +% \end{macrocode} +% \end{macro} +% +% +% \subsection{CheckRubikState command} +% +% \begin{macro}{\CheckRubikState} +% This command triggers the Perl program to implement +% some simple error checking of the Rubik configuration (state). +% This command (a)~writes the current Rubik state to the file +% \texttt{rubikstate.dat}, and then (b)~CALLs the Perl program. +% It also writes comments to the data file and also to the log file.. +% \begin{macrocode} +\newcommand{\CheckRubikState}{\IfFileExists{\rubikperlname}{% + \typeout{---NEW check command------------------}% + \typeout{---command = CheckRubikState}% + \typeout{---Perl script \rubikperlname\space exists OK}% + \typeout{---writing current Rubik state to file rubikstate.dat}% + \@openstatefile% opens data file + \@print{\@comment filename: rubikstate.dat}% + \@printrubikstate% + \@closestatefile% close data file + \typeout{---running Perl script}% + \immediate\write18{\rubikperlcmd}% + \typeout{---inputting NEW datafile (from Perl)}% + \input{rubikstateNEW.dat}% + \typeout{-----------------------------------------}% + }{\typeout{** ERROR: \rubikperlname\space does not exist}% +}} +% \end{macrocode} +% \end{macro} +% +% +% +% \subsection{SaveRubikState macro} +% +% \begin{macro}{\SaveRubikState} +% The command \cmd{\SaveRubikState}\marg{filename} saves the Rubik state +% to a file. Note that in order to actually write a LaTeX +% command to a file without a trailing space one must use the +% \cmd{\string} command (see the book ``TeX by Topic'', p~238). +% Note that this macro uses the two internal commands \cmd{\Rubik@comment} +% and \cmd{\Rubik@print}. \#1 is the output filename. +% We use several \cmd{\typeout} commands to write to the log file. +% \begin{macrocode} +\newcommand{\SaveRubikState}[1]{% +\typeout{---NEW save command------------------}% +\typeout{---command = SaveRubikState{#1}}% +\typeout{---saving Rubik state data to file #1}% +\immediate\openout\outfile=#1% +\@print{\@comment filename: #1\@commentone}% +\@print{\string\RubikFaceUp% + {\Ult}{\Umt}{\Urt}{\Ulm}{\Umm}{\Urm}{\Ulb}{\Umb}{\Urb}\@commentone}% +\@print{\string\RubikFaceDown% + {\Dlt}{\Dmt}{\Drt}{\Dlm}{\Dmm}{\Drm}{\Dlb}{\Dmb}{\Drb}\@commentone}% +\@print{\string\RubikFaceLeft% + {\Llt}{\Lmt}{\Lrt}{\Llm}{\Lmm}{\Lrm}{\Llb}{\Lmb}{\Lrb}\@commentone}% +\@print{\string\RubikFaceRight% + {\Rlt}{\Rmt}{\Rrt}{\Rlm}{\Rmm}{\Rrm}{\Rlb}{\Rmb}{\Rrb}\@commentone}% +\@print{\string\RubikFaceFront% + {\Flt}{\Fmt}{\Frt}{\Flm}{\Fmm}{\Frm}{\Flb}{\Fmb}{\Frb}\@commentone}% +\@print{\string\RubikFaceBack% + {\Blt}{\Bmt}{\Brt}{\Blm}{\Bmm}{\Brm}{\Blb}{\Bmb}{\Brb}\@commentone}% +\immediate\closeout\outfile% +\typeout{-----------------------------------------}% +}% +% \end{macrocode} +% \end{macro} +% +% +% -------------------------- +% End of this package +% -------------------------- +% \begin{macrocode} +%</rubikrotation> +% \end{macrocode} +% +% +% +% +% \Finale +% +\endinput + + + + + diff --git a/Master/texmf-dist/source/latex/rubik/rubikrotation.ins b/Master/texmf-dist/source/latex/rubik/rubikrotation.ins new file mode 100644 index 00000000000..3f1f2f1f354 --- /dev/null +++ b/Master/texmf-dist/source/latex/rubik/rubikrotation.ins @@ -0,0 +1,75 @@ +%% rubikrotation.ins +%% --- automatic overwriting of .sty is disabled------- +%% ========================================================= +%% Authors: RWD Nickalls (dick@nickalls.org) +%% and Apostolos Syropoulos (asyropoulos@yahoo.com) +%% Copyright January 20, 2014 RWD Nickalls + A Syropoulos +%% +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either +%% version 1.3c of this license or (at your option) any +%% later version: <http://www.latex-project.org/lppl.txt> +%% +%% This work consists of the files listed in the README file. +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this work when run through +%% LaTeX. +%% +%% --------------- start of docstrip commands ------------------ +%% +\def\batchfile{rubikrotation.ins} +\input docstrip.tex + +\preamble + +----------------------------------------------------------------- + Authors: RWD Nickalls (dick@nickalls.org) + and Apostolos Syropoulos (asyropoulos@yahoo.com) + Copyright January 2014 RWD Nickalls and A Syropoulos + + + This work may be distributed and/or modified under the + conditions of the LaTeX Project Public License, either + version 1.3c of this license or (at your option) any + later version: <http://www.latex-project.org/lppl.txt> + + This work consists of the files listed in the README file. +----------------------------------------------------------------- + + This is a LaTeX/TikZ package for drawing Rubik cubes + Please report errors or suggestions for improvement to + + RWD Nickalls (dick@nickalls.org) + Apostolos Syropoulos (asyropoulos@yahoo.com) + + This package requires the basic TikZ package to be loaded already +------------------------------------------------------------------ +\endpreamble + +\keepsilent %%disables most of the screen output +%% \askforoverwritefalse %%enables automatic overwriting of .sty +\generate{\file{rubikrotation.sty}{\from{rubikrotation.dtx}{rubikrotation}}} + +%%now write a screen message for the user +\obeyspaces +\Msg{*******************************************************} +\Msg{* *} +\Msg{* To finish the installation you have to move the *} +\Msg{* following file into a directory searched by TeX: *} +\Msg{* *} +\Msg{* rubikrotation.sty *} +\Msg{* *} +\Msg{* To produce the documentation run the file *} +\Msg{* rubikrotation.dtx through LaTeX. *} +\Msg{* For an index, process any filename.idx file by *} +\Msg{* makeindex -s gind.ist filename *} +\Msg{* For list of changes, process any filename.glo file *} +\Msg{* makeindex -s gglo.ist -o filename.gls filename.glo *} +\Msg{* *} +\Msg{* Happy TeXing! *} +\Msg{*******************************************************} + +\endbatchfile +%%------------EOF--------------- |