summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/rubik/rubikcube.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/rubik/rubikcube.dtx
Initial commit
Diffstat (limited to 'macros/latex/contrib/rubik/rubikcube.dtx')
-rw-r--r--macros/latex/contrib/rubik/rubikcube.dtx10529
1 files changed, 10529 insertions, 0 deletions
diff --git a/macros/latex/contrib/rubik/rubikcube.dtx b/macros/latex/contrib/rubik/rubikcube.dtx
new file mode 100644
index 0000000000..c9812ed4ba
--- /dev/null
+++ b/macros/latex/contrib/rubik/rubikcube.dtx
@@ -0,0 +1,10529 @@
+% \iffalse meta-comment
+% rubikcube.dtx
+%
+% version v5.0 (February 25, 2018)
+%
+% Copyright 2018
+% RWD Nickalls (dick@nickalls.org) and
+% A Syropoulos (asyropoulos@yahoo.com)
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+%
+% This work consists of the files rubikcube.dtx and rubikcube.ins
+% and the derived file rubikcube.sty.
+%
+%<*readme>
+%
+% The rubikcube package provides a collection of LaTeX commands and macros
+% for the typesetting of Rubik cube configurations and rotation
+% sequences using the TikZ graphic language.
+%
+% Please report errors or suggestions for improvement to
+%
+% Dick Nickalls or Apostolos Syropoulos
+%
+% This package requires the basic TikZ package to be loaded already
+%</readme>
+%
+%<*driver>
+\listfiles
+\documentclass{ltxdoc}
+\IfFileExists{rubikcube.sty}{\usepackage{rubikcube}}{%
+ \GenericWarning{rubikcube.dtx}{Package file rubikcube.sty not found.
+ Documentation will be messed up!^^J
+ (Generate rubikcube.sty by (La)TeXing rubikcube.ins, and then^^J
+ process rubikcube.dtx again)^^J}\stop
+}%
+\pagestyle{myheadings}
+\markright{\texttt{rubikcube} \ \ (Rubik bundle v5.0, 2018) \ \ \texttt{www.ctan.org/pkg/rubik}}
+\usepackage{ifpdf}
+\usepackage{url,path} %% for references
+\usepackage{supertabular} %% for Notation table
+\usepackage{hypdoc} %% for hyperref documenting of LaTeX packages
+%%\OnlyDescription
+\EnableCrossrefs
+\PageIndex
+\CodelineIndex
+\CodelineNumbered
+\RecordChanges
+\setcounter{StandardModuleDepth}{1}
+\begin{document}
+ \DocInput{rubikcube.dtx}
+ \PrintChanges
+ \PrintIndex
+\end{document}
+%</driver>
+% \fi
+%
+%
+%
+%%% \CheckSum{6231}
+%
+%%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%
+%
+% \title{%
+% \ifpdf\pdfbookmark[1]{Title}{Title}\else\fi%
+% The \textsc{rubikcube} package}
+%
+% \author{
+% RWD Nickalls (dick@nickalls.org) \\
+% A Syropoulos (asyropoulos@yahoo.com)
+% }
+% \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. It is part of the
+% Rubik `bundle'.
+% \end{abstract}
+%
+% \medskip
+%
+% \begin{minipage}{11cm}
+% \centering
+% \ifpdf
+% \includegraphics[width=10cm]{rubik-doc-figF.pdf}
+% \else
+% \fi
+% \end{minipage}
+%
+% \tableofcontents
+%
+% \pagebreak
+%
+% \section{Introduction}
+%
+% The \rubikcube\ package (part of the \textsc{rubik} `bundle') provides a
+% collection of \LaTeX\ commands
+% and macros for typesetting Rubik cube (3x3x3) configurations using the
+% PGF/TikZ graphic languages.
+% We have extended the rotation hieroglyph notation, originally
+% developed by Garfath-Cox (1981), and improved by Duvoid (2010, 2011).
+%
+% The \rubikcube\ package is the `base' package of the bundle, and is required by all of
+% the Rubik packages; it deals primarily with typesetting 3x3x3 cube (Rubik cube)
+% configurations.
+% The \textsc{rubikrotation} package processes rotation sequences and keeps track of
+% the cube's configuration during rotations.
+% The \textsc{rubikpatterns} package is a small database of 3x3x3 (Rubik) cube rotation
+% sequences which generate well-known named cube configurations (patterns).
+% The \textsc{rubiktwocube} package allows the typesetting of 2x2x2 cube (Two cube)
+% configurations.
+%
+% Full 3x3x3 functionality requires the following packages to be loaded
+% (TikZ first; \textsc{rubikcube} second), as follows:
+%\begin{verbatim}
+% \usepackage{tikz}
+% \usepackage{rubikcube,rubikrotation,rubikpatterns}
+%\end{verbatim}
+% Full 2x2x2 functionality requires the \textsc{rubiktwocube} package \textit{in addition} to the
+% packages listed above.
+% Note that the \verb!TikZ! package must be loaded \textit{before} the \textsc{rubikcube}
+% package.
+%
+% The \rubikcube\ package has been road-tested on a Microsoft
+% platform (with \textsf{MiK}\TeX), a GNU-Linux platform (Debian 8.2.0
+% and {\TeX}Live 2017), and on a Solaris platform (OpenIndiana).
+%
+%
+% For the mathematics and group theory associated with the Rubik cube see Chen~(2004),
+% Davis (2006), Fung website, Golomb~(1981, 1982), Hofstadter (1981), Hutchings~(2011),
+% Heise website, Joyner~(2008), Kociemba website,
+% Rokicki~\textit{et al.} (2013), Scherphius website, Tran~(2005).
+% Other useful websites are the Speedsolving website, and those
+% maintained by Duvoid, by Fridrich, by Jelinek, by Reid, and by Vandenburgh.
+% A useful online solver utility (based on an algorithm by Kociemba) is
+% available at the RuWix website. Websites with good pages on patterns and symmetries are
+% those by Fridrich, Kociemba, Longridge, Reid, Randelshofer, Scherphius
+% (see References for details).
+%
+% For historical and technical details regarding Rubik's cube see Sher (2014),
+% and also the Wikipedia article \textit{Rubik's Cube}.
+%
+%
+% \subsection{Requirements}
+%
+% The \rubikcube\ package requires the TikZ package, since it makes
+% use of the TikZ picture environment and the \cmd{\pgfmathsetmacro} command.
+% Consequently, the \verb!TikZ! package must be loaded \textit{before}
+% the \textsc{rubikcube} package.
+% The \textsc{rubikrotation} package (see below)
+% requires Perl to be installed.
+%
+%
+% \subsection[rubikrotation package]{Supporting tool---the
+% \textsc{rubikrotation} package}
+% \label{sec:rubikrotation}
+%
+% The \textsc{rubikrotation} package (also part of the \textsc{rubik} `bundle'),
+% is a dynamic extension to the \rubikcube\ package. It consists of the
+% Perl program \texttt{rubikrotation.pl} and the associated style option
+% \texttt{rubikrotation.sty}.
+% The \textsc{rubikrotation} package implements rotation sequences on-the-fly using a
+% \cmd{\RubikRotation}\marg{rotation-sequence} command. It returns the
+% new state in a form which can then be used by the \rubikcube\ package.
+% It also returns some useful strings associated with the rotation sequence
+% which can be used by the \rubikcube\
+% package---see also Section~\ref{sec:showsequence}.
+%
+% Since the \cmd{\RubikRotation} command works by \textsc{call}ing the
+% \texttt{rubikrotation.pl} program, it follows that the \textsc{rubikrotation}
+% package requires (a)~Perl to be installed,
+% and (b)~the \LaTeX\ engine needs to be run using the \texttt{--shell-escape}
+% command-line option. Those wishing to use Lua\LaTeX\ will also need to have access
+% to the \texttt{shellesc} package (this can always be downloaded from CTAN directly).
+% See the \textsc{rubikrotation} documentation for further details.
+% See also the examples in the file \texttt{RubikExamples.pdf}.
+%
+%
+%
+% \subsection[rubikpatterns]{Supporting database---\textsc{rubikpatterns} package }
+% \label{sec:patterns}
+%
+%
+% The \textsc{rubikpatterns.sty} file (also part of the \textsc{rubik} `bundle')
+% is a small database of some well-known 3x3x3 cube (Rubik cube) rotation sequences,
+% stored as named macros. For~example, the `fourspot' and `sixspot' sequences are encoded in
+% this package as follows:
+%\begin{verbatim}
+% \newcommand{\fourspot}{[fourspot],F2,B2,U,Dp,R2,L2,U,Dp,<(12q*, 8f*)>}
+% \newcommand{\sixspot}{[sixspot],U,Dp,R,Lp,F,Bp,U,Dp,<(8q*, 8f*)>}
+%\end{verbatim}
+% These sequences can be processed by name (using the \cmd{\RubikRotation} command
+% which also requires Perl to be installed---see Section~\ref{sec:rubikrotation}), and
+% then displayed (using the \cmd{\ShowCube} command in conjunction with various
+% \cmd{\DrawRubikCube...} commands). So, for~example, one could typeset the so-called
+% `fourspot' configuration using the following code:
+%\begin{verbatim}
+% \usepackage{tikz,rubikcube,rubikrotation,rubikpatterns}
+% ...
+% \RubikCubeSolved
+% \RubikRotation{\fourspot} % this runs the Perl program \texttt{rubikrotation.pl}
+% \ShowCube{2.4cm}{0.6}{\DrawRubikCubeRU}
+%\end{verbatim}
+% The sequence itself can be readily typeset using the \cmd{\ShowSequence} command
+% (see Section~\ref{sec:showsequence}).
+% See also the \textsc{rubikrotation} documentation---especially
+% Section~5.1.1 \textit{Sequences as macros}.
+% See also the examples in the file \texttt{RubikExamples.pdf}.
+%
+%
+%
+% \subsection[rubiktwocube]{Supporting 2x2x2 package---\textsc{rubiktwocube} package }
+% \label{sec:patterns}
+%
+% The \textsc{rubiktwocube} package carries the macros and commands necessary
+% for processing and displaying 2x2x2 cubes (TwoCubes). The 2x2x2 commands are isomorphic
+% with the 3x3x3 commands---i.e.,~the word `\texttt{Two}' has replaced the
+% word `\texttt{Rubik}' in commands.
+% Consequently, users of this package will need to be familiar with the \textsc{rubikcube} package.
+% There are lots of 2x2x2 examples in the file \texttt{RubikExamples.pdf}.
+%
+%
+% \subsection{Copyright}
+% Copyright 2014--2018 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
+% |www.latex-project.org/lppl.txt|
+%
+%
+% \section{Installation}
+%
+% The Rubik bundle consists of the four packages \rubikcube, \textsc{rubikrotation},
+% \textsc{rubikpatterns} and \textsc{rubiktwocube}. Although installing the Rubik bundle
+% will typically install everything automatically (eg.,~from the {\TeX}Live DVD),
+% each package can be installed separately if necessary.
+% Here we detail only the \rubikcube\ package.
+%
+% \subsection{Generating the \rubikcube\ files}
+%
+% Place the file \texttt{rubikcube.zip} into a temporary directory, and unzip it.
+% This will generate the following files:
+%\begin{verbatim}
+% rubikcube.ins
+% rubikcube.dtx
+% rubikcube.pdf --documentation of the rubikcube package
+% rubik-doc-figA.pdf
+% rubik-doc-figB.pdf
+% rubik-doc-figC.pdf
+% rubik-doc-figD.pdf
+% rubik-doc-figE.pdf
+% rubik-doc-figF.pdf
+% rubikexamples.tex
+% rubikexamples.pdf
+% rubikexamples.sh
+% rubikexamples.bat
+%\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}
+% This documentation file (\texttt{rubikcube.pdf}) can then be generated using the following
+% steps\,\footnote{Several pdflatex runs are required, since the documentation includes
+% an index as well as hyperef links (the package \texttt{hypdoc}
+% is used). 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}
+%
+%
+% \subsection{RubikExamples file}
+%
+% Note that the package includes a `rubikexamples' file (\texttt{rubikexamples.pdf}),
+% as well as the source file (\texttt{rubikexamples.tex}), and
+% associated \texttt{.sh} (Linux) and \texttt{.bat} (Microsoft) batch
+% files, which can be used to facilitate processing the source \texttt{.tex} file.
+% The file \texttt{rubikexamples.pdf} showcases both 3x3x3 (Rubik cube)
+% and 2x2x2 (Two cube) examples.
+%
+% Note that should you need to generate the file \texttt{rubikexamples.pdf}
+% from the source file (\texttt{rubikexamples.tex}) you will require
+% the \textsc{rubikrotation}, \textsc{rubikpatterns} and
+% \textsc{rubiktwocube} packages to be installed,
+% and will also need to use the \verb!--shell-escape! command-line
+% option (see Section~\ref{sec:rubikrotation} for details).
+%
+%
+% \subsection{Placing the files}
+%
+% Place the files either in the local working directory, or where your system
+% will find them. For a Linux system with a standard \TeX\ Directory Structure (TDS), then:
+%
+%\medskip
+%{\noindent}*.sty $\rightarrow$
+% \texttt{/usr/local/texlive/texmf-local/tex/latex/rubik/}
+%{\newline}*.pdf $\rightarrow$ \texttt{/usr/local/texlive/texmf-local/doc/rubik/}
+%
+% \medskip
+% {\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}
+%
+% Load the package by using the command \cmd{\usepackage\{rubikcube\}}.
+% Note that the \rubikcube\ package requires the TikZ package, and so always load TikZ
+% before \rubikcube\ as follows:
+% \begin{quote}
+%\begin{verbatim}
+% \usepackage{tikz}
+% \usepackage{rubikcube,rubikrotation,rubikpatterns,rubiktwocube}
+%\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, for full 3x3x3 functionality it is necessary
+% to load the complementary packages \textsc{rubikrotation}, \textsc{rubikpatterns}.
+% For full 2x2x2 functionality you need to load all four packages.
+%
+%
+% \pagebreak
+%
+% \section{Command conventions}
+% \label{sec:conventions}
+%
+
+%
+% All \rubikcube\ package commands assume a 3x3x3 cube by default.
+% Since all cubes are displayed or `drawn' using the TikZ picture environment,
+% it is useful (initially at least) to categorise commands with regard to this environment
+% (and also with regard to the \cmd{\ShowCube..} command since this
+% is simply a convenient wrapper for the TikZ picture environment).
+% On~this basis, we can distingush three conceptually useful categories, as follows:
+%
+% \begin{enumerate}
+%
+% \item \cmd{\Draw..} commands
+% (which must \textit{always} be used \textit{inside} a TikZ picture environment),
+%
+% \item `parameter-allocation' commands (which can be used either inside
+% or outside a TikZ environment); for example, \cmd{\RubikFace..} (for allocating
+% facelet colours), and
+%
+% \item commands which can be used in ordinary text; for example, |\rr{}| (for typesetting
+% certain rotation codes).
+%
+% \end{enumerate}
+% From a functional point of view, however, we can view the Rubik bundle commands as
+% splitting into the following groups:
+% \begin{enumerate}
+%
+% \item those that allocate colour
+% to faces, facelets etc., ---these commands all start with \cmd{\Rubik} (for 3x3x3 cubes) or \cmd{\Two}
+% (for 2x2x2 cubes \footnote{Requires the \textsc{rubiktwocube} package}),
+%
+% \item those that % draw ---these commands all start with \cmd{\Draw},
+%
+% \item those that typeset rotation codes or hieroglyphs;
+% ---there are just four of these for 3x3x3 cubes (these commands
+% start with \cmd{\rr}, \cmd{\rrh}, \cmd{\Rubik},
+% and \cmd{\textRubik}), and an equivalent four commands for 2x2x2 cubes
+% (these start with \cmd{\tr}, \cmd{\trh}, \cmd{\Two}, and \cmd{\textTwo}).
+%
+% \end{enumerate}
+
+% \medskip
+%
+% \DescribeMacro{\rubikcube}
+% {\noindent}This command generates the logo \rubikcube.
+%
+%
+%
+% \subsection[Keywords Rubik and Two]{The keywords Rubik and Two in commands}
+% \label{sec:rubikandtwo}
+%
+% In order to try and keep commands intuitive\,\footnote{This is a tricky problem
+% given the large number of commands, so any feedback or ideas on how to avoid ambiguity,
+% including pruning or revising `bad' commands, is always welcome.}
+% we adopt the convention that
+% the word `Rubik' in a command reflects the fact that the command
+% relates to a 3x3x3 cube (i.e.,~a `Rubik' cube). Similarly, commands which relate
+% to a 2x2x2 cube (a `Two' cube) ---see the \textsc{rubiktwocube} package---
+% use instead the word `Two'.
+% For~example, the commands for drawing a 3x3x3 cube and a 2x2x2 cube from a RU viewpoint
+% are respectively \cmd{\DrawRubikCubeRU} and \cmd{\DrawTwoCubeRU}.
+%
+% Having packages now for both 3x3x3 and 2x2x2 cubes (v5) means we need to be more careful regarding
+% command names, and try to make commands (a)~as intuitive as possible, and (b)~use the
+% same command name format for equivalent 3x3x3 and 2x2x2 commands (as shown in the example above).
+%
+% In keeping with this approach, some commands have had to be renamed.
+% For~example, in this new version we have therefore renamed the
+% earlier \cmd{\DrawFace..} commands $\rightarrow$ \cmd{\DrawRubikFace..}
+% (see Section~\ref{sec:deprecated}).
+%
+%
+% \subsection{Environments}
+%
+% Although the \rubikcube\ package has been designed with TikZ in mind,
+% it is important to appreciate that of all the various \rubikcube\ package
+% commands only the Rubik \cmd{\Draw...} commands and TikZ commands actually
+% have to be used inside a TikZ picture environment.
+%
+% Indeed, using \rubikcube\ package 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 accessible
+% 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 sequences of rotations across several figures; for~example, keeping commands like
+% \cmd{\RubikRotation}, \cmd{\RubikFace..}, \cmd{\RubikCubeSolved},
+% outside the environments keeps their effects global
+% (an example of this problem is presented in the file \texttt{RubikExamples.pdf}).
+%
+%
+% \subsection{Capital letters}
+%
+% Virtually all Rubik bundle commands start with a capital letter, primarily to
+% avoid any confusion with TikZ commands (these generally start with lower-case letters). However,
+% each `word' in a Rubik bundle command (except the word `text') also starts
+% with a capital letter, primarily to facilitate readability.
+% For~example, \cmd{\DrawRubikCubeRU}, \cmd{\DrawCubieRU}.
+% However, as with \LaTeX, `text..' commands start with a lower-case `t';
+% for~example \cmd{\textCubieRU}. Letter arguments for colours (R, O, Y, G, B, W, X) are
+% always written in upper-case letters.
+%
+%
+%
+% \subsection{XYZ argument ordering}
+% \label{sec:xyzarguments}
+%
+% Many commands have an appended two, three, or even six ordered arguments or letters
+% which form some feature of the structure of a command; perhaps
+% either face or colour code or a viewpoint direction.
+%
+% We adopt the convention that where ordering of arguments is critical, then the
+% arguments are ordered in the XYZ, $+$, $-$ order. An XYZ code implies that
+% the first letter in the code relates to an X-related parameter,
+% for~example, L (Left) or R (Right); the second letter 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)
+% ---see Figure~\ref{fig:notation}.
+%
+% Some commands have six arguments which adopt an (XYZ;$+$$-$) format. In this case,
+% for~example, the \cmd{\RubikSolvedConfig} command, for which the six colour arguments
+% are ordered as X$+$, X$-$, Y$+$, Y$-$, Z$+$, Z$-$. Here the colour argument
+% associated with a face positioned on the $+$ve axis is ordered before
+% its $-$ve complement on the same axis.
+%
+% Another example is the |\DrawCubieRU{G}{Y}{O}| command, which draws a cubie. Here
+% the RU letters are XY ordered; i.e.,~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 the end of commands}
+% \label{sec:trailingpercent}
+%
+% Since the all the output of this package is drawn using graphic elements
+% using TikZ, it is important to include a trailing \% on the end
+% of \rubikcube\ package commands when used \textit{outside} a TikZ picture environment, and
+% also on the end of the \cmd{\end\{tikzpicture\}} environment command itself.
+% In particular it is important to use a trailing \% on
+% the end of lines which break before the terminal curly bracket of a \cmd{\newcommand}.
+%
+% This is to prevent accumulating spurious spaces which may otherwise appear in
+% figures and diagrams as a strange or unexpected horizontal shift or white-space.
+% That this can occur is because in \TeX\ every newline character is automatically converted
+% to a white space---unless you have an empty line
+% (Feuers\"{a}nger 2016).
+%
+% The \LaTeX\ fbox is a useful aid for visualising unwanted white space
+% which may have accumulated, and for identifying the cause.
+% See Section~\ref{sec:showcube} on the \cmd{\ShowCubeF} command for
+% more details regarding this approach.
+%
+% Although this effect is mostly small, and is generally only observed in situations
+% when centering a graphic is critical, it is, however, cumulative and can be surprisingly large.
+% In these situations, the cure is the addition of terminal \% characters to preceding
+% code guided by careful detective use of the fbox technique mentioned above.
+%
+%
+% \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{Rubik cube coordinates}
+% \label{sec:coordinates}
+%
+% The coordinate origin of all 2D cube images 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
+% extent of this particular 2D rendering of the 3x3x3 cube is actually
+% at $(-1,-1)$, and hence the default height and width of all oblique-view
+% cubes is 4~units (i.e.,~equivalent to 4cm if the TikZ scale-factor = 1).
+%
+% \begin{figure}[hbt]
+% \centering
+% \ifpdf
+% \includegraphics[height=4cm]{rubik-doc-figB.pdf}
+% \else
+% \includegraphics[height=4cm]{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.
+% Since $P$ is at $(-1,-1)$ then the default height and width of the
+% 2D~cube image is 4~units.}}
+% \end{figure}
+%
+% Arranging for $P$ to be at $(-1,-1)$, as well as using the bottom-left corner
+% of the \textsc{front} face as the origin, is a useful design
+% feature which make it easy to figure-out the coordinates of any point on
+% the image plane (either on the cube or outside the cube), and hence
+% facilitates the use of 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}).
+%
+%
+% \subsection[Size of cube minipage]{Size of cube \cmd{\minipage}}
+% \label{sec:sizeofminipage}
+%
+% Since the the default height and width of the oblique 2D~cube image is
+% 4~units (see Section~\ref{sec:coordinates} 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}$.
+%
+% Note that the width of the semi-flat (SF) cube representation is therefore
+% 10~units ($=3+3+1+3$), and that of the flat (F) cube is 12~units ($=3+3+3+3$)
+% --- see Section~\ref{sec:flatcommands} for images of these forms.
+% If in doubt check the horizontal extent of an image using the \cmd{\ShowCubeF} command,
+% which places an fbox around the image.
+%
+%
+%
+% \section{TikZ picture environment}
+% \label{sec:tikz}
+%
+% All the Rubik bundle \cmd{\Draw..} commands are designed to be used
+% with the TikZ picture environment, and are compatible with standard 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{https://en.wikipedia.org/wiki/PGF/TikZ}
+% \item \texttt{pgfmanual.pdf}, version 3.0.1a (2015) (1161 pages)
+% \item \texttt{pgfplot.pdf}, version 1.14 (2016) (561 pages)
+% \item \texttt{tkz-base-screen.pdf}, version 1.16c (2011) (91 pages)
+% \end{itemize}
+% An example of the TikZ picture environment for use with the Rubik bundle
+% is as follows:
+% \begin{quote}
+%\begin{verbatim}
+% \begin{tikzpicture}[scale=0.5]
+% ...
+% \end{tikzpicture}%
+%\end{verbatim}
+% \end{quote}
+% If no scale-factor is used (default scale-factor = 1), then each of the small
+% cubie sides will have a length of 1~cm.
+%
+% \textsc{useful commands}:\ Probably the most
+% useful TikZ commands for use with regard
+% to the Rubik bundle are the \cmd{\draw} command (for drawing lines, arrows, circles),
+% and the \cmd{\node} command (for writing text at specific coordinate locations).
+% The basic structure of these commands is as~follows, where
+% (x,y) represent grid coordinates of start or end points of lines or arrows,
+% or of a circle centre, or of text position
+% (see Sections~\ref{sec:drawrubikcubecommands} and \ref{sec:arrows} for examples).
+% \begin{quote}
+% \begin{verbatim}
+% \draw[->,thick,color=blue] (4.5, 2.5) -- (3.5,2.5);
+% \draw[->,ultra thick,color=red] (4.5, 2.5) -- (3.5,2.5);
+% \draw [color=blue, thick] (0.3, 0.3) circle (1.3);
+% \node (B) at (7.5, 1.5) [black]{\small\textsf{B}};
+%\end{verbatim}
+%\end{quote}
+% Remember that all TikZ commands which are valid inside a \texttt{tikzpicture}
+% environment require a terminal semicolon (see Section~\ref{sec:arrows}
+% for examples).
+%
+% \textsc{colours}: \
+% The following colors are predefined by TikZ: red, green, blue, cyan, magenta,
+% yellow, black, gray, darkgray, lightgray, brown, lime, olive, orange, pink,
+% purple, teal, violet and white (see \texttt{https://en.wikipedia.org/wiki/PGF/TikZ}).
+%
+% \textsc{line width}: \
+% TikZ allows line width to be specified directly
+% (e.g.,~\texttt{[line width=<dimension>]}), or by using the following abbreviations:
+% `ultra thin' for 0.1pt, `very thin' for 0.2pt, `thin' for 0.4pt (the default width),
+% `semi thick' for 0.6pt, `thick' for 0.8pt, `very thick' for 1.2pt,
+% `ultra thick' for 1.6pt (see \texttt{https://en.wikipedia.org/wiki/PGF/TikZ}).
+%
+%% \textsc{white space}: \
+% A particularly useful feature of TikZ is that it automatically
+% minimises any horizontal white-space. However, it is good practice to place
+% a \% symbol after the \verb!\end{tikzpicture}! command
+% to avoid additional white space inadvertently being added by \LaTeX\
+% (see Section~\ref{sec:trailingpercent}).
+%
+% When making images it can be helpful to place them inside a minipage
+% (e.g.,~using the \cmd{\ShowCube} command / environment below).
+% A~convenient approach is to first adjust the value of the tikzpicture scale-factor
+% (to obtain the appropriate size), and then adjust the minipage-width as necessary, using
+% the fbox associated with the \cmd{\ShowCubeF} command
+% (see Section~\ref{sec:sizeofminipage} for a useful guide on this).
+%
+% The main `display' tool for drawing cubes is the \cmd{\ShowCube} command
+% (see below), and this incorporates a
+% TikZ picture environment inside a minipage. The equivalent tool for
+% displaying rotation sequences is the \cmd{\ShowSequence} command.
+%
+%
+%
+%
+%
+% \section[ShowCube command]{\cmd{\ShowCube} command}
+% \label{sec:showcube}
+%
+%
+% \DescribeMacro{\ShowCube}
+% This command \cmd{\ShowCube}\marg{width}\marg{scale-factor}\marg{commands}
+% is a convenient tool for placing one or more commands inside a
+% tikzpicture environment which is also inside a minipage
+% (see Section~\ref{sec:showcubecode} for the code).
+% This command takes three arguments: the first (\verb!#1!) is the minipage width,
+% the second (\verb!#2!) is the tikzpicture scale factor, and the third (\verb!#3!)
+% is a series of any \rubikcube\ package \cmd{\Draw..} and other commands, as well as
+% any TikZ commands which are valid in a \texttt{tikzpicture} environment
+% (e.g.,~\cmd{\draw} or \cmd{\node} etc.).
+%
+% \medskip
+%
+% \noindent\textsc{usage}:
+% The following \cmd{\ShowCube} command displays a Rubik cube
+% (the `SixT's configuration\footnote{The \cmd{\sixts} macro is from the \textsc{rubikpatterns}
+% package.}) and a blue arrow in a minipage of width~3cm, using a tikzpicture scale
+% factor of~0.5.
+% Note that the TikZ \cmd{\draw} command requires a terminal
+% semicolon (see Section~\ref{sec:tikz}).
+%
+% \medskip
+%
+% {\noindent}%
+% \begin{minipage}{6.6cm}
+%\begin{verbatim}
+% \RubikCubeSolved
+% \RubikRotation{\sixts}
+% \ShowCube{3cm}{0.5}{%
+% \DrawRubikCubeLU
+% \draw[->,thick,color=blue] (4.5, 2.5) -- (3.5,2.5);
+% }
+%\end{verbatim}
+% \end{minipage}
+% \hspace{2.5cm}%
+%\RubikFaceUp{Y}{Y}{W}{W}{W}{W}{Y}{Y}{W}%
+%\RubikFaceDown{Y}{W}{W}{Y}{Y}{Y}{Y}{W}{W}%
+%\RubikFaceLeft{B}{G}{G}{B}{B}{B}{B}{G}{G}%
+%\RubikFaceRight{G}{B}{B}{G}{G}{G}{G}{B}{B}%
+%\RubikFaceFront{O}{O}{O}{R}{O}{R}{R}{O}{R}%
+%\RubikFaceBack{O}{R}{O}{O}{R}{O}{R}{R}{R}%
+% \ShowCube{3cm}{0.5}{%
+% \DrawRubikCubeLU
+% \draw[->,thick,color=blue] (4.5, 2.5) -- (3.5,2.5);
+% }
+%
+% \medskip
+%
+% {\noindent}The action of the \cmd{\ShowCube} command is illustrated below; the
+% \cmd{\ShowCube} command on the left is equivalent to the bunch of commands
+% on the right (see Section~\ref{sec:showcubecode} for the complete code).
+% $$
+% \left.
+% \begin{array}{l}
+% {\ }\\
+% {\ }\\
+% \verb!\ShowCube{3cm}{0.5}{...}!\\
+% {\ }\\
+% {\ }\\
+% \end{array}
+% \right\{
+% \begin{array}{l}
+% \verb!\begin{minipage}{3cm}%!\\
+% \verb!\centering%!\\
+% \verb!\begin{tikzpicture}[scale=0.5]!\\
+% ...\\
+% \verb!\end{tikzpicture}%!\\
+% \verb!\end{minipage}%!\\
+% \end{array}
+% $$
+%
+% \DescribeMacro{\ShowCubeF}
+% The \cmd{\ShowCubeF} command is similar in all respects except that it places
+% an \texttt{fbox} around the minipage in order to enable users to see the extent of any
+% associated white space. For~example, unexpected spacing between two adjacent images,
+% or between an 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 \texttt{fbox} around the minipage can be a
+% useful aid when trying to visualise the full extent of the minipage
+% (and its associated white-space). Use the \cmd{\ShowCubeF} command for this.
+
+% For~example, the following use of the \cmd{\ShowCubeF} command reveals a significant
+% white-space problem:
+%
+% \medskip
+%{\noindent}%
+%\begin{minipage}{6.6cm}
+%\begin{verbatim}
+% \ShowCubeF{4cm}{0.3}{\DrawRubikCubeRU}
+%\end{verbatim}
+%\end{minipage}
+% \RubikCubeSolved
+% \ShowCubeF{4cm}{0.3}{\DrawRubikCubeRU}
+%
+% \medskip
+% {\noindent}In this example, 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 centres the image
+% inside the minipage, \LaTeX\ positions
+% the minipage in the \cmd{\textwidth}, and hence it is generally best to minimise
+% the horizontal 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}.
+%
+%
+%
+% \section{Optimum strategy}
+% \label{sec:optimumstrategy}
+%
+%
+% We suggest that the most convenient (and intuitive) approach for drawing
+% cubes or particular faces is to do it in stages, as follows
+% (all these steps are well illustrated in the examples file
+% \texttt{RubikExamples.pdf}):
+%\begin{itemize}
+% \item first, start by setting the colour state of the cube. This can be done using
+% either (a)~a \cmd{\RubikCubeSolved..} or \cmd{\RubikCubeGrey..} command
+% (for defining the whole cube), or (b)~using one or more \cmd{\RubikFace..}
+% commands (for defining parts of faces), or (c)~by imputting a file containing
+% a previously saved colour state\footnote{See the \textsc{rubikrotation} package documentation
+% for details of the \cmd{\SaveRubikState} command; see also the `SaveRubikState' example in the
+% file \texttt{RubikExamples.pdf}.}.
+%
+% \item second, use the \cmd{\RubikRotation}\ command to process a sequence of rotations
+% (remembering that this requires use of the \verb!--shell-escape! command-line option).
+% The \textsc{rubikpatterns} package is a small library of named rotation sequences.
+%
+% \item third, draw the image(s) using \cmd{\DrawRubikCube..} or
+% \cmd{\DrawRubikFace..} commands, plus any TikZ commands
+% (e.g.,~\cmd{\draw} and/or \cmd{\node}) in conjunction with the \cmd{\ShowCube} command.
+% Use the \cmd{\ShowCube} scale factor to adjust the size, and use the \cmd{\ShowCubeF}
+% command to reveal the extent of any \texttt{minipage} whitespace.
+%
+% \item fourth, spacing between graphic elements can be influenced by adjusting either
+% (a)~horizontal whitespace as set by the \cmd{\ShowCube} command, or (b)~using standard
+% \TeX\ spacing commands, e.g.,~\cmd{\quad}, \cmd{\qquad}, \cmd{\hspace..} etc.
+%
+% \item finally, give some thought to using a trailing \verb!%! in commands which are
+% broken across multiple lines (see Section~\ref{sec:trailingpercent}).
+%
+%\end{itemize}
+% With this approach the internal colour state
+% will be updated and processed correctly by all subsequent
+% \cmd{\Draw..} or \cmd{\RubikRotation}\ commands.
+% Note that exchanging the word `\texttt{Rubik}' for the word `\texttt{Two}' in a command will
+% generate the equivalent TwoCube version of the command (see Section~\ref{sec:rubikandtwo}).
+%
+%
+%
+% \section{Colour commands}
+% \label{sec:colours}
+%
+% The Rubik bundle of packages uses seven colours which are defined as follows:
+% R~(red), O~(orange), Y~(yellow), G~(green), B~(blue), W~(white),
+% and X~(grey). Now according to the following webpage\,\footnote{We thank Peter Bartal
+% for bringing this webpage to our attention.}
+%
+% \medskip
+% \noindent\texttt{http://The-Rubiks-Cube.deviantart.com/journal/Using-Official-Rubik}
+% \newline\texttt{-s-Cube-Colors-268760351} (Nov 2011)
+%
+% \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}
+%
+% {\noindent}The following RGB specifications are given by Sher (2014):
+% \begin{quote}
+%\begin{verbatim}
+% White {RGB}{255,255,255}
+% Red {RGB}{137,18,20}
+% Blue {RGB}{13,72,172}
+% Orange {RGB}{255,85,37}
+% Green {RGB}{25,155,76}
+% Yellow {RGB}{254,213,47}
+%\end{verbatim}
+% \end{quote}
+%
+% {\noindent}However, we have tried to optimise 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\,\footnote{Although the Pantone
+% colours cannot be converted to RGB, there is a subset of of Pantone colours
+% which can be be converted using CMYK
+% (see \texttt{https://en.wikipedia.org/wiki/Pantone}).}
+% (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
+% standard \LaTeX\ \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.
+%
+%
+%
+% \subsection{Colour state of the cube}
+% \label{sec:colourstate}
+%
+% A given cubie facelet on a given face is denoted using an ordered sequence
+% of three letters, as follows: first the face code (U,D,L,R,F,B),
+% second the X-position of the column (l,m,r),
+% and third the Y-position of the row (t,m,b).
+% For example, the `right-bottom' facelet of the \textsc{front} face is denoted as
+% \texttt{Frb}, and consequently the curent colour-code (R,O,Y,G,B,W,X) of this facelet
+% is held as the variable \cmd{\Frb} etc.\
+% (see Section~\ref{sec:rubikfacecode} for details and code).
+%
+%
+% Initially, when \LaTeX\ reads the file \texttt{rubikcube.sty} all facelets
+% are allocated the colour-code X, which can be regarded as a zero-colour state.
+% Until a facelet is allocated one of the six cube colours (using a suitable command)
+% it will be rendered as grey by a \cmd{\Draw...} command, since these commands
+% simply implement the current colour state of the cube (e.g.,~\cmd{\DrawRubikCubeRU}).
+% Facelets retain their colour allocation even if they are moved using
+% the \cmd{\RubikRotation} command (see \textsc{rubikrotation} package), unless they are
+% overwritten by a subsequent colour allocation command.
+%
+% \DescribeMacro{\RubikFace..}
+% \DescribeMacro{\RubikSlice..}
+% \DescribeMacro{\RubikCubeSolved..}
+% \DescribeMacro{\RubikCubeGrey..}
+% \DescribeMacro{\RubikCubeGreyAll}
+% Colours are allocated to facelets using using \cmd{\Rubik..} commands.
+% For example, the commands \cmd{\RubikCubeSolvedWY} and \cmd{\RubikCubeSolvedWB}
+% allocate prescribed colour states for the whole `solved' cube, and are
+% a very useful starting point (configuration) for subsequent rotations.
+% The commands \cmd{\RubikCubeGreyWY} and \cmd{\RubikCubeGreyAll} allocate different colour
+% states for the whole cube, and are designed to be useful starting points when illustrating
+% aspects of how to solve the cube. These two commands accept both `grey' and `gray'
+% (to be consistent with TikZ).
+%
+% Colours can also be allocated to subsets of facelets (eg faces, slices etc);
+% for example, using the
+% commands \cmd{\RubikFace...} and \cmd{\RubikSlice...}
+% commands (see Sections~\ref{sec:rubikfacecommands} and \ref{sec:slicecommands}).
+%
+% To visualise the current state of the cube one has to use a \cmd{\Draw...} command.
+% \cmd{\Draw..} commands never influence the internal colour state of the
+% cube.\footnote{That said, the now deprecated \cmd{\DrawRubikLayerFace...}
+% and \cmd{\DrawRubikLayerSice...} commands
+% (see Section~\ref{sec:deprecated}) did, confusingly, allow you to specify colours
+% as arguments, but they only `painted' colours onto facelet positions
+% (on the page, so to speak), and for this reason they are now deprecated,
+% and will be phased out in due course.}
+%
+% The current colour state / configuration of a cube can also be saved and
+% written to a named file, which can then be \cmd{\input} and processed later when required,
+% using the \cmd{\SaveRubikState} command (3x3x3 cube)
+% or \cmd{\SaveTwoState} command (2x2x2 cube).
+%
+%
+%
+% \subsection{RubikFace commands}
+% \label{sec:rubikfacecommands}
+%
+% \DescribeMacro{\RubikFaceUp}
+% \DescribeMacro{\RubikFaceDown}
+% \DescribeMacro{\RubikFaceLeft}
+% \DescribeMacro{\RubikFaceRight}
+% \DescribeMacro{\RubikFaceFront}
+% \DescribeMacro{\RubikFaceBack}
+% These commands allocate colours to the
+% individual cubies of a 3x3x3 cube face; they take nine colour arguments
+% (see Section~\ref{sec:rubikfacecode} for the code).
+% The ordering is isomorphic to the sequence 1--9, i.e.,~numbering the small
+% squares 1-3~(top row, left to right), 4-6~(middle row, left to right),
+% 7-9~(bottom row, left to right), as follows:
+% \begin{quote}
+% \fbox{
+% \begin{minipage}{1.6cm}
+% \#1 \#2 \#3
+%
+% \#4 \#5 \#6
+%
+% \#7 \#8 \#9
+% \end{minipage}
+% }
+% \end{quote}
+% Conveniently, \LaTeX\ allows the colour arguments to be separated by spaces
+% (e.g.,~in groups of three), or even spread across several
+% lines (e.g.,~in a square block to resemble a 9-face). This is fortunate, as it
+% allows the command to be written in several visually intuitive ways, as follows:
+%
+% \begin{quote}
+% \begin{minipage}{8cm}
+%\begin{verbatim}
+% \RubikFaceUp{G}{B}{G} {G}{W}{O} {G}{O}{G}
+%
+% \RubikFaceFront{O}{W}{R}
+% {W}{W}{W}
+% {G}{W}{G}
+%
+%\end{verbatim}
+% \end{minipage}
+% \end{quote}
+% Failure to include a valid colour argument will generate a
+% `missing parameter' error, and no colour will be
+% allocated (i.e.,~you will see a black-hole) when it is rendered.
+%
+% \DescribeMacro{\RubikFaceUpAll}
+% \DescribeMacro{\RubikFaceDownAll}
+% \DescribeMacro{\RubikFaceLeftAll}
+% \DescribeMacro{\RubikFaceRightAll}
+% \DescribeMacro{\RubikFaceFrontAll}
+% \DescribeMacro{\RubikFaceBackAll}
+% Each of the above commands has an associated
+% `\texttt{All}' version which allocates the same colour to all the cubies
+% on a 9-face (i.e.,~only a single colour argument is required).
+% For example, if you want the \textsc{right} face to be all orange, then
+% use the command \cmd{\RubikFaceRightAll\{O\}}.
+% Use of these commands is shown in the following example.
+%
+%
+% \bigskip
+%
+% \begin{minipage}{2.8cm}
+% \RubikCubeGreyAll
+% \RubikFaceRightAll{O}
+% \RubikFaceFront{W}{Y}{G}
+% {W}{Y}{G}
+% {W}{Y}{G}
+% \begin{tikzpicture}[scale=0.7]
+% \DrawRubikCubeRU
+% \end{tikzpicture}%
+% \end{minipage}
+% \hspace{5mm}
+% \begin{minipage}{0.6\textwidth}
+%\begin{verbatim}
+% \RubikCubeGreyAll
+% \RubikFaceRightAll{O}
+% \RubikFaceFront{W}{Y}{G}
+% {W}{Y}{G}
+% {W}{Y}{G}
+% \ShowCube{3cm}{0.7}{\DrawRubikCubeRU}
+% \end{verbatim}
+% \end{minipage}
+%
+% \bigskip
+%
+%
+% Note that instead of using \cmd{\RubikCubeGreyAll} we could have used the
+% command \verb!\RubikFaceUpAll{X}! to allocate grey to the whole of the
+% \textsc{up} face. However, the \cmd{\RubikCubeGreyAll} command can be a useful
+% starting point when dealing with a new cube,
+% since it resets all the faces to their initial default colour.
+%
+% Finally, it is important to bear in mind that when allocating colours using
+% the \cmd{\RubikFace..} commands it is very
+% easy to inadvertently create a non-valid cube (ie a cube with either the wrong number
+% of facelets with particular colours, or one which has a non-sovable configuration).
+% However, some basic error checking of this sort is done whenever the
+% \cmd{\RubikRotation} command is used
+% (see the \textsc{rubikrotation} package documentation).
+
+%
+%
+% \subsection{RubikSolvedConfig command}
+% \label{sec:rubiksolvedconfig}
+%
+% \DescribeMacro{\RubikSolvedConfig}
+% This command allocates the six face colours according to the following ordered
+% XYZ$+-$ argument rule, namely X$+$, X$-$, Y$+$, Y$-$, Z$+$, Z$-$; i.e.,~the order
+% of the six colour arguments follows the face order
+% \textsc{right, left, up, down, front, back} (for notation see
+% Section~\ref{sec:xyzarguments} and Figure~\ref{fig:notation}).
+% {\newline}\textsc{usage}:\ \verb!\RubikSolvedConfig{G}{B}{W}{Y}{O}{R}!
+% {\newline}Examples of its use are shown in the next section.
+%
+%
+%
+%
+% \subsection{RubikCubeSolved commands}
+% \label{sec:rubikcubesolved}
+%
+% \DescribeMacro{\RubikCubeSolved}
+% \DescribeMacro{\RubikCubeSolvedWY}
+% The action of both of these commands is identical:
+% they both set all the face colours to the following standard `solved' cube
+% configuration, namely Up=white, Down=yellow, Right=green, Left=blue, Front=orange, Back=red,
+% by invoking the above \cmd{\RubikSolvedConfig} command, as follows:
+%\begin{verbatim}
+%\newcommand{\RubikCubeSolved}{\RubikSolvedConfig{G}{B}{W}{Y}{O}{R}}
+%\end{verbatim}
+% Note that this is in fact just a convenient short-hand for the following:
+%\begin{verbatim}
+%\newcommand{\RubikCubeSolved}{%
+% \RubikFaceRightAll{G}%
+% \RubikFaceLeftAll{B}%
+% \RubikFaceUpAll{W}%
+% \RubikFaceDownAll{Y}%
+% \RubikFaceFrontAll{O}%
+% \RubikFaceBackAll{R}%
+%}
+%\end{verbatim}
+% Note that for convenience, this configuration is also available using the command
+% \verb!\RubikCubeSolvedWY! (WY denoting White opposite Yellow).
+% This solved configuration is shown in the following
+% semi-flat (SF) image.
+%
+%
+% \bigskip
+%
+% \begin{minipage}{5cm}
+% \centering
+% \begin{tikzpicture}[scale=0.5]
+% \RubikCubeSolvedWY
+% \DrawRubikCubeSF
+% \end{tikzpicture}%
+% \end{minipage}
+% \begin{minipage}{0.5\textwidth}
+%\begin{verbatim}
+% \RubikCubeSolvedWY
+% \ShowCube{5cm}{0.5}{\DrawRubikCubeSF}
+%\end{verbatim}
+% \end{minipage}
+%
+% \bigskip
+%
+% Note that the width of the minipage used in the \cmd{\ShowCube} command above
+% is set to 5cm. This value is derived from the fact
+% that the \textit{unscaled} width of the semi-flat image is 10cm (9 + 1 squares), and hence if
+% the TikZ scale factor is set to 0.5 (as in the above example) then the minimum minipage
+% width = $10 \times 0.5 = 5$cm (see Section~\ref{sec:coordinates} for details).
+%
+%
+% \textbf{Other orientations:} If other orientations of the solved cube are required,
+% this can be easily achieved using the \cmd{\RubikRotation} command
+% (from the \texttt{RubikRotation} package) to rotate the cube as required.
+% For~example, we could make a command to show the above solved cube upside-down
+% and rotated slightly, as follows:
+%\begin{verbatim}
+%\newcommand{\CubeUpSideDown}{\RubikCubeSolved\RubikRotation{x2,y}}
+%\end{verbatim}
+% ---this uses the rotations \rrx, \rrx, to invert, and then \rry\ to turn
+% the cube 90~$\deg$:
+%
+% \bigskip
+%
+% \begin{minipage}{2.6cm}
+% \centering
+% \begin{tikzpicture}[scale=0.5]
+% \DrawNCubeAll{3}{O}{Y}{G}
+% \end{tikzpicture}%
+% \end{minipage}
+% \hspace{5mm}
+% \begin{minipage}{0.6\textwidth}
+%\begin{verbatim}
+% \CubeUpSideDown
+% \ShowCube{2cm}{0.5}\DrawRubikCubeRU}
+%\end{verbatim}
+% \end{minipage}
+%
+% \bigskip
+%
+%% \DescribeMacro{\RubikCubeSolvedWB}
+% \textbf{Other configurations:} While the `solved' WY colour configuration
+% described above (White face opposite Yellow)
+% is that of the most commonly occurring Rubik cube, another `solved' colour configuration
+% which is also commercially available has the White opposite Blue configuration, which
+% is available using the command \verb!\RubikCubeSolvedWB!.
+% Its colour configuration is as follows:
+%
+%\begin{center}
+% \RubikCubeSolvedWB
+% \ShowCube{4cm}{0.4}{\DrawRubikCubeSF}%
+%\end{center}
+%
+% \bigskip
+%
+% Note that users can easily create their own alternative `solved'
+% face/colour versions.
+% For~example, the above mentioned white opposite
+% blue~(WB) solved configuration command \verb!\RubikCubeSolvedWB!
+% (white opposite blue, red opposite orange,
+% and green opposite yellow), was created using \verb!\RubikSolvedConfig{R}{O}{W}{B}{G}{Y}!
+% (for the code see \ref{sec:codesolvedconfig}).
+%
+%
+%
+%
+% \subsection{RubikCubeGrey.. commands}
+% \label{sec:rubikcubegrey}
+%
+% \DescribeMacro{\RubikCubeGreyWY}
+% \DescribeMacro{\RubikCubeGreyWB}
+% \DescribeMacro{\RubikCubeGreyAll}
+% The command \cmd{\RubikCubeGreyWY} generates a 3x3x3 cube with no colours allocated
+% \textit{except} for the central cubie of each face, which takes the same colour
+% configuration as defined for the \cmd{\RubikCubeSolvedWY} command.
+% The command \cmd{\RubikCubeGreyAll} generates a cube with \textit{all} the faces
+% completely grey; this is useful as it can be used to reset all the facelets to
+% the initial default state.
+% These commands will accept either `grey' or `gray' (to be consistent with TikZ).
+%
+% These commands, are designed to be useful starting points when wanting to
+% describe the movement of particular cubies. We can see the effect of
+% the \cmd{\RubikCubeGreyWY} command by viewing the cube in a semi-flat (SF) format,
+% as follows:
+%
+% \bigskip
+%
+% \RubikCubeGreyWY
+% \ShowCube{4.5cm}{0.45}{\DrawRubikCubeSF}
+% \hspace{3mm}
+% \begin{minipage}{0.6\textwidth}
+%\begin{verbatim}
+% \RubikCubeGreyWY
+% \ShowCube{4.5cm}{0.45}{\DrawRubikCubeSF}
+%\end{verbatim}
+% \end{minipage}
+%
+% \bigskip
+% Users can of course set up their own alternative face/colour configuration
+% by creating a new `variant' command altogether.
+%
+%
+%
+% \subsection{RubikSlice commands}
+% \label{sec:slicecommands}
+%
+% \DescribeMacro{\RubikSliceTopX}
+% \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, Middle, Bottom.
+% The six colour arguments associated with a given slice run in sequence
+% 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) 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
+% and consequently each of the `slice' commands in this
+% 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
+% \RubikFaceDownAll{Y}
+% \RubikSliceTopL {G}{G}{G} {R}{R}{R}
+% \RubikSliceMiddleL {R}{R}{R} {B}{B}{B}
+% \RubikSliceBottomL {O}{O}{O} {G}{G}{G}
+% \begin{tikzpicture}[scale=0.7]
+% \DrawRubikCubeLD
+% \end{tikzpicture}%
+% \end{minipage}
+% \hspace{5mm}
+% \begin{minipage}{0.6\textwidth}
+%\begin{verbatim}
+% \RubikFaceDownAll{Y}
+% \RubikSliceTopL {G}{G}{G} {R}{R}{R}
+% \RubikSliceMiddleL {R}{R}{R} {B}{B}{B}
+% \RubikSliceBottomL {O}{O}{O} {G}{G}{G}
+% \ShowCube{3cm}{0.7}{\DrawRubikCubeLD}
+%\end{verbatim}
+% \end{minipage}
+%
+%
+%
+%
+%
+% \section{Rotation commands}
+% \label{sec:RubikCommands}
+%
+% The Rubik bundle implements not only the standard Rubik cube notation of the
+% World Cube Association (see WCA website), but also the main variant notations
+% used by the Rubik interest groups and websites.
+%
+% \begin{figure}[hbt]
+% \centering
+% \ifpdf
+% \includegraphics[height=5cm]{rubik-doc-figA.pdf}
+% \fi
+% \caption{\label{fig:notation}Face rotations}
+% \end{figure}
+%
+% To avoid confusion the Rubik bundle uses a trailing `p' (lower case) in rotation-codes to denote
+% a `prime' (reversed direction); we also recommend that commas are used to separate
+% sequential Rubik rotations (moves).
+% While these are mainly to avoid ambiguity, they also greatly facilitate computer
+% searching and copy-and-pasting of rotation sequences.
+%
+% Unfortunately, obtaining a good balance between an intuitive notation for defining
+% rotations and the need for flexibility is difficult,
+% and consequently some notation is more intuitive than others. A good compromise
+% seems to be the World Cube Association's FADN structure; i.e.,~Face (L,R,U,D,F,B),
+% Action (m,w,s,a,c), Direction (p),
+% N (n); for~example, codes like \texttt{R, R2, Rc, Rm, Rwp, Rwp2} etc.
+%
+%
+% The \rubikcube\ package includes commands for typesetting a wide range of
+% rotation-codes (e.g.,~\rr{R}, \rr{y}, \rr{Bw}) and
+% equivalent hieroglyphs (e.g.,~\rrh{R}, \rrh{y}, \rrh{Bw}), as well as commands
+% for typesetting 3x3x3 cubes\,\footnote{See the \textsc{rubiktwocube} package documentation
+% for 2x2x2 cube commands.} and single cubies. All the rotation-codes and
+% hieroglyphs are typeset using one particular font \& size which we call the `rubikfont'
+% for convenience (see Section~\ref{sec:rubikfont} for details).
+% All of the rotation-codes described
+% here are recognised by the \textsc{rubikrotation} package
+% (see Section~\ref{sec:rubikrotation}).
+%
+% Note that there are some rotation codes which are not represented by arrow
+% hieroglyphs, since 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 rotation-code in a square; for~example, \rrhBw, \rrhFm.
+%
+%
+%
+% \subsection{Typesetting}
+% \label{sec:typesetting}
+%
+% We now describe the four commands used for typesetting the various rotation-codes.
+%
+% \DescribeMacro{\rr}
+% The text version of a rotation-code is typeset using the rubik-rotation
+% command \cmd{\rr\marg{rotation-code}}, i.e.,~\rr{R}\ is typeset using the command \cmd{\rr\{R\}}.
+% The hieroglyph of a rotation is generated (in text) by \DescribeMacro{\rrh}
+% using instead the command \cmd{\rrh\marg{rotation-code}}. For~example, the command
+% \cmd{\rrh\{R\}} generates \rrh{R}\ which is the hieroglyph associated with
+% the rotation \rr{R}.
+%
+% \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 (e.g.,~\rrh{x}, \rrh{y}, \rrh{z}\ denoting 90~degree cube-axis rotations)
+% the only difference between the \cmd{\rrh\{\}} and \cmd{\Rubik\{\}} form 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 rotation-code and its hieroglyph (in sequence as in text)
+% is generated using the command \cmd{\textRubik\marg{rotation-code}}.
+% For~example, \textRubik{R}\ is typeset using the command \cmd{\textRubik\{R\}}.
+% A list of all rotation-code commands and their associated hieroglyphs is given in
+% Section~\ref{sec:listofcommands}.
+%
+%
+%
+% \subsection{Face rotations}
+%
+% \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 upper-case 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, \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 lower-case `p' to the face rotation command. For~example, \rr{Rp}\
+% is generated by \cmd{\rr\{Rp\}}. More formally, \rr{Rp} is the `inverse' of \rr{R}.
+%
+% The superscript~$^2$, or sometimes just an ordinary~2, indicates that the rotation
+% 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;
+% \rr{R}\textbf{$^3$} is equivalent to \rr{Rp} etc.
+%
+%
+% \subsection{Inner-slice rotations}
+% \label{sec:slicerotations}
+%
+% The Rubik cube (3x3x3) has three orthogonal so-called
+% `inner' slices (middle layers, middle 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 \rr{R}\ (i.e.,~its rotation is isomorphic to \rr{R}).
+% The inner-slice rotations form a group (the Slice group), originally
+% described by John Conway (Frey and Singmaster, 1982, p~105).
+%
+%
+% \subsubsection*{The `m' notation}
+% \label{sec:mnotation}
+%
+% \DescribeMacro{Um}
+% \DescribeMacro{Dm}
+% \DescribeMacro{Lm}
+% \DescribeMacro{Rm}
+% \DescribeMacro{Fm}
+% \DescribeMacro{Bm}
+% Here `m' stands for the `middle' slice, namely that parallel to the designated
+% \textsc{face}; its rotation mirrors that of the
+% \textsc{face}. The \texttt{m} must be in lower case.
+% Each of these rotation-codes has a complementary `prime' version, formed
+% by appending a `p'; for~example, \rr{Rm} (\verb!\rr{Rm}!) is a middle layer rotation
+% \rrh{Rm} between the \textsc{right} and \textsc{left} faces, and is in the same
+% direction as \rr{R}. The code \rr{Rmp} (\verb!\rr{Rmp}!) refers to the same
+% middle slice, but rotated in the opposite direction \rrh{Rmp}.
+%
+% This notation, which was probably invented by Singmaster, was originally used on the
+% Cube Lovers usenet group (1981--1997). It is now much used on the
+% Jaap Puzzles website (see Scherphius J) ---see also Section~\ref{sec:codeJaap}.
+%
+%
+% \subsubsection*{The `M' notation}
+% \label{sec:Mnotation}
+%
+% \DescribeMacro{MU}
+% \DescribeMacro{MD}
+% \DescribeMacro{ML}
+% \DescribeMacro{MR}
+% \DescribeMacro{MF}
+% \DescribeMacro{MB}
+% This variant of the above `middle' slice notation (e.g.,~\texttt{MR} $\equiv$ \texttt{Rm})
+% is part of the `superset' notation of Randelshofer. As before, the rotation
+% direction follows that of the designated \textsc{face}.
+% Each has a complementary `prime' version
+% formed by appending a `p'. The \texttt{M} must be in upper case.
+%
+%
+% \bigskip\bigskip
+%
+% \subsubsection*{The MES notation}
+%
+% \DescribeMacro{M}
+% \DescribeMacro{E}
+% \DescribeMacro{S}
+% \DescribeMacro{Mp}
+% \DescribeMacro{Ep}
+% \DescribeMacro{Sp}
+% An alternative but very confusing
+% inner-slice notation (e.g.,~\texttt{Ep} $\equiv$ \texttt{Um}) which is occasionally used
+% is the so-called MES notation as used in the Waterman algorithm
+% (Treep and Waterman 1987), and the Roux method (Giles Roux).
+% \begin{itemize}
+% \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 an inverse (prime) version.
+%
+%
+% \subsubsection*{The `S' notation}
+%
+% \DescribeMacro{Su}
+% \DescribeMacro{Sd}
+% \DescribeMacro{Sl}
+% \DescribeMacro{Sr}
+% \DescribeMacro{Sf}
+% \DescribeMacro{Sb}
+% In this equally confusing inner-slice notation, `S' stands for `inner-slice';
+% the face letter must be in lower case (e.g.,~\texttt{Sr} $\equiv$ \texttt{Rm}).
+% For~example, the inner-slice
+% rotation between the \textsc{right} and \textsc{left} faces whose rotation
+% direction follows the rotation \rr{R}\ is denoted
+% as \rr{Sr}, which is typeset using the command \cmd{\rr\{Sr\}}.
+% Each has an inverse (prime) p-form.
+%
+%
+% \subsection{Outer-slice rotations}
+%
+% \subsubsection*{The `s' (slice) notation}
+%
+% \DescribeMacro{Us}
+% \DescribeMacro{Ds}
+% \DescribeMacro{Ls}
+% \DescribeMacro{Rs}
+% \DescribeMacro{Fs}
+% \DescribeMacro{Bs}
+% This is a `paired' form of
+% notation (two rotations at once), which can be thought of as complementing the
+% inner-slice (middle layer) rotations.
+% Each of these `slice' commands denotes a rotation of two opposite faces
+% in the \textit{same} direction.
+% {\linebreak}For~example, \textRubik{Us}\ $\equiv$ \textRubik{U}\ + \textRubik{Dp};
+% i.e.,~both face-rotations are in the \textit{same} direction
+% as \rr{U}. Each of these rotation-codes has a complementary `anti-slice' version (see below).
+%
+% This notation was originally described by
+% Singmaster (Frey and Singmaster, 1982), and is much used
+% on the `Pretty patterns' page of the Fridrich website (this
+% page also has a useful link to `notation').
+%
+%
+% \bigskip
+%
+% \DescribeMacro{SU}
+% \DescribeMacro{SD}
+% \DescribeMacro{SL}
+% \DescribeMacro{SR}
+% \DescribeMacro{SF}
+% \DescribeMacro{SB}
+% This variant of the above `slice' notation (e.g.,~\texttt{SU} $\equiv$ \texttt{Us})
+% is part of the `superset' notation of Randelshofer. As before, the rotation
+% direction follows that of the designated
+% \textsc{face}. Each has a complementary `prime' version formed by appending a `p'.
+%
+%
+% \bigskip\bigskip
+%
+
+%
+% \subsubsection*{The `a' (anti-slice) notation}
+%
+% \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, \textRubik{Ua}\ $\equiv$ \textRubik{U}\ + \textRubik{D}.
+% This notation is much used on the `Pretty patterns' page of the
+% Fridrich website (see the note above re: `slice notation').
+%
+% \bigskip\bigskip
+%
+%
+% \subsection{Wide rotations}
+%
+% \subsubsection*{The `w' notation}
+% \label{sec:wnotation}
+%
+% \DescribeMacro{Uw}
+% \DescribeMacro{Dw}
+% \DescribeMacro{Lw}
+% \DescribeMacro{Rw}
+% \DescribeMacro{Fw}
+% \DescribeMacro{Bw}
+% The clockwise \textit{combined} rotation of an outer face AND its adjacent inner-slice
+% (officially known as a `double block', or `double outer slice' move)
+% is denoted by appending a lower-case \textbf{\textsf{\footnotesize{w}}}
+% (denoting `wide') to a rotation-code (endorsed by the WCA).
+% For~example, a \textsc{right} double outer slice rotation \rrh{Rw} (\verb!\rrh{Rw}!)
+% is denoted as \rr{Rw} (\verb!\rr{Rw}!). The `prime' version is formed by
+% appending a `p' to the rotation-code. For~example, \rr{Rwp}\ is generated by \verb!\rr{Rwp}!.
+%
+%
+% \bigskip
+%
+% \subsubsection*{The `T' notation}
+% \label{sec:Tnotation}
+%
+% \DescribeMacro{TU}
+% \DescribeMacro{TD}
+% \DescribeMacro{TL}
+% \DescribeMacro{TR}
+% \DescribeMacro{TF}
+% \DescribeMacro{TB}
+% This confusing variant of the above `w' notation (e.g.,~\texttt{TR} $\equiv$ \texttt{Rw}) is part of
+% the `superset' notation of Randelshofer. As before, the rotation direction
+% follows that of the designated \textsc{face}. Each has a complementary `prime' version
+% formed by appending a `p'.
+%
+% \bigskip\bigskip
+%
+%
+% \subsection{Axis rotations}
+%
+% \subsubsection*{The x, y, z notation}
+% \label{sec:xyznotation}
+%
+% \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 \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 since \rr{x}, \rr{y}, \rr{z}\ rotations are always expressed in lower case;
+% this practice is also extended to the commands.
+%
+% For~example, 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, \rr{xp}\ (which is generated by appending a `p' to the
+% rotation-code, 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
+% not necessary).
+%
+%
+% \subsubsection*{The u, d, l, r, f, b notation}
+%
+%
+% \DescribeMacro{u}
+% \DescribeMacro{d}
+% \DescribeMacro{l}
+% \DescribeMacro{r}
+% \DescribeMacro{f}
+% \DescribeMacro{b}
+% These are a commonly used alternative for the \rr{x}, \rr{y}, \rr{z}\ notation
+% (and also endorsed by the WCA), and denote a 90~degree whole-cube rotation in the same
+% directional sense as that of the associated face rotation.
+%
+% {\noindent}Thus
+% \rr{d}\ $\equiv$ \rr{up} $\equiv$ \rr{yp} etc.
+% For~example, \rr{d}\ and \rr{dp}\ are generated by the commands \cmd{\rr\{d\}}
+% and \cmd{\rr\{dp\}} respectively.
+% Note that \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}, etc.
+%
+% As with the \rrh{x}, \rrh{y}, \rrh{z}\ forms (described above) there are also
+% equivalent \cmd{\rrh\{\}} and \cmd{\Rubik\{\}} forms. For~example,
+% \rrh{d}\ is generated by the command \cmd{\rrh\{d\}}.
+%
+%
+% \pagebreak
+%
+% \subsubsection*{The `c' notation}
+% \label{sec:cnotation}
+%
+% \DescribeMacro{Uc}
+% \DescribeMacro{Dc}
+% \DescribeMacro{Lc}
+% \DescribeMacro{Rc}
+% \DescribeMacro{Fc}
+% \DescribeMacro{Bc}
+% This slightly more intuitive notation (the `c' stands for `cube') also associates the rotation
+% direction with that of the designated \textsc{face} (e.g.,~\texttt{Rc} $\equiv$ \texttt{x}).
+% Each has a complementary `prime' version formed by appending a `p'.
+% For~example, \rr{Rc} (\verb!\rr{Rc}!) is equivalent to \rr{x};
+% \rr{Rcp} (\verb!\rr{Rcp}!) is equivalent to \rr{xp}.
+%
+% This notation, which was probably invented by Singmaster, was originally used on the
+% Cube Lovers usenet group (1981--1997). It is now much used on the
+% Jaap Puzzles website (see Scherphius J) ---see also Section~\ref{sec:codeJaap}.
+%
+% \bigskip\bigskip
+%
+% \subsubsection*{The `C' notation}
+% \label{sec:Cnotation}
+%
+% \DescribeMacro{CU}
+% \DescribeMacro{CD}
+% \DescribeMacro{CL}
+% \DescribeMacro{CR}
+% \DescribeMacro{CF}
+% \DescribeMacro{CB}
+% This variant of the whole cube rotation notation
+% (e.g.,~\texttt{CR} $\equiv$ \texttt{Rc} $\equiv$ \texttt{x})
+% is part of the `superset' notation of Randelshofer. As before, the rotation
+% direction follows that of the designated \textsc{face}. Each has a complementary
+% `prime' version formed by appending a `p'.
+%
+%
+% \bigskip% \bigskip
+%
+% \subsection{Examples}
+% \label{sec:examples}
+%
+% {\noindent}\rr{R}\ is generated by the command \cmd{\rr\{R\}}
+%
+% {\noindent}\rr{Fw}\ is generated by the command \cmd{\rr\{Fw\}}
+%
+% {\noindent}\rr{L}$^2$ is generated by \cmd{\rr\{L\}}\verb!$^2$!
+%
+% {\noindent}\rr{L}2 is generated by \cmd{\rr\{L\}2}
+%
+% {\noindent}\rr{Rp}\ is generated by \cmd{\rr\{Rp\}}
+%
+% {\noindent}\rr{Fwp}\ is generated by \cmd{\rr\{Fwp\}}
+%
+% {\noindent}\rr{x}\ and \rrh{y}\ and \Rubik{zp}\ are generated by
+% \cmd{\rr\{x\}} and \cmd{\rrh\{y\}} and \cmd{\Rubik\{zp\}}
+%
+% {\noindent}\rr{Fc}\ and \rrh{Bc}\ are generated by \cmd{\rr\{Fc\}} and \cmd{\rrh\{Bc\}}
+%
+% {\noindent}\rr{U}\rr{U}\rr{R}\rr{R}\ is generated by
+% \cmd{\rr\{U\}}\cmd{\rr\{U\}}\cmd{\rr\{R\}}\cmd{\rr\{R\}}
+%
+% \medskip
+%
+% {\noindent}\Rubik{F}\Rubik{U}\Rubik{y}\Rubik{Rp}\Rubik{Lwp}\
+% \ \ \verb!\Rubik{F}\Rubik{U}\Rubik{y}\Rubik{Rp}\Rubik{Lwp}!
+%
+% \bigskip
+%
+% {\noindent}\textRubik{F}\ \textRubik{U}\ \ \ \
+% \verb!\textRubik{F}\ \textRubik{U}!
+%
+% \medskip
+%
+% {\noindent}Commas can be important in avoiding ambiguity; for~example,
+%
+% \medskip
+%
+% {\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},!
+%
+% \medskip
+%
+% {\noindent}\rrh{U}2,\,\rrh{F}2,\,\rrh{Ds}2,\, \ \ \ \ \verb!\rrh{U}2,\,\rrh{F}2,\,\rrh{Ds}2!
+%
+% \medskip
+%
+% {\noindent}Finally, if each rotation element uses the \textit{same} font or encoding, for~example
+%
+% \medskip
+%
+% {\noindent}\rrh{F}\rrh{U}\rrh{y}\rrh{Rp}\rrh{Lwp} \ \ \ \
+% \verb!\rrh{F}\rrh{U}\rrh{y}\rrh{Rp}\rrh{Lwp}!
+%
+% \medskip
+%
+% {\noindent}then typesetting such a rotation sequence can be achieved more easily using the
+% \verb!\ShowSequence! command (see Section~\ref{sec:showsequence}). For~example, we can
+% typeset the last sequence much more conveniently, as follows:
+%
+% \medskip
+%
+% \verb!\ShowSequence{}{\rrh}{F,U,y,Rp,Lwp}! \ \ $\rightarrow$ \ \ \ShowSequence{}{\rrh}{F,U,y,Rp,Lwp}
+%
+%
+%
+% \subsection{Backwards compatibility}
+% \label{sec:backwardscompat}
+%
+% Note that in keeping with `backwards compatibility' all rotation commands (see below)
+% can still be written without the usual curly braces \verb!{}!.
+% For~example, the hieroglyph \rrhD\ (\cmd{\rrh\{D\}}) can also be generated using the command
+% \cmd{\rrhD}.
+%
+%
+%
+% \subsection{Listing of all rotation commands}
+% \label{sec:listofcommands}
+%
+%
+% 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 `Examples' section above. These have been omitted here
+% owing to the difficulty of including this form easily in the following table.
+%
+%
+% Note also that some \cmd{\rrh\{\}} commands (e.g.,~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,
+% and hence can be somewhat ambiguous unless typeset with their associated
+% lettercode.
+%
+%
+% \newcommand{\dnstrut}{\rule{0pt}{17pt}}
+% \newcommand{\dns}{\hspace{2mm}}
+% \newcommand{\dnsp}{\hspace{2mm}}
+%
+%
+%
+% \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\\
+% \dnstrut\rr{Um}\dns\cmd{\rr\{Um\}}
+% & \rrh{Um}\dns\cmd{\rrh\{Um\}}
+% & \textRubik{Um}\dns\cmd{\textRubik\{Um\}} \nonumber\\
+% \dnstrut\rr{Ump}\dns\cmd{\rr\{Ump\}}
+% & \rrh{Ump}\dns\cmd{\rrh\{Ump\}}
+% & \textRubik{Ump}\dns\cmd{\textRubik\{Ump\}} \nonumber\\
+% \dnstrut\rr{Uc}\dns\cmd{\rr\{Uc\}}
+% & \rrh{Uc}\dns\cmd{\rrh\{Uc\}}
+% & \Rubik{Uc}\dns\cmd{\Rubik\{Uc\}} \nonumber\\
+% \dnstrut\rr{Ucp}\dns\cmd{\rr\{Ucp\}}
+% & \rrh{Ucp}\dns\cmd{\rrh\{Ucp\}}
+% & \Rubik{Ucp}\dns\cmd{\Rubik\{Ucp\}} \nonumber\\
+% \end{supertabular}
+%
+%
+% \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\\
+% \dnstrut\rr{Dm}\dns\cmd{\rr\{Dm\}}
+% & \rrh{Dm}\dns\cmd{\rrh\{Dm\}}
+% & \textRubik{Dm}\dns\cmd{\textRubik\{Dm\}} \nonumber\\
+% \dnstrut\rr{Dmp}\dns\cmd{\rr\{Dmp\}}
+% & \rrh{Dmp}\dns\cmd{\rrh\{Dmp\}}
+% & \textRubik{Dmp}\dns\cmd{\textRubik\{Dmp\}} \nonumber\\
+% \dnstrut\rr{Dc}\dns\cmd{\rr\{Dc\}}
+% & \rrh{Dc}\dns\cmd{\rrh\{Dc\}}
+% & \Rubik{Dc}\dns\cmd{\Rubik\{Dc\}} \nonumber\\
+% \dnstrut\rr{Dcp}\dns\cmd{\rr\{Dcp\}}
+% & \rrh{Dcp}\dns\cmd{\rrh\{Dcp\}}
+% & \Rubik{Dcp}\dns\cmd{\Rubik\{Dcp\}} \nonumber\\
+% \end{supertabular}
+%
+%
+% \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\\
+% \dnstrut\rr{Lm}\dns\cmd{\rr\{Lm\}}
+% & \rrh{Lm}\dns\cmd{\rrh\{Lm\}}
+% & \textRubik{Lm}\dns\cmd{\textRubik\{Lm\}} \nonumber\\
+% \dnstrut\rr{Lmp}\dns\cmd{\rr\{Lmp\}}
+% & \rrh{Lmp}\dns\cmd{\rrh\{Lmp\}}
+% & \textRubik{Lmp}\dns\cmd{\textRubik\{Lmp\}} \nonumber\\
+% \dnstrut\rr{Lc}\dns\cmd{\rr\{Lc\}}
+% & \rrh{Lc}\dns\cmd{\rrh\{Lc\}}
+% & \Rubik{Lc}\dns\cmd{\Rubik\{Lc\}} \nonumber\\
+% \dnstrut\rr{Lcp}\dns\cmd{\rr\{Lcp\}}
+% & \rrh{Lcp}\dns\cmd{\rrh\{Lcp\}}
+% & \Rubik{Lcp}\dns\cmd{\Rubik\{Lcp\}} \nonumber\\
+% \end{supertabular}
+%
+% \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\\
+% \dnstrut\rr{Rm}\dns\cmd{\rr\{Rm\}}
+% & \rrh{Rm}\dns\cmd{\rrh\{Rm\}}
+% & \textRubik{Rm}\dns\cmd{\textRubik\{Rm\}} \nonumber\\
+% \dnstrut\rr{Rmp}\dns\cmd{\rr\{Rmp\}}
+% & \rrh{Rmp}\dns\cmd{\rrh\{Rmp\}}
+% & \textRubik{Rmp}\dns\cmd{\textRubik\{Rmp\}} \nonumber\\
+% \dnstrut\rr{Rc}\dns\cmd{\rr\{Rc\}}
+% & \rrh{Rc}\dns\cmd{\rrh\{Rc\}}
+% & \Rubik{Rc}\dns\cmd{\Rubik\{Rc\}} \nonumber\\
+% \dnstrut\rr{Rcp}\dns\cmd{\rr\{Rcp\}}
+% & \rrh{Rcp}\dns\cmd{\rrh\{Rcp\}}
+% & \Rubik{Rcp}\dns\cmd{\Rubik\{Rcp\}} \nonumber\\
+% \end{supertabular}
+%
+%
+% \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\\
+% \dnstrut\rr{Fm}\dns\cmd{\rr\{Fm\}}
+% & \rrh{Fm}\dns\cmd{\rrh\{Fm\}}
+% & \textRubik{Fm}\dns\cmd{\textRubik\{Fm\}} \nonumber\\
+% \dnstrut\rr{Fmp}\dns\cmd{\rr\{Fmp\}}
+% & \rrh{Fmp}\dns\cmd{\rrh\{Fmp\}}
+% & \textRubik{Fmp}\dns\cmd{\textRubik\{Fmp\}} \nonumber\\
+% \dnstrut\rr{Fc}\dns\cmd{\rr\{Fc\}}
+% & \rrh{Fc}\dns\cmd{\rrh\{Fc\}}
+% & \Rubik{Fc}\dns\cmd{\Rubik\{Fc\}} \nonumber\\
+% \dnstrut\rr{Fcp}\dns\cmd{\rr\{Fcp\}}
+% & \rrh{Fcp}\dns\cmd{\rrh\{Fcp\}}
+% & \Rubik{Fcp}\dns\cmd{\Rubik\{Fcp\}} \nonumber\\
+% \end{supertabular}
+%
+%
+% \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\\
+% \dnstrut\rr{Bm}\dns\cmd{\rr\{Bm\}}
+% & \rrh{Bm}\dns\cmd{\rrh\{Bm\}}
+% & \textRubik{Bm}\dns\cmd{\textRubik\{Bm\}} \nonumber\\
+% \dnstrut\rr{Bmp}\dns\cmd{\rr\{Bmp\}}
+% & \rrh{Bmp}\dns\cmd{\rrh\{Bmp\}}
+% & \textRubik{Bmp}\dns\cmd{\textRubik\{Bmp\}} \nonumber\\
+% \dnstrut\rr{Bc}\dns\cmd{\rr\{Bc\}}
+% & \rrh{Bc}\dns\cmd{\rrh\{Bc\}}
+% & \Rubik{Bc}\dns\cmd{\Rubik\{Bc\}} \nonumber\\
+% \dnstrut\rr{Bcp}\dns\cmd{\rr\{Bcp\}}
+% & \rrh{Bcp}\dns\cmd{\rrh\{Bcp\}}
+% & \Rubik{Bcp}\dns\cmd{\Rubik\{Bcp\}} \nonumber\\
+% \end{supertabular}
+%
+%
+% \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{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{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{4.5cm}}
+% \dnstrut\rr{u}\dns\cmd{\rr\{u\}}
+% & \rrh{u}\dns\cmd{\rrh\{u\}}
+% & \Rubik{u}\dns\cmd{\Rubik\{u\}} \nonumber\\
+% \dnstrut\rr{up}\dns\cmd{\rr\{up\}}
+% & \rrh{up}\dns\cmd{\rrh\{up\}}
+% & \Rubik{up}\dns\cmd{\Rubik\{up\}} \nonumber\\
+%
+% \dnstrut\rr{d}\dns\cmd{\rr\{d\}}
+% & \rrh{d}\dns\cmd{\rrh\{d\}}
+% & \Rubik{d}\dns\cmd{\Rubik\{d\}} \nonumber\\
+% \dnstrut\rr{dp}\dns\cmd{\rr\{dp\}}
+% & \rrh{dp}\dns\cmd{\rrh\{dp\}}
+% & \Rubik{dp}\dns\cmd{\Rubik\{dp\}} \nonumber\\
+%
+% \dnstrut\rr{l}\dns\cmd{\rr\{l\}}
+% & \rrh{l}\dns\cmd{\rrh\{l\}}
+% & \Rubik{l}\dns\cmd{\Rubik\{l\}} \nonumber\\
+% \dnstrut\rr{lp}\dns\cmd{\rr\{lp\}}
+% & \rrh{lp}\dns\cmd{\rrh\{lp\}}
+% & \Rubik{lp}\dns\cmd{\Rubik\{lp\}} \nonumber\\
+%
+% \dnstrut\rr{r}\dns\cmd{\rr\{r\}}
+% & \rrh{r}\dns\cmd{\rrh\{r\}}
+% & \Rubik{r}\dns\cmd{\Rubik\{r\}} \nonumber\\
+% \dnstrut\rr{rp}\dns\cmd{\rr\{rp\}}
+% & \rrh{rp}\dns\cmd{\rrh\{rp\}}
+% & \Rubik{rp}\dns\cmd{\Rubik\{rp\}} \nonumber\\
+%
+% \dnstrut\rr{f}\dns\cmd{\rr\{f\}}
+% & \rrh{f}\dns\cmd{\rrh\{f\}}
+% & \Rubik{f}\dns\cmd{\Rubik\{f\}} \nonumber\\
+% \dnstrut\rr{fp}\dns\cmd{\rr\{fp\}}
+% & \rrh{fp}\dns\cmd{\rrh\{fp\}}
+% & \Rubik{fp}\dns\cmd{\Rubik\{fp\}} \nonumber\\
+%
+% \dnstrut\rr{b}\dns\cmd{\rr\{b\}}
+% & \rrh{b}\dns\cmd{\rrh\{b\}}
+% & \Rubik{b}\dns\cmd{\Rubik\{b\}} \nonumber\\
+% \dnstrut\rr{bp}\dns\cmd{\rr\{bp\}}
+% & \rrh{bp}\dns\cmd{\rrh\{bp\}}
+% & \Rubik{bp}\dns\cmd{\Rubik\{bp\}} \nonumber\\
+% \end{supertabular}
+%
+%
+% \subsubsection{Randelshofer notation}
+% \label{sec:listofRandelshofercommands}
+%
+% \newcommand{\dnRubik}[1]{%
+% \dnstrut\rr{#1}\dns\cmd{\rr\{#1\}}%
+% & \rrh{#1}\dns\cmd{\rrh\{#1\}}%
+% & \Rubik{#1}\dns\cmd{\Rubik\{#1\}} \nonumber\\%
+% }%
+%
+% \newcommand{\dntextRubik}[1]{%
+% \dnstrut\rr{#1}\dns\cmd{\rr\{#1\}}%
+% & \rrh{#1}\dns\cmd{\rrh\{#1\}}%
+% & \textRubik{#1}\dns\cmd{\textRubik\{#1\}} \nonumber\\%
+% }%
+%
+%
+% \begin{supertabular}[lll]{p{3cm} p{3cm} p{4.5cm}}
+% \dnRubik{CR}
+% \dnRubik{CRp}
+% \dnRubik{CL}
+% \dnRubik{CLp}
+% \dnRubik{CU}
+% \dnRubik{CUp}
+% \dnRubik{CD}
+% \dnRubik{CDp}
+% \dnRubik{CF}
+% \dnRubik{CFp}
+% \dnRubik{CB}
+% \dnRubik{CBp}
+% \end{supertabular}
+%
+% \begin{supertabular}[lll]{p{3cm} p{3cm} p{4.5cm}}
+% \dntextRubik{MR}
+% \dntextRubik{MRp}
+% \dntextRubik{ML}
+% \dntextRubik{MLp}
+% \dntextRubik{MU}
+% \dntextRubik{MUp}
+% \dntextRubik{MD}
+% \dntextRubik{MDp}
+% \dntextRubik{MF}
+% \dntextRubik{MFp}
+% \dntextRubik{MB}
+% \dntextRubik{MBp}
+% \end{supertabular}
+%
+% \begin{supertabular}[lll]{p{3cm} p{3cm} p{4.5cm}}
+% \dntextRubik{SR}
+% \dntextRubik{SRp}
+% \dntextRubik{SL}
+% \dntextRubik{SLp}
+% \dntextRubik{SU}
+% \dntextRubik{SUp}
+% \dntextRubik{SD}
+% \dntextRubik{SDp}
+% \dntextRubik{SF}
+% \dntextRubik{SFp}
+% \dntextRubik{SB}
+% \dntextRubik{SBp}
+% \end{supertabular}
+%
+% \begin{supertabular}[lll]{p{3cm} p{3cm} p{4.5cm}}
+% \dntextRubik{TR}
+% \dntextRubik{TRp}
+% \dntextRubik{TL}
+% \dntextRubik{TLp}
+% \dntextRubik{TU}
+% \dntextRubik{TUp}
+% \dntextRubik{TD}
+% \dntextRubik{TDp}
+% \dntextRubik{TF}
+% \dntextRubik{TFp}
+% \dntextRubik{TB}
+% \dntextRubik{TBp}
+% \end{supertabular}
+%
+%
+% \subsection{The rubikfont}
+% \label{sec:rubikfont}
+%
+% For hieroglyph-related text we use the standard Computer Modern Sans (cmss)
+% bold extended (bx) 10pt font for upper-case letters, and the 8pt footnote size for lower-case
+% letters (see Section~\ref{sec:coderubikfont} for details). This font (rubikfont)
+% and the `prime' symbol (rubikprime) can be easily changed by `renewing' the three commands there.
+%
+% For~example, to change to the somewhat `lighter' semi-bold extended (sbx) CM Sans (cmss) form
+% one can simply include the following in the preamble (the FNS suffix stands for `footnotesize'):
+%\begin{verbatim}
+% \makeatletter
+% \renewcommand{\@rubikfont}{\fontsize{10}{12pt}\usefont{T1}{cmss}{sbx}{n}}
+% \renewcommand{\@rubikfontFNS}{\fontsize{8}{12pt}\usefont{T1}{cmss}{sbx}{n}}
+% \makeatother
+%\end{verbatim}
+%
+%
+% \subsubsection*{The `rubikprime' symbol}
+% \label{sec:rubikprime}
+%
+% We currently use the apostrophe for the prime symbol (see Section~\ref{sec:coderubikfont}),
+% since the maths \cmd{\prime} seems to be a bit too faint (especially since we need to use
+% the `scriptstyle' size in this setting). However, users can
+% easily make the Rubik bundle use the maths prime instead, by loading the following
+% in the preamble.
+%\begin{verbatim}
+% \makeatletter
+% \renewcommand{\@rubikprime}{\raisebox{1.2pt}{\ensuremath{\scriptstyle{^\prime}}}}
+% \makeatother
+%\end{verbatim}
+%
+%
+%
+% \section{Draw commands}
+%
+% A \cmd{\Draw..} command typesets either a cubie, cube or face
+% using parameters set or defined via
+% previous parameter-allocation commands (e.g.,~colours, dimensions etc).
+%
+% It is important to distinguish between the \rubikcube\ package \cmd{\Draw..} commands
+% (with an upper-case~D) and TikZ \cmd{\draw..} commands (with a lowercase~d).
+% Rubik \cmd{\Draw..} commands are implemented by the
+% TikZ \cmd{\draw..} commands, and consequently \cmd{\Draw..} commands can only be
+% used \textit{inside} a TikZ picture environment---and hence they can also be used safely in
+% conjunction with the \cmd{\ShowCube} command, which itself uses a TikZ picture environment.
+% See also Section~\ref{sec:drawerrormessage} below.
+%
+% There are six types of \cmd{\Draw..} commands, as follows:
+% \begin{quote}
+% \noindent\cmd{\DrawCubie..}
+% \newline\noindent\cmd{\DrawRubikCube..}
+% \newline\noindent\cmd{\DrawRubikCubeSidebar..}
+% \newline\noindent\cmd{\DrawRubikFace..}
+% \newline\noindent\cmd{\DrawRubikFlat..}
+% \newline\noindent\cmd{\DrawNCube..}
+% \end{quote}
+% Note that the former \cmd{\DrawRubikLayer..}, \cmd{\DrawCube..}, \cmd{\DrawFace..}
+% commands are now deprecated, since they have
+% been superseded by more versatile and intuitive commands (see Section~\ref{sec:deprecated}).
+%
+%
+% \subsection[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 an
+% ``Undefined control sequence'' error message, indicating
+% that it is trying to draw something using an undefined
+% TikZ \cmd{\draw} command\,\footnote{Note that the TikZ \cmd{\draw} command
+% uses a lower-case `d', while all \rubikcube\ commands start with an upper-case letter.}.
+%
+% This is because all Rubik \cmd{\Draw..} commands achieve their effects by
+% implementing a series of TikZ \cmd{\draw..} and other commands, all of which
+% need to be inside a \texttt{tikzpicture} environment.
+%
+% For~example, if the command \cmd{\DrawRubikCubeF} is used
+% without a surrounding TikZ picture environment,
+% then something similar to the following error message will be generated.
+%\begin{verbatim}
+%! Undefined control sequence.
+%\DrawRubikFlatUp ... }{#1}\pgfmathsetmacro {\uy }{#2}\draw
+% [line join=round,...
+%l.56 \DrawRubikCubeF
+%\end{verbatim}
+%
+%
+%
+% \subsection{DrawCubie commands}
+% \label{sec:drawcubie}
+%
+% \DescribeMacro{\DrawCubieXY}
+% 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 this command takes three
+% xyz-ordered colour parameter arguments. Consequently the \cmd{\DrawCubie}
+% command has the format
+% \begin{quote}
+% \cmd{\DrawCubieXY\{x\}\{y\}\{z\}}
+% \end{quote}
+% 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.
+%
+% \medskip
+%
+% \ShowCube{1.33cm}{1}{\DrawCubieRU{O}{Y}{G}}
+% \hspace{1cm}
+% \begin{minipage}{0.6\textwidth}
+%\begin{verbatim}
+% \ShowCube{1.33cm}{1}{\DrawCubieRU{O}{Y}{G}}
+%\end{verbatim}
+% \end{minipage}
+%
+% \medskip
+%
+% {\noindent}Since the front face is 1~unit wide and the 2D width of the side approx 1/3~unit,
+% and the scale-factor =~1, then the minipage width required for the cubie image
+% $=(1.33 \times 1) = 1.33$cm.
+%
+% \begin{figure}[hbt]
+% \centering
+% \ifpdf
+% \includegraphics[height=4cm]{rubik-doc-figC.pdf}
+% \else
+% \includegraphics[height=4cm]{rubik-doc-figC.eps}
+% \fi
+% \vspace{-5mm}\caption{\label{fig:cubiedydx}Cubiedy and Cubiedx parameters}
+% \end{figure}
+%
+% \DescribeMacro{\Cubiedy}
+% \DescribeMacro{\Cubiedx}
+% Minor cubie configuration changes can be effected
+% by adjusting the Cubiedy and Cubiedx values ($> 0$; no units)
+% shown in Figure~\ref{fig:cubiedydx} via the two commands
+% \begin{quote}
+% \cmd{\Cubiedy\{\}} \\
+% \cmd{\Cubiedx\{\}}
+% \end{quote}
+% as shown in the following example.
+%
+% \bigskip
+%
+% \ShowCube{1.7cm}{1}{%
+% \Cubiedy{0.4}%
+% \Cubiedx{0.8}%
+% \DrawCubieRU{O}{Y}{G}%
+% }
+% \hspace{2cm}
+% \begin{minipage}{0.6\textwidth}
+%\begin{verbatim}
+% \ShowCube{1.7cm}{1}{%
+% \Cubiedy{0.4}
+% \Cubiedx{0.8}
+% \DrawCubieRU{O}{Y}{G}
+% }
+%\end{verbatim}
+% \end{minipage}
+%
+% \bigskip
+%
+% {\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} face (see also the section on Arrows: Section~\ref{sec:arrows}).
+% The default values of \cmd{\Cubiedy} and \cmd{\Cubiedx} are 0.4.
+%
+%
+%
+% \subsection{textCubie commands}
+%
+% \DescribeMacro{\textCubieRU}
+% \DescribeMacro{\textCubieRD}
+% \DescribeMacro{\textCubieLU}
+% \DescribeMacro{\textCubieLD}
+% For convenience, there are also four (smaller) `text' versions \textCubieRU{O}{Y}{G}
+% of the four \cmd{\DrawCubie} commands for use in ordinary text, as follows:
+% \begin{quote}
+% \textCubieRU{O}{Y}{G} \ \ |\textCubieRU{O}{Y}{G}|
+%
+% \medskip
+%
+% \textCubieRD{O}{Y}{G} \ \ |\textCubieRD{O}{Y}{G}|
+%
+% \medskip
+%
+% \textCubieLU{O}{Y}{G} \ \ |\textCubieLU{O}{Y}{G}|
+%
+% \medskip
+%
+% \textCubieLD{O}{Y}{G} \ \ |\textCubieLD{O}{Y}{G}|
+% \end{quote}
+% Note that these \cmd{\textCubieXY} commands are not influenced by the
+% \cmd{\Cubiedy}, \cmd{\Cubiedx} commands as their size is pre-set for text use.
+%
+%
+%
+% \subsection{DrawRubikCube commands}
+% \label{sec:drawrubikcubecommands}
+%
+% \DescribeMacro{\DrawRubikCubeXY}
+% \DescribeMacro{\DrawRubikCubeF}
+% \DescribeMacro{\DrawRubikCubeSF}
+% This command draws Rubik cubes in one of four oblique
+% orientations or configurations as denoted by the following terminal
+% XY viewing-direction codes: RU~(RightUp), RD~(RightDown), LU~(LeftUp),
+% LD~(LeftDown); two additional terminal codes are F~(Flat) and SF~(Semi-Flat).
+% For~example, the command
+% \begin{quote}
+% \cmd{\DrawRubikCubeRU}
+% \end{quote}
+% will draw a Rubik cube as viewed from the RightUp direction (RU), as
+% shown in the following figure.
+%
+% \bigskip
+%
+% \begin{minipage}{2.8cm}
+% \begin{tikzpicture}[scale=0.7]
+% \RubikCubeSolvedWY
+% \DrawRubikCubeRU
+% \end{tikzpicture}%
+% \end{minipage}
+% \hspace{5mm}
+% \begin{minipage}{0.6\textwidth}
+%\begin{verbatim}
+% \RubikCubeSolvedWY
+% \ShowCube{3cm}{0.7}{\DrawRubikCubeRU}
+%\end{verbatim}
+% \end{minipage}
+%
+% \bigskip
+%
+% \DescribeMacro{\DrawRubikCubeF}
+% This command draws the completely flat (F) format of the cube, as shown in the following example.
+%
+% \bigskip
+%
+% \begin{minipage}{0.4\textwidth}
+% \centering
+% \begin{tikzpicture}[scale=0.4]
+% \RubikCubeSolvedWY
+% \DrawRubikCubeF
+% \node (U) at (1.5, 4.5) [black]{\small\textsf{U}};
+% \node (D) at (1.5, -1.5) [black]{\small\textsf{D}};
+% \node (L) at (-1.5, 1.5) [black]{\small\textsf{L}};
+% \node (R) at (4.5, 1.5) [black]{\small\textsf{R}};
+% \node (F) at (1.5, 1.5) [black]{\small\textsf{F}};
+% \node (B) at (7.5, 1.5) [black]{\small\textsf{B}};
+% \end{tikzpicture}%
+% \end{minipage}
+% \begin{minipage}{5cm}
+%\begin{verbatim}
+% \RubikCubeSolvedWY
+% \ShowCube{5cm}{0.4}{\DrawRubikCubeF}
+%\end{verbatim}
+% \end{minipage}
+%
+% \bigskip
+%
+% The addition of text (numbers or letters) in the faces is
+% straightforward---the origin of the 1-unit grid is located at the
+% bottom left corner of the \textsc{front} face (orange here).
+% The letters were placed using the following TikZ code inside the
+% TikZ picture environment
+% (remember TikZ commands require a terminal semi-colon~;).
+%
+%\begin{verbatim}
+% \RubikCubeSolved
+% \ShowCube{5cm}{0.4}{%
+% \DrawRubikCubeF
+% \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}
+%
+% \DescribeMacro{\DrawRubikCubeSF}
+% {\noindent}A useful `semi-flat' (SF) alternative format, which uses
+% the standard RU view of the cube and appends the three hidden
+% sides (cf.,~Rokicki \textit{et~al.}, 2013), is generated by the
+% command \cmd{\DrawRubikCubeSF} as follows.
+%
+% \bigskip
+%
+% \begin{minipage}{5cm}
+% \begin{tikzpicture}[scale=0.5]
+% \RubikCubeSolvedWY
+% \DrawRubikCubeSF
+% \node (B) at (5.5, 2.5) [white]{\small\textsf{B}};
+% \end{tikzpicture}%
+% \end{minipage}
+% \begin{minipage}{5cm}
+%\begin{verbatim}
+% \RubikCubeSolvedWY
+% \ShowCube{5cm}{0.5}{%
+% \DrawRubikCubeSF
+% \node (B) at (5.5, 2.5)
+% [white]{\small\textsf{B}};
+% }
+%\end{verbatim}
+% \end{minipage}
+%
+% \bigskip
+%
+% Note that even in this configuration it is straight-forward to
+% write text on the graphic, since the 2D 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 coordinate-grid is at the bottom left
+% corner of the \textsc{front} face (the orange face here), the ($x,y$) coordinates
+% of the centre of the red \textsc{back} face are easily determined to be (5.5, 2.5).
+%
+%
+%
+% \subsection{DrawRubikFace.. commands}
+% \label{sec:drawrubikfacecommands}
+%
+%
+% \DescribeMacro{\DrawRubikFaceUp}
+% \DescribeMacro{\DrawRubikFaceDown}
+% \DescribeMacro{\DrawRubikFaceLeft}
+% \DescribeMacro{\DrawRubikFaceRight}
+% \DescribeMacro{\DrawRubikFaceFront}
+% \DescribeMacro{\DrawRubikFaceBack}
+% \DescribeMacro{\DrawRubikFaceUpSide}
+% \DescribeMacro{\DrawRubikFaceDownSide}
+% \DescribeMacro{\DrawRubikFaceLeftSide}
+% \DescribeMacro{\DrawRubikFaceRightSide}
+% \DescribeMacro{\DrawRubikFaceFrontSide}
+% \DescribeMacro{\DrawRubikFaceBackSide}
+% These commands draw the current state of a specified face
+% (e.g.,~\cmd{\DrawRubikFaceUp}), or the face and all the associated sidebars
+% (e.g.,~\cmd{\DrawRubikFaceUpSide}). These commands do \textsc{not} take any
+% arguments---for code see Section~\ref{sec:drawrubikfacecode}.
+%
+% \textsc{Note}: These commands replace the earlier
+% \cmd{\DrawFace...} commands (see Section~\ref{sec:deprecated}).
+%
+% For example, a simple way to show the yellow-cross configuration in
+% the \textsc{up}~face would be to first define the colours using
+% the \cmd{\RubikFaceUp} command, and then draw the \textsc{up} face
+% using the \cmd{\DrawRubikFaceUp} command, as follows:
+%
+% \bigskip
+%
+%
+% \RubikFaceUp{X}{Y}{X}
+% {Y}{Y}{Y}
+% {X}{Y}{X}
+% \ShowCube{2.1cm}{0.7}{\DrawRubikFaceUp}
+% \hspace{1cm}
+% \begin{minipage}{0.6\textwidth}
+%\begin{verbatim}
+% \RubikFaceUp{X}{Y}{X}
+% {Y}{Y}{Y}
+% {X}{Y}{X}
+% \ShowCube{2.1cm}{0.7}{\DrawRubikFaceUp}
+%\end{verbatim}
+% \end{minipage}
+%
+%
+%
+% \subsection[Drawing Sidebars (Face)]{Sidebars \& DrawRubikFaceXSide commands}
+% \label{sec:sidebars}
+%
+%
+% In the next example we use the \cmd{\DrawRubikFaceUpSide} command to
+% draw the \textsc{up}~face and all its sidebars in a cube having
+% a `solved' WY (White opposite Yellow) configuration.
+%
+% \bigskip
+%
+% \RubikCubeSolvedWY
+% \ShowCube{1.6cm}{0.5}{\DrawRubikFaceUpSide}
+% \hspace{1cm}
+% \begin{minipage}{0.6\textwidth}
+%\begin{verbatim}
+% \RubikCubeSolvedWY
+% \ShowCube{1.6cm}{0.5}{\DrawRubikFaceUpSide}
+%\end{verbatim}
+% \end{minipage}
+%
+% \bigskip
+%
+% \noindent\textbf{Short-hand versions}: For convenience each of these commands
+% has an equivalent short-hand version generated by using just the first letter of the
+% face name and (where appropriate) the first letter of the word Side. For~example,
+% \newline\cmd{\DrawRubikFaceR} $\equiv$ \cmd{\DrawRubikFaceRight},
+% \newline \cmd{\DrawRubikFaceRS} $\equiv$ \cmd{\DrawRubikFaceRightSide}, etc.
+%
+%
+%
+%
+%
+% \subsection{Sidebar parameters}
+% \label{sec:sidebarparameters}
+%
+% \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)
+% ---see Section~\ref{sec:sidebarcode} for the code.
+% Note that the default value of the length of a cubie side is 1.
+% These sidebar values (decimal values $\geq 0$; no units) can be
+% changed from their default values using the three commands.
+% \begin{quote}
+% \cmd{\RubikSidebarWidth\{\}}\hspace{35.751pt}(default = 0.3)\\
+% \cmd{\RubikSidebarLength\{\}}\hspace{30pt}(default = 1.0)\\
+% \cmd{\RubikSidebarSep\{\}}\hspace{46.251pt}(default = 0.3)
+% \end{quote}
+% Values set in the document preamble will apply globally, while values
+% set within a TikZ picture environment will apply only locally to that
+% particular environment. Alternatively, one can keep the effect local
+% using braces (see below).
+%
+% In the following example, we show the effect
+% on the \textsc{up} face and sidebars of a normally solved (WY) cube
+% after dramatically changing the sidebar width, length and separation
+% from the default values---compare with the previous image.
+% For~convenience, we have used a pair of braces
+% to keep the effect local to this example.
+%
+% \bigskip
+%
+% {
+% \RubikCubeSolvedWY
+% \RubikSidebarWidth{0.8}
+% \RubikSidebarLength{0.5}
+% \RubikSidebarSep{0.7}
+% \ShowCube{2cm}{0.5}{\DrawRubikFaceUpSide}
+% }
+% \hspace{2cm}
+% \begin{minipage}{0.6\textwidth}
+%\begin{verbatim}
+% {
+% \RubikCubeSolvedWY
+% \RubikSidebarWidth{0.8}
+% \RubikSidebarLength{0.5}
+% \RubikSidebarSep{0.7}
+% \ShowCube{2cm}{0.5}{\DrawRubikFaceUpSide}
+% }
+%\end{verbatim}
+% \end{minipage}
+%
+% \bigskip
+%
+% Note also that changing the sidebar-width or sidebar-separation
+% values may well also change the surrounding white-space (use \cmd{\fbox}
+% to visualise this) and may therefore require some fine-tuning of the
+% minipage width setting in order to optimise appearance.
+%
+%
+%
+%
+% \subsection[NoSidebar command]{\cmd{\NoSidebar} command}
+% \label{sec:nosidebar}
+%
+% \DescribeMacro{\NoSidebar}
+% The \cmd{\NoSidebar}\marg{colour-code} command
+% (which takes a single colour code argument)
+% allows the user to disable the drawing of sidebars having a particular colour
+% (for code see Section~\ref{sec:nosidebarcode}).
+% Its action can be localised by placing the command inside an environment
+% (e.g.,~inside the \verb!\ShowCube! environment).
+% Alternatively, the action of this command can be disabled simply by writing it with an empty
+% argument, e.g.,~\verb!\NoSidebar{}!.
+%
+% This command is designed to facilitate the drawing of so-called
+% OLL (Orientate Last Layer) configurations,
+% which are typically rendered using the yellow face.
+%
+% For~example, the following figure uses the \verb!\DrawRubikFaceUpSide! command to
+% draw the commonly encountered OLL configuration known as the `yellow cross'
+% (the remaining four yellow facelets associated with this layer are shown as sidebars).
+% In this example, we first define the colours for the whole cube (grey), and then
+% redefine the colours for the \textsc{up}~face and its four adjacent faces.
+% Finally we draw the \textsc{up}~face and sidebars; we also show an alternative
+% way of writing the facelet colour codes (ie without using the curly brackets).
+%
+% \bigskip
+%
+% \begin{minipage}{3cm}
+% \RubikCubeGreyAll
+% \RubikFaceUp XYX
+% YYY
+% XYX
+% \RubikFaceFront YXY XXXXXX
+% \RubikFaceRight XXY XXXXXX
+% \RubikFaceBack XXX XXXXXX
+% \RubikFaceLeft YXX XXXXXX
+% \ShowCube{2.6cm}{0.6}{\DrawRubikFaceUpSide}
+% \end{minipage}
+% \hspace{4mm}
+% \begin{minipage}{5cm}
+% \begin{verbatim}
+% \RubikCubeGreyAll
+% \RubikFaceUp XYX
+% YYY
+% XYX
+% \RubikFaceFront YXY XXXXXX
+% \RubikFaceRight XXY XXXXXX
+% \RubikFaceBack XXX XXXXXX
+% \RubikFaceLeft YXX XXXXXX
+% \ShowCube{2.6cm}{0.6}{\DrawRubikFaceUpSide}
+% \end{verbatim}
+% \end{minipage}
+% \bigskip
+%
+% {\noindent}However, we can greatly improve the OLL image by
+% disabling the drawing of all the grey (X) sidebars by using the
+% \verb!\NoSidebar{X}! command as follows (here we have placed the
+% \verb!\NoSidebar{X}! command inside the \verb!\ShowCube! environment
+% in order to limit its action locally). Note also that this time we
+% have used the short-hand US (UpSide) version of the
+% \cmd{\DrawRubikFaceUpSide} command.
+%
+% \bigskip
+%
+% \begin{minipage}{3cm}
+% \RubikCubeGreyAll
+% \RubikFaceUp XYX
+% YYY
+% XYX
+% \RubikFaceFront YXY XXXXXX
+% \RubikFaceRight XXY XXXXXX
+% \RubikFaceBack XXX XXXXXX
+% \RubikFaceLeft YXX XXXXXX
+% \ShowCube{2.6cm}{0.6}{\NoSidebar{X}\DrawRubikFaceUS}
+% \end{minipage}
+% \hspace{4mm}
+% \begin{minipage}{5cm}
+% \begin{verbatim}
+% \RubikCubeGreyAll
+% ...
+% ...
+% \ShowCube{2.6cm}{0.6}{\NoSidebar{X}%
+% \DrawRubikFaceUS%
+% }
+% \end{verbatim}
+% \end{minipage}
+%
+% \bigskip
+%
+%
+%
+% \subsection[Drawing Sidebars (Cube)]{Cube sidebars \& DrawRubikCubeSidebar commands}
+% \label{sec:sidebarscube}
+%
+%
+%
+%
+% Cube sidebars are drawn adjacent to cube edges which are
+% defined by the two faces forming the edge.
+% Thus the BR (Back-Right) sidebar is placed adjacent to the
+% edge formed by the \textsc{back} and \textsc{right} faces.
+%
+% Since the cube orientation (view direction; RU, RD, LU, LD)
+% determines which sidebars are visible, the command for drawing
+% the sidebar (\texttt{DrawRubikCubeSidebar..}) also needs to
+% incorporate the view direction. The command takes
+% two mandatory arguments: the first is the pair of face codes defining the edge (XX);
+% the second is the view direction, as follows:
+% \begin{quote}
+% \cmd{\DrawRubikCubeSidebarXX}\marg{view direction}
+%
+% \textsc{example:} \verb!\DrawRubikCubeSidebarRB{LD}!
+% \end{quote}
+% Note that the pair of face codes are order \textit{independent},
+% and hence can be written in any order, which makes remembering the commands very easy.
+%
+% Note also that at present commands are only available for the
+% eight sidebars which are parallel to X,Y axes, as these seem
+% to be the most useful.
+%
+% In the following example, we input a previously saved cube state
+% (in the file \texttt{cubestate-A.tex}) and draw the cube and the
+% four main sidebars (BR, BD, FL, FU) visible from the RD view direction.
+%
+% \bigskip
+%
+% \RubikFaceUp{O}{G}{Y}{B}{B}{O}{R}{B}{G}%
+% \RubikFaceDown{Y}{R}{B}{R}{W}{O}{W}{Y}{R}%
+% \RubikFaceLeft{Y}{G}{W}{W}{Y}{R}{O}{W}{B}%
+% \RubikFaceRight{B}{B}{B}{W}{G}{O}{R}{G}{W}%
+% \RubikFaceFront{G}{R}{O}{Y}{R}{O}{R}{G}{G}%
+% \RubikFaceBack{O}{W}{W}{Y}{O}{Y}{Y}{B}{G}%
+% \ShowCube{4cm}{0.6}{
+% \DrawRubikCubeRD
+% \DrawRubikCubeSidebarBR{RD}
+% \DrawRubikCubeSidebarBD{RD}
+% \DrawRubikCubeSidebarFL{RD}
+% \DrawRubikCubeSidebarFU{RD}
+% }
+% \begin{minipage}{5cm}
+%\begin{verbatim}
+% \input{cubestate-A.tex}
+% \ShowCube{3cm}{0.6}{
+% \DrawRubikCubeRD
+% \DrawRubikCubeSidebarBR{RD}
+% \DrawRubikCubeSidebarBD{RD}
+% \DrawRubikCubeSidebarFL{RD}
+% \DrawRubikCubeSidebarFU{RD}
+% }
+%\end{verbatim}
+% \end{minipage}
+%
+%\bigskip
+%
+%
+%
+%
+% \subsection{DrawRubikFlat commands}
+% \label{sec:drawrubikflatcommands}
+%
+% \DescribeMacro{\DrawRubikFlatUp}
+% \DescribeMacro{\DrawRubikFlatDown}
+% \DescribeMacro{\DrawRubikFlatLeft}
+% \DescribeMacro{\DrawRubikFlatRight}
+% \DescribeMacro{\DrawRubikFlatFront}
+% \DescribeMacro{\DrawRubikFlatBack}
+% The \cmd{\DrawRubikFlat..}\marg{x}\marg{y} commands draw a `flat' square
+% representation of a specified face, located such that its
+% bottom left corner is positioned at ($x,y$).
+% Each command (except \cmd{\DrawRubikFlatFront}) 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 (see Section~\ref{sec:codedrawrubikflatcommands} for the code).
+%
+% These commands are designed to supplement the \cmd{\DrawRubikCube...} commands and
+% allow hidden faces to be represented.
+%
+% Note also that the \cmd{\DrawRubikFlatFront} command currently takes \textit{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.
+%
+% \textsc{usage}:\ The following example uses the command \verb!\DrawRubikFlatBack{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!\DrawRubikFlatBack{4}{1}! as follows:
+%
+% \bigskip
+%
+% \begin{minipage}{0.4\textwidth}
+% \centering
+% \RubikCubeSolvedWY
+% \begin{tikzpicture}[scale=0.5]
+% \DrawRubikCubeRU
+% \DrawRubikFlatBack{4}{1}
+% \end{tikzpicture}%
+% \end{minipage}
+% \begin{minipage}{5cm}
+%\begin{verbatim}
+% \RubikCubeSolvedWY
+% \ShowCube{3cm}{0.5}{%
+% \DrawRubikCubeRU
+% \DrawRubikFlatBack{4}{1}
+% }
+%\end{verbatim}
+% \end{minipage}
+%
+%
+% \subsection[DrawNCube]{DrawNCube (NxNxN)}
+% \label{sec:NCube}
+%
+% \DescribeMacro{\DrawNCubeAll}
+% An `NCube' is a solved NxNxN cube drawn from the RU direction;
+% (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\}}.
+% \end{quote}
+% This command takes four ordered parameters (N, X, Y, Z)---the number
+% (integer; $N>0$) of cubies along an edge, followed by three face
+% colours in XYZ order.
+% Since the viewpoint is only from the RU direction, the three colour
+% parameters are: X(Right), Y(Up), Z(Front).
+%
+% \bigskip
+%
+% \begin{minipage}{0.3\textwidth}
+% \begin{tikzpicture}[scale=0.5]
+% \DrawNCubeAll{5}{O}{Y}{G}
+% \end{tikzpicture}%
+% \end{minipage}
+% \begin{minipage}{0.5\textwidth}
+%\begin{verbatim}
+% \ShowCube{3.5cm}{0.5}{\DrawNCubeAll{5}{O}{Y}{G}}
+%\end{verbatim}
+% \end{minipage}
+%
+%
+%
+%
+% \section[ShowSequence command]{\cmd{\ShowSequence} command}
+% \label{sec:showsequence}
+%
+% \DescribeMacro{\ShowSequence}
+% \DescribeMacro{\ShowSequenceF}
+% \DescribeMacro{\ShowSequencef}
+% The \cmd{\ShowSequence}\marg{separator}\marg{font-code}\marg{sequence} command
+% typesets a comma-separated sequence of rotation
+% codes---for code see Section~\ref{sec:codeshowsequence}.
+% Appending an `F' to the command-name (\cmd{\ShowSequenceF}) results in an fbox around
+% the whole output (cf.~the \cmd{\ShowCubeF} command).
+% Appending a lower-case `f' to the command-name (\cmd{\ShowSequencef}) generates fboxs around
+% \textit{each element} in the output (these two forms can be helpful when checking white space).
+%
+% The \cmd{\ShowSequence} command takes three mandatory arguments:
+% the first is the separator (\verb!#1!),
+% the second is the font or style code (\verb!#2!),
+% and third is a comma-separated sequence of Rubik rotation codes (|#3|).
+%
+% The separator (e.g.,~comma) used for typesetting the sequence can be specified
+% (or just omitted---i.e.,~an empty bracket);
+% the sequence can be either a named sequence (i.e.,~encoded as a macro) or just a
+% comma separated sequence of rotation codes.
+%
+% \noindent\textsc{usage}:
+% The following command displays the rotation sequence F, R, U, Rp, Up, using
+% the \verb!\rr! encoding and comma \& space separated.
+%
+% \medskip
+%
+% \verb!\ShowSequence{,\ }{\rr}{F,R,U,Rp,Up}! \ \ $\rightarrow$ \ \ \ShowSequence{,\ }{\rr}{F,R,U,Rp,Up}
+%
+% \medskip
+%
+% Remember that if you want a very long sequence to break automatically
+% at the line-ends, then you need to include at least one space between
+% the sequence elements, either with or without a comma; for this the
+% separator argument needs to include a space, i.e.,~something like
+% \verb!{,\ }! or \verb!{\ }! or just \verb!{ }! perhaps.
+%
+%
+% For~example, the following commands typeset the comma-separated
+% rotation sequence U,D,Lp,R using different separators and fonts.
+% For convenience, we start by encoding the sequence as the macro \verb!\myseq!.
+%
+%
+% \newcommand{\myseq}{U,D,Lp,R}
+%
+% \medskip\noindent\verb!\newcommand{\myseq}{U,D,Lp,R}!
+%
+% \medskip\noindent\verb!\ShowSequence{,}{\texttt}{\myseq}! \ $\longrightarrow$ \ \ShowSequence{,}{\texttt}{\myseq}
+%
+% \medskip\noindent\verb!\ShowSequence{,}{\rr}{\myseq}! \ $\longrightarrow$ \ \rr{U},\rr{D},\rr{Lp},\rr{R}
+%
+% \medskip\noindent\verb!\ShowSequence{}{\rrh}{\myseq}! \ $\longrightarrow$ \ \rrh{U}\rrh{D}\rrh{Lp}\rrh{R}
+%
+% \medskip\noindent\verb!\ShowSequence{\ }{\rrh}{\myseq}! \ $\longrightarrow$ \ \rrh{U}\ \rrh{D}\ \rrh{Lp}\ \rrh{R}
+%
+% \medskip\noindent\verb!\ShowSequence{,\ }{\textRubik}{\myseq}! \ $\longrightarrow$ \ \textRubik{U},\ \textRubik{D},\
+% \textRubik{Lp},\ \textRubik{R}
+%
+%
+%
+%
+% \subsection{Trailing digits}
+%
+% Note that the commands \verb!\rr!, \verb!\rrh!, \verb!\Rubik!
+% and \verb!\textRubik! will fail for rotation codes which
+% have a trailing digit, e.g.,~R2, Dp3 (so-called `short' codes), since the
+% \verb!\ShowSequence! macro currently only reads the whole string between pairs of
+% commas (i.e.,~it does not \textit{interpret} strings like R2 $\rightarrow$ R,R etc.).
+% However, if you just want to `see' the text, then the standard \LaTeX\ typewriter command
+% \verb!\texttt! will typeset the text correctly, as you would expect
+% (but using the \texttt{tt} font of course).
+%
+% A useful `work-around' for this limitation is provided by the \verb!\RubikRotation{}!
+% command\,\footnote{Using the \texttt{--shell-escape} command-line option
+% with the \LaTeX\ engine---see Section~\ref{sec:rubikrotation}.}
+% (part of the \textsc{rubikrotation} package), since this returns (via the Perl program
+% \texttt{rubikrotation.pl}) an extended (`long') form of a given sequence in which
+% any `short' rotation codes are converted into their separate (atomic) long-form rotation codes;
+% the associated string is \verb!\SequenceLong!.
+% In fact three different forms of the sequence are returned, as shown below.
+%
+% For~example, consider the following short-form sequence L,R,D2,L3, and denote
+% it as `seqA' as follows: \verb!\newcommand{\seqA}{[seqA],L,R,D2,L3,<test>}!.
+% In~this case D2,L3, and the name `seqA' fail to be typeset when using
+% the \verb!\rr! font with the \verb!\ShowSequence! command
+% (notice there are lots of commas with nothing between them),
+% while \cmd{\texttt} does work, as follows:
+%
+% \newcommand{\seqA}{[seqA],L,R,D2,L3,<test>}
+%
+% \medskip\noindent\verb!\newcommand{\seqA}{[seqA],L,R,D2,L3,<test>}!
+%
+% \medskip\noindent\verb!\ShowSequence{,}{\rr}{\seqA}! \ $\longrightarrow$ \ \ShowSequence{,}{\rr}{\seqA}
+%
+% \medskip\noindent\verb!\ShowSequence{,}{\texttt}{\seqA}! \ $\longrightarrow$ \ \ShowSequence{,}{\texttt}{\seqA}
+%
+% \medskip
+%
+% However, if we now run the command \verb!\RubikRotation{\seqA}! we shall then have
+% at our disposal the following four strings:
+%
+% \medskip
+%
+% \verb!\SequenceInfo = ! test
+%
+% \verb!\SequenceName = ! seqA
+%
+% \verb!\SequenceShort = ! L,R,D2,L3
+%
+% \verb!\SequenceLong = ! L,R,D,D,L,L,L
+%
+% \medskip
+%
+% {\noindent}and therefore have full control over typesetting rotation sequences.
+% This approach therefore offers sufficient flexibility for most purposes.
+% For~example, if we now write the command \verb!\ShowSequence{,}{\rr}{\SequenceLong}!
+% we obtain
+%
+% \medskip\noindent\verb!\ShowSequence{,}{\rr}{\SequenceLong}! \ $\longrightarrow$ \
+% \ShowSequence{,}{\rr}{L,R,D,D,L,L,L}
+%
+% \medskip
+%
+% In practice, any trailing digit is converted (modulo~4) and expanded accordingly, the details being
+% copied to the log-file. For~example, if one writes the command
+% \cmd{\RubikRotation\{[test],R,D28978\}}, then since $28978 \equiv 2$\,(modulo~4) then \cmd{\SequenceLong}
+% will be returned containing the string |R,D,D|. The associated entries in the log-file are
+% as follows:
+%\begin{verbatim}
+%...rotation R OK
+%...Expanding D28978 (28978 = 2 mod 4) ...
+%...rotation D OK (= Dp3)
+%...rotation D OK (= Dp3)
+%...writing new Rubik state to file rubikstateNEW.dat
+%...SequenceName = test
+%...SequenceShort = R,D28978
+%...SequenceLong = R,D,D
+%\end{verbatim}
+%
+%
+%
+% \section{SequenceBrace commands}
+% \label{sec:sequencebrace}
+%
+% \DescribeMacro{\SequenceBraceA}
+% \DescribeMacro{\SequenceBraceB}
+% \DescribeMacro{\SequenceBraceAF}
+% \DescribeMacro{\SequenceBraceBF}
+% The \cmd{\SequenceBraceX}\marg{name}\marg{sequence} command
+% is a tool for displaying a named sequence using a brace. The trailing~A
+% denotes that the brace is placed Above the sequence; the trailing~B denotes
+% the brace is Below the sequence.
+% Appending an `F' to the command-name (e.g.,~\cmd{\SequenceBraceAF}) results
+% in a surrounding fbox (cf.~the \cmd{\ShowCubeF} command).
+% For the code see Section~\ref{sec:sequencebracecode}.
+%
+% {\noindent}Thus \verb!\SequenceBraceB{myseq}{U,D,L,R}! generates
+% \ \SequenceBraceB{myseq}{U,D,L,R}.
+%
+% {\noindent}A typical example of its use might be:
+%
+% \bigskip
+%
+%\noindent%
+%\RubikCubeSolvedWY%
+%\ShowCube{1.6cm}{0.4}{\DrawRubikCubeRU}%
+%\quad\SequenceBraceA{fourspot}{\ShowSequence{}{\Rubik}{F,F,B,B,U,Dp,R,R,L,L,U,Dp}}%
+%\quad$\longrightarrow$\quad%
+%\RubikFaceFront{R}{R}{R}%
+% {R}{O}{R}%
+% {R}{R}{R}%
+%\RubikFaceRight{B}{B}{B}%
+% {B}{G}{B}%
+% {B}{B}{B}%
+%\ShowCube{1.6cm}{0.4}{\DrawRubikCubeRU}%
+%
+%
+% \bigskip
+%
+% {\noindent}which was generated by the following code, showing that the \cmd{\ShowSequence}
+% command can be used as an argument for the \cmd{\SequenceBraceA} command:
+%\begin{verbatim}
+%\newcommand{\fourspot}{[fourspot],F2,B2,U,Dp,R2,L2,U,Dp}%
+%\noindent%
+%\RubikCubeSolvedWY%
+%\ShowCube{1.6cm}{0.4}{\DrawRubikCubeRU}%
+%\RubikRotation{\fourspot}%
+%\quad\SequenceBraceA{\SequenceName}{%
+% \ShowSequence{}{\Rubik}{\SequenceLong}}%
+%\quad$\longrightarrow$\quad%
+%\ShowCube{1.6cm}{0.4}{\DrawRubikCubeRU}%
+%\end{verbatim}
+% Note (1)~that the `fourspot' listing is included in the \textsc{rubikpatterns} package, and
+% (2)~the \cmd{\RubikRotation} command requires using the \texttt{--shell-escape} command-line
+% option with the \LaTeX\ engine---see Section~\ref{sec:rubikrotation} for details.
+%
+%
+%
+% \section{Arrows}
+% \label{sec:arrows}
+%
+% The \rubikcube\ package does not offer any special commands for drawing
+% arrows since it is straightforward just to include the appropriate TikZ
+% `draw' commands in the \texttt{tikzpicture} environment (i.e.,~in our
+% own \cmd{\ShowCube} environment).
+%
+% In order to facilitate using the standard TikZ `draw' commands
+% the graphic grid origin of Rubik cube images is located at the bottom left corner
+% of the \textsc{front} face (see also Section~\ref{sec:coordinates} for details of the
+% cube's coordinate system). Similarly, single face images (e.g.,~drawn using the
+% \cmd{\DrawRubikFace..} or \cmd{\DrawRubikFlat..} commands etc.) and also Sidebars, have
+% their grid origin at the bottom left corner of the face.
+% Consequently the start and finish coordinates for any arrow or line are
+% easy to determine.
+%
+% \begin{figure}[hbt]
+% \centering
+% \ifpdf
+% \includegraphics[height=3cm]{rubik-doc-figE.pdf}
+% \fi
+%
+% \parbox{9cm}{%
+% \caption{\label{fig:facegraph}Grid showing the positive coordinates
+% associated with \textsc{front} face of a cube image, or of a face-only image.}
+% }%
+% \end{figure}
+%
+% \medskip
+%
+% For~example, Figure~\ref{fig:facegraph} shows a green
+% arrow drawn from the centre of the lower-left cubie $(0.5, 0.5)$ to the centre of
+% middle cubie $(1.5, 1.5)$.
+% To do this we just include the following TikZ command (remember that TikZ
+% commands require a terminal semicolon):
+% \begin{quote}
+%\begin{verbatim}
+% \draw[->,color=green] (0.5,0.5) -- (1.5, 1.5);
+%\end{verbatim}
+% \end{quote}
+%
+% The following example shows the cubie movement 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
+% \RubikCubeSolvedWY
+% \ShowCube{2.5cm}{0.7}{%
+% \DrawRubikFaceUp
+% \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}
+% \RubikCubeSolvedWY
+% \ShowCube{2.5cm}{0.7}{%
+% \DrawRubikFaceUp
+% \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}
+%
+% \bigskip
+% Since the coordinates shown in Figure~\ref{fig:facegraph} extend
+% outwards in all directions, they can also be used as a guide for drawing
+% arrows (or other structures) outside this 3x3 `face' square.
+% The origin is at lower left corner of the face.
+%
+% In the following example, we input a Rubik cube configuration
+% (previously saved as the file \texttt{CubeFour.tex}
+% (see the \textsc{rubikrotation} package documentation for details)\footnote{See also
+% the `SaveRubikState' example in the file \texttt{RubikExamples.pdf}.}, and
+% draw an arrow to highlight a yellow side facelet.
+%
+% \bigskip
+% \noindent
+% \RubikCubeGreyAll
+% \RubikFaceUp OYG YYY BYY
+% \RubikFaceFront YRR XXXXXX
+% \RubikFaceRight GOO XXXXXX
+% \RubikFaceBack YBB XXXXXX
+% \RubikFaceLeft YGR XXXXXX
+% \ShowCube{2.2cm}{0.5}{\DrawRubikFaceUpSide%
+% \draw[->,ultra thick,color=green] (2.5,5) -- (2.5, 4);
+% }
+% \begin{minipage}{0.6\textwidth}
+%\begin{verbatim}
+% \input{CubeFour.tex}
+% \ShowCube{2.2cm}{0.5}{\DrawRubikFaceUpSide%
+% \draw[->,ultra thick,color=green] (2.5,5) -- (2.5, 4);
+% }
+%\end{verbatim}
+% \end{minipage}
+%
+% \bigskip
+%
+% {\noindent}The following example shows an arrow on the Rubik cube.
+% The origin of coordinates is at the bottom left corner of the
+% \textsc{front} face (see Section~\ref{sec:coordinates}).
+%
+% \bigskip
+% \noindent
+% \begin{minipage}{2.8cm}
+% \centering
+% \begin{tikzpicture}[scale=0.7]
+%
+% \RubikFaceFront{O}{O}{O}
+% {O}{O}{X}
+% {X}{O}{X}
+%
+% \RubikFaceRight{G}{G}{G}
+% {X}{G}{G}
+% {X}{X}{X}
+%
+% \RubikFaceDown {X}{G}{X}
+% {X}{Y}{X}
+% {X}{X}{X}
+%
+% \DrawRubikCubeRD
+% \draw[ultra thick,->,color=blue]
+% (1.5,0.5) -- (2.5, 1.5);
+% \end{tikzpicture}%
+% \end{minipage}
+% \hspace{1cm}
+% \begin{minipage}{0.6\textwidth}
+%\begin{verbatim}
+% \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}
+% \ShowCube{3cm}{0.7}{%
+% \DrawRubikCubeRD
+% \draw[ultra thick,->,color=blue]
+% (1.5,0.5) -- (2.5, 1.5);
+% }
+%\end{verbatim}
+% \end{minipage}
+%
+% \bigskip
+%
+% In the following example we use a blue circle to highlight a corner cubie
+% to be rotated into the top layer. Note we also use the command
+% \verb!\DrawRubikCubeSidebarFD{RU}! to draw the sidebar along
+% the FD (Front-Down) edge, and show the colour of the hidden facelet
+% of the corner-cubie.
+%
+% \bigskip
+%
+% \noindent%
+% \RubikCubeGreyWY
+% \RubikFaceUp{X}{W}{X}%
+% {W}{W}{W}%
+% {W}{W}{X}%
+% \RubikFaceDown{X}{X}{O}{X}{X}{X}{X}{X}{X}%
+% \RubikSliceBottomR{X}{X}{W}{G}{X}{X}%
+% \ShowCube{2.5cm}{0.5}{%
+% \DrawRubikCubeRU
+% \DrawRubikCubeSidebarFD{RU}
+% \draw[ultra thick,->,color=blue] (2.5,0.5) -- (2.5, 2.5);
+% \draw [color=blue, thick] (2.7, 0.3) circle (1.3);
+% }%
+% \hspace{3mm}
+% \begin{minipage}{0.6\textwidth}
+%\begin{verbatim}
+% \RubikCubeGreyWY
+% \RubikFaceUp{X}{W}{X}
+% {W}{W}{W}
+% {W}{W}{X}
+% \RubikFaceDown{X}{X}{O}{X}{Y}{X}{X}{X}{X}%
+% \RubikSliceBottomR{X}{X}{W}{G}{X}{X}
+% \ShowCube{2.5cm}{0.5}{%
+% \DrawRubikCubeRU
+% \DrawRubikCubeSidebarFD{RU}
+% \draw[ultra thick,->,color=blue]
+% (2.5,0.5) -- (2.5, 2.5);
+% \draw [color=blue, thick] (2.7, 0.3) circle (1.3);
+% }%
+%\end{verbatim}
+% \end{minipage}
+%
+%
+%
+%
+%
+% \section{Final example}
+%
+% We now present, as a final example, the code used to draw the front page
+% figure\,\footnote{This is a well-known sequence of order 6 used to cycle three
+% edge cubies; it is used to generate the `cross' configuration in the final layer
+% when solving the cube. Here we are performing the sequence on a `solved' cube,
+% since this allows you to see how the three edge cubies move, and either
+% flip (magenta arrows) or do not flip (black arrow).}.
+% This code uses the \cmd{\RubikRotation} command (from the \textsc{rubikrotation}
+% package), and therefore the \LaTeX\ engine needs to be run using the
+% \verb!--shell-escape! command-line switch (see Section~\ref{sec:rubikrotation} for details).
+%
+% \bigskip
+%
+% \noindent\hfil%
+% \RubikCubeSolvedWY%
+% \ShowCube{1.6cm}{0.4}{\DrawRubikCubeRU}%
+% \quad\ShowCube{1.6cm}{0.4}{%
+% \DrawRubikFaceUpSide
+% \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);
+% }%
+% \quad\Rubik{F}\Rubik{R}\Rubik{U}\Rubik{Rp}\Rubik{Up}\Rubik{Fp}%
+% \quad$\longrightarrow$%
+% \RubikFaceUp WWB WWOWRB%
+% \RubikFaceBack RGG XXXXXX%
+% \RubikFaceLeft RBO XXXXXX%
+% \RubikFaceFront GWO XXXXXX%
+% \RubikFaceRight WWW XXXXXX%
+% \quad\ShowCube{1.6cm}{0.4}{\DrawRubikFaceUpSide}
+% \hfil%
+%
+%
+% \bigskip
+%
+%\begin{verbatim}
+% \noindent\hfil%
+% \RubikCubeSolvedWY%
+% \ShowCube{1.6cm}{0.4}{\DrawRubikCubeRU}%
+% \quad\ShowCube{1.6cm}{0.4}{%
+% \DrawRubikFaceUpSide%
+% \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);
+% }%
+% \RubikRotation{F,R,U,Rp,Up,Fp}%
+% \quad\ShowSequence{}{\Rubik}{\SequenceLong}\quad$\longrightarrow$%
+% \ShowCube{1.6cm}{0.4}{\DrawRubikFaceUpSide}%
+% \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}
+% \ShowSequence{,}{\Rubik}{\SequenceLong} \ \ \ $\longrightarrow$
+% \ShowCube{2cm}{0.4}{\DrawRubikFaceUpSide}
+%\end{verbatim}
+% with the following commands:
+%
+%\begin{verbatim}
+% \Rubik{F}\Rubik{R}\Rubik{U}\Rubik{Rp}\Rubik{Up}\Rubik{Fp}
+% \ \ \ $\longrightarrow$
+% \RubikFaceUp WWB WWOWRB
+% \RubikFaceBack RGG XXXXXX
+% \RubikFaceLeft RBO XXXXXX
+% \RubikFaceFront GWO XXXXXX
+% \RubikFaceRight WWW XXXXXX
+% \quad\ShowCube{1.6cm}{0.4}{\DrawRubikFaceUpSide}
+% \hfil
+%\end{verbatim}
+%
+%
+%
+%
+%
+% \section{Deprecated commands}
+% \label{sec:deprecated}
+%
+%
+% The \cmd{\DrawRubikLayerFace..} and \cmd{\DrawRubikLayerSide..}
+% are now deprecated; they were found to be
+% confusing since (a)~they both drew faces \textit{and} took colour arguments
+% for facelets, and (b)~they did not update the internal colour state of a
+% cube or face---i.e.,~their colouring was simply a local `painting' action
+% without memory.
+% They have both been superseded by the more versatile
+% \cmd{\DrawRubikFace..}\ commands (see Section~\ref{sec:drawrubikfacecommands}).
+%
+% The \cmd{\RubikSide..} commands are also deprecated, since they duplicated
+% some of the function of the \cmd{\RubikFace..}\ commands.
+%
+% The earlier \cmd{\DrawFace..}\ (v4) and \cmd{\DrawFlat..}\ (v3) commands
+% are also deprecated since they lacked the Rubik or Two keyword
+% (see Sections~\ref{sec:rubikandtwo} and \ref{sec:drawrubikfacecommands}).
+%
+% \medskip
+%
+% {\noindent}Summary of all deprecated commands (and their current versions) since v3.
+%
+% \smallskip
+%
+% \begin{supertabular}[ll]{p{4cm} p{6cm}}
+% \verb!\DrawRubikCubeFlat! & $\rightarrow$ \hspace{0.5cm} \verb!\DrawRubikCubeSF! \ (Semi-Flat) \\
+% \verb!\DrawRubikFlat! & $\rightarrow$ \hspace{0.5cm} \verb!\DrawRubikCubeF! \ \ (Flat) \\
+% \verb!\DrawFace..! & $\rightarrow$ \hspace{0.5cm} \verb!\DrawRubikFace..! \\
+% \verb!\DrawFlat..! & $\rightarrow$ \hspace{0.5cm} \verb!\DrawRubikFlat..! \\
+% \verb!\DrawFlat..Side! & $\rightarrow$ \hspace{0.5cm} \verb!\DrawRubikFace..Side! \\
+% \verb!\DrawRubikLayerFace..! & $\rightarrow$ \hspace{0.5cm} \verb!\DrawRubikFace..! \\
+% \verb!\DrawRubikLayerSide..! & $\rightarrow$ \hspace{0.5cm} \verb!\DrawRubikFace..! \\
+% \end{supertabular}
+%
+%
+%
+%
+% \section{Known limitations}
+%
+% Please contact the authors regarding any ideas for improvement, errors,
+% problems or shortcomings etc.
+%
+% \begin{itemize}
+%
+% \item Note that the rotation hieroglyphs are optimised for a 10pt font
+% and do not scale with document font size. However, they do work well in
+% conjunction with the standard 11pt and 12pt document fonts sizes. Nevertheless,
+% the font size can of course be changed by renewing the font command
+% (see Section~\ref{sec:rubikfont} for details).
+%
+% \item The sidebars cannot be arbitrarily positioned (note: hidden
+% faces can be arbitrarily positioned).
+%
+% \end{itemize}
+%
+%
+%
+%
+% \section{Change history}
+%
+% \begin{itemize}
+%
+% \item Version 5 (February 2018)
+%
+% -- Removed some now unnecessary commands (see Section~\ref{sec:deprecated})
+% and made some of the internal code a bit more efficient.
+%
+% ---Added two new `grey' commands: \cmd{\RubikCubeGreyWY} and \cmd{\RubikCubeGreyWB}
+% (so as to complement the related \cmd{\RubikCubeSolvedXX} commands).
+%
+% ---Bugfix: added a pair of containing braces around the \cmd{\ifthenelse..} command
+% used by the \cmd{\ShowSequence} command (for code see Section~\ref{sec:codeshowsequence}).
+% This fixed an occasional problem of a font not being contained.
+%
+%
+% ---Added missing lowercase cube `prime' versions of whole cube rotation notation
+% (\rr{up}, \rr{dp}, \rr{lp}, \rr{rp}, \rr{fp}, \rr{bp}); see Section~\ref{sec:xyznotation}.
+%
+%
+% ---New \cmd{\NoSidebar} command for disabling the drawing of sidebars of a particular colour
+% (see Section~\ref{sec:nosidebar}).
+%
+%
+% ---Implemented the terminal $x,y$ position parameters for
+% the \cmd{\DrawRubikFlatLeft} and \cmd{\DrawRubikFlatRight}
+% commands; all the \cmd{\DrawRubikFlat..} commands work correctly now
+% (see Section~\ref{sec:codedrawrubikflatcommands})
+%
+%
+%
+% \item Version 4.0 (March 2017)
+%
+% ---Improved documentation.
+%
+% ---Improved inter-hieroglyph spacing and vertical position. The Computer Modern sans bold font
+% (10/12pt) is used for the hieroglyphs and rotation codes (see Section~\ref{sec:coderubikfont}
+% for details).
+%
+% ---Improved the \cmd{\ShowCube} and \cmd{\ShowCubeF} macros (see Sections~\ref{sec:showcube}
+% and \ref{sec:showcubecode}).
+%
+% ---Additional notation for middle slice rotations (`m' notation), e.g.,~\rr{Rm}, \rr{Rmp} etc
+% (see Sections~\ref{sec:mnotation} and \ref{sec:codeJaap}).
+%
+% ---Additional notation for whole cube rotations (`c' notation), e.g.,~\rr{Rc}, \rr{Rcp} etc
+% (see Sections~\ref{sec:cnotation} and \ref{sec:codeJaap}).
+%
+% ---Added Randelshofer notation (the `CMST' rotations), e.g.,~\rr{CR}, \rr{MR} etc
+% (see Sections~\ref{sec:listofRandelshofercommands} and \ref{sec:codeRandelshofer}).
+%
+%
+%
+% ---Six new commands for showing and annotating rotation sequences; the versions with a
+% terminal `F' also surround the object with an fbox to allow users to see the extent
+% of any associated white space
+% (see Sections~\ref{sec:showsequence} \& \ref{sec:sequencebrace}):
+% \begin{quote}
+% \cmd{\ShowSequence}
+% \newline\cmd{\ShowSequenceF}
+% \newline\cmd{\ShowSequencef}
+% \newline\cmd{\SequenceBraceA}
+% \newline\cmd{\SequenceBraceAF}
+% \newline\cmd{\SequenceBraceB}
+% \newline\cmd{\SequenceBraceBF}
+%
+% \end{quote}
+%
+% ---A new command for setting up or allocating a `solved' colour configuration.
+% (see Section~\ref{sec:rubiksolvedconfig}):
+% \begin{quote}
+% \cmd{\RubikSolvedConfig}
+% \end{quote}
+%
+% ---A new command for setting up a `starter cube' for which the \textit{whole} cube
+% is allocated the default `grey' colour (see Section~\ref{sec:rubikcubegrey}):
+% \begin{quote}
+% \cmd{\RubikCubeGreyAll}
+% \end{quote}
+%
+% ---A new supporting \textsc{rubikpatterns} package has been added to
+% the Rubik bundle. It is a small macro database of well-known named Rubik patterns
+% and associated sequences (see Section~\ref{sec:patterns}).
+%
+%
+%
+% \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
+% (but see Section~\ref{sec:deprecated}).
+%\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 that although the 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{Acknowledgements}
+%
+% We thank Peter Bartal and Peter Grill for useful ideas and
+% suggestions; we have built on some of their ideas and have acknowledged
+% these instances in the documentation.
+% We also thank Christian Tellechea for the \cmd{\@join\{\}\{\}}
+% command (see Section~\ref{sec:usefulinternalcommands}),
+% Christian Schr\"{o}ppel for help regarding the \textsf{forarray} package
+% (see Section~\ref{sec:codeshowsequence}), Herbert Kociemba for helpful comments,
+% and Robert Ma\v{r}\'{\i}k for suggesting the \cmd{\NoSidebar\{\}} command
+% (see Section~\ref{sec:nosidebar}).
+%
+%
+% \section{References}
+%
+% \begin{itemize}
+%
+%
+% \item Bartal P (2011). \
+% \url{http://tex.stackexchange.com/questions/34482/}
+%
+% \item Chen JJ (2004). Group theory and the Rubik's cube.
+% \url{http://www.math.harvard.edu/~jjchen/docs/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/}
+%
+% \item Duvoid T (2010).
+% M\'{e}thode simple pour remonter le Rubik's cube.
+% \newline\url{http://duvoid.fr/rubik/rubik-debutant-couleurs.pdf}
+% \newline\url{http://duvoid.fr/rubik/sources/notation_en.eps}
+% \newline\url{http://duvoid.fr/rubik/sources/rubik-debutant-couleurs.tex}
+%
+% \item Duvoid T (2011).
+% M\'{e}thode avanc\'{e}e pour remonter le Rubik's cube.
+% \newline\url{http://duvoid.fr/rubik/rubik-friddrich-couleurs.pdf}
+% \newline\url{http://duvoid.fr/rubik/sources/rubik-friddrich-couleurs.tex}
+%
+% \item Feuers\"{a}nger (2016). Manual for package \textsc{pgfplots}.
+% v\,1.13 (2016/01/06), \S\,3.2.3, page~21. (\texttt{pgfplots.pdf})
+% \url{http://www.ctan.org/pkg/pgfplots}. [re: preventing extra white space]
+%
+% \item Fridrich website (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 Frey AH and Singmaster D (1982). \textit{Handbook of cubik math},
+% (Enslow Publishers, Inc.) (republished: 2010, Lutterworth Press, UK)
+%
+% \item Fung website (Fung A). Solving the Rubik's cube systematically.
+% \url{http://alexfung.info/favorite/cube/cube.htm}
+%
+% \item Garfath-Cox, A (1981). \textit{The cube}, (Bolden Publishing Co.,
+% East Molesey, Surrey) pp.32. [copy in British Library]
+%
+% \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}, No~3 (May--June 1982),
+% pp.~257--259. \url{http://www.jstor.org/stable/27851433}
+%
+% \item Gymrek M (2009). The mathematics of the Rubik's cube.
+% \newline\url{http://web.mit.edu/sp.268/www/rubik.pdf}
+%
+% \item Harris D (2008). Speedsolving the cube.
+% (Sterling Publishing Co.\ Inc., New York, USA.) pp.~166.
+% [covers 2x2x2, 3x3x3, 4x4x4, 5x5x5 cubes]
+%
+% \item Harris website (Harris D). \url{http://www.cubestation.co.uk}
+%
+% \item Heise website (Heise R). Rubik's cube theory. \url{http://www.ryanheise.com/cube/theory.html}
+%
+% \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/rubik.pdf}
+%
+% \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}; pp~322.
+% \url{http://www.mike.verdone.ca/media/rubiks.pdf}
+%
+%
+% \item Kociemba website (Kociemba H). \url{http://www.kociemba.org/cube.htm}
+% {\newline}---for superflip see: \url{http://www.kociemba.org/math/oh.htm}
+%
+%
+% \item Kriz I and Siegel P (2008). Rubik's cube-inspired puzzles demonstrate math's
+% simple groups. \textit{Scientific American}; July 2008
+%
+% \item Longridge website (Longridge M). The cube pattern archive. \url{http://www.cubeman.org}
+%
+% \item Randelshofer website (Randelshofer W). Pretty patterns.
+% \url{http://www.randelshofer.ch/rubik/patterns/}
+%
+% \item Reid website (Reid M). \ \ \url{http://www.cflmath.com/Rubik},
+% for patterns see \url{http://www.cflmath.com/Rubik/patterns.html}
+%
+% \item Reid M. (1995). Superflip requires 20 face turns. (January 1995)
+% \url{http://www.math.ucf.edu/~reid/Rubik/CubeLovers/}
+% {\newline}[cited from Rokicki \textit{et~al.}, 2013].
+% {\newline}(Note: easier to use is the following html indexed version of the
+% archive of the Cube-Lovers usenet group (1982--1997)
+% \url{http://www.math.rwth-aachen.de/~Martin.Schoenert/Cube-Lovers/})
+%
+%
+% \item Rokicki T, Kociemba H, Davidson M and Dethridge J (2013). The diameter of the
+% Rubik's cube is twenty. \textit{SIAM.\ J.\ Discrete Math.}, \underline{27}, 1082--1105.
+% (\url{http://tomas.rokicki.com/rubik20.pdf})
+%
+% \item Roux website (Roux G). \ \ \url{http://www.grroux.free.fr}
+%
+% \item Rubik's cube. See Section on notation.
+% \newline\url{http://en.wikipedia.org/wiki/Rubik's_Cube}
+%
+% \item RuWix website (Ferenec D). \ \ \url{http://www.ruwix.com}.
+% See the online Rubik's cube solver \url{http://www.ruwix.com/online-rubiks-cube-solver-program}.
+%
+% \item Scherphius website (Scherphius J). Jaap Puzzles website
+% \url{http://www.jaapsch.net/puzzles/symmetr1.htm}
+%
+% \item Sher S.\ T-H.\ (2014). The new durable Rubik's cube (technical description).
+% \url{http://www.scf.usc.edu/~tsher/files/Rubiks_Cube.pdf} [includes RGB colour specification]
+%
+%
+% \item Singmaster D (1981). \textit{Notes on Rubik's magic cube} (Harmondsworth, Eng., Penguin Books)
+%
+% \item Speedsolving website. \url{http://www.speedsolving.com/}
+%
+%
+% \item Storer website (Storer JA). \url{http://www.cs.brandeis.edu/~storer/JimPuzzles/}
+% {\newline} For Rubik cube, see: \url{http://www.cs.brandeis.edu/~storer/JimPuzzles/RUBIK/Rubik3x3x3.pdf}
+% {\newline} For puzzle book, see: \url{http://www.cs.brandeis.edu/~storer/zzzJimPuzzles/JimPuzzlesBook.pdf}
+%
+%
+% \item Tran R (2005). A mathematical approach to solving Rubik's cube.
+% \url{http://www.math.ubc.ca/~cass/courses/m308/projects/rtran/rtran.pdf}
+%
+%
+% \item Treep A and Waterman M (1987). Marc Waterman's Algorithm, Part 2.
+% \textit{Cubism For Fun 15}, p.~10 (Nederlandse Kubus Club)
+% [cited from \textit{Wikipedia} (Rubik's cube)]
+%
+%
+% \item Vandenbergh website (Vandenbergh L). \ \ \textsc{cubezone} \url{http://www.cubezone.be}
+%
+% \item WCA (2016). World Cube Association Regulations. See \S\,12 for notation.
+% \url{http://www.worldcubeassociation.org/regulations.htm}
+%
+%
+% \end{itemize}
+%
+%
+%
+% ^^A ==================================================
+% \StopEventually{\PrintIndex}
+%
+%
+%
+% \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 when using a graphics package to use a trailing \% on
+% the end of lines which break before the terminal curly bracket of a \cmd{\newcommand}.
+% This is to prevent accumulating spurious spaces which may otherwise appear in
+% figures and diagrams as a strange or unexpected horizontal shift or white-space.
+%
+% \subsection{\hspace{3mm}Package heading}
+%
+% \begin{macrocode}
+%<*rubikcube>
+\def\RCfileversion{5.0}%
+\def\RCfiledate{2018/02/25}% February 25, 2018
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{rubikcube}[\RCfiledate\space (v\RCfileversion)]
+% \end{macrocode}
+% The package requires TikZ---so we load it if not already loaded.
+% \begin{macrocode}
+\@ifpackageloaded{tikz}{}{%
+ \typeout{---rubikcube requires the TikZ package.}%
+ \RequirePackage{tikz}}%
+% \end{macrocode}
+%
+% The package requires the Forarray package (see Section~\ref{sec:codeshowsequence})---so
+% we load it if not already loaded.
+% \begin{macrocode}
+\@ifpackageloaded{forarray}{}{%
+ \typeout{---rubikcube requires the Forarray package.}%
+ \RequirePackage{forarray}}%
+% \end{macrocode}
+%
+% The package requires the IfThen package (see Section~\ref{sec:codeshowsequence})---so
+% we load it if not already loaded.
+% \begin{macrocode}
+\@ifpackageloaded{ifthen}{}{%
+ \typeout{---rubikcube requires the IfThen package.}%
+ \RequirePackage{ifthen}}%
+% \end{macrocode}
+%
+%
+%
+% \begin{macro}{\rubikcube}
+% First we create a suitable logo
+% \begin{macrocode}
+\newcommand{\rubikcube}{\textsc{rubikcube}}%
+\newcommand{\Rubikcube}{\textsc{Rubikcube}}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{\hspace{3mm}Colours}
+% \label{sec:codecolours}
+%
+% We have adopted the following colour allocations---see Section~\ref{sec:colours}
+% for details.
+%
+% \begin{macrocode}
+\definecolor{R}{HTML}{C41E33}%
+\definecolor{G}{HTML}{00BE38}%
+\definecolor{B}{HTML}{0051BA}%
+\definecolor{Y}{HTML}{FFFF00}%
+\colorlet{X}{black!30}% grey
+\colorlet{O}{orange}%
+\colorlet{W}{white}%
+% \end{macrocode}
+%
+%
+%
+% \subsection{\hspace{3mm}The rubikfont}
+% \label{sec:coderubikfont}
+%
+% \begin{macro}{\@rubikfont}
+% \begin{macro}{\@rubikfontFNS}
+% \begin{macro}{\@rubikprime}
+% We define two fonts for text associated with the Rubik glyphs
+% (both the `arrow' glyphs and the `letter' glyphs),
+% namely, (1)~Computer Modern Sans (cmss), bold extended (bx), normal shape (n)
+% at 10/12pt, and (2)~a footnotesize (FNS) version (8pt) for the lower-case letters
+% [for cmss see Latex Companion (2004), p.\,417 \& p.\,354\,\footnote{Note the typo in Table~7.5 (p.\,354):
+% the font-series code for the Sans semi-bold condensed form is `sbx' (not sbc).}].
+% This has the effect of keeping the size
+% of Rubik glyphs constant in the face of any changes in the document fonts.
+% We make the baseline-skip values the same, since the `arrow' glyphs generated by
+% the \cmd{\Rubik} commands involve a single baseline-skip (for~example, as with
+% \verb!\Rubik{D}!; see Section~\ref{sec:coderotationD}).
+% We use the cmss font apostrophe as the `prime' symbol (the user has
+% the opportunity to use the maths \cmd{\prime}
+% instead---see Section~\ref{sec:rubikprime}).
+%\begin{macrocode}
+\newcommand{\@rubikfont}{\fontsize{10}{12pt}\usefont{T1}{cmss}{bx}{n}}
+\newcommand{\@rubikfontFNS}{\fontsize{8}{12pt}\usefont{T1}{cmss}{bx}{n}}
+\newcommand{\@rubikprime}{'}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \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}|
+%
+% February 2017 (RWDN): \ We first require a new length variable (which will become the minipage-width),
+% so we can add the length 1.6pt to it (this is the width of the TikZ ultra-thick line
+% which is used to draw the Rubik cubes).
+% In order for a width of an image made up of $x$~units to be equal
+% to $x \times (\mbox{scale-factor})$ we need to add an extra line-width
+% (i.e.,~to include the right-hand edge).
+% \begin{macrocode}
+\newlength{\@showcubewidth}%
+% \end{macrocode}
+% We can now build the two macros. We set the \cmd{\fboxsep} value to zero.
+% \begin{macrocode}
+\newcommand{\ShowCube}[3]{%
+ \setlength{\fboxsep}{0cm}%
+ \setlength{\@showcubewidth}{#1}%
+ \advance\@showcubewidth by 1.6pt\relax%
+ \begin{minipage}{\the\@showcubewidth}%
+ \centering%
+ \begin{tikzpicture}[scale=#2]%
+ #3%
+ \end{tikzpicture}%
+ \end{minipage}%
+}%
+\newcommand{\ShowCubeF}[3]{%
+ \setlength{\fboxsep}{0cm}%
+ \setlength{\fboxrule}{0.4pt}%
+ \setlength{\@showcubewidth}{#1}%
+ \advance\@showcubewidth by 1.6pt\relax%
+ \framebox{%
+ \begin{minipage}{\the\@showcubewidth}%
+ \centering%
+ \begin{tikzpicture}[scale=#2]%
+ #3%
+ \end{tikzpicture}%
+ \end{minipage}%
+}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+%
+% \subsection{\hspace{3mm}ShowSequence command}
+% \label{sec:codeshowsequence}
+%
+% \begin{macro}{\ShowSequence}
+% \begin{macro}{\ShowSequenceF}
+% \begin{macro}{\ShowSequencef}
+% The \cmd{\ShowSequence}\marg{separator}\marg{font-code}\marg{sequence} command
+% typesets a comma separated sequence of rotation commands.
+% (See Section~\ref{sec:showsequence}).
+% This command takes three mandatory arguments: the first is the separator (\verb!#1!),
+% the second is the font or style code (\verb!#2!), and third is a comma-separated
+% sequence of Rubik rotation commands (|#3|).
+%
+% This command requires the \texttt{forarray}
+% package---by Christian Schr\"{o}ppel---(for the \cmd{\ForEachX} command)
+% and the \texttt{ifthen} package---by David Carlisle---(for the \cmd{\ifthenelse} command).
+% These two packages are loaded at startup if not already loaded.
+% We first need to define two variables for use by the command; these are
+% derived from the \texttt{forarray} package.
+%
+% \begin{macrocode}
+\newcommand{\x}{\thislevelitem}
+\newcommand{\xcount}{\thislevelcount}
+% \end{macrocode}
+%
+% \noindent\textsc{example usage:} |\ForEachX{;}{\texttt{\x}}{L;R;U;D}|
+%
+% An important feature of the |\ForEachX| command is that it expands its third argument
+% (the list of elements), since this allows the list of elements to be presented as
+% a macro, which is extremely convenient for the user.
+%
+% The \cmd{\ShowSequence} command typesets a sequence of elements (|#3|), and places
+% an optional separator (|#1|) between them.
+% For each element (|\x|, see above) of the sequence |#3| this command forms the
+% construction |#2{element of #3}|.
+% For~example, if |#2 = \rr|, and D is an element of |#3|, then it will form the
+% command |\rr{D}| etc.
+%
+% Note that it is not straightforward to place the separator (|#1|) \textit{only between}
+% the derived elements (i.e.,~without the separator being either before the first element,
+% or following the last element) using only the |ForEachX| command. This is because
+% the |ForEachX| command processes each element in exactly the
+% same way---i.e.,~a comma after the first element (good) means there will be a comma after
+% the final element (bad).
+%
+% We solve this problem by using the |\ifthenelse| command to allow the first element
+% to be processed differently from all the remaining elements. This is because it is easy
+% for \TeX\ to identify the first element of a sequence, but very difficult for it to
+% identify the final element since we generally don't know the number of elements beforehand.
+% Consequently we identify the first element (using the |\xcount|) variable (see above),
+% and then process this first element \textit{without} any comma;
+% we then place a comma in front of each of the remaining elements.
+%
+% We also create two fbox versions of the command: the `F' version places an fbox about the
+% whole output; the `f' version places an fbox about each element in the output
+% (these two versions can be helpful when checking white space).
+%
+% Note: bugfix 22 October 2017 (RWDN): if the user implemented tt output using \cmd{\tt}
+% instead of the standard \cmd{\texttt} as the \verb!#2! argument, then the action would
+% not of course remain local, and consequently we have added a leading brace and
+% complementary trailing brace around the the \cmd{\ifthenelse...} command in each of
+% the following three macros to limit the action.
+%
+% \noindent\textsc{usage}: |\ShowSequence{,}{\rr}{R,L,Up,Dp.....}|
+%
+% \begin{macrocode}
+\newcommand{\ShowSequence}[3]{%
+ \ForEachX{,}{%
+ {\ifthenelse{\xcount=1}{#2{\x}}{#1#2{\x}}}%
+ }{#3}%
+}%
+\newcommand{\ShowSequenceF}[3]{%
+\fbox{%
+ \ForEachX{,}{%
+ {\ifthenelse{\xcount=1}{#2{\x}}{#1#2{\x}}}%
+ }{#3}%
+}}%
+\newcommand{\ShowSequencef}[3]{%
+ \ForEachX{,}{%
+ {\ifthenelse{\xcount=1}{\fbox{#2{\x}}}{#1{\fbox{#2{\x}}}}}%
+ }{#3}%
+}%
+% \end{macrocode}
+% \begin{macro}{\SequenceInfo}
+% \begin{macro}{\SequenceName}
+% \begin{macro}{\SequenceShort}
+% \begin{macro}{\SequenceLong}
+% \noindent\textsc{Sequence holders}: providing none of the Rubik rotation-codes has a trailing
+% integer (e.g.,~R3) then the Rubik macros (|\rr|, |\rrh|, |\Rubik|, |\textRubik|) will work
+% as expected when used as the second argument in the \cmd{\ShowSequence} command
+% (described above). However, a problem arises when trying to process in this way any Rubik
+% rotation-codes having a terminal integer (for~example, short-codes e.g.,~R2, D3,...), since the
+% \cmd{\ShowSequence} macro cannot expand short-codes into their long-code
+% elements (e.g.,~~R,R,D,D,D,...).
+%
+% Accommodating such codes when using the \cmd{\ShowSequence} command is currently
+% solved by using separate `holders' for four derived strings, namely: \cmd{\SequenceInfo},
+% \cmd{\SequenceName},\cmd{\SequenceShort} and \cmd{\SequenceLong}
+% (for details see Section~\ref{sec:showsequence}).
+% These are generated automatically by the Perl \textsc{rubikrotation} program, which returns
+% a so-called `long' version of the `short' string (the argument of the \cmd{\RubikRotation}
+% command). For~example, the Perl program converts
+% any short codes (e.g.,~R2, D3,... ) $\rightarrow$ long form, e.g.,~R,R,D,D,D,...
+% (see the \textsc{rubikrotation} documentation for details).
+% In order for the four `holders' of these derived strings generated by the Perl program
+% (written to the file \texttt{rubikstateNEW.dat}) to be accessible to the user they need to
+% defined here so that they can then be `redefined' (by the Perl program) in the file
+% \texttt{rubikstateNEW.dat}:
+% \begin{macrocode}
+\newcommand{\SequenceInfo}{{}}% %% INFO only
+\newcommand{\SequenceName}{{}}% %% NAME only
+\newcommand{\SequenceShort}{{}}% %% original SHORT seq but with NO NAME
+\newcommand{\SequenceLong}{{}}% %% just the LONG string \& no name
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \subsection{\hspace{3mm}SequenceBrace commands}
+% \label{sec:sequencebracecode}
+%
+% \begin{macro}{\SequenceBraceA}
+% \begin{macro}{\SequenceBraceB}
+% The \cmd{\SequenceBraceX}\marg{name}\marg{sequence} command
+% is a tool for displaying a named sequence using a brace. The trailing~A
+% denotes that the brace is placed Above the sequence; B~denotes the brace is Below the sequence.
+% For usage see Section~\ref{sec:sequencebrace}.
+%
+% \begin{macrocode}
+\newcommand{\SequenceBraceA}[2]{$\overbrace{\mbox{#2}}^{\mbox{#1}}$}%
+\newcommand{\SequenceBraceB}[2]{$\underbrace{\mbox{#2}}_{\mbox{#1}}$}%
+\newcommand{\SequenceBraceAF}[2]{\fbox{$\overbrace{\mbox{#2}}^{\mbox{#1}}$}}%
+\newcommand{\SequenceBraceBF}[2]{\fbox{$\underbrace{\mbox{#2}}_{\mbox{#1}}$}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{\hspace{3mm}RubikFace commands}
+% \label{sec:rubikfacecode}
+%
+% Cube face notation: U, D, L, R, F, B (Singmaster)
+% {\newline}Cubie-facelet notation: t, m, b, l, m, r = top, middle,
+% bottom, left, middle, right.
+% We use this lower case notation in XY-pairs to denote individual cubie facelets
+% on a given face (to avoid confusion with cube Face notation), as follows:
+% {\newline}\strut\hspace{1cm}top row \ \ \ \ \ (1,2,3) = lt, \ \, mt, \ rt
+% {\newline}\strut\hspace{1cm}middle row\, (4,5,6) = lm, mm, rm
+% {\newline}\strut\hspace{1cm}bottom row (7,8,9) = lb, \ mb, \ rb
+% {\newline}For example, the current colour of the \textbf{r}ight \textbf{b}ottom facelet
+% on the \textsc{front} face is held as the variable \cmd{\Frb} etc.
+%
+% The cubie-facelets (squares) on a face are also parameterized numerically
+% \verb!#1!--\verb!#9! reading from left-to-right, starting top-left \&
+% ending bottom-right, when used as arguments for specifying particular colours
+% (as in the \cmd{\RubikFace..} commands---see below).
+
+%
+%
+% \begin{macro}{\RubikFaceUp}
+% \begin{macro}{\RubikFaceDown}
+% \begin{macro}{\RubikFaceLeft}
+% \begin{macro}{\RubikFaceRight}
+% \begin{macro}{\RubikFaceFront}
+% \begin{macro}{\RubikFaceBack}
+% These 5 commands allocate a colour to each of the 9 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}\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 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 \verb!\def\Urt{#1}!
+% the U denotes the Up face of the cube, while the \texttt{rt} denotes
+% the ``right-top'' facelet on this face. Note that the order
+% of the two lower-case letters (\texttt{rt}) is
+% in the $x,y$ order; i.e.,~the first of the two lower-case letters relates to the $x$
+% direction (either left, middle, or right), while the second lower-case letter
+% 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}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macrocode}
+\newcommand{\RubikFaceUp}[9]{%
+\def\Ult{#1}\def\Umt{#2}\def\Urt{#3}%
+\def\Ulm{#4}\def\Umm{#5}\def\Urm{#6}%
+\def\Ulb{#7}\def\Umb{#8}\def\Urb{#9}%
+}
+\newcommand{\RubikFaceFront}[9]{%
+\def\Flt{#1}\def\Fmt{#2}\def\Frt{#3}%
+\def\Flm{#4}\def\Fmm{#5}\def\Frm{#6}%
+\def\Flb{#7}\def\Fmb{#8}\def\Frb{#9}%
+}
+\newcommand{\RubikFaceRight}[9]{%
+\def\Rlt{#1}\def\Rmt{#2}\def\Rrt{#3}%
+\def\Rlm{#4}\def\Rmm{#5}\def\Rrm{#6}%
+\def\Rlb{#7}\def\Rmb{#8}\def\Rrb{#9}%
+}
+\newcommand{\RubikFaceDown}[9]{%
+\def\Dlt{#1}\def\Dmt{#2}\def\Drt{#3}%
+\def\Dlm{#4}\def\Dmm{#5}\def\Drm{#6}%
+\def\Dlb{#7}\def\Dmb{#8}\def\Drb{#9}%
+}
+\newcommand{\RubikFaceLeft}[9]{%
+\def\Llt{#1}\def\Lmt{#2}\def\Lrt{#3}%
+\def\Llm{#4}\def\Lmm{#5}\def\Lrm{#6}%
+\def\Llb{#7}\def\Lmb{#8}\def\Lrb{#9}%
+}
+\newcommand{\RubikFaceBack}[9]{%
+\def\Blt{#1}\def\Bmt{#2}\def\Brt{#3}%
+\def\Blm{#4}\def\Bmm{#5}\def\Brm{#6}%
+\def\Blb{#7}\def\Bmb{#8}\def\Brb{#9}%
+}
+% \end{macrocode}
+%
+% \begin{macro}{\RubikFaceUpAll}
+% \begin{macro}{\RubikFaceDownAll}
+% \begin{macro}{\RubikFaceLeftAll}
+% \begin{macro}{\RubikFaceRightAll}
+% \begin{macro}{\RubikFaceFrontAll}
+% \begin{macro}{\RubikFaceBackAll}
+% These 5 commands allocate the same colour to all 9 cubie-squares
+% in the specified face (Up, Down, Left, Right, Front).
+% Each command therefore takes only 1~argument (one of the colour codes).
+%
+% {\noindent}For~example, \cmd{\RubikFaceUpAll\{R\}}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macrocode}
+\newcommand{\RubikFaceUpAll}[1]{%
+\def\Ult{#1}\def\Umt{#1}\def\Urt{#1}%
+\def\Ulm{#1}\def\Umm{#1}\def\Urm{#1}%
+\def\Ulb{#1}\def\Umb{#1}\def\Urb{#1}%
+}
+\newcommand{\RubikFaceFrontAll}[1]{%
+\def\Flt{#1}\def\Fmt{#1}\def\Frt{#1}%
+\def\Flm{#1}\def\Fmm{#1}\def\Frm{#1}%
+\def\Flb{#1}\def\Fmb{#1}\def\Frb{#1}%
+}
+\newcommand{\RubikFaceRightAll}[1]{%
+\def\Rlt{#1}\def\Rmt{#1}\def\Rrt{#1}%
+\def\Rlm{#1}\def\Rmm{#1}\def\Rrm{#1}%
+\def\Rlb{#1}\def\Rmb{#1}\def\Rrb{#1}%
+}
+\newcommand{\RubikFaceLeftAll}[1]{%
+\def\Llt{#1}\def\Lmt{#1}\def\Lrt{#1}%
+\def\Llm{#1}\def\Lmm{#1}\def\Lrm{#1}%
+\def\Llb{#1}\def\Lmb{#1}\def\Lrb{#1}%
+}
+\newcommand{\RubikFaceDownAll}[1]{%
+\def\Dlt{#1}\def\Dmt{#1}\def\Drt{#1}%
+\def\Dlm{#1}\def\Dmm{#1}\def\Drm{#1}%
+\def\Dlb{#1}\def\Dmb{#1}\def\Drb{#1}%
+}
+\newcommand{\RubikFaceBackAll}[1]{%
+\def\Blt{#1}\def\Bmt{#1}\def\Brt{#1}%
+\def\Blm{#1}\def\Bmm{#1}\def\Brm{#1}%
+\def\Blb{#1}\def\Bmb{#1}\def\Brb{#1}%
+}
+% \end{macrocode}
+%
+% {\noindent}Finally, we now use these commands to initialise all
+% visible faces to the default colour grey~(X)
+%
+% \begin{macrocode}
+\RubikFaceUpAll{X}%
+\RubikFaceDownAll{X}%
+\RubikFaceLeftAll{X}%
+\RubikFaceRightAll{X}%
+\RubikFaceFrontAll{X}%
+\RubikFaceBackAll{X}%
+% \end{macrocode}
+%
+%
+%
+%
+% \subsection{\hspace{3mm}RubikCubeGrey command}
+% \label{sec:codegrey}
+%
+% \begin{macro}{\RubikCubeGrey}
+% \begin{macro}{\RubikCubeGreyWY}
+% \begin{macro}{\RubikCubeGreyWB}
+% 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.
+% The colour configuration of the central cubies matches those defined for
+% the RubikCubeSolved command (i.e.,~white opposite yellow etc).
+% We also make WY and WB versions, and implement equivalent `gray' versions
+% (to be consistent with TikZ).
+% \begin{macrocode}
+\newcommand{\RubikCubeGrey}{%
+ \RubikFaceRight{X}{X}{X}{X}{G}{X}{X}{X}{X}%
+ \RubikFaceLeft {X}{X}{X}{X}{B}{X}{X}{X}{X}%
+ \RubikFaceUp {X}{X}{X}{X}{W}{X}{X}{X}{X}%
+ \RubikFaceDown {X}{X}{X}{X}{Y}{X}{X}{X}{X}%
+ \RubikFaceFront{X}{X}{X}{X}{O}{X}{X}{X}{X}%
+ \RubikFaceBack {X}{X}{X}{X}{R}{X}{X}{X}{X}%
+}
+\newcommand{\RubikCubeGray}{\RubikCubeGrey}
+\newcommand{\RubikCubeGreyWY}{\RubikCubeGrey}
+\newcommand{\RubikCubeGrayWY}{\RubikCubeGreyWY}
+%%
+\newcommand{\RubikCubeGreyWB}{%
+ \RubikFaceRight{X}{X}{X}{X}{R}{X}{X}{X}{X}%
+ \RubikFaceLeft {X}{X}{X}{X}{O}{X}{X}{X}{X}%
+ \RubikFaceUp {X}{X}{X}{X}{W}{X}{X}{X}{X}%
+ \RubikFaceDown {X}{X}{X}{X}{B}{X}{X}{X}{X}%
+ \RubikFaceFront{X}{X}{X}{X}{G}{X}{X}{X}{X}%
+ \RubikFaceBack {X}{X}{X}{X}{Y}{X}{X}{X}{X}%
+}
+\newcommand{\RubikCubeGrayWB}{\RubikCubeGreyWB}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+%
+% \subsection{\hspace{3mm}SolvedConfig command}
+%
+% \begin{macro}{\RubikSolvedConfig}
+% This command sets the face/colour configuration (state) of a typical
+% solved Rubik cube. Note that the order is Right, Left, Up, Down, Front, Back
+% (i.e.,~X$+$, X$-$, Y$+$, Y$-$, Z$+$, Z$-$, order).
+% We shall use this command to define solved cube configurations.
+% \begin{macrocode}
+\newcommand{\RubikSolvedConfig}[6]{%
+ \RubikFaceRightAll{#1}%
+ \RubikFaceLeftAll{#2}%
+ \RubikFaceUpAll{#3}%
+ \RubikFaceDownAll{#4}%
+ \RubikFaceFrontAll{#5}%
+ \RubikFaceBackAll{#6}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \subsection{\hspace{3mm}RubikCubeGreyAll command}
+% \label{sec:codegreyall}
+%
+% \begin{macro}{\RubikCubeGreyAll}
+% This command sets the face/colour configuration (state) of a 3x3x3
+% Rubik cube with no colours allocated.
+% This colour configuration is the same as the startup default state---all cubies will
+% appear grey. We implement it using the \cmd{\RubikSolvedConfig} command (above).
+% We also implement an equivalent `gray' version (to be consistent with TikZ).
+% \begin{macrocode}
+\newcommand{\RubikCubeGreyAll}{\RubikSolvedConfig{X}{X}{X}{X}{X}{X}}%
+\newcommand{\RubikCubeGrayAll}{\RubikCubeGreyAll}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{\hspace{3mm}RubikCubeSolved command}
+% \label{sec:codesolvedconfig}
+%
+% \begin{macro}{\RubikCubeSolved}
+% \begin{macro}{\RubikCubeSolvedWY}
+% \begin{macro}{\RubikCubeSolvedWB}
+% The first (default) command sets the face/colour configuration (state) one of the standard
+% commercially available solved Rubik cube (white opposite yellow). The argument order
+% follows the XYZ notation. For convenience we make a copy named \cmd{\RubikCubeSolvedWY}
+% (denoting the White opposite Yellow configuration), and also a different version named
+% \cmd{\RubikCubeSolvedWB} (denoting the White opposite Blue configuration).
+% These represent the two standard versions of the Rubik Cube.
+% \begin{macrocode}
+\newcommand{\RubikCubeSolved}{\RubikSolvedConfig{G}{B}{W}{Y}{O}{R}}%
+\newcommand{\RubikCubeSolvedWY}{\RubikCubeSolved}%
+\newcommand{\RubikCubeSolvedWB}{\RubikSolvedConfig{R}{O}{W}{B}{G}{Y}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{\hspace{3mm}Slice commands}
+%
+% \begin{macro}{\RubikSliceTopR}
+% \begin{macro}{\RubikSliceTopL}
+% \begin{macro}{\RubikSliceMiddleR}
+% \begin{macro}{\RubikSliceMiddleL}
+% \begin{macro}{\RubikSliceBottomR}
+% \begin{macro}{\RubikSliceBottomL}
+% 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}%
+\def\Rlt{#4}\def\Rmt{#5}\def\Rrt{#6}%
+}
+\newcommand{\RubikSliceTopL}[6]{%
+\def\Llt{#1}\def\Lmt{#2}\def\Lrt{#3}%
+\def\Flt{#4}\def\Fmt{#5}\def\Frt{#6}%
+}
+\newcommand{\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}%
+}
+\newcommand{\RubikSliceEquatorL}[6]{%
+\def\Llm{#1}\def\Lmm{#2}\def\Lrm{#3}%
+\def\Flm{#4}\def\Fmm{#5}\def\Frm{#6}%
+}
+\newcommand{\RubikSliceBottomR}[6]{%
+\def\Flb{#1}\def\Fmb{#2}\def\Frb{#3}%
+\def\Rlb{#4}\def\Rmb{#5}\def\Rrb{#6}%
+}
+\newcommand{\RubikSliceBottomL}[6]{%
+\def\Llb{#1}\def\Lmb{#2}\def\Lrb{#3}%
+\def\Flb{#4}\def\Fmb{#5}\def\Frb{#6}%
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{\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 viewing direction (X = either R or L; Y = either U or D).
+% The order of the XY code is important: X~first, Y~second (so it is easy to remember).
+%
+% 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 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 (x,y) 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 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}{%
+% ---top row left to right
+\draw[line join=round,line cap=round,ultra thick,fill=\Flt]%
+(0,2) -- (0, 3) -- (1,3) -- (1,2) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Fmt]%
+(1,2) -- (1, 3) -- (2,3) -- (2,2) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Frt]%
+(2,2) -- (2, 3) -- (3,3) -- (3,2) -- cycle;
+% -----middle row left to right
+\draw[line join=round,line cap=round,ultra thick,fill=\Flm]%
+(0,1) -- (0, 2) -- (1,2) -- (1,1) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Fmm]%
+(1,1) -- (1, 2) -- (2,2) -- (2,1) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Frm]%
+(2,1) -- (2, 2) -- (3,2) -- (3,1) -- cycle;
+% ----bottom row left to right
+\draw[line join=round,line cap=round,ultra thick,fill=\Flb]%
+(0,0) -- (0, 1) -- (1,1) -- (1,0) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Fmb]%
+(1,0) -- (1, 1) -- (2,1) -- (2,0) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Frb]%
+(2,0) -- (2, 1) -- (3,1) -- (3,0) -- cycle;
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{\hspace{3mm}Viewing direction}
+%
+% The command `DrawRubikCubeXY' command uses the trailing XY code
+% to specify the view direction (X = either R or L; Y = either U or D).
+% 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 \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
+% (see Section~\ref{sec:coordinates}).
+% 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}{%
+\DrawRubikCubeFrontFace %% frontface
+%%-----------Up face----------
+%%---top row
+\draw[line join=round,line cap=round,ultra thick,fill=\Ult]%
+(0.66,3.66) -- (1,4) -- (2,4) -- (1.66,3.66) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Umt]%
+(1.66,3.66) -- (2,4) -- (3,4) -- (2.66,3.66) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Urt]%
+(2.66,3.66) -- (3,4) -- (4,4) -- (3.66,3.66) -- cycle;
+%%---middle row
+\draw[line join=round,line cap=round,ultra thick,fill=\Ulm]%
+(0.33,3.33) -- (0.66,3.66) -- (1.66,3.66) -- (1.33,3.33) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Umm]%
+(1.33,3.33) -- (1.66,3.66) -- (2.66,3.66) -- (2.33,3.33) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Urm]%
+(2.33,3.33) -- (2.66,3.66) -- (3.66,3.66) -- (3.33,3.33) -- cycle;
+%%---bottom row
+\draw[line join=round,line cap=round,ultra thick,fill=\Ulb]%
+(0,3) -- (0.33,3.33) -- (1.33,3.33) -- (1,3) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Umb]%
+(1,3) -- (1.33,3.33) -- (2.33,3.33) -- (2,3) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Urb]%
+(2,3) -- (2.33,3.33) -- (3.33,3.33) -- (3,3) -- cycle;
+%%-----------Right face----------
+%%---top row
+\draw[line join=round,line cap=round,ultra thick,fill=\Rlt]%
+(3,2) -- (3, 3) -- (3.33,3.33) -- (3.33,2.33) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Rmt]%
+(3.33,2.33) -- (3.33, 3.33) -- (3.66,3.66) -- (3.66,2.66) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Rrt]%
+(3.66,2.66) -- (3.66, 3.66) -- (4,4) -- (4,3) -- cycle;
+%%---middle row
+\draw[line join=round,line cap=round,ultra thick,fill=\Rlm]%
+(3,1) -- (3, 2) -- (3.33,2.33) -- (3.33,1.33) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Rmm]%
+(3.33,1.33) -- (3.33, 2.33) -- (3.66,2.66) -- (3.66,1.66) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Rrm]%
+(3.66,1.66) -- (3.66, 2.66) -- (4,3) -- (4,2) -- cycle;
+%%---bottom row
+\draw[line join=round,line cap=round,ultra thick,fill=\Rlb]%
+(3,0) -- (3, 1) -- (3.33,1.33) -- (3.33,0.33) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Rmb]%
+(3.33,0.33) -- (3.33, 1.33) -- (3.66,1.66) -- (3.66,0.66) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Rrb]%
+(3.66,0.66) -- (3.66, 1.66) -- (4,2) -- (4,1) -- cycle;
+}
+% \end{macrocode}
+%
+% \begin{macro}{\DrawRubikCube}
+% This command is equivalent to the previous \cmd{\DrawRubikCubeRU}
+% and hence is the default form (i.e.,~if the trailing XY
+% viewpoint code is accidentally omitted).
+% \end{macro}
+% \begin{macrocode}
+\newcommand{\DrawRubikCube}{\DrawRubikCubeRU}
+% \end{macrocode}
+%
+%
+% \begin{macro}{\DrawRubikCubeRD}
+% This command draws and paints a Rubik cube as viewed from
+% the Right Down (RD) viewpoint.
+% \end{macro}
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeRD}{%
+\DrawRubikCubeFrontFace %% frontface
+%%----------Right face--------
+%%---top row
+\draw[line join=round,line cap=round,ultra thick,fill=\Rlt]%
+(3,2) -- (3, 3) -- (3.33,2.66) -- (3.33,1.66) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Rmt]%
+(3.33,1.66) -- (3.33, 2.66) -- (3.66,2.33) -- (3.66,1.33) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Rrt]%
+(3.66,1.33) -- (3.66, 2.33) -- (4,2) -- (4,1) -- cycle;
+%%---middle row
+\draw[line join=round,line cap=round,ultra thick,fill=\Rlm]%
+(3,1) -- (3, 2) -- (3.33,1.66) -- (3.33,0.66) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Rmm]%
+(3.33,0.66) -- (3.33, 1.66) -- (3.66,1.33) -- (3.66,0.33) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Rrm]%
+(3.66,0.33) -- (3.66, 1.33) -- (4,1) -- (4,0) -- cycle;
+%%---bottom row
+\draw[line join=round,line cap=round,ultra thick,fill=\Rlb]%
+(3,0) -- (3, 1) -- (3.33,0.66) -- (3.33,-0.33) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Rmb]%
+(3.33,-0.33) -- (3.33, 0.66) -- (3.66,0.33) -- (3.66,-0.66) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Rrb]%
+(3.66,-0.66) -- (3.66, 0.33) -- (4,0) -- (4,-1) -- cycle;
+%%-----------Down face---------
+%%---top row
+\draw[line join=round,line cap=round,ultra thick,fill=\Dlt]%
+(0.33,-0.33) -- (0, 0) -- (1,0) -- (1.33,-0.33) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Dmt]%
+(1.33,-0.33) -- (1, 0) -- (2,0) -- (2.33,-0.33) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Drt]%
+(2.33,-0.33) -- (2, 0) -- (3,0) -- (3.33,-0.33) -- cycle;
+%%---middle row
+\draw[line join=round,line cap=round,ultra thick,fill=\Dlm]%
+(0.66,-0.66) -- (0.33, -0.33) -- (1.33,-0.33) -- (1.66,-0.66) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Dmm]%
+(1.66,-0.66) -- (1.33, -0.33) -- (2.33,-0.33) -- (2.66,-0.66) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Drm]%
+(2.66,-0.66) -- (2.33, -0.33) -- (3.33,-0.33) -- (3.66,-0.66) -- cycle;
+%%---bottom row
+\draw[line join=round,line cap=round,ultra thick,fill=\Dlb]%
+(1,-1) -- (0.66, -0.66) -- (1.66,-0.66) -- (2,-1) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Dmb]%
+(2,-1) -- (1.66, -0.66) -- (2.66,-0.66) -- (3,-1) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Drb]%
+(3,-1) -- (2.66, -0.66) -- (3.66,-0.66) -- (4,-1) -- cycle;
+}
+% \end{macrocode}
+%
+% \begin{macro}{\DrawRubikCubeLD}
+% This command draws and paints a Rubik cube as viewed from
+% the Left Down (LD) viewpoint.
+% \end{macro}
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeLD}{%
+\DrawRubikCubeFrontFace %% frontface
+%%------------Left face--------
+%%---top row
+\draw[line join=round,line cap=round,ultra thick,fill=\Llt]%
+(-1,1) -- (-1, 2) -- (-0.66,2.33) -- (-0.66,1.33) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Lmt]%
+(-0.66,1.33) -- (-0.66, 2.33) -- (-0.33,2.66) -- (-0.33,1.66) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Lrt]%
+(-0.33,1.66) -- (-0.33, 2.66) -- (0,3) -- (0,2) -- cycle;
+%%---middle row
+\draw[line join=round,line cap=round,ultra thick,fill=\Llm]%
+(-1,0) -- (-1, 1) -- (-0.66,1.33) -- (-0.66,0.33) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Lmm]%
+(-0.66,0.33) -- (-0.66, 1.33) -- (-0.33,1.66) -- (-0.33,0.66) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Lrm]%
+(-0.33,0.66) -- (-0.33, 1.66) -- (0,2) -- (0,1) -- cycle;
+%%---bottom row
+\draw[line join=round,line cap=round,ultra thick,fill=\Llb]%
+(-1,-1) -- (-1, 0) -- (-0.66,0.33) -- (-0.66,-0.66) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Lmb]%
+(-0.66,-0.66) -- (-0.66, 0.33) -- (-0.33,0.66) -- (-0.33,-0.33) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Lrb]%
+(-0.33,-0.33) -- (-0.33, 0.66) -- (0,1) -- (0,0) -- cycle;
+%%------------Down face----------
+%%---top row
+\draw[line join=round,line cap=round,ultra thick,fill=\Dlt]%
+(-0.33,-0.33) -- (0, 0) -- (1,0) -- (0.66,-0.33) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Dmt]%
+(0.66,-0.33) -- (1, 0) -- (2,0) -- (1.66,-0.33) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Drt]%
+(1.66,-0.33) -- (2, 0) -- (3,0) -- (2.66,-0.33) -- cycle;
+%%---middle row
+\draw[line join=round,line cap=round,ultra thick,fill=\Dlm]%
+(-0.66,-0.66) -- (-0.33, -0.33) -- (0.66,-0.33) -- (0.33,-0.66) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Dmm]%
+(0.33,-0.66) -- (0.66, -0.33) -- (1.66,-0.33) -- (1.33,-0.66) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Drm]%
+(1.33,-0.66) -- (1.66, -0.33) -- (2.66,-0.33) -- (2.33,-0.66) -- cycle;
+%%---bottom row
+\draw[line join=round,line cap=round,ultra thick,fill=\Dlb]%
+(-1,-1) -- (-0.66, -0.66) -- (0.33,-0.66) -- (0,-1) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Dmb]%
+(0,-1) -- (0.33, -0.66) -- (1.33,-0.66) -- (1,-1) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Drb]%
+(1,-1) -- (1.33, -0.66) -- (2.33,-0.66) -- (2,-1) -- cycle;
+}
+% \end{macrocode}
+%
+%
+% \begin{macro}{\DrawRubikCubeLU}
+% This command draws and paints a Rubik cube as viewed from
+% the Left Up (LU) viewpoint.
+% \end{macro}
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeLU}{%
+\DrawRubikCubeFrontFace %% frontface
+%%-----------Left face-----------
+%%---top row
+\draw[line join=round,line cap=round,ultra thick,fill=\Llt]%
+(-1,3) -- (-1, 4) -- (-0.66,3.66) -- (-0.66,2.66) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Lmt]%
+(-0.66,2.66) -- (-0.66, 3.66) -- (-0.33,3.33) -- (-0.33,2.33) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Lrt]%
+(-0.33,2.33) -- (-0.33, 3.33) -- (0,3) -- (0,2) -- cycle;
+%%---middle row
+\draw[line join=round,line cap=round,ultra thick,fill=\Llm]%
+(-1,2) -- (-1, 3) -- (-0.66,2.66) -- (-0.66,1.66) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Lmm]%
+(-0.66,1.66) -- (-0.66, 2.66) -- (-0.33,2.33) -- (-0.33,1.33) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Lrm]%
+(-0.33,1.33) -- (-0.33, 2.33) -- (0,2) -- (0,1) -- cycle;
+%%---bottom row
+\draw[line join=round,line cap=round,ultra thick,fill=\Llb]%
+(-1,1) -- (-1, 2) -- (-0.66,1.66) -- (-0.66,0.66) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Lmb]%
+(-0.66,0.66) -- (-0.66, 1.66) -- (-0.33,1.33) -- (-0.33,0.33) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Lrb]%
+(-0.33,0.33) -- (-0.33, 1.33) -- (0,1) -- (0,0) -- cycle;
+%%-----------Up face---------
+%%---top row
+\draw[line join=round,line cap=round,ultra thick,fill=\Ult]%
+(-0.66,3.66) -- (-1, 4) -- (0,4) -- (0.33,3.66) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Umt]%
+(0.33,3.66) -- (0, 4) -- (1,4) -- (1.33,3.66) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Urt]%
+(1.33,3.66) -- (1, 4) -- (2,4) -- (2.33,3.66) -- cycle;
+%%---middle row
+\draw[line join=round,line cap=round,ultra thick,fill=\Ulm]%
+(-0.33,3.33) -- (-0.66, 3.66) -- (0.33,3.66) -- (0.66,3.33) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Umm]%
+(0.66,3.33) -- (0.33, 3.66) -- (1.33,3.66) -- (1.66,3.33) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Urm]%
+(1.66,3.33) -- (1.33, 3.66) -- (2.33,3.66) -- (2.66,3.33) -- cycle;
+%%---bottom row
+\draw[line join=round,line cap=round,ultra thick,fill=\Ulb]%
+(0,3) -- (-0.33, 3.33) -- (0.66,3.33) -- (1,3) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Umb]%
+(1,3) -- (0.66, 3.33) -- (1.66,3.33) -- (2,3) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Urb]%
+(2,3) -- (1.66, 3.33) -- (2.66,3.33) -- (3,3) -- cycle;%
+\ %%trailing space
+}
+% \end{macrocode}
+%
+% RWDN19D removed DrawRubikLayerFace commands Feb 19 2018
+%
+%
+%
+% \subsection{\hspace{3mm}DrawRubikFlatX commands}
+% \label{sec:codedrawrubikflatcommands}
+%
+% [\textsc{Background}: These commands (new in version 3.0) were modified from the
+% earlier \cmd{\FlatUp}, \cmd{\FlatDown} etc., commands; i.e.,~they were
+% renamed as a set of \cmd{\Draw...} commands so as to make this
+% notation consistent with the other \cmd{\Draw..} commands.
+% Note also that the \cmd{\DrawRubikFace..} commands are essentially
+% these same commands but with their two coordinate arguments X,Y
+% set to $x=0$, $y=0$---see Section~\ref{sec:drawrubikfacecode}]
+%
+% \begin{macro}{\DrawRubikFlatUp}
+% \begin{macro}{\DrawRubikFlatDown}
+% \begin{macro}{\DrawRubikFlatLeft}
+% \begin{macro}{\DrawRubikFlatRight}
+% \begin{macro}{\DrawRubikFlatFront}
+% \begin{macro}{\DrawRubikFlatBack}
+% Each of these commands draws a separate (flat) face (9~facelets).
+% Each command (except \cmd{\DrawRubikFlatFront}) 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 in relation to the cube itself.
+% These commands were motivated by a need to
+% be able to show hidden faces under certain circumstances.
+%
+% Note also that the \cmd{\DrawRubikFlatFront} 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{\DrawRubikFlatUp\{0\}\{3\}}
+% \end{quote}
+% These new commands are also used by the commands \cmd{\DrawRubikCubeF} and
+% \cmd{\DrawRubikCubeSF} 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 a `dx, dy' notation
+% with the \cmd{\DrawRubikFlatDown} command (since dx and dy are already used by the
+% \cmd{\cube@dxdydz...} command), we encode these instead as (\cmd{\ddx}, \cmd{\ddy}).
+%
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macrocode}
+\newcommand{\DrawRubikFlatUp}[2]{%
+\pgfmathsetmacro{\ux}{#1}%
+\pgfmathsetmacro{\uy}{#2}%
+%%---top row
+\draw[line join=round,line cap=round,ultra thick,fill=\Ult]%
+(\ux + 0,\uy + 2) -- (\ux + 0,\uy + 3) -- (\ux + 1,\uy + 3)%
+ -- (\ux + 1,\uy + 2) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Umt]%
+(\ux + 1,\uy + 2) -- (\ux + 1,\uy + 3) -- (\ux + 2,\uy + 3)%
+ -- (\ux + 2,\uy + 2) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Urt]%
+(\ux + 2,\uy + 2) -- (\ux + 2,\uy + 3) -- (\ux + 3,\uy + 3)%
+ -- (\ux + 3,\uy + 2) -- cycle;
+%%-----middle row
+\draw[line join=round,line cap=round,ultra thick,fill=\Ulm]%
+(\ux + 0,\uy + 1) -- (\ux + 0,\uy + 2) -- (\ux + 1,\uy + 2)%
+ -- (\ux + 1,\uy + 1) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Umm]%
+(\ux + 1,\uy + 1) -- (\ux + 1,\uy + 2) -- (\ux + 2,\uy + 2)%
+ -- (\ux + 2,\uy + 1) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Urm]%
+(\ux + 2,\uy + 1) -- (\ux + 2,\uy + 2) -- (\ux + 3,\uy + 2)%
+ -- (\ux + 3,\uy + 1) -- cycle;
+%%----bottom row
+\draw[line join=round,line cap=round,ultra thick,fill=\Ulb]%
+(\ux + 0,\uy + 0) -- (\ux + 0,\uy + 1) -- (\ux + 1,\uy + 1)%
+ -- (\ux + 1,\uy + 0) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Umb]%
+(\ux + 1,\uy + 0) -- (\ux + 1,\uy + 1) -- (\ux + 2,\uy + 1)%
+ -- (\ux + 2,\uy + 0) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Urb]%
+(\ux + 2,\uy + 0) -- (\ux + 2,\uy + 1) -- (\ux + 3,\uy + 1)%
+ -- (\ux + 3,\uy + 0) -- cycle;
+}
+%%-------------------------
+\newcommand{\DrawRubikFlatDown}[2]{%
+\pgfmathsetmacro{\ddx}{#1}%
+\pgfmathsetmacro{\ddy}{#2}%
+%%---top row
+\draw[line join=round,line cap=round,ultra thick,fill=\Dlt]%
+(\ddx + 0,\ddy + 2) -- (\ddx + 0,\ddy + 3) -- (\ddx + 1,\ddy + 3)%
+ -- (\ddx + 1,\ddy + 2) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Dmt]%
+(\ddx + 1,\ddy + 2) -- (\ddx + 1,\ddy + 3) -- (\ddx + 2,\ddy + 3)%
+ -- (\ddx + 2,\ddy + 2) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Drt]%
+(\ddx + 2,\ddy + 2) -- (\ddx + 2,\ddy + 3) -- (\ddx + 3,\ddy + 3)%
+ -- (\ddx + 3,\ddy + 2) -- cycle;
+%%-----middle row
+\draw[line join=round,line cap=round,ultra thick,fill=\Dlm]%
+(\ddx + 0,\ddy + 1) -- (\ddx + 0,\ddy + 2) -- (\ddx + 1,\ddy + 2)%
+ -- (\ddx + 1,\ddy + 1) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Dmm]%
+(\ddx + 1,\ddy + 1) -- (\ddx + 1,\ddy + 2) -- (\ddx + 2,\ddy + 2)%
+ -- (\ddx + 2,\ddy + 1) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Drm]%
+(\ddx + 2,\ddy + 1) -- (\ddx + 2,\ddy + 2) -- (\ddx + 3,\ddy + 2)%
+ -- (\ddx + 3,\ddy + 1) -- cycle;
+%%----bottom row
+\draw[line join=round,line cap=round,ultra thick,fill=\Dlb]%
+(\ddx + 0,\ddy + 0) -- (\ddx + 0,\ddy + 1) -- (\ddx + 1,\ddy + 1)%
+ -- (\ddx + 1,\ddy + 0) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Dmb]%
+(\ddx + 1,\ddy + 0) -- (\ddx + 1,\ddy + 1) -- (\ddx + 2,\ddy + 1)%
+ -- (\ddx + 2,\ddy + 0) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Drb]%
+(\ddx + 2,\ddy + 0) -- (\ddx + 2,\ddy + 1) -- (\ddx + 3,\ddy + 1)%
+ -- (\ddx + 3,\ddy + 0) -- cycle;
+}
+%%-------------------------
+\newcommand{\DrawRubikFlatLeft}[2]{%
+\pgfmathsetmacro{\lx}{#1}%
+\pgfmathsetmacro{\ly}{#2}%
+%%---top row
+\draw[line join=round,line cap=round,ultra thick,fill=\Llt]%
+(\lx + 0, \ly + 2) -- (\lx + 0, \ly + 3) -- (\lx + 1, \ly + 3)%
+ -- (\lx + 1, \ly + 2) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Lmt]%
+(\lx + 1, \ly + 2) -- (\lx + 1, \ly + 3) -- (\lx + 2, \ly + 3)%
+ -- (\lx + 2, \ly + 2) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Lrt]%
+(\lx + 2, \ly + 2) -- (\lx + 2, \ly + 3) -- (\lx + 3, \ly + 3)%
+ -- (\lx + 3, \ly + 2) -- cycle;
+%%-----middle row
+\draw[line join=round,line cap=round,ultra thick,fill=\Llm]%
+(\lx + 0, \ly + 1) -- (\lx + 0, \ly + 2) -- (\lx + 1, \ly + 2)%
+ -- (\lx + 1, \ly + 1) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Lmm]%
+(\lx + 1, \ly + 1) -- (\lx + 1, \ly + 2) -- (\lx + 2, \ly + 2)%
+ -- (\lx + 2, \ly + 1) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Lrm]%
+(\lx + 2, \ly + 1) -- (\lx + 2, \ly + 2) -- (\lx + 3, \ly + 2)%
+ -- (\lx + 3, \ly + 1) -- cycle;
+%%----bottom row
+\draw[line join=round,line cap=round,ultra thick,fill=\Llb]%
+(\lx + 0, \ly + 0) -- (\lx + 0, \ly + 1) -- (\lx + 1, \ly + 1)%
+ -- (\lx + 1, \ly + 0) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Lmb]%
+(\lx + 1, \ly + 0) -- (\lx + 1, \ly + 1) -- (\lx + 2, \ly + 1)%
+ -- (\lx + 2, \ly + 0) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Lrb]%
+(\lx + 2, \ly + 0) -- (\lx + 2, \ly + 1) -- (\lx + 3, \ly + 1)%
+ -- (\lx + 3, \ly + 0) -- cycle;
+}
+%%--------------------------
+\newcommand{\DrawRubikFlatRight}[2]{%
+\pgfmathsetmacro{\rx}{#1}%
+\pgfmathsetmacro{\ry}{#2}%
+%%---top row
+\draw[line join=round,line cap=round,ultra thick,fill=\Rlt]%
+(\rx + 0, \ry + 2) -- (\rx + 0, \ry + 3) -- (\rx + 1, \ry + 3)%
+ -- (\rx + 1, \ry + 2) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Rmt]%
+(\rx + 1, \ry + 2) -- (\rx + 1, \ry + 3) -- (\rx + 2, \ry + 3)%
+ -- (\rx + 2, \ry + 2) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Rrt]%
+(\rx + 2, \ry + 2) -- (\rx + 2, \ry + 3) -- (\rx + 3, \ry + 3)%
+ -- (\rx + 3, \ry + 2) -- cycle;
+%%-----middle row
+\draw[line join=round,line cap=round,ultra thick,fill=\Rlm]%
+(\rx + 0, \ry + 1) -- (\rx + 0, \ry + 2) -- (\rx + 1, \ry + 2)%
+ -- (\rx + 1, \ry + 1) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Rmm]%
+(\rx + 1, \ry + 1) -- (\rx + 1, \ry + 2) -- (\rx + 2, \ry + 2)%
+ -- (\rx + 2, \ry + 1) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Rrm]%
+(\rx + 2, \ry + 1) -- (\rx + 2, \ry + 2) -- (\rx + 3, \ry + 2)%
+ -- (\rx + 3, \ry + 1) -- cycle;
+%%----bottom row
+\draw[line join=round,line cap=round,ultra thick,fill=\Rlb]%
+(\rx + 0, \ry + 0) -- (\rx + 0, \ry + 1) -- (\rx + 1, \ry + 1)%
+ -- (\rx + 1, \ry + 0) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Rmb]%
+(\rx + 1, \ry + 0) -- (\rx + 1, \ry + 1) -- (\rx + 2, \ry + 1)%
+ -- (\rx + 2, \ry + 0) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Rrb]%
+(\rx + 2, \ry + 0) -- (\rx + 2, \ry + 1) -- (\rx + 3, \ry + 1)%
+ -- (\rx + 3, \ry + 0) -- cycle;
+}
+%%-----------------------
+\newcommand{\DrawRubikFlatFront}{%
+%% This command is used /only/ by the \cmd{\DrawRubikCubeF} 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;
+%%
+\draw[line join=round,line cap=round,ultra thick,fill=\Fmt]%
+(1,2) -- (1, 3) -- (2,3) -- (2,2) -- cycle;
+%%
+\draw[line join=round,line cap=round,ultra thick,fill=\Frt]%
+(2,2) -- (2, 3) -- (3,3) -- (3,2) -- cycle;
+%%-----middle row
+\draw[line join=round,line cap=round,ultra thick,fill=\Flm]%
+(0,1) -- (0, 2) -- (1,2) -- (1,1) -- cycle;
+%%
+\draw[line join=round,line cap=round,ultra thick,fill=\Fmm]%
+(1,1) -- (1, 2) -- (2,2) -- (2,1) -- cycle;
+%%
+\draw[line join=round,line cap=round,ultra thick,fill=\Frm]%
+(2,1) -- (2, 2) -- (3,2) -- (3,1) -- cycle;
+%%----bottom row
+\draw[line join=round,line cap=round,ultra thick,fill=\Flb]%
+(0,0) -- (0, 1) -- (1,1) -- (1,0) -- cycle;
+%%
+\draw[line join=round,line cap=round,ultra thick,fill=\Fmb]%
+(1,0) -- (1, 1) -- (2,1) -- (2,0) -- cycle;
+%%
+\draw[line join=round,line cap=round,ultra thick,fill=\Frb]%
+(2,0) -- (2, 1) -- (3,1) -- (3,0) -- cycle;
+}
+%%-------------------------
+\newcommand{\DrawRubikFlatBack}[2]{%
+\pgfmathsetmacro{\bx}{#1}%
+\pgfmathsetmacro{\by}{#2}%
+%%---top row
+\draw[line join=round,line cap=round,ultra thick,fill=\Blt]%
+(\bx + 0,\by + 2) -- (\bx + 0,\by + 3) -- (\bx + 1,\by + 3)%
+ -- (\bx + 1,\by + 2) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Bmt]%
+(\bx + 1,\by + 2) -- (\bx + 1,\by + 3) -- (\bx + 2,\by + 3)%
+ -- (\bx + 2,\by + 2) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Brt]%
+(\bx + 2,\by + 2) -- (\bx + 2,\by + 3) -- (\bx + 3,\by + 3)%
+ -- (\bx + 3,\by + 2) -- cycle;
+%%-----middle row
+\draw[line join=round,line cap=round,ultra thick,fill=\Blm]%
+(\bx + 0,\by + 1) -- (\bx + 0,\by + 2) -- (\bx + 1,\by + 2)%
+ -- (\bx + 1,\by + 1) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Bmm]%
+(\bx + 1,\by + 1) -- (\bx + 1,\by + 2) -- (\bx + 2,\by + 2)%
+ -- (\bx + 2,\by + 1) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Brm]%
+(\bx + 2,\by + 1) -- (\bx + 2,\by + 2) -- (\bx + 3,\by + 2)%
+ -- (\bx + 3,\by + 1) -- cycle;
+%%----bottom row
+\draw[line join=round,line cap=round,ultra thick,fill=\Blb]%
+(\bx + 0,\by + 0) -- (\bx + 0,\by + 1) -- (\bx + 1,\by + 1)%
+ -- (\bx + 1,\by + 0) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Bmb]%
+(\bx + 1,\by + 0) -- (\bx + 1,\by + 1) -- (\bx + 2,\by + 1)%
+ -- (\bx + 2,\by + 0) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Brb]%
+(\bx + 2,\by + 0) -- (\bx + 2,\by + 1) -- (\bx + 3,\by + 1)%
+ -- (\bx + 3,\by + 0) -- cycle;
+}
+% \end{macrocode}
+%
+% \begin{macro}{\DrawRubikCubeF}
+% Draws a standard flat (F) representation of the Rubik
+% cube (colours only). Note that \cmd{\DrawRubikFlatFront} (below)
+% does not take any arguments (x,y).
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeF}{%
+ \DrawRubikFlatUp{0}{3}%
+ \DrawRubikFlatDown{0}{-3}%
+ \DrawRubikFlatLeft{-3}{0}%
+ \DrawRubikFlatFront%
+ \DrawRubikFlatRight{3}{0}%
+ \DrawRubikFlatBack{6}{0}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\DrawRubikCubeSF}
+% Draws a Rubik cube together with the three hidden faces
+% (colours only) in a semi-flat (SF) representation. The (x,y)
+% arguments (below) are for the bottom-left corner of the face.
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSF}{%
+ \DrawRubikCubeRU%
+ \DrawRubikFlatDown{0}{-3}%
+ \DrawRubikFlatLeft{-3}{0}%
+ \DrawRubikFlatBack{4}{1}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsubsection{DrawRubikFaceXSide commands}
+% \label{sec:drawrubikflatxsidecode}
+%
+% These six commands draw a face together with all four sidebars
+% (colours only). They use the \cmd{\DrawRubikFlatX} commands to draw the face,
+% and the \cmd{\side@bar..} commands to draw the sidebars. Since each
+% of the four sides of a face has three small (side) bars, we use a total
+% of 12 side@bar commands for each command.
+%
+% The parameter codes for the \cmd{\side@bar..}
+% commands are as follows (see Section~\ref{sec:side@barcode} for full details).
+% Top (T) and Bottom (B) = left to right;
+% Left (L) and Right (R) = top to bottom;
+%
+% Note that since these commands are quite long, thay all have a
+% slightly more convenient short-hand version whereby the terminal two words
+% are contracted to their two initial letters (see Section~\ref{sec:drawrubikfacecode}).
+% RWDN19B
+%
+% \begin{macro}{\DrawRubikFaceUpSide}
+% Draws the \textsc{up} face together with all four sidebars.
+% \begin{macrocode}
+\newcommand{\DrawRubikFaceUpSide}{%
+\DrawRubikFlatUp{0}{0}%
+%Top is a horizontal sidebar, so 1 = r, 3=l
+\side@barT{1}{\Brt}
+\side@barT{2}{\Bmt}
+\side@barT{3}{\Blt}
+%Left is a vertical sidebar, so 1 = r, 3=l
+\side@barL{1}{\Lrt}
+\side@barL{2}{\Lmt}
+\side@barL{3}{\Llt}
+%Right is a vertical sidebar, so 1 = l, 3=r
+\side@barR{1}{\Rlt}
+\side@barR{2}{\Rmt}
+\side@barR{3}{\Rrt}
+%Bottom is a horizontal sidebar, so 1 = l, 3=r
+\side@barB{1}{\Flt}
+\side@barB{2}{\Fmt}
+\side@barB{3}{\Frt}
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\DrawRubikFaceFrontSide}
+% Draws the \textsc{front} face together with all four sidebars.
+% \begin{macrocode}
+\newcommand{\DrawRubikFaceFrontSide}{%
+\DrawRubikFlatFront{0}{0}%
+%Top
+\side@barT{1}{\Ulb}
+\side@barT{2}{\Umb}
+\side@barT{3}{\Urb}
+%Left
+\side@barL{1}{\Lrb}
+\side@barL{2}{\Lrm}
+\side@barL{3}{\Lrt}
+%Right
+\side@barR{1}{\Rlb}
+\side@barR{2}{\Rlm}
+\side@barR{3}{\Rlt}
+%Bottom
+\side@barB{1}{\Dlt}
+\side@barB{2}{\Dmt}
+\side@barB{3}{\Drt}
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\DrawRubikFaceRightSide}
+% Draws the \textsc{right} face together with all four sidebars.
+% \begin{macrocode}
+\newcommand{\DrawRubikFaceRightSide}{%
+\DrawRubikFlatRight{0}{0}%
+%Top
+\side@barT{1}{\Urb}
+\side@barT{2}{\Urm}
+\side@barT{3}{\Urt}
+%Left
+\side@barL{1}{\Frb}
+\side@barL{2}{\Frm}
+\side@barL{3}{\Frt}
+%Right
+\side@barR{1}{\Blb}
+\side@barR{2}{\Blm}
+\side@barR{3}{\Blt}
+%Bottom
+\side@barB{1}{\Drt}
+\side@barB{2}{\Drm}
+\side@barB{3}{\Drb}
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\DrawRubikFaceLeftSide}
+% Draws the \textsc{left} face together with all four sidebars.
+% \begin{macrocode}
+\newcommand{\DrawRubikFaceLeftSide}{%
+\DrawRubikFlatLeft{0}{0}%
+%Top
+\side@barT{1}{\Ult}
+\side@barT{2}{\Ulm}
+\side@barT{3}{\Ulb}
+%Left
+\side@barL{1}{\Brb}
+\side@barL{2}{\Brm}
+\side@barL{3}{\Brt}
+%Right
+\side@barR{1}{\Flb}
+\side@barR{2}{\Flm}
+\side@barR{3}{\Flt}
+%Bottom
+\side@barB{1}{\Dlb}
+\side@barB{2}{\Dlm}
+\side@barB{3}{\Dlt}
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\DrawRubikFaceBackSide}
+% Draws the \textsc{back} face together with all four sidebars.
+% \begin{macrocode}
+\newcommand{\DrawRubikFaceBackSide}{%
+\DrawRubikFlatBack{0}{0}%
+%Top
+\side@barT{1}{\Urt}
+\side@barT{2}{\Umt}
+\side@barT{3}{\Ult}
+%Left
+\side@barL{1}{\Rrb}
+\side@barL{2}{\Rrm}
+\side@barL{3}{\Rrt}
+%Right
+\side@barR{1}{\Llb}
+\side@barR{2}{\Llm}
+\side@barR{3}{\Llt}
+%Bottom
+\side@barB{1}{\Drb}
+\side@barB{2}{\Dmb}
+\side@barB{3}{\Dlb}
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\DrawRubikFaceDownSide}
+% Draws the \textsc{down} face together with all four sidebars.
+% \begin{macrocode}
+\newcommand{\DrawRubikFaceDownSide}{%
+\DrawRubikFlatDown{0}{0}%
+%Top
+\side@barT{1}{\Flb}
+\side@barT{2}{\Fmb}
+\side@barT{3}{\Frb}
+%Left
+\side@barL{1}{\Llb}
+\side@barL{2}{\Lmb}
+\side@barL{3}{\Lrb}
+%Right
+\side@barR{1}{\Rrb}
+\side@barR{2}{\Rmb}
+\side@barR{3}{\Rlb}
+%Bottom
+\side@barB{1}{\Brb}
+\side@barB{2}{\Bmb}
+\side@barB{3}{\Blb}
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsection{\hspace{3mm}DrawRubikFace commands}
+% \label{sec:drawrubikfacecode}
+%
+% \textsc{Background}: \ The above \cmd{\DrawRubikFlat..} commands were originally just
+% \cmd{\DrawFlat..} commands. They were subsequently copied \& renamed
+% (here) as the more intuitive \cmd{\DrawFace..} commands, since most of
+% the time the user wants just to draw a particular face with or
+% without sidebars.
+%
+% In v5 it was necessary to rename them as \cmd{\DrawRubikFace...} commands
+% since they relate to a 3x3x3 cube. At the same time we also included
+% their more convenient short-hand versions
+% (eg \cmd{\DrawRubikFaceUpSide} $\rightarrow$ \cmd{\DrawRubikFaceUS} etc),
+% as the commands were getting a bit too long.
+%
+% We therefore now deprecate the use of the earlier
+% \cmd{\DrawFace...} commands, although they will be maintained for the
+% moment at least.
+% \begin{macrocode}
+\newcommand{\DrawRubikFaceUp}{\DrawRubikFlatUp{0}{0}}
+\newcommand{\DrawRubikFaceDown}{\DrawRubikFlatDown{0}{0}}
+\newcommand{\DrawRubikFaceLeft}{\DrawRubikFlatLeft{0}{0}}
+\newcommand{\DrawRubikFaceRight}{\DrawRubikFlatRight{0}{0}}
+\newcommand{\DrawRubikFaceFront}{\DrawRubikFlatFront{0}{0}}
+\newcommand{\DrawRubikFaceBack}{\DrawRubikFlatBack{0}{0}}
+% \end{macrocode}
+%% RWDN19A Finally, we create the short-hand versions.
+% \begin{macrocode}
+\newcommand{\DrawRubikFaceU}{\DrawRubikFaceUp}
+\newcommand{\DrawRubikFaceD}{\DrawRubikFaceDown}
+\newcommand{\DrawRubikFaceL}{\DrawRubikFaceLeft}
+\newcommand{\DrawRubikFaceR}{\DrawRubikFaceRight}
+\newcommand{\DrawRubikFaceF}{\DrawRubikFaceFront}
+\newcommand{\DrawRubikFaceB}{\DrawRubikFaceBack}
+\newcommand{\DrawRubikFaceUS}{\DrawRubikFaceUpSide}
+\newcommand{\DrawRubikFaceDS}{\DrawRubikFaceDownSide}
+\newcommand{\DrawRubikFaceLS}{\DrawRubikFaceLeftSide}
+\newcommand{\DrawRubikFaceRS}{\DrawRubikFaceRightSide}
+\newcommand{\DrawRubikFaceFS}{\DrawRubikFaceFrontSide}
+\newcommand{\DrawRubikFaceBS}{\DrawRubikFaceBackSide}
+% \end{macrocode}
+%
+%
+% \subsection{Sidebars (Face)}
+% \label{sec:sidebarcode}
+%
+% Sidebar commands draw narrow bars of colour indicating the
+% side colours of each of the facelets forming the side of
+% a given layer (face). Each Sidebar is the length of a
+% single facelet (see Section~\ref{sec:sidebars}).
+%
+% \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 facelet).
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macrocode}
+\newcommand{\RubikSidebarWidth}[1]{\pgfmathsetmacro{\bw}{#1}}
+\newcommand{\RubikSidebarLength}[1]{\pgfmathsetmacro{\bl}{#1}}
+\newcommand{\RubikSidebarSep}[1]{\pgfmathsetmacro{\bs}{#1}}
+% \end{macrocode}
+% We first set some default values
+% \begin{macrocode}
+\RubikSidebarWidth{0.3}%
+\RubikSidebarLength{1}%
+\RubikSidebarSep{0.3}%
+% \end{macrocode}
+% In order to avoid conflicting nomenclature (between bar and Bar) we recommend
+% using the lowercase `bar' and deprecate the use of `Bar' in commands.
+% For backwards compatibility, however, we will retain the three original `Bar'
+% commands (for the moment at least), as follows:
+% \begin{macrocode}
+\newcommand{\RubikSideBarWidth}[1]{\pgfmathsetmacro{\bw}{#1}}
+\newcommand{\RubikSideBarLength}[1]{\pgfmathsetmacro{\bl}{#1}}
+\newcommand{\RubikSideBarSep}[1]{\pgfmathsetmacro{\bs}{#1}}
+% \end{macrocode}
+%
+%
+%
+%
+% \subsubsection{\hspace{3mm}Drawing and allocating a colour to a single facelet sidebar}
+% \label{sec:side@barcode}
+%
+%
+% Full length face sidebars are really multiple instances of
+% small single facelet bars, each of which is drawn using one of the internal sidebar
+% commands.
+%
+%
+% \begin{figure}[hbt]
+% \centering
+% \ifpdf
+% \includegraphics[height=3cm]{rubik-doc-figD.pdf}
+% \fi
+% \vspace{-5mm}
+% \caption{\label{fig:facenotation}Face-edge and facelet-position codes
+% (see text) }
+% \end{figure}
+%
+%
+% \begin{macro}{\side@barT}
+% \begin{macro}{\side@barB}
+% \begin{macro}{\side@barL}
+% \begin{macro}{\side@barR}
+% There are four \cmd{\side@barX} commands, each with a trailing letter code X, which indicates the
+% position of the sidebar relative to the square face displayed,
+% namely either T (Top), B (Bottom), L (Left) or R (Right)
+% ---see Figure~\ref{fig:facenotation}.
+
+% \cmd{\side@barL}\marg{position-number}\marg{facelet location-code}.
+% Each \cmd{\side@barX} command takes two arguments:
+% The first argument is a number (distance) \marg{$ 1 \mid 2 \mid 3$}
+% from the relevant axis depending on whether it is a vertical or horizontal sidebar
+% (e.g.,~1 = first bar (nearest the origin); 2 = second bar,
+% 3 = third bar).
+%
+% The second argument is the facelet location-code expressed as a command
+% (e.g.,~\cmd{\Lrt}, \cmd{\Dlb} etc. Note that the facelet location
+% uses a three letter code: the first (capital) letter (U, D, L, R, F, B) denotes the \textsc{face};
+% the second (lower-case) letter (l,m,r) is the `x' position in the 3x3 matrix;
+% the third (lower-case) letter (t,m,b) is the `y' position ---see Figure~\ref{fig:facenotation}.
+%
+% \textsc{example}: the following command draws a small single Right sidebar,
+% in the middle position (no.~2), with the colour
+% allocated to the Rlt facelet (left top facelet in the \textsc{right} face.
+% \begin{quote}
+% \verb!\side@barR{2}{\Rlt}!
+% \end{quote}
+% Notice that we use the command \cmd{\Rlt} as the argument; this is because
+% the command is defined as: \verb!\def{\Rlt}{#1}!, and hence the command gets replaced by the
+% colour-code currently allocated to this particular facelet.
+%
+% There are three small rectangular sidebars on each of the four sides
+% of a 3x3 square face, and these are embedded in a coordinate system with origin
+% at the bottom left corner (0,0) of the square face (see Figure~\ref{fig:facenotation}).
+%
+% The \cmd{\side@bar..} command also implements the set (or default)
+% RubikSidebarLength \cmd{\bl}, RubikSidebarWidth \cmd{\bw}
+% and RubikSidebarSep \cmd{\bs} (separation)
+% 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 \cmd{\side@bar..} command in order to work.
+% The start point of the TikZ \cmd{\draw} command for each rectangular sidebar
+% is the bottom Left corner of the sidebar = (\cmd{\dx},\cmd{\dy}).
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \label{sec:nosidebarcode}
+% \begin{macro}{\no@sidebar}
+% The \cmd{\NoSidebar}\marg{colour code} command defines a (single) colour for which
+% sidebars should \textit{not} be drawn (particularly useful when drawing OLL configurations).
+% This idea was suggested by Robert Ma\v{r}\'{\i}k (May 2017) ---see Section~\ref{sec:nosidebar}.
+% {\newline}The principle is that we let the command \cmd{\NoSidebar} define a face colour,
+% and then we use the \verb!\ifthenelse{\equal{#2}{\no@sidebar}}{}{...}! structure
+% inside the \cmd{\side@bar..} commands (see below)
+% to either (a)~draw all sidebars as usual (if \cmd{\NoSidebar} is undefined),
+% or (b)~draw all sidebars \textit{except}
+% those having the \cmd{\NoSidebar} colour (if \cmd{\NoSidebar} colour = \verb!#2!).
+% \newline\textsc{usage}: \verb!\NoSidebar{X}! \ If this command in \textit{not}
+% inside an environment, then its action will continue until it is disabled
+% (undefined) as follows: \verb!\NoSidebar{}!.
+% \begin{macrocode}
+\def\no@sidebar{}%
+\newcommand{\NoSidebar}[1]{\def\no@sidebar{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macrocode}
+\newcommand{\side@barL}[2]{%
+ %% #1 = cubie possn no, #2 = colour
+ \ifthenelse{\equal{#2}{\no@sidebar}}{}{%
+ \pgfmathsetmacro{\blh}{\bl*(0.5)}%
+ \pgfmathsetmacro{\dx}{0 - \bs - \bw}%
+ \pgfmathsetmacro{\dy}{#1-1+0.5-\blh}%
+ \draw[fill=#2] (\dx,\dy) -- (\dx,\dy + \bl)
+ -- (\dx+\bw,\dy+\bl) -- (\dx+\bw,\dy) -- cycle;
+}}
+\newcommand{\side@barR}[2]{%
+ %% #1 = cubie possn no, #2 = colour
+ \ifthenelse{\equal{#2}{\no@sidebar}}{}{%
+ \pgfmathsetmacro{\blh}{\bl*(0.5)}%
+ \pgfmathsetmacro{\dx}{3 + \bs}%
+ \pgfmathsetmacro{\dy}{#1 -1+0.5-\blh}%
+ \draw[fill=#2] (\dx,\dy) -- (\dx,\dy + \bl)
+ -- (\dx+\bw,\dy+\bl) -- (\dx+\bw,\dy) -- cycle;
+}}
+\newcommand{\side@barT}[2]{%
+ %% #1 = cubie possn no, #2 = colour
+ \ifthenelse{\equal{#2}{\no@sidebar}}{}{%
+ \pgfmathsetmacro{\blh}{\bl*(0.5)}%
+ \pgfmathsetmacro{\dx}{#1 -1+0.5-\blh}%
+ \pgfmathsetmacro{\dy}{3 +\bs}%
+ \draw[fill=#2] (\dx,\dy) -- (\dx,\dy + \bw)
+ -- (\dx+\bl,\dy+\bw) -- (\dx+\bl,\dy) -- cycle;
+}}
+\newcommand{\side@barB}[2]{%
+ %% #1 = cubie possn no, #2 = colour
+ \ifthenelse{\equal{#2}{\no@sidebar}}{}{%
+ \pgfmathsetmacro{\blh}{\bl*(0.5)}%
+ \pgfmathsetmacro{\dx}{#1 -1+0.5-\blh}%
+ \pgfmathsetmacro{\dy}{0 -\bs-\bw}%
+ \draw[fill=#2] (\dx,\dy) -- (\dx,\dy + \bw)
+ -- (\dx+\bl,\dy+\bw) -- (\dx+\bl,\dy) -- cycle;
+}}
+% \end{macrocode}
+%
+% RWDN19C removed 20:17:2 and 20:17:3 19 Feb 2018
+%
+%
+%
+%
+%
+%
+% \subsection{Sidebars (Cube)}
+% \label{sec:sidebarscubecode}
+%
+%
+% In order to position sidebars adjacent to a Rubik Cube (ie in 3D)
+% requires that we first make some new \cmd{\side@bar..}
+% commands for drawing sidebars adjacent to the \textsc{back} face of the cube
+% (we have already made the macros for the front
+% face sidebars---see Section~\ref{sec:sidebarcode}).
+% Furthermore, these new macros need to be tailored to each of the
+% four standard cube viewing directions RU, LU, RD, LD.
+%
+% Finally, the USER commands for drawing these sidebars need
+% to accommodate (a)~some code for identifying each set of sidebars,
+% and (b)~the viewing direction. So, for example, a USER command for
+% drawing the sidebars associated with the cube edge formed
+% by the \textsc{right} face and the \textsc{back} face
+% (lets define this as the RB sidebar) as viewed from the RU direction,
+% might be something like \cmd{\DrawRubikCubeSidebarRBRU}.
+% Since this is not particularly user-friendly,
+% we can improve on this slightly for the USER by
+% (a)~defining the sidebar as \texttt{SidebarRB}, and
+% (b)~appending the view direction in a curly bracket, say as \verb!{RU}!.
+% This allows a more intuitive command structure for the USER,
+% as follows: \verb!\DrawRubikCubeSidebarRB{RU}!.
+% We then use the \cmd{\@join} command to append the string \verb!RU! to the string
+% \verb!DrawRubicCubeSidebarRB! forming the (internal)
+% command \cmd{\DrawRubicCubeSidebarRBRU}.
+%
+% In the following we will group the code according to to the view
+% direction (RU, LU, RD, LD).
+%
+%
+%
+% \subsubsection{Sidebars: RU view}
+%
+% \subsubsection*{Right-Back vert sidebar (RU view)}
+%
+%
+% Need to write a new command for this position
+% modified from \cmd{\side@barR} (in Section 20.16.1)
+% draws only a single small bar
+% each of the three small bars has a numbered position (1,2,3);
+% (dx,dy) = bottom Left corner of single facelet bar
+% \begin{macrocode}
+\newcommand{\side@barRubikRbackRU}[2]{%
+ %% #1 = cubie possn no, #2 = colour
+ %% dx --> dx+1
+ %% dy --> dy+1
+ \ifthenelse{\equal{#2}{\no@sidebar}}{}{%
+ \pgfmathsetmacro{\blh}{\bl*(0.5)}%
+ \pgfmathsetmacro{\dx}{3 + \bs +1}%
+ \pgfmathsetmacro{\dy}{#1 -1+0.5-\blh +1}%
+ \draw[fill=#2] (\dx,\dy) -- (\dx,\dy + \bl)
+ -- (\dx+\bw,\dy+\bl) -- (\dx+\bw,\dy) -- cycle;
+}}
+% \end{macrocode}
+% Make the RB (RightBack) version;
+% bar 1 is at the bottom
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarRBRU}{%
+\side@barRubikRbackRU{3}{\Blt}%
+\side@barRubikRbackRU{2}{\Blm}%
+\side@barRubikRbackRU{1}{\Blb}%
+}
+% \end{macrocode}
+% Now do the reverse (BR) = RB
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarBRRU}{\DrawRubikCubeSidebarRBRU}
+% \end{macrocode}
+% Make the join commands
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarRB}[1]{\@join{\DrawRubikCubeSidebarRB}{#1}}
+\newcommand{\DrawRubikCubeSidebarBR}[1]{\@join{\DrawRubikCubeSidebarBR}{#1}}
+% \end{macrocode}
+%
+%
+% \medskip
+%
+% \subsubsection*{Up-Back horiz sidebar (RU view)}
+%
+%
+% Need to write a new command for this position
+% modified from \cmd{\side@barT} (in Section 20.16.1)
+% draws only a single small bar
+% each of the three small bars has a numbered position (1,2,3);
+% (dx,dy) = bottom Left corner of single facelet bar
+% \begin{macrocode}
+\newcommand{\side@barRubikTbackRU}[2]{%
+ %% #1 = cubie possn no; #2 = colour
+ %% dx --> dx+1
+ %% dy --> dy+1
+ \ifthenelse{\equal{#2}{\no@sidebar}}{}{%
+ \pgfmathsetmacro{\blh}{\bl*(0.5)}%
+ \pgfmathsetmacro{\dx}{#1 -1+0.5-\blh +1}%
+ \pgfmathsetmacro{\dy}{3 +\bs +1}%
+ \draw[fill=#2] (\dx,\dy) -- (\dx,\dy + \bw)
+ -- (\dx+\bl,\dy+\bw) -- (\dx+\bl,\dy) -- cycle;
+}}
+% \end{macrocode}
+% Make the UB (Up-Back) version;
+% bar 1 is at the left, 3 on the rhs (as we look at the image)
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarUBRU}{%
+\side@barRubikTbackRU{1}{\Brt}%
+\side@barRubikTbackRU{2}{\Bmt}%
+\side@barRubikTbackRU{3}{\Blt}%
+}
+% \end{macrocode}
+% Now do the reverse (BU) = UB
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarBURU}{\DrawRubikCubeSidebarUBRU}
+% \end{macrocode}
+% Make the join commands
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarUB}[1]{\@join{\DrawRubikCubeSidebarUB}{#1}}
+\newcommand{\DrawRubikCubeSidebarBU}[1]{\@join{\DrawRubikCubeSidebarBU}{#1}}
+% \end{macrocode}
+%
+%
+% \medskip
+%
+% \subsubsection*{Front-Left vert sidebar (RU view)}
+%
+% For the front face we can use the regular \cmd{side@barL} commands
+% since it is the same as for an ordinary face sidebar
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarFLRU}{%
+\side@barL{3}{\Lrt}%
+\side@barL{2}{\Lrm}%
+\side@barL{1}{\Lrb}%
+}
+% \end{macrocode}
+% Now do the reverse (LF)
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarLFRU}{\DrawRubikCubeSidebarFLRU}
+% \end{macrocode}
+% Now do the two join commands
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarFL}[1]{\@join{\DrawRubikCubeSidebarFL}{#1}}
+\newcommand{\DrawRubikCubeSidebarLF}[1]{\@join{\DrawRubikCubeSidebarLF}{#1}}
+% \end{macrocode}
+%
+%
+% \medskip
+%
+% \subsubsection*{Front-Down horizontal sidebar (RU view)}
+%
+% Horiz sidebar, so 1 at the left, 2=middle, 3= rhs)
+% here we have to use the B for bottom (of front face) and the
+% facelets of the top row of the Down face
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarFDRU}{%
+\side@barB{1}{\Dlt}%
+\side@barB{2}{\Dmt}%
+\side@barB{3}{\Drt}%
+}
+% \end{macrocode}
+% Now do the reverse (DF) = FD
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarDFRU}{\DrawRubikCubeSidebarFDRU}
+% \end{macrocode}
+% Now do the two join commands
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarFD}[1]{\@join{\DrawRubikCubeSidebarFD}{#1}}
+\newcommand{\DrawRubikCubeSidebarDF}[1]{\@join{\DrawRubikCubeSidebarDF}{#1}}
+% \end{macrocode}
+% But FD-LU is the same as FD-RU, so need to make copies of each
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarDFLU}{\DrawRubikCubeSidebarDFRU}
+\newcommand{\DrawRubikCubeSidebarFDLU}{\DrawRubikCubeSidebarFDRU}
+% \end{macrocode}
+%
+%
+% \medskip
+%
+% \subsubsection{Sidebars: LU view}
+%
+%
+% \subsubsection*{Left-Back vert sidebar (LU view)}
+%
+% Need to write a new command for this position
+% modified from \cmd{\side@barL} (in Section 20.16.1)
+% draws only a single small bar
+% each of the three small bars has a numbered position (1,2,3);
+% (dx,dy) = bottom Left corner of single facelet bar
+% \begin{macrocode}
+\newcommand{\side@barRubikLbackLU}[2]{%
+ %% #1 = cubie possn no, #2 = colour
+ %% dx --> dx-1
+ %% dy --> dy+1
+ \ifthenelse{\equal{#2}{\no@sidebar}}{}{%
+ \pgfmathsetmacro{\blh}{\bl*(0.5)}%
+ \pgfmathsetmacro{\dx}{0 - \bs -\bw -1}%
+ \pgfmathsetmacro{\dy}{#1 -1+0.5-\blh +1}%
+ \draw[fill=#2] (\dx,\dy) -- (\dx,\dy + \bl)
+ -- (\dx+\bw,\dy+\bl) -- (\dx+\bw,\dy) -- cycle;
+}}
+% \end{macrocode}
+% Make the LB (LeftBack) version;
+% bar 1 is at the bottom
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarLBLU}{%
+\side@barRubikLbackLU{3}{\Brt}%
+\side@barRubikLbackLU{2}{\Brm}%
+\side@barRubikLbackLU{1}{\Brb}%
+}
+% \end{macrocode}
+% Now do the reverse (BL) = LB
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarBLLU}{\DrawRubikCubeSidebarLBLU}
+% \end{macrocode}
+% Make the join commands
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarLB}[1]{\@join{\DrawRubikCubeSidebarLB}{#1}}
+\newcommand{\DrawRubikCubeSidebarBL}[1]{\@join{\DrawRubikCubeSidebarBL}{#1}}
+% \end{macrocode}
+%
+%
+% \medskip
+%
+% \subsubsection*{Up-Back horizontal sidebar (LU view)}
+%
+% Modified from \cmd{\side@barT} (in Section 20.16.1)
+% draws only a single small bar
+% each of the three small bars has a numbered position (1,2,3);
+% (dx,dy) = bottom Left corner of single facelet bar
+% \begin{macrocode}
+\newcommand{\side@barRubikTbackLU}[2]{%
+ %% #1 = cubie possn no; #2 = colour
+ %% dx --> dx-1
+ %% dy --> dy+1
+ \ifthenelse{\equal{#2}{\no@sidebar}}{}{%
+ \pgfmathsetmacro{\blh}{\bl*(0.5)}%
+ \pgfmathsetmacro{\dx}{#1 -1+0.5-\blh -1}%
+ \pgfmathsetmacro{\dy}{3 +\bs +1}%
+ \draw[fill=#2] (\dx,\dy) -- (\dx,\dy + \bw)
+ -- (\dx+\bl,\dy+\bw) -- (\dx+\bl,\dy) -- cycle;
+}}
+% \end{macrocode}
+% Make the UB (Up-Back) version;
+% bar 1 is at the left, 3 on the rhs (as we look at the image)
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarUBLU}{%
+\side@barRubikTbackLU{1}{\Brt}%
+\side@barRubikTbackLU{2}{\Bmt}%
+\side@barRubikTbackLU{3}{\Blt}%
+}
+% \end{macrocode}
+% Now do the reverse (BU) = UB
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarBULU}{\DrawRubikCubeSidebarUBLU}
+% \end{macrocode}
+% Do not need to make the join commands
+% as the USER commands for BU and UB are the same as for the RU.
+%
+%
+% \medskip
+%
+% \subsubsection*{Front-Right vertical sidebar (LU view)}
+%
+% Only needed for the LU view and LD.
+% for the front face we can use the regular side@barR commands
+% since it is the same as for an ordinary face sidebar RHS
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarFRLU}{%
+\side@barR{3}{\Rlt}%
+\side@barR{2}{\Rlm}%
+\side@barR{1}{\Rlb}%
+}
+% \end{macrocode}
+% Now do the reverse (RF)
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarRFLU}{\DrawRubikCubeSidebarFRLU}
+% \end{macrocode}
+% Now do the two join commands
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarFR}[1]{\@join{\DrawRubikCubeSidebarFR}{#1}}
+\newcommand{\DrawRubikCubeSidebarRF}[1]{\@join{\DrawRubikCubeSidebarRF}{#1}}
+% \end{macrocode}
+%
+%
+%
+%
+% \subsubsection{Sidebars: RD view}
+%
+% \medskip
+%
+% \subsubsection*{Front-Up horizontal sidebar (RD view)}
+%
+% Horiz sidebar, so 1 at the left, 2=middle, 3= rhs
+% here we have to use the T for bottom (of front face) and the
+% facelets of the top row of the Down face
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarFURD}{%
+\side@barT{1}{\Ulb}%
+\side@barT{2}{\Umb}%
+\side@barT{3}{\Urb}%
+}
+% \end{macrocode}
+% Now do the reverse (UF) = FU
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarUFRD}{\DrawRubikCubeSidebarFURD}
+% \end{macrocode}
+% Now do the two join commands
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarFU}[1]{\@join{\DrawRubikCubeSidebarFU}{#1}}
+\newcommand{\DrawRubikCubeSidebarUF}[1]{\@join{\DrawRubikCubeSidebarUF}{#1}}
+% \end{macrocode}
+%
+% \medskip
+%
+% \subsubsection*{Front-Left vertical sidebar (RD view)}
+%
+%
+%
+% Front LEFT (RD view = same as for RU)
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarFLRD}{\DrawRubikCubeSidebarFLRU}
+\newcommand{\DrawRubikCubeSidebarLFRD}{\DrawRubikCubeSidebarLFRU}
+% \end{macrocode}
+%
+%
+% \medskip
+%
+% \subsubsection*{Right-Back vertical sidebar (RD view)}
+%
+% Modified from \cmd{\side@barR} (in Section 20.16.1)
+% draws only a single small bar
+% each of the three small bars has a numbered position (1,2,3);
+% (dx,dy) = bottom Left corner of single facelet bar
+% \begin{macrocode}
+\newcommand{\side@barRubikRbackRD}[2]{%
+ %% #1 = cubie possn no, #2 = colour
+ %% dx --> dx+1
+ %% dy --> dy-1
+ \ifthenelse{\equal{#2}{\no@sidebar}}{}{%
+ \pgfmathsetmacro{\blh}{\bl*(0.5)}%
+ \pgfmathsetmacro{\dx}{3 + \bs +1}%
+ \pgfmathsetmacro{\dy}{#1 -1+0.5-\blh -1}%
+ \draw[fill=#2] (\dx,\dy) -- (\dx,\dy + \bl)
+ -- (\dx+\bw,\dy+\bl) -- (\dx+\bw,\dy) -- cycle;
+}}
+% \end{macrocode}
+% Make the RB (RightBack) version;
+% bar 1 is at the bottom
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarRBRD}{%
+\side@barRubikRbackRD{3}{\Blt}%
+\side@barRubikRbackRD{2}{\Blm}%
+\side@barRubikRbackRD{1}{\Blb}%
+}
+% \end{macrocode}
+% Now do the reverse (BR) = RB
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarBRRD}{\DrawRubikCubeSidebarRBRD}
+% \end{macrocode}
+% Do NOT need to make the join commands (same as for the RU view)
+%
+%
+% \medskip
+%
+% \subsubsection*{Down-Back horizotal sidebar (RD view)}
+%
+% Modified from \cmd{\side@barB} (in Section 20.16.1)
+% draws only a single small bar
+% each of the three small bars has a numbered position (1,2,3);
+% (dx,dy) = bottom Left corner of single facelet bar
+% \begin{macrocode}
+\newcommand{\side@barRubikBbackRD}[2]{%
+ %% #1 = cubie possn no; #2 = colour
+ %% dx --> dx+1
+ %% dy --> dy-1
+ \ifthenelse{\equal{#2}{\no@sidebar}}{}{%
+ \pgfmathsetmacro{\blh}{\bl*(0.5)}%
+ \pgfmathsetmacro{\dx}{#1 -1+0.5-\blh +1}%
+ \pgfmathsetmacro{\dy}{0 -\bs - \bw -1}%
+ \draw[fill=#2] (\dx,\dy) -- (\dx,\dy + \bw)
+ -- (\dx+\bl,\dy+\bw) -- (\dx+\bl,\dy) -- cycle;
+}}
+% \end{macrocode}
+% Make the DB (Down-Back) version;
+% bar 1 is at the left, 3 on the rhs (as we look at the image)
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarDBRD}{%
+\side@barRubikBbackRD{1}{\Brb}%
+\side@barRubikBbackRD{2}{\Bmb}%
+\side@barRubikBbackRD{3}{\Blb}%
+}
+% \end{macrocode}
+% Now do the reverse (BD) = DB
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarBDRD}{\DrawRubikCubeSidebarDBRD}
+% \end{macrocode}
+% Make the join commands
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarDB}[1]{\@join{\DrawRubikCubeSidebarDB}{#1}}
+\newcommand{\DrawRubikCubeSidebarBD}[1]{\@join{\DrawRubikCubeSidebarBD}{#1}}
+% \end{macrocode}
+%
+%
+%
+% \subsubsection{Sidebars: LD view}
+%
+%
+% \medskip
+%
+% \subsubsection*{Front-Up horizontal sidebar (LD view)}
+%
+% But FR (LD view) is the same as for (RU view), (see above)
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarFULD}{\DrawRubikCubeSidebarFURD}
+\newcommand{\DrawRubikCubeSidebarUFLD}{\DrawRubikCubeSidebarUFRD}
+% \end{macrocode}
+%
+% \medskip
+%
+% \subsubsection*{Front-Right vertical sidebar (LD view)}
+%
+% Front Right (LDview) = same as for (LU view), (see above)
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarFRLD}{\DrawRubikCubeSidebarFRLU}
+\newcommand{\DrawRubikCubeSidebarRFLD}{\DrawRubikCubeSidebarRFLU}
+% \end{macrocode}
+%
+%
+% \medskip
+%
+% \subsubsection*{Left-Back vertical sidebar (LD view)}
+%
+% Modified from \cmd{\side@barL} (in Section 20.16.1)
+% draws only a single small bar
+% each of the three small bars has a numbered position (1,2,3);
+% (dx,dy) = bottom Left corner of single facelet bar
+% \begin{macrocode}
+\newcommand{\side@barRubikLbackLD}[2]{%
+ %% #1 = cubie possn no, #2 = colour
+ %% dx --> dx-1
+ %% dy --> dy-1
+ \ifthenelse{\equal{#2}{\no@sidebar}}{}{%
+ \pgfmathsetmacro{\blh}{\bl*(0.5)}%
+ \pgfmathsetmacro{\dx}{0 - \bs -\bw -1}%
+ \pgfmathsetmacro{\dy}{#1 -1+0.5-\blh -1}%
+ \draw[fill=#2] (\dx,\dy) -- (\dx,\dy + \bl)
+ -- (\dx+\bw,\dy+\bl) -- (\dx+\bw,\dy) -- cycle;
+}}
+% \end{macrocode}
+% Make the LB (LeftBack) version;
+% bar 1 is at the bottom
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarLBLD}{%
+\side@barRubikLbackLD{3}{\Brt}%
+\side@barRubikLbackLD{2}{\Brm}%
+\side@barRubikLbackLD{1}{\Brb}%
+}
+% \end{macrocode}
+% Now do the reverse (BL) = LB
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarBLLD}{\DrawRubikCubeSidebarLBLD}
+% \end{macrocode}
+% Do NOT need to make the join commands (same as for the LU view)
+%
+%
+% \medskip
+%
+% \subsubsection*{Down-Back horizontal sidebar (LD view)}
+%
+%
+% Modified from \cmd{\side@barB} (in Section 20.16.1)
+% draws only a single small bar
+% each of the three small bars has a numbered position (1,2,3);
+% (dx,dy) = bottom Left corner of single facelet bar
+% \begin{macrocode}
+\newcommand{\side@barRubikBbackLD}[2]{%
+ %% #1 = cubie possn no; #2 = colour
+ %% dx --> dx-1
+ %% dy --> dy-1
+ \ifthenelse{\equal{#2}{\no@sidebar}}{}{%
+ \pgfmathsetmacro{\blh}{\bl*(0.5)}%
+ \pgfmathsetmacro{\dx}{#1 -1+0.5-\blh -1}%
+ \pgfmathsetmacro{\dy}{0 -\bs - \bw -1}%
+ \draw[fill=#2] (\dx,\dy) -- (\dx,\dy + \bw)
+ -- (\dx+\bl,\dy+\bw) -- (\dx+\bl,\dy) -- cycle;
+}}
+% \end{macrocode}
+% Make the DB (Down-Back) version;
+% bar 1 is at the left, 3 on the rhs (as we look at the image)
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarDBLD}{%
+\side@barRubikBbackLD{1}{\Brb}%
+\side@barRubikBbackLD{2}{\Bmb}%
+\side@barRubikBbackLD{3}{\Blb}%
+}
+% \end{macrocode}
+% Now do the reverse (BD) = DB
+% \begin{macrocode}
+\newcommand{\DrawRubikCubeSidebarBDLD}{\DrawRubikCubeSidebarDBLD}
+% \end{macrocode}
+% Do NOT need to make the join commands (same as for the RD view
+%
+%
+%
+%
+% \subsection{\hspace{3mm}DrawNCube 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 (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:
+% \begin{quote}
+% \#1 = number of cubies ($n>0$) along each side,
+% {\newline}\#2, \#3, \#4 = colours 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]{%
+ \pgfmathsetmacro{\ncubes}{#1-1}%
+%% need to subtract 1 from the given number of cubies per side
+%% to avoid the origin of the initial cube to be displaced
+ \foreach \x in {0,...,\ncubes}{%
+ \foreach \y in {0,...,\ncubes}{%
+ \foreach \z in {0,...,\ncubes}{%
+ \cube@dxdydz{1}{#2}{#3}{#4}{\x}{\y}{\z}%
+ }}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\cube@dxdydz}
+% This internal command is used only by the \cmd{\DrawNCubeAll} command
+% (see above). The original version of this command was developed
+% by Peter Bartal (see Bartal, 2011).
+% It was later modified (2012) by RWD Nickalls (to implement a more
+% intuitive X, Y, Z ordering of the face colour parameters).
+%
+% The cube need not be in the origin, the distances of
+% the \textsc{down}-behind [L] corner from
+% the origin are taken as parameters 5,6,7.
+% The command takes 7 ordered arguments:
+% \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}{X}{Y}{Z}{x}{y}{z}|
+%
+% {\noindent}The original code
+% |\pgfmathparse{#1+#5}\let\dy\pgfmathresult|
+% {\newline} was changed to the more intuitive |\pgfmathsetmacro{\dx}{#1+#5}|
+% (suggested by Peter Grill 2011).
+%
+% \textsc{changes}: RWD Nickalls (2012):
+% (1) added the [line join=round,line cap=round]
+% options to each of the TikZ \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 to the X, Y, Z face colours, as shown above).
+%
+% \begin{macrocode}
+\newcommand{\cube@dxdydz}[7]{%
+ \pgfmathsetmacro{\dx}{#1+#5}%
+%% calculates the 'displacement' (distance from the origin) of the
+%% far corners of the cube along the x axis from the arguments
+ \pgfmathsetmacro{\dy}{#1+#6}%
+%% calculates the 'displacement' (distance from the origin) of the
+%% far corners of the cube along the y axis from the arguments
+ \pgfmathsetmacro{\dz}{#1+#7}%
+%% calculates the 'displacement' (distance from the origin) of the
+%% far corners of the cube along the z axis from the arguments
+%% Draw FRONT face (using the X colour = #4)
+ \draw[line join=round,line cap=round,ultra thick,fill=#4]%
+ (#5,#6,\dz) -- (\dx,#6,\dz) -- (\dx,\dy,\dz) -- (#5,\dy,\dz) -- cycle;
+%% The 'rectangle' command does not work with 3D coordinates,
+%% so this is the way to draw the squares with space coordinates
+%% Draw UP face (using the Y colour = #3)
+ \draw[line join=round,line cap=round,ultra thick,fill=#3]%
+ (#5,\dy,\dz) -- (\dx,\dy,\dz) -- (\dx,\dy,#7) -- (#5,\dy,#7) -- cycle;
+%% Draw RIGHT face (using the X colour = #2)
+ \draw[line join=round,line cap=round,ultra thick,fill=#2]%
+ (\dx,#6,\dz) -- (\dx,#6,#7) -- (\dx,\dy,#7) -- (\dx,\dy,\dz) -- cycle;
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsection{\hspace{3mm}Drawing single cubies}
+%
+% \begin{macro}{\Cubiedx}
+% \begin{macro}{\Cubiedy}
+% These two commands set the value of the two length parameters
+% \texttt{cx} and \texttt{cy}, and allow the user to vary the size
+% (adjust \texttt{cy}) and horizontal viewpoint (adjust \texttt{cx})
+% of a single cubie (described in more detail in the \rubikcube\
+% package documentation).
+% Note that we cannot use the names \texttt{dx}, \texttt{dy} for the
+% variables here since these names have been allocated already
+% (see above). However, we can 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}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% We now set the default values (cx=cy=0.4)
+% \begin{macrocode}
+\Cubiedx{0.4}
+\Cubiedy{0.4}
+% \end{macrocode}
+%
+%
+% \begin{macro}{\DrawCubieRU}
+% \begin{macro}{\DrawCubieRD}
+% \begin{macro}{\DrawCubieLU}
+% \begin{macro}{\DrawCubieLD}
+% These four commands draw a single cubie from the RightUp, RightDown,
+% LeftUp, LeftDown viewpoint. The viewpoint is specified using an appended
+% two-letter XY ordered viewpoint code: either RU, RD, LU, LD.
+% These commands take three arguments, namely three different XYZ
+% ordered colour codes (R,O,Y,G,B,W,X).
+% \newline\textsc{format}: \cmd{\DrawCubieRU}\marg{Xcolour}\marg{Ycolour}\marg{Zcolour}
+% \newline\textsc{usage}: |\DrawCubieRU{G}{B}{W}|
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macrocode}
+\newcommand{\DrawCubieRU}[3]{%
+%% Front face (z)
+\draw[line join=round,line cap=round,ultra thick,fill=#3]%
+ (0,0) -- (0, 1) -- (1, 1) -- (1,0) -- cycle;
+%% Up face(y)
+\draw[line join=round,line cap=round,ultra thick,fill=#2]%
+ (0,1) -- (\cx, 1+\cy) -- (1+\cx,1+\cy) -- (1,1) -- cycle;
+%% Right face(x)
+\draw[line join=round,line cap=round,ultra thick,fill=#1]%
+ (1,0) -- (1,1) -- (1+\cx,1+\cy) -- (1+\cx, \cy) -- cycle;
+}
+\newcommand{\DrawCubieRD}[3]{%
+%% Front face (z)
+\draw[line join=round,line cap=round,ultra thick,fill=#3]%
+ (0,0) -- (0, 1) -- (1, 1) -- (1,0) -- cycle;
+%% Down face (y)
+\draw[line join=round,line cap=round,ultra thick,fill=#2]%
+ (\cx,-\cy) -- (0, 0) -- (1,0) -- (1+\cx,-\cy) -- cycle;
+%% Right face (x)
+\draw[line join=round,line cap=round,ultra thick,fill=#1]%
+ (1,0) -- (1,1) -- (1+\cx,-\cy+1) -- (1+\cx, -\cy) -- cycle;
+}
+\newcommand{\DrawCubieLD}[3]{%
+%% Front face (z)
+\draw[line join=round,line cap=round,ultra thick,fill=#3]%
+ (0,0) -- (0, 1) -- (1, 1) -- (1,0) -- cycle;
+%% Down face (y)
+\draw[line join=round,line cap=round,ultra thick,fill=#2]%
+ (-\cx,-\cy) -- (0, 0) -- (1,0) -- (1-\cx,-\cy) -- cycle;
+%% Left face (x)
+\draw[line join=round,line cap=round,ultra thick,fill=#1]%
+ (-\cx,-\cy) -- (-\cx,-\cy+1) -- (0,1) -- (0,0) -- cycle;
+}
+\newcommand{\DrawCubieLU}[3]{%
+%% Front face (z)
+\draw[line join=round,line cap=round,ultra thick,fill=#3]%
+ (0,0) -- (0, 1) -- (1, 1) -- (1,0) -- cycle;
+%% Up face (y)
+\draw[line join=round,line cap=round,ultra thick,fill=#2]%
+ (-\cx,1+\cy) -- (1-\cx, 1+\cy) -- (1,1) -- (0,1) -- cycle;
+%% Left face (x)
+\draw[line join=round,line cap=round,ultra thick,fill=#1]%
+ (-\cx, \cy) -- (-\cx,\cy+1) -- (0,1) -- (0,0) -- cycle;
+}
+% \end{macrocode}
+%
+%
+% \subsection{\hspace{3mm}Text cubies}
+%
+% \begin{macro}{\textCubieRU}
+% \begin{macro}{\textCubieRD}
+% \begin{macro}{\textCubieLU}
+% \begin{macro}{\textCubieLD}
+% These four commands draw a single `text' cubie from the RightUp, RightDown,
+% LeftUp, LeftDown viewpoint.
+% They are `text' forms of the \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 (since just three faces are visible with this
+% cube format), namely three different XYZ ordered colour codes (R,O,Y,G,B,W,X).
+% \newline\textsc{format}: \cmd{\textCubieRU}\marg{Xcolour}\marg{Ycolour}\marg{Zcolour}
+% \newline\textsc{usage}: |\textCubieRU{G}{B}{W}|
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macrocode}
+\newcommand{\textCubieRU}[3]{%
+\begin{minipage}{0.66cm}
+\centering
+\begin{tikzpicture}[scale=0.5]
+\Cubiedx{0.4}\Cubiedy{0.4}
+\DrawCubieRU{#1}{#2}{#3}
+\end{tikzpicture}%
+\end{minipage}
+}
+\newcommand{\textCubieRD}[3]{%
+\begin{minipage}{0.66cm}
+\centering
+\begin{tikzpicture}[scale=0.5]
+\Cubiedx{0.4}\Cubiedy{0.4}
+\DrawCubieRD{#1}{#2}{#3}
+\end{tikzpicture}%
+\end{minipage}
+}
+\newcommand{\textCubieLD}[3]{%
+\begin{minipage}{0.66cm}
+\centering
+\begin{tikzpicture}[scale=0.5]
+\Cubiedx{0.4}\Cubiedy{0.4}
+\DrawCubieLD{#1}{#2}{#3}
+\end{tikzpicture}%
+\end{minipage}
+}
+\newcommand{\textCubieLU}[3]{%
+\begin{minipage}{0.66cm}
+\centering
+\begin{tikzpicture}[scale=0.5]
+\Cubiedx{0.4}\Cubiedy{0.4}
+\DrawCubieLU{#1}{#2}{#3}
+\end{tikzpicture}%
+\end{minipage}
+}
+% \end{macrocode}
+%
+%
+% \subsection{\hspace{3mm}Rotation commands}
+% \label{sec:rotationcommandscode}
+%
+%
+% \subsubsection{\hspace{3mm}Introduction}
+%
+% We use a special prefix notation to denote each of four different representations
+% of the various Rubik cube rotations as follows: the name of the Rubik 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.
+%
+% In version~3.0, however, all the rotation commands were also made available to the user
+% in the much more intuitive form stem\{argument\} form, for~example,
+% |\rrh{D}|. In practice, this `argument' form actually generates the original non-argument
+% form by the use of the internal macro |\@join|.
+% For~example, \verb!\rrh{D}! $\rightarrow$ join(\verb!\rrh! + \verb!D!) $\rightarrow$ \verb!\rrhD!
+% (see Section~\ref{sec:cmdsusingjoin} for details).
+%
+% The hieroglyphs are of two types: `arrow' glyphs (all exactly square),
+% and `letter' glyphs (mostly square, but many are rectangular); however both
+% types are designed to have the same height so they sit nicely when arranged side-by-side.
+% A lot of special macros for generating these glyphs are described below
+% in Section~\ref{sec:usefulinternalcommands} (and also in Section~\ref{sec:codedrawnotationbox}).
+%
+% The `arrow' hieroglyphs are built up in stages using TikZ. We first create a
+% command for drawing the square (\cmd{\DrawNotationBox};
+% see Section~\ref{sec:codedrawnotationbox}) and then draw the
+% contents (lines, arrows, arcs of circles). For an example,
+% see the D~form \rrh{D}\ constructed in Section~\ref{sec:coderotationD}.
+%
+% The `letter' hieroglyphs (glyphs for which the rotations cannot be seen from the front,
+% and hence cannot have arrows) just give a letter representation of the rotation
+% (say, Bw for `back wide'). These glyphs are therefore made using an fbox (for convenience),
+% and therefore these are sometimes not square. Some vertical fine-tuning using
+% the \verb!\raisebox! command is often required to force these `letter' glyphs to
+% have the same vertical position as their `arrow' cousins. A typical example
+% is the form \rrh{Bw}\ which is detailed in Section~\ref{sec:coderotationBw}.
+%
+% The presence of small overfilled \cmd{\hbox}es associated with these squares
+% were originally checked for using the \texttt{ltugboat.cls}, and all fixed mainly
+% by setting their associated small minipages $\rightarrow$ width = 0.6cm,
+% and using TikZ scale=0.5.
+%
+%
+% \subsubsection{\hspace{3mm}DrawNotationBox}
+% \label{sec:codedrawnotationbox}
+%
+%
+% \begin{macro}{\DrawNotationBox}
+% 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.
+%
+% \textsc{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)%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% We now define a number of points and line-segments inside the square
+% `notationbox' (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 centre and a start point.
+% Note that the final argument does not use any units.
+% For the TikZ ARC command see TikZ pgfmanual (2012) page~146 (\S 14.8).
+%
+% \textsc{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} % 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}
+%
+%
+%
+%
+% \subsubsection{\hspace{3mm}Some useful internal commands}
+% \label{sec:usefulinternalcommands}
+%
+% \begin{macro}{\@rr}
+% \begin{macro}{\@rrp}
+% \begin{macro}{\@rrw}
+% \begin{macro}{\@rrwp}
+% \begin{macro}{\@rrs}
+% \begin{macro}{\@rrsp}
+% \begin{macro}{\@rra}
+% \begin{macro}{\@rrap}
+% \begin{macro}{\@xyzh}
+% \begin{macro}{\@xyzhp}
+% \begin{macro}{\@xyzRubik}
+% \begin{macro}{\@xyzRubikp}
+% \begin{macro}{\@SquareLetter}
+% \begin{macro}{\@hRubik}
+% These internal commands are used to generate the
+% prime, w, w-prime, s, s-prime, a, a-prime
+% rotation commands. They attach a letter or a prime to the associated argument;
+% for~example, the command \verb!\@rrwp{B}! appends a `w' and a prime (p) to the
+% argument `B', i.e.~$\rightarrow$ \rr{Bwp} (see Section~\ref{sec:coderotationBwp}).
+% Users are then able to access this glyph by typing the command \verb!\rrBwp!, or,
+% more intuitively, \verb!\rr{Bwp}!
+% (see also \verb!\@join! detailed in Section~\ref{sec:cmdsusingjoin}).
+%
+% The \cmd{\@xyz..} commands are used to generate the
+% x, y, z, u, d, l, r, f, b commands and their associated prime rotation commands.
+% The commands \verb!\@xyzhbdfl! and \verb!\@xyzbdflRubik! relate to the
+% axis rotations denoted as b, d, f, l; since these four letters have long upstrokes
+% they require special fine-tuning for vertical position.
+%
+% The \cmd{\@SquareLetter} command is used to form the separate square hieroglyph form
+% used for rotations with no visible representation from the front
+% (e.g.,~B.., Fs, Fsp, Fa, Fap, S, Sp, Sf, Sfp, Sb, Sbp).
+% Note that the TikZ `thick' line code = 0.8pt (used in \cmd{\@SquareLetter}).
+% The \cmd{\@hRubik} is the vertical shift used to raise the box carrying the rotation
+% rotation-code in \cmd{\Rubik..} commands not visible from the front.
+%
+% The idea is that by using these internal
+% tools taking parameters we are able to more easily standardise the size
+% and position of all the various glyphs. For details of the
+% rubikfont and rubikprime see Section~\ref{sec:coderubikfont}).
+%
+% \begin{macrocode}
+\newcommand{\@rr}[1]{{\@rubikfont #1}}
+\newcommand{\@rrp}[1]{{\@rubikfont #1\@rubikprime}}
+\newcommand{\@rrw}[1]{{\@rubikfont #1{\@rubikfontFNS w}}}
+\newcommand{\@rrwp}[1]{{\@rubikfont #1{\@rubikfontFNS w}\@rubikprime}}
+\newcommand{\@rrs}[1]{{\@rubikfont #1{\@rubikfontFNS s}}}
+\newcommand{\@rrsp}[1]{{\@rubikfont #1{\@rubikfontFNS s}\@rubikprime}}
+\newcommand{\@rra}[1]{{\@rubikfont #1{\@rubikfontFNS a}}}
+\newcommand{\@rrap}[1]{{\@rubikfont #1{\@rubikfontFNS a}\@rubikprime}}
+\newcommand{\@rru}[1]{{\@rubikfont #1{\@rubikfontFNS u}}}
+\newcommand{\@rrup}[1]{{\@rubikfont #1{\@rubikfontFNS u}\@rubikprime}}
+\newcommand{\@rrd}[1]{{\@rubikfont #1{\@rubikfontFNS d}}}
+\newcommand{\@rrdp}[1]{{\@rubikfont #1{\@rubikfontFNS d}\@rubikprime}}
+\newcommand{\@rrl}[1]{{\@rubikfont #1{\@rubikfontFNS l}}}
+\newcommand{\@rrlp}[1]{{\@rubikfont #1{\@rubikfontFNS l}\@rubikprime}}
+\newcommand{\@rrr}[1]{{\@rubikfont #1{\@rubikfontFNS r}}}
+\newcommand{\@rrrp}[1]{{\@rubikfont #1{\@rubikfontFNS r}\@rubikprime}}
+\newcommand{\@rrf}[1]{{\@rubikfont #1{\@rubikfontFNS f}}}
+\newcommand{\@rrfp}[1]{{\@rubikfont #1{\@rubikfontFNS f}\@rubikprime}}
+\newcommand{\@rrb}[1]{{\@rubikfont #1{\@rubikfontFNS b}}}
+\newcommand{\@rrbp}[1]{{\@rubikfont #1{\@rubikfontFNS b}\@rubikprime}}
+\newcommand{\@rrc}[1]{{\@rubikfont #1{\@rubikfontFNS c}}}
+\newcommand{\@rrcp}[1]{{\@rubikfont #1{\@rubikfontFNS c}\@rubikprime}}
+\newcommand{\@rrm}[1]{{\@rubikfont #1{\@rubikfontFNS m}}}
+\newcommand{\@rrmp}[1]{{\@rubikfont #1{\@rubikfontFNS m}\@rubikprime}}
+\newcommand{\@xyzh}[1]{[{\@rubikfont #1}]}
+\newcommand{\@xyzhp}[1]{[{\@rubikfont #1\raisebox{-0.6pt}{\@rubikprime}}]}
+\newcommand{\@xyzRubik}[1]%
+ {\raisebox{3.45pt}{[{\@rubikfont #1}]}}
+\newcommand{\@xyzRubikp}[1]%
+ {\raisebox{3.45pt}{[{\@rubikfont #1\raisebox{-0.6pt}{\@rubikprime}}]}}
+\newcommand{\@xyzhbdfl}[1]%
+ {[\raisebox{-0.6pt}{{\@rubikfont #1}}]}
+\newcommand{\@xyzhbdflp}[1]%
+ {[\raisebox{-0.6pt}{{\@rubikfont #1\@rubikprime}}]}
+\newcommand{\@xyzbdflRubik}[1]%
+ {\raisebox{3.45pt}{[\raisebox{-0.6pt}{{\@rubikfont #1}}]}}
+\newcommand{\@xyzbdflRubikp}[1]%
+ {\raisebox{3.45pt}{[\raisebox{-0.6pt}{{\@rubikfont #1\@rubikprime}}]}}
+\newcommand{\@SquareLetter}[1]{\setlength{\fboxsep}{2.5pt}%
+ \setlength{\fboxrule}{0.8pt}%
+ \fbox{\rule[-1pt]{0pt}{8.5pt}\raisebox{-0.5pt}{#1}}}
+\newlength\@hRubik%
+\setlength{\@hRubik}{0.185cm}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\@tlen}
+% Feb 2017 (RWDN): \ We also need to define a small length for fine-tuning the default
+% horizontal space between a pair of `letter' hieroglyphs, eg~B (i.e.,~when no
+% additional space has been added by the user), so that this matches that between a pair of
+% `arrow' hieroglyphs. This length is inserted on both sides of the square frame.
+% This length is used in two settings: (a)~in `letter' hieroglyphs (for an example,
+% see the definition of the macro \cmd{\SquareB} in Section~\ref{sec:coderotationB}),
+% and in (b)~in `arrow' hieroglyphs (for an example,
+% see the definition of the macro \cmd{\rrhD} in Section~\ref{sec:coderotationD}).
+%
+%\begin{macrocode}
+\newcommand{\@tlen}{\hspace{1pt}}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \subsubsection{\hspace{3mm}Using {\textbackslash}\texttt{@join}}
+% \label{sec:cmdsusingjoin}
+%
+%
+% \begin{macro}{\@join}
+% We also require a macro for joining two strings so we can convert
+% a rotation-code, say U, into a macro (say, \cmd{\rrhU}) which typesets it in some form.
+% The following \cmd{\@join\{\}\{\}} command is by Christian Tellechea (many thanks\,!).
+% {\newline}\textsc{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 intuitive command |\rrh{U}| is equivalent to \cmd{\rrhU}.
+% {\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}
+% The following section shows how this command is used in practice.
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\textRubik}
+% \begin{macro}{\Rubik}
+% \begin{macro}{\rr}
+% \begin{macro}{\rrh}
+% The following four commands typeset a single rotation, where a rotation-code (e.g.,~U) is
+% the argument (see Section~\ref{sec:typesetting}). 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 above), are
+% especially useful when typesetting a list of rotation-codes.
+% Furthermore, it is more intuitive for the user 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}
+% \label{sec:coderotationB}
+%
+% \begin{macro}{\rrB}
+% \begin{macro}{\SquareB}
+% \begin{macro}{\rrhB}
+% \begin{macro}{\RubikB}
+% \begin{macro}{\textRubikB}
+% These commands all draw forms which denote the B (\textsc{back}-face) rotation.
+% Not visible from the front.
+%
+% Feb 2017 (RWDN): added the \cmd{\@tlen} length (= 1pt; defined above) to the
+% \cmd{\SquareB} command, and removed the terminal \cmd{\,} space
+% from the rrhB, RubikB, textRubikB commands, and copied
+% this action with all the subsequent Letter hieroglyphs (e.g.,~B, Bw,..).
+% These minor changes were to improve the spacing between two Letter hieroglyphs,
+% and make it match that between two square `arrow' hieroglyphs.
+% The same changes were made to all the `letter' hieroglyphs.
+% \begin{macrocode}
+\newcommand{\rrB}{\@rr{B}}
+\newcommand{\SquareB}{\@tlen\@SquareLetter{\rrB}\@tlen}
+\newcommand{\rrhB}{\raisebox{-0.25mm}{\SquareB}}
+\newcommand{\RubikB}{\raisebox{\@hRubik}{\SquareB}}
+\newcommand{\textRubikB}{\rrhB}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Bp}
+%
+% \begin{macro}{\rrBp}
+% \begin{macro}{\SquareBp}
+% \begin{macro}{\rrhBp}
+% \begin{macro}{\RubikBp}
+% \begin{macro}{\textRubikBp}
+% These commands all draw forms which denote the Bp rotation.
+% Not visible from the front.
+% \begin{macrocode}
+\newcommand{\rrBp}{\@rrp{B}}
+\newcommand{\SquareBp}{\@tlen\@SquareLetter{\rrBp}\@tlen}
+\newcommand{\rrhBp}{\raisebox{-0.25mm}{\SquareBp}}
+\newcommand{\RubikBp}{\raisebox{\@hRubik}{\SquareBp}}
+\newcommand{\textRubikBp}{\rrhBp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Bw}
+% \label{sec:coderotationBw}
+%
+% \begin{macro}{\rrBw}
+% \begin{macro}{\SquareBw}
+% \begin{macro}{\rrhBw}
+% \begin{macro}{\RubikBw}
+% \begin{macro}{\textRubikBw}
+% These commands all draw forms which denote the Bw rotation.
+% Not visible from the front.
+% \begin{macrocode}
+\newcommand{\rrBw}{\@rrw{B}}
+\newcommand{\SquareBw}{\@tlen\@SquareLetter{\rrBw}\@tlen}
+\newcommand{\rrhBw}{\raisebox{-0.25mm}{\SquareBw}}
+\newcommand{\RubikBw}{\raisebox{\@hRubik}{\SquareBw}}
+\newcommand{\textRubikBw}{\rrhBw}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Bwp}
+% \label{sec:coderotationBwp}
+%
+% \begin{macro}{\rrBwp}
+% \begin{macro}{\SquareBwp}
+% \begin{macro}{\rrhBwp}
+% \begin{macro}{\RubikBwp}
+% \begin{macro}{\textRubikBwp}
+% These commands all draw forms which denote the Bwp rotation.
+% Not visible from the front.
+% \begin{macrocode}
+\newcommand{\rrBwp}{\@rrwp{B}}
+\newcommand{\SquareBwp}{\@tlen\@SquareLetter{\rrBwp}\@tlen}
+\newcommand{\rrhBwp}{\raisebox{-0.25mm}{\SquareBwp}}
+\newcommand{\RubikBwp}{\raisebox{\@hRubik}{\SquareBwp}}
+\newcommand{\textRubikBwp}{\rrhBwp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Bs}
+%
+% \begin{macro}{\rrBs}
+% \begin{macro}{\SquareBs}
+% \begin{macro}{\rrhBs}
+% \begin{macro}{\RubikBs}
+% \begin{macro}{\textRubikBs}
+% These commands all draw forms which denote the Bs rotation.
+% Not visible from the front.
+% \begin{macrocode}
+\newcommand{\rrBs}{\@rrs{B}}
+\newcommand{\SquareBs}{\@tlen\@SquareLetter{\rrBs}\@tlen}
+\newcommand{\rrhBs}{\raisebox{-0.25mm}{\SquareBs}}
+\newcommand{\RubikBs}{\raisebox{\@hRubik}{\SquareBs}}
+\newcommand{\textRubikBs}{\rrhBs}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Bsp}
+%
+% \begin{macro}{\rrBsp}
+% \begin{macro}{\SquareBsp}
+% \begin{macro}{\rrhBsp}
+% \begin{macro}{\RubikBsp}
+% \begin{macro}{\textRubikBsp}
+% These commands all draw forms which denote the Bsp rotation.
+% Not visible from the front.
+% \begin{macrocode}
+\newcommand{\rrBsp}{\@rrsp{B}}
+\newcommand{\SquareBsp}{\@tlen\@SquareLetter{\rrBsp}\@tlen}
+\newcommand{\rrhBsp}{\raisebox{-0.25mm}{\SquareBsp}}
+\newcommand{\RubikBsp}{\raisebox{\@hRubik}{\SquareBsp}}
+\newcommand{\textRubikBsp}{\rrhBsp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Ba}
+%
+% \begin{macro}{\rrBa}
+% \begin{macro}{\SquareBa}
+% \begin{macro}{\rrhBa}
+% \begin{macro}{\RubikBa}
+% \begin{macro}{\textRubikBa}
+% These commands all draw forms which denote the Ba rotation.
+% Not visible from the front.
+% \begin{macrocode}
+\newcommand{\rrBa}{\@rra{B}}
+\newcommand{\SquareBa}{\@tlen\@SquareLetter{\rrBa}\@tlen}
+\newcommand{\rrhBa}{\raisebox{-0.25mm}{\SquareBa}}
+\newcommand{\RubikBa}{\raisebox{\@hRubik}{\SquareBa}}
+\newcommand{\textRubikBa}{\rrhBa}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Bap}
+%
+% \begin{macro}{\rrBap}
+% \begin{macro}{\SquareBap}
+% \begin{macro}{\rrhBap}
+% \begin{macro}{\RubikBap}
+% \begin{macro}{\textRubikBap}
+% These commands all draw forms which denote the Bap rotation.
+% Not visible from the front.
+% \begin{macrocode}
+\newcommand{\rrBap}{\@rrap{B}}
+\newcommand{\SquareBap}{\@tlen\@SquareLetter{\rrBap}\@tlen}
+\newcommand{\rrhBap}{\raisebox{-0.25mm}{\SquareBap}}
+\newcommand{\RubikBap}{\raisebox{\@hRubik}{\SquareBap}}
+\newcommand{\textRubikBap}{\rrhBap}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation D}
+% \label{sec:coderotationD}
+%
+% \begin{macro}{\rrD}
+% \begin{macro}{\SquareD}
+% \begin{macro}{\rrhD}
+% \begin{macro}{\RubikD}
+% \begin{macro}{\textRubikD}
+% These commands all draw forms which denote the D rotation.
+%
+% Feb 2017 (RWDN): \ added the \cmd{\@tlen} length to the \cmd{\rrhD} command to improve the
+% spacing between two `arrow' square hieroglyphs; and also removed the terminal \cmd{\,}
+% space. The same changes were made to all the `arrow' hieroglyphs.
+% \begin{macrocode}
+\newcommand{\rrD}{\@rr{D}}
+%%
+\newcommand{\SquareD}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick] (\@sb,\@sddd) -- (\@sbh, \@sddd);
+\draw [thick] (\@sb,\@sdd) -- (\@sbh, \@sdd);
+\draw [thick, ->] (\@sb,\@sd) -- (\@sbh, \@sd);
+\end{tikzpicture}%
+}
+\newcommand{\rrhD}{\raisebox{-0.333\height}{\@tlen\SquareD\@tlen}}
+%%
+\newcommand{\RubikD}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareD\\
+\rrD%
+\end{minipage}%
+}}
+\newcommand{\textRubikD}{\rrD\,\rrhD}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Dp}
+%
+% \begin{macro}{\rrDp}
+% \begin{macro}{\SquareDp}
+% \begin{macro}{\rrhDp}
+% \begin{macro}{\RubikDp}
+% \begin{macro}{\textRubikDp}
+% These commands all draw forms which denote the Dp rotation.
+% \begin{macrocode}
+\newcommand{\rrDp}{\@rrp{D}}
+%%
+\newcommand{\SquareDp}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick] (\@sb,\@sddd) -- (\@sbh, \@sddd);
+\draw [thick] (\@sb,\@sdd) -- (\@sbh, \@sdd);
+\draw [thick, <-] (\@sb,\@sd) -- (\@sbh, \@sd);
+\end{tikzpicture}%
+}
+\newcommand{\rrhDp}{\raisebox{-0.333\height}{\@tlen\SquareDp\@tlen}}
+%%
+\newcommand{\RubikDp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareDp\\
+\rrDp%
+\end{minipage}%
+}}
+\newcommand{\textRubikDp}{\rrDp\,\rrhDp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Dw}
+%
+% \begin{macro}{\rrDw}
+% \begin{macro}{\SquareDw}
+% \begin{macro}{\rrhDw}
+% \begin{macro}{\RubikDw}
+% \begin{macro}{\textRubikDw}
+% These commands all draw forms which denote the Dw rotation.
+% \begin{macrocode}
+\newcommand{\rrDw}{\@rrw{D}}
+%%
+\newcommand{\SquareDw}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick] (\@sb,\@sddd) -- (\@sbh, \@sddd);
+\draw [thick, ->] (\@sb,\@sdd) -- (\@sbh, \@sdd);
+\draw [thick, ->] (\@sb,\@sd) -- (\@sbh, \@sd);
+\end{tikzpicture}%
+}
+\newcommand{\rrhDw}{\raisebox{-0.333\height}{\@tlen\SquareDw\@tlen}}
+%%
+\newcommand{\RubikDw}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareDw\\
+\rrDw%
+\end{minipage}%
+}}
+\newcommand{\textRubikDw}{\rrDw\,\rrhDw}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Dwp}
+%
+% \begin{macro}{\rrDwp}
+% \begin{macro}{\SquareDwp}
+% \begin{macro}{\rrhDwp}
+% \begin{macro}{\RubikDwp}
+% \begin{macro}{\textRubikDwp}
+% These commands all draw forms which denote the Dwp rotation.
+% \begin{macrocode}
+\newcommand{\rrDwp}{\@rrwp{D}}
+%%
+\newcommand{\SquareDwp}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick] (\@sb,\@sddd) -- (\@sbh, \@sddd);
+\draw [thick, <-] (\@sb,\@sdd) -- (\@sbh, \@sdd);
+\draw [thick, <-] (\@sb,\@sd) -- (\@sbh, \@sd);
+\end{tikzpicture}%
+}
+\newcommand{\rrhDwp}{\raisebox{-0.333\height}{\@tlen\SquareDwp\@tlen}}
+%%
+\newcommand{\RubikDwp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareDwp\\
+\rrDwp%
+\end{minipage}%
+}}
+\newcommand{\textRubikDwp}{\rrDwp\,\rrhDwp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Ds}
+%
+% \begin{macro}{\rrDs}
+% \begin{macro}{\SquareDs}
+% \begin{macro}{\rrhDs}
+% \begin{macro}{\RubikDs}
+% \begin{macro}{\textRubikDs}
+% These commands all draw forms which denote the Ds rotation.
+% \begin{macrocode}
+\newcommand{\rrDs}{\@rrs{D}}
+%%
+\newcommand{\SquareDs}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick, ->] (\@sb,\@sddd) -- (\@sbh, \@sddd);
+\draw [thick] (\@sb,\@sdd) -- (\@sbh, \@sdd);
+\draw [thick, ->] (\@sb,\@sd) -- (\@sbh, \@sd);
+\end{tikzpicture}%
+}
+\newcommand{\rrhDs}{\raisebox{-0.333\height}{\@tlen\SquareDs\@tlen}}
+%%
+\newcommand{\RubikDs}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareDs\\
+\rrDs%
+\end{minipage}%
+}}
+\newcommand{\textRubikDs}{\rrDs\,\rrhDs}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Dsp}
+%
+% \begin{macro}{\rrDsp}
+% \begin{macro}{\SquareDsp}
+% \begin{macro}{\rrhDsp}
+% \begin{macro}{\RubikDsp}
+% \begin{macro}{\textRubikDsp}
+% These commands all draw forms which denote the Dsp rotation.
+% \begin{macrocode}
+\newcommand{\rrDsp}{\@rrsp{D}}
+%%
+\newcommand{\SquareDsp}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick, <-] (\@sb,\@sddd) -- (\@sbh, \@sddd);
+\draw [thick] (\@sb,\@sdd) -- (\@sbh, \@sdd);
+\draw [thick, <-] (\@sb,\@sd) -- (\@sbh, \@sd);
+\end{tikzpicture}%
+}
+\newcommand{\rrhDsp}{\raisebox{-0.333\height}{\@tlen\SquareDsp\@tlen}}
+%%
+\newcommand{\RubikDsp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareDsp\\
+\rrDsp%
+\end{minipage}%
+}}
+\newcommand{\textRubikDsp}{\rrDsp\,\rrhDsp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Da}
+%
+% \begin{macro}{\rrDa}
+% \begin{macro}{\SquareDa}
+% \begin{macro}{\rrhDa}
+% \begin{macro}{\RubikDa}
+% \begin{macro}{\textRubikDa}
+% These commands all draw forms which denote the Da rotation.
+% \begin{macrocode}
+\newcommand{\rrDa}{\@rra{D}}
+%%
+\newcommand{\SquareDa}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick, <-] (\@sb,\@sddd) -- (\@sbh, \@sddd);
+\draw [thick] (\@sb,\@sdd) -- (\@sbh, \@sdd);
+\draw [thick, ->] (\@sb,\@sd) -- (\@sbh, \@sd);
+\end{tikzpicture}%
+}
+\newcommand{\rrhDa}{\raisebox{-0.333\height}{\@tlen\SquareDa\@tlen}}
+%%
+\newcommand{\RubikDa}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareDa\\
+\rrDa%
+\end{minipage}%
+}}
+\newcommand{\textRubikDa}{\rrDa\,\rrhDa}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Dap}
+%
+% \begin{macro}{\rrDap}
+% \begin{macro}{\SquareDap}
+% \begin{macro}{\rrhDap}
+% \begin{macro}{\RubikDap}
+% \begin{macro}{\textRubikDap}
+% These commands all draw forms which denote the Dap rotation.
+% \begin{macrocode}
+\newcommand{\rrDap}{\@rrap{D}}
+%%
+\newcommand{\SquareDap}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick, ->] (\@sb,\@sddd) -- (\@sbh, \@sddd);
+\draw [thick] (\@sb,\@sdd) -- (\@sbh, \@sdd);
+\draw [thick, <-] (\@sb,\@sd) -- (\@sbh, \@sd);
+\end{tikzpicture}%
+}
+\newcommand{\rrhDap}{\raisebox{-0.333\height}{\@tlen\SquareDap\@tlen}}
+%%
+\newcommand{\RubikDap}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareDap\\
+\rrDap%
+\end{minipage}%
+}}
+\newcommand{\textRubikDap}{\rrDap\,\rrhDap}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation E}
+%
+% \begin{macro}{\rrE}
+% \begin{macro}{\SquareE}
+% \begin{macro}{\rrhE}
+% \begin{macro}{\RubikE}
+% \begin{macro}{\textRubikE}
+% These commands all draw forms which denote the E rotation.
+% \begin{macrocode}
+\newcommand{\rrE}{\@rr{E}}
+%%
+\newcommand{\SquareE}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick] (\@sb,\@sddd) -- (\@sbh, \@sddd);
+\draw [thick, ->] (\@sb,\@sdd) -- (\@sbh, \@sdd);
+\draw [thick] (\@sb,\@sd) -- (\@sbh, \@sd);
+\end{tikzpicture}%
+}
+\newcommand{\rrhE}{\raisebox{-0.333\height}{\@tlen\SquareE\@tlen}}
+%%
+\newcommand{\RubikE}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareE\\
+\rrE%
+\end{minipage}%
+}}
+\newcommand{\textRubikE}{\rrE\,\rrhE}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Ep}
+%
+% \begin{macro}{\rrEp}
+% \begin{macro}{\SquareEp}
+% \begin{macro}{\rrhEp}
+% \begin{macro}{\RubikEp}
+% \begin{macro}{\textRubikEp}
+% These commands all draw forms which denote the Ep rotation.
+% \begin{macrocode}
+\newcommand{\rrEp}{\@rrp{E}}
+%%
+\newcommand{\SquareEp}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick] (\@sb,\@sddd) -- (\@sbh, \@sddd);
+\draw [thick, <-] (\@sb,\@sdd) -- (\@sbh, \@sdd);
+\draw [thick] (\@sb,\@sd) -- (\@sbh, \@sd);
+\end{tikzpicture}%
+}
+\newcommand{\rrhEp}{\raisebox{-0.333\height}{\@tlen\SquareEp\@tlen}}
+%%
+\newcommand{\RubikEp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareEp\\
+\rrEp%
+\end{minipage}%
+}}
+\newcommand{\textRubikEp}{\rrEp\,\rrhEp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation F}
+%
+% \begin{macro}{\rrF}
+% \begin{macro}{\SquareF}
+% \begin{macro}{\rrhF}
+% \begin{macro}{\RubikF}
+% \begin{macro}{\textRubikF}
+% These commands all draw forms which denote the F rotation.
+% \begin{macrocode}
+\newcommand{\rrF}{\@rr{F}}
+%%
+\newcommand{\SquareF}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick, <-] (\@scx, \@scy) arc[radius=0.35, start angle=-60, delta angle=290];
+\end{tikzpicture}%
+}
+\newcommand{\rrhF}{\raisebox{-0.333\height}{\@tlen\SquareF\@tlen}}
+%%
+\newcommand{\RubikF}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareF\\
+\rrF%
+\end{minipage}%
+}}
+\newcommand{\textRubikF}{\rrF\,\rrhF}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Fp}
+%
+% \begin{macro}{\rrFp}
+% \begin{macro}{\SquareFp}
+% \begin{macro}{\rrhFp}
+% \begin{macro}{\RubikFp}
+% \begin{macro}{\textRubikFp}
+% These commands all draw forms which denote the Fp rotation.
+% \begin{macrocode}
+\newcommand{\rrFp}{\@rrp{F}}
+%%
+\newcommand{\SquareFp}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick, ->] (\@scx, \@scy) arc[radius=0.35, start angle=-60, delta angle=290];
+\end{tikzpicture}%
+}
+\newcommand{\rrhFp}{\raisebox{-0.333\height}{\@tlen\SquareFp\@tlen}}
+%%
+\newcommand{\RubikFp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareFp\\
+\rrFp%
+\end{minipage}%
+}}
+\newcommand{\textRubikFp}{\rrFp\,\rrhFp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Fw}
+%
+% \begin{macro}{\rrFw}
+% \begin{macro}{\SquareFw}
+% \begin{macro}{\rrhFw}
+% \begin{macro}{\RubikFw}
+% \begin{macro}{\textRubikFw}
+% These commands all draw forms which denote the Fw rotation.
+% \begin{macrocode}
+\newcommand{\rrFw}{\@rrw{F}}
+%%
+\newcommand{\SquareFw}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick, <-] (\@scx, \@scy) arc[radius=0.35, start angle=-60, delta angle=290];
+\draw [thick] (\@sqcx,\@sqcy) arc[radius=0.1, start angle=-60, delta angle=360];
+%\node (squareLab) at (0.5,0.5) {$o$};
+\end{tikzpicture}%
+}
+\newcommand{\rrhFw}{\raisebox{-0.333\height}{\@tlen\SquareFw\@tlen}}
+%%
+\newcommand{\RubikFw}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareFw\\
+\rrFw%
+\end{minipage}%
+}}
+\newcommand{\textRubikFw}{\rrFw\,\rrhFw}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Fwp}
+%
+% \begin{macro}{\rrFwp}
+% \begin{macro}{\SquareFwp}
+% \begin{macro}{\rrhFwp}
+% \begin{macro}{\RubikFwp}
+% \begin{macro}{\textRubikFwp}
+% These commands all draw forms which denote the Fwp rotation.
+% \begin{macrocode}
+\newcommand{\rrFwp}{\@rrwp{F}}
+%%
+\newcommand{\SquareFwp}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick, ->] (\@scx, \@scy) arc[radius=0.35, start angle=-60, delta angle=290];
+\draw [thick] (\@sqcx,\@sqcy) arc[radius=0.1, start angle=-60, delta angle=360];
+\end{tikzpicture}%
+}
+\newcommand{\rrhFwp}{\raisebox{-0.333\height}{\@tlen\SquareFwp\@tlen}}
+%%
+\newcommand{\RubikFwp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareFwp\\
+\rrFwp%
+\end{minipage}%
+}}
+\newcommand{\textRubikFwp}{\rrFwp\,\rrhFwp}
+%%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Fs}
+%
+% \begin{macro}{\rrFs}
+% \begin{macro}{\rrhFs}
+% \begin{macro}{\RubikFs}
+% \begin{macro}{\textRubikFs}
+% These commands draw forms of the Singmaster Fs slice rotation.
+% We need to just make square with Fs in square;
+% adjust box height using a \cmd{\rule};
+% adjust \cmd{\fboxsep} (default=3pt);
+% adjust \cmd{\fboxrule} (default=0.4pt);
+% bounded by \{\} so no need to reset to defaults.
+% Not visible from the front.
+% \begin{macrocode}
+\newcommand{\rrFs}{\@rrs{F}}
+\newcommand{\SquareFs}{\@tlen\@SquareLetter{\rrFs}\@tlen}
+\newcommand{\rrhFs}{\raisebox{-0.25mm}{\SquareFs}}
+\newcommand{\RubikFs}{\raisebox{\@hRubik}{\SquareFs}}
+\newcommand{\textRubikFs}{\rrhFs}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Fsp}
+%
+% \begin{macro}{\rrFsp}
+% \begin{macro}{\rrhFsp}
+% \begin{macro}{\RubikFsp}
+% \begin{macro}{\textRubikFsp}
+% These commands draw forms of the Singmaster Fsp slice rotation.
+% We need to just make square with Fsp in square;
+% adjust box height using a \cmd{\rule};
+% adjust \cmd{\fboxsep} (default=3pt);
+% adjust \cmd{\fboxrule} (default=0.4pt);
+% bounded by \{\} so no need to reset to defaults.
+% Not visible from the front.
+% \begin{macrocode}
+\newcommand{\rrFsp}{\@rrsp{F}}
+\newcommand{\SquareFsp}{\@tlen\@SquareLetter{\rrFsp}\@tlen}
+\newcommand{\rrhFsp}{\raisebox{-0.25mm}{\SquareFsp}}
+\newcommand{\RubikFsp}{\raisebox{\@hRubik}{\SquareFsp}}
+\newcommand{\textRubikFsp}{\rrhFsp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Fa}
+%
+% \begin{macro}{\rrFa}
+% \begin{macro}{\rrhFa}
+% \begin{macro}{\RubikFa}
+% \begin{macro}{\textRubikFa}
+% These commands draw forms of the Singmaster Fa slice rotation.
+% We need to just make square with Fa in square;
+% adjust box height using a \cmd{\rule};
+% adjust \cmd{\fboxsep} (default=3pt);
+% adjust \cmd{\fboxrule} (default=0.4pt);
+% bounded by \{\} so no need to reset to defaults.
+% Not visible from the front.
+% \begin{macrocode}
+\newcommand{\rrFa}{\@rra{F}}
+\newcommand{\SquareFa}{\@tlen\@SquareLetter{\rrFa}\@tlen}
+\newcommand{\rrhFa}{\raisebox{-0.25mm}{\SquareFa}}
+\newcommand{\RubikFa}{\raisebox{\@hRubik}{\SquareFa}}
+\newcommand{\textRubikFa}{\rrhFa}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Fap}
+%
+% \begin{macro}{\rrFap}
+% \begin{macro}{\rrhFap}
+% \begin{macro}{\RubikFap}
+% \begin{macro}{\textRubikFap}
+% These commands draw forms of the Singmaster Fap slice rotation.
+% We need to just make square with Fap in square;
+% adjust box height using a \cmd{\rule};
+% adjust \cmd{\fboxsep} (default=3pt);
+% adjust \cmd{\fboxrule} (default=0.4pt);
+% bounded by \{\} so no need to reset to defaults.
+% Not visible from the front.
+% \begin{macrocode}
+\newcommand{\rrFap}{\@rrap{F}}
+\newcommand{\SquareFap}{\@tlen\@SquareLetter{\rrFap}\@tlen}
+\newcommand{\rrhFap}{\raisebox{-0.25mm}{\SquareFap}}
+\newcommand{\RubikFap}{\raisebox{\@hRubik}{\SquareFap}}
+\newcommand{\textRubikFap}{\rrhFap}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation L}
+%
+% \begin{macro}{\rrL}
+% \begin{macro}{\SquareL}
+% \begin{macro}{\rrhL}
+% \begin{macro}{\RubikL}
+% \begin{macro}{\textRubikL}
+% These commands all draw forms which denote the L rotation.
+% \begin{macrocode}
+\newcommand{\rrL}{\@rr{L}}
+%%
+\newcommand{\SquareL}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick, <-] (\@sd, \@sb) -- (\@sd, \@sbh);
+\draw [thick] (\@sdd,\@sb) -- (\@sdd, \@sbh);
+\draw [thick] (\@sddd, \@sb) -- (\@sddd, \@sbh);
+\end{tikzpicture}%
+}
+\newcommand{\rrhL}{\raisebox{-0.333\height}{\@tlen\SquareL\@tlen}}
+%%
+\newcommand{\RubikL}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareL\\
+\rrL%
+\end{minipage}%
+}}
+\newcommand{\textRubikL}{\rrL\,\rrhL}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Lp}
+%
+% \begin{macro}{\rrLp}
+% \begin{macro}{\SquareLp}
+% \begin{macro}{\rrhLp}
+% \begin{macro}{\RubikLp}
+% \begin{macro}{\textRubikLp}
+% These commands all draw forms which denote the Lp rotation.
+% \begin{macrocode}
+\newcommand{\rrLp}{\@rrp{L}}
+%%
+\newcommand{\SquareLp}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick,->] (\@sd, \@sb) -- (\@sd, \@sbh);
+\draw [thick] (\@sdd,\@sb) -- (\@sdd, \@sbh);
+\draw [thick] (\@sddd, \@sb) -- (\@sddd, \@sbh);
+\end{tikzpicture}%
+}
+\newcommand{\rrhLp}{\raisebox{-0.333\height}{\@tlen\SquareLp\@tlen}}
+%%
+\newcommand{\RubikLp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareLp\\
+\rrLp%
+\end{minipage}%
+}}
+\newcommand{\textRubikLp}{\rrLp\,\rrhLp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Lw}
+%
+% \begin{macro}{\rrLw}
+% \begin{macro}{\SquareLw}
+% \begin{macro}{\rrhLw}
+% \begin{macro}{\RubikLw}
+% \begin{macro}{\textRubikLw}
+% These commands all draw forms which denote the Lw rotation.
+% \begin{macrocode}
+\newcommand{\rrLw}{\@rrw{L}}
+%%
+\newcommand{\SquareLw}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick, <-] (\@sd, \@sb) -- (\@sd, \@sbh);
+\draw [thick, <-] (\@sdd,\@sb) -- (\@sdd, \@sbh);
+\draw [thick] (\@sddd, \@sb) -- (\@sddd, \@sbh);
+\end{tikzpicture}%
+}
+\newcommand{\rrhLw}{\raisebox{-0.333\height}{\@tlen\SquareLw\@tlen}}
+%%
+\newcommand{\RubikLw}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareLw\\
+\rrLw%
+\end{minipage}%
+}}
+\newcommand{\textRubikLw}{\rrLw\,\rrhLw}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Lwp}
+%
+% \begin{macro}{\rrLwp}
+% \begin{macro}{\SquareLwp}
+% \begin{macro}{\rrhLwp}
+% \begin{macro}{\RubikLwp}
+% \begin{macro}{\textRubikLwp}
+% These commands all draw forms which denote the Lwp rotation.
+% \begin{macrocode}
+\newcommand{\rrLwp}{\@rrwp{L}}
+%%
+\newcommand{\SquareLwp}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick,->] (\@sd, \@sb) -- (\@sd, \@sbh);
+\draw [thick,->] (\@sdd,\@sb) -- (\@sdd, \@sbh);
+\draw [thick] (\@sddd, \@sb) -- (\@sddd, \@sbh);
+\end{tikzpicture}%
+}
+\newcommand{\rrhLwp}{\raisebox{-0.333\height}{\@tlen\SquareLwp\@tlen}}
+%%
+\newcommand{\RubikLwp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareLwp\\
+\rrLwp%
+\end{minipage}%
+}}
+\newcommand{\textRubikLwp}{\rrLwp\,\rrhLwp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Ls}
+%
+% \begin{macro}{\rrLs}
+% \begin{macro}{\SquareLs}
+% \begin{macro}{\rrhLs}
+% \begin{macro}{\RubikLs}
+% \begin{macro}{\textRubikLs}
+% These commands all draw forms which denote the Ls rotation.
+% \begin{macrocode}
+\newcommand{\rrLs}{\@rrs{L}}
+%%
+\newcommand{\SquareLs}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick, <-] (\@sd, \@sb) -- (\@sd, \@sbh);
+\draw [thick] (\@sdd,\@sb) -- (\@sdd, \@sbh);
+\draw [thick, <-] (\@sddd, \@sb) -- (\@sddd, \@sbh);
+\end{tikzpicture}%
+}
+\newcommand{\rrhLs}{\raisebox{-0.333\height}{\@tlen\SquareLs\@tlen}}
+%%
+\newcommand{\RubikLs}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareLs\\
+\rrLs%
+\end{minipage}%
+}}
+\newcommand{\textRubikLs}{\rrLs\,\rrhLs}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Lsp}
+%
+% \begin{macro}{\rrLsp}
+% \begin{macro}{\SquareLsp}
+% \begin{macro}{\rrhLsp}
+% \begin{macro}{\RubikLsp}
+% \begin{macro}{\textRubikLsp}
+% These commands all draw forms which denote the Lsp rotation.
+% \begin{macrocode}
+\newcommand{\rrLsp}{\@rrsp{L}}
+%%
+\newcommand{\SquareLsp}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick, ->] (\@sd, \@sb) -- (\@sd, \@sbh);
+\draw [thick] (\@sdd,\@sb) -- (\@sdd, \@sbh);
+\draw [thick, ->] (\@sddd, \@sb) -- (\@sddd, \@sbh);
+\end{tikzpicture}%
+}
+\newcommand{\rrhLsp}{\raisebox{-0.333\height}{\@tlen\SquareLsp\@tlen}}
+%%
+\newcommand{\RubikLsp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareLsp\\
+\rrLsp%
+\end{minipage}%
+}}
+\newcommand{\textRubikLsp}{\rrLsp\,\rrhLsp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation La}
+%
+% \begin{macro}{\rrLa}
+% \begin{macro}{\SquareLa}
+% \begin{macro}{\rrhLa}
+% \begin{macro}{\RubikLa}
+% \begin{macro}{\textRubikLa}
+% These commands all draw forms which denote the La rotation.
+% \begin{macrocode}
+\newcommand{\rrLa}{\@rra{L}}
+%%
+\newcommand{\SquareLa}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick, <-] (\@sd, \@sb) -- (\@sd, \@sbh);
+\draw [thick] (\@sdd,\@sb) -- (\@sdd, \@sbh);
+\draw [thick, ->] (\@sddd, \@sb) -- (\@sddd, \@sbh);
+\end{tikzpicture}%
+}
+\newcommand{\rrhLa}{\raisebox{-0.333\height}{\@tlen\SquareLa\@tlen}}
+%%
+\newcommand{\RubikLa}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareLa\\
+\rrLa%
+\end{minipage}%
+}}
+\newcommand{\textRubikLa}{\rrLa\,\rrhLa}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Lap}
+%
+% \begin{macro}{\rrLap}
+% \begin{macro}{\SquareLap}
+% \begin{macro}{\rrhLap}
+% \begin{macro}{\RubikLap}
+% \begin{macro}{\textRubikLap}
+% These commands all draw forms which denote the Lap rotation.
+% \begin{macrocode}
+\newcommand{\rrLap}{\@rrap{L}}
+%%
+\newcommand{\SquareLap}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick, ->] (\@sd, \@sb) -- (\@sd, \@sbh);
+\draw [thick] (\@sdd,\@sb) -- (\@sdd, \@sbh);
+\draw [thick, <-] (\@sddd, \@sb) -- (\@sddd, \@sbh);
+\end{tikzpicture}%
+}
+\newcommand{\rrhLap}{\raisebox{-0.333\height}{\@tlen\SquareLap\@tlen}}
+%%
+\newcommand{\RubikLap}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareLap\\
+\rrLap%
+\end{minipage}%
+}}
+\newcommand{\textRubikLap}{\rrLap\,\rrhLap}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation M}
+%
+% \begin{macro}{\rrM}
+% \begin{macro}{\SquareM}
+% \begin{macro}{\rrhM}
+% \begin{macro}{\RubikM}
+% \begin{macro}{\textRubikM}
+% These commands all draw forms which denote the M rotation.
+% \begin{macrocode}
+\newcommand{\rrM}{\@rr{M}}
+%%
+\newcommand{\SquareM}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick] (\@sd, \@sb) -- (\@sd, \@sbh);
+\draw [thick, <-] (\@sdd,\@sb) -- (\@sdd, \@sbh);
+\draw [thick] (\@sddd, \@sb) -- (\@sddd, \@sbh);
+\end{tikzpicture}%
+}
+\newcommand{\rrhM}{\raisebox{-0.333\height}{\@tlen\SquareM\@tlen}}
+%%
+\newcommand{\RubikM}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareM\\
+\rrM%
+\end{minipage}%
+}}
+\newcommand{\textRubikM}{\rrM\,\rrhM}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Mp}
+%
+% \begin{macro}{\rrMp}
+% \begin{macro}{\SquareMp}
+% \begin{macro}{\rrhMp}
+% \begin{macro}{\RubikMp}
+% \begin{macro}{\textRubikMp}
+% These commands all draw forms which denote the Mp rotation.
+% \begin{macrocode}
+\newcommand{\rrMp}{\@rrp{M}}
+%%
+\newcommand{\SquareMp}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick] (\@sd, \@sb) -- (\@sd, \@sbh);
+\draw [thick,->] (\@sdd,\@sb) -- (\@sdd, \@sbh);
+\draw [thick] (\@sddd, \@sb) -- (\@sddd, \@sbh);
+\end{tikzpicture}%
+}
+\newcommand{\rrhMp}{\raisebox{-0.333\height}{\@tlen\SquareMp\@tlen}}
+%%
+\newcommand{\RubikMp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareMp\\
+\rrMp%
+\end{minipage}%
+}}
+\newcommand{\textRubikMp}{\rrMp\,\rrhMp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation R}
+%
+% \begin{macro}{\rrR}
+% \begin{macro}{\SquareR}
+% \begin{macro}{\rrhR}
+% \begin{macro}{\RubikR}
+% \begin{macro}{\textRubikR}
+% These commands all draw forms which denote the R rotation.
+% \begin{macrocode}
+\newcommand{\rrR}{\@rr{R}}
+%%
+\newcommand{\SquareR}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+%% draw three lines in the square, one with an arrow
+\draw [thick] (\@sd, \@sb) -- (\@sd, \@sbh);
+\draw [thick] (\@sdd,\@sb) -- (\@sdd, \@sbh);
+\draw [thick, ->] (\@sddd, \@sb) -- (\@sddd, \@sbh);
+\end{tikzpicture}%
+}
+\newcommand{\rrhR}{\raisebox{-0.333\height}{\@tlen\SquareR\@tlen}}
+%%
+\newcommand{\RubikR}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareR\\
+\rrR%
+\end{minipage}%
+}}
+\newcommand{\textRubikR}{\rrR\,\rrhR}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Rp}
+%
+% \begin{macro}{\rrRp}
+% \begin{macro}{\SquareRp}
+% \begin{macro}{\rrhRp}
+% \begin{macro}{\RubikRp}
+% \begin{macro}{\textRubikRp}
+% These commands all draw forms which denote the Rp rotation.
+% \begin{macrocode}
+\newcommand{\rrRp}{\@rrp{R}}
+%%
+\newcommand{\SquareRp}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick] (\@sd, \@sb) -- (\@sd, \@sbh);
+\draw [thick] (\@sdd,\@sb) -- (\@sdd, \@sbh);
+\draw [thick, <-] (\@sddd, \@sb) -- (\@sddd, \@sbh);
+\end{tikzpicture}%
+}
+\newcommand{\rrhRp}{\raisebox{-0.333\height}{\@tlen\SquareRp\@tlen}}
+%%
+\newcommand{\RubikRp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareRp\\
+\rrRp%
+\end{minipage}%
+}}
+\newcommand{\textRubikRp}{\rrRp\,\rrhRp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Rw}
+%
+% \begin{macro}{\rrRw}
+% \begin{macro}{\SquareRw}
+% \begin{macro}{\rrhRw}
+% \begin{macro}{\RubikRw}
+% \begin{macro}{\textRubikRw}
+% These commands all draw forms which denote the Rw rotation.
+% \begin{macrocode}
+\newcommand{\rrRw}{\@rrw{R}}
+%%
+\newcommand{\SquareRw}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick] (\@sd, \@sb) -- (\@sd, \@sbh);
+\draw [thick, ->] (\@sdd,\@sb) -- (\@sdd, \@sbh);
+\draw [thick, ->] (\@sddd, \@sb) -- (\@sddd, \@sbh);
+\end{tikzpicture}%
+}
+\newcommand{\rrhRw}{\raisebox{-0.333\height}{\@tlen\SquareRw\@tlen}}
+%%
+\newcommand{\RubikRw}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareRw\\
+\rrRw%
+\end{minipage}%
+}}
+\newcommand{\textRubikRw}{\rrRw\,\rrhRw}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Rwp}
+%
+% \begin{macro}{\rrRwp}
+% \begin{macro}{\SquareRwp}
+% \begin{macro}{\rrhRwp}
+% \begin{macro}{\RubikRwp}
+% \begin{macro}{\textRubikRwp}
+% These commands all draw forms which denote the Rwp rotation.
+% \begin{macrocode}
+\newcommand{\rrRwp}{\@rrwp{R}}
+%%
+\newcommand{\SquareRwp}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick] (\@sd, \@sb) -- (\@sd, \@sbh);
+\draw [thick, <-] (\@sdd,\@sb) -- (\@sdd, \@sbh);
+\draw [thick, <-] (\@sddd, \@sb) -- (\@sddd, \@sbh);
+\end{tikzpicture}%
+}
+\newcommand{\rrhRwp}{\raisebox{-0.333\height}{\@tlen\SquareRwp\@tlen}}
+%%
+\newcommand{\RubikRwp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareRwp\\
+\rrRwp%
+\end{minipage}%
+}}
+\newcommand{\textRubikRwp}{\rrRwp\,\rrhRwp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Rs}
+%
+% \begin{macro}{\rrRs}
+% \begin{macro}{\SquareRs}
+% \begin{macro}{\rrhRs}
+% \begin{macro}{\RubikRs}
+% \begin{macro}{\textRubikRs}
+% These commands all draw forms which denote the Rs rotation.
+% \begin{macrocode}
+\newcommand{\rrRs}{\@rrs{R}}
+%%
+\newcommand{\SquareRs}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick,->] (\@sd, \@sb) -- (\@sd, \@sbh);
+\draw [thick] (\@sdd,\@sb) -- (\@sdd, \@sbh);
+\draw [thick,->] (\@sddd, \@sb) -- (\@sddd, \@sbh);
+\end{tikzpicture}%
+}
+\newcommand{\rrhRs}{\raisebox{-0.333\height}{\@tlen\SquareRs\@tlen}}
+%%
+\newcommand{\RubikRs}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareRs\\
+\rrRs%
+\end{minipage}%
+}}
+\newcommand{\textRubikRs}{\rrRs\,\rrhRs}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Rsp}
+%
+% \begin{macro}{\rrRsp}
+% \begin{macro}{\SquareRsp}
+% \begin{macro}{\rrhRsp}
+% \begin{macro}{\RubikRsp}
+% \begin{macro}{\textRubikRsp}
+% These commands all draw forms which denote the Rsp rotation.
+% \begin{macrocode}
+\newcommand{\rrRsp}{\@rrsp{R}}
+%%
+\newcommand{\SquareRsp}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick,<-] (\@sd, \@sb) -- (\@sd, \@sbh);
+\draw [thick] (\@sdd,\@sb) -- (\@sdd, \@sbh);
+\draw [thick,<-] (\@sddd, \@sb) -- (\@sddd, \@sbh);
+\end{tikzpicture}%
+}
+\newcommand{\rrhRsp}{\raisebox{-0.333\height}{\@tlen\SquareRsp\@tlen}}
+%%
+\newcommand{\RubikRsp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareRsp\\
+\rrRsp%
+\end{minipage}%
+}}
+\newcommand{\textRubikRsp}{\rrRsp\,\rrhRsp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Ra}
+%
+% \begin{macro}{\rrRa}
+% \begin{macro}{\SquareRa}
+% \begin{macro}{\rrhRa}
+% \begin{macro}{\RubikRa}
+% \begin{macro}{\textRubikRa}
+% These commands all draw forms which denote the Ra rotation.
+% \begin{macrocode}
+\newcommand{\rrRa}{\@rra{R}}
+%%
+\newcommand{\SquareRa}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick,<-] (\@sd, \@sb) -- (\@sd, \@sbh);
+\draw [thick] (\@sdd,\@sb) -- (\@sdd, \@sbh);
+\draw [thick,->] (\@sddd, \@sb) -- (\@sddd, \@sbh);
+\end{tikzpicture}%
+}
+\newcommand{\rrhRa}{\raisebox{-0.333\height}{\@tlen\SquareRa\@tlen}}
+%%
+\newcommand{\RubikRa}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareRa\\
+\rrRa%
+\end{minipage}%
+}}
+\newcommand{\textRubikRa}{\rrRa\,\rrhRa}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Rap}
+%
+% \begin{macro}{\rrRap}
+% \begin{macro}{\SquareRap}
+% \begin{macro}{\rrhRap}
+% \begin{macro}{\RubikRap}
+% \begin{macro}{\textRubikRap}
+% These commands all draw forms which denote the Rap rotation.
+% \begin{macrocode}
+\newcommand{\rrRap}{\@rrap{R}}
+%%
+\newcommand{\SquareRap}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick,->] (\@sd, \@sb) -- (\@sd, \@sbh);
+\draw [thick] (\@sdd,\@sb) -- (\@sdd, \@sbh);
+\draw [thick,<-] (\@sddd, \@sb) -- (\@sddd, \@sbh);
+\end{tikzpicture}%
+}
+\newcommand{\rrhRap}{\raisebox{-0.333\height}{\@tlen\SquareRap\@tlen}}
+%%
+\newcommand{\RubikRap}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareRap\\
+\rrRap%
+\end{minipage}%
+}}
+\newcommand{\textRubikRap}{\rrRap\,\rrhRap}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation S}
+%
+% \begin{macro}{\rrS}
+% \begin{macro}{\SquareS}
+% \begin{macro}{\rrhS}
+% \begin{macro}{\RubikS}
+% \begin{macro}{\textRubikS}
+% These commands all draw forms which denote the S rotation.
+% Not visible from the front.
+% \begin{macrocode}
+\newcommand{\rrS}{\@rr{S}}
+\newcommand{\SquareS}{\@tlen\@SquareLetter{\rrS}\@tlen}
+\newcommand{\rrhS}{\raisebox{-0.25mm}{\SquareS}}
+\newcommand{\RubikS}{\raisebox{\@hRubik}{\SquareS}}
+\newcommand{\textRubikS}{\rrhS}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Sp}
+%
+% \begin{macro}{\rrSp}
+% \begin{macro}{\SquareSp}
+% \begin{macro}{\rrhSp}
+% \begin{macro}{\RubikSp}
+% \begin{macro}{\textRubikSp}
+% These commands all draw forms which denote the Sp rotation.
+% Not visible from the front.
+% \begin{macrocode}
+\newcommand{\rrSp}{\@rrp{S}}
+\newcommand{\SquareSp}{\@tlen\@SquareLetter{\rrSp}\@tlen}
+\newcommand{\rrhSp}{\raisebox{-0.25mm}{\SquareSp}}
+\newcommand{\RubikSp}{\raisebox{\@hRubik}{\SquareSp}}
+\newcommand{\textRubikSp}{\rrhSp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Su}
+%
+% \begin{macro}{\rrSu}
+% \begin{macro}{\rrhSu}
+% \begin{macro}{\RubikSu}
+% \begin{macro}{\textRubikSu}
+% These commands draw forms of the Singmaster Su slice rotation.
+% We also need to fine-tune the spacing
+% between these `slice' hieroglyphs (especially Fs and Bs).
+% \begin{macrocode}
+\newcommand{\rrSu}{\@rru{S}}
+\newcommand{\rrhSu}{\rrhEp}%
+\newcommand{\RubikSu}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareEp\\
+\rrSu%
+\end{minipage}%
+}}
+\newcommand{\textRubikSu}{\rrSu\,\rrhEp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Sup}
+%
+% \begin{macro}{\rrSup}
+% \begin{macro}{\rrhSup}
+% \begin{macro}{\RubikSup}
+% \begin{macro}{\textRubikSup}
+% These commands draw forms of the Singmaster Sup slice rotation.
+% We also need to fine-tune the spacing
+% between these `slice' hieroglyphs (especially Fs and Bs).
+% \begin{macrocode}
+\newcommand{\rrSup}{\@rrup{S}}
+\newcommand{\rrhSup}{\rrhE}%
+\newcommand{\RubikSup}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareE\\
+\rrSup%
+\end{minipage}%
+}}
+\newcommand{\textRubikSup}{\rrSup\,\rrhE}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Sd}
+%
+% \begin{macro}{\rrSd}
+% \begin{macro}{\rrhSd}
+% \begin{macro}{\RubikSd}
+% \begin{macro}{\textRubikSd}
+% These commands draw forms of the Singmaster Sd slice rotation.
+% \begin{macrocode}
+\newcommand{\rrSd}{\@rrd{S}}
+\newcommand{\rrhSd}{\rrhE}%
+\newcommand{\RubikSd}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareE\\
+\rrSd%
+\end{minipage}%
+}}
+\newcommand{\textRubikSd}{\rrSd\,\rrhE}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Sdp}
+%
+% \begin{macro}{\rrSdp}
+% \begin{macro}{\rrhSdp}
+% \begin{macro}{\RubikSdp}
+% \begin{macro}{\textRubikSdp}
+% These commands draw forms of the Singmaster Sdp slice rotation.
+% \begin{macrocode}
+\newcommand{\rrSdp}{\@rrdp{S}}
+\newcommand{\rrhSdp}{\rrhEp}%
+\newcommand{\RubikSdp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareEp\\
+\rrSdp%
+\end{minipage}%
+}}
+\newcommand{\textRubikSdp}{\rrSdp\,\rrhEp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Sl}
+%
+% \begin{macro}{\rrSl}
+% \begin{macro}{\rrhSl}
+% \begin{macro}{\RubikSl}
+% \begin{macro}{\textRubikSl}
+% These commands draw forms of the Singmaster Sl slice rotation.
+% \begin{macrocode}
+\newcommand{\rrSl}{\@rrl{S}}
+\newcommand{\rrhSl}{\rrhM}%
+\newcommand{\RubikSl}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareM\\
+\rrSl%
+\end{minipage}%
+}}
+\newcommand{\textRubikSl}{\rrSl\,\rrhM}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Slp}
+%
+% \begin{macro}{\rrSlp}
+% \begin{macro}{\rrhSlp}
+% \begin{macro}{\RubikSlp}
+% \begin{macro}{\textRubikSlp}
+% These commands draw forms of the Singmaster Slp slice rotation.
+% \begin{macrocode}
+\newcommand{\rrSlp}{\@rrlp{S}}
+\newcommand{\rrhSlp}{\rrhMp}%
+\newcommand{\RubikSlp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareMp\\
+\rrSlp%
+\end{minipage}%
+}}
+\newcommand{\textRubikSlp}{\rrSlp\,\rrhMp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Sr}
+%
+% \begin{macro}{\rrSr}
+% \begin{macro}{\rrhSr}
+% \begin{macro}{\RubikSr}
+% \begin{macro}{\textRubikSr}
+% These commands draw forms of the Singmaster Sr slice rotation.
+% \begin{macrocode}
+\newcommand{\rrSr}{\@rrr{S}}
+\newcommand{\rrhSr}{\rrhMp}%
+\newcommand{\RubikSr}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareMp\\
+\rrSr%
+\end{minipage}%
+}}
+\newcommand{\textRubikSr}{\rrSr\,\rrhMp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Srp}
+%
+% \begin{macro}{\rrSrp}
+% \begin{macro}{\rrhSrp}
+% \begin{macro}{\RubikSrp}
+% \begin{macro}{\textRubikSrp}
+% These commands draw forms of the Singmaster Srp slice rotation.
+% \begin{macrocode}
+\newcommand{\rrSrp}{\@rrrp{S}}
+\newcommand{\rrhSrp}{\rrhM}%
+\newcommand{\RubikSrp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareM\\
+\rrSrp%
+\end{minipage}%
+}}
+\newcommand{\textRubikSrp}{\rrSrp\,\rrhM}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Sf}
+%
+% \begin{macro}{\rrSf}
+% \begin{macro}{\rrhSf}
+% \begin{macro}{\RubikSf}
+% \begin{macro}{\textRubikSf}
+% These commands draw forms of the Singmaster Sf slice rotation.
+% We need to just make square with Sf in square;
+% adjust box height using a \cmd{\rule};
+% adjust \cmd{\fboxsep} (default=3pt);
+% adjust \cmd{\fboxrule} (default=0.4pt);
+% bounded by \{\} so no need to reset to defaults.
+% Not visible from the front.
+% \begin{macrocode}
+\newcommand{\rrSf}{\@rrf{S}}
+\newcommand{\SquareSf}{\@tlen\@SquareLetter{\rrSf}\@tlen}
+\newcommand{\rrhSf}{\raisebox{-0.25mm}{\SquareSf}}
+\newcommand{\RubikSf}{\raisebox{\@hRubik}{\SquareSf}}
+\newcommand{\textRubikSf}{\rrhSf}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Sfp}
+%
+% \begin{macro}{\rrSfp}
+% \begin{macro}{\rrhSfp}
+% \begin{macro}{\RubikSfp}
+% \begin{macro}{\textRubikSfp}
+% These commands draw forms of the Singmaster Sfp slice rotation.
+% We need to just make square with Sfp in square;
+% adjust box height using a \cmd{\rule};
+% adjust \cmd{\fboxsep} (default=3pt);
+% adjust \cmd{\fboxrule} (default=0.4pt);
+% bounded by \{\} so no need to reset to defaults.
+% Not visible from the front.
+% \begin{macrocode}
+\newcommand{\rrSfp}{\@rrfp{S}}
+\newcommand{\SquareSfp}{\@tlen\@SquareLetter{\rrSfp}\@tlen}
+\newcommand{\rrhSfp}{\raisebox{-0.25mm}{\SquareSfp}}
+\newcommand{\RubikSfp}{\raisebox{\@hRubik}{\SquareSfp}}
+\newcommand{\textRubikSfp}{\rrhSfp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Sb}
+%
+% \begin{macro}{\rrSb}
+% \begin{macro}{\rrhSb}
+% \begin{macro}{\RubikSb}
+% \begin{macro}{\textRubikSb}
+% These commands draw forms of the Singmaster Sb slice rotation.
+% We need to just make square with Sb in square;
+% adjust box height using a \cmd{\rule};
+% adjust \cmd{\fboxsep} (default=3pt);
+% adjust \cmd{\fboxrule} (default=0.4pt);
+% bounded by \{\} so no need to reset to defaults.
+% Not visible from the front.
+% \begin{macrocode}
+\newcommand{\rrSb}{\@rrb{S}}
+\newcommand{\SquareSb}{\@tlen\@SquareLetter{\rrSb}\@tlen}
+\newcommand{\rrhSb}{\raisebox{-0.25mm}{\SquareSb}}
+\newcommand{\RubikSb}{\raisebox{\@hRubik}{\SquareSb}}
+\newcommand{\textRubikSb}{\rrhSb}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Sbp}
+%
+% \begin{macro}{\rrSbp}
+% \begin{macro}{\rrhSbp}
+% \begin{macro}{\RubikSbp}
+% \begin{macro}{\textRubikSbp}
+% These commands draw forms of the Singmaster Sbp slice rotation.
+% We need to just make square with Sbp in square;
+% adjust box height using a \cmd{\rule};
+% adjust \cmd{\fboxsep} (default=3pt);
+% adjust \cmd{\fboxrule} (default=0.4pt);
+% bounded by \{\} so no need to reset to defaults.
+% Not visible from th front.
+% \begin{macrocode}
+\newcommand{\rrSbp}{\@rrbp{S}}
+\newcommand{\SquareSbp}{\@tlen\@SquareLetter{\rrSbp}\@tlen}
+\newcommand{\rrhSbp}{\raisebox{-0.25mm}{\SquareSbp}}
+\newcommand{\RubikSbp}{\raisebox{\@hRubik}{\SquareSbp}}
+\newcommand{\textRubikSbp}{\rrhSbp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation U}
+%
+% \begin{macro}{\rrU}
+% \begin{macro}{\SquareU}
+% \begin{macro}{\rrhU}
+% \begin{macro}{\RubikU}
+% \begin{macro}{\textRubikU}
+% These commands all draw forms which denote the U rotation.
+% \begin{macrocode}
+\newcommand{\rrU}{\@rr{U}}
+%%
+\newcommand{\SquareU}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick, <-] (\@sb,\@sddd) -- (\@sbh, \@sddd);
+\draw [thick] (\@sb,\@sdd) -- (\@sbh, \@sdd);
+\draw [thick] (\@sb,\@sd) -- (\@sbh, \@sd);
+\end{tikzpicture}%
+}
+\newcommand{\rrhU}{\raisebox{-0.333\height}{\@tlen\SquareU\@tlen}}
+%%
+\newcommand{\RubikU}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareU\\
+\rrU%
+\end{minipage}%%
+}}
+\newcommand{\textRubikU}{\rrU\,\rrhU}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Uw}
+%
+% \begin{macro}{\rrUw}
+% \begin{macro}{\SquareUw}
+% \begin{macro}{\rrhUw}
+% \begin{macro}{\RubikUw}
+% \begin{macro}{\textRubikUw}
+% These commands all draw forms which denote the Uw rotation.
+% \begin{macrocode}
+\newcommand{\rrUw}{\@rrw{U}}
+%%
+\newcommand{\SquareUw}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick, <-] (\@sb,\@sddd) -- (\@sbh, \@sddd);
+\draw [thick, <-] (\@sb,\@sdd) -- (\@sbh, \@sdd);
+\draw [thick] (\@sb,\@sd) -- (\@sbh, \@sd);
+\end{tikzpicture}%
+}
+%
+\newcommand{\rrhUw}{\raisebox{-0.333\height}{\@tlen\SquareUw\@tlen}}
+%%
+\newcommand{\RubikUw}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareUw\\
+\rrUw%
+\end{minipage}%%
+}}
+%%
+\newcommand{\textRubikUw}{\rrUw\,\rrhUw}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Up}
+%
+% \begin{macro}{\rrUp}
+% \begin{macro}{\SquareUp}
+% \begin{macro}{\rrhUp}
+% \begin{macro}{\RubikUp}
+% \begin{macro}{\textRubikUp}
+% These commands all draw forms which denote the Up rotation.
+% \begin{macrocode}
+\newcommand{\rrUp}{\@rrp{U}}
+%%
+\newcommand{\SquareUp}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick, ->] (\@sb,\@sddd) -- (\@sbh, \@sddd);
+\draw [thick] (\@sb,\@sdd) -- (\@sbh, \@sdd);
+\draw [thick] (\@sb,\@sd) -- (\@sbh, \@sd);
+\end{tikzpicture}%
+}
+\newcommand{\rrhUp}{\raisebox{-0.333\height}{\@tlen\SquareUp\@tlen}}
+%%
+\newcommand{\RubikUp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareUp\\
+\rrUp%
+\end{minipage}%%
+}}
+\newcommand{\textRubikUp}{\rrUp\,\rrhUp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Uwp}
+%
+% \begin{macro}{\rrUwp}
+% \begin{macro}{\SquareUwp}
+% \begin{macro}{\rrhUwp}
+% \begin{macro}{\RubikUwp}
+% \begin{macro}{\textRubikUwp}
+% These commands all draw forms which denote the Uwp rotation.
+% \begin{macrocode}
+\newcommand{\rrUwp}{\@rrwp{U}}
+%%
+\newcommand{\SquareUwp}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick, ->] (\@sb,\@sddd) -- (\@sbh, \@sddd);
+\draw [thick, ->] (\@sb,\@sdd) -- (\@sbh, \@sdd);
+\draw [thick] (\@sb,\@sd) -- (\@sbh, \@sd);
+\end{tikzpicture}%
+}
+\newcommand{\rrhUwp}{\raisebox{-0.333\height}{\@tlen\SquareUwp\@tlen}}
+%%
+\newcommand{\RubikUwp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareUwp\\
+\rrUwp%
+\end{minipage}%%
+}}
+\newcommand{\textRubikUwp}{\rrUwp\,\rrhUwp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Us}
+%
+% \begin{macro}{\rrUs}
+% \begin{macro}{\SquareUs}
+% \begin{macro}{\rrhUs}
+% \begin{macro}{\RubikUs}
+% \begin{macro}{\textRubikUs}
+% These commands all draw forms which denote the Us rotation.
+% \begin{macrocode}
+\newcommand{\rrUs}{\@rrs{U}}
+%%
+\newcommand{\SquareUs}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick, <-] (\@sb,\@sddd) -- (\@sbh, \@sddd);
+\draw [thick] (\@sb,\@sdd) -- (\@sbh, \@sdd);
+\draw [thick, <-] (\@sb,\@sd) -- (\@sbh, \@sd);
+\end{tikzpicture}%
+}
+\newcommand{\rrhUs}{\raisebox{-0.333\height}{\@tlen\SquareUs\@tlen}}
+%%
+\newcommand{\RubikUs}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareUs\\
+\rrUs%
+\end{minipage}%
+}}
+\newcommand{\textRubikUs}{\rrUs\,\rrhUs}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Usp}
+%
+% \begin{macro}{\rrUsp}
+% \begin{macro}{\SquareUsp}
+% \begin{macro}{\rrhUs}
+% \begin{macro}{\RubikUs}
+% \begin{macro}{\textRubikUsp}
+% These commands all draw forms which denote the Usp rotation.
+% \begin{macrocode}
+\newcommand{\rrUsp}{\@rrsp{U}}
+%%
+\newcommand{\SquareUsp}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick, ->] (\@sb,\@sddd) -- (\@sbh, \@sddd);
+\draw [thick] (\@sb,\@sdd) -- (\@sbh, \@sdd);
+\draw [thick, ->] (\@sb,\@sd) -- (\@sbh, \@sd);
+\end{tikzpicture}%
+}
+\newcommand{\rrhUsp}{\raisebox{-0.333\height}{\@tlen\SquareUsp\@tlen}}
+%%
+\newcommand{\RubikUsp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareUsp\\
+\rrUsp%
+\end{minipage}%
+}}
+\newcommand{\textRubikUsp}{\rrUsp\,\rrhUsp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Ua}
+%
+% \begin{macro}{\rrUa}
+% \begin{macro}{\SquareUa}
+% \begin{macro}{\rrhUa}
+% \begin{macro}{\RubikUa}
+% \begin{macro}{\textRubikUa}
+% These commands all draw forms which denote the Ua rotation.
+% \begin{macrocode}
+\newcommand{\rrUa}{\@rra{U}}
+%%
+\newcommand{\SquareUa}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick, <-] (\@sb,\@sddd) -- (\@sbh, \@sddd);
+\draw [thick] (\@sb,\@sdd) -- (\@sbh, \@sdd);
+\draw [thick, ->] (\@sb,\@sd) -- (\@sbh, \@sd);
+\end{tikzpicture}%
+}
+\newcommand{\rrhUa}{\raisebox{-0.333\height}{\@tlen\SquareUa\@tlen}}
+%%
+\newcommand{\RubikUa}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareUa\\
+\rrUa%
+\end{minipage}%
+}}
+\newcommand{\textRubikUa}{\rrUa\,\rrhUa}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Uap}
+%
+% \begin{macro}{\rrUap}
+% \begin{macro}{\SquareUap}
+% \begin{macro}{\rrhUap}
+% \begin{macro}{\RubikUap}
+% \begin{macro}{\textRubikUap}
+% These commands all draw forms which denote the Uap rotation.
+% \begin{macrocode}
+\newcommand{\rrUap}{\@rrap{U}}
+%%
+\newcommand{\SquareUap}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick, ->] (\@sb,\@sddd) -- (\@sbh, \@sddd);
+\draw [thick] (\@sb,\@sdd) -- (\@sbh, \@sdd);
+\draw [thick, <-] (\@sb,\@sd) -- (\@sbh, \@sd);
+\end{tikzpicture}%
+}
+\newcommand{\rrhUap}{\raisebox{-0.333\height}{\@tlen\SquareUap\@tlen}}
+%%
+\newcommand{\RubikUap}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareUap\\
+\rrUap%
+\end{minipage}%
+}}
+\newcommand{\textRubikUap}{\rrUap\,\rrhUap}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \subsubsection{\hspace{3mm}Rotations x and xp}
+%
+% \begin{macro}{\rrx}
+% \begin{macro}{\rrhx}
+% \begin{macro}{\Rubikx}
+% These commands all draw forms which denote the x rotation.
+% \begin{macrocode}
+\newcommand{\rrx}{\@rr{x}}
+\newcommand{\Rubikx}{\@xyzRubik{x}}
+\newcommand{\rrhx}{\@xyzh{x}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\rrxp}
+% \begin{macro}{\rrhxp}
+% \begin{macro}{\Rubikxp}
+% These commands all draw forms which denote the xp rotation.
+% \begin{macrocode}
+\newcommand{\rrxp}{\@rrp{x}}
+\newcommand{\Rubikxp}{\@xyzRubikp{x}}
+\newcommand{\rrhxp}{\@xyzhp{x}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations y and yp}
+%
+% \begin{macro}{\rry}
+% \begin{macro}{\rrhy}
+% \begin{macro}{\Rubiky}
+% These commands all draw forms which denote the y rotation.
+% \begin{macrocode}
+\newcommand{\rry}{\@rr{y}}
+\newcommand{\Rubiky}{\@xyzRubik{y}}
+\newcommand{\rrhy}{\@xyzh{y}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\rryp}
+% \begin{macro}{\rrhyp}
+% \begin{macro}{\Rubikyp}
+% These commands all draw forms which denote the yp rotation.
+% \begin{macrocode}
+\newcommand{\rryp}{\@rrp{y}}
+\newcommand{\Rubikyp}{\@xyzRubikp{y}}
+\newcommand{\rrhyp}{\@xyzhp{y}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations z and zp}
+%
+% \begin{macro}{\rrz}
+% \begin{macro}{\rrhz}
+% \begin{macro}{\Rubikz}
+% These commands all draw forms which denote the z rotation.
+% \begin{macrocode}
+\newcommand{\rrz}{\@rr{z}}
+\newcommand{\Rubikz}{\@xyzRubik{z}}
+\newcommand{\rrhz}{\@xyzh{z}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\rrzp}
+% \begin{macro}{\rrhzp}
+% \begin{macro}{\Rubikzp}
+% These commands all draw forms which denote the zp rotation.
+% \begin{macrocode}
+\newcommand{\rrzp}{\@rrp{z}}
+\newcommand{\Rubikzp}{\@xyzRubikp{z}}
+\newcommand{\rrhzp}{\@xyzhp{z}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations u and d}
+%
+% \begin{macro}{\rru}
+% \begin{macro}{\rrhu}
+% \begin{macro}{\Rubiku}
+% These commands all draw forms which denote the u and up cube rotation.
+% \begin{macrocode}
+\newcommand{\rru}{\@rr{u}}
+\newcommand{\rrup}{\@rrp{u}}
+\newcommand{\rrhu}{\@xyzh{u}}
+\newcommand{\rrhup}{\@xyzhp{u}}
+\newcommand{\Rubiku}{\@xyzRubik{u}}
+\newcommand{\Rubikup}{\@xyzRubikp{u}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\rrd}
+% \begin{macro}{\rrhd}
+% \begin{macro}{\Rubikd}
+% These commands all draw forms which denote the d and dp cube rotation.
+% \begin{macrocode}
+\newcommand{\rrd}{\@rr{d}}
+\newcommand{\rrdp}{\@rrp{d}}
+\newcommand{\rrhd}{\@xyzhbdfl{d}}
+\newcommand{\rrhdp}{\@xyzhbdflp{d}}
+\newcommand{\Rubikd}{\@xyzbdflRubik{d}}
+\newcommand{\Rubikdp}{\@xyzbdflRubikp{d}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations l and r}
+%
+% \begin{macro}{\rrl}
+% \begin{macro}{\rrhl}
+% \begin{macro}{\Rubikl}
+% These commands all draw forms which denote the l and lp cube rotation.
+% \begin{macrocode}
+\newcommand{\rrl}{\@rr{l}}
+\newcommand{\rrlp}{\@rrp{l}}
+\newcommand{\rrhl}{\@xyzhbdfl{l}}
+\newcommand{\rrhlp}{\@xyzhbdflp{l}}
+\newcommand{\Rubikl}{\@xyzbdflRubik{l}}
+\newcommand{\Rubiklp}{\@xyzbdflRubikp{l}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\rrr}
+% \begin{macro}{\rrhr}
+% \begin{macro}{\Rubikr}
+% These commands all draw forms which denote the r and rp cube rotation.
+% \begin{macrocode}
+\newcommand{\rrr}{\@rr{r}}
+\newcommand{\rrrp}{\@rrp{r}}
+\newcommand{\rrhr}{\@xyzh{r}}
+\newcommand{\rrhrp}{\@xyzhp{r}}
+\newcommand{\Rubikr}{\@xyzRubik{r}}
+\newcommand{\Rubikrp}{\@xyzRubikp{r}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations f and b}
+%
+% \begin{macro}{\rrf}
+% \begin{macro}{\rrhf}
+% \begin{macro}{\Rubikf}
+% These commands all draw forms which denote the f and fp cube rotation.
+% \begin{macrocode}
+\newcommand{\rrf}{\@rr{f}}
+\newcommand{\rrfp}{\@rrp{f}}
+\newcommand{\rrhf}{\@xyzhbdfl{f}}
+\newcommand{\rrhfp}{\@xyzhbdflp{f}}
+\newcommand{\Rubikf}{\@xyzbdflRubik{f}}
+\newcommand{\Rubikfp}{\@xyzbdflRubikp{f}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\rrb}
+% \begin{macro}{\rrhb}
+% \begin{macro}{\Rubikb}
+% These commands all draw forms which denote the b and bp cube rotation.
+% \begin{macrocode}
+\newcommand{\rrb}{\@rr{b}}
+\newcommand{\rrbp}{\@rrp{b}}
+\newcommand{\rrhb}{\@xyzhbdfl{b}}
+\newcommand{\rrhbp}{\@xyzhbdflp{b}}
+\newcommand{\Rubikb}{\@xyzbdflRubik{b}}
+\newcommand{\Rubikbp}{\@xyzbdflRubikp{b}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{\hspace{3mm}Face(c) and Face(m) rotations}
+% \label{sec:codeJaap}
+%
+% This subsection (added Nov 2016) is to accommodate some additional notation,
+% much used on the Jaap Puzzles website (Scherphius J), which, although quite
+% convenient, is technically `non-standard'. This additional notation
+% makes available the (middle slice) rotations of the form Rm, Rmp, Lm, Lmp, ... and
+% also the (whole cube) rotations Rc, Lc, ... (referenced to a face) as used on the
+% Cube Lovers usenet group (1981--1997). This notation was probably invented by Singmaster
+% (see Scherphius J).
+%
+% \begin{macro}{\@xyzhc}
+% \begin{macro}{\@xyzhcp}
+% \begin{macro}{\@xyzRubikc}
+% \begin{macro}{\@xyzRubikcp}
+% First we have some useful facilitating commands we shall make use of in
+% conjunction with the Face(c) and Face(cp) notation.
+% \begin{macrocode}
+\newcommand{\@xyzhc}[1]{[\raisebox{-1.2pt}%
+ {{\@rubikfont #1\@rubikfontFNS c}}]}
+\newcommand{\@xyzhcp}[1]{[\raisebox{-1.2pt}%
+ {{\@rubikfont #1{\@rubikfontFNS c}\@rubikprime}}]}
+\newcommand{\@xyzRubikc}[1]{\raisebox{3.45pt}%
+ {[\raisebox{-1.2pt}{{\@rubikfont #1\@rubikfontFNS c}}]}}
+\newcommand{\@xyzRubikcp}[1]{\raisebox{3.45pt}%
+ {[\raisebox{-1.2pt}{{\@rubikfont #1{\@rubikfontFNS c}\@rubikprime}}]}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations Rc and Rcp}
+%
+% Whole cube rotations Rc = x, Rcp = xp.
+%
+% \begin{macro}{\rrRc}
+% \begin{macro}{\rrhRc}
+% \begin{macro}{\RubikRc}
+% These commands all draw forms which denote the Rc rotation.
+% \begin{macrocode}
+\newcommand{\rrRc}{\@rrc{R}}
+\newcommand{\RubikRc}{\@xyzRubikc{R}}
+\newcommand{\rrhRc}{\@xyzhc{R}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\rrRcp}
+% \begin{macro}{\rrhRcp}
+% \begin{macro}{\RubikRcp}
+% These commands all draw forms which denote the Rcp rotation.
+% \begin{macrocode}
+\newcommand{\rrRcp}{\@rrcp{R}}
+\newcommand{\RubikRcp}{\@xyzRubikcp{R}}
+\newcommand{\rrhRcp}{\@xyzhcp{R}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations Lc and Lcp}
+%
+% Whole cube rotations Lc = xp, Lcp = x.
+%
+% \begin{macro}{\rrLc}
+% \begin{macro}{\rrhLc}
+% \begin{macro}{\RubikLc}
+% These commands all draw forms which denote the Lc rotation.
+% \begin{macrocode}
+\newcommand{\rrLc}{\@rrc{L}}
+\newcommand{\RubikLc}{\@xyzRubikc{L}}
+\newcommand{\rrhLc}{\@xyzhc{L}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\rrLcp}
+% \begin{macro}{\rrhLcp}
+% \begin{macro}{\RubikLcp}
+% These commands all draw forms which denote the Lcp rotation.
+% \begin{macrocode}
+\newcommand{\rrLcp}{\@rrcp{L}}
+\newcommand{\RubikLcp}{\@xyzRubikcp{L}}
+\newcommand{\rrhLcp}{\@xyzhcp{L}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations Uc and Ucp}
+%
+% Whole cube rotation Uc = y, Ucp=yp.
+%
+% \begin{macro}{\rrUc}
+% \begin{macro}{\rrhUc}
+% \begin{macro}{\RubikUc}
+% These commands all draw forms which denote the Uc rotation.
+% \begin{macrocode}
+\newcommand{\rrUc}{\@rrc{U}}
+\newcommand{\RubikUc}{\@xyzRubikc{U}}
+\newcommand{\rrhUc}{\@xyzhc{U}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\rrUcp}
+% \begin{macro}{\rrhUcp}
+% \begin{macro}{\RubikUcp}
+% These commands all draw forms which denote the Ucp rotation.
+% \begin{macrocode}
+\newcommand{\rrUcp}{\@rrcp{U}}
+\newcommand{\RubikUcp}{\@xyzRubikcp{U}}
+\newcommand{\rrhUcp}{\@xyzhcp{U}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations Dc and Dcp}
+%
+% Whole cube rotations Dc = yp, Dcp = y.
+%
+% \begin{macro}{\rrDc}
+% \begin{macro}{\rrhDc}
+% \begin{macro}{\RubikDc}
+% These commands all draw forms which denote the Dc rotation.
+% \begin{macrocode}
+\newcommand{\rrDc}{\@rrc{D}}
+\newcommand{\RubikDc}{\@xyzRubikc{D}}
+\newcommand{\rrhDc}{\@xyzhc{D}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\rrDcp}
+% \begin{macro}{\rrhDcp}
+% \begin{macro}{\RubikDcp}
+% These commands all draw forms which denote the Dcp rotation.
+% \begin{macrocode}
+\newcommand{\rrDcp}{\@rrcp{D}}
+\newcommand{\RubikDcp}{\@xyzRubikcp{D}}
+\newcommand{\rrhDcp}{\@xyzhcp{D}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations Fc and Fcp}
+%
+% Whole cube rotations Fc = z, Fcp = zp.
+%
+% \begin{macro}{\rrFc}
+% \begin{macro}{\rrhFc}
+% \begin{macro}{\RubikFc}
+% These commands all draw forms which denote the Fc rotation.
+% \begin{macrocode}
+\newcommand{\rrFc}{\@rrc{F}}
+\newcommand{\RubikFc}{\@xyzRubikc{F}}
+\newcommand{\rrhFc}{\@xyzhc{F}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\rrFcp}
+% \begin{macro}{\rrhFcp}
+% \begin{macro}{\RubikFcp}
+% These commands all draw forms which denote the Fcp rotation.
+% \begin{macrocode}
+\newcommand{\rrFcp}{\@rrcp{F}}
+\newcommand{\RubikFcp}{\@xyzRubikcp{F}}
+\newcommand{\rrhFcp}{\@xyzhcp{F}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations Bc and Bcp}
+%
+% Whole cube rotation Bc = zp, Bcp = z.
+%
+% \begin{macro}{\rrBc}
+% \begin{macro}{\rrhBc}
+% \begin{macro}{\RubikBc}
+% These commands all draw forms which denote the Bc rotation.
+% \begin{macrocode}
+\newcommand{\rrBc}{\@rrc{B}}
+\newcommand{\RubikBc}{\@xyzRubikc{B}}
+\newcommand{\rrhBc}{\@xyzhc{B}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\rrBcp}
+% \begin{macro}{\rrhBcp}
+% \begin{macro}{\RubikBcp}
+% These commands all draw forms which denote the Bcp rotation.
+% \begin{macrocode}
+\newcommand{\rrBcp}{\@rrcp{B}}
+\newcommand{\RubikBcp}{\@xyzRubikcp{B}}
+\newcommand{\rrhBcp}{\@xyzhcp{B}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations Rm and Rmp}
+%
+% Rm = Mp= Sr (M follows Left). We use Sr and Srp as the templates.
+%
+% \begin{macro}{\rrRm}
+% \begin{macro}{\rrhRm}
+% \begin{macro}{\RubikRm}
+% \begin{macro}{\textRubikRm}
+% These commands draw forms of the Rm slice rotation.
+% \begin{macrocode}
+\newcommand{\rrRm}{\@rrm{R}}
+\newcommand{\rrhRm}{\rrhMp}%
+\newcommand{\RubikRm}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareMp\\
+\rrRm%
+\end{minipage}%
+}}
+\newcommand{\textRubikRm}{\rrRm\,\rrhMp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\rrRmp}
+% \begin{macro}{\rrhRmp}
+% \begin{macro}{\RubikRmp}
+% \begin{macro}{\textRubikRmp}
+% These commands draw forms of the Rmp slice rotation.
+% \begin{macrocode}
+\newcommand{\rrRmp}{\@rrmp{R}}
+\newcommand{\rrhRmp}{\rrhM}%
+\newcommand{\RubikRmp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareM\\
+\rrRmp%
+\end{minipage}%
+}}
+\newcommand{\textRubikRmp}{\rrRmp\,\rrhM}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations Lm and Lmp}
+%
+% Lm = M = Sl (M follows Left). We use Sl and Slp as the templates.
+%
+% \begin{macro}{\rrLm}
+% \begin{macro}{\rrhLm}
+% \begin{macro}{\RubikLm}
+% \begin{macro}{\textRubikLm}
+% These commands draw forms of the Lm slice rotation.
+% \begin{macrocode}
+\newcommand{\rrLm}{\@rrm{L}}
+\newcommand{\rrhLm}{\rrhM}%
+\newcommand{\RubikLm}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareM\\
+\rrLm%
+\end{minipage}%
+}}
+\newcommand{\textRubikLm}{\rrLm\,\rrhM}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\rrLmp}
+% \begin{macro}{\rrhLmp}
+% \begin{macro}{\RubikLmp}
+% \begin{macro}{\textRubikLmp}
+% These commands draw forms of the Lmp slice rotation.
+% \begin{macrocode}
+\newcommand{\rrLmp}{\@rrmp{L}}
+\newcommand{\rrhLmp}{\rrhMp}%
+\newcommand{\RubikLmp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareMp\\
+\rrLmp%
+\end{minipage}%
+}}
+\newcommand{\textRubikLmp}{\rrLmp\,\rrhMp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations Um and Ump}
+%
+% Um = Ep = Su (E follows Down). We use Su and Sup as the templates.
+%
+% \begin{macro}{\rrUm}
+% \begin{macro}{\rrhUm}
+% \begin{macro}{\RubikUm}
+% \begin{macro}{\textRubikUm}
+% These commands draw forms of the Um slice rotation.
+% We also need to fine-tune the spacing
+% between these `slice' hieroglyphs (especially Fs and Bs).
+% \begin{macrocode}
+\newcommand{\rrUm}{\@rrm{U}}
+\newcommand{\rrhUm}{\rrhEp}%
+\newcommand{\RubikUm}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareEp\\
+\rrUm%
+\end{minipage}%
+}}
+\newcommand{\textRubikUm}{\rrUm\,\rrhEp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\rrUmp}
+% \begin{macro}{\rrhUmp}
+% \begin{macro}{\RubikUmp}
+% \begin{macro}{\textRubikUmp}
+% These commands draw forms of the Ump slice rotation.
+% We also need to fine-tune the spacing
+% between these `slice' hieroglyphs (especially Fs and Bs).
+% \begin{macrocode}
+\newcommand{\rrUmp}{\@rrmp{U}}
+\newcommand{\rrhUmp}{\rrhE}%
+\newcommand{\RubikUmp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareE\\
+\rrUmp%
+\end{minipage}%
+}}
+\newcommand{\textRubikUmp}{\rrUmp\,\rrhE}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations Dm and Dmp}
+%
+% Dm = E = Sd (E follows Down). We use Sd and Sdp as the templates.
+%
+% \begin{macro}{\rrDm}
+% \begin{macro}{\rrhDm}
+% \begin{macro}{\RubikDm}
+% \begin{macro}{\textRubikDm}
+% These commands draw forms of the Singmaster Dm slice rotation.
+% \begin{macrocode}
+\newcommand{\rrDm}{\@rrm{D}}
+\newcommand{\rrhDm}{\rrhE}%
+\newcommand{\RubikDm}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareE\\
+\rrDm%
+\end{minipage}%
+}}
+\newcommand{\textRubikDm}{\rrDm\,\rrhE}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\rrDmp}
+% \begin{macro}{\rrhDmp}
+% \begin{macro}{\RubikDmp}
+% \begin{macro}{\textRubikDmp}
+% These commands draw forms of the Singmaster Dmp slice rotation.
+% \begin{macrocode}
+\newcommand{\rrDmp}{\@rrmp{D}}
+\newcommand{\rrhDmp}{\rrhEp}%
+\newcommand{\RubikDmp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareEp\\
+\rrDmp%
+\end{minipage}%
+}}
+\newcommand{\textRubikDmp}{\rrDmp\,\rrhEp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations Fm and Fmp}
+%
+% Fm = S = Sf (S follows Front).
+% S is not visible from the front, so is represented in a square box.
+% We use Sf and Sfp as the templates.
+%
+% \begin{macro}{\rrFm}
+% \begin{macro}{\rrhFm}
+% \begin{macro}{\RubikFm}
+% \begin{macro}{\textRubikFm}
+% These commands draw forms of the Fm slice rotation.
+% We need to just make square with Fm in square;
+% adjust box height using a \cmd{\rule};
+% adjust \cmd{\fboxsep} (default=3pt);
+% adjust \cmd{\fboxrule} (default=0.4pt);
+% bounded by \{\} so no need to reset to defaults.
+% Not visible from the front.
+% \begin{macrocode}
+\newcommand{\rrFm}{\@rrm{F}}
+\newcommand{\SquareFm}{\@tlen\@SquareLetter{\rrFm}\@tlen}
+\newcommand{\rrhFm}{\raisebox{-0.25mm}{\SquareFm}}
+\newcommand{\RubikFm}{\raisebox{\@hRubik}{\SquareFm}}
+\newcommand{\textRubikFm}{\rrhFm}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\rrFmp}
+% \begin{macro}{\rrhFmp}
+% \begin{macro}{\RubikFmp}
+% \begin{macro}{\textRubikFmp}
+% These commands draw forms of the Fmp slice rotation.
+% We need to just make square with Fmp in square;
+% adjust box height using a \cmd{\rule};
+% adjust \cmd{\fboxsep} (default=3pt);
+% adjust \cmd{\fboxrule} (default=0.4pt);
+% bounded by \{\} so no need to reset to defaults.
+% Not visible from the front.
+% \begin{macrocode}
+\newcommand{\rrFmp}{\@rrmp{F}}
+\newcommand{\SquareFmp}{\@tlen\@SquareLetter{\rrFmp}\@tlen}
+\newcommand{\rrhFmp}{\raisebox{-0.25mm}{\SquareFmp}}
+\newcommand{\RubikFmp}{\raisebox{\@hRubik}{\SquareFmp}}
+\newcommand{\textRubikFmp}{\rrhFmp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations Bm and Bmp}
+%
+% Bm = Sp = Sb. We use Sb and Sbp as the templates.
+%
+% \begin{macro}{\rrBm}
+% \begin{macro}{\rrhBm}
+% \begin{macro}{\RubikBm}
+% \begin{macro}{\textRubikBm}
+% These commands draw forms of the Bm slice rotation.
+% We need to just make square with Bm in square;
+% adjust box height using a \cmd{\rule};
+% adjust \cmd{\fboxsep} (default=3pt);
+% adjust \cmd{\fboxrule} (default=0.4pt);
+% bounded by \{\} so no need to reset to defaults.
+% Not visible from the front.
+% \begin{macrocode}
+\newcommand{\rrBm}{\@rrm{B}}
+\newcommand{\SquareBm}{\@tlen\@SquareLetter{\rrBm}\@tlen}
+\newcommand{\rrhBm}{\raisebox{-0.25mm}{\SquareBm}}
+\newcommand{\RubikBm}{\raisebox{\@hRubik}{\SquareBm}}
+\newcommand{\textRubikBm}{\rrhBm}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\rrBmp}
+% \begin{macro}{\rrhBmp}
+% \begin{macro}{\RubikBmp}
+% \begin{macro}{\textRubikBmp}
+% These commands draw forms of the Bmp slice rotation.
+% We need to just make square with Bmp in square;
+% adjust box height using a \cmd{\rule};
+% adjust \cmd{\fboxsep} (default=3pt);
+% adjust \cmd{\fboxrule} (default=0.4pt);
+% bounded by \{\} so no need to reset to defaults.
+% Not visible from the front.
+% \begin{macrocode}
+\newcommand{\rrBmp}{\@rrmp{B}}
+\newcommand{\SquareBmp}{\@tlen\@SquareLetter{\rrBmp}\@tlen}
+\newcommand{\rrhBmp}{\raisebox{-0.25mm}{\SquareBmp}}
+\newcommand{\RubikBmp}{\raisebox{\@hRubik}{\SquareBmp}}
+\newcommand{\textRubikBmp}{\rrhBmp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+%
+% \subsection{\hspace{3mm}Randelshofer superset ENG rotations (CMST)}
+% \label{sec:codeRandelshofer}
+%
+% (see webpage: \verb!Randelshofer.ch/rubik/patterns/doc/supersetENG_3x3.html!)
+%
+% This section relates to the recent Rubik notation developed
+% by Randelshofer (see URL above), known as the ``superset ENG rotations''
+% (see Sections~\ref{sec:RubikCommands} and \ref{sec:listofRandelshofercommands}
+% for details).
+%
+% I denote this notation as ``CMST'' (i.e.,~his C, M, S and T notation).
+% Although this notation replicates previously existing World Cube Association notation,
+% we include it here for completeness. Fortunately the Randelshofer notation does
+% not conflict with existing notation.
+%
+% Briefly, the CMST letters denote whole Cube, Middle, outer-Slice and wide (T)
+% rotations associated with named faces. For~example, the rotation-code MR
+% indicates a rotation of the middle slice parallel to the \textsc{right} face,
+% and in the same sense (direction) as \rr{R}\ (see Section~\ref{sec:RubikCommands} for details).
+%
+%
+% First we make some useful facilitating commands for the CX1 and CX1p forms
+% as these are handled with raised square brackets.
+% We model these four macros on the equivalent
+% \verb!\@xyzh!, \verb!\@xyzhp!,\verb!\@xyzRubik!,\verb!\@xyzRubikp! macros defined above.
+% \begin{macrocode}
+\newcommand{\@randhc}[1]{[\raisebox{-1.2pt}{{\@rubikfont C#1}}]}
+\newcommand{\@randhcp}[1]{[\raisebox{-1.2pt}{{\@rubikfont C#1\@rubikprime}}]}
+\newcommand{\@randRubikc}[1]%
+ {\raisebox{3.45pt}{[\raisebox{-1.2pt}{{\@rubikfont C#1}}]}}
+\newcommand{\@randRubikcp}[1]%
+ {\raisebox{3.45pt}{[\raisebox{-1.2pt}{{\@rubikfont C#1\@rubikprime}}]}}
+% \end{macrocode}
+%
+%
+% In the following we create the base form of a rotation code, eg \rrhCR\ and then
+% the user typesets this rotation using CR as the argument for \verb!\rrh{}!.
+% This works because the macro \verb!\@join{}{}! is used to join \cmd{\rrh}
+% and CR $\rightarrow$ \cmd{\rrhCR} etc.
+%
+% The = signs at the beginning of each new section indicate the equivalence
+% between the Randelshofer notation and the current (World Cube Association)
+% notation.
+%
+%
+% \subsubsection{\hspace{3mm}Rotations CR and CRp}
+%
+% Whole cube rotations CR = Rc = x, CRp = Rcp = xp.
+%
+% \begin{macro}{\rrCR}
+% \begin{macro}{\rrhCR}
+% \begin{macro}{\RubikCR}
+% These commands all draw forms which denote the CR = Rc rotation.
+% \begin{macrocode}
+\newcommand{\rrCR}{\@rr{CR}}
+\newcommand{\RubikCR}{\@randRubikc{R}}
+\newcommand{\rrhCR}{\@randhc{R}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\rrCRp}
+% \begin{macro}{\rrhCRp}
+% \begin{macro}{\RubikCRp}
+% These commands all draw forms which denote the CRp = Rcp rotation.
+% \begin{macrocode}
+\newcommand{\rrCRp}{\@rrp{CR}}
+\newcommand{\RubikCRp}{\@randRubikcp{R}}
+\newcommand{\rrhCRp}{\@randhcp{R}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations CL and CLp}
+%
+% Whole cube rotations CL = Lc = xp, CLp = Lcp = x.
+%
+% \begin{macro}{\rrCL}
+% \begin{macro}{\rrhCL}
+% \begin{macro}{\RubikCL}
+% These commands all draw forms which denote the CL rotation.
+% \begin{macrocode}
+\newcommand{\rrCL}{\@rr{CL}}
+\newcommand{\RubikCL}{\@randRubikc{L}}
+\newcommand{\rrhCL}{\@randhc{L}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\rrCLp}
+% \begin{macro}{\rrhCLp}
+% \begin{macro}{\RubikCLp}
+% These commands all draw forms which denote the CLp rotation.
+% \begin{macrocode}
+\newcommand{\rrCLp}{\@rrp{CL}}
+\newcommand{\RubikCLp}{\@randRubikcp{L}}
+\newcommand{\rrhCLp}{\@randhcp{L}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations CU and CUp}
+%
+% Whole cube rotation CU = Uc = y, CUp = Ucp=yp.
+%
+% \begin{macro}{\rrCU}
+% \begin{macro}{\rrhCU}
+% \begin{macro}{\RubikCU}
+% These commands all draw forms which denote the CU rotation.
+% \begin{macrocode}
+\newcommand{\rrCU}{\@rr{CU}}
+\newcommand{\RubikCU}{\@randRubikc{U}}
+\newcommand{\rrhCU}{\@randhc{U}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\rrCUp}
+% \begin{macro}{\rrhCUp}
+% \begin{macro}{\RubikCUp}
+% These commands all draw forms which denote the CUp rotation.
+% \begin{macrocode}
+\newcommand{\rrCUp}{\@rrp{CU}}
+\newcommand{\RubikCUp}{\@randRubikcp{U}}
+\newcommand{\rrhCUp}{\@randhcp{U}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations CD and CDp}
+%
+% Whole cube rotations CD = Dc = yp, CDp = Dcp = y.
+%
+% \begin{macro}{\rrCD}
+% \begin{macro}{\rrhCD}
+% \begin{macro}{\RubikCD}
+% These commands all draw forms which denote the CD rotation.
+% \begin{macrocode}
+\newcommand{\rrCD}{\@rr{CD}}
+\newcommand{\RubikCD}{\@randRubikc{D}}
+\newcommand{\rrhCD}{\@randhc{D}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\rrCDp}
+% \begin{macro}{\rrhCDp}
+% \begin{macro}{\RubikCDp}
+% These commands all draw forms which denote the CDp rotation.
+% \begin{macrocode}
+\newcommand{\rrCDp}{\@rrp{CD}}
+\newcommand{\RubikCDp}{\@randRubikcp{D}}
+\newcommand{\rrhCDp}{\@randhcp{D}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations CF and CFp}
+%
+% Whole cube rotations CF = Fc = z, CFp = Fcp = zp.
+%
+% \begin{macro}{\rrCF}
+% \begin{macro}{\rrhCF}
+% \begin{macro}{\RubikCF}
+% These commands all draw forms which denote the CF rotation.
+% \begin{macrocode}
+\newcommand{\rrCF}{\@rr{CF}}
+\newcommand{\RubikCF}{\@randRubikc{F}}
+\newcommand{\rrhCF}{\@randhc{F}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\rrCFp}
+% \begin{macro}{\rrhCFp}
+% \begin{macro}{\RubikCFp}
+% These commands all draw forms which denote the CFp rotation.
+% \begin{macrocode}
+\newcommand{\rrCFp}{\@rrp{CF}}
+\newcommand{\RubikCFp}{\@randRubikcp{F}}
+\newcommand{\rrhCFp}{\@randhcp{F}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations CB and CBp}
+%
+% Whole cube rotation CB = Bc = zp, CBp = Bcp = z.
+%
+% \begin{macro}{\rrCB}
+% \begin{macro}{\rrhCB}
+% \begin{macro}{\RubikCB}
+% These commands all draw forms which denote the CB rotation.
+% \begin{macrocode}
+\newcommand{\rrCB}{\@rr{CB}}
+\newcommand{\RubikCB}{\@randRubikc{B}}
+\newcommand{\rrhCB}{\@randhc{B}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\rrCBp}
+% \begin{macro}{\rrhCBp}
+% \begin{macro}{\RubikCBp}
+% These commands all draw forms which denote the CBp rotation.
+% \begin{macrocode}
+\newcommand{\rrCBp}{\@rrp{CB}}
+\newcommand{\RubikCBp}{\@randRubikcp{B}}
+\newcommand{\rrhCBp}{\@randhcp{B}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \subsubsection{\hspace{3mm}Rotations MR and MRp}
+%
+% MR = Rm = Mp= Sr (M follows Left). We use Sr and Srp as the templates.
+%
+% \begin{macro}{\rrMR}
+% \begin{macro}{\rrhMR}
+% \begin{macro}{\RubikMR}
+% \begin{macro}{\textRubikMR}
+% These commands draw forms of the MR middle slice rotation.
+% \begin{macrocode}
+\newcommand{\rrMR}{\@rr{MR}}
+\newcommand{\rrhMR}{\rrhMp}%
+\newcommand{\RubikMR}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareMp\\
+\rrMR%
+\end{minipage}%
+}}
+\newcommand{\textRubikMR}{\rrMR\,\rrhMp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\rrMRp}
+% \begin{macro}{\rrhMRp}
+% \begin{macro}{\RubikMRp}
+% \begin{macro}{\textRubikMRp}
+% These commands draw forms of the MRp slice rotation.
+% \begin{macrocode}
+\newcommand{\rrMRp}{\@rrp{MR}}
+\newcommand{\rrhMRp}{\rrhM}%
+\newcommand{\RubikMRp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareM\\
+\rrMRp%
+\end{minipage}%
+}}
+\newcommand{\textRubikMRp}{\rrMRp\,\rrhM}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations ML and MLp}
+%
+% ML = Lm = M = Sl (M follows Left). We use Sl and Slp as the templates.
+%
+% \begin{macro}{\rrML}
+% \begin{macro}{\rrhML}
+% \begin{macro}{\RubikML}
+% \begin{macro}{\textRubikML}
+% These commands draw forms of the ML slice rotation.
+% \begin{macrocode}
+\newcommand{\rrML}{\@rr{ML}}
+\newcommand{\rrhML}{\rrhM}%
+\newcommand{\RubikML}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareM\\
+\rrML%
+\end{minipage}%
+}}
+\newcommand{\textRubikML}{\rrML\,\rrhM}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\rrMLp}
+% \begin{macro}{\rrhMLp}
+% \begin{macro}{\RubikMLp}
+% \begin{macro}{\textRubikMLp}
+% These commands draw forms of the MLp slice rotation.
+% \begin{macrocode}
+\newcommand{\rrMLp}{\@rrp{ML}}
+\newcommand{\rrhMLp}{\rrhMp}%
+\newcommand{\RubikMLp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareMp\\
+\rrMLp%
+\end{minipage}%
+}}
+\newcommand{\textRubikMLp}{\rrMLp\,\rrhMp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations MU and MUp}
+%
+% MU = Um = Ep = Su (E follows Down). We use Su and Sup as the templates.
+%
+% \begin{macro}{\rrMU}
+% \begin{macro}{\rrhMU}
+% \begin{macro}{\RubikMU}
+% \begin{macro}{\textRubikMU}
+% These commands draw forms of the MU slice rotation.
+% \begin{macrocode}
+\newcommand{\rrMU}{\@rr{MU}}
+\newcommand{\rrhMU}{\rrhEp}%
+\newcommand{\RubikMU}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareEp\\
+\rrMU%
+\end{minipage}%
+}}
+\newcommand{\textRubikMU}{\rrMU\,\rrhEp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\rrMUp}
+% \begin{macro}{\rrhMUp}
+% \begin{macro}{\RubikMUp}
+% \begin{macro}{\textRubikMUp}
+% These commands draw forms of the MUp slice rotation.
+% \begin{macrocode}
+\newcommand{\rrMUp}{\@rrp{MU}}
+\newcommand{\rrhMUp}{\rrhE}%
+\newcommand{\RubikMUp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareE\\
+\rrMUp%
+\end{minipage}%
+}}
+\newcommand{\textRubikMUp}{\rrMUp\,\rrhE}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations MD and MDp}
+%
+% MD = Dm = E = Sd (E follows Down). We use Sd and Sdp as the templates.
+%
+% \begin{macro}{\rrMD}
+% \begin{macro}{\rrhMD}
+% \begin{macro}{\RubikMD}
+% \begin{macro}{\textRubikMD}
+% These commands draw forms of the Randelshofer MD slice rotation.
+% \begin{macrocode}
+\newcommand{\rrMD}{\@rr{MD}}
+\newcommand{\rrhMD}{\rrhE}%
+\newcommand{\RubikMD}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareE\\
+\rrMD%
+\end{minipage}%
+}}
+\newcommand{\textRubikMD}{\rrMD\,\rrhE}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\rrMDp}
+% \begin{macro}{\rrhMDp}
+% \begin{macro}{\RubikMDp}
+% \begin{macro}{\textRubikMDp}
+% These commands draw forms of the Randelshofer MDp slice rotation.
+% \begin{macrocode}
+\newcommand{\rrMDp}{\@rrp{MD}}
+\newcommand{\rrhMDp}{\rrhEp}%
+\newcommand{\RubikMDp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareEp\\
+\rrMDp%
+\end{minipage}%
+}}
+\newcommand{\textRubikMDp}{\rrMDp\,\rrhEp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations MF and MFp}
+%
+% MF = Fm = S = Sf (S follows Front).
+% MF = S is not visible from the front, so is represented in a square box.
+% We use Sf and Sfp as the templates.
+%
+% \begin{macro}{\rrMF}
+% \begin{macro}{\rrhMF}
+% \begin{macro}{\RubikMF}
+% \begin{macro}{\textRubikMF}
+% These commands draw forms of the MF slice rotation.
+% We need to just make square with MF in square;
+% adjust box height using a \cmd{\rule};
+% adjust \cmd{\fboxsep} (default=3pt);
+% adjust \cmd{\fboxrule} (default=0.4pt);
+% bounded by \{\} so no need to reset to defaults.
+% Not visible from the front.
+% \begin{macrocode}
+\newcommand{\rrMF}{\@rr{MF}}
+\newcommand{\SquareMF}{\@tlen\@SquareLetter{\rrMF}\@tlen}
+\newcommand{\rrhMF}{\raisebox{-0.25mm}{\SquareMF}}
+\newcommand{\RubikMF}{\raisebox{\@hRubik}{\SquareMF}}
+\newcommand{\textRubikMF}{\rrhMF}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\rrMFp}
+% \begin{macro}{\rrhMFp}
+% \begin{macro}{\RubikMFp}
+% \begin{macro}{\textRubikMFp}
+% These commands draw forms of the MFp slice rotation.
+% We need to just make square with MFp in square;
+% adjust box height using a \cmd{\rule};
+% adjust \cmd{\fboxsep} (default=3pt);
+% adjust \cmd{\fboxrule} (default=0.4pt);
+% bounded by \{\} so no need to reset to defaults.
+% Not visible from the front.
+% \begin{macrocode}
+\newcommand{\rrMFp}{\@rrp{MF}}
+\newcommand{\SquareMFp}{\@tlen\@SquareLetter{\rrMFp}\@tlen}
+\newcommand{\rrhMFp}{\raisebox{-0.25mm}{\SquareMFp}}
+\newcommand{\RubikMFp}{\raisebox{\@hRubik}{\SquareMFp}}
+\newcommand{\textRubikMFp}{\rrhMFp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations MB and MBp}
+%
+% MB = Bm = Sp = Sb. We use Sb and Sbp as the templates.
+%
+% \begin{macro}{\rrMB}
+% \begin{macro}{\rrhMB}
+% \begin{macro}{\RubikMB}
+% \begin{macro}{\textRubikMB}
+% These commands draw forms of the MB slice rotation.
+% We need to just make square with MB in square;
+% adjust box height using a \cmd{\rule};
+% adjust \cmd{\fboxsep} (default=3pt);
+% adjust \cmd{\fboxrule} (default=0.4pt);
+% bounded by \{\} so no need to reset to defaults.
+% Not visible from the front.
+% \begin{macrocode}
+\newcommand{\rrMB}{\@rr{MB}}
+\newcommand{\SquareMB}{\@tlen\@SquareLetter{\rrMB}\@tlen}
+\newcommand{\rrhMB}{\raisebox{-0.25mm}{\SquareMB}}
+\newcommand{\RubikMB}{\raisebox{\@hRubik}{\SquareMB}}
+\newcommand{\textRubikMB}{\rrhMB}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\rrMBp}
+% \begin{macro}{\rrhMBp}
+% \begin{macro}{\RubikMBp}
+% \begin{macro}{\textRubikMBp}
+% These commands draw forms of the MBp slice rotation.
+% We need to just make square with MBp in square;
+% adjust box height using a \cmd{\rule};
+% adjust \cmd{\fboxsep} (default=3pt);
+% adjust \cmd{\fboxrule} (default=0.4pt);
+% bounded by \{\} so no need to reset to defaults.
+% Not visible from the front.
+% \begin{macrocode}
+\newcommand{\rrMBp}{\@rrp{MB}}
+\newcommand{\SquareMBp}{\@tlen\@SquareLetter{\rrMBp}\@tlen}
+\newcommand{\rrhMBp}{\raisebox{-0.25mm}{\SquareMBp}}
+\newcommand{\RubikMBp}{\raisebox{\@hRubik}{\SquareMBp}}
+\newcommand{\textRubikMBp}{\rrhMBp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \subsubsection{\hspace{3mm}Rotations T (wide)}
+%
+% TR = Rw \ \ (We use Rw and Rwp as the templates).
+%
+% {\noindent}We first set up some useful T and Tp macros for use with (L,R,U,D,F,B)
+% slightly more general than before. As before the rubikfont command needs to be
+% delimited using two curly brackets to contain the font expression.
+% \begin{macrocode}
+\newcommand{\@rrT}[1]{{\@rubikfont T#1}}
+\newcommand{\@rrhT}[1]{\@join{\rrh#1}{w}}%
+\newcommand{\@textRubikT}[1]{\@rrT{#1}\,\@join{\rrh#1}{w}}
+%
+\newcommand{\@RubikT}[1]{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%%
+\@join{\Square#1}{w}\\%
+\@rrT{#1}%%
+\end{minipage}%
+}}
+%%
+\newcommand{\@rrTp}[1]{{\@rubikfont T#1\@rubikprime}}
+\newcommand{\@rrhTp}[1]{\@join{\rrh#1}{wp}}%
+\newcommand{\@textRubikTp}[1]{\@rrTp{#1}\,\@join{\rrh#1}{wp}}
+%%
+\newcommand{\@RubikTp}[1]{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%%
+\@join{\Square#1}{wp}\\%
+\@rrTp{#1}%%
+\end{minipage}%
+}}
+% \end{macrocode}
+%
+%
+%
+% \begin{macro}{\rrTL}
+% \begin{macro}{\rrhTL}
+% \begin{macro}{\RubikTL}
+% \begin{macro}{\textRubikTL}
+% These commands draw forms of the TL = Lw wide slice rotation.
+% \begin{macrocode}
+\newcommand{\rrTL}{\@rrT{L}}% = rrLw
+\newcommand{\rrhTL}{\@rrhT{L}}
+\newcommand{\textRubikTL}{\@textRubikT{L}}
+\newcommand{\RubikTL}{\@RubikT{L}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\rrTLp}
+% \begin{macro}{\rrhTLp}
+% \begin{macro}{\RubikTLp}
+% \begin{macro}{\textRubikTLp}
+% These commands draw forms of the TLp = Lwp wide slice rotation.
+% \begin{macrocode}
+\newcommand{\rrTLp}{\@rrTp{L}}
+\newcommand{\rrhTLp}{\@rrhTp{L}}
+\newcommand{\textRubikTLp}{\@textRubikTp{L}}
+\newcommand{\RubikTLp}{\@RubikTp{L}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\rrTR}
+% \begin{macro}{\rrhTR}
+% \begin{macro}{\RubikTR}
+% \begin{macro}{\textRubikTR}
+% These commands draw forms of the TR = Rw wide slice rotation.
+% \begin{macrocode}
+\newcommand{\rrTR}{\@rrT{R}}
+\newcommand{\rrhTR}{\@rrhT{R}}
+\newcommand{\textRubikTR}{\@textRubikT{R}}
+\newcommand{\RubikTR}{\@RubikT{R}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\rrTRp}
+% \begin{macro}{\rrhTRp}
+% \begin{macro}{\RubikTRp}
+% \begin{macro}{\textRubikTRp}
+% These commands draw forms of the TRp = Rmp wide slice rotation.
+% \begin{macrocode}
+\newcommand{\rrTRp}{\@rrTp{R}}
+\newcommand{\rrhTRp}{\@rrhTp{R}}
+\newcommand{\textRubikTRp}{\@textRubikTp{R}}
+\newcommand{\RubikTRp}{\@RubikTp{R}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\rrTU}
+% \begin{macro}{\rrhTU}
+% \begin{macro}{\RubikTU}
+% \begin{macro}{\textRubikTU}
+% These commands draw forms of the TU = Uw wide slice rotation.
+% \begin{macrocode}
+\newcommand{\rrTU}{\@rrT{U}}
+\newcommand{\rrhTU}{\@rrhT{U}}
+\newcommand{\textRubikTU}{\@textRubikT{U}}
+\newcommand{\RubikTU}{\@RubikT{U}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\rrTUp}
+% \begin{macro}{\rrhTUp}
+% \begin{macro}{\RubikTUp}
+% \begin{macro}{\textRubikTUp}
+% These commands draw forms of the TUp = Uwp wide slice rotation.
+% \begin{macrocode}
+\newcommand{\rrTUp}{\@rrTp{U}}
+\newcommand{\rrhTUp}{\@rrhTp{U}}
+\newcommand{\textRubikTUp}{\@textRubikTp{U}}
+\newcommand{\RubikTUp}{\@RubikTp{U}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\rrTD}
+% \begin{macro}{\rrhTD}
+% \begin{macro}{\RubikTD}
+% \begin{macro}{\textRubikTD}
+% These commands draw forms of the TD = Dw wide slice rotation.
+% \begin{macrocode}
+\newcommand{\rrTD}{\@rrT{D}}
+\newcommand{\rrhTD}{\@rrhT{D}}
+\newcommand{\textRubikTD}{\@textRubikT{D}}
+\newcommand{\RubikTD}{\@RubikT{D}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\rrTDp}
+% \begin{macro}{\rrhTDp}
+% \begin{macro}{\RubikTDp}
+% \begin{macro}{\textRubikTDp}
+% These commands draw forms of the TDp = Dwp wide slice rotation.
+% \begin{macrocode}
+\newcommand{\rrTDp}{\@rrTp{D}}
+\newcommand{\rrhTDp}{\@rrhTp{D}}
+\newcommand{\textRubikTDp}{\@textRubikTp{D}}
+\newcommand{\RubikTDp}{\@RubikTp{D}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\rrTF}
+% \begin{macro}{\rrhTF}
+% \begin{macro}{\RubikTF}
+% \begin{macro}{\textRubikTF}
+% These commands draw forms of the TF = Fw wide slice rotation.
+% \begin{macrocode}
+\newcommand{\rrTF}{\@rrT{F}}
+\newcommand{\rrhTF}{\@rrhT{F}}
+\newcommand{\textRubikTF}{\@textRubikT{F}}
+\newcommand{\RubikTF}{\@RubikT{F}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\rrTFp}
+% \begin{macro}{\rrhTFp}
+% \begin{macro}{\RubikTFp}
+% \begin{macro}{\textRubikTFp}
+% These commands draw forms of the TFp = Fwp wide slice rotation.
+% \begin{macrocode}
+\newcommand{\rrTFp}{\@rrTp{F}}
+\newcommand{\rrhTFp}{\@rrhTp{F}}
+\newcommand{\textRubikTFp}{\@textRubikTp{F}}
+\newcommand{\RubikTFp}{\@RubikTp{F}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\rrTB}
+% \begin{macro}{\rrhTB}
+% \begin{macro}{\RubikTB}
+% \begin{macro}{\textRubikTB}
+% These commands draw forms of the TB = Bw wide slice rotation.
+% NOTE we just use the letters TB in a square
+% \begin{macrocode}
+\newcommand{\rrTB}{\@rrT{B}}
+\newcommand{\SquareTB}{\@tlen\@SquareLetter{\rrTB}\@tlen}
+\newcommand{\rrhTB}{\raisebox{-0.25mm}{\SquareTB}}
+\newcommand{\textRubikTB}{\rrhTB}
+\newcommand{\RubikTB}{\raisebox{\@hRubik}{\SquareTB}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\rrTBp}
+% \begin{macro}{\rrhTBp}
+% \begin{macro}{\RubikTBp}
+% \begin{macro}{\textRubikTBp}
+% These commands draw forms of the TBp = Bwp wide slice rotation.
+% NOTE we just use the letters TB' in a square
+% \begin{macrocode}
+\newcommand{\rrTBp}{\@rrTp{B}}
+\newcommand{\SquareTBp}{\@tlen\@SquareLetter{\rrTBp}\@tlen}
+\newcommand{\rrhTBp}{\raisebox{-0.25mm}{\SquareTBp}}
+\newcommand{\textRubikTBp}{\rrhTBp}
+\newcommand{\RubikTBp}{\raisebox{\@hRubik}{\SquareTBp}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \subsubsection{\hspace{3mm}Rotations SR and SRp (opposite slices)}
+%
+% opposite slices in same direction
+% SR = Rs (both rotating in R direction)
+%
+% \begin{macro}{\rrSR}
+% \begin{macro}{\rrhSR}
+% \begin{macro}{\RubikSR}
+% \begin{macro}{\textRubikSR}
+% These commands draw forms of the SR opposite slice rotation.
+% \begin{macrocode}
+\newcommand{\rrSR}{\@rr{SR}}
+\newcommand{\rrhSR}{\rrhRs}%
+\newcommand{\RubikSR}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareRs\\
+\rrSR%
+\end{minipage}%
+}}
+\newcommand{\textRubikSR}{\rrSR\,\rrhRs}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\rrSRp}
+% \begin{macro}{\rrhSRp}
+% \begin{macro}{\RubikSRp}
+% \begin{macro}{\textRubikSRp}
+% These commands draw forms of the SRp opposite slice rotation.
+% \begin{macrocode}
+\newcommand{\rrSRp}{\@rrp{SR}}
+\newcommand{\rrhSRp}{\rrhRsp}%
+\newcommand{\RubikSRp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareRsp\\
+\rrSRp%
+\end{minipage}%
+}}
+\newcommand{\textRubikSRp}{\rrSRp\,\rrhRsp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations SL and SLp}
+%
+% SL = Ls (both rotating in L direction)
+%
+% \begin{macro}{\rrSL}
+% \begin{macro}{\rrhSL}
+% \begin{macro}{\RubikSL}
+% \begin{macro}{\textRubikSL}
+% These commands draw forms of the SL opposite slice rotation.
+% \begin{macrocode}
+\newcommand{\rrSL}{\@rr{SL}}
+\newcommand{\rrhSL}{\rrhLs}%
+\newcommand{\RubikSL}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareLs\\
+\rrSL%
+\end{minipage}%
+}}
+\newcommand{\textRubikSL}{\rrSL\,\rrhLs}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\rrSLp}
+% \begin{macro}{\rrhSLp}
+% \begin{macro}{\RubikSLp}
+% \begin{macro}{\textRubikSLp}
+% These commands draw forms of the SLp opposite slice rotation.
+% \begin{macrocode}
+\newcommand{\rrSLp}{\@rrp{SL}}
+\newcommand{\rrhSLp}{\rrhLsp}%
+\newcommand{\RubikSLp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareLsp\\
+\rrSLp%
+\end{minipage}%
+}}
+\newcommand{\textRubikSLp}{\rrSLp\,\rrhLsp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations SU and SUp}
+%
+% SU = Us (both rotating in U direction)
+%
+% \begin{macro}{\rrSU}
+% \begin{macro}{\rrhSU}
+% \begin{macro}{\RubikSU}
+% \begin{macro}{\textRubikSU}
+% These commands draw forms of the SU opposite slice rotation.
+% \begin{macrocode}
+\newcommand{\rrSU}{\@rr{SU}}
+\newcommand{\rrhSU}{\rrhUs}%
+\newcommand{\RubikSU}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareUs\\
+\rrSU%
+\end{minipage}%
+}}
+\newcommand{\textRubikSU}{\rrSU\,\rrhUs}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\rrSUp}
+% \begin{macro}{\rrhSUp}
+% \begin{macro}{\RubikSUp}
+% \begin{macro}{\textRubikSUp}
+% These commands draw forms of the SUp opposite slice rotation.
+% \begin{macrocode}
+\newcommand{\rrSUp}{\@rrp{SU}}
+\newcommand{\rrhSUp}{\rrhUsp}%
+\newcommand{\RubikSUp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareUsp\\
+\rrSUp%
+\end{minipage}%
+}}
+\newcommand{\textRubikSUp}{\rrSUp\,\rrhUsp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations SD and SDp}
+%
+% SD = Ds (both rotating in D direction)
+%
+% \begin{macro}{\rrSD}
+% \begin{macro}{\rrhSD}
+% \begin{macro}{\RubikSD}
+% \begin{macro}{\textRubikSD}
+% These commands draw forms of the SD opposite slice rotation.
+% \begin{macrocode}
+\newcommand{\rrSD}{\@rr{SD}}
+\newcommand{\rrhSD}{\rrhDs}%
+\newcommand{\RubikSD}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareDs\\
+\rrSD%
+\end{minipage}%
+}}
+\newcommand{\textRubikSD}{\rrSD\,\rrhDs}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\rrSDp}
+% \begin{macro}{\rrhSDp}
+% \begin{macro}{\RubikSDp}
+% \begin{macro}{\textRubikSDp}
+% These commands draw forms of the SDp opposite slice rotation.
+% \begin{macrocode}
+\newcommand{\rrSDp}{\@rrp{SD}}
+\newcommand{\rrhSDp}{\rrhDsp}%
+\newcommand{\RubikSDp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquareDsp\\
+\rrSDp%
+\end{minipage}%
+}}
+\newcommand{\textRubikSDp}{\rrSDp\,\rrhDsp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotations SF and SFp}
+%
+% SF = Fs is not visible from the front, so is represented in a square box.
+% Both rotating in the F direction
+% We use Fs and Fsp as the templates.
+%
+% \begin{macro}{\rrSF}
+% \begin{macro}{\rrhSF}
+% \begin{macro}{\RubikSF}
+% \begin{macro}{\textRubikSF}
+% These commands draw forms of the SF opposite slice rotation.
+% We need to just make square with SF in square;
+% adjust box height using a \cmd{\rule};
+% adjust \cmd{\fboxsep} (default=3pt);
+% adjust \cmd{\fboxrule} (default=0.4pt);
+% bounded by \{\} so no need to reset to defaults.
+% Not visible from the front.
+% \begin{macrocode}
+\newcommand{\rrSF}{\@rr{SF}}
+\newcommand{\SquareSF}{\@tlen\@SquareLetter{\rrSF}\@tlen}
+\newcommand{\rrhSF}{\raisebox{-0.25mm}{\SquareSF}}
+\newcommand{\RubikSF}{\raisebox{\@hRubik}{\SquareSF}}
+\newcommand{\textRubikSF}{\rrhSF}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\rrSFp}
+% \begin{macro}{\rrhSFp}
+% \begin{macro}{\RubikSFp}
+% \begin{macro}{\textRubikSFp}
+% These commands draw forms of the SFp opposite slice rotation.
+% We need to just make square with SFp in square;
+% adjust box height using a \cmd{\rule};
+% adjust \cmd{\fboxsep} (default=3pt);
+% adjust \cmd{\fboxrule} (default=0.4pt);
+% bounded by \{\} so no need to reset to defaults.
+% Not visible from the front.
+% \begin{macrocode}
+\newcommand{\rrSFp}{\@rrp{SF}}
+\newcommand{\SquareSFp}{\@tlen\@SquareLetter{\rrSFp}\@tlen}
+\newcommand{\rrhSFp}{\raisebox{-0.25mm}{\SquareSFp}}
+\newcommand{\RubikSFp}{\raisebox{\@hRubik}{\SquareSFp}}
+\newcommand{\textRubikSFp}{\rrhSFp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+%
+% \subsubsection{\hspace{3mm}Rotations SB and SBp}
+%
+% SB = Bs is not visible from the front, so is represented in a square box.
+% Both rotating in the B direction
+% We use Bs and Bsp as the templates.
+%
+% \begin{macro}{\rrSB}
+% \begin{macro}{\rrhSB}
+% \begin{macro}{\RubikSB}
+% \begin{macro}{\textRubikSB}
+% These commands draw forms of the SB opposite slice rotation.
+% We need to just make square with SB in square;
+% adjust box height using a \cmd{\rule};
+% adjust \cmd{\fboxsep} (default=3pt);
+% adjust \cmd{\fboxrule} (default=0.4pt);
+% bounded by \{\} so no need to reset to defaults.
+% Not visible from the front.
+% \begin{macrocode}
+\newcommand{\rrSB}{\@rr{SB}}
+\newcommand{\SquareSB}{\@tlen\@SquareLetter{\rrSB}\@tlen}
+\newcommand{\rrhSB}{\raisebox{-0.25mm}{\SquareSB}}
+\newcommand{\RubikSB}{\raisebox{\@hRubik}{\SquareSB}}
+\newcommand{\textRubikSB}{\rrhSB}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\rrSBp}
+% \begin{macro}{\rrhSBp}
+% \begin{macro}{\RubikSBp}
+% \begin{macro}{\textRubikSBp}
+% These commands draw forms of the SBp opposite slice rotation.
+% We need to just make square with SBp in square;
+% adjust box height using a \cmd{\rule};
+% adjust \cmd{\fboxsep} (default=3pt);
+% adjust \cmd{\fboxrule} (default=0.4pt);
+% bounded by \{\} so no need to reset to defaults.
+% Not visible from the front.
+% \begin{macrocode}
+\newcommand{\rrSBp}{\@rrp{SB}}
+\newcommand{\SquareSBp}{\@tlen\@SquareLetter{\rrSBp}\@tlen}
+\newcommand{\rrhSBp}{\raisebox{-0.25mm}{\SquareSBp}}
+\newcommand{\RubikSBp}{\raisebox{\@hRubik}{\SquareSBp}}
+\newcommand{\textRubikSBp}{\rrhSBp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \subsection{\hspace{3mm}Axis rotations (textRubik versions)}
+% \label{sec:codetextrubikaxisversions}
+%
+% For completeness we include a \cmd{\textRubik} version of all the
+% axis rotation codes (making them equal to their hieroglyphic \cmd{\rrh} version).
+% Obviously this list must go at the end of this file. While these commands are perhaps
+% strictly unnecessary, the motivation is to allow users to include them in
+% a \cmd{\ShowSequence} command when using the \cmd{\textRubik} font argument.
+%
+% \begin{macrocode}
+\newcommand{\textRubikx}{\rrhx}
+\newcommand{\textRubikxp}{\rrhxp}
+\newcommand{\textRubiky}{\rrhy}
+\newcommand{\textRubikyp}{\rrhyp}
+\newcommand{\textRubikz}{\rrhz}
+\newcommand{\textRubikzp}{\rrhzp}
+\newcommand{\textRubikl}{\rrhl}
+\newcommand{\textRubiklp}{\rrhlp}
+\newcommand{\textRubikr}{\rrhr}
+\newcommand{\textRubikrp}{\rrhrp}
+\newcommand{\textRubiku}{\rrhu}
+\newcommand{\textRubikup}{\rrhup}
+\newcommand{\textRubikd}{\rrhd}
+\newcommand{\textRubikdp}{\rrhdp}
+\newcommand{\textRubikf}{\rrhf}
+\newcommand{\textRubikfp}{\rrhfp}
+\newcommand{\textRubikb}{\rrhb}
+\newcommand{\textRubikbp}{\rrhbp}
+\newcommand{\textRubikLc}{\rrhLc}
+\newcommand{\textRubikLcp}{\rrhLcp}
+\newcommand{\textRubikRc}{\rrhRc}
+\newcommand{\textRubikRcp}{\rrhRcp}
+\newcommand{\textRubikUc}{\rrhUc}
+\newcommand{\textRubikUcp}{\rrhUcp}
+\newcommand{\textRubikDc}{\rrhDc}
+\newcommand{\textRubikDcp}{\rrhDcp}
+\newcommand{\textRubikFc}{\rrhFc}
+\newcommand{\textRubikFcp}{\rrhFcp}
+\newcommand{\textRubikBc}{\rrhBc}
+\newcommand{\textRubikBcp}{\rrhBcp}
+\newcommand{\textRubikCL}{\rrhCL}
+\newcommand{\textRubikCLp}{\rrhCLp}
+\newcommand{\textRubikCR}{\rrhCR}
+\newcommand{\textRubikCRp}{\rrhCRp}
+\newcommand{\textRubikCU}{\rrhCU}
+\newcommand{\textRubikCUp}{\rrhCUp}
+\newcommand{\textRubikCD}{\rrhCD}
+\newcommand{\textRubikCDp}{\rrhCDp}
+\newcommand{\textRubikCF}{\rrhCF}
+\newcommand{\textRubikCFp}{\rrhCFp}
+\newcommand{\textRubikCB}{\rrhCB}
+\newcommand{\textRubikCBp}{\rrhCBp}
+% \end{macrocode}
+%
+%
+%
+% --------------------------
+% End of this package
+% --------------------------
+% \begin{macrocode}
+%</rubikcube>
+% \end{macrocode}
+%
+%
+%
+%
+% \Finale
+%
+\endinput