summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/rubik
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/rubik')
-rwxr-xr-xMaster/texmf-dist/source/latex/rubik/example-rot1.bat2
-rwxr-xr-xMaster/texmf-dist/source/latex/rubik/example-rot2.bat1
-rwxr-xr-xMaster/texmf-dist/source/latex/rubik/examples.bat4
-rw-r--r--Master/texmf-dist/source/latex/rubik/rubikcube.dtx3675
-rw-r--r--Master/texmf-dist/source/latex/rubik/rubikcube.ins39
-rw-r--r--Master/texmf-dist/source/latex/rubik/rubikrotation.dtx1177
-rw-r--r--Master/texmf-dist/source/latex/rubik/rubikrotation.ins12
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