diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/rubik')
-rwxr-xr-x | Master/texmf-dist/source/latex/rubik/example-rot1.bat | 2 | ||||
-rwxr-xr-x | Master/texmf-dist/source/latex/rubik/example-rot2.bat | 1 | ||||
-rwxr-xr-x | Master/texmf-dist/source/latex/rubik/examples.bat | 4 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/rubik/rubikcube.dtx | 3675 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/rubik/rubikcube.ins | 39 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/rubik/rubikrotation.dtx | 1177 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/rubik/rubikrotation.ins | 12 |
7 files changed, 2999 insertions, 1911 deletions
diff --git a/Master/texmf-dist/source/latex/rubik/example-rot1.bat b/Master/texmf-dist/source/latex/rubik/example-rot1.bat deleted file mode 100755 index 3fc9ec4b31e..00000000000 --- a/Master/texmf-dist/source/latex/rubik/example-rot1.bat +++ /dev/null @@ -1,2 +0,0 @@ - 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 deleted file mode 100755 index e648b587ac7..00000000000 --- a/Master/texmf-dist/source/latex/rubik/example-rot2.bat +++ /dev/null @@ -1 +0,0 @@ -pdflatex --shell-escape example-rot2.tex
diff --git a/Master/texmf-dist/source/latex/rubik/examples.bat b/Master/texmf-dist/source/latex/rubik/examples.bat new file mode 100755 index 00000000000..1a67e63e77e --- /dev/null +++ b/Master/texmf-dist/source/latex/rubik/examples.bat @@ -0,0 +1,4 @@ + latex --shell-escape examples.tex +# latex --shell-escape examples.tex + + diff --git a/Master/texmf-dist/source/latex/rubik/rubikcube.dtx b/Master/texmf-dist/source/latex/rubik/rubikcube.dtx index 053c01df17f..c2f2411d015 100644 --- a/Master/texmf-dist/source/latex/rubik/rubikcube.dtx +++ b/Master/texmf-dist/source/latex/rubik/rubikcube.dtx @@ -1,7 +1,12 @@ % \iffalse meta-comment % -%% rubikcube.dtx -%% Copyright 2014 RWD Nickalls (dick@nickalls.org) and A Syropoulos (asyropoulos@yahoo.com) +% rubikcube.dtx +% +% version 3.0 25 September 2015 +% +% Copyright 2015 +% 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 @@ -11,10 +16,6 @@ % 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. @@ -42,10 +43,12 @@ process rubikcube.dtx again)^^J}\stop }% \usepackage{ifpdf} -\usepackage{url} %% for references +\usepackage{url,path} %% for references \usepackage{supertabular} %% for Notation table +\usepackage{hypdoc} %% for hyperref documenting of LaTeX packages %%\OnlyDescription \EnableCrossrefs +\PageIndex \CodelineIndex \CodelineNumbered \RecordChanges @@ -60,7 +63,7 @@ % % % -% \CheckSum{3912} +% \CheckSum{4105} % %%% \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 @@ -79,66 +82,32 @@ %% Right brace \} Tilde \~} % % -% \title{The \textsf{rubikcube} package} +% \title{The \textsc{rubikcube} package} % % \author{ % RWD Nickalls (dick@nickalls.org) \\ % A Syropoulos (asyropoulos@yahoo.com) % } -% \date{This file describes version \RCfileversion, last revised \RCfiledate} +% \date{This file describes version \RCfileversion\ (\RCfiledate)\\ +% \texttt{www.ctan.org/pkg/rubik}} % \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. +% rotation sequences using the TikZ graphic language. It is part of the +% rubik `bundle'. % \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} +% \medskip +% +% \begin{minipage}{11cm} % \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} +% \ifpdf +% \includegraphics[width=10cm]{Rubik-doc-figF.pdf} +% \else +% \fi % \end{minipage} -% \hfil -% -% \bigskip % % \tableofcontents % @@ -146,58 +115,68 @@ % % \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 +% The \rubikcube\ package (part of the \textsc{rubik} `bundle') provides a +% collection of \LaTeX\ commands +% and macros for typesetting Rubik cube configurations using the +% PGF/TikZ graphic languages. Note that this package relates only to the +% familiar 3x3x3 Rubik cube. +% We have extended 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). +% The \rubikcube\ package is designed to be used in conjunction +% with the \textsc{rubikrotation} package (see below); the former deals +% primarily with typesetting, while the latter processes rotation sequences +% and keeps track of the cube's configuration. +% +% The \rubikcube\ package has been road-tested on a Microsoft +% platform (with \textsf{MiK}\TeX), a Linux platform (Mandriva and {\TeX}Live), +% and on a Solaris platform (OpenIndiana). % % +% For the mathematics and group theory associated with the Rubik cube see Chen~(2004), +% Davis (2006), Golomb~(1981, 1982), Joyner~(2008), Hofstadter (1981), Hutchings~(2011), +% Kociemba web site, Rokicki~\textit{et al.} (2013), Tran~(2005). % 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). -% +% maintained by Duvoid, by Fridrich, by Jelinek, by Reid, and by Vandenburgh +% (see References). % -% \subsection{Requirements} % -% The \rubikcube\ package requires the TikZ package. +% \subsection{Requirements} % +% The \rubikcube\ package requires the TikZ package. +% In particular, we make use the \cmd{\pgfmathsetmacro} command and +% the TikZ picture environment. % -% \subsection{Supporting tool---the \textsf{rubikrotation} package} +% +% \subsection[rubikrotation package]{Supporting tool---the +% \textsc{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 +% The \textsc{rubikrotation} package, is a dynamic extension to +% the \rubikcube\ package, and is part of the `Rubk bundle'. It consists of the +% Perl program \texttt{rubikrotation.pl} and the associated style option +% \texttt{rubikrotation.sty}. +% The \textsc{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} +% \texttt{rubikrotation.pl} program, it follows that the \textsc{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). +% See the \textsc{rubikrotation} documentation for details. % % % \subsection{Copyright} -% Copyright 2014 RWD Nickalls and A Syropoulos. +% Copyright 2014--2015 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 +% |www.latex-project.org/lppl.txt| % % % \section{Installation} @@ -207,32 +186,34 @@ % % 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 +%\begin{verbatim} +% rubikcube.ins +% rubikcube.dtx +% rubikcube.pdf +% Rubik-doc-figA.pdf +% Rubik-doc-figB.pdf +% Rubik-doc-figC.pdf +% Rubik-doc-figD.pdf +% Rubik-doc-figE.pdf +% Rubik-doc-figF.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 +% This documentation file (\texttt{rubikcube.pdf}) can then be generated using the following +% steps\,\footnote{Since the documentation includes a complicated indexing +% system as well a \textsc{pdf} index and hyperef links (the package \texttt{hypdoc} +% is used), then several pdflatex runs are required. Prior to the first run it is +% a good idea to delete any relevant \texttt{.toc}, \texttt{.aux}, \texttt{.out} files.}: +%\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 +% pdflatex rubikcube.dtx %\end{verbatim} % % @@ -243,12 +224,12 @@ % %\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/} +% \texttt{/usr/local/texlive/texmf-local/tex/latex/rubik/} +%{\newline}*.pdf $\rightarrow$ \texttt{/usr/local/texlive/texmf-local/doc/rubik/} % % \medskip -% {\noindent}Finally, (depending on your system) update the \TeX\ file database using the -% \texttt{texhash} command. +% {\noindent}Finally, (depending on your system) update the \TeX\ file database. +% For example, on a Linux system one uses the \texttt{texhash} command. % % % \subsection{Usage} @@ -259,117 +240,181 @@ % \begin{quote} %\begin{verbatim} % \usepackage{tikz} -% \usepackage{rubikcube} +% \usepackage{rubikcube,rubikrotation} %\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. +% While \rubikcube\ is a stand-alone package, it is best to also load the complementary +% \textsc{rubikrotation} package. % % % \section{TikZ picture environment} +% \label{sec:tikz} % % 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 \texttt{pgfmanual.pdf}, version 3.0.1a (August 2015) (1161 pages) +% \item \texttt{pgfplot.pdf}, version 1.12.1 (2015) (504 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. +% An example of the TikZ picture environment for use with the \rubikcube\ package +% is as follows: % \begin{quote} %\begin{verbatim} % \begin{tikzpicture}[scale=0.5] % .... -% \end{tikzpicture} +% \end{tikzpicture}% %\end{verbatim} % \end{quote} +% If no scale is used (default scale = 1), then each of the small +% cubie sides will have a length of 1~cm. +% % A very useful feature of TikZ is that it automatically % minimises the surrounding white-space, and consequently this is -% mostly quite sufficient. +% mostly quite sufficient. However, it is good practice to place +% a \% symbol after the \verb!\end{tikzpicture}! command *see above) +% to avoid additional white space (see Section~\ref{sec:trailingpercent}). % -% However, when making complicated side-by-side figures it is -% sometimes helpful to place each sub-figure in a surrounding minipage. +% +% \subsection[ShowCube command]{\cmd{\ShowCube} command} +% \label{sec:showcube} +% +% \DescribeMacro{\ShowCube} +% \DescribeMacro{\ShowCubeF} +% When making side-by-side figures it can be very helpful +% to place each sub-figure inside a 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. +% the tikzpicture `scale' parameter to obtain the appropriate size, and +% then adjust the minipage width as necessary +% (see Section~\ref{sec:sizeofminipage}). +% The \cmd{\ShowCube} macro (See Section~\ref{sec:showcubecode}) places one +% or more commands inside a tikzpicture environment and places all of +% these inside a minipage. It takes three arguments: the first is the +% minipage width (\verb!#1!), second is the tikzpicture scale +% factor (\verb!#2!), and third is a \cmd{\Draw..} command (|#3|). % -% 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} +% \noindent\textsc{usage}: +% The following command would display a Rubik cube in a +% minipage of width 2cm using a tikzpicture scale factor of 0.5: %\begin{verbatim} -% \fbox{% -% \begin{minipage}{2cm} -% \centering -% \begin{tikzpicture}[scale=0.5] -% .... -% \end{tikzpicture} -% \end{minipage} -% } +% \ShowCube{2cm}{0.5}{\DrawRubikCubeRU} %\end{verbatim} -% \end{quote} +% For example, the following two sets of commands are equivalent (see +% Section~\ref{sec:showcubecode} for the code); i.e.,~any commands which are valid in +% a \texttt{tikzpicture} environment may be used as the main argument for the +% \cmd{\ShowCube} command. +% $$ +% \left. +% \begin{array}{l} +% \verb!\RubikCubeSolved!\\ +% \verb!\begin{minipage}{2cm}!\\ +% \ \ \verb!\centering!\\ +% \ \ \verb!\begin{tikzpicture}[scale=0.5]!\\ +% \ \ \ \ \ \verb!\DrawRubikCubeRU!\\ +% \ \ \ \ \ \verb!\draw[->] (0.5,5) -- (0.5,4);!\\ +% \ \ \verb!\end{tikzpicture}!\\ +% \verb!\end{minipage}!\\ +% \end{array} +% \right\} +% \begin{array}{l} +% \verb!\RubikCubeSolved!\\ +% \verb!\ShowCube{2cm}{0.5}{%!\\ +% \ \ \ \ \verb!\DrawRubikCubeRU!\\ +% \ \ \ \ \verb!\draw[->] (0.5,5) -- (0.5,4);!\\ +% \ \verb!}!\\ +% \end{array} +% $$ +% +% The \cmd{\ShowCubeF} command is similar in all respects except that it places +% an fbox around the minipage in order to enable users to see the extent of any +% associated white space. +% % 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}. +% image and adjacent text, is usually related to +% `hidden' white-space associated with the image itself or excessive width +% of the associated \cmd{\minipage} (see also Section~\ref{sec:trailingpercent}). +% Consequently, a temporary fbox around the minipage can be a +% useful aid when trying to visualise the full extent of the minipage +% (and its associated whitespace). Use the \cmd{\ShowCubeF} command for this, as follows: % -% -% \subsection{\rubikcube\ commands} +% \medskip % -% 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. +% \RubikCubeSolved +% \ShowCubeF{4cm}{0.3}{\DrawRubikCubeRU} +%\begin{minipage}{5cm} +%\begin{verbatim} +% \ShowCubeF{4cm}{0.3}{\DrawRubikCubeRU} +%\end{verbatim} +%\end{minipage} +% +% \medskip +% {\noindent}Clearly either the minipage is too wide (4cm) or the \texttt{tikzpicture} +% scale factor is too small (0.3). Once the figure/code has been corrected, then the +% \texttt{F} in the \cmd{\ShowCubeF} command can be removed. Note that while +% the \cmd{\ShowCube} command centers the image inside the minipage, \LaTeX\ positions +% the minipage in the \cmd{\textwidth}, and hence it is generally best to minimise +% the white-space as revealed by the \cmd{\ShowCubeF} command. The relationship +% between the required width of the minipage and the TikZ scale factor for the various +% Rubik cube images is detailed in Section~\ref{sec:sizeofminipage}. % -% 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} +% \subsection[Draw.. error message]{\cmd{\Draw} error message} +% \label{sec: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. +% If a \rubikcube\ \cmd{\Draw..} command is used \textit{outside} a +% TikZ picture environment, then \LaTeX\ issues an +% ``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 +% For example, if we use the \rubikcube\ command % \cmd{\DrawRubikFlat} without a surrounding TikZ picture environment -% you will see something like the following error message. +% then something similar to the following error message will be generated. %\begin{verbatim} %! Undefined control sequence. -%\FlatUp ... }{#1}\pgfmathsetmacro {\uy }{#2}\draw -% [line join=round,... +%\DrawFlatUp ... }{#1}\pgfmathsetmacro {\uy }{#2}\draw +% [line join=round,... %l.56 \DrawRubikFlat %\end{verbatim} % % -% \section{Command conventions} -% \label{sec:conventions} % +% \section{Command conventions} +% \label{sec:conventions} % -% \DescribeMacro{\rubikcube} -% This command generates the logo \rubikcube. +% \subsection{Commands and environments} % +% 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 Rubik \cmd{\Draw...} commands and TikZ commands actually +% have to be used inside a TikZ picture environment. +% +% Indeed, using \rubikcube\ commands which influence the Rubik colour state +% (configuration) outside the \texttt{tikzpicture}, \texttt{minipage} or +% \texttt{figure} environments can make for useful +% flexibility when a document is generating more than one figure +% or image. This is because the scope of any colours specified by commands inside +% these environments is constrained to +% be `local' to that particular environment, and hence any change in the +% Rubik colour state brought about by such commands is not accessable +% globally (i.e.,~outside the environment) ---see also Section~5 in the documentation +% of the \textsc{rubikrotation} package. +% +% Consequently users need to be mindful of the environments when +% drawing long sequences of rotations across several figures; for example, keeping +% \cmd{\RubikRotation} commands outside the environments keeps their effects global. % % \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'; +% However, as 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}). +% always written in uppercase. +% % % \subsection{XYZ argument ordering} % @@ -378,189 +423,371 @@ % 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; +% i.e.,~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} +% \subsection{Trailing \% on the end of commands} +% \label{sec:trailingpercent} % % It is important to include a trailing \% on the end of \rubikcube\ -% commands when used \textit{outside} a TikZ picture environment. +% commands when used \textit{outside} a TikZ picture environment, and +% also on the end of each \cmd{\end\{tikzpicture\}} environment command. % 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. +% the graphics. In \TeX\ every newline character is automatically converted +% to a white space---unless you have an empty line +% (Feuers\"{a}nger 2015, \S\,3.2.3, page~20). +% +% +% +% \subsection{Cubies, cubicles, faces and facelets} +% +% The sub-cubes which make up the Rubik cube are known as `cubies'; the small +% coloured face of a cubie is known as a `facelet'. The cubies +% are named either according to the colours of their two or three facelets, or +% according to their physical position. +% +% We distinguish three types of cubie: +% centre-cubies (single colour), edge-cubies (two colours) and corner-cubies +% (three colours). For example, the red/white edge-cubie is called +% the RW cubie, and the red/white/green corner-cubie is called the +% RWG cubie etc. Note that the colour of a particular face of a 3x3x3 Rubik +% cube is determined by the colour of its centre-cubie. +% +% Similarly, the positions (known as `cubicles') occupied by cubies are +% defined using either a two or three letter face code. For example the +% right edge position in the Up-layer is termed the Up/Right position, +% or just the UR position, and the corner joining the \textsc{down} +% \textsc{front} and \textsc{right} faces is the DFR position. +% +% +% +% \section{Colours} +% +% The \rubikcube\ package uses 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{We thank Peter Bartal +% for bringing this to our attention.} +% +% \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 implemented by +% the \rubikcube\ package are as follows +% (see Section~\ref{sec:codecolours}): +% +% \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 rotation commands and notation} -% \label{sec:RubikCommands} % -% We use the standard Rubik cube notation of WCA (2012)---see article~12---and +% \subsection{Colour state of the cube} +% \label{sec:colourstate} +% +% Initially, when \LaTeX\ reads the file \texttt{rubikcube.sty} all facelets +% are allocated the code X, which can be regarded as a zero-colour state. +% Until a facelet is allocated one of the six Rubik colours it will be rendered as +% grey by a command which just draws the current colour state of the cube or a face +% (e.g.,~\cmd{\DrawFlatUpSide}). +% +% It is important to appreciate that the various commands which typeset faces +% or facelets with colours differ in whether they derive the colours +% from the current internal colour `state' (configuration) of the Rubik cube, or not. +% +% The colour state of cubies in faces and slices can be allocated using \cmd{\RubikFace...} +% and \cmd{\RubikSlice...} (see Sections~\ref{sec:facecommands} and \ref{sec:slicecommands}). +% The commands \cmd{\RubikCubeSolved} and \cmd{RubikCubeGrey} allocate the colour state +% for the whole cube, and are useful starting points for subsequent rotations. +% Note that cubies will retain their colour allocation even if the cubies are are moved by +% rotation commands, unless they are overwritten by a subsequent colour allocation command. +% To then visualise the cube one has to use a \cmd{\Draw...} command. +% +% The \textsc{rubikrotation} package keeps track of the Rubik state following +% rotations and sequences of rotations processed by its \cmd{\RubikRotation} command. +% The current colour state of the Rubik cube can be saved and written to a named file +% using its \cmd{\SaveRubikState} command; this file can then be \cmd{\input} when required. +% +% Note that although some \cmd{\Draw...} commands (e.g.,~\cmd{\DrawRubikLayerFace...}) use +% colours as arguments, these commands really only `paint' colours onto cubie positions +% (on the page, so to speak); i.e.,~these commands do not update the internal Rubik +% colour state, and hence these colours do not exist outside the particular +% \texttt{tikzpicture} environment the \cmd{\Draw..} command was used in. +% +% +% \section{Rubik cube 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. +% +% Using the \textsc{front} bottom-left corner as the origin +% is an important feature since knowing the location of the +% origin enables one to easily use any of the TikZ commands +% (e.g.,~\cmd{\draw} and \cmd{\node} commands) to superimpose lines, +% arrows and text etc.\ onto the Rubik cube (see Section~\ref{sec:arrows}). +% +% \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} +% +% +% +% \subsection[Size of cube minipage]{Size of cube \cmd{\minipage}} +% \label{sec:sizeofminipage} +% +% 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 +% \texttt{tikzpicture} environment can be easily calculated. For example, +% if the \texttt{tikzpicture} scale factor used is $0.5$, then the minimum +% width of the required minipage for the \cmd{\DrawRubikCubeLD} view (shown above) +% is therefore $0.5 \times 4\mbox{cm} = 2\mbox{cm}$. +% +% The default width of the semi-flat cube representation is 10cm ($=3+3+1+3$), +% and that of the flat cube is 12cm ($=3+3+3+3$). If in doubt check the extent of +% any horizontal white-space using an fbox, or the \cmd{\ShowCubeF} command. +% +% +% +% \section{Rotation commands} +% \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). +% Fridrich (see References). % -% It is recommended that commas are used to separate sequestial +% It is recommended that commas are used to separate sequential % 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|). +% For example, in the following sequence the commas remove any ambiguity: +% \rr{U},\rr{Lw}2,\rr{Usp},\rr{Da} \ \ (|\rr{U},\rr{Lw}2,\rr{Usp},\rr{Da}|). % % % -% \subsection{Overview} +% \subsection{Overview} +% \label{sec: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. +% commands for moves or rotations (e.g.,~\rr{R}, \rr{y}, \rr{Bw}) and their equivalent hieroglyphs +% (e.g.,~\rrh{R}, \rrh{y}, \rrh{Bw}), 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. +% in the form of the rotation-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}. +% \DescribeMacro{\rr} +% The rotation-code of a rotation is typeset (as in text) using the rubik-rotation +% \cmd{\rr\marg{rotation-code}} command: i.e.,~\rr{R}\ is typeset using the command \cmd{\rr\{R\}}. % 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{\rrh} +% using instead the command \cmd{\rrh\marg{rotation-code}}. Thus the command \cmd{\rrh\{R\}} generates +% \rrh{R}\ which is the hieroglyph associated with \rr{R}. % -% \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}, +% \DescribeMacro{\Rubik} +% A vertically combined rotation-code and its hieroglyph is generated using the command +% \cmd{\Rubik\marg{rotation-code}}. For example, \Rubik{R}\ is generated by the command \cmd{\Rubik\{R\}}, % 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. +% For some hieroglyphs (e.g.,~\rrh{x}, \rrh{y}, \rrh{z}\ denoting 90~degree axis rotations) +% the only difference between the \cmd{\rrh\{\}} and \cmd{\Rubik\{\}} forms is that +% the \cmd{\Rubik\{\}} form is elevated to sit on the baseline just like the other +% \cmd{\Rubik\{\}} hieroglyphs. +% For example \cmd{\rrh\{yp\}} generates \rrh{yp}, while +% \cmd{\Rubik\{yp\}} generates \Rubik{yp}. % -% \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}. +% \DescribeMacro{\textRubik} +% A horizontally combined rotation-code and its hieroglyph (in sequence as in text) +% is generated using the command stem \cmd{\textRubik\marg{rotation-code}}. +% For example, \textRubik{R}\ is typeset using the command \cmd{\textRubik\{R\}}. % A list of all commands and their associated hieroglyphs is given in % Section~\ref{sec:listofcommands}. % -% +% \pagebreak % % \subsection{Face rotations} % -% \DescribeMacro{\rrU} -% \DescribeMacro{\rrD} -% \DescribeMacro{\rrL} -% \DescribeMacro{\rrR} -% \DescribeMacro{\rrF} -% \DescribeMacro{\rrB} +% \DescribeMacro{U} +% \DescribeMacro{D} +% \DescribeMacro{L} +% \DescribeMacro{R} +% \DescribeMacro{F} +% \DescribeMacro{B} % 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) +% The uppercase initial letter of each face-name (\rr{F}, \rr{B}, \rr{L}, \rr{R}, \rr{U}, \rr{D}) % 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}. -% +% For example, \rr{D}\ is generated by the `rubik rotation' command \cmd{\rr\{D\}}. +% +% \DescribeMacro{Up} +% \DescribeMacro{Dp} +% \DescribeMacro{Lp} +% \DescribeMacro{Rp} +% \DescribeMacro{Fp} +% \DescribeMacro{Bp} +% An appended prime~$^\prime$ indicates an anticlockwise rotation; e.g.,~\rr{Fp}. +% This is sometimes written as \rr{F}$\boldmath{^{-1}}$. The `prime' notation is +% achieved by appending a lowercase `p' to the face rotation command. For example, \rr{Rp}\ +% is generated by \cmd{\rr\{Rp\}}. +% +% \vspace{-0.2cm} % \begin{figure}[hbt] % \centering % \ifpdf -% \includegraphics[height=6cm]{Rubik_doc_figA.pdf} +% \includegraphics[height=5cm]{Rubik-doc-figA.pdf} % \fi % \caption{\label{fig:notation}} % \end{figure} % % -% \subsection{Slice rotations} +% \subsection{Slice rotations} +% \label{sec:slicerotations} % -% \DescribeMacro{\rrSu} -% \DescribeMacro{\rrSd} -% \DescribeMacro{\rrSl} -% \DescribeMacro{\rrSr} -% \DescribeMacro{\rrSf} -% \DescribeMacro{\rrSb} +% \DescribeMacro{Su} +% \DescribeMacro{Sd} +% \DescribeMacro{Sl} +% \DescribeMacro{Sr} +% \DescribeMacro{Sf} +% \DescribeMacro{Sb} % 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 +% direction follows the rotation \rr{R}\ (rotation is isomorphic to \rr{R}) is denoted +% as \rr{Sr}, which is typeset using the command \cmd{\rr\{Sr\}}. 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} +% \bigskip\bigskip\bigskip +% +% \DescribeMacro{Sup} +% \DescribeMacro{Sdp} +% \DescribeMacro{Slp} +% \DescribeMacro{Srp} +% \DescribeMacro{Sfp} +% \DescribeMacro{Sbp} % 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. +% For example the inner slice rotations \rr{Slp}\ (\cmd{\rr\{Slp\}}) and +% \rr{Sr}\ (\cmd{\rr\{Sr\}}) 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}). +% For example, in this case \linebreak \rr{Slp}\ (\cmd{\rr\{Slp\}}) +% $\equiv$ \rrh{Slp}\ (\cmd{\rrh\{Slp\}}), +% and \rr{Sr}\ (\cmd{\rr\{Sr\}}) $\equiv$ \rrh{Sr}\ (\cmd{\rrh\{Sr\}}). +% +% \bigskip % % \pagebreak % -% \subsubsection*{MES slice notation} +% \subsubsection*{MES slice notation} % -% \DescribeMacro{\rrM} -% \DescribeMacro{\rrE} -% \DescribeMacro{\rrS} -% \DescribeMacro{\rrMp} -% \DescribeMacro{\rrEp} -% \DescribeMacro{\rrSp} +% \DescribeMacro{M} +% \DescribeMacro{E} +% \DescribeMacro{S} +% \DescribeMacro{Mp} +% \DescribeMacro{Ep} +% \DescribeMacro{Sp} % 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). +% \item[\rr{M}] \ (\textsc{middle} \rrh{M}, between the \textsc{left} +% and \textsc{right} faces; direction follows \rr{L}), +% \item[\rr{E}] \ (\textsc{equator} \rrh{E}, between the \textsc{up} and \textsc{down} +% faces; direction follows \rr{D}), +% \item[\rr{S}] \ (\textsc{standing} \rrh{S}, between the \textsc{front} and +% \textsc{back} faces; direction follows \rr{F}). % \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. +% Each of these also has a reversed (prime) version, and a hieroglyph +% (see Section~\ref{sec:listofcommands}). +% The equivalent S notation (see above) is therefore +% as follows: \rr{E}\ $\equiv$ \rr{Sd}, \rr{Ep}\ $\equiv$ \rr{Su}, +% \rr{M}\ $\equiv$ \rr{Sl}, \rr{Mp}\ $\equiv$ \rr{Sr}, \rr{S}\ $\equiv$ \rr{Sf}, +% \rr{Sp}\ $\equiv$ \rr{Sb}. % % % % \subsubsection*{Singmaster slice notation} % -% \DescribeMacro{\rrUs} -% \DescribeMacro{\rrDs} -% \DescribeMacro{\rrLs} -% \DescribeMacro{\rrRs} -% \DescribeMacro{\rrFs} -% \DescribeMacro{\rrBs} +% \DescribeMacro{Us} +% \DescribeMacro{Ds} +% \DescribeMacro{Ls} +% \DescribeMacro{Rs} +% \DescribeMacro{Fs} +% \DescribeMacro{Bs} % 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 @@ -569,195 +796,194 @@ % Fridrich website. % % Each of these commands denotes a rotation of two opposite faces -% in the same direction. For example, \textRubikUs\ $\equiv$ \textRubikU\ + \textRubikDp, +% in the same direction. For example, \textRubik{Us}\ $\equiv$ \textRubik{U}\ + \textRubik{Dp}, % which is typeset as: -% \newline |\textRubikUs\ $\equiv$ \textRubikU\ + \textRubikDp|, -% i.e., for \rrUs\ both face-rotations are in the \textit{same} direction -% as \rrU. +% \newline |\textRubik{Us}\ $\equiv$ \textRubik{U}\ + \textRubik{Dp}|, +% i.e.,~for \rr{Us}\ both face-rotations are in the \textit{same} direction +% as \rr{U}. % % % \subsubsection*{Anti-slice notation} % -% \DescribeMacro{\rrUa} -% \DescribeMacro{\rrDa} -% \DescribeMacro{\rrLa} -% \DescribeMacro{\rrRa} -% \DescribeMacro{\rrFa} -% \DescribeMacro{\rrBa} +% \DescribeMacro{Ua} +% \DescribeMacro{Da} +% \DescribeMacro{La} +% \DescribeMacro{Ra} +% \DescribeMacro{Fa} +% \DescribeMacro{Ba} % Each of these commands denotes a rotation of two opposite faces % in \textit{opposite} directions. -% For example, \textRubikUa\ $\equiv$ \textRubikU\ + \textRubikD, +% For example, \textRubik{Ua}\ $\equiv$ \textRubik{U}\ + \textRubik{D}, % which is typeset as: -% \newline |\textRubikUa\ $\equiv$ \textRubikU\ + \textRubikD|. +% \newline |\textRubik{Ua}\ $\equiv$ \textRubik{U}\ + \textRubik{D}|. % See the link to `notation' on the `Pretty patterns' page of the % Fridrich website. % +% \bigskip\bigskip % % \subsection{Wide rotations} % -% \DescribeMacro{\rrUw} -% \DescribeMacro{\rrDw} -% \DescribeMacro{\rrLw} -% \DescribeMacro{\rrRw} -% \DescribeMacro{\rrFw} -% \DescribeMacro{\rrBw} +% \DescribeMacro{Uw} +% \DescribeMacro{Dw} +% \DescribeMacro{Lw} +% \DescribeMacro{Rw} +% \DescribeMacro{Fw} +% \DescribeMacro{Bw} % 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}. +% For example, a \textsc{right} double outer slice rotation is denoted as \rr{Rw}. +% Similarly, the prime $^\prime$ version \rr{Lwp}\ is generated by \cmd{\rr\{Lwp\}}. % % 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} +% is applied twice. For example \rr{R}\textbf{$^2$} or \rr{R}\textbf{2} % denote \textit{two} successive 90~degree clockwise rotations of the \textsc{right} face. +% Clearly \rr{R}\textbf{$^3$} is equivalent to \rr{Rp} etc. +% % % % % \subsection{Axis rotations} % -% \DescribeMacro{\rrx} -% \DescribeMacro{\rry} -% \DescribeMacro{\rrz} -% \DescribeMacro{\rrhx} -% \DescribeMacro{\rrhy} -% \DescribeMacro{\rrhz} +% \DescribeMacro{x} +% \DescribeMacro{y} +% \DescribeMacro{z} % 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 +% as \rr{x}, \rr{y}, \rr{z}\ (the \cmd{\rr\{\}} forms) respectively (see Figure~\ref{fig:notation}), +% with their hieroglyphs (the \cmd{\rrh\{\}} forms) being denoted +% as \rrh{x}, \rrh{y}, \rrh{z}\ 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. +% Note that since \rr{x}, \rr{y}, \rr{z}\ rotations are always expressed in lowercase, +% 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 +% An \rr{x}\textbf{2} rotation (two \rr{x}\ rotations one after +% the other, i.e.,~\rrh{x}\ \rrh{x}) 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. +% for example, \rr{xp}\ (which is generated by appending a `p' to the end of +% the command, i.e.,~\cmd{\rr\{xp\}}). +% +% The \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 +% \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 +% \DescribeMacro{u} +% \DescribeMacro{d} +% \DescribeMacro{l} +% \DescribeMacro{r} +% \DescribeMacro{f} +% \DescribeMacro{b} +% A commonly used alternative for the \rr{x}, \rr{y}, \rr{z}\ notation +% (and endorsed by the WCA) uses these % lowercase face letter to denote a 90~degree whole-cube rotation in the same -% sense as that of the standard face rotations. +% directional 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, +% \rr{u}\ $\equiv$ \rr{y}, \ \rr{d}\ $\equiv$ \rr{yp}, \ +% \rr{l}\ $\equiv$ \rr{xp}, \ \rr{r}\ $\equiv$ \rr{x}, \ +% \rr{f}\ $\equiv$ \rr{z}, \ \rr{b}\ $\equiv$ \rr{zp}, % -% {\noindent}For example, \rrd\ is generated by the command \cmd{\rrd}. +% {\noindent}For example, \rr{d}\ is generated by the command \cmd{\rr\{d\}}. % -% {\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. +% {\noindent}Note that these rotations do not have prime $^\prime$ versions +% since \rr{u}~is the opposite of \rr{d}, \rr{l}~is the opposite of \rr{r}, and +% \rr{f}~is the opposite of \rr{b}. +% +% As with the \rrh{x}, \rrh{y}, \rrh{z}\ forms (described above) there also +% equivalent \cmd{\rrh\{\}} and \cmd{\Rubik\{\}} forms. For example, +% \rrh{d}\ is generated by the command \cmd{\rrh\{d\}}. % -% \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} +% +% {\noindent}\rr{R}\ is generated by the `rubik rotation' command \cmd{\rr\{R\}} % -% \rrFw\ is generated by the `rubik rotation' command \cmd{\rrFw} +% {\noindent}\rr{Fw}\ is generated by the `rubik rotation' command \cmd{\rr\{Fw\}} % -% \rrL$^2$ is generated by \cmd{\rrL}\verb!$^2$! +% {\noindent}\rr{L}$^2$ is generated by \cmd{\rr\{L\}}\verb!$^2$! % -% \rrRp\ is generated by \cmd{\rrRp} +% {\noindent}\rr{L}2 is generated by \cmd{\rr\{L\}2} % -% \rrFwp\ is generated by \cmd{\rrFwp} +% {\noindent}\rr{Rp}\ is generated by \cmd{\rr\{Rp\}} % -% \rrx\ and \rrhy\ and \Rubikzp\ are generated by -% \cmd{\rrx} and \cmd{\rrhy} and \cmd{\Rubikzp} +% {\noindent}\rr{Fwp}\ is generated by \cmd{\rr\{Fwp\}} % -% \rrf\ and \rrhb\ are generated by \cmd{\rrf} and \cmd{\rrhb} +% {\noindent}\rr{x}\ and \rrh{y}\ and \Rubik{zp}\ are generated by +% \cmd{\rr\{x\}} and \cmd{\rrh\{y\}} and \cmd{\Rubik\{zp\}} % -% 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! +% {\noindent}\rr{f}\ and \rrh{b}\ are generated by \cmd{\rr\{f\}} and \cmd{\rrh\{b\}} +% +% {\noindent}\rr{U}\rr{U}\rr{R}\rr{R}\ is generated by +% \cmd{\rr\{U\}}\cmd{\rr\{U\}}\cmd{\rr\{R\}}\cmd{\rr\{R\}} % % \bigskip -% -% {\noindent}The equivalent `text' version of the first three -% rotations above (and their commands) are as follows: +% +% {\noindent}\Rubik{F}\Rubik{U}\Rubik{y}\Rubik{Rp}\Rubik{Lwp}\ +% \ \ \verb!\Rubik{F}\Rubik{U}\Rubik{y}\Rubik{Rp}\Rubik{Lwp}! % % \bigskip % -% {\noindent}\textRubikF\ \textRubikR\ \textRubikU\ \ \ \ -% \verb!\textRubikF\ \textRubikR\ \textRubikU! +% {\noindent}\textRubik{F}\ \textRubik{U}\ \ \ \ +% \verb!\textRubik{F}\ \textRubik{U}! % % \bigskip -% {\noindent}Writing the first sequence using only letter-codes or only hieroglyphs, we have: -% +% +% {\noindent}Commas can be important in avoiding ambiguity; for example +% +% \bigskip +% +% {\noindent}\rr{D},\rr{U}2,\rr{F}2,\rr{Ds}2,\rr{B}, \ \ \ \ \verb!\rr{U}2,\rr{F}2,\rr{Ds}2,\rr{B},! +% % \bigskip -% -% {\noindent}\rrF\rrR\rrU\rry\rrRp \ \ \ \ -% \verb!\rrF\rrR\rrU\rry\rrRp! -% +% +% {\noindent}\rrh{U}2,\,\rrh{F}2,\,\rrh{Ds}2,\, \ \ \ \ \verb!\rrh{U}2,\,\rrh{F}2,\,\rrh{Ds}2,! +% % \bigskip % -% {\noindent}\rrhF\rrhR\rrhU\rrhy\rrhRp \ \ \ \ -% \verb!\rrhF\rrhR\rrhU\rrhy\rrhRp\! +% {\noindent}\rrh{F}\rrh{U}\rrh{y}\rrh{Rp}\rrh{Lwp} \ \ \ \ +% \verb!\rrh{F}\rrh{U}\rrh{y}\rrh{Rp}\rrh{Lwp}! +% +% % % \bigskip -% -% The following shows the importance of using commas to avoid ambiguity: % -% \bigskip +% \subsection{Backwards compatibility} +% \label{sec:backwardscompat} % -% {\noindent}\rrD,\rrU2,\rrF2,\rrDs2,\rrB, \ \ \ \ \verb!\rrD,\rrU2,\rrF2,\rrDs2,\rrB,! +% Note that in keeping with `backwards compatibility' all rotation commands (see below) +% can still be written without the usual curley braces \verb!{}!. +% For example, the hieroglyph \rrhD\ (\cmd{\rrh\{D\}}) can also be generated using the command +% \cmd{\rrhD}. % % \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 +% +% Note that all the commands presented here 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 +% as shown in the `Examples' section above. 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 +% Note also that some \cmd{\rrh\{\}} commands (eg~the \cmd{\rrh\{B\}} command) +% show only the lettercode in a square box, e.g.,~\rrh{B}. This is because these rotations % 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). +% and hence can be somewhat ambiguous unless typeset with their associated +% lettercode. % % \newcommand{\dnstrut}{\rule{0pt}{17pt}} % \newcommand{\dns}{\hspace{2mm}} @@ -765,413 +991,321 @@ % % % -% \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\\ +% \begin{supertabular}[lll]{p{3cm} p{3cm} p{4.5cm}} +% \dnstrut\rr{U}\dns\cmd{\rr\{U\}} +% & \rrh{U}\dns\cmd{\rrh\{U\}} +% & \textRubik{U}\dns\cmd{\textRubik\{U\}} \nonumber\\ +% \dnstrut\rr{Up}\dns\cmd{\rr\{Up\}} +% & \rrh{Up}\dns\cmd{\rrh\{Up\}} +% & \textRubik{Up}\dns\cmd{\textRubik\{Up\}} \nonumber\\ +% \dnstrut\rr{Uw}\dns\cmd{\rr\{Uw\}} +% & \rrh{Uw}\dns\cmd{\rrh\{Uw\}} +% & \textRubik{Uw}\dns\cmd{\textRubik\{Uw\}} \nonumber\\ +% \dnstrut\rr{Uwp}\dns\cmd{\rr\{Uwp\}} +% & \rrh{Uwp}\dns\cmd{\rrh\{Uwp\}} +% & \textRubik{Uwp}\dns\cmd{\textRubik\{Uwp\}} \nonumber\\ +% \dnstrut\rr{Us}\dns\cmd{\rr\{Us\}} +% & \rrh{Us}\dns\cmd{\rrh\{Us\}} +% & \textRubik{Us}\dns\cmd{\textRubik\{Us\}} \nonumber\\ +% \dnstrut\rr{Usp}\dns\cmd{\rr\{Usp\}} +% & \rrh{Usp}\dns\cmd{\rrh\{Usp\}} +% & \textRubik{Usp}\dns\cmd{\textRubik\{Usp\}} \nonumber\\ +% \dnstrut\rr{Ua}\dns\cmd{\rr\{Ua\}} +% & \rrh{Ua}\dns\cmd{\rrh\{Ua\}} +% & \textRubik{Ua}\dns\cmd{\textRubik\{Ua\}} \nonumber\\ +% \dnstrut\rr{Uap}\dns\cmd{\rr\{Uap\}} +% & \rrh{Uap}\dns\cmd{\rrh\{Uap\}} +% & \textRubik{Uap}\dns\cmd{\textRubik\{Uap\}} \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\\ +% \begin{supertabular}[lll]{p{3cm} p{3cm} p{4.5cm}} +% \dnstrut\rr{D}\dns\cmd{\rr\{D\}} +% & \rrh{D}\dns\cmd{\rrh\{D\}} +% & \textRubik{D}\dns\cmd{\textRubik\{D\}} \nonumber\\ +% \dnstrut\rr{Dp}\dns\cmd{\rr\{Dp\}} +% & \rrh{Dp}\dns\cmd{\rrh\{Dp\}} +% & \textRubik{Dp}\dns\cmd{\textRubik\{Dp\}} \nonumber\\ +% \dnstrut\rr{Dw}\dns\cmd{\rr\{Dw\}} +% & \rrh{Dw}\dns\cmd{\rrh\{Dw\}} +% & \textRubik{Dw}\dns\cmd{\textRubik\{Dw\}} \nonumber\\ +% \dnstrut\rr{Dwp}\dns\cmd{\rr\{Dwp\}} +% & \rrh{Dwp}\dns\cmd{\rrh\{Dwp\}} +% & \textRubik{Dwp}\dns\cmd{\textRubik\{Dwp\}} \nonumber\\ +% \dnstrut\rr{Ds}\dns\cmd{\rr\{Ds\}} +% & \rrh{Ds}\dns\cmd{\rrh\{Ds\}} +% & \textRubik{Ds}\dns\cmd{\textRubik\{Ds\}} \nonumber\\ +% \dnstrut\rr{Dsp}\dns\cmd{\rr\{Dsp\}} +% & \rrh{Dsp}\dns\cmd{\rrh\{Dsp\}} +% & \textRubik{Dsp}\dns\cmd{\textRubik\{Dsp\}} \nonumber\\ +% \dnstrut\rr{Da}\dns\cmd{\rr\{Da\}} +% & \rrh{Da}\dns\cmd{\rrh\{Da\}} +% & \textRubik{Da}\dns\cmd{\textRubik\{Da\}} \nonumber\\ +% \dnstrut\rr{Dap}\dns\cmd{\rr\{Dap\}} +% & \rrh{Dap}\dns\cmd{\rrh\{Dap\}} +% & \textRubik{Dap}\dns\cmd{\textRubik\{Dap\}} \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\\ +% \begin{supertabular}[lll]{p{3cm} p{3cm} p{4.5cm}} +% \dnstrut\rr{L}\dns\cmd{\rr\{L\}} +% & \rrh{L}\dns\cmd{\rrh\{L\}} +% & \textRubik{L}\dns\cmd{\textRubik\{L\}} \nonumber\\ +% \dnstrut\rr{Lp}\dns\cmd{\rr\{Lp\}} +% & \rrh{Lp}\dns\cmd{\rrh\{Lp\}} +% & \textRubik{Lp}\dns\cmd{\textRubik\{Lp\}} \nonumber\\ +% \dnstrut\rr{Lw}\dns\cmd{\rr\{Lw\}} +% & \rrh{Lw}\dns\cmd{\rrh\{Lw\}} +% & \textRubik{Lw}\dns\cmd{\textRubik\{Lw\}} \nonumber\\ +% \dnstrut\rr{Lwp}\dns\cmd{\rr\{Lwp\}} +% & \rrh{Lwp}\dns\cmd{\rrh\{Lwp\}} +% & \textRubik{Lwp}\dns\cmd{\textRubik\{Lwp\}} \nonumber\\ +% \dnstrut\rr{Ls}\dns\cmd{\rr\{Ls\}} +% & \rrh{Ls}\dns\cmd{\rrh\{Ls\}} +% & \textRubik{Ls}\dns\cmd{\textRubik\{Ls\}} \nonumber\\ +% \dnstrut\rr{Lsp}\dns\cmd{\rr\{Lsp\}} +% & \rrh{Lsp}\dns\cmd{\rrh\{Lsp\}} +% & \textRubik{Lsp}\dns\cmd{\textRubik\{Lsp\}} \nonumber\\ +% \dnstrut\rr{La}\dns\cmd{\rr\{La\}} +% & \rrh{La}\dns\cmd{\rrh\{La\}} +% & \textRubik{La}\dns\cmd{\textRubik\{La\}} \nonumber\\ +% \dnstrut\rr{Lap}\dns\cmd{\rr\{Lap\}} +% & \rrh{Lap}\dns\cmd{\rrh\{Lap\}} +% & \textRubik{Lap}\dns\cmd{\textRubik\{Lap\}} \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\\ +% \begin{supertabular}[lll]{p{3cm} p{3cm} p{4.5cm}} +% \dnstrut\rr{R}\dns\cmd{\rr\{R\}} +% & \rrh{R}\dns\cmd{\rrh\{R\}} +% & \textRubik{R}\dns\cmd{\textRubik\{R\}} \nonumber\\ +% \dnstrut\rr{Rp}\dns\cmd{\rr\{Rp\}} +% & \rrh{Rp}\dns\cmd{\rrh\{Rp\}} +% & \textRubik{Rp}\dns\cmd{\textRubik\{Rp\}} \nonumber\\ +% \dnstrut\rr{Rw}\dns\cmd{\rr\{Rw\}} +% & \rrh{Rw}\dns\cmd{\rrh\{Rw\}} +% & \textRubik{Rw}\dns\cmd{\textRubik\{Rw\}} \nonumber\\ +% \dnstrut\rr{Rwp}\dns\cmd{\rr\{Rwp\}} +% & \rrh{Rwp}\dns\cmd{\rrh\{Rwp\}} +% & \textRubik{Rwp}\dns\cmd{\textRubik\{Rwp\}} \nonumber\\ +% \dnstrut\rr{Rs}\dns\cmd{\rr\{Rs\}} +% & \rrh{Rs}\dns\cmd{\rrh\{Rs\}} +% & \textRubik{Rs}\dns\cmd{\textRubik\{Rs\}} \nonumber\\ +% \dnstrut\rr{Rsp}\dns\cmd{\rr\{Rsp\}} +% & \rrh{Rsp}\dns\cmd{\rrh\{Rsp\}} +% & \textRubik{Rsp}\dns\cmd{\textRubik\{Rsp\}} \nonumber\\ +% \dnstrut\rr{Ra}\dns\cmd{\rr\{Ra\}} +% & \rrh{Ra}\dns\cmd{\rrh\{Ra\}} +% & \textRubik{Ra}\dns\cmd{\textRubik\{Ra\}} \nonumber\\ +% \dnstrut\rr{Rap}\dns\cmd{\rr\{Rap\}} +% & \rrh{Rap}\dns\cmd{\rrh\{Rap\}} +% & \textRubik{Rap}\dns\cmd{\textRubik\{Rap\}} \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\\ +% \begin{supertabular}[lll]{p{3cm} p{3cm} p{4.5cm}} +% \dnstrut\rr{F}\dns\cmd{\rr\{F\}} +% & \rrh{F}\dns\cmd{\rrh\{F\}} +% & \textRubik{F}\dns\cmd{\textRubik\{F\}} \nonumber\\ +% \dnstrut\rr{Fp}\dns\cmd{\rr\{Fp\}} +% & \rrh{Fp}\dns\cmd{\rrh\{Fp\}} +% & \textRubik{Fp}\dns\cmd{\textRubik\{Fp\}} \nonumber\\ +% \dnstrut\rr{Fw}\dns\cmd{\rr\{Fw\}} +% & \rrh{Fw}\dns\cmd{\rrh\{Fw\}} +% & \textRubik{Fw}\dns\cmd{\textRubik\{Fw\}} \nonumber\\ +% \dnstrut\rr{Fwp}\dns\cmd{\rr\{Fwp\}} +% & \rrh{Fwp}\dns\cmd{\rrh\{Fwp\}} +% & \textRubik{Fwp}\dns\cmd{\textRubik\{Fwp\}} \nonumber\\ +% \dnstrut\rr{Fs}\dns\cmd{\rr\{Fs\}} +% & \rrh{Fs}\dns\cmd{\rrh\{Fs\}} +% & \textRubik{Fs}\dns\cmd{\textRubik\{Fs\}} \nonumber\\ +% \dnstrut\rr{Fsp}\dns\cmd{\rr\{Fsp\}} +% & \rrh{Fsp}\dns\cmd{\rrh\{Fsp\}} +% & \textRubik{Fsp}\dns\cmd{\textRubik\{Fsp\}} \nonumber\\ +% \dnstrut\rr{Fa}\dns\cmd{\rr\{Fa\}} +% & \rrh{Fa}\dns\cmd{\rrh\{Fa\}} +% & \textRubik{Fa}\dns\cmd{\textRubik\{Fa\}} \nonumber\\ +% \dnstrut\rr{Fap}\dns\cmd{\rr\{Fap\}} +% & \rrh{Fap}\dns\cmd{\rrh\{Fap\}} +% & \textRubik{Fap}\dns\cmd{\textRubik\{Fap\}} \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\\ +% \begin{supertabular}[lll]{p{3cm} p{3cm} p{4.5cm}} +% \dnstrut\rr{B}\dns\cmd{\rr\{B\}} +% & \rrh{B}\dns\cmd{\rrh\{B\}} +% & \textRubik{B}\dns\cmd{\textRubik\{B\}} \nonumber\\ +% \dnstrut\rr{Bp}\dns\cmd{\rr\{Bp\}} +% & \rrh{Bp}\dns\cmd{\rrh\{Bp\}} +% & \textRubik{Bp}\dns\cmd{\textRubik\{Bp\}} \nonumber\\ +% \dnstrut\rr{Bw}\dns\cmd{\rr\{Bw\}} +% & \rrh{Bw}\dns\cmd{\rrh\{Bw\}} +% & \textRubik{Bw}\dns\cmd{\textRubik\{Bw\}} \nonumber\\ +% \dnstrut\rr{Bwp}\dns\cmd{\rr\{Bwp\}} +% & \rrh{Bwp}\dns\cmd{\rrh\{Bwp\}} +% & \textRubik{Bwp}\dns\cmd{\textRubik\{Bwp\}} \nonumber\\ +% \dnstrut\rr{Bs}\dns\cmd{\rr\{Bs\}} +% & \rrh{Bs}\dns\cmd{\rrh\{Bs\}} +% & \textRubik{Bs}\dns\cmd{\textRubik\{Bs\}} \nonumber\\ +% \dnstrut\rr{Bsp}\dns\cmd{\rr\{Bsp\}} +% & \rrh{Bsp}\dns\cmd{\rrh\{Bsp\}} +% & \textRubik{Bsp}\dns\cmd{\textRubik\{Bsp\}} \nonumber\\ +% \dnstrut\rr{Ba}\dns\cmd{\rr\{Ba\}} +% & \rrh{Ba}\dns\cmd{\rrh\{Ba\}} +% & \textRubik{Ba}\dns\cmd{\textRubik\{Ba\}} \nonumber\\ +% \dnstrut\rr{Bap}\dns\cmd{\rr\{Bap\}} +% & \rrh{Bap}\dns\cmd{\rrh\{Bap\}} +% & \textRubik{Bap}\dns\cmd{\textRubik\{Bap\}} \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\\ +% \begin{supertabular}[lll]{p{3cm} p{3cm} p{4.5cm}} +% \dnstrut\rr{Su}\dns\cmd{\rr\{Su\}} +% & \rrh{Su}\dns\cmd{\rrh\{Su\}} +% & \textRubik{Su}\dns\cmd{\textRubik\{Su\}} \nonumber\\ +% \dnstrut\rr{Sup}\dns\cmd{\rr\{Sup\}} +% & \rrh{Sup}\dns\cmd{\rrh\{Sup\}} +% & \textRubik{Sup}\dns\cmd{\textRubik\{Sup\}} \nonumber\\ +% \dnstrut\rr{Sd}\dns\cmd{\rr\{Sd\}} +% & \rrh{Sd}\dns\cmd{\rrh\{Sd\}} +% & \textRubik{Sd}\dns\cmd{\textRubik\{Sd\}} \nonumber\\ +% \dnstrut\rr{Sdp}\dns\cmd{\rr\{Sdp\}} +% & \rrh{Sdp}\dns\cmd{\rrh\{Sdp\}} +% & \textRubik{Sdp}\dns\cmd{\textRubik\{Sdp\}} \nonumber\\ +% \dnstrut\rr{Sl}\dns\cmd{\rr\{Sl\}} +% & \rrh{Sl}\dns\cmd{\rrh\{Sl\}} +% & \textRubik{Sl}\dns\cmd{\textRubik\{Sl\}} \nonumber\\ +% \dnstrut\rr{Slp}\dns\cmd{\rr\{Slp\}} +% & \rrh{Slp}\dns\cmd{\rrh\{Slp\}} +% & \textRubik{Slp}\dns\cmd{\textRubik\{Slp\}} \nonumber\\ +% \dnstrut\rr{Sr}\dns\cmd{\rr\{Sr\}} +% & \rrh{Sr}\dns\cmd{\rrh\{Sr\}} +% & \textRubik{Sr}\dns\cmd{\textRubik\{Sr\}} \nonumber\\ +% \dnstrut\rr{Srp}\dns\cmd{\rr\{Srp\}} +% & \rrh{Srp}\dns\cmd{\rrh\{Srp\}} +% & \textRubik{Srp}\dns\cmd{\textRubik\{Srp\}} \nonumber\\ +% \dnstrut\rr{Sf}\dns\cmd{\rr\{Sf\}} +% & \rrh{Sf}\dns\cmd{\rrh\{Sf\}} +% & \textRubik{Sf}\dns\cmd{\textRubik\{Sf\}} \nonumber\\ +% \dnstrut\rr{Sfp}\dns\cmd{\rr\{Sfp\}} +% & \rrh{Sfp}\dns\cmd{\rrh\{Sfp\}} +% & \textRubik{Sfp}\dns\cmd{\textRubik\{Sfp\}} \nonumber\\ +% \dnstrut\rr{Sb}\dns\cmd{\rr\{Sb\}} +% & \rrh{Sb}\dns\cmd{\rrh\{Sb\}} +% & \textRubik{Sb}\dns\cmd{\textRubik\{Sb\}} \nonumber\\ +% \dnstrut\rr{Sbp}\dns\cmd{\rr\{Sbp\}} +% & \rrh{Sbp}\dns\cmd{\rrh\{Sbp\}} +% & \textRubik{Sbp}\dns\cmd{\textRubik\{Sbp\}} \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\\ +% \begin{supertabular}[lll]{p{3cm} p{3cm} p{4.5cm}} +% \dnstrut\rr{E}\dns\cmd{\rr\{E\}} +% & \rrh{E}\dns\cmd{\rrh\{E\}} +% & \textRubik{E}\dns\cmd{\textRubik\{E\}} \nonumber\\ +% \dnstrut\rr{Ep}\dns\cmd{\rr\{Ep\}} +% & \rrh{Ep}\dns\cmd{\rrh\{Ep\}} +% & \textRubik{Ep}\dns\cmd{\textRubik\{Ep\}} \nonumber\\ +% \dnstrut\rr{M}\dns\cmd{\rr\{M\}} +% & \rrh{M}\dns\cmd{\rrh\{M\}} +% & \textRubik{M}\dns\cmd{\textRubik\{M\}} \nonumber\\ +% \dnstrut\rr{Mp}\dns\cmd{\rr\{Mp\}} +% & \rrh{Mp}\dns\cmd{\rrh\{Mp\}} +% & \textRubik{Mp}\dns\cmd{\textRubik\{Mp\}} \nonumber\\ +% \dnstrut\rr{S}\dns\cmd{\rr\{S\}} +% & \rrh{S}\dns\cmd{\rrh\{S\}} +% & \textRubik{S}\dns\cmd{\textRubik\{S\}} \nonumber\\ +% \dnstrut\rr{Sp}\dns\cmd{\rr\{Sp\}} +% & \rrh{Sp}\dns\cmd{\rrh\{Sp\}} +% & \textRubik{Sp}\dns\cmd{\textRubik\{Sp\}} \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\\ +% \begin{supertabular}[lll]{p{3cm} p{3cm} p{4.5cm}} +% \dnstrut\rr{x}\dns\cmd{\rr\{x\}} +% & \rrh{x}\dns\cmd{\rrh\{x\}} +% & \Rubik{x}\dns\cmd{\Rubik\{x\}} \nonumber\\ +% \dnstrut\rr{xp}\dns\cmd{\rr\{xp\}} +% & \rrh{xp}\dns\cmd{\rrh\{xp\}} +% & \Rubik{xp}\dns\cmd{\Rubik\{xp\}} \nonumber\\ +% \dnstrut\rr{y}\dns\cmd{\rr\{y\}} +% & \rrh{y}\dns\cmd{\rrh\{y\}} +% & \Rubik{y}\dns\cmd{\Rubik\{y\}} \nonumber\\ +% \dnstrut\rr{yp}\dns\cmd{\rr\{yp\}} +% & \rrh{yp}\dns\cmd{\rrh\{yp\}} +% & \Rubik{yp}\dns\cmd{\Rubik\{yp\}} \nonumber\\ +% \dnstrut\rr{z}\dns\cmd{\rr\{z\}} +% & \rrh{z}\dns\cmd{\rrh\{z\}} +% & \Rubik{z}\dns\cmd{\Rubik\{z\}} \nonumber\\ +% \dnstrut\rr{zp}\dns\cmd{\rr\{zp\}} +% & \rrh{zp}\dns\cmd{\rrh\{zp\}} +% & \Rubik{zp}\dns\cmd{\Rubik\{zp\}} \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\\ +% \begin{supertabular}[lll]{p{3cm} p{3cm} p{4.5cm}} +% \dnstrut\rr{u}\dns\cmd{\rr\{u\}} +% & \rrh{u}\dns\cmd{\rrh\{u\}} +% & \Rubik{u}\dns\cmd{\Rubik\{u\}} \nonumber\\ +% \dnstrut\rr{d}\dns\cmd{\rr\{d\}} +% & \rrh{d}\dns\cmd{\rrh\{d\}} +% & \Rubik{d}\dns\cmd{\Rubik\{d\}} \nonumber\\ +% \dnstrut\rr{l}\dns\cmd{\rr\{l\}} +% & \rrh{l}\dns\cmd{\rrh\{l\}} +% & \Rubik{l}\dns\cmd{\Rubik\{l\}} \nonumber\\ +% \dnstrut\rr{r}\dns\cmd{\rr\{r\}} +% & \rrh{r}\dns\cmd{\rrh\{r\}} +% & \Rubik{r}\dns\cmd{\Rubik\{r\}} \nonumber\\ +% \dnstrut\rr{f}\dns\cmd{\rr\{f\}} +% & \rrh{f}\dns\cmd{\rrh\{f\}} +% & \Rubik{f}\dns\cmd{\Rubik\{f\}} \nonumber\\ +% \dnstrut\rr{b}\dns\cmd{\rr\{b\}} +% & \rrh{b}\dns\cmd{\rrh\{b\}} +% & \Rubik{b}\dns\cmd{\Rubik\{b\}} \nonumber\\ % \end{supertabular} % % +% \pagebreak % -% \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 +% \section{Other commands} % -% \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}). +% \DescribeMacro{\rubikcube} +% This command generates the logo \rubikcube. % % -% \subsection{Size of cube \cmd{\minipage}} +% All \rubikcube\ commands assume a 3x3x3 cube by default. +% There are three primary command categories: (a)~\cmd{\Draw..} commands +% (which must always be used \textit{inside} a TikZ picture environment), +% (b)~parameter-allocation' commands---e.g.,~\cmd{\RubikCubeSolved}---which can +% be used either inside or outside a TikZ environment), +% and (c)~commands which can be used in ordinary text +% (e.g.,~|\rr{}| rotation commands). % -% 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}$. +% Since \LaTeX\ commands have a maximum limit of only 9 parameters, +% it is necessary to use separate `Face' and `Slice' commands (see below) +% in order to accommodate all 27 visible colours of a 3D~Rubik cube. % -% 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). +% \subsection{Draw 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). +% Furthermore, \cmd{\Draw..} commands can only be used \textit{inside} a TikZ +% picture environment (see section~\ref{sec:drawerrormessage}). % % -% \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 +% This command draws Rubik cubes in one of four +% orientations as denoted by the following terminal XY viewing-direction +% codes: 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 +% will draw a Rubik cube as viewed from the RightUp direction (RU), as % shown in the following figure. % % \bigskip @@ -1179,66 +1313,76 @@ % \begin{minipage}{2.8cm} % \begin{tikzpicture}[scale=0.7] % \DrawRubikCubeRU -% \end{tikzpicture} +% \end{tikzpicture}% % \end{minipage} % \hspace{5mm} % \begin{minipage}{0.6\textwidth} %\begin{verbatim} +% \RubikCubeSolved % \begin{tikzpicture}[scale=0.7] % \DrawRubikCubeRU -% \end{tikzpicture} +% \end{tikzpicture}% +%\end{verbatim} +% Note that these commands are equivalent to: +%\begin{verbatim} +% \RubikCubeSolved +% \ShowCube{3cm}{0.7}{\DrawRubikCubeRU} %\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. % +% +% \DescribeMacro{\DrawCubieXYxyz} +% This command draws a single cubie in one of four +% orientations as denoted by the terminal XY viewing-direction +% codes. % 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. +% where the XY pair denotes the viewing direction as before, and +% the xyz parameters 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 +% \medskip % % \begin{minipage}{1.35cm} % \begin{tikzpicture}[scale=1] % \DrawCubieRU{O}{Y}{G} -% \end{tikzpicture} +% \end{tikzpicture}% % \end{minipage} % \hspace{1cm} % \begin{minipage}{0.6\textwidth} %\begin{verbatim} % \begin{tikzpicture}[scale=1] % \DrawCubieRU{O}{Y}{G} -% \end{tikzpicture} +% \end{tikzpicture}% %\end{verbatim} % \end{minipage} % -% \bigskip +% \medskip % +% {\noindent}Since the front face is a unit 1cm and the width of the side approx 1/3cm, +% and the scale factor =1, then the the minimum minipage width required for the cubie +% $=(1.33 \times 1) = 1.33$cm, and hence the above commands are equivalent to +% \begin{verbatim} +% \ShowCube{1.33cm}{1}{\DrawCubieRU{O}{Y}{G}} +% \end{verbatim} % % % \begin{figure}[hbt] % \centering % \ifpdf -% \includegraphics[height=4cm]{Rubik_doc_figC.pdf} +% \includegraphics[height=4cm]{Rubik-doc-figC.pdf} % \else -% \includegraphics[height=4cm]{Rubik_doc_figC.eps} +% \includegraphics[height=4cm]{Rubik-doc-figC.eps} % \fi % \vspace{-5mm}\caption{\label{fig:cubiedydx}Cubie dy dx parameters} % \end{figure} @@ -1246,9 +1390,8 @@ % \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 +% 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\{\}} @@ -1262,7 +1405,7 @@ % \Cubiedy{0.4} % \Cubiedx{0.8} % \DrawCubieRU{O}{Y}{G} -% \end{tikzpicture} +% \end{tikzpicture}% % \end{minipage} % \hspace{2cm} % \begin{minipage}{0.6\textwidth} @@ -1271,15 +1414,15 @@ % \Cubiedy{0.4} % \Cubiedx{0.8} % \DrawCubieRU{O}{Y}{G} -% \end{tikzpicture} +% \end{tikzpicture}% %\end{verbatim} % \end{minipage} % % \bigskip % -% {\noindent}Note that the \textsc{front} of the cubie is a unit square, +% {\noindent}Note that the \textsc{front} face 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). +% \textsc{front} face (see also the section on Arrows: Section~\ref{sec:arrows}). % The default values of dy and dx are 0.4. % % \medskip @@ -1289,8 +1432,7 @@ % \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: +% of the four \cmd{\DrawCubie} commands for use in ordinary text, as follows: % \begin{quote} % \textCubieRU{O}{Y}{G} \ \ |\textCubieRU{O}{Y}{G}| % @@ -1306,21 +1448,18 @@ % % \textCubieLD{O}{Y}{G} \ \ |\textCubieLD{O}{Y}{G}| % \end{quote} -% Note that the \cmd{\textCubieXY} commands are not influenced by the +% Note that these \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} +% \subsubsection[Draw.. error message]{\cmd{\draw} error message} % -% See also section~\ref{drawerrormessage} regarding the error message associated with +% See also section~\ref{sec:drawerrormessage} regarding the error message associated with % using a \cmd{\Draw...} command \textit{outside} a TikZ picture environment. % % % \subsection{Face commands} +% \label{sec:facecommands} % % \DescribeMacro{\RubikFaceUp} % \DescribeMacro{\RubikFaceDown} @@ -1366,15 +1505,15 @@ % \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): +% `\texttt{All}' command which allocates the same colour to all the cubies +% on a 9-face (i.e.,~only a single colour argument is required). % -% If you want a particular face to be \textsc{all} grey, then one can +% If you want a particular face to be 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 +% colour arguments must be allocated, 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. @@ -1382,36 +1521,34 @@ % \bigskip % % \begin{minipage}{2.8cm} -% \begin{tikzpicture}[scale=0.7] % \RubikFaceUpAll{X} % \RubikFaceRightAll{R} % \RubikFaceFront{W}{Y}{G} % {W}{Y}{G} % {W}{Y}{G} +% \begin{tikzpicture}[scale=0.7] % \DrawRubikCubeRU -% \end{tikzpicture} +% \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} +% \RubikFaceUpAll{X} +% \RubikFaceRightAll{R} +% \RubikFaceFront{W}{Y}{G} +% {W}{Y}{G} +% {W}{Y}{G} +% \ShowCube{3cm}{0.7}{\DrawRubikCubeRU} +% \end{verbatim} % \end{minipage} % % -% \subsection{RubikCubeSolved command} +% \subsection{RubikCubeSolved command} +% \label{sec:rubikcubesolved} % % \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: +% and is equivalent to the following set of face commands %\begin{verbatim} % \RubikFaceUpAll{W}% % \RubikFaceDownAll{Y}% @@ -1420,15 +1557,63 @@ % \RubikFaceFrontAll{O}% % \RubikFaceBackAll{R}% %\end{verbatim} +% as shown in the following semi-flat image. % -% \begin{tikzpicture}[scale=0.6] +% \bigskip +% +% \begin{minipage}{5cm} +% \centering +% \begin{tikzpicture}[scale=0.5] % \RubikCubeSolved % \DrawRubikCubeFlat -% \end{tikzpicture} +% \end{tikzpicture}% +% \end{minipage} +% \begin{minipage}{0.5\textwidth} +%\begin{verbatim} +% \RubikCubeSolved +% \showcube{5cm}{0.5}{\DrawRubikCubeFlat} +%\end{verbatim} +% \end{minipage} +% +% \bigskip +% +% Note that the width of the minipage above is set to 5cm. This is derived from the fact +% that the unscaled width of the semi-flat image is 10cm, and hence if +% the TikZ scale factor is to be 0.5 then the minimum minipage width = $10 \times 0.5 = 5$cm +% (see Section~\ref{sec:coordinates} for details). +% +% If other orientations of the solved cube are required, this can be easily achieved +% using the \cmd{\RubikRotation} command (from the \texttt{RubikRotation} package). +% For example, if one wants to show the solved cube upsidedown, then this format +% could be defined as follows (here we have used the rotations \rrx, \rrx, \rry, to +% invert the cube): +%\begin{verbatim} +%\newcommand{\CubeUpSideDown}{\RubikCubeSolved\RubikRotation{x2,y}} +%\end{verbatim} +% This command would then generate the following: +% +% \bigskip +% +% \begin{minipage}{2.8cm} +% \centering +% \begin{tikzpicture}[scale=0.6] +% \DrawNCubeAll{3}{O}{Y}{G} +% \end{tikzpicture}% +% \end{minipage} +% \hspace{5mm} +% \begin{minipage}{0.6\textwidth} +%\begin{verbatim} +% \CubeUpSideDown +% \ShowCube{2.4cm}{0.6}\DrawRubikCubeRU} +%\end{verbatim} +% \end{minipage} +% +% \bigskip % % 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). +% the \cmd{\RubikCubeSolved} command as follows---remember to include the trailing \% (note also +% that the colours ROYGBWX are currently hardwired so do not use a different set +% of uppercase letters). %\begin{verbatim} % \renewcommand{\RubikCubeSolved}{% % \RubikFaceUpAll{..}% @@ -1441,21 +1626,51 @@ %\end{verbatim} % % +% +% \subsection{RubikCubeGrey command} +% \label{sec:rubikcubegrey} +% +% \DescribeMacro{\RubikCubeGrey} +% This command generates a 3x3x3 cube with no colours allocated except for the central +% cubie of each face, which takes the same colour configuration as defined for the +% \cmd{\RubikCubeSolved} command. +% This command, which is useful starting point when wanting to describe the movement of +% particular cubies, generates the following cube: +% +% \bigskip +% +% \RubikCubeGrey +% \ShowCube{3cm}{0.5}{\DrawRubikCubeRU} +% \hspace{5mm} +% \begin{minipage}{0.6\textwidth} +%\begin{verbatim} +% \RubikCubeGrey +% \ShowCube{3cm}{0.5}{\DrawRubikCubeRU} +%\end{verbatim} +% \end{minipage} +% +% \bigskip +% Users can easily set their own alternative face/colour configuration by `renewing' +% the \cmd{\RubikCubeGrey} command along the lines shown above (the code is in Section~\ref{sec:codegrey}). +% +% +% % \subsection{Slice commands} +% \label{sec:slicecommands} % % \DescribeMacro{\RubikSliceTopX} -% \DescribeMacro{\RubikSliceEquatorX} +% \DescribeMacro{\RubikSliceMiddleX} % \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. +% (Left view \& Right view) for each of the horizontal slices Top, Middle, 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. +% from left to right irrespective of the viewpoint, e.g.,~\#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. +% to have the view (R or L) specified 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 @@ -1463,28 +1678,29 @@ % particular example ends in L, consistent with % the final \cmd{\DrawRubikCubeLD} command. % +% Note that the two legacy `Equator' versions (now replaced by `Middle') +% are retained to allow backward compatibility. +% % \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} +% \RubikSliceMiddleL {R}{R}{R} {B}{B}{B} % \RubikSliceBottomL {O}{O}{O} {G}{G}{G} +% \begin{tikzpicture}[scale=0.7] % \DrawRubikCubeLD -% \end{tikzpicture} +% \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} +% \RubikSliceMiddleL {R}{R}{R} {B}{B}{B} % \RubikSliceBottomL {O}{O}{O} {G}{G}{G} -% \DrawRubikCubeLD -% \end{tikzpicture} +% \ShowCube{3cm}{0.7}{\DrawRubikCubeLD} %\end{verbatim} % \end{minipage} % @@ -1492,14 +1708,16 @@ % \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. +% These commands are intended for drawing final layer +% configurations (i.e.,~typically using the yellow face in the \textsc{up} position) +% with or without the associated side faces of the cubies of the top layer +% (see also the \cmd{\DrawFlatUpSide} command in Section~\ref{sec:flatcommands}) % % \subsubsection{LayerFace} % % \DescribeMacro{\DrawRubikLayerFace} -% This LayerFace command draws a simple Rubik cube 3x3 face and allocates colours to the 9 cubies. +% 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. % @@ -1511,45 +1729,46 @@ % \DrawRubikLayerFace{X}{Y}{X} % {Y}{Y}{Y} % {X}{Y}{X} -% \end{tikzpicture} +% \end{tikzpicture}% % \end{minipage} % \hspace{1cm} % \begin{minipage}{0.6\textwidth} %\begin{verbatim} -% \begin{tikzpicture}[scale=0.7] +% \ShowCube{2.1cm}{0.7}{% % \DrawRubikLayerFace{X}{Y}{X} % {Y}{Y}{Y} % {X}{Y}{X} -% \end{tikzpicture} +% } %\end{verbatim} % \end{minipage} % % \medskip % -% \subsubsection{\cmd{\draw} error message} +% \subsubsection[Draw.. error message]{\cmd{\draw} error message} % -% See also section~\ref{drawerrormessage} regarding the error message associated with +% See also section~\ref{sec:drawerrormessage} regarding the error message associated with % using a \cmd{\Draw...} command \textit{outside} a TikZ picture environment. % % \medskip % -% \subsubsection{LayerSide} +% \subsubsection{LayerSide} +% \label{sec:layerside} % -% \DescribeMacro{\DrawLayerSideXYp} +% \DescribeMacro{\DrawRubikLayerSideXYp} % 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. +% Y:[Top \verb!|! Middle \verb!|! Bottom]) of a particular cubie in the layer face. % % \begin{figure}[hbt] % \centering % \ifpdf -% \includegraphics[height=3cm]{Rubik_doc_figD.pdf} +% \includegraphics[height=3cm]{Rubik-doc-figD.pdf} % \else -% \includegraphics[height=3cm]{Rubik_doc_figD.eps} +% \includegraphics[height=3cm]{Rubik-doc-figD.eps} % \fi -% \vspace{-5mm}\caption{\label{fig:facenotation}LayerSide letter-codes } +% \vspace{-5mm}\caption{\label{fig:facenotation}LayerSide rotation-codes } % \end{figure} % % Since corner cubies have two side faces, the `p' parameter @@ -1567,15 +1786,15 @@ % % \begin{quote} %\begin{verbatim} -% \DrawRubikLayerSideLE{G} -% \DrawRubikLayerSideLEx{G} +% \DrawRubikLayerSideLM{G} +% \DrawRubikLayerSideLMx{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. +% \DrawRubikLayerSideLMx{G} +% \end{tikzpicture}% +% just to the left of the Left Middle (LM) 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} @@ -1588,7 +1807,7 @@ % 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). +% vertical order (eg, top, middle, 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} @@ -1621,35 +1840,35 @@ % % \DrawRubikLayerSideLTy{B} % \DrawRubikLayerSideLTx{O} -% \DrawRubikLayerSideLE{G} +% \DrawRubikLayerSideLM{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} +% \node (LM) at (0.5, 1.5) [red]{\small\textsf{LM}}; +% \end{tikzpicture}% % \end{minipage} % \hspace{1cm} % \begin{minipage}{0.6\textwidth} %\begin{verbatim} -% \begin{tikzpicture}[scale=0.7] +% \ShowCube{3cm}{0.7}{% % \DrawRubikLayerFace{X}{Y}{X} % {Y}{Y}{Y} % {X}{Y}{X} % % \DrawRubikLayerSideLTy{B} % \DrawRubikLayerSideLTx{O} -% \DrawRubikLayerSideLE{G} +% \DrawRubikLayerSideLM{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} +% \node (LM) at (0.5, 1.5) +% [red]{\small\textsf{LM}}; +% } %\end{verbatim} % \end{minipage} % @@ -1669,12 +1888,12 @@ % {Y} {O} % \DrawRubikLayerSideB {O}{G}{G} % -% \end{tikzpicture} +% \end{tikzpicture}% % \end{minipage} % \hspace{1cm} % \begin{minipage}{0.6\textwidth} %\begin{verbatim} -% \begin{tikzpicture}[scale=0.7] +% \ShowCube{3cm}{0.7}{% % \DrawRubikLayerFace{G}{Y}{R} % {Y}{Y}{Y} % {B}{Y}{Y} @@ -1684,12 +1903,27 @@ % {R} {O} % {Y} {O} % \DrawRubikLayerSideB {O}{G}{G} -% \end{tikzpicture} +% } %\end{verbatim} % \end{minipage} % % \bigskip +% +% \DescribeMacro{\DrawFlatUpSide} +% \textsc{important note}: If the colour configuration of the \textit{whole} +% cube is already known to the system (i.e.,~it has been specified before, +% and (possibly) been manipulated using the \cmd{\RubikRotation..} command +% from \textsc{rubikrotation} package), then the above figure could be +% drawn much more simply using just the single \cmd{\DrawFlatUpSide} command, +% as described in Section~\ref{sec:flatcommands}. In short, using the +% \texttt{rubikrotation} package to keep track of the Rubik cube configuration makes +% drawing these images considerably simpler. % +% \bigskip +% +% \DescribeMacro{\RubikSideBarWidth} +% \DescribeMacro{\RubikSideBarLength} +% \DescribeMacro{\RubikSideBarSep} % 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. @@ -1719,19 +1953,19 @@ % \RubikSideBarWidth{0.7} % \RubikSideBarLength{0.7} % \DrawRubikLayerSideMTy{G} -% \end{tikzpicture} +% \end{tikzpicture}% % \end{minipage} % \hspace{1cm} % \begin{minipage}{0.6\textwidth} %\begin{verbatim} -% \begin{tikzpicture}[scale=0.7] +% \ShowCube{3cm}{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} % @@ -1746,13 +1980,16 @@ % 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. +% shown in the following example. Note that in this example we have used the +% \cmd{\ShowCubeF} command as an exercise to implement the fbox and reveal +% the extent of the surrounding white space associated with a minipage width of +% 3.5cm ($=5 \times 0.7$) ---showing that a sidebar increases the image width by about +% 0.5 the width of a cubie. % % \bigskip % -% \begin{minipage}{2.5cm} +% \begin{minipage}{4cm} % \centering -% \begin{tikzpicture}[scale=0.7] % \RubikFaceUp {X}{W}{X}% % {W}{W}{W}% % {X}{W}{X}% @@ -1764,16 +2001,15 @@ % \RubikFaceRight{X}{G}{G}% % {X}{G}{G}% % {G}{X}{X}% -% \DrawRubikCubeRU -% -% \DrawRubikLayerSideL{O}{B}{R} +% \ShowCubeF{3.5cm}{0.7}{% +% \DrawRubikCubeRU +% \DrawRubikLayerSideL{G}{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}% @@ -1785,11 +2021,11 @@ % \RubikFaceRight{X}{G}{G}% % {X}{G}{G}% % {G}{X}{X}% -% \DrawRubikCubeRU -% -% \DrawRubikLayerSideL{O}{B}{R} +% \ShowCubeF{3.5cm}{0.7}{% +% \DrawRubikCubeRU +% \DrawRubikLayerSideL{G}{B}{R} % \DrawRubikLayerSideB{R}{G}{O} -% \end{tikzpicture} +% } %\end{verbatim} % \end{minipage} % @@ -1800,23 +2036,111 @@ % increase the width of the image, one may also have to adjust the width of % the associated minipage. % +% \pagebreak % % \subsection{Flat commands} % \label{sec:flatcommands} +% +% \DescribeMacro{\DrawFlatUp} +% \DescribeMacro{\DrawFlatDown} +% \DescribeMacro{\DrawFlatLeft} +% \DescribeMacro{\DrawFlatRight} +% \DescribeMacro{\DrawFlatFront} +% \DescribeMacro{\DrawFlatBack} +% These commands \cmd{\DrawFlat..}\marg{x}\marg{y} draw a `flat' (square) +% representation of a specified face such that its bottom left corner +% is positioned at ($x$, $y$). +% They are designed to supplement the \cmd{\DrawRubikCube...} commands and +% allow hidden faces to be represented. +% Each command (except \cmd{\DrawFlatFront}) takes two arguments, +% namely the 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 Y-argument set for the \cmd{\DrawFlatLeft} +% and \cmd{\DrawFlatRight} commands is not currently actioned +% (see Section~\ref{sec:drawflatxcommands}), +% since both the \textsc{left} and \textsc{right} faces as used by the +% \cmd{\DrawRubikCubeFlat} command---since this shows the RU view---requires only Y=0 +% (this (x,y) facility will be fully extended to the left and right forms in a +% later version). +% Note also that the \cmd{\DrawFlatFront} command currently takes no arguments, +% since by definition the bottom left corner of this face is always at (0,0), +% and there seems to be no reason (just now) for this face to have the +% (x,y) facility. +% +% In the following example we use the command \verb!\DrawFlatBack{4}{1}! to +% append the \textsc{back} face to the side of a 3D cube. Note that since +% the coordinates of the bottom/back/right corner of the cube rendered by the +% command \cmd{\DrawRubikCubeRU} is (4,1) +% (see Section~\ref{sec:coordinates}), we can position the +% lower/left corner of the \textsc{back} face at this point using the command +% \verb!\DrawFlatBack{4}{1}! as follows: +% +% \bigskip % -% \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. +% \begin{minipage}{0.4\textwidth} +% \centering +% \RubikCubeSolved +% \begin{tikzpicture}[scale=0.4] +% \DrawRubikCubeRU +% \DrawFlatBack{4}{1} +% \end{tikzpicture}% +% \end{minipage} +% \begin{minipage}{5cm} +%\begin{verbatim} +% \RubikCubeSolved +% \ShowCube{3cm}{0.4}{% +% \DrawRubikCubeRU +% \DrawFlatBack{4}{1} +% } +%\end{verbatim} +% \end{minipage} % % \bigskip +% +% +% \DescribeMacro{\DrawFlatUpSide} +% \DescribeMacro{\DrawFlatDownSide} +% \DescribeMacro{\DrawFlatLeftSide} +% \DescribeMacro{\DrawFlatRightSide} +% \DescribeMacro{\DrawFlatFrontSide} +% \DescribeMacro{\DrawFlatBackSide} +% These commands draw a face and all the associated side facelets. +% In the following example we use the \cmd{\DrawFlatUpSide} command to +% draw the \textsc{up} face and all its side-bars of a cube having +% a `solved' configuration. +% +% +% \bigskip % % \begin{minipage}{0.4\textwidth} % \centering +% \RubikCubeSolved % \begin{tikzpicture}[scale=0.4] +% \DrawFlatUpSide +% \end{tikzpicture}% +% \end{minipage} +% \begin{minipage}{5cm} +%\begin{verbatim} % \RubikCubeSolved +% \ShowCube{1.6cm}{0.4}{% +% \DrawFlatUpSide +% } +%\end{verbatim} +% \end{minipage} +% +% \bigskip % +% \DescribeMacro{\DrawRubikFlat} +% This command draws the completely flat format of the cube, as 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}}; @@ -1824,15 +2148,13 @@ % \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} +% \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} +% \RubikCubeSolved +% \ShowCube{5cm}{0.4}{\DrawRubikFlat} %\end{verbatim} % \end{minipage} % @@ -1840,21 +2162,27 @@ % % 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: +% bottom left corner of the front face (orange here). +% The letters were placed using the following TikZ code inside the +% TikZ picture environment. % %\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}}; +% \RubikCubeSolved +% \ShowCube{5cm}{0.4}{% +% \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{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 +% \DescribeMacro{\DrawRubikCubeFlat} +% {\noindent}A useful `semi-flat' alternative format, which uses +% the standard RU view of the cube and appends the three hidden +% sides (see Rokicki \textit{etal.}, 2013), is generated by the % command \cmd{\DrawRubikCubeFlat} as follows. % % \bigskip @@ -1863,31 +2191,37 @@ % \begin{tikzpicture}[scale=0.5] % \RubikCubeSolved % \DrawRubikCubeFlat -% \end{tikzpicture} +% \node (B) at (5.5, 2.5) [white]{\small\textsf{B}}; +% \end{tikzpicture}% % \end{minipage} % \begin{minipage}{5cm} %\begin{verbatim} -% \begin{tikzpicture}[scale=0.5] -% \RubikCubeSolved +% \RubikCubeSolved +% \ShowCube{5cm}{0.5}{% % \DrawRubikCubeFlat -% \end{tikzpicture} +% \node (B) at (5.5, 2.5) +% [white]{\small\textsf{B}}; +% } %\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. +% \bigskip % +% Note that even in this configuration it is straight-forward to +% write text on the graphic, since the width (on the page) of +% the green \textsc{right} face is exactly 1-unit, and the +% bottom right-hand corner of the green face is raised exactly 1-unit +% (see Figure~\ref{fig:cubesquaregraph}). +% Consequently, since the origin of the grid is at the bottom left +% corner of the front face, the coordinates of the center of the +% red \textsc{back} face is (5.5, 2.5). % -% \section[NCube]{NCube (NxNxN)} -% \label{sec:NCube} +% \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}). +% (i.e.,~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\}}. @@ -1900,29 +2234,28 @@ % % \bigskip % -% \begin{minipage}{0.4\textwidth} +% \begin{minipage}{0.3\textwidth} % \begin{tikzpicture}[scale=0.5] % \DrawNCubeAll{5}{O}{Y}{G} -% \end{tikzpicture} +% \end{tikzpicture}% % \end{minipage} % \begin{minipage}{0.5\textwidth} %\begin{verbatim} -% \begin{tikzpicture}[scale=0.5] -% \DrawNCubeAll{5}{O}{Y}{G} -% \end{tikzpicture} +% \ShowCube{3.5cm}{0.5}{\DrawNCubeAll{5}{O}{Y}{G}} %\end{verbatim} % \end{minipage} % % \medskip % -% \subsubsection{\cmd{\draw} error message} +% \subsubsection[Draw.. error message]{\cmd{\draw} error message} % -% See also section~\ref{drawerrormessage} regarding the error message associated with +% See also section~\ref{sec:drawerrormessage} regarding the error message associated with % using a \cmd{\Draw...} command \textit{outside} a TikZ picture environment. % % -% \section{Arrows} -% \label{sec:arrows} +% +% \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 @@ -1938,57 +2271,52 @@ % \begin{figure}[hbt] % \centering % \ifpdf -% \includegraphics[height=3cm]{Rubik_doc_figE.pdf} +% \includegraphics[height=3cm]{Rubik-doc-figE.pdf} % \else -% \includegraphics[height=3cm]{Rubik_doc_figE.eps} +% \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. +% For example, in Figure~\ref{fig:facegraph} we have drawn a green +% arrow from the centre of cubie LB $(0.5, 0.5)$ to the centre of +% cubie MM\,\footnote{The code MM stands for x=Middle, y=Middle; +% see also Figure~\ref{fig:facenotation} on Rubik face-notation} $(1.5, 1.5)$. +% To do this 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); +% \draw[->,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} +% \ShowCube{2.5cm}{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); +% } % \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} +% \ShowCube{2.5cm}{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{verbatim} % \end{minipage} % @@ -1996,48 +2324,40 @@ % 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 +% is shown in the following example, where we have changed the \texttt{tikzpicture} scale +% factor to~0.4 in order to generate a small figure 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] -% +% \ShowCube{1.8cm}{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} -% +% \noindent +% \ShowCube{1.8cm}{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} +% \DrawRubikLayerSideB {O}{G}{G} % \draw[->,ultra thick,color=green] (0.5,5) -- (0.5, 4); -% \end{tikzpicture} -% \end{minipage} +% } %\end{verbatim} % \end{minipage} % @@ -2068,29 +2388,27 @@ % \DrawRubikCubeRD % \draw[ultra thick,->,color=blue] % (1.5,0.5) -- (2.5, 1.5); -% \end{tikzpicture} +% \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} +% \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} +% \RubikFaceRight{G}{G}{G} +% {X}{G}{G} +% {X}{X}{X} % +% \RubikFaceDown {X}{G}{X} +% {X}{Y}{X} +% {X}{X}{X} +% \ShowCube{3cm}{0.7}{% % \DrawRubikCubeRD % \draw[ultra thick,->,color=blue] % (1.5,0.5) -- (2.5, 1.5); -% \end{tikzpicture} +% } %\end{verbatim} % \end{minipage} % @@ -2098,82 +2416,79 @@ % % \section{Final example} % -% We now present, as a final example, the code used to draw the front page figure: +% We now present, as a final example, the code used to draw the front page +% figure\,\footnote{This is a sequence of order 6 used to generate the `cross' +% configuration when solving the cube. Doing it on a `solved' cube allows you +% to see how the three edge cubies move, and either flip (magenta arrows) or do +% not flip (black arrow).}. +% This code uses both the \rubikcube\ and \textsc{rubikrotation} packages, +% and therefore needs to be run using the \LaTeX\ \verb!--shell-escape! command-line switch, +% as described in the \textsc{rubikrotation} package. +% % % \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} +% \ShowCube{2cm}{0.4}{\DrawRubikCubeRU} +% \ShowCube{2cm}{0.4}{% +% \DrawFlatUpSide +% \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); +% } +% \Rubik{F}\Rubik{R}\Rubik{U}\Rubik{Rp}\Rubik{Up}\Rubik{Fp}% +% \ \ \ $\longrightarrow$ +% \ShowCube{2cm}{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} +% } % \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] +% \RubikCubeSolved +% \ShowCube{2cm}{0.4}{\DrawRubikCubeRU} +% \ShowCube{2cm}{0.4}{% +% \DrawFlatUpSide +% \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); +% } +% \Rubik{F}\Rubik{R}\Rubik{U}\Rubik{Rp}\Rubik{Up}\Rubik{Fp}% +% \ \ \ $\longrightarrow$ +% \RubikRotation{F,R,U,Rp,Up,Fp} +% \ShowCubeF{2cm}{0.4}{\DrawFlatUpSide} +% \hfil +%\end{verbatim} +% +% +% +% \subsection[Without using {\textbackslash}RubikRotation]{Without using \cmd{\RubikRotation..}} +% +% If you really need to draw the above figure \textit{without} using +% the \textsc{rubikrotation} package (as we had to in order to write +% this particular document) then you would need to replace the +% commands +%\begin{verbatim} +% \RubikRotation{F,R,U,Rp,Up,Fp} +% \ShowCubeF{2cm}{0.4}{\DrawFlatUpSide} +%\end{verbatim} +% with the following set of \cmd{\DrawRubikLayer...} commands. +% +%\begin{verbatim} +% \ShowCube{2cm}{0.4}{% % \DrawRubikLayerFace{W}{W}{B} % {W}{W}{O} % {W}{R}{B} @@ -2182,31 +2497,25 @@ % {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. +% Please contact the authors regarding any ideas, errors or shortcomings 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. +% not scale with document font size. However, they do +% seem to work reasonably well with both 11pt and 12pt fonts. +% Any suggestions are welcome. +% +% \item The sidebars cannot be arbitrarily positioned. % % \end{itemize} % @@ -2214,8 +2523,9 @@ % \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. +% suggestions. We have built on some of their ideas and have acknowledged +% these instances in the documentation. +% We would also like to thank Christian Tellechea for the \cmd{\@join\{\}\{\}} command. % % % @@ -2224,10 +2534,12 @@ % 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 +% using various programming languages, e.g.,~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. +% +% In the event of new packages being made, we suggest that a CTAN directory structure +% along the following lines might be appropriate. % % $$ % \textsc{rubik} \left\{ @@ -2241,9 +2553,78 @@ % \right.\\ % $$ % +% +% +% \section{History} +% +% \begin{itemize} + +% \item Version 3.0 (September 2015) +% +% ---All rotation commands can now use the rotation-code as an argument; for example, +% the rotation \rr{D} can now be typeset using the command \cmd{\rr\{D\}} etc +% (see Section~\ref{sec:RubikCommands}). +% The new rotation commands are: +% \begin{quote} +% \cmd{\rr\marg{rotation-code}} +% \newline\cmd{\rrh\marg{rotation-code}} +% \newline\cmd{\Rubik\marg{rotation-code}} +% \newline\cmd{\textRubik\marg{rotation-code}} +%\end{quote} +% The original rotation command formats (e.g.,~\cmd{\rrD}) are still supported for backwards compatibility. +% +% --- \cmd{\ShowCube} and \cmd{\ShowCubeF} are new commands for displaying +% a cube inside a minipage (see Sections~\ref{sec:showcube} and \ref{sec:showcubecode}). +% +% --- \cmd{\RubikCubeGrey} is a new command for setting up a `starter cube' for which the +% only allocated colours are those for the centre cubies (see Section~\ref{sec:rubikcubegrey}). +% The colour configuration matches that of the \cmd{\RubikCubeSolved}. +% +% \item Version 2.2 (January 2015) +% +% ---Fixed typos and minor errors in the documentation. +% +% ---Added the following commands to facilitate typesetting a face, +% as described in Section~\ref{sec:flatcommands}. +%\begin{quote} +%\begin{verbatim} +%\DrawFlatUp +%\DrawFlatDown +%\DrawFlatLeft +%\DrawFlatRight +%\DrawFlatFront +%\DrawFlatBack +%\DrawFlatUpSide +%\DrawFlatDownSide +%\DrawFlatLeftSide +%\DrawFlatRightSide +%\DrawFlatFrontSide +%\DrawFlatBackSide +%\end{verbatim} +%\end{quote} +% +% ---Changed `Equator' $\rightarrow$ `Middle' in all \cmd{\DrawLayer..} +% commands (for consistency). Hence `E' $\rightarrow$ `M' in all Flat +% commands and Slice commands. Note although former use of `Equator' is +% retained for backward compatibility (for the moment) it is now deprecated. +% +% ---Fixed a conflict with the \TeX\ \cmd{\sb} command as used by the \textbf{url} +% package which resulted in reference chaos when the \textbf{url} package was used with +% the \Rubikcube\ package (internalised \cmd{\sb} to \cmd{\@sb}). Also internalised for +% convenience \cmd{\sd} to \cmd{\@sd}; \cmd{\sh} to \cmd{\@sh}; \cmd{\sc} to \cmd{\@sc}; +% \cmd{\sq} to \cmd{\@sq}. +% +% +% \item Version 2.0 (February 5, 2014) +% +% ---First release. +% +% \end{itemize} +% +% +% % \section{References} % -% % \begin{itemize} % % @@ -2252,8 +2633,12 @@ % \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} -% +% \url{http://www.math.harvard.edu/~jjchen/docs/rubik.pdf} +% +% +% \item Davis T (2006). Group theory via Rubik's cube. +% \url{http://www.geometer.org/rubik/group.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/} @@ -2272,42 +2657,51 @@ % 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 Feuers\"{a}nger (2015). Manual for package \textsc{pgfplots} +% (\texttt{pgfplots.pdf}). v\,1.12.1 (2015/05/02), \S\,3.2.3, page~20. +% \url{http://www.ctan.org/pkg/pgfplots}. % % \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 Golomb SW (1981). Rubik's cube and a model of quark confinement. +% \textit{Am.\ J.\ Phys.}; vol~49, pp~1030--1031. +% +% \item Golomb SW (1982). Rubik's cube and quarks: twists on the eight corner cells +% of Rubik's cube provide a model for many aspects of quark behaviour. +% \textit{American Scientist}; +% \underline{70}, pp.~257--259. \url{http://www.jstor.org/stable/27851433} % -% \item Gymrek M (2009). The mathematics of toys and games. -% \newline\url{http://wen.mit.edu/sp.268/www/rubik.pdf} +% \item Gymrek M (2009). The mathematics of the Rubik's cube. +% \newline\url{http://web.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/} +% \url{http://math.berkeley.edu/~hutching/rubik.pdf} % % -% \item Jelinek website (Jelinek J). Rubik's cube solution method. \url{http://rubikscube.info/} +% \item Jelinek website (Jelinek J). Rubik's cube solution methods. +% \url{http://www.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} -% +% Rubik's cube, Merlin's machine and other mathematical toys}; pp~322. +% \url{http://www.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 Kociemba website (Kociemba H). \url{http://www.kociemba.org/cube.htm} % +% \item Kriz I 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 Randelshofer website (Randelshofer W). Pretty patterns. +% \url{http://www.randelshofer.ch/rubik/patterns/} % -% \item Reid M. \ \ \url{http://www.math.ucf.edu/~reid/Rubik/} +% \item Reid website (Reid M) \ \ \url{http://www.cflmath.com/Rubik/}, +% for patterns see \url{http://www.cflmath.com/Rubik/patterns.html} % % % \item Rokicki T, Kociemba H, Davidson M and Dethridge J (2013). The diameter of the @@ -2326,11 +2720,11 @@ % \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 Vandenbergh L. \ \ \textsc{cubezone} \url{http://www.cubezone.be} % -% \item WCA (2012). World Cube Association Regulations. See Section~12 for notation. +% \item WCA (2015). World Cube Association Regulations. See Section~12 for notation. % \url{http://www.worldcubeassociation.org/regulations.htm} % % @@ -2343,22 +2737,26 @@ % % % -% \section{The code} +% \section{The code (\texttt{rubikcube.sty})} % % The conventions we adopt regarding capital letters and the % XYZ argument ordering are detailed in Section~\ref{sec:conventions}. % +% Note that it is important in a graphics package to use a trailing \% on +% the end of lines which break before the terminal curley bracket of a newcommand. +% This is to prevent accumulating spurious spaces which may otherwise appear in +% figures and diagrams as a strange or unexpected horizontal shift or whitespace. % -% \subsection{ Package heading} +% \subsection{\hspace{3mm}Package heading} % % \begin{macrocode} %<*rubikcube> -\def\RCfileversion{2.0}% -\def\RCfiledate{2014/01/20}% +\def\RCfileversion{3.0}% +\def\RCfiledate{2015/09/25}% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{rubikcube}[\RCfiledate\space (v\RCfileversion)] % \end{macrocode} -% The package requires TikZ +% The package requires TikZ---so we load it if not already loaded. % \begin{macrocode} \@ifpackageloaded{tikz}{}{% \typeout{---rubikcube requires the TikZ package.}% @@ -2368,12 +2766,14 @@ % \begin{macro}{\rubikcube} % First we create a suitable logo % \begin{macrocode} -\newcommand{\rubikcube}{\textsf{rubikcube}}% +\newcommand{\rubikcube}{\textsc{rubikcube}}% +\newcommand{\Rubikcube}{\textsc{Rubikcube}}% % \end{macrocode} % \end{macro} % % -% \subsection{ Some useful internal commands} +% \subsection{\hspace{3mm}Some useful internal commands} +% \label{sec:usefulinternalcommands} % % \begin{macro}{\@rr} % \begin{macro}{\@rrp} @@ -2394,10 +2794,10 @@ % 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). +% used for rotations with no visible representation from the front +% (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. +% rotation-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 @@ -2437,10 +2837,27 @@ % \end{macro} % % -% \subsection{ Colours} +% \begin{macro}{\@join} +% We also require a macro for joining two strings so we can convert +% a rotation-code, say U, into a macro which typesets it in some form, say \cmd{\rrhU}. +% The following \cmd{\@join\{\}\{\}} command is by Christian Tellechea. +% {\newline}Usage: \cmd{\@join\marg{command-stem}\marg{rotation-code}}. For example, +% to create the command \cmd{\rrhU} we would write |\@join{\rrh}{U}|, and hence +% the command |\rrh{U}| is equivalent to \cmd{\rrhU} (see Section~\ref{sec:cmdsusingjoin}). +% {\newline}Since this macro is also useful for processing rotation-codes in a list, +% which may also include macros, it is important that |#2| is not detokenized. +% \begin{macrocode} +\newcommand*\@join[2]{% + \csname\expandafter\@gobble\string#1#2\endcsname} +% \end{macrocode} +% \end{macro} +% +% +% \subsection{\hspace{3mm}Colours} +% \label{sec:codecolours} % % These colour allocations were initially defined by Peter Bartal (2011). -% Now modified so that grey is defined as {black!30}. +% We have modified only the colour grey, which is now defined as {black!30}. % % \begin{macrocode} \definecolor{R}{HTML}{C41E33}% @@ -2452,13 +2869,52 @@ \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 +% +% \subsection{\hspace{3mm}ShowCube command} +% \label{sec:showcubecode} +% +% \begin{macro}{\ShowCube} +% \begin{macro}{\ShowCubeF} +% The macro \cmd{\ShowCube}\marg{minipage width}\marg{TikZ scale factor}\marg{Draw.. cmd} +% displays the cube inside a minipage, so that we can easily tailor the minipage +% width (|#1|) and also the TikZ scale factor (|#2|). The \cmd{\ShowCubeF} command +% places an fbox around the minipage so users can see the extent of any white space. +% {\newline}\textsc{usage}: |\ShowCube{2cm}{0.5}{\DrawRubikCubeRU}| +% \begin{macrocode} +\newcommand{\ShowCube}[3]{% + \begin{minipage}{#1}% + \centering% + \begin{tikzpicture}[scale=#2]% + #3% + \end{tikzpicture}% + \end{minipage}% +} +\newcommand{\ShowCubeF}[3]{% + \fbox{% + \begin{minipage}{#1}% + \centering% + \begin{tikzpicture}[scale=#2]% + #3% + \end{tikzpicture}% + \end{minipage}% +}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% +% \subsection{\hspace{3mm}Face commands} +% +% Cube face notation = U, D, L, R, F, B (Singmaster) +% {\newline}Cubie-square notation = t, m, b, l, m, r = top, middle, +% bottom, left, middle, right. +% We use t,b for cubie-squares (facelets) to avoid confusion with cube Face notation. +% We number the cubie-squares on a face 1--9 reading from left-to-right, +% starting top-left, ending bottom-right, as follows +% (see also Figure~\ref{fig:facenotation}): +% {\newline}\strut\hspace{1cm}top 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 % @@ -2468,24 +2924,26 @@ % \begin{macro}{\RubikFaceRight} % \begin{macro}{\RubikFaceFront} % \begin{macro}{\RubikFaceBack} -% These 5 commands allocate a colour to each of the 9 cubiesquares in the +% These 5 commands allocate a colour to each of the 9 cubie-squares 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}\textsc{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. +% to a specific cubie-square (facelet), 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\}} +% +% 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$ +% for the ``right-top'' facelet on this face. Note that the order +% of the two lowercase letters (in this case \texttt{rt}) are always written +% in the $x,y$ order; i.e.,~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) +% relates to the $y$ direction (either top, middle, or bottom)---this rule makes it +% easy to remember the order. % \end{macro} % \end{macro} % \end{macro} @@ -2585,7 +3043,29 @@ % \end{macrocode} % % -% \subsection{ RubikCubeSolved command} + +% +% \subsection{\hspace{3mm}RubikCubeGrey command} +% \label{sec:codegrey} +% +% \begin{macro}{\RubikCubeGrey} +% This command sets the face/colour configuration (state) of a 3x3x3 +% Rubik cube with no colours allocated except for the central cubie of each face. +% These central colours match those defined for the RubikCubeSolved command. +% \begin{macrocode} +\newcommand{\RubikCubeGrey}{% +\RubikFaceUp {X}{X}{X}{X}{W}{X}{X}{X}{X}% +\RubikFaceDown {X}{X}{X}{X}{Y}{X}{X}{X}{X}% +\RubikFaceLeft {X}{X}{X}{X}{B}{X}{X}{X}{X}% +\RubikFaceRight{X}{X}{X}{X}{G}{X}{X}{X}{X}% +\RubikFaceFront{X}{X}{X}{X}{O}{X}{X}{X}{X}% +\RubikFaceBack {X}{X}{X}{X}{R}{X}{X}{X}{X}% +} +% \end{macrocode} +% \end{macro} +% +% +% \subsection{\hspace{3mm}RubikCubeSolved command} % % \begin{macro}{\RubikCubeSolved} % This command sets the face/colour configuration (state) of a typical @@ -2603,18 +3083,23 @@ % \end{macro} % % -% \subsection{ Slice macros} +% +% \subsection{\hspace{3mm}Slice commands} % % \begin{macro}{\RubikSliceTopR} % \begin{macro}{\RubikSliceTopL} -% \begin{macro}{\RubikSliceEquatorR} -% \begin{macro}{\RubikSliceEquatorL} +% \begin{macro}{\RubikSliceMiddleR} +% \begin{macro}{\RubikSliceMiddleL} % \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. +% These 6~commands allocate the colour arguments for the 6~visible ordered +% facelets along a horizontal slice. There are three horizontal +% slices to consider (Top, Middle, Bottom) and each has two viewpoints. +% The colour-code arguments are ordered 1--6 from left to right. +% The terminal L and R denote the Left (L) viewpoint and Right (R) +% viewpoint versions. +% Note that the two legacy `Equator' versions (now replaced by `Middle') +% are retained (below) to allow backward compatibility. % \begin{macrocode} \newcommand{\RubikSliceTopR}[6]{% \def\Flt{#1}\def\Fmt{#2}\def\Frt{#3}% @@ -2624,6 +3109,14 @@ \def\Llt{#1}\def\Lmt{#2}\def\Lrt{#3}% \def\Flt{#4}\def\Fmt{#5}\def\Frt{#6}% } +\newcommand{\RubikSliceMiddleR}[6]{% +\def\Flm{#1}\def\Fmm{#2}\def\Frm{#3}% +\def\Rlm{#4}\def\Rmm{#5}\def\Rrm{#6}% +} +\newcommand{\RubikSliceMiddleL}[6]{% +\def\Llm{#1}\def\Lmm{#2}\def\Lrm{#3}% +\def\Flm{#4}\def\Fmm{#5}\def\Frm{#6}% +} \newcommand{\RubikSliceEquatorR}[6]{% \def\Flm{#1}\def\Fmm{#2}\def\Frm{#3}% \def\Rlm{#4}\def\Rmm{#5}\def\Rrm{#6}% @@ -2631,7 +3124,7 @@ \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}% @@ -2649,29 +3142,30 @@ % \end{macro} % % -% \subsection{ Cube drawing macros} +% \subsection{\hspace{3mm}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. +% The order of the XY code is important: X~first, Y~second (so it is easy to remember). % -% On each face the cubies are drawn in the following order: Top row +% On each face the facelets 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. +% The TikZ draw cycle for each facelet square on a Rubik cube face cycles +% through the four corners of the facelet 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); the grid origin is at the bottom-left corner of the +% \textsc{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. +% all the facelets on the \textsc{front} face of a Rubik cube. It is used by all +% of the cube drawing macros which display the \textsc{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}{% @@ -2700,20 +3194,29 @@ % \end{macrocode} % \end{macro} % -% \subsubsection{ Viewing direction} +% \subsubsection{\hspace{3mm}Viewing direction} % -% The command `DrawRubikCubeXY' command uses a trailing XY code +% The command `DrawRubikCubeXY' command uses the 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 +% The order of the XY code is important: X~first, Y~second (so it is 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. +% command \cmd{\DrawRubikCubeFrontFace} to draw the \textsc{front} face, +% and then draws the \textsc{up} face followed by the \textsc{right} face. +% The colours are allocated to particular facelets using the \cmd{\RubikFaceUp}, +% \cmd{\RubikFaceRight} and \cmd{\RubikFaceFront} commands. +% +% The (x,y) grid origin is at the bottom-left corner of the \textsc{front} face. +% The perspective is designed so that the 2D~graphic image of the side face +% (\textsc{right} in this particular case) has its `horizontal' lines running +% at 45~degrees. This has the useful advantage that the 2D~width of the side is +% exactly 1-unit, and so makes it easy to determine the 2D~(x,y) coordinates +% of any position, and hence facilitates typesetting text onto the image of +% the cube using TikZ commands. + % \end{macro} % \begin{macrocode} \newcommand{\DrawRubikCubeRU}{% @@ -2767,8 +3270,8 @@ % % \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). +% and hence is the default form (i.e.,~if the trailing XY +% viewpoint code is accidentally omitted). % \end{macro} % \begin{macrocode} \newcommand{\DrawRubikCube}{\DrawRubikCubeRU} @@ -2940,21 +3443,21 @@ % \end{macrocode} % % -% \subsection{ LayerFace commands} +% \subsection{\hspace{3mm}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, +% These two LayerFace commands each draw and paint a single +% face of 9~facelets. 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 +% is the placeholder for the colour of the TopLeft facelet etc.) +% The second takes only one colour parameter (since \texttt{All} the % colours are the same). -% The drawing origin (0,0) = bottom left corner. Cubies are drawn +% The drawing origin (0,0) = bottom left corner. The facelets 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. +% which is used for drawing the front face of a Rubik cube. % \end{macro} % \end{macro} % \begin{macrocode} @@ -3009,29 +3512,51 @@ % \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). +% \subsection{\hspace{3mm}DrawFlatX commands} +% \label{sec:drawflatxcommands} +% +% [\textsc{note}: These new commands (version 3.0) were modified from the +% earlier \cmd{\FlatUp}, \cmd{\FlatDown} etc., commands; i.e.,~they were +% reformulated as a set of \cmd{\Draw...} commands to make them consistent +% with all the other \cmd{\Draw..} commands]. +% +% \begin{macro}{\DrawFlatUp} +% \begin{macro}{\DrawFlatDown} +% \begin{macro}{\DrawFlatLeft} +% \begin{macro}{\DrawFlatRight} +% \begin{macro}{\DrawFlatFront} +% \begin{macro}{\DrawFlatBack} +% Each of these commands draws a separate (flat) face (9~facelets). +% Each command (except \cmd{\DrawFlatFront}) takes two arguments, +% namely the X-coordinate and Y-coordinate of the bottom-left +% corner of the face. This (X,Y) pair of coordinates therefore allows +% the user to position the face. These commands were motivated by a need to +% be able to show hidden faces under certain circumstances. +% +% Note that the Y-argument currently only works fully +% with the \cmd{\DrawFlatUp}, \cmd{\DrawFlatDown} and \cmd{\DrawFlatBack} +% commands, since all the other faces currently only require Y=0 +% (this will be made more flexible in a later version). +% +% Note also that the \cmd{\DrawFlatFront} command takes no arguments, +% since by definition the bottom left corner of this face is at (0,0), +% and there seems to be no reason (just now) for this face to have the +% facility to be positioned otherwise. % % \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\}} +% \cmd{\DrawFlatUp\{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. +% These new commands are also used by the commands \cmd{\DrawRubikFlat} and +% \cmd{\DrawRubikCubeFlat} to draw various `flat' representations +% of a Rubik cube. +% +% The (x,y) variables are here encoded as (\cmd{\ux}, \cmd{\uy}) where the +% `u' stands for Up etc. However, since we are unable to use `dx, dy' with the +% \cmd{\DrawFlatDown} command (since dx and dy are already used in the +% \cmd{\cube@dxdydz...} command) we encode these instead as (\cmd{\ddx}, \cmd{\ddy}). +% % \end{macro} % \end{macro} % \end{macro} @@ -3039,7 +3564,7 @@ % \end{macro} % \end{macro} % \begin{macrocode} -\newcommand{\FlatUp}[2]{% +\newcommand{\DrawFlatUp}[2]{% \pgfmathsetmacro{\ux}{#1}% \pgfmathsetmacro{\uy}{#2}% %%---top row @@ -3074,7 +3599,7 @@ -- (\ux + 3,\uy + 0) -- cycle; } %%------------------------- -\newcommand{\FlatDown}[2]{% +\newcommand{\DrawFlatDown}[2]{% \pgfmathsetmacro{\ddx}{#1}% \pgfmathsetmacro{\ddy}{#2}% %%---top row @@ -3108,8 +3633,64 @@ (\ddx + 2,\ddy + 0) -- (\ddx + 2,\ddy + 1) -- (\ddx + 3,\ddy + 1)% -- (\ddx + 3,\ddy + 0) -- cycle; } +%%------------------------- +\newcommand{\DrawFlatLeft}[2]{% +\pgfmathsetmacro{\lx}{#1}% +\pgfmathsetmacro{\ly}{#2}% +%% NOTE: y variable coord not yet implemented +%%---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{\DrawFlatRight}[2]{% +\pgfmathsetmacro{\rx}{#1}% %3 +\pgfmathsetmacro{\ry}{#2}% %0 +%% NOTE: y variable coord not yet implemented +%%---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; +} %%----------------------- -\newcommand{\FlatFront}{% +\newcommand{\DrawFlatFront}{% +%% This command is used /only/ by the \cmd{\DrawRubikFlat} command. +%% NOTE: x, y variables not implemented as not required here %%---top row \draw[line join=round,line cap=round,ultra thick,fill=\Flt]% (0,2) -- (0, 3) -- (1,3) -- (1,2) -- cycle; @@ -3139,7 +3720,7 @@ (2,0) -- (2, 1) -- (3,1) -- (3,0) -- cycle; } %%------------------------- -\newcommand{\FlatBack}[2]{% +\newcommand{\DrawFlatBack}[2]{% \pgfmathsetmacro{\bx}{#1}% \pgfmathsetmacro{\by}{#2}% %%---top row @@ -3173,101 +3754,155 @@ (\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) +% Draws a standard flat representation of the Rubik +% cube (colours only). Note that \cmd{\DrawFlatFront} does not +% take any arguments (x,y) arguments. % \begin{macrocode} \newcommand{\DrawRubikFlat}{% - \FlatUp{0}{3}% - \FlatDown{0}{-3}% - \FlatLeft{-3}{0}% - \FlatFront% - \FlatRight{3}{0}% - \FlatBack{6}{0}% + \DrawFlatUp{0}{3}% + \DrawFlatDown{0}{-3}% + \DrawFlatLeft{-3}{0}% + \DrawFlatFront% + \DrawFlatRight{3}{0}% + \DrawFlatBack{6}{0}% } % \end{macrocode} % \end{macro} % % \begin{macro}{\DrawRubikCubeFlat} -% Draws a Rubik's cube together with the three hidden faces -% (colours only) +% Draws a Rubik cube together with the three hidden faces +% (colours only) in a semi-flat representation. The (x,y) +% arguments are for the bottom-left corner of the face. % \begin{macrocode} \newcommand{\DrawRubikCubeFlat}{% \DrawRubikCube% - \FlatDown{0}{-3}% - \FlatLeft{-3}{0}% - \FlatBack{4}{1}% + \DrawFlatDown{0}{-3}% + \DrawFlatLeft{-3}{0}% + \DrawFlatBack{4}{1}% +} +% \end{macrocode} +% \end{macro} +% +% +% +% \subsubsection{DrawFlatXSide commands} +% +% These six commands draw a face together with all four sidebars +% (colours only). We use the \cmd{\DrawFlatX} commands to draw the face. +% We use the \cmd{\DrawRubikLayerSideX} commands to draw the sidebars. +% The parameter orders for the \cmd{\DrawRubikLayerSideX} +% commands are as follows: +% Top (T) and Bottom (B) = left to right; +% Left (L) and Right (R) = top to bottom; +% (see the \cmd{\DrawRubikLayerSideX} command for details of the arguments). +% +% +% \begin{macro}{\DrawFlatUpSide} +% Draws the \textsc{up} face together with all four sidebars +% (colours only). +% \begin{macrocode} +\newcommand{\DrawFlatUpSide}{% +\DrawFlatUp{0}{0}% +\DrawRubikLayerSideT{\Brt}{\Bmt}{\Blt}% +\DrawRubikLayerSideL{\Llt}{\Lmt}{\Lrt}% +\DrawRubikLayerSideR{\Rrt}{\Rmt}{\Rlt}% +\DrawRubikLayerSideB{\Flt}{\Fmt}{\Frt}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\DrawFlatFrontSide} +% Draws the \textsc{front} face together with all four sidebars +% (colours only). +% \begin{macrocode} +\newcommand{\DrawFlatFrontSide}{% +\DrawFlatFront{0}{0}% +\DrawRubikLayerSideT{\Ulb}{\Umb}{\Urb}% +\DrawRubikLayerSideL{\Lrt}{\Lrm}{\Lrb}% +\DrawRubikLayerSideR{\Rlt}{\Rlm}{\Rlb}% +\DrawRubikLayerSideB{\Dlt}{\Dmt}{\Drt}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\DrawFlatRightSide} +% Draws the \textsc{right} face together with all four sidebars +% (colours only). +% \begin{macrocode} +\newcommand{\DrawFlatRightSide}{% +\DrawFlatRight{0}{0}% +\DrawRubikLayerSideT{\Urb}{\Urm}{\Urt}% +\DrawRubikLayerSideL{\Frt}{\Frm}{\Frb}% +\DrawRubikLayerSideR{\Blt}{\Blm}{\Blb}% +\DrawRubikLayerSideB{\Drt}{\Drm}{\Drb}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\DrawFlatLeftSide} +% Draws the \textsc{left} face together with all four sidebars +% (colours only). +% \begin{macrocode} +\newcommand{\DrawFlatLeftSide}{% +\DrawFlatLeft{0}{0}% +\DrawRubikLayerSideT{\Ult}{\Ulm}{\Ulb}% +\DrawRubikLayerSideL{\Brt}{\Brm}{\Brb}% +\DrawRubikLayerSideR{\Flt}{\Flm}{\Flb}% +\DrawRubikLayerSideB{\Dlb}{\Dlm}{\Dlt}% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\DrawFlatBackSide} +% Draws the \textsc{back} face together with all four sidebars +% (colours only). +% \begin{macrocode} +\newcommand{\DrawFlatBackSide}{% +\DrawFlatBack{0}{0}% +\DrawRubikLayerSideT{\Urt}{\Umt}{\Ult}% +\DrawRubikLayerSideL{\Rrt}{\Rrm}{\Rrb}% +\DrawRubikLayerSideR{\Llt}{\Llm}{\Llb}% +\DrawRubikLayerSideB{\Drb}{\Dmb}{\Dlb}% } % \end{macrocode} % \end{macro} % % -% \subsection{ SideBar commands} +% \begin{macro}{\DrawFlatDownSide} +% Draws the \textsc{down} face together with all four sidebars +% (colours only). +% \begin{macrocode} +\newcommand{\DrawFlatDownSide}{% +\DrawFlatDown{0}{0}% +\DrawRubikLayerSideT{\Flb}{\Fmb}{\Frb}% +\DrawRubikLayerSideL{\Lrb}{\Lmb}{\Llb}% +\DrawRubikLayerSideR{\Rlb}{\Rmb}{\Rrb}% +\DrawRubikLayerSideB{\Brb}{\Bmb}{\Blb}% +} +% \end{macrocode} +% \end{macro} +% +% +% +% \subsection{\hspace{3mm}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). +% side colours of each of the facelets forming the side of +% a given layer (face). Each SideBar is the length of a single facelet. % % \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). +% where 1~is equivalent to the length of the side of a facelet). % \end{macro} % \end{macro} % \end{macro} @@ -3284,7 +3919,7 @@ % \end{macrocode} % % -% \subsubsection{ Allocating a colour to a single cubie sidebar} +% \subsubsection{\hspace{3mm}Allocating a colour to a single facelet sidebar} % % \begin{macro}{\side@barT} % \begin{macro}{\side@barB} @@ -3292,20 +3927,20 @@ % \begin{macro}{\side@barR} % Internal commands. % Full length face SideBars are really multiple instances of -% single cubie bars, +% single facelet 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 +% Each SideBar command takes two arguments: one for facelet 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: +% facelet sidebar on the Left of a Rubik face: % \begin{quote} -% \cmd{\side@barL}\marg{cubie-position}\marg{colour-code} +% \cmd{\side@barL}\marg{facelet-position}\marg{colour-code} % \end{quote} -% There are three cubie positions on each of the four sides +% There are three facelet 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) @@ -3313,7 +3948,7 @@ % 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 +% The start point of the TikZ \cmd{\draw} command for each bar rectangle % is botton Left corner of the bar =(\cmd{\dx},\cmd{\dy}) % \end{macro} % \end{macro} @@ -3356,15 +3991,15 @@ % \end{macrocode} % % -% \subsubsection{ Drawing a single cubie sidebar} +% \subsubsection{\hspace{3mm}Drawing a single facelet 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: +% This command draws a single facelet sidebar using the above \cmd{\sidebar} command. +% The X$_1$X$_2$X$_3$ parameters refer to the options Left, Middle, +% Right, Top, Middle, 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$_2$ is an $y$ parameter: either $\langle T\mid M \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 @@ -3382,13 +4017,13 @@ % \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{\DrawRubikLayerSideLMx}[1]{\side@barL{2}{#1}} +\newcommand{\DrawRubikLayerSideLM}[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{\DrawRubikLayerSideRMx}[1]{\side@barR{2}{#1}} +\newcommand{\DrawRubikLayerSideRM}[1]{\side@barR{2}{#1}} \newcommand{\DrawRubikLayerSideRBx}[1]{\side@barR{1}{#1}} %---Top side \newcommand{\DrawRubikLayerSideLTy}[1]{\side@barT{1}{#1}} @@ -3403,7 +4038,7 @@ % \end{macrocode} % % -% \subsubsection{ Drawing multiple cubie sidebars} +% \subsubsection{\hspace{3mm}Drawing multiple cubie sidebars} % % \begin{macro}{\DrawRubikLayerSideT} % \begin{macro}{\DrawRubikLayerSideB} @@ -3436,14 +4071,14 @@ %% colours run vertically DOWN \newcommand{\DrawRubikLayerSideL}[3]{% \DrawRubikLayerSideLTx{#1}% - \DrawRubikLayerSideLEx{#2}% + \DrawRubikLayerSideLMx{#2}% \DrawRubikLayerSideLBx{#3}% } %%--Right side-------- %% colours run vertically DOWN \newcommand{\DrawRubikLayerSideR}[3]{% \DrawRubikLayerSideRTx{#1}% - \DrawRubikLayerSideREx{#2}% + \DrawRubikLayerSideRMx{#2}% \DrawRubikLayerSideRBx{#3}% } % \end{macrocode} @@ -3463,8 +4098,8 @@ \newcommand{\DrawRubikLayerSideLR}[6]{% \DrawRubikLayerSideLTx{#1}% \DrawRubikLayerSideRTx{#2}% - \DrawRubikLayerSideLEx{#3}% - \DrawRubikLayerSideREx{#4}% + \DrawRubikLayerSideLMx{#3}% + \DrawRubikLayerSideRMx{#4}% \DrawRubikLayerSideLBx{#5}% \DrawRubikLayerSideRBx{#6}% } @@ -3472,21 +4107,28 @@ % \end{macro} % % -% \subsection{ NCube command} +% +% \subsection{\hspace{3mm}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}(1) adjusted to use the +% TikZ \cmd{\pgfmathsetmacro\{\}\{\}} command (suggested by Peter Grill), % \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{quote} +% \#1 = number of cubies ($n>0$) along each side, +% {\newline}\#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. +% \end{quote} +% We use the \cmd{\pgfmathsetmacro}\marg{variable-name}\marg{numeric value or maths} +% command. Note that the second argument must not involve any units---just numeric +% values or mathematics. % % \begin{macrocode} \newcommand{\DrawNCubeAll}[4]{% @@ -3505,21 +4147,23 @@ % 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). +% intuitive X, Y, Z ordering of parameters). % % The cube need not be in the origin, the distances of -% the Down-behind [L] corner from -% the origin are taken as parameters. +% the \textsc{down}-behind [L] corner from +% the origin are taken as parameters 5,6,7. % 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 +% \begin{quote} +% 1 - length of an edge +% {\newline}2 - X-face colour (\textsc{right} face) +% {\newline}3 - Y-face colour (\textsc{up} face) +% {\newline}4 - Z-face colour (\textsc{front} face) +% {\newline}5 - x-position in space +% {\newline}6 - y-position in space +% {\newline}7 - z-position in space +% \end{quote} % -% \textsc{usage}: |\cube@dxdydz{1}{cX}{cY}{cZ}{x}{y}{z}| +% \textsc{usage}: |\cube@dxdydz{1}{X}{Y}{Z}{x}{y}{z}| % % {\noindent}The original code % |\pgfmathparse{#1+#5}\let\dy\pgfmathresult| @@ -3528,10 +4172,11 @@ % % \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 +% options to each of the TikZ \cmd{\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}% @@ -3559,7 +4204,8 @@ % \end{macro} % % -% \subsection{ Drawing single cubies} +% +% \subsection{\hspace{3mm}Drawing single cubies} % % \begin{macro}{\Cubiedx} % \begin{macro}{\Cubiedy} @@ -3568,9 +4214,10 @@ % (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. +% Note that we cannot use the names \texttt{dx}, \texttt{dy} for variables since +% these have been allocated already (see above). However, we do use +% \texttt{dx}, \texttt{dy} in the command names as these will be more +% readily understood by the user. % \begin{macrocode} \newcommand{\Cubiedx}[1]{\pgfmathsetmacro{\cx}{#1}} \newcommand{\Cubiedy}[1]{\pgfmathsetmacro{\cy}{#1}} @@ -3593,7 +4240,7 @@ % 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{format}: \cmd{\DrawCubieRU}\marg{Xcolour}\marg{Ycolour}\marg{Zcolour} % \newline\textsc{usage}: |\DrawCubieRU{G}{B}{W}| % \end{macro} % \end{macro} @@ -3647,7 +4294,7 @@ % \end{macrocode} % % -% \subsection{ Text cubies} +% \subsection{\hspace{3mm}Text cubies} % % \begin{macro}{\textCubieRU} % \begin{macro}{\textCubieRD} @@ -3655,14 +4302,14 @@ % \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. +% They are `text' forms of the \cmd{\DrawCubie} commands described above. +% Their size was chosen 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{format}: \cmd{\textCubieRU}\marg{Xcolour}\marg{Ycolour}\marg{Zcolour} % \newline\textsc{usage}: |\textCubieRU{G}{B}{W}| % \end{macro} % \end{macro} @@ -3675,7 +4322,7 @@ \begin{tikzpicture}[scale=0.5] \Cubiedx{0.4}\Cubiedy{0.4} \DrawCubieRU{#1}{#2}{#3} -\end{tikzpicture} +\end{tikzpicture}% \end{minipage} } \newcommand{\textCubieRD}[3]{% @@ -3684,7 +4331,7 @@ \begin{tikzpicture}[scale=0.5] \Cubiedx{0.4}\Cubiedy{0.4} \DrawCubieRD{#1}{#2}{#3} -\end{tikzpicture} +\end{tikzpicture}% \end{minipage} } \newcommand{\textCubieLD}[3]{% @@ -3693,7 +4340,7 @@ \begin{tikzpicture}[scale=0.5] \Cubiedx{0.4}\Cubiedy{0.4} \DrawCubieLD{#1}{#2}{#3} -\end{tikzpicture} +\end{tikzpicture}% \end{minipage} } \newcommand{\textCubieLU}[3]{% @@ -3702,41 +4349,49 @@ \begin{tikzpicture}[scale=0.5] \Cubiedx{0.4}\Cubiedy{0.4} \DrawCubieLU{#1}{#2}{#3} -\end{tikzpicture} +\end{tikzpicture}% \end{minipage} } % \end{macrocode} % % -% \subsection{ Rotation commands --- face and slice} +% \subsection{\hspace{3mm}Rotation commands} +% \label{sec:rotationcommands} +% % -% \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). +% \subsubsection{\hspace{3mm}Introduction} % +% We use a special prefix notation to denote each of four different repreresentations +% of the various Rubik cube rotations as follows: the name of the rotation (rr), its +% associated hieroglyph (rrh), and combinations of name and hieroglyph both vertical (Rubik) +% and horizontal (textRubik). A rotation command is a combination of a rotation-code appended +% to one of the four prefixes. +% +% For example, the command \cmd{\rrhD} generates the hieroglyph (rrh) associated with +% the rotation-code D. In this form it is used internally, but it is also available for the user. +% However, it is also made available to the user in the more intuitive form +% |\rrh{D}| by the use of the internal macro |\@join| (see Sections~\ref{sec:cmdsusingjoin} +% and \ref{sec:usefulinternalcommands}). +% % 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)). +% (for the TikZ ARC command see TikZ pgfmanual (2012) page~146 (\S 14.8)). % -% The presence of small overfilled hboxes associated with these squares -% were originally checked using the ltugboat.cls, and all fixed mainly +% The presence of small overfilled \cmd{\hbox}es associated with these squares +% were originally checked using the \texttt{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. -% +% and using TikZ scale=0.5. +% % % \begin{macro}{\DrawNotationBox} -% This command draws the surrounding square box of all the hieroglyphs. +% This internal 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. % +% TODO: ? make this a proper internal command +% using \verb!@! sometime. +% % \begin{macrocode} \newcommand{\DrawNotationBox}{% \draw [thick] (0,0) -- (0,1) -- (1,1) -- (1,0) -- (0,0) -- (0,1)% @@ -3745,33 +4400,74 @@ % \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 +% (e.g.,~\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. +% and these arcs require both a center and a start point. +% Note that the final argument does not use any units. +% +% TODO: make a small diagram to illustrate the position of these +% parameters and make things a bit clearer sometime. % %\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 +\pgfmathsetmacro{\@sd}{0.25} % a small horiz space +\pgfmathsetmacro{\@sdd}{2*\@sd} % 2x horiz space +\pgfmathsetmacro{\@sddd}{3*\@sd} % 3x horiz space +\pgfmathsetmacro{\@sh}{0.6} % height +\pgfmathsetmacro{\@sb}{0.2} % base +\pgfmathsetmacro{\@sbh}{\@sb + \@sh} % UP +\pgfmathsetmacro{\@scx}{\@sdd+0.2} % Start of CircleX arc +\pgfmathsetmacro{\@scy}{\@sd*2/3} % Start of CircleY arc +\pgfmathsetmacro{\@sqcx}{\@scx-0.13} %% SQuare CenterX coord +\pgfmathsetmacro{\@sqcy}{\@scy+0.25} %% SQuare CenterY cpprd % \end{macrocode} % +% All the \verb!@! internal commands used in the following commands +% and macros are described in Section~\ref{sec:usefulinternalcommands}. +% +% +% +% \subsubsection{\hspace{3mm}Using {\textbackslash}\texttt{join}} +% \label{sec:cmdsusingjoin} % -% \subsubsection{ Rotation B} +% \begin{macro}{\textRubik} +% \begin{macro}{\Rubik} +% \begin{macro}{\rr} +% \begin{macro}{\rrh} +% The following four commands typeset a single rotation, where the rotation-code (eg~U) is +% the argument (see Section~\ref{sec:overview}). As an example, the format for +% the \cmd{\rrh\{\}} command is +% \cmd{\rrh}\marg{rotation-code}. In practice, these four commands are really a +% sort of front-end for all the commands which follow this section. For example, the +% command \cmd{\rrh\{U\}} generates the command \cmd{\rrhU} which itself typesets the +% rotation hieroglyph for the rotation~U, etc. +% +% These four commands, which use the +% internal \cmd{\@join} command (see Section~\ref{sec:usefulinternalcommands}), are +% especially useful when typesetting a list of rotation-codes. +% Furthermore, it seems more intuitive to specify a rotation command +% using the rotation-code as an argument. +% \begin{macrocode} +\newcommand*{\Rubik}[1]{\@join{\Rubik}{#1}} +\newcommand*{\textRubik}[1]{\@join{\textRubik}{#1}} +\newcommand*{\rr}[1]{\@join{\rr}{#1}} +\newcommand*{\rrh}[1]{\@join{\rrh}{#1}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% +% \subsubsection{\hspace{3mm}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. +% These commands all draw forms which denote the B (\textsc{back}-face) rotation. % Not visible from the front. % \begin{macrocode} \newcommand{\rrB}{\@rr{B}} @@ -3787,7 +4483,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Bp} +% \subsubsection{\hspace{3mm}Rotation Bp} % % \begin{macro}{\rrBp} % \begin{macro}{\SquareBp} @@ -3810,7 +4506,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Bw} +% \subsubsection{\hspace{3mm}Rotation Bw} % % \begin{macro}{\rrBw} % \begin{macro}{\SquareBw} @@ -3834,7 +4530,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Bwp} +% \subsubsection{\hspace{3mm}Rotation Bwp} % % \begin{macro}{\rrBwp} % \begin{macro}{\SquareBwp} @@ -3858,7 +4554,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Bs} +% \subsubsection{\hspace{3mm}Rotation Bs} % % \begin{macro}{\rrBs} % \begin{macro}{\SquareBs} @@ -3882,7 +4578,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Bsp} +% \subsubsection{\hspace{3mm}Rotation Bsp} % % \begin{macro}{\rrBsp} % \begin{macro}{\SquareBsp} @@ -3906,7 +4602,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Ba} +% \subsubsection{\hspace{3mm}Rotation Ba} % % \begin{macro}{\rrBa} % \begin{macro}{\SquareBa} @@ -3930,7 +4626,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Bap} +% \subsubsection{\hspace{3mm}Rotation Bap} % % \begin{macro}{\rrBap} % \begin{macro}{\SquareBap} @@ -3954,7 +4650,7 @@ % \end{macro} % % -% \subsubsection{ Rotation D} +% \subsubsection{\hspace{3mm}Rotation D} % % \begin{macro}{\rrD} % \begin{macro}{\SquareD} @@ -3968,10 +4664,10 @@ \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}%% +\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}\,} %% @@ -3991,7 +4687,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Dp} +% \subsubsection{\hspace{3mm}Rotation Dp} % % \begin{macro}{\rrDp} % \begin{macro}{\SquareDp} @@ -4005,9 +4701,9 @@ \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); +\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}\,} @@ -4028,7 +4724,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Dw} +% \subsubsection{\hspace{3mm}Rotation Dw} % % \begin{macro}{\rrDw} % \begin{macro}{\SquareDw} @@ -4042,9 +4738,9 @@ \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); +\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}\,} @@ -4065,7 +4761,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Dwp} +% \subsubsection{\hspace{3mm}Rotation Dwp} % % \begin{macro}{\rrDwp} % \begin{macro}{\SquareDwp} @@ -4079,9 +4775,9 @@ \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); +\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}\,} @@ -4102,7 +4798,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Ds} +% \subsubsection{\hspace{3mm}Rotation Ds} % % \begin{macro}{\rrDs} % \begin{macro}{\SquareDs} @@ -4116,9 +4812,9 @@ \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); +\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}\,} @@ -4139,7 +4835,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Dsp} +% \subsubsection{\hspace{3mm}Rotation Dsp} % % \begin{macro}{\rrDsp} % \begin{macro}{\SquareDsp} @@ -4153,9 +4849,9 @@ \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); +\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}\,} @@ -4176,7 +4872,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Da} +% \subsubsection{\hspace{3mm}Rotation Da} % % \begin{macro}{\rrDa} % \begin{macro}{\SquareDa} @@ -4190,9 +4886,9 @@ \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); +\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}\,} @@ -4213,7 +4909,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Dap} +% \subsubsection{\hspace{3mm}Rotation Dap} % % \begin{macro}{\rrDap} % \begin{macro}{\SquareDap} @@ -4227,9 +4923,9 @@ \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); +\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}\,} @@ -4250,7 +4946,7 @@ % \end{macro} % % -% \subsubsection{ Rotation E} +% \subsubsection{\hspace{3mm}Rotation E} % % \begin{macro}{\rrE} % \begin{macro}{\SquareE} @@ -4264,9 +4960,9 @@ \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); +\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}\,} @@ -4287,7 +4983,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Ep} +% \subsubsection{\hspace{3mm}Rotation Ep} % % \begin{macro}{\rrEp} % \begin{macro}{\SquareEp} @@ -4301,9 +4997,9 @@ \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); +\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}\,} @@ -4324,7 +5020,7 @@ % \end{macro} % % -% \subsubsection{ Rotation F} +% \subsubsection{\hspace{3mm}Rotation F} % % \begin{macro}{\rrF} % \begin{macro}{\SquareF} @@ -4338,7 +5034,7 @@ \newcommand{\SquareF}{% \begin{tikzpicture}[scale=0.5] \DrawNotationBox; -\draw [thick, <-] (\scx, \scy) arc[radius=0.35, start angle=-60, delta angle=290]; +\draw [thick, <-] (\@scx, \@scy) arc[radius=0.35, start angle=-60, delta angle=290]; \end{tikzpicture}% } \newcommand{\rrhF}{\raisebox{-0.333\height}{\SquareF}\,} @@ -4359,7 +5055,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Fp} +% \subsubsection{\hspace{3mm}Rotation Fp} % % \begin{macro}{\rrFp} % \begin{macro}{\SquareFp} @@ -4373,7 +5069,7 @@ \newcommand{\SquareFp}{% \begin{tikzpicture}[scale=0.5] \DrawNotationBox; -\draw [thick, ->] (\scx, \scy) arc[radius=0.35, start angle=-60, delta angle=290]; +\draw [thick, ->] (\@scx, \@scy) arc[radius=0.35, start angle=-60, delta angle=290]; \end{tikzpicture}% } \newcommand{\rrhFp}{\raisebox{-0.333\height}{\SquareFp}\,} @@ -4394,7 +5090,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Fw} +% \subsubsection{\hspace{3mm}Rotation Fw} % % \begin{macro}{\rrFw} % \begin{macro}{\SquareFw} @@ -4408,8 +5104,8 @@ \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]; +\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}% } @@ -4431,7 +5127,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Fwp} +% \subsubsection{\hspace{3mm}Rotation Fwp} % % \begin{macro}{\rrFwp} % \begin{macro}{\SquareFwp} @@ -4445,8 +5141,8 @@ \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]; +\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}\,} @@ -4468,7 +5164,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Fs} +% \subsubsection{\hspace{3mm}Rotation Fs} % % \begin{macro}{\rrFs} % \begin{macro}{\rrhFs} @@ -4494,7 +5190,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Fsp} +% \subsubsection{\hspace{3mm}Rotation Fsp} % % \begin{macro}{\rrFsp} % \begin{macro}{\rrhFsp} @@ -4520,7 +5216,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Fa} +% \subsubsection{\hspace{3mm}Rotation Fa} % % \begin{macro}{\rrFa} % \begin{macro}{\rrhFa} @@ -4546,7 +5242,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Fap} +% \subsubsection{\hspace{3mm}Rotation Fap} % % \begin{macro}{\rrFap} % \begin{macro}{\rrhFap} @@ -4572,7 +5268,7 @@ % \end{macro} % % -% \subsubsection{ Rotation L} +% \subsubsection{\hspace{3mm}Rotation L} % % \begin{macro}{\rrL} % \begin{macro}{\SquareL} @@ -4586,9 +5282,9 @@ \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); +\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}\,} @@ -4609,7 +5305,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Lp} +% \subsubsection{\hspace{3mm}Rotation Lp} % % \begin{macro}{\rrLp} % \begin{macro}{\SquareLp} @@ -4623,9 +5319,9 @@ \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); +\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}\,} @@ -4646,7 +5342,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Lw} +% \subsubsection{\hspace{3mm}Rotation Lw} % % \begin{macro}{\rrLw} % \begin{macro}{\SquareLw} @@ -4660,9 +5356,9 @@ \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); +\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}\,} @@ -4683,7 +5379,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Lwp} +% \subsubsection{\hspace{3mm}Rotation Lwp} % % \begin{macro}{\rrLwp} % \begin{macro}{\SquareLwp} @@ -4697,9 +5393,9 @@ \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); +\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}\,} @@ -4720,7 +5416,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Ls} +% \subsubsection{\hspace{3mm}Rotation Ls} % % \begin{macro}{\rrLs} % \begin{macro}{\SquareLs} @@ -4734,9 +5430,9 @@ \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); +\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}\,} @@ -4757,7 +5453,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Lsp} +% \subsubsection{\hspace{3mm}Rotation Lsp} % % \begin{macro}{\rrLsp} % \begin{macro}{\SquareLsp} @@ -4771,9 +5467,9 @@ \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); +\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}\,} @@ -4794,7 +5490,7 @@ % \end{macro} % % -% \subsubsection{ Rotation La} +% \subsubsection{\hspace{3mm}Rotation La} % % \begin{macro}{\rrLa} % \begin{macro}{\SquareLa} @@ -4808,9 +5504,9 @@ \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); +\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}\,} @@ -4831,7 +5527,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Lap} +% \subsubsection{\hspace{3mm}Rotation Lap} % % \begin{macro}{\rrLap} % \begin{macro}{\SquareLap} @@ -4845,9 +5541,9 @@ \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); +\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}\,} @@ -4868,7 +5564,7 @@ % \end{macro} % % -% \subsubsection{ Rotation M} +% \subsubsection{\hspace{3mm}Rotation M} % % \begin{macro}{\rrM} % \begin{macro}{\SquareM} @@ -4882,9 +5578,9 @@ \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); +\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}\,} @@ -4905,7 +5601,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Mp} +% \subsubsection{\hspace{3mm}Rotation Mp} % % \begin{macro}{\rrMp} % \begin{macro}{\SquareMp} @@ -4919,9 +5615,9 @@ \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); +\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}\,} @@ -4942,7 +5638,7 @@ % \end{macro} % % -% \subsubsection{ Rotation R} +% \subsubsection{\hspace{3mm}Rotation R} % % \begin{macro}{\rrR} % \begin{macro}{\SquareR} @@ -4957,9 +5653,9 @@ \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); +\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}\,} @@ -4980,7 +5676,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Rp} +% \subsubsection{\hspace{3mm}Rotation Rp} % % \begin{macro}{\rrRp} % \begin{macro}{\SquareRp} @@ -4994,9 +5690,9 @@ \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); +\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}\,} @@ -5017,7 +5713,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Rw} +% \subsubsection{\hspace{3mm}Rotation Rw} % % \begin{macro}{\rrRw} % \begin{macro}{\SquareRw} @@ -5031,9 +5727,9 @@ \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); +\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}\,} @@ -5054,7 +5750,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Rwp} +% \subsubsection{\hspace{3mm}Rotation Rwp} % % \begin{macro}{\rrRwp} % \begin{macro}{\SquareRwp} @@ -5068,9 +5764,9 @@ \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); +\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}\,} @@ -5091,7 +5787,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Rs} +% \subsubsection{\hspace{3mm}Rotation Rs} % % \begin{macro}{\rrRs} % \begin{macro}{\SquareRs} @@ -5105,9 +5801,9 @@ \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); +\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}\,} @@ -5128,7 +5824,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Rsp} +% \subsubsection{\hspace{3mm}Rotation Rsp} % % \begin{macro}{\rrRsp} % \begin{macro}{\SquareRsp} @@ -5142,9 +5838,9 @@ \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); +\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}\,} @@ -5165,7 +5861,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Ra} +% \subsubsection{\hspace{3mm}Rotation Ra} % % \begin{macro}{\rrRa} % \begin{macro}{\SquareRa} @@ -5179,9 +5875,9 @@ \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); +\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}\,} @@ -5202,7 +5898,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Rap} +% \subsubsection{\hspace{3mm}Rotation Rap} % % \begin{macro}{\rrRap} % \begin{macro}{\SquareRap} @@ -5216,9 +5912,9 @@ \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); +\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}\,} @@ -5239,7 +5935,7 @@ % \end{macro} % % -% \subsubsection{ Rotation S} +% \subsubsection{\hspace{3mm}Rotation S} % % \begin{macro}{\rrS} % \begin{macro}{\SquareS} @@ -5262,7 +5958,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Sp} +% \subsubsection{\hspace{3mm}Rotation Sp} % % \begin{macro}{\rrSp} % \begin{macro}{\SquareSp} @@ -5285,7 +5981,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Su} +% \subsubsection{\hspace{3mm}Rotation Su} % % \begin{macro}{\rrSu} % \begin{macro}{\rrhSu} @@ -5312,7 +6008,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Sup} +% \subsubsection{\hspace{3mm}Rotation Sup} % % \begin{macro}{\rrSup} % \begin{macro}{\rrhSup} @@ -5339,7 +6035,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Sd} +% \subsubsection{\hspace{3mm}Rotation Sd} % % \begin{macro}{\rrSd} % \begin{macro}{\rrhSd} @@ -5364,7 +6060,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Sdp} +% \subsubsection{\hspace{3mm}Rotation Sdp} % % \begin{macro}{\rrSdp} % \begin{macro}{\rrhSdp} @@ -5389,7 +6085,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Sl} +% \subsubsection{\hspace{3mm}Rotation Sl} % % \begin{macro}{\rrSl} % \begin{macro}{\rrhSl} @@ -5414,7 +6110,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Slp} +% \subsubsection{\hspace{3mm}Rotation Slp} % % \begin{macro}{\rrSlp} % \begin{macro}{\rrhSlp} @@ -5439,7 +6135,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Sr} +% \subsubsection{\hspace{3mm}Rotation Sr} % % \begin{macro}{\rrSr} % \begin{macro}{\rrhSr} @@ -5464,7 +6160,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Srp} +% \subsubsection{\hspace{3mm}Rotation Srp} % % \begin{macro}{\rrSrp} % \begin{macro}{\rrhSrp} @@ -5489,7 +6185,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Sf} +% \subsubsection{\hspace{3mm}Rotation Sf} % % \begin{macro}{\rrSf} % \begin{macro}{\rrhSf} @@ -5515,7 +6211,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Sfp} +% \subsubsection{\hspace{3mm}Rotation Sfp} % % \begin{macro}{\rrSfp} % \begin{macro}{\rrhSfp} @@ -5541,7 +6237,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Sb} +% \subsubsection{\hspace{3mm}Rotation Sb} % % \begin{macro}{\rrSb} % \begin{macro}{\rrhSb} @@ -5567,7 +6263,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Sbp} +% \subsubsection{\hspace{3mm}Rotation Sbp} % % \begin{macro}{\rrSbp} % \begin{macro}{\rrhSbp} @@ -5593,7 +6289,7 @@ % \end{macro} % % -% \subsubsection{ Rotation U} +% \subsubsection{\hspace{3mm}Rotation U} % % \begin{macro}{\rrU} % \begin{macro}{\SquareU} @@ -5607,9 +6303,9 @@ \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); +\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}\,} @@ -5630,7 +6326,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Uw} +% \subsubsection{\hspace{3mm}Rotation Uw} % % \begin{macro}{\rrUw} % \begin{macro}{\SquareUw} @@ -5644,9 +6340,9 @@ \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); +\draw [thick, <-] (\@sb,\@sddd) -- (\@sbh, \@sddd); +\draw [thick, <-] (\@sb,\@sdd) -- (\@sbh, \@sdd); +\draw [thick] (\@sb,\@sd) -- (\@sbh, \@sd); \end{tikzpicture}% } % @@ -5669,7 +6365,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Up} +% \subsubsection{\hspace{3mm}Rotation Up} % % \begin{macro}{\rrUp} % \begin{macro}{\SquareUp} @@ -5683,9 +6379,9 @@ \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); +\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}\,} @@ -5706,7 +6402,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Uwp} +% \subsubsection{\hspace{3mm}Rotation Uwp} % % \begin{macro}{\rrUwp} % \begin{macro}{\SquareUwp} @@ -5720,9 +6416,9 @@ \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); +\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}\,} @@ -5743,7 +6439,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Us} +% \subsubsection{\hspace{3mm}Rotation Us} % % \begin{macro}{\rrUs} % \begin{macro}{\SquareUs} @@ -5757,9 +6453,9 @@ \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); +\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}\,} @@ -5780,7 +6476,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Usp} +% \subsubsection{\hspace{3mm}Rotation Usp} % % \begin{macro}{\rrUsp} % \begin{macro}{\SquareUsp} @@ -5794,9 +6490,9 @@ \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); +\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}\,} @@ -5817,7 +6513,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Ua} +% \subsubsection{\hspace{3mm}Rotation Ua} % % \begin{macro}{\rrUa} % \begin{macro}{\SquareUa} @@ -5831,9 +6527,9 @@ \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); +\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}\,} @@ -5854,7 +6550,7 @@ % \end{macro} % % -% \subsubsection{ Rotation Uap} +% \subsubsection{\hspace{3mm}Rotation Uap} % % \begin{macro}{\rrUap} % \begin{macro}{\SquareUap} @@ -5868,9 +6564,9 @@ \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); +\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}\,} @@ -5891,9 +6587,8 @@ % \end{macro} % % -% \subsection{ Rotation commands --- axis rotations} % -% \subsubsection{ Rotations x and xp} +% \subsubsection{\hspace{3mm}Rotations x and xp} % % \begin{macro}{\rrx} % \begin{macro}{\rrhx} @@ -5921,7 +6616,7 @@ % \end{macro} % % -% \subsubsection{ Rotations y and yp} +% \subsubsection{\hspace{3mm}Rotations y and yp} % % \begin{macro}{\rry} % \begin{macro}{\rrhy} @@ -5949,7 +6644,7 @@ % \end{macro} % % -% \subsubsection{ Rotations z and zp} +% \subsubsection{\hspace{3mm}Rotations z and zp} % % \begin{macro}{\rrz} % \begin{macro}{\rrhz} @@ -5977,7 +6672,7 @@ % \end{macro} % % -% \subsubsection{ Rotations u and d} +% \subsubsection{\hspace{3mm}Rotations u and d} % % \begin{macro}{\rru} % \begin{macro}{\rrhu} @@ -6005,7 +6700,7 @@ % \end{macro} % % -% \subsubsection{ Rotations l and r} +% \subsubsection{\hspace{3mm}Rotations l and r} % % \begin{macro}{\rrl} % \begin{macro}{\rrhl} @@ -6033,7 +6728,7 @@ % \end{macro} % % -% \subsubsection{ Rotations f and b} +% \subsubsection{\hspace{3mm}Rotations f and b} % % \begin{macro}{\rrf} % \begin{macro}{\rrhf} diff --git a/Master/texmf-dist/source/latex/rubik/rubikcube.ins b/Master/texmf-dist/source/latex/rubik/rubikcube.ins index 5b5d6d5f45a..a50acb88fd4 100644 --- a/Master/texmf-dist/source/latex/rubik/rubikcube.ins +++ b/Master/texmf-dist/source/latex/rubik/rubikcube.ins @@ -1,21 +1,24 @@ -%% 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. +%% rubikcube.ins +%% +%% --- automatic overwriting of .sty is disabled------- +%% ========================================================= +%% Authors: RWD Nickalls (dick@nickalls.org) +%% and Apostolos Syropoulos (asyropoulos@yahoo.com) %% -%% This work has the LPPL maintenance status `maintained'. +%% VERSION 3.0 September 25, 2015 +%% Copyright 2015 RWD Nickalls + A Syropoulos %% -%% The Current Maintainer of this work are 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 work consists of the files rubikcube.dtx and rubikcube.ins -%% and the derived file rubikcube.sty. +%% 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 ------------------ %% @@ -28,12 +31,12 @@ Authors: RWD Nickalls (dick@nickalls.org) and Apostolos Syropoulos (asyropoulos@yahoo.com) - Copyright 2014 RWD Nickalls and A Syropoulos + Copyright 2015 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 + 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. @@ -60,10 +63,10 @@ \Msg{* To finish the installation you have to move the *} \Msg{* following file into a directory searched by TeX: *} \Msg{* *} -\Msg{* rubikcube.sty *} +\Msg{* rubikcube.sty *} \Msg{* *} \Msg{* To produce the documentation run the file *} -\Msg{* rubikcube.dtx through LaTeX. *} +\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 *} diff --git a/Master/texmf-dist/source/latex/rubik/rubikrotation.dtx b/Master/texmf-dist/source/latex/rubik/rubikrotation.dtx index 8ffc824499a..57302ac37a7 100644 --- a/Master/texmf-dist/source/latex/rubik/rubikrotation.dtx +++ b/Master/texmf-dist/source/latex/rubik/rubikrotation.dtx @@ -1,10 +1,12 @@ % \iffalse meta-comment % rubikrotation.dtx % +% version 3.0 +% % Authors: RWD Nickalls (dick@nickalls.org) % and Apostolos Syropoulos (asyropoulos@yahoo.com) -% Copyright 2014 RWD Nickalls + A Syropoulos +% Copyright 25 September 2015 RWD Nickalls + A Syropoulos % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either @@ -36,10 +38,12 @@ process rubikrotation.dtx again)^^J}\stop }% \usepackage{ifpdf} -\usepackage{url} %% for references -\usepackage{graphicx} %% for the two pdf figs +\usepackage{url,path} %% for references and paths +\usepackage{graphicx} %% for the two pdf figs +\usepackage{hypdoc} %% for pdf bookmarks + hyperref documenting of packages %%\OnlyDescription \EnableCrossrefs +\PageIndex \CodelineIndex \CodelineNumbered \RecordChanges @@ -54,7 +58,7 @@ % % % -% \CheckSum{302} +% \CheckSum{310} % %%% \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 @@ -74,65 +78,72 @@ % % % -% \title{The \textsf{rubikrotation} package} +% \title{The \rubikrotation\ package} % % \author{ % RWD Nickalls (dick@nickalls.org) \\ % A Syropoulos (asyropoulos@yahoo.com) % } -% \date{This file describes version \RRfileversion, last revised \RRfiledate} +% \date{This file describes version \RRfileversion\ (\RRfiledate)\\ +% \texttt{www.ctan.org/pkg/rubik}} % \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). +% The \rubikrotation\ package is a dynamic extension for the +% \textsc{rubikcube} package (both are part of the Rubik `bundle'). +% The package provides the \cmd{\RubikRotation} command which +% processes a sequence of Rubik rotation moves on-the-fly (using the Perl script +% \texttt{rubikrotation.pl}), and returns the new Rubik cube state (configuration). +% The \rubikrotation\ package also provides a command for implementing some basic +% checking of the Rubik cube state (\cmd{\CheckRubikState}), and one +% for displaying any errors (\cmd{\ShowRubikErrors}). +% +% The \rubikrotation\ package requires access to the \TeX\ \texttt{write18} +% facility, which is enabled by using the \texttt{--shell-escape} command-line switch. +% The~\rubikrotation\ package has been road-tested on a Microsoft +% platform (with MiKTeX and Strawberry Perl), on a Linux platform +% (Mandriva using {\TeX}Live), and on a Solaris platform (OpenIndiana). % \end{abstract} % +% \begin{minipage}{11cm} +% \centering +% \ifpdf +% \includegraphics[width=10cm]{Rubikrot-doc-figD.pdf} +% \else +% \fi +% \end{minipage} % -% \bigskip +% \vspace{-1\baselineskip} % % \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}). +% It consists of a style option (\texttt{rubikrotation.sty}), a +% Perl script (\texttt{rubikrotation.pl}) and some examples. % -% The primary role of the \rubikrotation\ package is to implement on-the-fly Rubik -% rotation sequences using the \cmd{\RubikRotation} command. Consequently, this +% The primary role of the \rubikrotation\ package is to implement a sequence of +% Rubik rotation moves on-the-fly 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' +% command-line control of the Perl script, which is really the `engine' of this package. +% +% The \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). +% environment of Unix/Linux systems.}), on a Linux platform (Mandriva using +% {\TeX}Live), and on a Solaris platform (OpenIndiana). % -% The following commands are made available by \texttt{rubikrotation.sty}. +% The following commands are made available by \texttt{rubikrotation.sty}: % \begin{quote} % \begin{verbatim} -% \RubikRotation{} +% \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} @@ -146,277 +157,403 @@ % % Place the file \texttt{rubikrotation.zip} into a temporary directory, and unzip it. % This will generate the following files: +%\begin{quote} % \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 +% rubikrotation.pdf --this document +% rubikrotation.pl --Perl script +% rubikrotationPL.pdf --documentation of rubikrotation.pl +% rubikrotation.1 --the man file +% Rubikrot-doc-figA.pdf +% Rubikrot-doc-figB.pdf +% Rubikrot-doc-figC.pdf +% Rubikrot-doc-figD.pdf +% examples.tex +% examples.pdf +% examples.sh +% examples.bat +%\end{verbatim} +%\end{quote} +% Note that the package includes an `examples' file (\texttt{examples.tex}) +% as well as associated \texttt{.sh} (Linux) and \texttt{.bat} (Microsoft) batch +% files which can be used to facilitate processing the file. +% The main package documentation is the file \texttt{rubikrotation.pdf}. +% +% The style option \texttt{rubikrotation.sty} is generated by running (pdf)\LaTeX\ on % the file \texttt{rubikrotation.ins} as follows: +%\begin{quote} %\begin{verbatim} % pdflatex rubikrotation.ins %\end{verbatim} -% The documentation file (\texttt{rubikrotation.pdf}) was generated using the following -% steps: +%\end{quote} +% The documentation file (\texttt{rubikrotation.pdf}) is then generated using the following +% sequence of steps\,\footnote{Since the documentation includes a complicated indexing +% system as well a \textsc{pdf} index and hyperef links (the package \texttt{hypdoc} +% is used), then a lot of pdflatex runs are required. Prior to the first run it is +% a good idea to delete any relevant \texttt{.toc}, \texttt{.aux}, \texttt{.out} files.}: +%\begin{quote} % \begin{verbatim} -% pdflatex --shell-escape rubikrotation.dtx -% pdflatex --shell-escape rubikrotation.dtx +% pdflatex rubikrotation.dtx +% pdflatex rubikrotation.dtx % makeindex -s gind.ist rubikrotation % makeindex -s gglo.ist -o rubikrotation.gls rubikrotation.glo -% pdflatex --shell-escape rubikrotation.dtx +% pdflatex rubikrotation.dtx +% pdflatex rubikrotation.dtx %\end{verbatim} +%\end{quote} % - % +% % \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: +% Place the files either in a working directory, or where your system +% will find them, e.g.,~in your \texttt{/texmf-local/} directory tree. +% For example, on a Linux platform 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. +%{\noindent}*.sty $\rightarrow$ \texttt{/usr/local/texlive/texmf-local/tex/latex/rubik/} +%{\newline}*.cfg $\rightarrow$ \texttt{/usr/local/texlive/texmf-local/tex/latex/rubik/} +%{\newline}*.pdf $\rightarrow$ \texttt{/usr/local/texlive/texmf-local/doc/rubik/} +%{\newline}*.pl $\rightarrow$ \texttt{/usr/local/texlive/texmf-local/scripts/rubik/} % +%\medskip +%{\noindent}\textsc{perl script}:\ \ Make the perl script executable +% (\texttt{chmod +x rubikrotation.pl}), and then +% rename the file as `rubikrotation' (i.e.,~with no file extension), and then place +% the executable script into your current TeXLive binary directory, +% e.g.,~\path!/user/local/texlive/YYYY/bin/i386-linux!. +% +% Sometimes the setting up of a simple one or two-line plain-text +% configuration-file may be useful or even necessary, depending on your system +% (see Section~\ref{sec:configfile} below). Such a file (if one exists) will +% automatically be read by \texttt{rubikrotation.sty} providing the +% file is named \texttt{rubikrotation.cfg}. % -% \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} +%\medskip +%{\noindent}\textsc{the `man' file}:\ \ On a Linux platform this file +% (\texttt{rubikrotation.1}) would be typically located in the +% directory \verb!/usr/share/man/man1!. % +%\medskip +%{\noindent}\textsc{file database}:\ \ Finally, (depending on your system) update the +% \TeX\ file database. +% For example, on a Linux platform this is achieved using the \texttt{texhash} command. % -% 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} +%\medskip +%{\noindent}\textsc{quick test}:\ \ To test that your system can now run the perl +% script, just type at the command-line +%\begin{quote} +% \begin{verbatim} +% rubikrotation -h %\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{quote} +% which should generate something like the following: +% \begin{verbatim} +% This is rubikrotation version 3.0 +% Usage: rubikrotation [-h] -i <input file> [-o <out file>] +% where, +% [-h] gives this help listing +% [-i] creates specified input file +% [-o] creates specified output file +% For documentation see: rubikrotation.pdf, +% rubikrotationPL.pdf and rubikcube.pdf %\end{verbatim} % % % \section{Usage} -% +% \label{sec: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} +% and \texttt{rubikrotation.sty} in the \TeX\ file preamble \textit{after} loading +% the TikZ package (both Rubik packages require the TikZ package), for example, as follows: +%\begin{quote} +% \begin{verbatim} +% \usepackage{tikz} +% \usepackage{rubikcube,rubikrotation} %\end{verbatim} -% and run (pdf)\LaTeX\ using the \texttt{--shell-escape} commandline switch -% (see following section). +%\end{quote} +% and run (pdf)\LaTeX\ using the \texttt{--shell-escape} command-line switch +% (see the 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. +% it is necessary to invoke (pdf)\LaTeX\ using the \texttt{--shell-escape} switch +% as follows: +%\begin{quote} % \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: +%\end{quote} +% In practice, it is probably most convenient to run this command via a +% bash/batch file. For example, on a Linux platform the following bash file +% will run the file, show any errors, and open the \textsc{pdf} using AcrobatReader. +%\begin{quote} % \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 +% echo "...checking error file" +% grep ERROR ./rubikstateERRORS.dat +% acroread filename.pdf & %\end{verbatim} +%\end{quote} % % -% \subsection{Test files} +% \subsection{Test file} % -% Two example tex files (which demonstrate the use of the package commands) are -% included in the package, namely: +% An example tex file (which demonstrates the use of some of the package commands) +% is included in the package, namely: +%\begin{quote} % \begin{verbatim} -% example-rot1.tex (shows 5 worked examples) -% example-rot2.tex (is a `test' file for experimenting with different commands) +% example-rot.tex (shows 8 worked examples) %\end{verbatim} -% These need to be run using \texttt{--shell-escape} switch; for example: +%\end{quote} +% This file needs to be run using \texttt{--shell-escape} switch; for example: +%\begin{quote} % \begin{verbatim} -% pdflatex --shell-escape example-rot1.tex +% pdflatex --shell-escape example-rot.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. +%\end{quote} +% Batch files (\texttt{.sh} for Linux, and \texttt{.bat} for Microsoft) are also provided +% to facilitate running the `example' file. +% For example, on a Linux platform one would run a \texttt{bash} file as follows: +%\begin{quote} +% \begin{verbatim} +% bash example-rot.sh +%\end{verbatim} +%\end{quote} +% If processing this file gives unexpected results (e.g.,~the cubes appear not to +% have experienced any rotations) check-out the associated log file to see if +% the operating system had any difficulties finding files etc. +% % +% \subsection{Configuration-file} +% \label{sec:configfile} % +% A plain-text configuration-file with the name \texttt{rubikrotation.cfg} +% (if one exists) will automatically be read by \texttt{rubikrotation.sty}. +% The \rubikrotation\ package's facility to use a configuration-file allows the +% user to change not only (a)~the filename of the Perl script (\texttt{rubikrotation.pl}), +% but also (b)~the command-line code used by \texttt{rubikrotation.sty} for calling the +% Perl script. This~sort of fine-tuning can be very useful, and sometimes may +% even be necessary (depending on your system) for running the Perl script. % +% For example, on some systems it maybe preferable to use a different \textsc{path}, +% file-name and/or a different command-line code to call the script. +% Such~a configuration-file can also facilitate testing a new Perl script having +% a different name and location. +% +% +% \DescribeMacro{\rubikperlname} +% \DescribeMacro{\rubikperlcmd} +% The configuration-file is essentially a convenient software vehicle for feeding +% additional \LaTeX\ code to the style option \texttt{rubikrotation.sty}, and hence +% allows the contents of some commands to be easily 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 command-line call, +% namely \cmd{\rubikperlcmd}. +% The~default definitions in \texttt{rubikrotation.sty} (which assume the Perl +% script is executable), are as follows: (they are detailed in +% Section~\ref{sec:usefulcommands}) +%\begin{quote} +%\begin{verbatim} +% \newcommand{\rubikperlname}{rubikrotation} +% \newcommand{\rubikperlcmd}{\rubikperlname\space% +% -i rubikstate.dat -o rubikstateNEW.dat} +%\end{verbatim} +%\end{quote} +% Note the need here to use the \cmd{\space} command on the end of the backslash +% command (\cmd{\rubikperlname}) in order to force a following +% space---i.e.,~before the first command-line argument. The following examples +% illustrate how the configuration-file may be used. +% +% \medskip +% {\noindent}\textsc{example~1}:\ \ Suppose we wish to test out +% a slightly modified Perl script +% with the working (executable) name \texttt{rubikrotationR77}. In this case we +% simply create, in the local working directory, a plain-text configuration-file +% (called \texttt{rubikrotation.cfg}) which contains just the following line: +%\begin{quote} +%\begin{verbatim} +%\renewcommand{\rubikperlname}{rubikrotationR77} +%\end{verbatim} +%\end{quote} +% +% \medskip +% {\noindent}\textsc{example~2}:\ \ Alternatively, suppose we wish to test out +% a new Perl script with the (non-executable) name \texttt{rubikrotationR55.pl}. +% Now, in this particular case we will need to run the script using a +% slightly different command, namely, +% {\linebreak}\texttt{perl rubikrotationR55.pl ...}, and consequently we +% need to implement both these changes in the configuration-file, as follows: +%\begin{quote} +%\begin{verbatim} +%\renewcommand{\rubikperlname}{rubikrotationR55.pl} +%\renewcommand{\rubikperlcmd}{perl \rubikperlname\space\% +% -i rubikstate.dat -o rubikstateNEW.dat} +%\end{verbatim} +%\end{quote} +%{\noindent}\textsc{placing the configuration-file}:\ \ The simplest arrangement is +% just to include the \texttt{.cfg} file in the working `test' directory. +% Alternatively, the \texttt{.cfg} file could be placed in the \texttt{/texmf-local/} +% directory tree (say, in \path!/usr/local/texlive/texmf-local/tex/latex/rubik/!), +% but in this case one would then have to be careful to specify the +% correct PATH for everything in order to enable your system to find all the +% various components etc. +% +% Note that you can, of course, have several \texttt{.cfg} files, since the system will +% read only one such file (the first one it finds starting with the current working +% directory). Consequently, it may be useful to have one \texttt{.cfg} file in +% your \texttt{/texmf-local/} dir (for running the standard Rubik package), +% and another (different) \texttt{.cfg} file in your `test' directory. +% +% % \section{Commands} % -% The \textit{only} commands which \textit{must} be used inside a TikZ picture +% The \textit{only} `Rubik bundle' 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 +% inside a TikZ environment if you wish. +% +% However, using commands which influence the Rubik colour state +% (e.g.,~the \cmd{\RubikRotation} command) outside the \texttt{tikzpicture}, +% \texttt{minipage} or \texttt{figure} environments +% generally offers maximum flexibility, since the effects of such commands when +% used inside these environments remain `local' to the environment, and are not +% therefore accessable outside that \textit{particular} environment +% (see also Section~4.1 in the \textsc{rubikcube} documentation). +% +% Conversely, the only \rubikrotation\ command which should \textit{not} +% be used inside a TikZ environment is the \cmd{\ShowRubikErrors} command % (see the notes on this command below). % % -% \subsection{\cmd{\RubikRotation} command} +% \subsection[RubikRotation command]{\cmd{\RubikRotation} command} +% \label{sec:rubikrotationcmd} % % \DescribeMacro{\RubikRotation} -% The \cmd{\RubikRotation}\marg{comma separated sequence} command processes -% a comma separated sequence of rotations, and returns the final state. +% The \cmd{\RubikRotation}\oarg{integer}\marg{comma separated sequence} +% command processes a comma separated sequence of rotations, and returns +% the final state. The optional \oarg{integer} argument specifies the number +% of times the command should be repeated. +% % 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{quote} % \begin{verbatim} +% \RubikCubeSolved % sets up the colours for a solved cube state +% \RubikRotation{R2,L,U,D} % \begin{tikzpicture}[scale=0.7] -% \RubikCubeSolved -% \RubikRotation{R2,L,U,D} % \DrawRubikCubeRU -% \end{tikzpicture} +% \end{tikzpicture}% %\end{verbatim} +%\end{quote} % 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 then calling the Perl script \texttt{rubikrotation.pl}. The Perl +% script 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): +% which is then input on-the-fly by the \LaTeX\ file. This new Rubik state +% can then either used as the input for another \cmd{\RubikRotation}, or used +% to generate a graphic image of the cube. +% +% A given rotation sequence can be repeated multiple times, say $n$ times, by +% using the optional \verb![n]!. For example, the following two commands are equivalent: +%\begin{quote} % \begin{verbatim} -% \RubikRotation{*sixspot,U,Dp,R,Lp,F,Bp,U,Dp} +% \RubikRotation[3]{x,R,U} +% \RubikRotation{x,R,U,x,R,U,x,R,U} %\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): +%\end{quote} +% + +% \subsubsection{Sequences as macros} +% \label{sec:seq-as-macros} +% +% Macros which are arguments of the \TeX\ \cmd{\write} command are expanded +% on writing (Eijkhout 1992, \S\,30.2.3, p.\,238)[\,see refs Section~\ref{sec:references}\,]. +% Consequently we are able to use a sequence-defining macro as an argument for +% the \cmd{\RubikRotation} command. In fact this is very convenient, since it allows +% one to store lots of different rotation sequences by name alone. +% +% For example, we can use the name `sixspot' for a macro denoting the rotation sequence +% which generates the well known `sixspot' configuration (see the `patterns' page on the +% Reid website)[\,see refs Section~\ref{sec:references}\,], as follows: +%\begin{quote} % \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: +%\end{quote} +% With this new \cmd{\sixspot} command we are now able to generate the graphic (sixspot cube) +% very easily using the following code---this time we demonstrate the use of the more convenient +% \cmd{\ShowCube} command (which includes the \texttt{tikzpicture} environment): % % \medskip % % \begin{minipage}{6cm} % \begin{verbatim} -% \begin{tikzpicture}[scale=0.7] -% \RubikCubeSolved -% \RubikRotation{\sixspot} -% \DrawRubikCubeRU -% \end{tikzpicture} +% \RubikCubeSolved +% \RubikRotation{\sixspot} +% \ShowCube{3cm}{0.7}{\DrawRubikCubeRU} %\end{verbatim} % \end{minipage} % \begin{minipage}{3.4cm} % \centering % \ifpdf -% \includegraphics[height=3cm]{Rubikrot_doc_figA.pdf} +% \includegraphics[height=3cm]{Rubikrot-doc-figA.pdf} % \else % \fi % \end{minipage} % -% % \medskip +% Providing such macros (when used as arguments) are comma separated (as the rotation codes +% must be), then the \cmd{\RubikRotation} command can accommodate both rotation codes +% and macros; for example, \verb!\RubikRotation{x,y,\sixspot,x}!. % +% +% \subsubsection{Arguments prefixed with *, [, ]} +% \label{sec:prefixedargument} +% +% If any of the comma separated arguments is prefixed with either *, [ or ] they are +% interpreted as an inactive `string', and not 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 this facility to label the `sixspot' configuration mentioned above, +% as follows: +%\begin{quote} +% \begin{verbatim} +% \RubikRotation{[sixspot],U,Dp,R,Lp,F,Bp,U,Dp} +%\end{verbatim} +%\end{quote} % In practice, it is quite useful to go one step further and include -% the \texttt{*} label feature as well in the newcommand, as follows: +% the [\,] label feature in the \cmd{\sixspot} command, as follows, +%\begin{quote} % \begin{verbatim} -% \newcommand{\sixspot}{*sixspot,U,Dp,R,Lp,F,Bp,U,Dp} +% \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} +%\end{quote} +% since this has the great advantage of making the label-name visible in the log file. +% For example, the following command, which uses the rotations \textbf{x}, \textbf{x} % and \textbf{y} to initially rotate the `solved' cube before applying % the `sixspot' sequence of rotations, +%\begin{quote} % \begin{verbatim} % \RubikRotation{x2,y,\sixspot} %\end{verbatim} +%\end{quote} % will then be represented in the log file as +%\begin{quote} % \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) +% ...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 ... % ...rotation x OK (= rrR + rrSr + rrLp) % ...rotation x OK (= rrR + rrSr + rrLp) % ...rotation y OK (= rrU + rrSu + rrDp) -% ...*sixspot is a label OK +% ...[sixspot] is a label OK % ...rotation U OK % ...rotation Dp OK % ...rotation R OK @@ -426,8 +563,60 @@ % ...rotation U OK % ...rotation Dp OK %\end{verbatim} +%\end{quote} % In this way, several named rotation sequences can be easily distinguished -% in the log file from adjacent rotation commands. +% in the log file from adjacent rotation sequences. +% This feature is also useful when typesetting a sequence of rotation codes, since the first +% element will then appear in the form \verb![name]!, obviating the need to typeset the +% name of the sequence separately. +% +% To this end, the +% \verb!ForEachX! macro---from the \verb!forarray! package---can be very useful. +% For example, this macro is central to the following example macro for typesetting +% a rotation sequence using the Rubik \cmd{\rr} command: +%\begin{quote} +%\begin{verbatim} +%\def\x{\thislevelitem} +%\def\xcount{\thislevelcount} +% +%\newcommand{\showseq}[1]{% +% \ForEachX{,}{% +% \ifthenelse{\xcount=1}{\texttt{\x}}{,\ \rr{\x}}% +% }{#1}. +%} +%\end{verbatim} +%\end{quote} +% Now, for a sequence defined as |\newcommand{\myseq}{[myseq],U,D,Lwp,R}|, then +% the command |\showseq{\myseq}| will result in the following output: +%\begin{quote} +% \texttt{[myseq]},\ \textbf{U},\ \textbf{D},\ \textbf{Lwp},\ \textbf{R}. +%\end{quote} +% Note that we are able to typeset the name \texttt{[myseq]} differently from the +% remaining sequence since the counter \verb!\xcount! allows us to locate the first item. +% However, this macro as it stands needs further development in order to handle +% sequence elements with a terminal digit (e.g.,~\texttt{R2})---the macro will need +% to first expand this to \texttt{R, R} if the Rubik commands are to be used. +% +% \subsubsection{Groups} +% +% The \cmd{\RubikRotation} command is a convenient tool for +% illustrating how Rubik rotations and sequences of rotations are elements +% of groups and subgroups. +% For~example, using the \rubikrotation\ package it is easy to +% show that three cycles of the `sixspot' sequence return the Rubik cube to its +% original state. More formally this is equivalent to $($\cmd{\sixspot}$)3 \equiv 0$, +% and can be nicely illustrated by implementing the following pseudocode: +%\begin{verbatim} +% \RubikCubeSolved . \RubikRotation[3]{\sixspot} = \RubikCubeSolved +%\end{verbatim} +% +% \begin{minipage}{11cm} +% \centering +% \ifpdf +% \includegraphics[width=10cm]{Rubikrot-doc-figC.pdf} +% \else +% \fi +% \end{minipage} % % % \subsubsection{Random rotations} @@ -438,65 +627,78 @@ % 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. -% +% If $n > 200$ then the currently set maximum value $n=200$ will be used. +% +% As a safety feature the maximum $n$ can be changed only by editing the +% set value of the Perl variable \verb!$maxn! in the Perl script +% \texttt{rubikrotation.pl}, where (see line~583) we currently have +%\begin{quote} +%\begin{verbatim} +% my $maxn=200; +%\end{verbatim} +%\end{quote} +% % 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} +% \includegraphics[height=4cm]{Rubikrot-doc-figB.pdf} % \else % \fi % \end{minipage} +% \begin{minipage}{6cm} +% \vspace{1.6cm} +%\begin{verbatim} +% \RubikCubeSolved% +% \RubikRotation{random,120}% +% \ShowCube{5.5cm}{0.5}{\DrawRubikCubeFlat} +%\end{verbatim} +% \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 +% the \cmd{\Draw..} command is inside the TikZ picture environment (i.e.,~inside +% the \cmd{\ShowCube} command). Note also that when Rubik % 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 randomisation procedure is as follows: all the possible rotations are first allocated +% a different cardinal number (positive 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}} +% \subsection[SaveRubikState]{\cmd{\SaveRubikState} command} +% \label{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). +% format so that it can be read by \LaTeX. Consequently such a file can then be input +% so it can be drawn or processed in the usual way. The output file is `closed' immediately +% following the `write' in order to allow it to be available for input later by the same +% file if required. % % 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{quote} %\begin{verbatim} % \RubikCubeSolved% % \RubikRotation{*sixspot,U,Dp,R,Lp,F,Bp,U,Dp}% % \SaveRubikState{sixspot.tex}% %\end{verbatim} +%\end{quote} % 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{quote} %\begin{verbatim} % % filename: sixspot.tex % \RubikFaceUp{O}{O}{O}{O}{W}{O}{O}{O}{O}% @@ -506,75 +708,81 @@ % \RubikFaceFront{G}{G}{G}{G}{O}{G}{G}{G}{G}% % \RubikFaceBack{B}{B}{B}{B}{R}{B}{B}{B}{B}% %\end{verbatim} +%\end{quote} % We can therefore access and draw this configuration later, when required, % simply by inputting the file as follows: +%\begin{quote} %\begin{verbatim} -%\begin{tikzpicture} -% \input{sixspot.tex} -% \DrawRubikCubeFlat -%\end{tikzpicture} +%\input{sixspot.tex} +%\ShowCube{7cm}{0.7}{\DrawRubikCubeFlat} %\end{verbatim} +%\end{quote} % % -% \subsection{\cmd{\CheckRubikState} command} +% \subsection[CheckRubikState]{\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 +% (e.g.,~enter an invalid number of, say, yellow facelets), 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. +% of a 3x3x3 Rubik cube, and shows the number of facelets of each colour. +% An ERROR: code is issued if the number of facelets 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{quote} %\begin{verbatim} % \CheckRubikState% %\end{verbatim} +%\end{quote} % Note that such a check is implemented automatically with each \cmd{\RubikRotation} command. % % % % -% \subsection{\cmd{\ShowRubikErrors} command} +% \subsection[ShowRubikErrors]{\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 +% underneath the graphic 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. -% +% processing the whole document. +% Once the document is free of errors this command can be removed or just commented out. +% Run the test file \texttt{example-rot.tex} to see an example of the use of this command. % % \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 +% 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 +% \item The Perl script \texttt{rubikrotation.pl} 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. +% \item The Perl script \texttt{rubikrotation.pl} also writes error data +% to the file \texttt{rubikstateERRORS.dat}. A copy of this file is displayed +% under the graphic image when the command +% \cmd{\ShowRubikErrors} is used after the TikZ picture environment. % % \end{itemize} % % % \section{General overview} -% -% When \LaTeX\ loads the \rubikrotation\ package the following steps are implemented. +% \label{generaloverview} +% When \LaTeX\ processes \texttt{rubikrotation.sty} the following steps +% are implemented. % \begin{itemize} % % @@ -582,13 +790,13 @@ % 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}) +% \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. +% \item[4.] The plain-text file \texttt{rubikstateERRORS.dat} is created. % This file collects error messages generated by the Perl script. % % \end{itemize} @@ -597,13 +805,14 @@ % 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}. +% 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 +% followed by the command \verb!\RubikRotation[2]{U,D,L,R}!, then the associated % \texttt{rubikstate.dat} file would be as follows: +%\begin{quote} % \begin{verbatim} % % filename: rubikstate.dat % up,W,W,W,W,W,W,W,W,W @@ -614,39 +823,141 @@ % back,R,R,R,R,R,R,R,R,R % checkstate % rotation,U,D,L,R +% rotation,U,D,L,R %\end{verbatim} -% Alternatively, if the \cmd{\RubikRotation} command was +%\end{quote} +% Note that the \cmd{\RubikRotation} option \texttt{[2]} results in the line \texttt{rotation,U,D,L,R} +% being written twice to the \texttt{rubikstate.dat} file, as shown above. +% +% Alternatively, if we used the command % \verb!\RubikRotation{random, 45}! then the last line written to the file -% would be the string `\texttt{rotation,random,45}' +% would be the string `\texttt{rotation,random,45}', as follows: +%\begin{quote} +% \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,random,45 +%\end{verbatim} +%\end{quote} % 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 +% The action of the Perl script \texttt{rubikrotation.pl} 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 +% When control passes to Perl, the script \texttt{rubikrotation.pl} starts +% by loading the current rubikstate (prompted by the keywords \texttt{up}, \texttt{down}, +% \texttt{left}, \texttt{right}, \texttt{front}, \texttt{back}, in the file +% \texttt{rubikstate.dat}). Next the Perl script +% performs some basic checks (prompted by the key word \texttt{checkstate}), and +% then it processes the sequence of Rubik rotations (prompted by the keyword +% \texttt{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 script performs a sequence of $n$ random rotations. +% Finally, the Perl script 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 +% then this cycle repeats accordingly. Eventually a \cmd{\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. +% \cmd{\ShowRubikErrors} command can be removed or commented out. +% +% Note that if a \textsc{bash} file is used to coordinate the process then it is often +% convenient to use the linux \texttt{grep} utility to alert the user to any run-time errors, +% by using \texttt{grep} to scan the \texttt{rubikstateERRORS.dat} file at the end of +% the run; for example, as follows: +%\begin{quote} +%\begin{verbatim} +% pdflatex --shell-escape myfile.tex +% echo "...checking error file" +% grep ERROR ./rubikstateERRORS.dat +%\end{verbatim} +%\end{quote} +% +% +% \section{References} +% \label{sec:references} +% +%\begin{itemize} +% +% \item Abrahams PW, Berry K and Hargreaves KA (1990). \textit{\TeX\ for the impatient} +% (Addison-Wesley Publishing Company), page~292. +% {\newline}Available from: \url{http://www.ctan.org/pkg/impatient} +% {\newline}[\,re:~\cmd{\rubikpercentchar} and \cmd{\@comment} in Section~\ref{sec:abrahams}\,] +% +% +% \item Eijkhout V (1992). \textit{\TeX\ by topic: a {\TeX}nician's reference}. +% (Addison-Wesley Publishing Company), pages~232 \&~238. +% {\newline}Available from: \url{https://bitbucket.org/VictorEijkhout/tex-by-topic/} +% [\,re:~\cmd{\string} in Section~\ref{sec:eijkhout}\,] +% [\,re:~\cmd{\write} in Section~\ref{sec:seq-as-macros}\,] +% +% +% \item Feuers\"{a}nger C (2015). Notes on programming in \TeX. +% {\newline}(revision: 1.12.1-32-gc90572c; 2015/07/29) +% \newline\url{http://pgfplots.sourceforge.net/TeX-programming-notes.pdf} +% {\newline}[\,re:~loop macros in Section~\ref{sec:feuersanger}\,] +% +% +% \item Nickalls RWD and Syropoulos A (2015). The \textsc{rubikcube} package. +% \newline\url{http://www.ctan.org/pkg/rubik}, +% +% \item Reid M. \ Patterns. \url{http://www.cflmath.com/Rubik/patterns.html} +% {\newline}[\,re:~sequences as macros; in Section~\ref{sec:seq-as-macros}\,] +% +%\end{itemize} +% +% % +% \section{Change history} % +% \begin{itemize} +% \item Version 3.0 (25 September 2015) +% +% --- The \cmd{\RubikRotation} command now actions multiple instances of its argument +% as determined by an optional `repeat' \oarg{integer}. For example the command +% \cmd{\RubikRotation[3]\{R,x\}} is equivalent to the command \cmd{\RubikRotation\{R,x,R,x,R,x\}} +% (see Sections~\ref{sec:rubikrotationcmd} and \ref{sec:rubikrotationcode}). +% +% --- If a comma separated element used as an argument for the \cmd{\RubkRotation} +% command is prefixed with either a * or [ or ] character then it is not actioned +% as a rotation (see Section~\ref{sec:prefixedargument}). +% +% --- The Perl script \texttt{rubikrotation.pl} now has command-line switches, +% including \texttt{-h} to show some `help' and `usage' information +% (see Section~\ref{sec:placingfiles}). +% +% --- A `man' file for the Perl script \texttt{rubikrotation.pl} is now included in the package. +% +% --- The Perl script \texttt{rubikrotation.pl} now uses as input and output filenames +% those specified in the command-line of the CALLing program. This now allows the +% script \texttt{rubikrotation.pl} to be used as a stand-alone tool (see the +% \texttt{rubikrotation} `man' file for details). +% +% --- The documentation for the Perl script \texttt{rubikrotation.pl} is in the +% accompanying file \texttt{rubikrotationPL.pdf}. +% +% --- Fixed typos, index and minor errors in the documentation. +% +% +% \item Version 2.0 (5 February, 2014) +% +% --- First release. +% +% \end{itemize} % % ^^A ================================================== % \StopEventually{\PrintIndex} @@ -654,21 +965,27 @@ % % % \section{The code (\texttt{rubikrotation.sty})} -% +% +% {\noindent}In the following, the term `Perl script' denotes the script +% \texttt{rubikrotation.pl}. Useful information regarding the +% \TeX\ \cmd{\write} command is given in Eijkhout (1992), \S\,30.2.3 (page~238). +% For the means of including a `\%' character in the token list of \cmd{\write} see +% Abrahams \textit{et.~al} (1990). +% % \subsection{Package heading} % % \begin{macrocode} %<*rubikrotation> -\def\RRfileversion{2.0}% -\def\RRfiledate{2014/01/20}% +\def\RRfileversion{3.0}% +\def\RRfiledate{2015/09/25}% \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). +% {\noindent}The package requires \texttt{rubikcube.sty}. However \texttt{rubikcube.sty} +% is not automatically loaded (for the moment at least) since this makes it difficult +% to errorcheck new versions. % \begin{macrocode} \@ifpackageloaded{rubikcube}{}{% \typeout{---rubikrotation requires the rubikcube package.}% @@ -678,23 +995,34 @@ % % % {\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. +% for the \cmd{\VerbatimInput\{\}} command which we use for inputting and displaying +% the error file (see Section~\ref{sec:showrubikerrors}). % \begin{macrocode} \@ifpackageloaded{fancyvrb}{}{% \typeout{---rubikrotation requires the fancyvrb package% for VerbatimInput{} command.}% \RequirePackage{fancyvrb}} % \end{macrocode} -% \medskip % +% \medskip % -%\subsection{Some useful commands} -% \label{sec:usefulcommands} +% \subsection{Some useful commands} +% \label{sec:usefulcommands} +% % \begin{macro}{\rubikrotation} % First we create a suitable logo % \begin{macrocode} -\newcommand{\rubikrotation}{\textsf{rubikrotation}} +\newcommand{\rubikrotation}{\textsc{rubikrotation}} +\newcommand{\Rubikrotation}{\textsc{Rubikrotation}} +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\@print} +% We need a simple print command to facilitate writing output to a file. +% \begin{macrocode} +\newcommand{\@print}[1]{\immediate\write\outfile{#1}} % \end{macrocode} % \end{macro} % @@ -702,11 +1030,17 @@ % % \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/) +% We also require access to the `\%' character so we can (a)~write comments to +% files, including the log file, and (b)~place a trailing `\%' in a line of code +% written to a file. +% +% To achieve this we define the `\%' character as \cmd{\rubikpercentchar} +% (modified from: Abrahams PW, Berry K and Hargreaves KA (1990), p~292) +% [see refs Section~\ref{sec:references}]\label{sec:abrahams}, +% and also two `comment' commands which implement it. This `workaround' +% is necessary because \TeX\ does not allow the use of the \cmd{\%} command +% for placing a `\%' character in the token list of \cmd{\write}. +% See Abrahams \textit{et.~al} (1990) for details. % \begin{macrocode} {\catcode`\%=12 \global\def\rubikpercentchar{%}}% \newcommand{\@comment}{\rubikpercentchar\rubikpercentchar\space}% @@ -716,39 +1050,50 @@ % \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. +% This holds the name of the Perl script. A configuration-file +% (\verb!rubikrotation.cfg!) can be used to change the default name of the +% Perl script using a renewcommand (see Section~\ref{sec:configfile}). % \begin{macrocode} -\newcommand{\rubikperlname}{rubikrotation.pl} +\newcommand{\rubikperlname}{rubikrotation} % \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. +% This holds the command-line code for calling the Perl script +% (assumed to be an executable file). +% Note that the command-line requires a mandatory input filename preceded +% by the \texttt{-i}~switch. An optional output filename (preceded by the +% \texttt{-o}~switch) may be used, otherwise the default output filename of +% \texttt{rubik-OUT.dat} will be used. +% +% Note that it is very important that this .sty file actually specifies an +% output filename (for receiving data from the Perl script). This is because +% (a)~The Perl script \texttt{rubikrotation.pl} is currently configured to read its +% output filename as an argument from the command-line (so it can be flexibly +% used as a stand-alone script for processing a given Rubik state through a +% sequence of rotations), and (b)~\texttt{rubikrotation.sty} is currently +% configured to read its input from the file \texttt{rubikstateNEW.dat}. % \begin{macrocode} -\newcommand{\rubikperlcmd}{perl \rubikperlname} +\newcommand{\rubikperlcmd}{\rubikperlname\space% + -i rubikstate.dat -o rubikstateNEW.dat} % \end{macrocode} +% Remember to use the \cmd{\space} command following the \LaTeX\ backslash +% command in order to generate the mandatory space between it and the first +% command-line argument). +% +% A plain-text configuration-file \verb!rubikrotation.cfg! can be used to +% change the default command-line code using a renewcommand +% (see Section~\ref{sec:configfile}). % \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} +% \subsection{Configuration file} +% +% If a configuration file exists (\texttt{rubikrotation.cfg}) then input it here, +% i.e.,~\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)...} @@ -761,71 +1106,61 @@ % % \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). +% {\noindent}We need to clean out any existing (old) rubikstateNEW.dat file, +% since if the TeX shell command-line switch is accidentally not used then the Perl script +% \texttt{rubikrotation.pl} will not be CALLed, and hence this file will not be renewed +% (i.e.,~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)}% +\@print{\@comment rubikstateNEW.dat}% \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 +% {\noindent}We first open the file \texttt{rubikstateERRORS.dat} which is used +% by the Perl script \texttt{rubikrotation.pl} for writing its error-messages to. +% This file is 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 +% \textsc{important note}: this file is created fresh each time LaTeX is run, +% and hence the Perl script only appends data to it during the \LaTeX\ run, +% so this file just grows until either it is destroyed or recreated---this is +% a useful feature since the file accumulates all error messages as the +% \texttt{.tex} file is processed. +% We can't make the Perl script create the file since the Perl script 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. +% command (which we may not\,!)---so it has to be created here. % \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}}% +\@print{\@comment ---(RR.sty v\RRfileversion): comments output by Perl script}% \immediate\closeout\outfile% % \end{macrocode} % % -% \subsection{Setting up a newwrite and file-access for new files} +% \subsection{Setting up 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 +% all subsequent file openings (e.g.,~for \texttt{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). +% can easily exceed the LaTeX limit of 15. From here-on \TeX\ will use +% \texttt{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...}% +\typeout{---setting up newwrite for rubikrotation.sty to use...}% \newwrite\outfile% % \end{macrocode} % % % \begin{macro}{\@openstatefile} % \begin{macro}{\@closestatefile} -% We also need commands for easy file opening and and closing +% We also need commands for easy file opening 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. @@ -840,12 +1175,19 @@ % \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 +% This internal command writes the Rubik configuration to +% the file \texttt{rubikstate.dat}, and is used by the \cmd{\RubikRotation} command +% (see Sections~\ref{saverubikstate} and \ref{generaloverview}). +% The file \texttt{rubikstate.dat} is read by the Perl script, 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. +% in order to trigger the Perl script to implement its \texttt{checkstate} subroutine. +% +% The actual state is simply an ordered sequence of the faces and the colours +% associated with each facelet of that face. The colour associated with a particular facelet +% is held by the variable for that facelet. For example, the top-left facelet associated with +% the \textsc{front} face is held in the variable \cmd{\Flt} (see Section~\ref{saverubikstate}). +% Further relevant documentation is in the \textsc{rubikcube} package. % \begin{macrocode} \newcommand{\@printrubikstate}{% \@print{up,\Ult,\Umt,\Urt,\Ulm,\Umm,\Urm,\Ulb,\Umb,\Urb}% @@ -860,43 +1202,123 @@ % \end{macro} % % +% \subsection{SaveRubikState command} +% \label{sec:eijkhout} +% +% \begin{macro}{\SaveRubikState} +% The command \cmd{\SaveRubikState}\marg{filename} saves the Rubik state +% to a named file in the format of a Rubik command (so it can then be processed +% by \LaTeX). Note that in order to actually write a LaTeX +% command to a file without a trailing space one must prefix the command with the +% \cmd{\string} command (see Eijkhout (1992), p~238) +% [see refs Section~\ref{sec:references}]\label{sec:eijkhout}. +% +% Note that this macro uses the internal commands \cmd{\@comment} (`\%\%'), +% \cmd{\@commentone} (`\%') and \cmd{\@print}. \#1 is the output filename. +% We use several \cmd{\typeout} commands to write to the log file. +% An example of the line of code we are trying to output to the +%\texttt{rubikstateNEW.dat} file is as follows: +% {\newline}\verb!\RubikFaceUp{W}{W}{G}{W}{W}{G}{B}{B}{Y}%! +% \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} +% +% % \subsection{RubikRotation command} +% \label{sec:rubikrotationcode} % % \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. +% The \cmd{\RubikRotation}\oarg{integer}\marg{comma separated sequence} +% command (a)~writes the current Rubik state to the file \texttt{rubikstate.dat}, +% (b)~writes the rotation sequence (either once or multiple times depending +% on the value of the optional integer argument), and then (c)~CALLs the +% Perl script \texttt{rubikrotation.pl}. It~also writes comments to the +% data file and also to the log file. +% +% In order to allow the user to (optionally) write the main argument multiple +% times to the output data-file, we require this command to allow an optional +% argument (a non-negative integer) to specify the number of such repeats. +% In order to implement an optional argument facility we use two macros +% (countingloop and loopcounter) detailed by Feuers\"{a}nger (2015) +% [\,see refs Section~\ref{sec:references}\,]\label{sec:feuersanger}, +% as follows: % \begin{macrocode} -\newcommand{\RubikRotation}[1]{\IfFileExists{\rubikperlname}{% +%% Two macros detailed by Feuersaenger (2015) +\long\def\@countingloop#1 in #2:#3#4{% + #1=#2 % + \@loopcounter{#1}{#3}{#4}% +} +%%-------------------------- +\long\def\@loopcounter#1#2#3{% + #3% + \ifnum#1=#2 % + \let\next=\relax% + \else + \advance#1 by1 % + \def\next{\@loopcounter{#1}{#2}{#3}}% + \fi + \next +} +% \end{macrocode} +% Having defined the above two macros we can now implement an optional +% argument (a repeat number) indicating the number of times we want +% the command to write the main argument to the output data file. +% \begin{macrocode} +\newcommand{\RubikRotation}[2][1]{% \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}% + \@print{\@comment written by rubikrotation.sty% + =v\RRfileversion\space (\RRfiledate)}% \@printrubikstate% - \@print{rotation,#1}% +%% countingloop code from Feuersaenger (2015) + \newcount\ourRRcounter% + \@countingloop{\ourRRcounter} in 1:{#1}{% + \immediate\write\outfile{rotation,#2}}% \@closestatefile% close data file - \typeout{---running Perl script}% + \typeout{---running Perl script (rubikrotation)}% \immediate\write18{\rubikperlcmd}% - \typeout{---inputting NEW datafile (from Perl)}% + \typeout{---inputting NEW datafile (written by Perl script)}% \input{rubikstateNEW.dat}% \typeout{-----------------------------------------}% - }{\typeout{** ERROR: \rubikperlname\space does not exist}% -}} + } % \end{macrocode} % \end{macro} % % % \subsection{ShowRubikErrors command} +% \label{sec:showrubikerrors} % % \begin{macro}{\ShowRubikErrors} % This command inputs the file \texttt{rubikstateERRORS.dat}. % \begin{macrocode} \newcommand{\ShowRubikErrors}{% \typeout{---ShowRubikErrors: inputting file rubikstateERRORS.dat}% - \VerbatimInput{rubikstateERRORS.dat}} + \VerbatimInput{rubikstateERRORS.dat}% + } % \end{macrocode} % \end{macro} % @@ -904,69 +1326,30 @@ % \subsection{CheckRubikState command} % % \begin{macro}{\CheckRubikState} -% This command triggers the Perl program to implement +% This command triggers the Perl script 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. +% \texttt{rubikstate.dat}, and then (b)~CALLs the Perl script. % It also writes comments to the data file and also to the log file.. % \begin{macrocode} -\newcommand{\CheckRubikState}{\IfFileExists{\rubikperlname}{% +\newcommand{\CheckRubikState}{% \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}% + \typeout{---running Perl script (rubikrotation)}% \immediate\write18{\rubikperlcmd}% - \typeout{---inputting NEW datafile (from Perl)}% + \typeout{---inputting NEW datafile (written by Perl script)}% \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 % -------------------------- diff --git a/Master/texmf-dist/source/latex/rubik/rubikrotation.ins b/Master/texmf-dist/source/latex/rubik/rubikrotation.ins index 3f1f2f1f354..99384f15aa4 100644 --- a/Master/texmf-dist/source/latex/rubik/rubikrotation.ins +++ b/Master/texmf-dist/source/latex/rubik/rubikrotation.ins @@ -1,9 +1,14 @@ %% rubikrotation.ins +%% +%% version 3.0 +%% %% --- 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 +%% and +%% Apostolos Syropoulos (asyropoulos@yahoo.com) +%% +%% Copyright 25 September 2015 RWD Nickalls + A Syropoulos %% %% %% This work may be distributed and/or modified under the @@ -27,7 +32,8 @@ ----------------------------------------------------------------- Authors: RWD Nickalls (dick@nickalls.org) and Apostolos Syropoulos (asyropoulos@yahoo.com) - Copyright January 2014 RWD Nickalls and A Syropoulos + + Copyright 25 September 2015 RWD Nickalls and A Syropoulos This work may be distributed and/or modified under the |