summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/rubik
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2018-02-28 23:45:07 +0000
committerKarl Berry <karl@freefriends.org>2018-02-28 23:45:07 +0000
commit940e03ca0b55d204785182f33537a0c75fffbb0e (patch)
tree14a24a13ec433c2afa013b48b3b5242a82ed41ba /Master/texmf-dist/source/latex/rubik
parente55c20f6da5b06953c9dde74fa78bf1a277eb237 (diff)
rubik (28feb18)
git-svn-id: svn://tug.org/texlive/trunk@46764 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/rubik')
-rw-r--r--Master/texmf-dist/source/latex/rubik/rubikcube.dtx3469
-rw-r--r--Master/texmf-dist/source/latex/rubik/rubikcube.ins4
-rw-r--r--Master/texmf-dist/source/latex/rubik/rubikpatterns.dtx175
-rw-r--r--Master/texmf-dist/source/latex/rubik/rubikpatterns.ins5
-rw-r--r--Master/texmf-dist/source/latex/rubik/rubikrotation.dtx396
-rw-r--r--Master/texmf-dist/source/latex/rubik/rubikrotation.ins6
-rw-r--r--Master/texmf-dist/source/latex/rubik/rubiktwocube.dtx2478
-rw-r--r--Master/texmf-dist/source/latex/rubik/rubiktwocube.ins66
8 files changed, 4969 insertions, 1630 deletions
diff --git a/Master/texmf-dist/source/latex/rubik/rubikcube.dtx b/Master/texmf-dist/source/latex/rubik/rubikcube.dtx
index 4f57d98a0ee..c9812ed4bad 100644
--- a/Master/texmf-dist/source/latex/rubik/rubikcube.dtx
+++ b/Master/texmf-dist/source/latex/rubik/rubikcube.dtx
@@ -1,9 +1,9 @@
% \iffalse meta-comment
% rubikcube.dtx
%
-% version v4.0 (03 March 2017)
+% version v5.0 (February 25, 2018)
%
-% Copyright 2017
+% Copyright 2018
% RWD Nickalls (dick@nickalls.org) and
% A Syropoulos (asyropoulos@yahoo.com)
%
@@ -19,7 +19,7 @@
% This work consists of the files rubikcube.dtx and rubikcube.ins
% and the derived file rubikcube.sty.
%
-%<*readme>
+%<*readme>
%
% The rubikcube package provides a collection of LaTeX commands and macros
% for the typesetting of Rubik cube configurations and rotation
@@ -41,6 +41,8 @@
(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
@@ -62,7 +64,7 @@
%
%
%
-%%% \CheckSum{5683}
+%%% \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
@@ -118,33 +120,39 @@
%
% The \rubikcube\ package (part of the \textsc{rubik} `bundle') provides a
% collection of \LaTeX\ commands
-% and macros for typesetting Rubik cube configurations using the
-% PGF/TikZ graphic languages, and relates only to the
-% familiar 3x3x3 Rubik cube.
+% 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 designed to be used in conjunction
-% with both the \textsc{rubikrotation} package and the \textsc{rubikpatterns} package.
-% The \rubikcube\ package deals primarily with typesetting, while the \textsc{rubikrotation}
-% package processes rotation sequences and keeps track of the cube's configuration.
-% The \textsc{rubikpatterns} package is a small database of Rubik cube rotation sequences
-% which generate well-known named cube configurations (patterns).
-% For full functionality it is recommended that all three Rubik packages are used
-% together; for~example,
+% 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,rubikcube,rubikrotation,rubikpatterns}
+% \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 2016), and on a Solaris platform (OpenIndiana).
+% 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), Golomb~(1981, 1982), Hofstadter (1981), Hutchings~(2011),
+% 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
@@ -152,7 +160,10 @@
% 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).
+% (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}
@@ -161,9 +172,8 @@
% 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.
-%
-% Both the \textsc{rubikrotation} and \textsc{rubikpatterns} packages (see below)
-% require Perl to be installed.
+% The \textsc{rubikrotation} package (see below)
+% requires Perl to be installed.
%
%
% \subsection[rubikrotation package]{Supporting tool---the
@@ -186,19 +196,19 @@
% 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 recent \texttt{shellesc} package (in {\TeX}Live 2016).
-% The \texttt{shellesc} package can always be downloaded from CTAN directly.
+% 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.sty} }
+% \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 Rubik cube rotation sequences, stored as
-% named macros. For~example, the `fourspot' and `sixspot' sequences are encoded in
+% 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*)>}
@@ -213,15 +223,30 @@
% \usepackage{tikz,rubikcube,rubikrotation,rubikpatterns}
% ...
% \RubikCubeSolved
-% \RubikRotation{\fourspot}
+% \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}.
+% 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--2017 RWD Nickalls and A Syropoulos.
+% Copyright 2014--2018 RWD Nickalls and A Syropoulos.
%
% \medskip
% {\noindent}This work may be distributed and/or modified under the
@@ -233,9 +258,11 @@
%
% \section{Installation}
%
-% The Rubik bundle consists of the three package \rubikcube, \textsc{rubikrotation}
-% and \textsc{rubikpatterns}, each of which needs to be installed separately.
-% Here we describe the installation of the \rubikcube\ package.
+% 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}
%
@@ -276,14 +303,23 @@
% pdflatex rubikcube.dtx
%\end{verbatim}
%
-% Note that the package includes a `rubikexamples' file (\texttt{rubikexamples.tex})
-% as well as associated \texttt{.sh} (Linux) and \texttt{.bat} (Microsoft) batch
-% files which can be used to facilitate processing the file.
-% Note that many of the examples in this file use the \cmd{\RubikRotation} command
-% (associated with the \textsc{rubikrotation} package),
-% and hence this file needs to be run using the \verb!--shell-escape! command-line
-% option (see Section~\ref{sec:rubikrotation} for details).
-
+%
+% \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}
%
@@ -308,32 +344,92 @@
% \begin{quote}
%\begin{verbatim}
% \usepackage{tikz}
-% \usepackage{rubikcube,rubikrotation,rubikpatterns}
+% \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, it is best to also load the complementary
-% \textsc{rubikrotation} and \textsc{rubikpatterns} packages.
-%
%
-% \DescribeMacro{\rubikcube}
-% This command generates the logo \rubikcube.
+% 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.
-% There are three primary command categories: (a)~\cmd{\Draw..} commands
-% (which must always be used \textit{inside} a TikZ picture environment),
-% (b)~`parameter-allocation' commands---e.g.,~\cmd{\RubikCubeSolved}---which can
-% be used either inside or outside a TikZ environment),
-% and (c)~commands which can be used in ordinary text
-% (e.g.,~|\rr{}| rotation commands).
+% Since 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}
%
@@ -355,8 +451,9 @@
%
% 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{\RubikSide..}, \cmd{\RubikCubeSolved},
-% outside the environments keeps their effects global.
+% \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}
@@ -388,7 +485,7 @@
% ---see Figure~\ref{fig:notation}.
%
% Some commands have six arguments which adopt an (XYZ;$+$$-$) format. In this case,
-% for~example, the \cmd{\SolvedConfig} command, for which the six colour arguments
+% 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.
@@ -419,7 +516,7 @@
% 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 regarding this approach.
+% 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.
@@ -452,12 +549,12 @@
% \section{Rubik cube coordinates}
% \label{sec:coordinates}
%
-% The coordinate origin of all 2D Rubik cube images is located
+% 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 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).
+% 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
@@ -474,12 +571,13 @@
% \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, are useful design
-% features which make it easy to know the coordinates of any point, and hence
-% facilitate the use any of the TikZ commands
+% 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}
@@ -509,8 +607,8 @@
% (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 (?\,2013) (1161 pages)
-% \item \texttt{pgfplot.pdf}, version 1.13 (2016) (544 pages)
+% \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
@@ -531,8 +629,8 @@
% 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:flatcommands}
-% and \ref{sec:arrows} for examples).
+% 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);
@@ -560,7 +658,7 @@
%% \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 *see above)
+% a \% symbol after the \verb!\end{tikzpicture}! command
% to avoid additional white space inadvertently being added by \LaTeX\
% (see Section~\ref{sec:trailingpercent}).
%
@@ -586,8 +684,8 @@
%
% \DescribeMacro{\ShowCube}
% This command \cmd{\ShowCube}\marg{width}\marg{scale-factor}\marg{commands}
-% is a convenient tool which places one or more commands inside a
-% tikzpicture environment and places all of these inside a minipage
+% 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!)
@@ -603,7 +701,7 @@
% 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}.
+% semicolon (see Section~\ref{sec:tikz}).
%
% \medskip
%
@@ -632,7 +730,7 @@
%
% \medskip
%
-% {\noindent}The convenience of the \cmd{\ShowCube} command is illustrated below; the
+% {\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).
% $$
@@ -657,12 +755,12 @@
%
% \DescribeMacro{\ShowCubeF}
% The \cmd{\ShowCubeF} command is similar in all respects except that it places
-% an fbox around the minipage in order to enable users to see the extent of any
+% 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 fbox around the minipage can be a
+% 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.
@@ -680,23 +778,67 @@
% \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
+% {\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 white-space as revealed by the \cmd{\ShowCubeF} command. The~relationship
+% 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 \rubikcube\ package uses seven colours which are defined as follows:
+% 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.}
@@ -735,13 +877,26 @@
% White {HTML}{FFFFFF}
%\end{verbatim}
% \end{quote}
-% However, we have optimised these prescribed colours very slightly
+%
+% {\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
+% 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 \texttt{https://en.wikipedia.org/wiki/Pantone}).}
% (see Section~\ref{sec:codecolours}):
%
% \begin{quote}
@@ -770,50 +925,62 @@
% \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).
+%
%
-% \DescribeMacro{\RubikFace..}
-% \DescribeMacro{\RubikSlice..}
-% \DescribeMacro{\RubikSide..}
-% \DescribeMacro{\RubikCubeSolved}
-% \DescribeMacro{\RubikCubeGrey}
-% \DescribeMacro{\RubikCubeGreyAll}
% 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 Rubik colours (using a suitable command)
-% it will be rendered as grey by a Rubik \cmd{\Draw...} command, since these commands
+% 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.
%
-% It is important to appreciate that the various commands which typeset faces
-% or facelets with colours differ in whether they derive the colours
-% from the current internal colour `state' (configuration) of the Rubik cube, or not.
-%
-% The colour state of cubies in faces and slices can be allocated using \cmd{\RubikFace...},
-% \cmd{\RubikSlice...} and \cmd{\RubikSide...} commands (see Sections~\ref{sec:facecommands},
-% \ref{sec:slicecommands} and \ref{sec:rubikside}).
-% In addition. the command \cmd{\RubikCubeSolved}, allocates a prescribed colour state
-% for the whole `solved' cube, and is a very useful starting
-% point (configuration) for subsequent rotations.
-% The commands \cmd{\RubikCubeGrey} and \cmd{\RubikCubeGreyAll} allocate different colour
+% \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).
-% Cubies retain their colour allocation even if the cubies are moved using
-% the \cmd{\RubikRotation} command (\textsc{rubikrotation} package), unless they are
-% overwritten by a subsequent colour allocation command.
%
-% To visualise the current state of the cube one has to use a Rubik \cmd{\Draw...} command.
-% Although some \cmd{\Draw...} commands (e.g.,~\cmd{\DrawRubikLayerFace...}) allow
-% you to specify colours as arguments, \cmd{\Draw...} commands really only
-% `paint' colours onto cubie positions (on the page, so to speak).
-% \cmd{\Draw..} commands never influence the internal Rubik colour state.
+% 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).
+%
%
-% The current colour state / configuration of the Rubik cube can be saved and
-% written to a named file (using the \cmd{\SaveRubikState} command) in a form
-% which can then be easily \cmd{\input} and processed when required.
-
%
% \subsection{RubikFace commands}
-% \label{sec:facecommands}
+% \label{sec:rubikfacecommands}
%
% \DescribeMacro{\RubikFaceUp}
% \DescribeMacro{\RubikFaceDown}
@@ -821,8 +988,9 @@
% \DescribeMacro{\RubikFaceRight}
% \DescribeMacro{\RubikFaceFront}
% \DescribeMacro{\RubikFaceBack}
-% These commands take nine colour arguments and allocate colours to the
-% individual cubies of a Rubik cube face.
+% 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:
@@ -838,10 +1006,9 @@
% }
% \end{quote}
% Conveniently, \LaTeX\ allows the colour arguments to be separated by spaces
-% (e.g.,~separated in groups of three), or even spread across several
+% (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 formulated in a visually intuitive way, as in the
-% following examples.
+% allows the command to be written in several visually intuitive ways, as follows:
%
% \begin{quote}
% \begin{minipage}{8cm}
@@ -855,6 +1022,9 @@
%\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}
@@ -865,19 +1035,16 @@
% 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.
%
-% If you want a particular face to be all grey, then
-% use the colour-code~X; for~example, \cmd{\RubikFaceUpAll\{X\}}.
-% 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).
-% Use of these commands is shown in the following figure.
%
% \bigskip
%
% \begin{minipage}{2.8cm}
-% \RubikFaceUpAll{X}
-% \RubikFaceRightAll{R}
+% \RubikCubeGreyAll
+% \RubikFaceRightAll{O}
% \RubikFaceFront{W}{Y}{G}
% {W}{Y}{G}
% {W}{Y}{G}
@@ -888,30 +1055,50 @@
% \hspace{5mm}
% \begin{minipage}{0.6\textwidth}
%\begin{verbatim}
-% \RubikFaceUpAll{X}
-% \RubikFaceRightAll{R}
+% \RubikCubeGreyAll
+% \RubikFaceRightAll{O}
% \RubikFaceFront{W}{Y}{G}
% {W}{Y}{G}
% {W}{Y}{G}
% \ShowCube{3cm}{0.7}{\DrawRubikCubeRU}
% \end{verbatim}
% \end{minipage}
-%
%
-% \subsection{Solved Configuration}
-% \label{sec:solvedconfig}
+% \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.
%
-% \DescribeMacro{\SolvedConfig}
+% 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!\SolvedConfig{G}{B}{W}{Y}{O}{R}!
+% {\newline}\textsc{usage}:\ \verb!\RubikSolvedConfig{G}{B}{W}{Y}{O}{R}!
% {\newline}Examples of its use are shown in the next section.
%
%
-% \subsection{RubikCubeSolved command}
+%
+%
+% \subsection{RubikCubeSolved commands}
% \label{sec:rubikcubesolved}
%
% \DescribeMacro{\RubikCubeSolved}
@@ -919,9 +1106,9 @@
% 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{\SolvedConfig} command, as follows:
+% by invoking the above \cmd{\RubikSolvedConfig} command, as follows:
%\begin{verbatim}
-%\newcommand{\RubikCubeSolved}{\SolvedConfig{G}{B}{W}{Y}{O}{R}}
+%\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}
@@ -958,17 +1145,17 @@
%
% \bigskip
%
-% Note that the width of the minipage used in \cmd{\ShowCube} command above
+% 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 then the minimum minipage width = $10 \times 0.5 = 5$cm
-% (see Section~\ref{sec:coordinates} for details).
+% 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 upsidedown
+% 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}}
@@ -1014,44 +1201,46 @@
% 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!\SolvedConfig{R}{O}{W}{B}{G}{Y}!
+% and green opposite yellow), was created using \verb!\RubikSolvedConfig{R}{O}{W}{B}{G}{Y}!
% (for the code see \ref{sec:codesolvedconfig}).
%
%
-% \subsection{RubikCubeGrey command}
+%
+%
+% \subsection{RubikCubeGrey.. commands}
% \label{sec:rubikcubegrey}
%
-% \DescribeMacro{\RubikCubeGrey}
+% \DescribeMacro{\RubikCubeGreyWY}
+% \DescribeMacro{\RubikCubeGreyWB}
% \DescribeMacro{\RubikCubeGreyAll}
-% The command \cmd{\RubikCubeGrey} generates a 3x3x3 cube with no colours allocated
+% 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{\RubikCubeSolved} command.
+% configuration as defined for the \cmd{\RubikCubeSolvedWY} command.
% The command \cmd{\RubikCubeGreyAll} generates a cube with \textit{all} the faces
-% completely grey.
-% Both these commands will accept either `grey' or `gray' (to be consistent with TikZ).
+% 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 two commands, are designed to be useful starting points when wanting to
+% 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{\RubikCubeGrey} command by viewing the cube in a semi-flat (SF) format,
+% the \cmd{\RubikCubeGreyWY} command by viewing the cube in a semi-flat (SF) format,
% as follows:
%
% \bigskip
%
-% \RubikCubeGrey
+% \RubikCubeGreyWY
% \ShowCube{4.5cm}{0.45}{\DrawRubikCubeSF}
% \hspace{3mm}
% \begin{minipage}{0.6\textwidth}
%\begin{verbatim}
-% \RubikCubeGrey
+% \RubikCubeGreyWY
% \ShowCube{4.5cm}{0.45}{\DrawRubikCubeSF}
%\end{verbatim}
% \end{minipage}
%
% \bigskip
-% Users can easily set their own alternative face/colour configuration either by `renewing'
-% the \cmd{\RubikCubeGrey} command along the lines shown above (the code is
-% in Section~\ref{sec:codegrey}), or simply creating a new `variant' command
-% altogether.
+% Users can of course set up their own alternative face/colour configuration
+% by creating a new `variant' command altogether.
%
%
%
@@ -1106,77 +1295,6 @@
%
%
%
-% \subsection{RubikSide commands}
-% \label{sec:rubikside}
-%
-% \DescribeMacro{\RubikSideLeft}
-% \DescribeMacro{\RubikSideRight}
-% \DescribeMacro{\RubikSideFront}
-% \DescribeMacro{\RubikSideBack}
-% These RubikSide commands allocate colours to the side facelets of
-% the UP~face, and each takes three ordered colour arguments, running from
-% top-left to top-right when looking directly at the side faces---see Section~\ref{sec:rubiksidecode}.
-% These facelets are the top three facelets of each side Front, Back, Left, Right.
-%
-% {\noindent}\textsc{usage}: \verb!\RubikSideBack{B}{G}{G}!
-%
-% \medskip
-%
-% \DescribeMacro{\RubikSideLeftAll}
-% \DescribeMacro{\RubikSideRightAll}
-% \DescribeMacro{\RubikSideFrontAll}
-% \DescribeMacro{\RubikSideBackAll}
-% These commands allocate the same colour to all three side cubies, and hence
-% take only a single colour argument.
-%
-% {\noindent}\textsc{usage}: \verb!\RubikSideBackAll{R}!
-%
-% \medskip
-%
-% The \cmd{\RubikSide..} and \cmd{\RubikFace..} commands are useful for setting up the colours
-% for just part of the cube. For~example, the following commands set-up the UP-face and sides,
-% and then draws the face and sidebars using \verb!\DrawFlatUpSide!.
-%
-% \bigskip
-%
-% \begin{minipage}{4cm}
-% \centering
-%\RubikFaceUp {R}{Y}{R}%
-% {Y}{Y}{Y}%
-% {G}{Y}{B}%
-%\RubikSideBack{B}{G}{G}%
-%\RubikSideFront{Y}{R}{Y}%
-%\RubikSideRight{O}{B}{Y}%
-%\RubikSideLeft{Y}{O}{O}%
-%\ShowCube{2cm}{0.5}{\DrawFlatUpSide}
-% \end{minipage}
-% \hspace{1cm}
-% \begin{minipage}{0.6\textwidth}
-%\begin{verbatim}
-%%set up the UP face
-%\RubikFaceUp {R}{Y}{R}%
-% {Y}{Y}{Y}%
-% {G}{Y}{B}%
-%\RubikSideBack{B}{G}{G}%
-%\RubikSideFront{Y}{R}{Y}%
-%\RubikSideRight{O}{B}{Y}%
-%\RubikSideLeft{Y}{O}{O}%
-%%draw the UP face and sides
-%\ShowCube{2cm}{0.5}{\DrawFlatUpSide}
-%\end{verbatim}
-% \end{minipage}
-%
-% \bigskip
-%
-% Note that we could instead have drawn the above image using \cmd{\DrawRubikLayer..}
-% commands. However, using the \cmd{\RubikSide..} and \cmd{\RubikFace..} commands
-% makes for a much more flexible and dynamic system, since the colours allocated using
-% these commands (provided they are external to an environment) will be global,
-% and hence will follow subsequent \cmd{\RubikRotation} commands.
-%
-%
-%
-% \pagebreak
%
%
% \section{Rotation commands}
@@ -1194,7 +1312,7 @@
% \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
+% 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
@@ -1205,13 +1323,14 @@
% 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.
+% 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 and single cubies. All the rotation-codes and
+% 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
@@ -1225,10 +1344,9 @@
% in the form of the rotation-code in a square; for~example, \rrhBw, \rrhFm.
%
%
-% \pagebreak
%
-% \subsection{Overview}
-% \label{sec:overview}
+% \subsection{Typesetting}
+% \label{sec:typesetting}
%
% We now describe the four commands used for typesetting the various rotation-codes.
%
@@ -1315,7 +1433,7 @@
% \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.
+% \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
@@ -1340,7 +1458,7 @@
% 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.
+% formed by appending a `p'. The \texttt{M} must be in upper case.
%
%
% \bigskip\bigskip
@@ -1354,9 +1472,9 @@
% \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).
+% 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}),
@@ -1377,7 +1495,8 @@
% \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
+% 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\}}.
@@ -1386,7 +1505,7 @@
%
% \subsection{Outer-slice rotations}
%
-% \subsubsection*{Slice notation}
+% \subsubsection*{The `s' (slice) notation}
%
% \DescribeMacro{Us}
% \DescribeMacro{Ds}
@@ -1427,7 +1546,7 @@
%
%
-% \subsubsection*{Anti-slice notation}
+% \subsubsection*{The `a' (anti-slice) notation}
%
% \DescribeMacro{Ua}
% \DescribeMacro{Da}
@@ -1443,16 +1562,20 @@
%
% \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 inner-slice
-% (officially known as a `double outer slice' rotation, or a `double block' move)
+% 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}!)
@@ -1478,8 +1601,12 @@
%
% \bigskip\bigskip
%
+%
% \subsection{Axis rotations}
%
+% \subsubsection*{The x, y, z notation}
+% \label{sec:xyznotation}
+%
% \DescribeMacro{x}
% \DescribeMacro{y}
% \DescribeMacro{z}
@@ -1489,10 +1616,10 @@
% 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;
+% 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
+% 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.
@@ -1513,33 +1640,31 @@
%
% \subsubsection*{The u, d, l, r, f, b notation}
%
+%
% \DescribeMacro{u}
% \DescribeMacro{d}
% \DescribeMacro{l}
% \DescribeMacro{r}
% \DescribeMacro{f}
% \DescribeMacro{b}
-% A commonly used alternative for the \rr{x}, \rr{y}, \rr{z}\ notation
-% (and endorsed by the WCA) uses these
-% lower-case face letter to denote a 90~degree whole-cube rotation in the same
-% directional sense as that of the standard face rotations.
+% 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{u}\ $\equiv$ \rr{y}, \ \rr{d}\ $\equiv$ \rr{yp}, \
-% \rr{l}\ $\equiv$ \rr{xp}, \ \rr{r}\ $\equiv$ \rr{x}, \
-% \rr{f}\ $\equiv$ \rr{z}, \ \rr{b}\ $\equiv$ \rr{zp},
-%
-% {\noindent}For~example, \rr{d}\ is generated by the command \cmd{\rr\{d\}}.
-%
-% {\noindent}Note that these rotations do not have prime $^\prime$ versions
-% since \rr{u}~is the opposite of \rr{d}, \rr{l}~is the opposite of \rr{r}, and
-% \rr{f}~is the opposite of \rr{b}.
+% \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}
%
@@ -1602,7 +1727,7 @@
% {\noindent}\rr{U}\rr{U}\rr{R}\rr{R}\ is generated by
% \cmd{\rr\{U\}}\cmd{\rr\{U\}}\cmd{\rr\{R\}}\cmd{\rr\{R\}}
%
-% \bigskip
+% \medskip
%
% {\noindent}\Rubik{F}\Rubik{U}\Rubik{y}\Rubik{Rp}\Rubik{Lwp}\
% \ \ \verb!\Rubik{F}\Rubik{U}\Rubik{y}\Rubik{Rp}\Rubik{Lwp}!
@@ -1612,28 +1737,31 @@
% {\noindent}\textRubik{F}\ \textRubik{U}\ \ \ \
% \verb!\textRubik{F}\ \textRubik{U}!
%
-% \bigskip
+% \medskip
%
% {\noindent}Commas can be important in avoiding ambiguity; for~example,
%
-% \bigskip
+% \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},!
%
-% \bigskip
+% \medskip
%
-% {\noindent}\rrh{U}2,\,\rrh{F}2,\,\rrh{Ds}2,\, \ \ \ \ \verb!\rrh{U}2,\,\rrh{F}2,\,\rrh{Ds}2,!
+% {\noindent}\rrh{U}2,\,\rrh{F}2,\,\rrh{Ds}2,\, \ \ \ \ \verb!\rrh{U}2,\,\rrh{F}2,\,\rrh{Ds}2!
%
-% \bigskip
+% \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}!
%
-% \bigskip
+% \medskip
%
-% Note that if each rotation element uses the \textit{same} font or encoding, then
-% typesetting a rotation sequence can be achieved more easily using the
-% \verb!\ShowSequence! command (see Section~\ref{sec:showsequence}). For example, we can
+% {\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
@@ -1650,9 +1778,7 @@
% For~example, the hieroglyph \rrhD\ (\cmd{\rrh\{D\}}) can also be generated using the command
% \cmd{\rrhD}.
%
-% \bigskip
%
-% \pagebreak
%
% \subsection{Listing of all rotation commands}
% \label{sec:listofcommands}
@@ -2004,21 +2130,44 @@
% \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\\
+% & \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\\
+% & \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}
%
%
@@ -2104,10 +2253,10 @@
%
% 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
-% (see Section~\ref{sec:coderubikfont} for details). This font (rubikfont)
+% 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
+% 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
@@ -2135,19 +2284,30 @@
%
% \section{Draw commands}
%
-% A \cmd{\Draw..} command typesets either a Rubik cube, cubie or a face
-% or layer using parameters set or defined via
-% previous parameter-allocation commands (e.g.,~face colours, dimensions etc).
-% Note that those \cmd{\Draw..} commands which do take colours as arguments do not
-% update the cube's internal `colour state', but simply `paint' these colours.
+% 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
-% and TikZ \cmd{\draw..} commands. \cmd{\Draw..} commands are implemented by the
+% (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..
+% 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}
@@ -2169,62 +2329,23 @@
% then something similar to the following error message will be generated.
%\begin{verbatim}
%! Undefined control sequence.
-%\DrawFlatUp ... }{#1}\pgfmathsetmacro {\uy }{#2}\draw
+%\DrawRubikFlatUp ... }{#1}\pgfmathsetmacro {\uy }{#2}\draw
% [line join=round,...
%l.56 \DrawRubikCubeF
%\end{verbatim}
%
%
%
+% \subsection{DrawCubie commands}
+% \label{sec:drawcubie}
%
-% \subsection{DrawRubikCube commands}
-%
-% \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]
-% \DrawRubikCubeRU
-% \end{tikzpicture}%
-% \end{minipage}
-% \hspace{5mm}
-% \begin{minipage}{0.6\textwidth}
-%\begin{verbatim}
-% \RubikCubeSolved
-% \begin{tikzpicture}[scale=0.7]
-% \DrawRubikCubeRU
-% \end{tikzpicture}%
-%\end{verbatim}
-% Note that the above commands are equivalent to:
-%\begin{verbatim}
-% \RubikCubeSolved
-% \ShowCube{3cm}{0.7}{\DrawRubikCubeRU}
-%\end{verbatim}
-% \end{minipage}
-%
-% \bigskip
-%
-%
-% \DescribeMacro{\DrawCubieXYxyz}
+% \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 we can include
-% colour parameters in \cmd{\DrawCubie} commands. Consequently \cmd{\DrawCubie}
-% commands have the format
+% 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}
@@ -2259,13 +2380,13 @@
% \else
% \includegraphics[height=4cm]{rubik-doc-figC.eps}
% \fi
-% \vspace{-5mm}\caption{\label{fig:cubiedydx}Cubie dy dx parameters}
+% \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 dy and dx values ($> 0$; no units)
+% by adjusting the Cubiedy and Cubiedx values ($> 0$; no units)
% shown in Figure~\ref{fig:cubiedydx} via the two commands
% \begin{quote}
% \cmd{\Cubiedy\{\}} \\
@@ -2296,9 +2417,11 @@
% {\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 dy and dx are 0.4.
+% The default values of \cmd{\Cubiedy} and \cmd{\Cubiedx} are 0.4.
+%
%
-% \medskip
+%
+% \subsection{textCubie commands}
%
% \DescribeMacro{\textCubieRU}
% \DescribeMacro{\textCubieRD}
@@ -2325,67 +2448,40 @@
% \cmd{\Cubiedy}, \cmd{\Cubiedx} commands as their size is pre-set for text use.
%
%
-%
-% \subsection{Flat commands}
-% \label{sec:flatcommands}
-%
-% \DescribeMacro{\DrawFlatUp}
-% \DescribeMacro{\DrawFlatDown}
-% \DescribeMacro{\DrawFlatLeft}
-% \DescribeMacro{\DrawFlatRight}
-% \DescribeMacro{\DrawFlatFront}
-% \DescribeMacro{\DrawFlatBack}
-% These commands \cmd{\DrawFlat..}\marg{x}\marg{y} draw a `flat' (square)
-% representation of the current state of a specified face such that its
-% bottom left corner is positioned at ($x$, $y$).
-% They are designed to supplement the \cmd{\DrawRubikCube...} commands and
-% allow hidden faces to be represented.
-% Each command (except \cmd{\DrawFlatFront}) takes two arguments,
-% namely the X-coordinate and Y-coordinate of the bottom left
-% corner of the face. This ($x$,$y$) pair allows the user to position
-% the face.
-%
-% Note that the Y-argument set for the \cmd{\DrawFlatLeft}
-% and \cmd{\DrawFlatRight} commands is not currently actioned
-% (see Section~\ref{sec:drawflatxcommands}).
-% This is because both the \textsc{left} and \textsc{right} faces, as used by the
-% \cmd{\DrawRubikCubeSF} (Semi-Flat) command which incorporates the RU
-% view, require only Y=0. It is anticipated that this (x,y) facility
-% will be fully extended to the left and right forms in a later version.
-%
-% Note also that the \cmd{\DrawFlatFront} command currently takes \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}:\ In the following example we use the command \verb!\DrawFlatBack{4}{1}! to
-% append the \textsc{back} face to the side of a 3D cube. Note that since
-% the coordinates of the bottom/back/right corner of the cube rendered by the
-% command \cmd{\DrawRubikCubeRU} is (4,1)
-% (see Section~\ref{sec:coordinates}), we can position the
-% lower/left corner of the \textsc{back} face at this point using the command
-% \verb!\DrawFlatBack{4}{1}! as follows:
+% \subsection{DrawRubikCube commands}
+% \label{sec:drawrubikcubecommands}
%
-% \bigskip
-%
-% \begin{minipage}{0.4\textwidth}
-% \centering
-% \RubikCubeSolved
-% \begin{tikzpicture}[scale=0.4]
-% \DrawRubikCubeRU
-% \DrawFlatBack{4}{1}
-% \end{tikzpicture}%
-% \end{minipage}
-% \begin{minipage}{5cm}
+% \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}
-% \RubikCubeSolved
-% \ShowCube{3cm}{0.4}{%
-% \DrawRubikCubeRU
-% \DrawFlatBack{4}{1}
-% }
+% \RubikCubeSolvedWY
+% \ShowCube{3cm}{0.7}{\DrawRubikCubeRU}
%\end{verbatim}
-% \end{minipage}
-%
+% \end{minipage}
+%
% \bigskip
%
% \DescribeMacro{\DrawRubikCubeF}
@@ -2396,7 +2492,7 @@
% \begin{minipage}{0.4\textwidth}
% \centering
% \begin{tikzpicture}[scale=0.4]
-% \RubikCubeSolved
+% \RubikCubeSolvedWY
% \DrawRubikCubeF
% \node (U) at (1.5, 4.5) [black]{\small\textsf{U}};
% \node (D) at (1.5, -1.5) [black]{\small\textsf{D}};
@@ -2408,7 +2504,7 @@
% \end{minipage}
% \begin{minipage}{5cm}
%\begin{verbatim}
-% \RubikCubeSolved
+% \RubikCubeSolvedWY
% \ShowCube{5cm}{0.4}{\DrawRubikCubeF}
%\end{verbatim}
% \end{minipage}
@@ -2419,7 +2515,8 @@
% 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.
+% TikZ picture environment
+% (remember TikZ commands require a terminal semi-colon~;).
%
%\begin{verbatim}
% \RubikCubeSolved
@@ -2431,7 +2528,7 @@
% \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}
@@ -2444,19 +2541,19 @@
%
% \begin{minipage}{5cm}
% \begin{tikzpicture}[scale=0.5]
-% \RubikCubeSolved
+% \RubikCubeSolvedWY
% \DrawRubikCubeSF
% \node (B) at (5.5, 2.5) [white]{\small\textsf{B}};
% \end{tikzpicture}%
% \end{minipage}
% \begin{minipage}{5cm}
%\begin{verbatim}
-% \RubikCubeSolved
+% \RubikCubeSolvedWY
% \ShowCube{5cm}{0.5}{%
% \DrawRubikCubeSF
% \node (B) at (5.5, 2.5)
% [white]{\small\textsf{B}};
-% }
+% }
%\end{verbatim}
% \end{minipage}
%
@@ -2468,352 +2565,139 @@
% 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 coordinates
+% 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{Face commands}
-% \label{sec:facecommands}
-%
-%
-% \DescribeMacro{\DrawFaceUp}
-% \DescribeMacro{\DrawFaceDown}
-% \DescribeMacro{\DrawFaceLeft}
-% \DescribeMacro{\DrawFaceRight}
-% \DescribeMacro{\DrawFaceFront}
-% \DescribeMacro{\DrawFaceBack}
-% \DescribeMacro{\DrawFaceUpSide}
-% \DescribeMacro{\DrawFaceDownSide}
-% \DescribeMacro{\DrawFaceLeftSide}
-% \DescribeMacro{\DrawFaceRightSide}
-% \DescribeMacro{\DrawFaceFrontSide}
-% \DescribeMacro{\DrawFaceBackSide}
-% These commands draw the current state of a specified face
-% (e.g.,~\cmd{\DrawFaceUp}), or the face and all the associated side-bars
-% (e.g.,~\cmd{\DrawFaceUpSide}).
-% \textsc{Note}: these commands do \textsc{not} take any
-% arguments---for code see Section~\ref{sec:drawfacecode}.
%
-% In the following example we use the \cmd{\DrawFlatUpSide} command to
-% draw the \textsc{up} face and all its side-bars of a cube having
-% a `solved' configuration.
+% \subsection{DrawRubikFace.. commands}
+% \label{sec:drawrubikfacecommands}
%
-% \bigskip
-%
-% \begin{minipage}{0.4\textwidth}
-% \centering
-% \RubikCubeSolved
-% \begin{tikzpicture}[scale=0.4]
-% \DrawFaceUpSide
-% \end{tikzpicture}%
-% \end{minipage}
-% \begin{minipage}{5cm}
-%\begin{verbatim}
-% \RubikCubeSolved
-% \ShowCube{1.6cm}{0.4}{%
-% \DrawFaceUpSide
-% }
-%\end{verbatim}
-% \end{minipage}
%
-% \vspace{1cm}
+% \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}).
%
-% \subsection[NCube]{NCube (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).
+% 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
+%
%
-% \begin{minipage}{0.3\textwidth}
-% \begin{tikzpicture}[scale=0.5]
-% \DrawNCubeAll{5}{O}{Y}{G}
-% \end{tikzpicture}%
-% \end{minipage}
-% \begin{minipage}{0.5\textwidth}
+% \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}
-% \ShowCube{3.5cm}{0.5}{\DrawNCubeAll{5}{O}{Y}{G}}
+% \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}
%
%
-% \subsection{LayerFace}
-% \label{sec:layerface}
-%
-% While a cube has faces and layers, a layer has a face (the face you are looking
-% at or drawing) and four sides (consisting of the nine side facelets of the
-% associated cubies).
-% The two `Layer' commands described here are intended for drawing final layer
-% configurations from `scratch' without any prior configuration information.
-%
-% Typically, we might wish to show the yellow face in
-% the \textsc{up} position, with or without the associated side faces of the
-% cubies of this layer.
-% Of course, if we already know the rotation history from some initial configuration,
-% it would be much simpler just to invoke the \cmd{\RubikRotation} command and then use the
-% \cmd{\DrawFlatUpSide} command (see Section~\ref{sec:flatcommands}).
-%
+% 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.
%
-% \DescribeMacro{\DrawRubikLayerFace}
-% \DescribeMacro{\DrawRubikLayerFaceAll}
-% These two LayerFace commands draw a simple 3x3 face and allocate colours
-% to the 9~facelets.
-% The \cmd{\DrawRubikLayerFace} command takes nine ordered colour arguments.
-% The command is illustrated in the following example, which shows a yellow cross configuration.
-%
% \bigskip
-%
-% \ShowCube{2.1cm}{0.7}{%
-% \DrawRubikLayerFace{X}{Y}{X}
-% {Y}{Y}{Y}
-% {X}{Y}{X}
-% }%
-% \hspace{1cm}
+%
+% \RubikCubeSolvedWY
+% \ShowCube{1.6cm}{0.5}{\DrawRubikFaceUpSide}
+% \hspace{1cm}
% \begin{minipage}{0.6\textwidth}
%\begin{verbatim}
-% \ShowCube{2.1cm}{0.7}{%
-% \DrawRubikLayerFace{X}{Y}{X}
-% {Y}{Y}{Y}
-% {X}{Y}{X}
-% }
+% \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.
%
-% {\noindent}The \cmd{\DrawRubikLayerFaceAll} command takes a single colour argument, and paints
-% the whole face the same colour.
%
-% \medskip
%
-% \subsection{LayerSide (sidebars)}
-% \label{sec:layerside} \label{sec:sidebars}
-%
-% \DescribeMacro{\DrawRubikLayerSideXYp}
-% LayerSide commands draw the associated side colours of
-% the layer as small rectangular sidebars.
-% The LayerSide command adopts a three-letter XYp \textbf{position} notation
-% where the XY pair define the location (X:[Left \verb!|! Middle \verb!|! Right];
-% Y:[Top \verb!|! Middle \verb!|! Bottom]) of a particular cubie in the layer face,
-% as depicted in Figure~\ref{fig:facenotation}.
%
-% \begin{figure}[hbt]
-% \centering
-% \ifpdf
-% \includegraphics[height=3cm]{rubik-doc-figD.pdf}
-% \else
-% \includegraphics[height=3cm]{rubik-doc-figD.eps}
-% \fi
-% \vspace{-5mm}\caption{\label{fig:facenotation}LayerSide rotation-codes }
-% \end{figure}
-%
-% Since corner cubies have two side faces, the `p' parameter
-% (p:[x\verb!|!y]) is required to denote the directional `position' of
-% the cubie side-face relative to the cubicle XY position
-% (x indicates adjacent along the x-axis, and y indicates adjacent along the y-axis).
-% Since edge cubies have only one side face, the `p' parameter is optional
-% (for consistency), since it is not strictly necessary.
-%
-% \medskip\noindent\textbf{Commands}: \
-% Various different LayerSide commands are available: those for
-% drawing a single colour side bar, and others for facilitating
-% drawing all 12 side bars.
-% For~example, \textit{either} of the following commands
%
-% \begin{quote}
-%\begin{verbatim}
-% \DrawRubikLayerSideLM{G}
-% \DrawRubikLayerSideLMx{G}
-%\end{verbatim}
-% \end{quote}
-% draws a single small vertical green rectangle
-% \begin{tikzpicture}[scale=0.5]
-% \DrawRubikLayerSideLMx{G}
-% \end{tikzpicture}%
-% just to the left of the Left Middle (LM) square of the 9-face.
-% The following commands draw all three side bars of a given side (Top, Bottom, Left, Right)
-% \begin{quote}
-%\begin{verbatim}
-% \DrawRubikLayerSideT{}{}{}
-% \DrawRubikLayerSideB{}{}{}
-% \DrawRubikLayerSideL{}{}{}
-% \DrawRubikLayerSideR{}{}{}
-%\end{verbatim}
-% \end{quote}
-% where the T and B forms require the colour parameters to be in left-right
-% horizontal order (e.g.,~left, middle, right),
-% while the L and R forms require the colour parameters to be in top-down
-% vertical order (e.g.,~top, middle, bottom).
-% Note that this means that the colour parameters of the L and R commands
-% can (if required) then be positioned intuitively (vertically) as follows:
-% \begin{quote}
-%\begin{verbatim}
-% \DrawRubikLayerSideL{}
-% {}
-% {}
-%\end{verbatim}
-% \end{quote}
-% Extending this idea, the L and R forms are combined in the LR command,
-% which takes six colour arguments ordered in left-right pairs,
-% \begin{quote}
-%\begin{verbatim}
-% \DrawRubikLayerSideLR{}{} {}{} {}{}
-%\end{verbatim}
-% \end{quote}
-% so that they can also be written vertically as left-right pairs.
-% Use of these commands is shown in the following two examples.
-%
-% \bigskip
-%
-% \begin{minipage}{2.5cm}
-% \centering
-% \begin{tikzpicture}[scale=0.7]
-%
-%
-% \DrawRubikLayerFace{X}{Y}{X}
-% {Y}{Y}{Y}
-% {X}{Y}{X}
-%
-% \DrawRubikLayerSideLTy{B}
-% \DrawRubikLayerSideLTx{O}
-% \DrawRubikLayerSideLM{G}
-% \DrawRubikLayerSideR{O}
-% {B}
-% {R}
-% \DrawRubikLayerSideB{R}{G}{O}
-% \node (LT) at (0.5, 2.5) [red]{\small\textsf{LT}};
-% \node (LM) at (0.5, 1.5) [red]{\small\textsf{LM}};
-% \end{tikzpicture}%
-% \end{minipage}
-% \hspace{1cm}
-% \begin{minipage}{0.6\textwidth}
-%\begin{verbatim}
-% \ShowCube{3cm}{0.7}{%
-% \DrawRubikLayerFace{X}{Y}{X}
-% {Y}{Y}{Y}
-% {X}{Y}{X}
-%
-% \DrawRubikLayerSideLTy{B}
-% \DrawRubikLayerSideLTx{O}
-% \DrawRubikLayerSideLM{G}
-%
-% \DrawRubikLayerSideR{O}{B}{R}
-% \DrawRubikLayerSideB{R}{G}{O}
-%
-% \node (LT) at (0.5, 2.5) [red]{\small\textsf{LT}};
-% \node (LM) at (0.5, 1.5) [red]{\small\textsf{LM}};
-% }
-%\end{verbatim}
-% \end{minipage}
-%
-% \bigskip
-%
-% \begin{minipage}{2.5cm}
-% \centering
-% \begin{tikzpicture}[scale=0.7]
-%
-% \DrawRubikLayerFace{G}{Y}{R}
-% {Y}{Y}{Y}
-% {B}{Y}{Y}
-%
-% \DrawRubikLayerSideT {Y}{B}{B}
-% \DrawRubikLayerSideLR{R} {Y}
-% {R} {O}
-% {Y} {O}
-% \DrawRubikLayerSideB {O}{G}{G}
-%
-% \end{tikzpicture}%
-% \end{minipage}
-% \hspace{1cm}
-% \begin{minipage}{0.6\textwidth}
-%\begin{verbatim}
-% \ShowCube{3cm}{0.7}{%
-% \DrawRubikLayerFace{G}{Y}{R}
-% {Y}{Y}{Y}
-% {B}{Y}{Y}
-%
-% \DrawRubikLayerSideT {Y}{B}{B}
-% \DrawRubikLayerSideLR{R} {Y}
-% {R} {O}
-% {Y} {O}
-% \DrawRubikLayerSideB {O}{G}{G}
-% }
-%\end{verbatim}
-% \end{minipage}
-%
-% \bigskip
-%
-% \DescribeMacro{\DrawFaceUpSide}
-% \textsc{important note}: If the colour configuration of the layer shown above
-% is already known to the system (i.e.,~it has been specified before,
-% and (possibly) been manipulated using the \cmd{\RubikRotation} command
-% from \textsc{rubikrotation} package), then the above figure could be
-% drawn much more simply using just the single \cmd{\DrawFaceUpSide} command,
-% as described in Section~\ref{sec:facecommands}.
-%
-% \bigskip
+% \subsection{Sidebar parameters}
+% \label{sec:sidebarparameters}
%
-% \DescribeMacro{\RubikSideBarWidth}
-% \DescribeMacro{\RubikSideBarLength}
-% \DescribeMacro{\RubikSideBarSep}
+% \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).
+% 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)
+% \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, as shown in the following example where we have
-% set both the sidebar width and length to 0.7 in position MTy using the command
-% \verb!\DrawRubikLayerSideMTy{G}! (for the MTy code see Figure~\ref{fig:facenotation}).
+% 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
%
-% \begin{minipage}{2.5cm}
-% \centering
-% \begin{tikzpicture}[scale=0.7]
-%
-%
-% \DrawRubikLayerFace{X}{Y}{X}
-% {Y}{Y}{Y}
-% {X}{Y}{X}
-%
-% \RubikSideBarWidth{0.7}
-% \RubikSideBarLength{0.7}
-% \DrawRubikLayerSideMTy{G}
-% \end{tikzpicture}%
-% \end{minipage}
-% \hspace{1cm}
+% {
+% \RubikCubeSolvedWY
+% \RubikSidebarWidth{0.8}
+% \RubikSidebarLength{0.5}
+% \RubikSidebarSep{0.7}
+% \ShowCube{2cm}{0.5}{\DrawRubikFaceUpSide}
+% }
+% \hspace{2cm}
% \begin{minipage}{0.6\textwidth}
%\begin{verbatim}
-% \ShowCube{3cm}{0.7}{%
-% \DrawRubikLayerFace{X}{Y}{X}
-% {Y}{Y}{Y}
-% {X}{Y}{X}
-% \RubikSideBarWidth{0.7}
-% \RubikSideBarLength{0.7}
-% \DrawRubikLayerSideMTy{G}
-% }
+% {
+% \RubikCubeSolvedWY
+% \RubikSidebarWidth{0.8}
+% \RubikSidebarLength{0.5}
+% \RubikSidebarSep{0.7}
+% \ShowCube{2cm}{0.5}{\DrawRubikFaceUpSide}
+% }
%\end{verbatim}
% \end{minipage}
%
@@ -2824,70 +2708,248 @@
% to visualise this) and may therefore require some fine-tuning of the
% minipage width setting in order to optimise appearance.
%
-% Since the \textsc{front} face drawn using the \cmd{\DrawRubikCube} command is
-% identical with that drawn using the \cmd{\DrawLayerFace} command it
-% follows that LayerSide commands can also be used in conjunction with
-% the \textsc{front} face drawn using \cmd{\DrawRubikCube} command. This
-% shown in the following example, where we have used the
-% \cmd{\ShowCubeF} command as an exercise (to implement the fbox) and reveal
-% the extent of the surrounding white space associated with the minipage width of
-% 3.5cm ($=5 \times 0.7$).
-%
+%
+%
+%
+% \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}{4cm}
+% \begin{minipage}{0.4\textwidth}
% \centering
-% \RubikFaceUp {X}{W}{X}%
-% {W}{W}{W}%
-% {X}{W}{X}%
-%
-% \RubikFaceFront{O}{O}{X}%
-% {O}{O}{X}%
-% {X}{X}{W}%
-%
-% \RubikFaceRight{X}{G}{G}%
-% {X}{G}{G}%
-% {G}{X}{X}%
-% \ShowCubeF{3.5cm}{0.7}{%
-% \DrawRubikCubeRU
-% \DrawRubikLayerSideL{G}{B}{R}
-% \DrawRubikLayerSideB{R}{G}{O}
-% }
+% \RubikCubeSolvedWY
+% \begin{tikzpicture}[scale=0.5]
+% \DrawRubikCubeRU
+% \DrawRubikFlatBack{4}{1}
+% \end{tikzpicture}%
% \end{minipage}
-% \hspace{1cm}
-% \begin{minipage}{0.6\textwidth}
+% \begin{minipage}{5cm}
%\begin{verbatim}
-% \RubikFaceUp {X}{W}{X}%
-% {W}{W}{W}%
-% {X}{W}{X}%
-%
-% \RubikFaceFront{O}{O}{X}%
-% {O}{O}{X}%
-% {X}{X}{W}%
-%
-% \RubikFaceRight{X}{G}{G}%
-% {X}{G}{G}%
-% {G}{X}{X}%
-% \ShowCubeF{3.5cm}{0.7}{%
-% \DrawRubikCubeRU
-% \DrawRubikLayerSideL{G}{B}{R}
-% \DrawRubikLayerSideB{R}{G}{O}
-% }
+% \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
%
-% Since using left and/or right sidebars (e.g.,~\cmd{\DrawRubikLayerSide})
-% in conjunction with a \cmd{\DrawRubikCube} command, will increase
-% the width of the image, one may also have to adjust the width of
-% the associated minipage. Note that the width of a 2D oblique view of the cube
-% is 4~units (= width of 4~cubies). With the default sidebar width and sep settings
-% (see above) one sidebar increases the 2D cube image width by 0.6\,units (= 0.3 + 0.3).
-% Sidebars on both sides increase the width by 1.2\,units. Note also that setting
-% both the sidebar width and separation to 0.25\,units has the convenience that
-% the 2D width of a cube face $+$ left and right sidebars (e.g.,~using \cmd{\DrawFaceUpSide})
-% is then exactly 5\,units.
+% \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}
%
%
%
@@ -2901,10 +2963,10 @@
% 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 about
+% Appending an `F' to the command-name (\cmd{\ShowSequenceF}) results in an fbox around
% the whole output (cf.~the \cmd{\ShowCubeF} command).
-% Appending an `f' to the command-name (\cmd{\ShowSequencef}) results in an fbox about
-% each element in the output (these two forms can be helpful when checking white space).
+% 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!),
@@ -2953,17 +3015,21 @@
% \medskip\noindent\verb!\ShowSequence{,\ }{\textRubik}{\myseq}! \ $\longrightarrow$ \ \textRubik{U},\ \textRubik{D},\
% \textRubik{Lp},\ \textRubik{R}
%
+%
+%
%
-% \subsection*{Trailing digits}
+% \subsection{Trailing digits}
%
-% Note that the fonts denoted by \verb!\rr!, \verb!\rrh!, \verb!\Rubik!
+% 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 interpret each string). However, the typewriter font \verb!\texttt!
-% does work correctly in this case, as you would expect.
+% 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).
%
-% An effective `work-around' for this limitation is provided by the \verb!\RubikRotation{}!
+% 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
@@ -2974,17 +3040,19 @@
%
% 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 as follows:
+% 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\noindent\verb!\ShowSequence{,}{\rr}{\seqA}! \ $\longrightarrow$ \ \ShowSequence{,}{\rr}{\seqA}
-%
% \medskip
%
% However, if we now run the command \verb!\RubikRotation{\seqA}! we shall then have
@@ -3053,7 +3121,7 @@
% \bigskip
%
%\noindent%
-%\RubikCubeSolved%
+%\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%
@@ -3073,7 +3141,7 @@
%\begin{verbatim}
%\newcommand{\fourspot}{[fourspot],F2,B2,U,Dp,R2,L2,U,Dp}%
%\noindent%
-%\RubikCubeSolved%
+%\RubikCubeSolvedWY%
%\ShowCube{1.6cm}{0.4}{\DrawRubikCubeRU}%
%\RubikRotation{\fourspot}%
%\quad\SequenceBraceA{\SequenceName}{%
@@ -3099,7 +3167,7 @@
% 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{\DrawFlatUp} or \cmd{\DrawFlatUpSide} and LayerFace commands etc.) have
+% \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.
@@ -3108,8 +3176,6 @@
% \centering
% \ifpdf
% \includegraphics[height=3cm]{rubik-doc-figE.pdf}
-% \else
-% \includegraphics[height=3cm]{rubik-doc-figE.eps}
% \fi
%
% \parbox{9cm}{%
@@ -3121,18 +3187,17 @@
% \medskip
%
% For~example, Figure~\ref{fig:facegraph} shows a green
-% arrow drawn from the centre of cubie LB $(0.5, 0.5)$ to the centre of
-% cubie MM\,\footnote{The code MM stands for x=Middle, y=Middle;
-% see also Figure~\ref{fig:facenotation} on Rubik face-notation} $(1.5, 1.5)$.
-% To do this we just include the following TikZ command, remembering that TikZ
-% commands require a terminal semicolon.
+% 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 changes in the \textsc{up} face
+% 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.
@@ -3141,8 +3206,9 @@
%
% \bigskip
% \noindent
+% \RubikCubeSolvedWY
% \ShowCube{2.5cm}{0.7}{%
-% \DrawRubikLayerFaceAll{W}
+% \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);
@@ -3151,8 +3217,9 @@
% }
% \begin{minipage}{0.6\textwidth}
%\begin{verbatim}
+% \RubikCubeSolvedWY
% \ShowCube{2.5cm}{0.7}{%
-% \DrawRubikLayerFaceAll{W}
+% \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);
@@ -3165,41 +3232,32 @@
% \bigskip
% Since the coordinates shown in Figure~\ref{fig:facegraph} extend
% outwards in all directions, they can also be used as a guide for drawing
-% arrows (or other structures) outside this 3x3 `face' square. This approach
-% is shown in the following example, where we have changed the \texttt{tikzpicture} scale
-% factor to~0.4 in order to generate a small figure in order to facilitate placing the
-% figure and the code side-by-side.
-%
-% \bigskip
+% 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
-% \ShowCube{1.8cm}{0.4}{%
-% \DrawRubikLayerFace{G}{Y}{R}%
-% {Y}{Y}{Y}%
-% {B}{Y}{Y}%
-% %
-% \DrawRubikLayerSideT {Y}{B}{B}
-% \DrawRubikLayerSideLR{R} {Y}
-% {R} {O}
-% {Y} {O}
-% \DrawRubikLayerSideB {O}{G}{G}
-% \draw[->,ultra thick,color=green] (0.5,5) -- (0.5, 4);
-% }
+% \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}
-% \noindent
-% \ShowCube{1.8cm}{0.4}{%
-% \DrawRubikLayerFace{G}{Y}{R}%
-% {Y}{Y}{Y}%
-% {B}{Y}{Y}%
-% %
-% \DrawRubikLayerSideT {Y}{B}{B}
-% \DrawRubikLayerSideLR{R} {Y}
-% {R} {O}
-% {Y} {O}
-% \DrawRubikLayerSideB {O}{G}{G}
-% \draw[->,ultra thick,color=green] (0.5,5) -- (0.5, 4);
-% }
+% \input{CubeFour.tex}
+% \ShowCube{2.2cm}{0.5}{\DrawRubikFaceUpSide%
+% \draw[->,ultra thick,color=green] (2.5,5) -- (2.5, 4);
+% }
%\end{verbatim}
% \end{minipage}
%
@@ -3256,35 +3314,39 @@
%
% \bigskip
%
-% In the following example we use a blue circle to highlight the cubie
-% to be rotated into the top layer.
+% 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%
-% \RubikCubeGrey
+% \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
-% \DrawRubikLayerSideRBy{O}
+% \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}
-% \noindent%
-% \RubikCubeGrey
+% \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
-% \DrawRubikLayerSideRBy{O}
+% \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);
@@ -3293,6 +3355,9 @@
% \end{minipage}
%
%
+%
+%
+%
% \section{Final example}
%
% We now present, as a final example, the code used to draw the front page
@@ -3308,10 +3373,10 @@
% \bigskip
%
% \noindent\hfil%
-% \RubikCubeSolved%
+% \RubikCubeSolvedWY%
% \ShowCube{1.6cm}{0.4}{\DrawRubikCubeRU}%
% \quad\ShowCube{1.6cm}{0.4}{%
-% \DrawFlatUpSide
+% \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);
@@ -3320,26 +3385,23 @@
% }%
% \quad\Rubik{F}\Rubik{R}\Rubik{U}\Rubik{Rp}\Rubik{Up}\Rubik{Fp}%
% \quad$\longrightarrow$%
-% \quad\ShowCube{1.6cm}{0.4}{%
-% \DrawRubikLayerFace{W}{W}{B}
-% {W}{W}{O}
-% {W}{R}{B}
-% \DrawRubikLayerSideT {G}{G}{R}
-% \DrawRubikLayerSideLR{R} {W}
-% {B} {W}
-% {O} {W}
-% \DrawRubikLayerSideB {G}{W}{O}
-% }
-% \hfil
+% \RubikFaceUp WWB WWOWRB%
+% \RubikFaceBack RGG XXXXXX%
+% \RubikFaceLeft RBO XXXXXX%
+% \RubikFaceFront GWO XXXXXX%
+% \RubikFaceRight WWW XXXXXX%
+% \quad\ShowCube{1.6cm}{0.4}{\DrawRubikFaceUpSide}
+% \hfil%
%
-% \bigskip
+%
+% \bigskip
%
%\begin{verbatim}
% \noindent\hfil%
-% \RubikCubeSolved%
+% \RubikCubeSolvedWY%
% \ShowCube{1.6cm}{0.4}{\DrawRubikCubeRU}%
% \quad\ShowCube{1.6cm}{0.4}{%
-% \DrawFlatUpSide%
+% \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);
@@ -3348,7 +3410,7 @@
% }%
% \RubikRotation{F,R,U,Rp,Up,Fp}%
% \quad\ShowSequence{}{\Rubik}{\SequenceLong}\quad$\longrightarrow$%
-% \ShowCube{1.6cm}{0.4}{\DrawFlatUpSide}%
+% \ShowCube{1.6cm}{0.4}{\DrawRubikFaceUpSide}%
% \hfil
%\end{verbatim}
%
@@ -3363,29 +3425,65 @@
%\begin{verbatim}
% \RubikRotation{F,R,U,Rp,Up,Fp}
% \ShowSequence{,}{\Rubik}{\SequenceLong} \ \ \ $\longrightarrow$
-% \ShowCube{2cm}{0.4}{\DrawFlatUpSide}
+% \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$
-% \ShowCube{2cm}{0.4}{%
-% \DrawRubikLayerFace{W}{W}{B}
-% {W}{W}{O}
-% {W}{R}{B}
-% \DrawRubikLayerSideT {G}{G}{R}
-% \DrawRubikLayerSideLR{R} {W}
-% {B} {W}
-% {O} {W}
-% \DrawRubikLayerSideB {G}{W}{O}
-% }
+% \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,
@@ -3405,42 +3503,45 @@
% \end{itemize}
%
%
-% \section{Future packages}
-%
-% Since Rubik-type cubes currently exist in a variety of sizes (from 2x2x2 to 11x11x11)
-% other authors may well create similar packages dealing with
-% cubes of other sizes the future. Supporting tools may also be made
-% using various programming languages, e.g.,~Lua etc. Consequently the naming of such
-% packages and tools, and even the associated CTAN directories, needs to be given
-% some thought in order to prevent possible confusion.
-%
-% In the event of new packages being made, may we suggest that a CTAN directory structure
-% along the following lines might be appropriate.
-%
-% $$
-% \textsc{rubik}
-% \left\{
-% \begin{array}{l}
-% \mbox{rubiktools}\\
-% \mbox{rubik2x}\\
-% \mbox{rubik3x}\\
-% \ldots\\
-% \mbox{rubik11x}\\
-% \end{array}
-% \right.\\
-% $$
-%
%
%
% \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 Moderm sans bold font
+% ---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).
%
@@ -3457,14 +3558,6 @@
% (see Sections~\ref{sec:listofRandelshofercommands} and \ref{sec:codeRandelshofer}).
%
%
-% ---Two new (more-intuitive) \cmd{\Draw..} commands replace earlier (now deprecated)
-% ambiguous versions; these new versions are now consistent with
-% the other \cmd{\DrawRubikCubeXX} commands (see Section~\ref{sec:flatcommands}).
-% \begin{quote}
-% \cmd{\DrawRubikCubeF} (F = flat) ---replaces \cmd{\DrawRubikFlat}.
-% \newline\cmd{\DrawRubikCubeSF} (SF = semi-flat) ---replaces \cmd{\DrawRubikCubeFlat}.
-% \end{quote}
-%
%
% ---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
@@ -3482,9 +3575,9 @@
% \end{quote}
%
% ---A new command for setting up or allocating a `solved' colour configuration.
-% (see Section~\ref{sec:solvedconfig}):
+% (see Section~\ref{sec:rubiksolvedconfig}):
% \begin{quote}
-% \cmd{\SolvedConfig}
+% \cmd{\RubikSolvedConfig}
% \end{quote}
%
% ---A new command for setting up a `starter cube' for which the \textit{whole} cube
@@ -3524,8 +3617,8 @@
%
% ---Fixed typos and minor errors in the documentation.
%
-% ---Added the following commands to facilitate typesetting a face,
-% as described in Section~\ref{sec:flatcommands}.
+% ---Added the following commands to facilitate typesetting a face
+% (but see Section~\ref{sec:deprecated}).
%\begin{quote}
%\begin{verbatim}
%\DrawFlatUp
@@ -3565,15 +3658,15 @@
%
% \section{Acknowledgements}
%
-% We would like to thank Peter Bartal and Peter Grill for useful ideas and
-% suggestions. We have built on some of their ideas and have acknowledged
+% 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.
-% Finally, we would like to thank Christian Tellechea for the \cmd{\@join\{\}\{\}}
+% 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}), and Herbert Kociemba for helpful comments.
-%
-%
+% (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}
@@ -3594,11 +3687,7 @@
% \item Demaine ED, Demaine ML, Eisenstat S, Lubiw A and Winslow A (2011).
% Algorithms for solving Rubik's cubes.
% \url{http://www.arxiv.org/abs/1106.5736/}
-%
-% \item Garfath-Cox, A (1981). \textit{The cube}, (Bolden Publishing Co.,
-% East Molesey, Surrey) pp.32. [copy in British Library]
-%
-%
+%
% \item Duvoid T (2010).
% M\'{e}thode simple pour remonter le Rubik's cube.
% \newline\url{http://duvoid.fr/rubik/rubik-debutant-couleurs.pdf}
@@ -3614,23 +3703,35 @@
% 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/}.
+% \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}, pp.~257--259. \url{http://www.jstor.org/stable/27851433}
+% \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}
%
@@ -3659,7 +3760,7 @@
% \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},
+% \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)
@@ -3674,19 +3775,31 @@
% 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}.
+% \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}
%
@@ -3696,7 +3809,7 @@
% [cited from \textit{Wikipedia} (Rubik's cube)]
%
%
-% \item Vandenbergh website (Vandenbergh L.) \ \ \textsc{cubezone} \url{http://www.cubezone.be}
+% \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}
@@ -3725,8 +3838,8 @@
%
% \begin{macrocode}
%<*rubikcube>
-\def\RCfileversion{4.0}%
-\def\RCfiledate{2017/03/03}%
+\def\RCfileversion{5.0}%
+\def\RCfiledate{2018/02/25}% February 25, 2018
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{rubikcube}[\RCfiledate\space (v\RCfileversion)]
% \end{macrocode}
@@ -3767,9 +3880,8 @@
% \subsection{\hspace{3mm}Colours}
% \label{sec:codecolours}
%
-% We have adopted the following colour allocations; these were initially
-% defined by Peter Bartal (2011) ---see Section~\ref{sec:colours}.
-% We have modified only the colour grey, which is now defined as {black!30}.
+% We have adopted the following colour allocations---see Section~\ref{sec:colours}
+% for details.
%
% \begin{macrocode}
\definecolor{R}{HTML}{C41E33}%
@@ -3798,7 +3910,7 @@
% 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
+% 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}
@@ -3892,37 +4004,61 @@
\newcommand{\xcount}{\thislevelcount}
% \end{macrocode}
%
-% The \cmd{\ShowSequence} command typesets a sequence of elements, and places
-% an optional separator (|#1|) between them.
-% For each element of |#3| this command forms the construction |#2{element of #3}|.
-% For~example, if |#2 = \rr|, and an element of |#3| is D, then it forms |\rr{D}| etc.
+% \noindent\textsc{example usage:} |\ForEachX{;}{\texttt{\x}}{L;R;U;D}|
%
-% Note that in order to avoid placing a trailing comma after the final element,
-% we identify the first element (using |\xcount|) and then place a comma in front
-% all the remaining elements. This is because it is easy to identify the first element
-% of a sequence, but very difficult to identify the final element.
+% 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.
%
-% We also create two fbox forms: the `F' form places an fbox about the whole output;
-% the `f' form places an fbox about each element in the output (these forms can be
-% helpful when checking white space.
+% 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}}%
+ {\ifthenelse{\xcount=1}{#2{\x}}{#1#2{\x}}}%
}{#3}%
}%
\newcommand{\ShowSequenceF}[3]{%
\fbox{%
\ForEachX{,}{%
- \ifthenelse{\xcount=1}{#2{\x}}{#1#2{\x}}%
+ {\ifthenelse{\xcount=1}{#2{\x}}{#1#2{\x}}}%
}{#3}%
}}%
\newcommand{\ShowSequencef}[3]{%
\ForEachX{,}{%
- \ifthenelse{\xcount=1}{\fbox{#2{\x}}}{#1{\fbox{#2{\x}}}}%
+ {\ifthenelse{\xcount=1}{\fbox{#2{\x}}}{#1{\fbox{#2{\x}}}}}%
}{#3}%
}%
% \end{macrocode}
@@ -3934,7 +4070,7 @@
% 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
+% 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,...).
%
@@ -3987,18 +4123,26 @@
% \end{macro}
%
%
-% \subsection{\hspace{3mm}Face commands}
+% \subsection{\hspace{3mm}RubikFace commands}
+% \label{sec:rubikfacecode}
%
% Cube face notation: U, D, L, R, F, B (Singmaster)
-% {\newline}Cubie-square notation: t, m, b, l, m, r = top, middle,
+% {\newline}Cubie-facelet notation: t, m, b, l, m, r = top, middle,
% bottom, left, middle, right.
-% We use the t, b notation for cubie-squares (facelets) to avoid confusion with cube Face notation.
-% We number the cubie-squares on a face 1--9 reading from left-to-right,
-% starting top-left, ending bottom-right, as follows
-% (see also Figure~\ref{fig:facenotation}):
-% {\newline}\strut\hspace{1cm}top row \ \ \ \ \ (1,2,3) = tl, tm, tr
-% {\newline}\strut\hspace{1cm}middle row\, (4,5,6) = ml, mm, mr
-% {\newline}\strut\hspace{1cm}bottom row (7,8,9) = bl, bm, br
+% 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}
@@ -4018,10 +4162,10 @@
% Each letter is an initial letter of the words Up, Down, Left, Right, Front, Back,
% left, middle, right, top, middle, bottom.
%
-% For~example, in the command \cmd{\Urt\{\#1\}}
-% the U stands for the Up face of the cube, while the \texttt{rt} stands
-% for the ``right-top'' facelet on this face. Note that the order
-% of the two lower-case letters (in this case \texttt{rt}) are always written
+% 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
@@ -4128,42 +4272,59 @@
% \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 implement an equivalent `gray' version (to be consistent with TikZ).
+% We also make WY and WB versions, and implement equivalent `gray' versions
+% (to be consistent with TikZ).
% \begin{macrocode}
\newcommand{\RubikCubeGrey}{%
-\RubikFaceUp {X}{X}{X}{X}{W}{X}{X}{X}{X}%
-\RubikFaceDown {X}{X}{X}{X}{Y}{X}{X}{X}{X}%
-\RubikFaceLeft {X}{X}{X}{X}{B}{X}{X}{X}{X}%
-\RubikFaceRight{X}{X}{X}{X}{G}{X}{X}{X}{X}%
-\RubikFaceFront{X}{X}{X}{X}{O}{X}{X}{X}{X}%
-\RubikFaceBack {X}{X}{X}{X}{R}{X}{X}{X}{X}%
+ \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}{\SolvedConfig}
+% \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{\SolvedConfig}[6]{%
+\newcommand{\RubikSolvedConfig}[6]{%
\RubikFaceRightAll{#1}%
\RubikFaceLeftAll{#2}%
\RubikFaceUpAll{#3}%
@@ -4184,10 +4345,10 @@
% 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{\SolvedConfig} command (above).
+% 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}{\SolvedConfig{X}{X}{X}{X}{X}{X}}%
+\newcommand{\RubikCubeGreyAll}{\RubikSolvedConfig{X}{X}{X}{X}{X}{X}}%
\newcommand{\RubikCubeGrayAll}{\RubikCubeGreyAll}
% \end{macrocode}
% \end{macro}
@@ -4206,9 +4367,9 @@
% \cmd{\RubikCubeSolvedWB} (denoting the White opposite Blue configuration).
% These represent the two standard versions of the Rubik Cube.
% \begin{macrocode}
-\newcommand{\RubikCubeSolved}{\SolvedConfig{G}{B}{W}{Y}{O}{R}}%
+\newcommand{\RubikCubeSolved}{\RubikSolvedConfig{G}{B}{W}{Y}{O}{R}}%
\newcommand{\RubikCubeSolvedWY}{\RubikCubeSolved}%
-\newcommand{\RubikCubeSolvedWB}{\SolvedConfig{R}{O}{W}{B}{G}{Y}}%
+\newcommand{\RubikCubeSolvedWB}{\RubikSolvedConfig{R}{O}{W}{B}{G}{Y}}%
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -4348,7 +4509,6 @@
% 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}{%
@@ -4574,110 +4734,36 @@
}
% \end{macrocode}
%
+% RWDN19D removed DrawRubikLayerFace commands Feb 19 2018
%
-% \subsection{\hspace{3mm}LayerFace commands}
-%
-% \begin{macro}{\DrawRubikLayerFace}
-% \begin{macro}{\DrawRubikLayerFaceAll}
-% These two LayerFace commands each draw and paint a single
-% face of 9~facelets. The first command takes 9 ordered colour parameters,
-% (ordered in layers from top left to bottom right, so \texttt{\#1}
-% is the place-holder for the colour of the TopLeft facelet etc.)
-% The second command takes only one colour parameter (since \texttt{All} the
-% colours are the same).
-%
-% The drawing origin (0,0) = bottom left corner. The facelets are drawn
-% from left to right.
-% NOTE: this macro is SAME as the internal command
-% \cmd{\DrawRubikCubeFrontFace}
-% which is used for drawing the front face of a Rubik cube.
-% \end{macro}
-% \end{macro}
-% \begin{macrocode}
-\newcommand{\DrawRubikLayerFace}[9]{%
-%%-----------FRONT face---------
-%%---top row
-\draw[line join=round,line cap=round,ultra thick,fill=#1]%
-(0,2) -- (0, 3) -- (1,3) -- (1,2) -- cycle;
-\draw[line join=round,line cap=round,ultra thick,fill=#2]%
-(1,2) -- (1, 3) -- (2,3) -- (2,2) -- cycle;
-\draw[line join=round,line cap=round,ultra thick,fill=#3]%
-(2,2) -- (2, 3) -- (3,3) -- (3,2) -- cycle;
-%%-----middle row
-\draw[line join=round,line cap=round,ultra thick,fill=#4]%
-(0,1) -- (0, 2) -- (1,2) -- (1,1) -- cycle;
-\draw[line join=round,line cap=round,ultra thick,fill=#5]%
-(1,1) -- (1, 2) -- (2,2) -- (2,1) -- cycle;
-\draw[line join=round,line cap=round,ultra thick,fill=#6]%
-(2,1) -- (2, 2) -- (3,2) -- (3,1) -- cycle;
-%%----bottom row
-\draw[line join=round,line cap=round,ultra thick,fill=#7]%
-(0,0) -- (0, 1) -- (1,1) -- (1,0) -- cycle;
-\draw[line join=round,line cap=round,ultra thick,fill=#8]%
-(1,0) -- (1, 1) -- (2,1) -- (2,0) -- cycle;
-\draw[line join=round,line cap=round,ultra thick,fill=#9]%
-(2,0) -- (2, 1) -- (3,1) -- (3,0) -- cycle;
-}
-\newcommand{\DrawRubikLayerFaceAll}[1]{%
-%%----------FRONT face-----------
-%%---top row
-\draw[line join=round,line cap=round,ultra thick,fill=#1]%
-(0,2) -- (0, 3) -- (1,3) -- (1,2) -- cycle;
-\draw[line join=round,line cap=round,ultra thick,fill=#1]%
-(1,2) -- (1, 3) -- (2,3) -- (2,2) -- cycle;
-\draw[line join=round,line cap=round,ultra thick,fill=#1]%
-(2,2) -- (2, 3) -- (3,3) -- (3,2) -- cycle;
-%%-----middle row
-\draw[line join=round,line cap=round,ultra thick,fill=#1]%
-(0,1) -- (0, 2) -- (1,2) -- (1,1) -- cycle;
-\draw[line join=round,line cap=round,ultra thick,fill=#1]%
-(1,1) -- (1, 2) -- (2,2) -- (2,1) -- cycle;
-\draw[line join=round,line cap=round,ultra thick,fill=#1]%
-(2,1) -- (2, 2) -- (3,2) -- (3,1) -- cycle;
-%%----bottom row
-\draw[line join=round,line cap=round,ultra thick,fill=#1]%
-(0,0) -- (0, 1) -- (1,1) -- (1,0) -- cycle;
-\draw[line join=round,line cap=round,ultra thick,fill=#1]%
-(1,0) -- (1, 1) -- (2,1) -- (2,0) -- cycle;
-\draw[line join=round,line cap=round,ultra thick,fill=#1]%
-(2,0) -- (2, 1) -- (3,1) -- (3,0) -- cycle;
-}
-% \end{macrocode}
%
%
-% \subsection{\hspace{3mm}DrawFlatX commands}
-% \label{sec:drawflatxcommands}
+% \subsection{\hspace{3mm}DrawRubikFlatX commands}
+% \label{sec:codedrawrubikflatcommands}
%
-% [\textsc{note}: These new commands (version 3.0) were modified from the
+% [\textsc{Background}: These commands (new in version 3.0) were modified from the
% earlier \cmd{\FlatUp}, \cmd{\FlatDown} etc., commands; i.e.,~they were
-% reformulated as a set of \cmd{\Draw...} commands so as to make this
+% renamed as a set of \cmd{\Draw...} commands so as to make this
% notation consistent with the other \cmd{\Draw..} commands.
-% Note also that, for user convenience, all of these commands have
-% been copied (in version~4.0) to equivalent \cmd{\DrawFace..}
-% versions associated with their two coordinate arguments
-% set to $x=0$, $y=0$---see Section~\ref{sec:drawfacecode}]
-%
-% \begin{macro}{\DrawFlatUp}
-% \begin{macro}{\DrawFlatDown}
-% \begin{macro}{\DrawFlatLeft}
-% \begin{macro}{\DrawFlatRight}
-% \begin{macro}{\DrawFlatFront}
-% \begin{macro}{\DrawFlatBack}
-% Each of these commands draws a separate (flat) face (9~facelets)
-% (see Section~\ref{sec:flatcommands}).
-% Each command (except \cmd{\DrawFlatFront}) takes two arguments,
+% 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 that the Y-argument currently only works fully
-% with the \cmd{\DrawFlatUp}, \cmd{\DrawFlatDown} and \cmd{\DrawFlatBack}
-% commands, since all the other faces currently only require Y=0
-% (this will be made more flexible in a later version).
-%
-% Note also that the \cmd{\DrawFlatFront} command takes no arguments,
+% 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.
@@ -4685,15 +4771,15 @@
% \textsc{example}: The following command positions the Up face so
% that its bottom left corner is located at (0,3):
% \begin{quote}
-% \cmd{\DrawFlatUp\{0\}\{3\}}
+% \cmd{\DrawRubikFlatUp\{0\}\{3\}}
% \end{quote}
-% These new commands are also used by the commands \cmd{\DrawRubikFlat} and
-% \cmd{\DrawRubikCubeFlat} to draw various `flat' representations
+% 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{\DrawFlatDown} command (since dx and dy are already used by the
+% 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}
@@ -4703,7 +4789,7 @@
% \end{macro}
% \end{macro}
% \begin{macrocode}
-\newcommand{\DrawFlatUp}[2]{%
+\newcommand{\DrawRubikFlatUp}[2]{%
\pgfmathsetmacro{\ux}{#1}%
\pgfmathsetmacro{\uy}{#2}%
%%---top row
@@ -4738,7 +4824,7 @@
-- (\ux + 3,\uy + 0) -- cycle;
}
%%-------------------------
-\newcommand{\DrawFlatDown}[2]{%
+\newcommand{\DrawRubikFlatDown}[2]{%
\pgfmathsetmacro{\ddx}{#1}%
\pgfmathsetmacro{\ddy}{#2}%
%%---top row
@@ -4773,61 +4859,77 @@
-- (\ddx + 3,\ddy + 0) -- cycle;
}
%%-------------------------
-\newcommand{\DrawFlatLeft}[2]{%
+\newcommand{\DrawRubikFlatLeft}[2]{%
\pgfmathsetmacro{\lx}{#1}%
\pgfmathsetmacro{\ly}{#2}%
-%% NOTE: y variable coord not yet implemented
%%---top row
\draw[line join=round,line cap=round,ultra thick,fill=\Llt]%
-(\lx + 0,2) -- (\lx + 0, 3) -- (\lx + 1,3) -- (\lx + 1,2) -- cycle;
+(\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,2) -- (\lx + 1, 3) -- (\lx + 2,3) -- (\lx + 2,2) -- cycle;
+(\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,2) -- (\lx + 2, 3) -- (\lx + 3,3) -- (\lx + 3,2) -- cycle;
+(\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,1) -- (\lx + 0, 2) -- (\lx + 1,2) -- (\lx + 1,1) -- cycle;
+(\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,1) -- (\lx + 1, 2) -- (\lx + 2,2) -- (\lx + 2,1) -- cycle;
+(\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,1) -- (\lx + 2, 2) -- (\lx + 3,2) -- (\lx + 3,1) -- cycle;
+(\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,0) -- (\lx + 0, 1) -- (\lx + 1,1) -- (\lx + 1,0) -- cycle;
+(\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,0) -- (\lx + 1, 1) -- (\lx + 2,1) -- (\lx + 2,0) -- cycle;
+(\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,0) -- (\lx + 2, 1) -- (\lx + 3,1) -- (\lx + 3,0) -- cycle;
+(\lx + 2, \ly + 0) -- (\lx + 2, \ly + 1) -- (\lx + 3, \ly + 1)%
+ -- (\lx + 3, \ly + 0) -- cycle;
}
%%--------------------------
-\newcommand{\DrawFlatRight}[2]{%
-\pgfmathsetmacro{\rx}{#1}% %3
-\pgfmathsetmacro{\ry}{#2}% %0
-%% NOTE: y variable coord not yet implemented
+\newcommand{\DrawRubikFlatRight}[2]{%
+\pgfmathsetmacro{\rx}{#1}%
+\pgfmathsetmacro{\ry}{#2}%
%%---top row
\draw[line join=round,line cap=round,ultra thick,fill=\Rlt]%
-(\rx + 0,2) -- (\rx + 0, 3) -- (\rx + 1,3) -- (\rx + 1,2) -- cycle;
+(\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,2) -- (\rx + 1, 3) -- (\rx + 2,3) -- (\rx + 2,2) -- cycle;
+(\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,2) -- (\rx + 2, 3) -- (\rx + 3,3) -- (\rx + 3,2) -- cycle;
+(\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,1) -- (\rx + 0, 2) -- (\rx + 1,2) -- (\rx + 1,1) -- cycle;
+(\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,1) -- (\rx + 1, 2) -- (\rx + 2,2) -- (\rx + 2,1) -- cycle;
+(\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,1) -- (\rx + 2, 2) -- (\rx + 3,2) -- (\rx + 3,1) -- cycle;
+(\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,0) -- (\rx + 0, 1) -- (\rx + 1,1) -- (\rx + 1,0) -- cycle;
+(\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,0) -- (\rx + 1, 1) -- (\rx + 2,1) -- (\rx + 2,0) -- cycle;
+(\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,0) -- (\rx + 2, 1) -- (\rx + 3,1) -- (\rx + 3,0) -- cycle;
+(\rx + 2, \ry + 0) -- (\rx + 2, \ry + 1) -- (\rx + 3, \ry + 1)%
+ -- (\rx + 3, \ry + 0) -- cycle;
}
%%-----------------------
-\newcommand{\DrawFlatFront}{%
+\newcommand{\DrawRubikFlatFront}{%
%% This command is used /only/ by the \cmd{\DrawRubikCubeF} command.
%% NOTE: x, y variables not implemented as not required here
%%---top row
@@ -4859,7 +4961,7 @@
(2,0) -- (2, 1) -- (3,1) -- (3,0) -- cycle;
}
%%-------------------------
-\newcommand{\DrawFlatBack}[2]{%
+\newcommand{\DrawRubikFlatBack}[2]{%
\pgfmathsetmacro{\bx}{#1}%
\pgfmathsetmacro{\by}{#2}%
%%---top row
@@ -4897,16 +4999,16 @@
%
% \begin{macro}{\DrawRubikCubeF}
% Draws a standard flat (F) representation of the Rubik
-% cube (colours only). Note that \cmd{\DrawFlatFront} (below)
+% cube (colours only). Note that \cmd{\DrawRubikFlatFront} (below)
% does not take any arguments (x,y).
% \begin{macrocode}
\newcommand{\DrawRubikCubeF}{%
- \DrawFlatUp{0}{3}%
- \DrawFlatDown{0}{-3}%
- \DrawFlatLeft{-3}{0}%
- \DrawFlatFront%
- \DrawFlatRight{3}{0}%
- \DrawFlatBack{6}{0}%
+ \DrawRubikFlatUp{0}{3}%
+ \DrawRubikFlatDown{0}{-3}%
+ \DrawRubikFlatLeft{-3}{0}%
+ \DrawRubikFlatFront%
+ \DrawRubikFlatRight{3}{0}%
+ \DrawRubikFlatBack{6}{0}%
}
% \end{macrocode}
% \end{macro}
@@ -4918,157 +5020,246 @@
% arguments (below) are for the bottom-left corner of the face.
% \begin{macrocode}
\newcommand{\DrawRubikCubeSF}{%
- \DrawRubikCube%
- \DrawFlatDown{0}{-3}%
- \DrawFlatLeft{-3}{0}%
- \DrawFlatBack{4}{1}%
+ \DrawRubikCubeRU%
+ \DrawRubikFlatDown{0}{-3}%
+ \DrawRubikFlatLeft{-3}{0}%
+ \DrawRubikFlatBack{4}{1}%
}
% \end{macrocode}
% \end{macro}
%
%
%
-% \subsubsection{DrawFlatXSide commands}
-% \label{sec:drawflatxsidecode}
+% \subsubsection{DrawRubikFaceXSide commands}
+% \label{sec:drawrubikflatxsidecode}
%
% These six commands draw a face together with all four sidebars
-% (colours only). We use the \cmd{\DrawFlatX} commands to draw the face.
-% We use the \cmd{\DrawRubikLayerSideX} commands to draw the sidebars.
-% The parameter orders for the \cmd{\DrawRubikLayerSideX}
-% commands are as follows:
-% Top (T) and Bottom (B) = left to right;
+% (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;
-% (see the \cmd{\DrawRubikLayerSideX} command for details of the arguments).
-%
-% Note that for user convenience, we we have copied many of these commands
-% to a \cmd{\DrawFace..} version (see Section~\ref{sec:drawfacecode}).
%
+% 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}{\DrawFlatUpSide}
-% Draws the \textsc{up} face together with all four sidebars
-% (colours only).
+% \begin{macro}{\DrawRubikFaceUpSide}
+% Draws the \textsc{up} face together with all four sidebars.
% \begin{macrocode}
-\newcommand{\DrawFlatUpSide}{%
-\DrawFlatUp{0}{0}%
-\DrawRubikLayerSideT{\Brt}{\Bmt}{\Blt}%
-\DrawRubikLayerSideL{\Llt}{\Lmt}{\Lrt}%
-\DrawRubikLayerSideR{\Rrt}{\Rmt}{\Rlt}%
-\DrawRubikLayerSideB{\Flt}{\Fmt}{\Frt}%
+\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}{\DrawFlatFrontSide}
-% Draws the \textsc{front} face together with all four sidebars
-% (colours only).
+% \begin{macro}{\DrawRubikFaceFrontSide}
+% Draws the \textsc{front} face together with all four sidebars.
% \begin{macrocode}
-\newcommand{\DrawFlatFrontSide}{%
-\DrawFlatFront{0}{0}%
-\DrawRubikLayerSideT{\Ulb}{\Umb}{\Urb}%
-\DrawRubikLayerSideL{\Lrt}{\Lrm}{\Lrb}%
-\DrawRubikLayerSideR{\Rlt}{\Rlm}{\Rlb}%
-\DrawRubikLayerSideB{\Dlt}{\Dmt}{\Drt}%
+\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}{\DrawFlatRightSide}
-% Draws the \textsc{right} face together with all four sidebars
-% (colours only).
+% \begin{macro}{\DrawRubikFaceRightSide}
+% Draws the \textsc{right} face together with all four sidebars.
% \begin{macrocode}
-\newcommand{\DrawFlatRightSide}{%
-\DrawFlatRight{0}{0}%
-\DrawRubikLayerSideT{\Urb}{\Urm}{\Urt}%
-\DrawRubikLayerSideL{\Frt}{\Frm}{\Frb}%
-\DrawRubikLayerSideR{\Blt}{\Blm}{\Blb}%
-\DrawRubikLayerSideB{\Drt}{\Drm}{\Drb}%
+\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}{\DrawFlatLeftSide}
-% Draws the \textsc{left} face together with all four sidebars
-% (colours only).
+% \begin{macro}{\DrawRubikFaceLeftSide}
+% Draws the \textsc{left} face together with all four sidebars.
% \begin{macrocode}
-\newcommand{\DrawFlatLeftSide}{%
-\DrawFlatLeft{0}{0}%
-\DrawRubikLayerSideT{\Ult}{\Ulm}{\Ulb}%
-\DrawRubikLayerSideL{\Brt}{\Brm}{\Brb}%
-\DrawRubikLayerSideR{\Flt}{\Flm}{\Flb}%
-\DrawRubikLayerSideB{\Dlb}{\Dlm}{\Dlt}%
+\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}{\DrawFlatBackSide}
-% Draws the \textsc{back} face together with all four sidebars
-% (colours only).
+% \begin{macro}{\DrawRubikFaceBackSide}
+% Draws the \textsc{back} face together with all four sidebars.
% \begin{macrocode}
-\newcommand{\DrawFlatBackSide}{%
-\DrawFlatBack{0}{0}%
-\DrawRubikLayerSideT{\Urt}{\Umt}{\Ult}%
-\DrawRubikLayerSideL{\Rrt}{\Rrm}{\Rrb}%
-\DrawRubikLayerSideR{\Llt}{\Llm}{\Llb}%
-\DrawRubikLayerSideB{\Drb}{\Dmb}{\Dlb}%
+\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}{\DrawFlatDownSide}
-% Draws the \textsc{down} face together with all four sidebars
-% (colours only).
+% \begin{macro}{\DrawRubikFaceDownSide}
+% Draws the \textsc{down} face together with all four sidebars.
% \begin{macrocode}
-\newcommand{\DrawFlatDownSide}{%
-\DrawFlatDown{0}{0}%
-\DrawRubikLayerSideT{\Flb}{\Fmb}{\Frb}%
-\DrawRubikLayerSideL{\Lrb}{\Lmb}{\Llb}%
-\DrawRubikLayerSideR{\Rlb}{\Rmb}{\Rrb}%
-\DrawRubikLayerSideB{\Brb}{\Bmb}{\Blb}%
+\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}DrawFace commands}
-% \label{sec:drawfacecode}
+% \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.
%
-% We now copy the above \cmd{\DrawFlat..} commands
-% as \cmd{\DrawFace..} commands for the purpose of user
-% convenience, since most of the time the user wants just to
-% draw a particular face with or without the associated side bars.
-% In a future version we may well, therefore, deprecate some of the above
-% `Flat' command names.
+% 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{\DrawFaceUp}{\DrawFlatUp{0}{0}}
-\newcommand{\DrawFaceDown}{\DrawFlatDown{0}{0}}
-\newcommand{\DrawFaceLeft}{\DrawFlatLeft{0}{0}}
-\newcommand{\DrawFaceRight}{\DrawFlatRight{0}{0}}
-\newcommand{\DrawFaceFront}{\DrawFlatFront{0}{0}}
-\newcommand{\DrawFaceBack}{\DrawFlatBack{0}{0}}
-\newcommand{\DrawFaceUpSide}{\DrawFlatUpSide}
-\newcommand{\DrawFaceDownSide}{\DrawFlatDownSide}
-\newcommand{\DrawFaceLeftSide}{\DrawFlatLeftSide}
-\newcommand{\DrawFaceRightSide}{\DrawFlatRightSide}
-\newcommand{\DrawFaceFrontSide}{\DrawFlatFrontSide}
-\newcommand{\DrawFaceBackSide}{\DrawFlatBackSide}
+\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{\hspace{3mm}SideBar commands}
+% \subsection{Sidebars (Face)}
+% \label{sec:sidebarcode}
%
-% SideBar commands draw narrow bars of colour indicating the
+% 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.
+% 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}
+% \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).
@@ -5076,267 +5267,670 @@
% \end{macro}
% \end{macro}
% \begin{macrocode}
-\newcommand{\RubikSideBarWidth}[1]{\pgfmathsetmacro{\bw}{#1}}
-\newcommand{\RubikSideBarLength}[1]{\pgfmathsetmacro{\bl}{#1}}
-\newcommand{\RubikSideBarSep}[1]{\pgfmathsetmacro{\bs}{#1}}
+\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}%
+\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}Allocating a colour to a single facelet sidebar}
+%
+%
+% \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}
-% Internal commands.
-% Full length face SideBars are really multiple instances of
-% single facelet bars,
-% each of which is drawn using one of four internal SideBar
-% commands---one for each of the sides which we shall
-% call Top, Bottom, Left, Right.
-% Each SideBar command takes two arguments: one for facelet position
-% \marg{$ 1 \mid 2 \mid 3$} and one for
-% the colour-code \marg{$ R \mid O \mid Y \mid G \mid B \mid W \mid X $}.
-%
-% \textsc{example}: the following command allocates a colour to a single
-% facelet sidebar on the Left of a Rubik face:
+% 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}
-% \cmd{\side@barL}\marg{facelet-position}\marg{colour-code}
+% \verb!\side@barR{2}{\Rlt}!
% \end{quote}
-% There are three facelet positions on each of the four sides
-% of a face, and these
-% are numbered 1 to 3 starting from the bottom left corner (1,1).
-% The SideBar command also implements the set (or default)
-% Length (\cmd{\bl}), Width (\cmd{\bw}) and Separation (\cmd{\bs})
+% 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 TeX sidebar command in order to work.
-% The start point of the TikZ \cmd{\draw} command for each bar rectangle
-% is bottom Left corner of the bar =(\cmd{\dx},\cmd{\dy})
+% 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
-\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)
+ %% #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
-\pgfmathsetmacro{\blh}{\bl*(0.5)}%
-\pgfmathsetmacro{\dx}{3 + \bs}%
-\pgfmathsetmacro{\dy}{#1 -1+0.5-\blh}%
-\draw[fill=#2] (\dx,\dy) -- (\dx,\dy + \bl)
+ %% #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
-\pgfmathsetmacro{\blh}{\bl*(0.5)}%
-\pgfmathsetmacro{\dx}{#1 -1+0.5-\blh}%
-\pgfmathsetmacro{\dy}{3 +\bs}%
-\draw[fill=#2] (\dx,\dy) -- (\dx,\dy + \bw)
+ %% #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
-\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)
+ %% #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
%
-% \subsubsection{\hspace{3mm}Drawing a single facelet sidebar}
-%
-% \begin{macro}{\DrawRubikLayerSideX$_1$X$_2$X$_3$}
-% This command draws a single facelet sidebar using the above \cmd{\sidebar} command.
-% The X$_1$X$_2$X$_3$ parameters refer to the options Left, Middle,
-% Right, Top, Middle, Bottom, x, y, as follows:
-% \begin{quote}
-% X$_1$ is an $x$ parameter: either $\langle L\mid M \mid R\rangle$
-% {\newline}X$_2$ is a \, $y$ parameter: either $\langle T\mid M \mid B\rangle$
-% {\newline}X$_3$ is an extra parameter: either $\langle x\mid y \rangle$,
-% required by corner sidebars to indicate whether the sidebar was either
-% above or below $\langle y \rangle$, or to the left or
-% right $\langle x \rangle$ of the associated cubie.
-% An $X_3$ parameter is not required for the sidebar of an edge cubie, since
-% only one location is possible in these cases.
-% \end{quote}
-% For~example, the following command
-% \begin{quote}
-% \cmd{\DrawRubikLayerSideLTy\{G\}}
-% \end{quote}
-% draws a Green sidebar above the Top Left cubie.
-% \end{macro}
-%
-% \begin{macrocode}
-%%---Left side
-\newcommand{\DrawRubikLayerSideLTx}[1]{\side@barL{3}{#1}}
-\newcommand{\DrawRubikLayerSideLMx}[1]{\side@barL{2}{#1}}
-\newcommand{\DrawRubikLayerSideLM}[1]{\side@barL{2}{#1}}
-\newcommand{\DrawRubikLayerSideLBx}[1]{\side@barL{1}{#1}}
-%---Right side
-\newcommand{\DrawRubikLayerSideRTx}[1]{\side@barR{3}{#1}}
-\newcommand{\DrawRubikLayerSideRMx}[1]{\side@barR{2}{#1}}
-\newcommand{\DrawRubikLayerSideRM}[1]{\side@barR{2}{#1}}
-\newcommand{\DrawRubikLayerSideRBx}[1]{\side@barR{1}{#1}}
-%---Top side
-\newcommand{\DrawRubikLayerSideLTy}[1]{\side@barT{1}{#1}}
-\newcommand{\DrawRubikLayerSideMTy}[1]{\side@barT{2}{#1}}
-\newcommand{\DrawRubikLayerSideMT}[1]{\side@barT{2}{#1}}
-\newcommand{\DrawRubikLayerSideRTy}[1]{\side@barT{3}{#1}}
-%---Bottom side
-\newcommand{\DrawRubikLayerSideLBy}[1]{\side@barB{1}{#1}}
-\newcommand{\DrawRubikLayerSideMBy}[1]{\side@barB{2}{#1}}
-\newcommand{\DrawRubikLayerSideMB}[1]{\side@barB{2}{#1}}
-\newcommand{\DrawRubikLayerSideRBy}[1]{\side@barB{3}{#1}}
-% \end{macrocode}
-%
-%
-% \subsubsection{\hspace{3mm}Drawing multiple cubie sidebars}
-%
-% \begin{macro}{\DrawRubikLayerSideT}
-% \begin{macro}{\DrawRubikLayerSideB}
-% \begin{macro}{\DrawRubikLayerSideL}
-% \begin{macro}{\DrawRubikLayerSideR}
-% These commands allow the drawing of 3 small sidebars along
-% one particular side (Top, Bottom, Left, Right), as indicated
-% by the appended T, B, L, R letter code.
-% Each command takes three ordered colour arguments, which are ordered
-% either from left to right (the T and B forms), or from top to bottom
-% (the L and R forms)
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \begin{macrocode}
-%%--Top side---
-\newcommand{\DrawRubikLayerSideT}[3]{%
- \DrawRubikLayerSideLTy{#1}%
- \DrawRubikLayerSideMTy{#2}%
- \DrawRubikLayerSideRTy{#3}%
-}
-%%--Bottom side---
-\newcommand{\DrawRubikLayerSideB}[3]{%
- \DrawRubikLayerSideLBy{#1}%
- \DrawRubikLayerSideMBy{#2}%
- \DrawRubikLayerSideRBy{#3}%
+%
+%
+%
+%
+%
+% \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}%
}
-%%--Left side--------
-%% colours run vertically DOWN
-\newcommand{\DrawRubikLayerSideL}[3]{%
- \DrawRubikLayerSideLTx{#1}%
- \DrawRubikLayerSideLMx{#2}%
- \DrawRubikLayerSideLBx{#3}%
+% \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}%
}
-%%--Right side--------
-%% colours run vertically DOWN
-\newcommand{\DrawRubikLayerSideR}[3]{%
- \DrawRubikLayerSideRTx{#1}%
- \DrawRubikLayerSideRMx{#2}%
- \DrawRubikLayerSideRBx{#3}%
+% \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}
%
-% \begin{macro}{\DrawRubikLayerSideLR}
-% This command draws six cubie sidebars, three on each side, drawn in (L, R)
-% pairs. The command takes six colour arguments, ordered in pairs,
-% as shown in the following example.
-% \begin{quote}
-%\begin{verbatim}
-% \DrawRubikLayerSideLR{G} {G}
-% {R} {B}
-% {Y} {B}
-%\end{verbatim}
-% \end{quote}
-% \begin{macrocode}
-\newcommand{\DrawRubikLayerSideLR}[6]{%
- \DrawRubikLayerSideLTx{#1}%
- \DrawRubikLayerSideRTx{#2}%
- \DrawRubikLayerSideLMx{#3}%
- \DrawRubikLayerSideRMx{#4}%
- \DrawRubikLayerSideLBx{#5}%
- \DrawRubikLayerSideRBx{#6}%
+%
+% \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}
-% \end{macro}
+% 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}
%
%
-% \subsection{\hspace{3mm}RubikSide commands}
-% \label{sec:rubiksidecode}
+% \subsubsection*{Left-Back vert sidebar (LU view)}
%
-% \begin{macro}{\RubikSideLeft}
-% \begin{macro}{\RubikSideRight}
-% \begin{macro}{\RubikSideFront}
-% \begin{macro}{\RubikSideBack}
-% RubikSide commands allocate colours to the side facelets of the
-% UP~face---see Section~\ref{sec:rubikside}.
-% These facelets are the top three facelets of each side Front, Back, Left, Right.
+% 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{\RubikSideFront}[3]{%
-\def\Flt{#1}\def\Fmt{#2}\def\Frt{#3}%
+\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}%
}
-\newcommand{\RubikSideRight}[3]{%
-\def\Rlt{#1}\def\Rmt{#2}\def\Rrt{#3}%
+% \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}%
}
-\newcommand{\RubikSideLeft}[3]{%
-\def\Llt{#1}\def\Lmt{#2}\def\Lrt{#3}%
+% \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}%
}
-\newcommand{\RubikSideBack}[3]{%
-\def\Blt{#1}\def\Bmt{#2}\def\Brt{#3}%
+% \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}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
+% 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)}
%
-% \begin{macro}{\RubikSideLeftAll}
-% \begin{macro}{\RubikSideRightAll}
-% \begin{macro}{\RubikSideFrontAll}
-% \begin{macro}{\RubikSideBackAll}
-% These 4 commands allocate the same colour to all 3 cubiesquares in the specified face
-% (Left, Right, Front, Back). Each command therefore takes only 1 argument
-% (one of the colour codes).
%
-% {\noindent}For~example, \cmd{\RubikSideUpAll\{R\}}
+%
+% Front LEFT (RD view = same as for RU)
% \begin{macrocode}
-\newcommand{\RubikSideFrontAll}[1]{%
-\def\Flt{#1}\def\Fmt{#1}\def\Frt{#1}%
+\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}%
}
-\newcommand{\RubikSideRightAll}[1]{%
-\def\Rlt{#1}\def\Rmt{#1}\def\Rrt{#1}%
+% \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}%
}
-\newcommand{\RubikSideLeftAll}[1]{%
-\def\Llt{#1}\def\Lmt{#1}\def\Lrt{#1}%
+% \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}%
}
-\newcommand{\RubikSideBackAll}[1]{%
-\def\Blt{#1}\def\Bmt{#1}\def\Brt{#1}%
+% \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}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
+% 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}NCube command}
+% \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,
@@ -5585,7 +6179,7 @@
%
%
% \subsection{\hspace{3mm}Rotation commands}
-% \label{sec:rotationcommands}
+% \label{sec:rotationcommandscode}
%
%
% \subsubsection{\hspace{3mm}Introduction}
@@ -5603,13 +6197,13 @@
% 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 Sections~\ref{sec:cmdsusingjoin} for details).
+% 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 made to have the same height so they sit nicely when arranged side-by-side.
-% A lot of special macros for handling and generating these glyphs are described below
+% 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
@@ -5623,12 +6217,12 @@
% (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. For an example,
-% see the form \rrh{Bw}\ constructed Section~\ref{sec:coderotationBw}).
+% 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 using the \texttt{ltugboat.cls}, and all fixed mainly
-% by setting the associated minipages $\rightarrow$ width = 0.6cm,
+% 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.
%
%
@@ -5641,7 +6235,7 @@
% Note that we start at (0,0) and draw to the final point
% in order to make a nice corner join.
%
-% todo: ? make this a proper internal command
+% \textsc{todo}: ? make this a proper internal command
% using \verb!@! sometime.
%
% \begin{macrocode}
@@ -5652,14 +6246,14 @@
% \end{macro}
%
% We now define a number of points and line-segments inside the square
-% (e.g.,~\cmd{\@sd}, \cmd{\@sh} \ldots\ etc.) which will be required
+% `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).
%
-% todo: make a small diagram to illustrate the position of these
+% \textsc{todo}: make a small diagram to illustrate the position of these
% parameters and make things a bit clearer sometime.
%
%\begin{macrocode}
@@ -5697,25 +6291,31 @@
% \begin{macro}{\@hRubik}
% These internal commands are used to generate the
% prime, w, w-prime, s, s-prime, a, a-prime
-% rotation commands. The \cmd{\@xyz..} commands are used to generate the
+% 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 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 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}).
%
-% Note that the TikZ `thick' line code = 0.8pt (used in \cmd{\@SquareLetter}).
-%
% \begin{macrocode}
\newcommand{\@rr}[1]{{\@rubikfont #1}}
\newcommand{\@rrp}[1]{{\@rubikfont #1\@rubikprime}}
@@ -5742,14 +6342,22 @@
\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\@rubikprime}]}
-\newcommand{\@xyzRubik}[1]{\raisebox{3.45pt}{[{\@rubikfont #1}]}}
-\newcommand{\@xyzRubikp}[1]{\raisebox{3.45pt}{[{\@rubikfont #1\@rubikprime}]}}
-\newcommand{\@xyzhbdfl}[1]{[\raisebox{-0.6pt}{{\@rubikfont #1}}]}
-\newcommand{\@xyzbdflRubik}[1]{\raisebox{3.45pt}{[\raisebox{-0.6pt}{{\@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}}}
+ \setlength{\fboxrule}{0.8pt}%
+ \fbox{\rule[-1pt]{0pt}{8.5pt}\raisebox{-0.5pt}{#1}}}
\newlength\@hRubik%
\setlength{\@hRubik}{0.185cm}%
% \end{macrocode}
@@ -5787,33 +6395,35 @@
%
%
%
+%
+% \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 which typesets it in some form, say \cmd{\rrhU}.
+% 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 command |\rrh{U}| is equivalent to \cmd{\rrhU} (see Section~\ref{sec:cmdsusingjoin}).
+% 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}
%
%
%
-%
-% \subsubsection{\hspace{3mm}Using {\textbackslash}\texttt{@join}}
-% \label{sec:cmdsusingjoin}
-%
% \begin{macro}{\textRubik}
% \begin{macro}{\Rubik}
% \begin{macro}{\rr}
% \begin{macro}{\rrh}
-% The following four commands typeset a single rotation, where the rotation-code (e.g.,~U) is
-% the argument (see Section~\ref{sec:overview}). As an example, the format for
+% 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
@@ -5821,9 +6431,9 @@
% rotation hieroglyph for the rotation~U, etc.
%
% These four commands, which use the
-% internal \cmd{\@join} command (see Section~\ref{sec:usefulinternalcommands}), are
+% internal \cmd{\@join} command (see above), are
% especially useful when typesetting a list of rotation-codes.
-% Furthermore, it seems more intuitive to specify a rotation command
+% 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}}
@@ -5918,6 +6528,7 @@
%
%
% \subsubsection{\hspace{3mm}Rotation Bwp}
+% \label{sec:coderotationBwp}
%
% \begin{macro}{\rrBwp}
% \begin{macro}{\SquareBwp}
@@ -8112,11 +8723,14 @@
% \begin{macro}{\rru}
% \begin{macro}{\rrhu}
% \begin{macro}{\Rubiku}
-% These commands all draw forms which denote the u rotation.
+% These commands all draw forms which denote the u and up cube rotation.
% \begin{macrocode}
\newcommand{\rru}{\@rr{u}}
-\newcommand{\Rubiku}{\@xyzRubik{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}
@@ -8124,11 +8738,14 @@
% \begin{macro}{\rrd}
% \begin{macro}{\rrhd}
% \begin{macro}{\Rubikd}
-% These commands all draw forms which denote the d rotation.
+% 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}
@@ -8140,11 +8757,14 @@
% \begin{macro}{\rrl}
% \begin{macro}{\rrhl}
% \begin{macro}{\Rubikl}
-% These commands all draw forms which denote the l rotation.
+% 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}
@@ -8152,11 +8772,14 @@
% \begin{macro}{\rrr}
% \begin{macro}{\rrhr}
% \begin{macro}{\Rubikr}
-% These commands all draw forms which denote the r rotation.
+% These commands all draw forms which denote the r and rp cube rotation.
% \begin{macrocode}
\newcommand{\rrr}{\@rr{r}}
-\newcommand{\Rubikr}{\@xyzRubik{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}
@@ -8168,11 +8791,14 @@
% \begin{macro}{\rrf}
% \begin{macro}{\rrhf}
% \begin{macro}{\Rubikf}
-% These commands all draw forms which denote the f rotation.
+% 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}
@@ -8180,11 +8806,14 @@
% \begin{macro}{\rrb}
% \begin{macro}{\rrhb}
% \begin{macro}{\Rubikb}
-% These commands all draw forms which denote the b rotation.
+% 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}
@@ -8740,7 +9369,7 @@
% 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
+% 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).
%
@@ -9846,11 +10475,17 @@
\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}
diff --git a/Master/texmf-dist/source/latex/rubik/rubikcube.ins b/Master/texmf-dist/source/latex/rubik/rubikcube.ins
index 80a62849b26..fd52994a6ad 100644
--- a/Master/texmf-dist/source/latex/rubik/rubikcube.ins
+++ b/Master/texmf-dist/source/latex/rubik/rubikcube.ins
@@ -17,9 +17,9 @@
Authors: RWD Nickalls (dick@nickalls.org)
and Apostolos Syropoulos (asyropoulos@yahoo.com)
- Copyright 03 March 2017 RWD Nickalls and A Syropoulos
+ Copyright February 25, 2018 RWD Nickalls and A Syropoulos
- VERSION 4.0
+ VERSION 5.0
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either
diff --git a/Master/texmf-dist/source/latex/rubik/rubikpatterns.dtx b/Master/texmf-dist/source/latex/rubik/rubikpatterns.dtx
index a6711d471ea..26995cce27e 100644
--- a/Master/texmf-dist/source/latex/rubik/rubikpatterns.dtx
+++ b/Master/texmf-dist/source/latex/rubik/rubikpatterns.dtx
@@ -2,12 +2,12 @@
%
% rubikpatterns.dtx
%
-% version 4.0
+% version 5.0
%
% Authors: RWD Nickalls (dick@nickalls.org)
% and Apostolos Syropoulos (asyropoulos@yahoo.com)
%
-% Copyright 03 March 2017 RWD Nickalls + A Syropoulos
+% Copyright 25 February 2018 RWD Nickalls + A Syropoulos
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
@@ -38,7 +38,8 @@
(Generate rubikpatterns.sty by (La)TeXing rubikpatterns.ins, and then^^J
process rubikpatterns.dtx again)^^J}\stop
}%
-%
+\pagestyle{myheadings}
+\markright{\texttt{rubikpatterns} \ \ (Rubik bundle v5.0, 2018) \ \ \texttt{www.ctan.org/pkg/rubik}}
\usepackage{ifpdf}
\usepackage{url,path} %% for references and paths
\usepackage{graphicx} %% for the two pdf figs
@@ -95,8 +96,7 @@
% \begin{abstract}
% The \rubikpatterns\ package is a small data-base of well-known named
% Rubik patterns and associated rotation sequences, for use in conjunction
-% with the \textsc{rubikcube} and \textsc{rubikrotation} packages. It is part
-% of the Rubik `bundle'.
+% with the other Rubik `bundle' packages.
% \end{abstract}
%
%
@@ -106,25 +106,41 @@
%
% \section{Introduction}
%
-% The \textsc{rubikpatterns} package is a small a data-base of well-known Rubik
-% rotation sequences for use in conjunction with the \textsc{rubikcube}
-% and \textsc{rubikrotation} packages.
-% These sequences, which are well-known and widely available, were sourced from the Rubik-related
+% The \textsc{rubikpatterns} package is a small a data-base of well-known Rubik
+% rotation sequences for use in conjunction with the Rubik bundle packages.
+% These rotation sequences, which are well-known and widely available,
+% were sourced from the Rubik-related
% websites of Reid M and Kociemba H (see References for URLs).
%
%
%
-% \subsection{Installation}
+% \section{Requirements}
+%
+% The \textsc{rubikpatterns} package requires (a)~the TikZ package, since it makes
+% use of the TikZ picture environment, (b)~the \textsc{rubikcube} package, and
+% (c)~the \textsc{rubikrotation} package, since it uses
+% the Perl program \texttt{rubikrotation.pl}.
+% The \verb!TikZ! package must be loaded \textit{before} the \textsc{rubikcube} package.
+% The \textsc{rubikrotation} package requires Perl to be installed.
+%
+%
+%
+% \section{Installation}
+%
+%
+% The Rubik bundle consists of the four packages \textsc{rubikcube}, \textsc{rubikrotation},
+% \textsc{rubikpatterns} and \textsc{rubiktwocube}.
%
-% Place the file \texttt{rubikpatterns.zip} into a temporary directory, and unzip it.
-% This will generate the following files:
+% Here we describe only the installation of the \textsc{rubikpatterns} package,
+% which consists of the following files:
%\begin{quote}
% \begin{verbatim}
% rubikpatterns.ins
% rubikpatterns.dtx
-% rubikpatterns.pdf --this document
+% rubikpatterns.pdf --this document
% rubikpatternsLIST.tex
-% rubikpatternsLIST.pdf
+% rubikpatternsLIST.pdf --a graphic list of all patterns in this package
+% rubikpatterns-doc-figA.pdf
%\end{verbatim}
%\end{quote}
% The package documentation is the file \texttt{rubikpatterns.pdf}.
@@ -153,7 +169,7 @@
%
%
%
-% \subsubsection{Placing the files}
+% \subsection{Placing the files}
% \label{sec:placingfiles}
%
% Place the files either in a working directory, or where your system
@@ -171,6 +187,25 @@
% \TeX\ file database.
% For example, on a Linux platform this is achieved using the \texttt{texhash} command.
%
+%
+% \subsection{The rubikpatternsLIST file}
+%
+
+% Note that the package includes a `rubikpatternsLIST' file (\texttt{rubikpatternsLIST.pdf}),
+% as well as the source file (\texttt{rubikpatternsLIST.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{rubikpatternsLIST.pdf} showcases the Rubik cube
+% patterns made available in this package.
+%
+% Note that should you need to generate the file \texttt{rubikpatternsLIST.pdf}
+% from the source file (\texttt{rubikpatternsLIST.tex}) you will require
+% the \textsc{rubikcube} and \textsc{rubikrotation} 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{Usage}
@@ -261,7 +296,7 @@
%
% \subsection{List of macros}
%
-% The following is a list of the macro names of all the Rubik patterrns supplied by
+% The following is a list of the macro names of all the Rubik patterns supplied by
% the \textsc{rubikpatterns} package. Note that for convenience each macro-name listed
% has an equivalent lower-case version. See the companion file \texttt{rubikpatternsLIST.pdf}
% for a detailed list showing each pattern and its associated
@@ -395,8 +430,8 @@
%
% \begin{macrocode}
%<*rubikpatterns>
-\def\RPfileversion{4.0}%
-\def\RPfiledate{2017/03/03}%
+\def\RPfileversion{5.0}%
+\def\RPfiledate{2018/02/25}% 25 February 2018
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{rubikpatterns}[\RPfiledate\space (v\RPfileversion)]
% \end{macrocode}
@@ -431,93 +466,127 @@ U2,Lp,F2,Rp,U2,Rp,Up,<(20f*)>}%
%
% These named sequences are derived from the Reid website.
% \begin{macrocode}
-\newcommand{\PonsAsinorum}{[PonsAsinorum],F2,B2,R2,L2,U2,D2,<(12q*, 6f*)>}%
+\newcommand{\PonsAsinorum}{[PonsAsinorum],F2,B2,R2,L2,U2,D2,%
+ <(12q*, 6f*)>}%
\newcommand{\ponsasinorum}{\PonsAsinorum}%
\newcommand{\CheckerboardsThree}%
-{[CheckerboardsThree],F,B2,Rp,D2,B,R,U,Dp,R,Lp,Dp,Fp,R2,D,F2,Bp,<(20q*, 16f*), order 3>}%
+ {[CheckerboardsThree],F,B2,Rp,D2,B,R,U,Dp,R,Lp,Dp,Fp,R2,D,F2,Bp,%
+ <(20q*, 16f*), order 3>}%
\newcommand{\checkerboardsthree}{\CheckerboardsThree}%
\newcommand{\CheckerboardsSix}%
-{[CheckerboardsSix],R2,L2,U,B,L2,Dp,F,B2,R,Lp,Fp,B,R,D,F2,Lp,Up,<(17f*, 22q), order 6>}%
+ {[CheckerboardsSix],R2,L2,U,B,L2,Dp,F,B2,R,Lp,Fp,B,R,D,F2,Lp,Up,%
+ <(17f*, 22q), order 6>}%
\newcommand{\checkerboardssix}{\CheckerboardsSix}%
-\newcommand{\Stripes}{[Stripes],F,U,F,R,L2,B,Dp,R,D2,L,Dp,B,R2,L,F,U,F,<(20q*, 17f*)>}%
+\newcommand{\Stripes}{[Stripes],F,U,F,R,L2,B,Dp,R,D2,L,Dp,B,R2,L,F,U,F,%
+ <(20q*, 17f*)>}%
\newcommand{\stripes}{\Stripes}%
-\newcommand{\CubeInCube}{[CubeInCube],F,L,F,Up,R,U,F2,L2,Up,Lp,B,Dp,Bp,L2,U,<(18q*, 15f*)>}%
+\newcommand{\CubeInCube}{[CubeInCube],F,L,F,Up,R,U,F2,L2,Up,Lp,B,Dp,Bp,L2,U,%
+ <(18q*, 15f*)>}%
\newcommand{\cubeincube}{\CubeInCube}%
\newcommand{\CubeInCubeInCube}%
-{[CubeInCubeInCube],Fp,U,Bp,Rp,U,F2,U2,Fp,Up,F,U2,D,Bp,Dp,R2,B2,Up,<(17f*, 22q)>}%
+ {[CubeInCubeInCube],Fp,U,Bp,Rp,U,F2,U2,Fp,Up,F,U2,D,Bp,Dp,R2,B2,Up,%
+ <(17f*, 22q)>}%
\newcommand{\cubeincubeincube}{\CubeInCubeInCube}%
-\newcommand{\ChristmasCross}{[ChristmansCross],U,F,Bp,L2,U2,L2,Fp,B,U2,L2,U,<(16q*, 11f*)>}%
-\newcommand{\christmascross}{\ChristmansCross}%
+\newcommand{\ChristmasCross}{[ChristmasCross],U,F,Bp,L2,U2,L2,Fp,B,U2,L2,U,%
+ <(16q*, 11f*)>}%
+\newcommand{\christmascross}{\ChristmasCross}%
\newcommand{\PlummersCross}%
-{[PlummersCross],R2,Lp,D,F2,Rp,Dp,Rp,L,Up,D,R,D,B2,Rp,U,D2,<(20q*, 16f*)>}%
+ {[PlummersCross],R2,Lp,D,F2,Rp,Dp,Rp,L,Up,D,R,D,B2,Rp,U,D2,%
+ <(20q*, 16f*)>}%
\newcommand{\plummerscross}{\PlummersCross}%
-\newcommand{\Anaconda}{[Anaconda],L,U,Bp,Up,R,Lp,B,Rp,F,Bp,D,R,Dp,Fp,<(14q*, 14f*)>}%
+\newcommand{\Anaconda}{[Anaconda],L,U,Bp,Up,R,Lp,B,Rp,F,Bp,D,R,Dp,Fp,%
+ <(14q*, 14f*)>}%
\newcommand{\anaconda}{\Anaconda}%
-\newcommand{\Python}{[Python],F2,Rp,Bp,U,Rp,L,Fp,L,Fp,B,Dp,R,B,L2,<(16q*, 14f*)>}%
+\newcommand{\Python}{[Python],F2,Rp,Bp,U,Rp,L,Fp,L,Fp,B,Dp,R,B,L2,%
+ <(16q*, 14f*)>}%
\newcommand{\python}{\Python}%
-\newcommand{\BlackMamba}{[BlackMamba],R,D,L,Fp,R,Lp,D,Rp,U,Dp,B,Up,Rp,Dp,<(14q*, 14f*)>}%
+\newcommand{\BlackMamba}{[BlackMamba],R,D,L,Fp,R,Lp,D,Rp,U,Dp,B,Up,Rp,Dp,%
+ <(14q*, 14f*)>}%
\newcommand{\blackmamba}{\BlackMamba}%
-\newcommand{\GreenMamba}{[GreenMamba],R,D,R,F,Rp,Fp,B,D,Rp,Up,Bp,U,D2,<(14q*, 13f*)>}%
+\newcommand{\GreenMamba}{[GreenMamba],R,D,R,F,Rp,Fp,B,D,Rp,Up,Bp,U,D2,%
+ <(14q*, 13f*)>}%
\newcommand{\greenmamba}{\GreenMamba}%
\newcommand{\FemaleRattlesnake}%
-{[FemaleRattlesnake],U2,Dp,L2,D,B,U,Bp,Rp,L2,U2,F,Up,F,R,<(18q*, 14f*)>}%
+ {[FemaleRattlesnake],U2,Dp,L2,D,B,U,Bp,Rp,L2,U2,F,Up,F,R,%
+ <(18q*, 14f*)>}%
\newcommand{\femalerattlesnake}{\FemaleRattlesnake}%
\newcommand{\MaleRattlesnake}%
-{[MaleRattlesnake],Rp,Fp,U,Fp,U2,R,L2,B,Up,Bp,Dp,L2,U2,D,<(18q*, 14f*)>}%
+ {[MaleRattlesnake],Rp,Fp,U,Fp,U2,R,L2,B,Up,Bp,Dp,L2,U2,D,%
+ <(18q*, 14f*)>}%
\newcommand{\malerattlesnake}{\MaleRattlesnake}%
-\newcommand{\FemaleBoa}{[FemaleBoa],R,Up,R2,U2,F,D2,R2,Up,Dp,R,Dp,Fp,<(16q*, 12f*)>}%
+\newcommand{\FemaleBoa}{[FemaleBoa],R,Up,R2,U2,F,D2,R2,Up,Dp,R,Dp,Fp,%
+ <(16q*, 12f*)>}%
\newcommand{\femaleboa}{\FemaleBoa}%
-\newcommand{\MaleBoa}{[MaleBoa],F,D,Rp,U,D,R2,D2,Fp,U2,R2,U,Rp,<(16q*, 12f*)>}%
+\newcommand{\MaleBoa}{[MaleBoa],F,D,Rp,U,D,R2,D2,Fp,U2,R2,U,Rp,%
+ <(16q*, 12f*)>}%
\newcommand{\maleboa}{\MaleBoa}%
-\newcommand{\FourSpot}{[FourSpot],F2,B2,U,Dp,R2,L2,U,Dp,<(12q*, 8f*)>}%
+\newcommand{\FourSpot}{[FourSpot],F2,B2,U,Dp,R2,L2,U,Dp,%
+ <(12q*, 8f*)>}%
\newcommand{\fourspot}{\FourSpot}%
-\newcommand{\SixSpot}{[SixSpot],U,Dp,R,Lp,F,Bp,U,Dp,<(8q*, 8f*)>}%
+\newcommand{\SixSpot}{[SixSpot],U,Dp,R,Lp,F,Bp,U,Dp,%
+ <(8q*, 8f*)>}%
\newcommand{\sixspot}{\SixSpot}%
\newcommand{\OrthogonalBars}%
-{[OrthogonalBars],F,Rp,U,L,Fp,Lp,F,Up,R,U,Lp,Up,L,Fp,<(14q*, 14f*)>}%
+ {[OrthogonalBars],F,Rp,U,L,Fp,Lp,F,Up,R,U,Lp,Up,L,Fp,%
+ <(14q*, 14f*)>}%
\newcommand{\orthogonalbars}{\OrthogonalBars}%
-\newcommand{\SixTs}{[SixTs],F2,R2,U2,Fp,B,D2,L2,F,B,<(14q*, 9f*)>}%
+\newcommand{\SixTs}{[SixTs],F2,R2,U2,Fp,B,D2,L2,F,B,%
+ <(14q*, 9f*)>}%
\newcommand{\sixts}{\SixTs}%
-\newcommand{\SixTwoOne}{[SixTwoOne],U,B2,D2,L,Bp,Lp,Up,Lp,B,D2,B2,<(15q*, 11f*)>}%
+\newcommand{\SixTwoOne}{[SixTwoOne],U,B2,D2,L,Bp,Lp,Up,Lp,B,D2,B2,%
+ <(15q*, 11f*)>}%
\newcommand{\sixtwoone}{\SixTwoOne}%
\newcommand{\ExchangedPeaks}%
-{[ExchangedPeaks],F2,R2,D,R2,U,D,F2,Dp,Rp,Dp,F,L2,Fp,D,R,Up,<(16f*, 21q)>}%
+ {[ExchangedPeaks],F2,R2,D,R2,U,D,F2,Dp,Rp,Dp,F,L2,Fp,D,R,Up,%
+ <(16f*, 21q)>}%
\newcommand{\exchangedpeaks}{\ExchangedPeaks}%
\newcommand{\TwoTwistedPeaks}%
-{[TwoTwistedPeaks],F,D2,B,R,Bp,Lp,F,Dp,L2,F2,R,Fp,Rp,F2,Lp,Fp,<(16f*, 20q)>}%
+ {[TwoTwistedPeaks],F,D2,B,R,Bp,Lp,F,Dp,L2,F2,R,Fp,Rp,F2,Lp,Fp,%
+ <(16f*, 20q)>}%
\newcommand{\twotwistedpeaks}{\TwoTwistedPeaks}%
\newcommand{\FourTwistedPeaks}%
-{[FourTwistedPeaks],Up,D,B,Rp,F,R,Bp,Lp,Fp,B,L,F,Rp,Bp,R,Fp,Up,D,<(18q*, 18f*)>}%
+ {[FourTwistedPeaks],Up,D,B,Rp,F,R,Bp,Lp,Fp,B,L,F,Rp,Bp,R,Fp,Up,D,%
+ <(18q*, 18f*)>}%
\newcommand{\fourtwistedpeaks}{\FourTwistedPeaks}%
\newcommand{\ExchangedChickenFeet}%
-{[ExchangedChickenFeet],F,Lp,Dp,Bp,L,F,U,Fp,Dp,F,L2,Bp,Rp,U,L2,Dp,F,<(19q*, 17f*)>}%
+ {[ExchangedChickenFeet],F,Lp,Dp,Bp,L,F,U,Fp,Dp,F,L2,Bp,Rp,U,L2,Dp,F,%
+ <(19q*, 17f*)>}%
\newcommand{\exchangedchickenfeet}{\ExchangedChickenFeet}%
\newcommand{\TwistedChickenFeet}%
-{[TwistedChickenFeet],F,Lp,D,Fp,Up,B,U,F,Up,F,Rp,F2,L,Up,Rp,D2,<(18q*, 16f*)>}%
+ {[TwistedChickenFeet],F,Lp,D,Fp,Up,B,U,F,Up,F,Rp,F2,L,Up,Rp,D2,%
+ <(18q*, 16f*)>}%
\newcommand{\twistedchickenfeet}{\TwistedChickenFeet}%
\newcommand{\ExchangedRings}%
-{[ExchangedRings],F,U,Dp,Lp,B2,L,Up,D,F,U,R2,L2,Up,L2,F2,<(15f*, 20q)>}%
+ {[ExchangedRings],F,U,Dp,Lp,B2,L,Up,D,F,U,R2,L2,Up,L2,F2,%
+ <(15f*, 20q)>}%
\newcommand{\exchangedrings}{\ExchangedRings}%
\newcommand{\TwistedRings}%
-{[TwistedRings],F,D,Fp,D2,Lp,Bp,U,L,D,R,U,Lp,Fp,U,L,U2,<(18q*, 16f*)>}%
+ {[TwistedRings],F,D,Fp,D2,Lp,Bp,U,L,D,R,U,Lp,Fp,U,L,U2,%
+ <(18q*, 16f*)>}%
\newcommand{\twistedrings}{\TwistedRings}%
\newcommand{\EdgeHexagonTwo}%
-{[EdgeHexagonTwo],U,B2,Up,Fp,Up,D,Lp,D2,L,U,Dp,F,Dp,L2,B2,Dp,<(20q*, 16f*) order2>}%
+ {[EdgeHexagonTwo],U,B2,Up,Fp,Up,D,Lp,D2,L,U,Dp,F,Dp,L2,B2,Dp,%
+ <(20q*, 16f*) order2>}%
\newcommand{\edgehexagontwo}{\EdgeHexagonTwo}%
\newcommand{\EdgeHexagonThree}%
-{[EdgeHexagonThree],F,L,B,U,L,F2,B2,Rp,F2,B2,Up,Bp,Lp,Fp,<(14f*, 18q) order 3>}%
+ {[EdgeHexagonThree],F,L,B,U,L,F2,B2,Rp,F2,B2,Up,Bp,Lp,Fp,%
+ <(14f*, 18q) order 3>}%
\newcommand{\edgehexagonthree}{\EdgeHexagonThree}%
\newcommand{\TomParksPattern}%
-{[TomParksPattern],L,U,F2,R,Lp,U2,Bp,U,D,B2,L,F,Bp,Rp,L,Fp,R,<(20q*, 17f*)>}%
+ {[TomParksPattern],L,U,F2,R,Lp,U2,Bp,U,D,B2,L,F,Bp,Rp,L,Fp,R,%
+ <(20q*, 17f*)>}%
\newcommand{\tomparkspattern}{\TomParksPattern}%
\newcommand{\RonsCubeInCube}%
-{[RonsCubeInCube],L2,D2,Lp,D2,B2,L2,B2,Lp,D2,L2,B2,Lp,B2,<(13f*, 23q)>}%
+ {[RonsCubeInCube],L2,D2,Lp,D2,B2,L2,B2,Lp,D2,L2,B2,Lp,B2,%
+ <(13f*, 23q)>}%
\newcommand{\ronscubeincube}{\RonsCubeInCube}%
\newcommand{\TwistedDuckFeet}%
-{[TwistedDuckFeet],F,Rp,B,R,U,Fp,Lp,Fp,U2,Lp,Up,D2,B,Dp,F,Bp,U2,<(20q*, 17f*)>}%
+ {[TwistedDuckFeet],F,Rp,B,R,U,Fp,Lp,Fp,U2,Lp,Up,D2,B,Dp,F,Bp,U2,%
+ <(20q*, 17f*)>}%
\newcommand{\twistedduckfeet}{\TwistedDuckFeet}%
\newcommand{\ExchangedDuckFeet}%
-{[ExchangedDuckFeet],U,F,R2,Fp,Dp,R,U,B2,U2,Fp,R2,F,D,B2,R,Bp,<(21q*, 16f*)>}%
+ {[ExchangedDuckFeet],U,F,R2,Fp,Dp,R,U,B2,U2,Fp,R2,F,D,B2,R,Bp,%
+ <(21q*, 16f*)>}%
\newcommand{\exchangedduckfeet}{\ExchangedDuckFeet}%
% \end{macrocode}
% --------------------------
diff --git a/Master/texmf-dist/source/latex/rubik/rubikpatterns.ins b/Master/texmf-dist/source/latex/rubik/rubikpatterns.ins
index 9260827909b..d5ebcf3e602 100644
--- a/Master/texmf-dist/source/latex/rubik/rubikpatterns.ins
+++ b/Master/texmf-dist/source/latex/rubik/rubikpatterns.ins
@@ -1,6 +1,5 @@
%% rubikpatterns.ins
%%
-%% version 4.0
%%
%% --- automatic overwriting of .sty is disabled-------
%% =========================================================
@@ -16,9 +15,9 @@
Authors: RWD Nickalls (dick@nickalls.org)
and Apostolos Syropoulos (asyropoulos@yahoo.com)
- Copyright March 03, 2017 RWD Nickalls and A Syropoulos
+ Copyright February 25, 2018 RWD Nickalls and A Syropoulos
- VERSION 4.0
+ VERSION 5.0
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either
diff --git a/Master/texmf-dist/source/latex/rubik/rubikrotation.dtx b/Master/texmf-dist/source/latex/rubik/rubikrotation.dtx
index 2b554ef7128..33103cfc54b 100644
--- a/Master/texmf-dist/source/latex/rubik/rubikrotation.dtx
+++ b/Master/texmf-dist/source/latex/rubik/rubikrotation.dtx
@@ -1,12 +1,13 @@
% \iffalse meta-comment
% rubikrotation.dtx
%
-% version 4.0
+% version 5.0
+%
%
% Authors: RWD Nickalls (dick@nickalls.org)
% and Apostolos Syropoulos (asyropoulos@yahoo.com)
-
-% Copyright 03 March 2017 RWD Nickalls + A Syropoulos
+%
+% Copyright 25 February 2018 RWD Nickalls + A Syropoulos
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
@@ -37,6 +38,8 @@
(Generate rubikrotation.sty by (La)TeXing rubikrotation.ins, and then^^J
process rubikrotation.dtx again)^^J}\stop
}%
+\pagestyle{myheadings}
+\markright{\texttt{rubikrotation} \ \ (Rubik bundle v5.0, 2018) \ \ \texttt{www.ctan.org/pkg/rubik}}
\usepackage{ifpdf}
\usepackage{url,path} %% for references and paths
\usepackage{graphicx} %% for the two pdf figs
@@ -58,7 +61,7 @@
%
%
%
-%%% \CheckSum{322}
+%%% \CheckSum{332}
%
%%% \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
@@ -98,7 +101,7 @@
% \texttt{rubikrotation.pl}), and returns the new Rubik cube state (configuration).
% The \rubikrotation\ package also provides commands for saving the cube state
% to a file (\cmd{\SaveRubikState}), and for displaying any
-% errors (\cmd{\ShowRubikErrors}).
+% errors (\cmd{\ShowErrors}).
% \end{abstract}
%
%
@@ -119,7 +122,8 @@
%
% \section{Introduction}
%
-% The \rubikrotation\ package is a dynamic extension to the \textsc{rubikcube} package.
+% The \rubikrotation\ package is a dynamic extension to the \textsc{rubikcube}
+% and \textsc{rubiktwocube} packages.
% It consists of a style option (\texttt{rubikrotation.sty}), a
% Perl script (\texttt{rubikrotation.pl}).
%
@@ -135,22 +139,23 @@
% (\texttt{http://strawberryperl.com}) is a free Perl
% environment for MS Windows, designed to be as close as possible to the Perl
% environment of Unix/Linux systems.}), on a Linux platform (Debian v8.2.0,
-% {\TeX}Live 2016, and Perl v5.20.2), and on a Solaris platform (OpenIndiana).
+% {\TeX}Live 2017, and Perl v5.20.2), and on a Solaris platform (OpenIndiana).
%
% The following commands are made available by \texttt{rubikrotation.sty}:
% \begin{quote}
% \begin{verbatim}
% \RubikRotation[]{}
% \SaveRubikState
-% \CheckRubikState
-% \ShowRubikErrors
+% \CheckState
+% \ShowErrors
% \SequenceName
% \SequenceInfo
% \SequenceShort
% \SequenceLong
%\end{verbatim}
% \end{quote}
-%
+% Note that the \textsc{rubiktwocube} package makes available the (equivalent)
+% \verb!\TwoRotation[]{}! and \verb!\SaveTwoState! commands.
%
% \section{Requirements}
%
@@ -209,8 +214,9 @@
% \label{sec:placingfiles}
%
% Place the files either in a working directory, or where your system
-% will find them, e.g.,~in your \texttt{/texmf-local/} directory tree.
-% For example, on a Linux platform with a standard \TeX\ Directory Structure (TDS), then:
+% will find them, e.g.,~in the `\textsc{path}'. The \texttt{/texmf-local/} directory tree
+% is often a good place; for example, on a Linux platform with a
+% standard \TeX\ Directory Structure (TDS), then:
%
%\medskip
%{\noindent}*.sty $\rightarrow$ \texttt{/usr/local/texlive/texmf-local/tex/latex/rubik/}
@@ -222,8 +228,8 @@
%{\noindent}\textsc{perl script}:\ \ Make the perl script executable
% (\texttt{chmod +x rubikrotation.pl}), and then
% rename the file as `rubikrotation' (i.e.,~with no file extension), and then place
-% the executable script into your current TeXLive binary directory,
-% e.g.,~\path!/user/local/texlive/YYYY/bin/i386-linux!.
+% the executable script in the `\textsc{path}', or possibly, directly into your
+% {\TeX}Live binary directory, e.g.,~\path!/user/local/texlive/YYYY/bin/i386-linux!.
%
% Sometimes the setting up of a simple one or two-line plain-text
% configuration-file may be useful or even necessary, depending on your system
@@ -232,14 +238,17 @@
% file is named \texttt{rubikrotation.cfg}.
%
%\medskip
-%{\noindent}\textsc{the `man' file}:\ \ On a Linux platform this manual file
-% (\texttt{rubikrotation.1}) would be typically located in the
-% directory \verb!/usr/share/man/man1!.
+%{\noindent}\textsc{the `man' file}:\ \ On a Linux platform the manual file
+% (\texttt{rubikrotation.1}) is typically located in
+% either \verb!/usr/local/man/man1! or \verb!/usr/local/share/man/man1!.
+% \TeX{Live} typically places such files in the directory
+% \verb!/texmf-dist/doc/man/man1!.
%
%\medskip
%{\noindent}\textsc{file database}:\ \ Finally, (depending on your system) update the
% \TeX\ file database.
-% For example, on a Linux platform this is achieved using the \texttt{texhash} command.
+% For example, on a Linux platform this is achieved using the \texttt{texhash} command,
+% or by using the {\TeX}Live Manager (\texttt{tlmgr}).
%
%\medskip
%{\noindent}\textsc{quick test}:\ \ To test that your system can now run the perl
@@ -251,12 +260,13 @@
%\end{quote}
% which should generate something like the following:
% \begin{verbatim}
-% This is rubikrotation version 4.0
+% This is rubikrotation version ...
% Usage: rubikrotation [-h] -i <input file> [-o <out file>]
% where,
-% [-h] gives this help listing
-% [-i] creates specified input file
-% [-o] creates specified output file
+% [-h|--help] gives this help listing
+% [-v|--version] gives version
+% [-i] creates specified input file
+% [-o] creates specified output file
% For documentation see: rubikrotation.pdf,
% rubikrotationPL.pdf and rubikcube.pdf
%\end{verbatim}
@@ -265,13 +275,15 @@
% \section{Usage}
% \label{sec:usage}
% Load the packages \texttt{rubikcube.sty},
-% \texttt{rubikrotation.sty} and \texttt{rubikpatterns.sty} in the \TeX\ file
+% \texttt{rubikrotation.sty}, \texttt{rubikpatterns.sty}
+% and \texttt{rubiktwocube.sty} in the \TeX\ file
% preamble \textit{after} loading the TikZ package (all the Rubik packages
-% require the TikZ package); for example, as follows:
+% require the TikZ package). Load the \texttt{rubikcube.sty} \textit{before} the other
+% Rubik bundle packages; for example, as follows:
%\begin{quote}
% \begin{verbatim}
% \usepackage{tikz}
-% \usepackage{rubikcube,rubikrotation,rubikpatterns}
+% \usepackage{rubikcube,rubikrotation,rubikpatterns,rubiktwocube}
%\end{verbatim}
%\end{quote}
% and run (pdf)\LaTeX\ using the \texttt{--shell-escape} command-line option
@@ -319,6 +331,26 @@
% \subsection{Configuration-file}
% \label{sec:configfile}
%
+% It is important to realise that the default action of \texttt{rubikrotation.sty} is to
+% access the Perl script as an executable file. This is because the~default definitions
+% in \texttt{rubikrotation.sty} are as follows: (they are detailed in
+% Section~\ref{sec:usefulcommands})
+%\begin{quote}
+%\begin{verbatim}
+% \newcommand{\rubikperlname}{rubikrotation}
+% \newcommand{\rubikperlcmd}{\rubikperlname\space%
+% -i rubikstate.dat -o rubikstateNEW.dat}
+%\end{verbatim}
+%\end{quote}
+% Note the need here (in the second macro) to use \cmd{\space} on the end of
+% (\cmd{\rubikperlname}) in order to force a following
+% space---i.e.,~before the first command-line argument.
+%
+% If the Perl script has not been made executable, or if you wish to alter how
+% the \textsc{rubikrotation} package accesses the Perl script,
+% then you need to create a plain-text configuration file in order to redefine one
+% or both of the above commands, as described below.
+%
% A plain-text configuration-file with the name \texttt{rubikrotation.cfg}
% (if one exists) will automatically be read by \texttt{rubikrotation.sty}.
% The \rubikrotation\ package's facility to use a configuration-file allows the
@@ -332,37 +364,24 @@
% Such~a configuration-file can also facilitate testing a new Perl script having
% a different name and location.
%
-%
% \DescribeMacro{\rubikperlname}
% \DescribeMacro{\rubikperlcmd}
% The configuration-file is essentially a convenient software vehicle for feeding
% additional \LaTeX\ code to the style option \texttt{rubikrotation.sty}, and hence
% allows the contents of some commands to be easily adjusted and/or fine-tuned.
-% For~the \rubikrotation\ package there are two particular macros we may wish to adjust.
+% For~the \rubikrotation\ package there are two particular macros we may wish to adjust
+% (see above).
% The~first is that holding the filename of the Perl script, namely
% \cmd{\rubikperlname}. The second is that holding the command-line call,
% namely \cmd{\rubikperlcmd}.
-% The~default definitions in \texttt{rubikrotation.sty} (which assume the Perl
-% script is executable), are as follows: (they are detailed in
-% Section~\ref{sec:usefulcommands})
-%\begin{quote}
-%\begin{verbatim}
-% \newcommand{\rubikperlname}{rubikrotation}
-% \newcommand{\rubikperlcmd}{\rubikperlname\space%
-% -i rubikstate.dat -o rubikstateNEW.dat}
-%\end{verbatim}
-%\end{quote}
-% Note the need here (in the second macro) to use \cmd{\space} on the end of
-% (\cmd{\rubikperlname}) in order to force a following
-% space---i.e.,~before the first command-line argument. The following examples
-% illustrate how the configuration-file may be used.
+% The following examples illustrate how the configuration-file may be used.
%
% \medskip
% {\noindent}\textsc{example~1}:\ \ Suppose we wish to test out
% a slightly modified Perl script
% with the working (executable) name \texttt{rubikrotationR77}. In this case we
% simply create, in the local working directory, a plain-text configuration-file
-% (it \textit{must} be named exactly \texttt{rubikrotation.cfg}) and contains just
+% (it \textit{must} be named exactly \texttt{rubikrotation.cfg}) containing just
% the following line:
%\begin{quote}
%\begin{verbatim}
@@ -387,7 +406,7 @@
%\end{quote}
%{\noindent}Remember to make sure the PATH associated with the command is also correct.
%
-%
+% \medskip
%{\noindent\textsc{placing the configuration-file}:\ \ The simplest arrangement is
% just to include the \texttt{.cfg} file in the working directory.
% Alternatively, the \texttt{.cfg} file could be placed in the \texttt{/texmf-local/}
@@ -410,8 +429,8 @@
% the \textsc{rubikcube} package), although most commands can be placed
% inside a TikZ environment if you wish.
%
-% However, using commands which influence the Rubik colour state
-% (e.g.,~the \cmd{\RubikRotation} command) outside the \texttt{tikzpicture},
+% Using commands which influence the Rubik colour state
+% (e.g.,~\cmd{\RubikFace..}, \cmd{\RubikCubeSolvedWY} etc.) outside the \texttt{tikzpicture},
% \texttt{minipage} or \texttt{figure} environments
% generally offers maximum flexibility, since the effects of such commands when
% used inside these environments remain `local' to the environment, and are not
@@ -419,7 +438,7 @@
% (see also Section~4.1 in the \textsc{rubikcube} documentation).
%
% Conversely, the only \rubikrotation\ command which should \textit{not}
-% be used inside a TikZ environment is the \cmd{\ShowRubikErrors} command
+% be used inside a TikZ environment is the \cmd{\ShowErrors} command
% (see the notes on this command below).
%
%
@@ -432,7 +451,9 @@
% The \cmd{\RubikRotation}\oarg{integer}\marg{comma-separated sequence}
% command processes a sequence of rotation codes, and returns
% the final state. The inverse sequence can also be
-% implemented (see \textbf{Inverse} below).
+% implemented (see \textbf{Inverse} below). Note that the equivalent \cmd{\TwoRotation}
+% command (see the \textsc{rubiktwocube} package) behaves in the same way as the
+% \cmd{\RubikRotation} command in all respects.
%
%
% The first (optional) argument \oarg{integer} of the \cmd{\RubikRotation} command is the number
@@ -646,7 +667,7 @@
% \label{sec:seq-as-macros}
%
% Macros which are arguments of the \TeX\ \cmd{\write} command are expanded
-% on writing (Eijkhout 1992, \S\,30.2.3, p.\,238)[\,see refs Section~\ref{sec:references}\,].
+% on writing (Eijkhout 1992, \S\,30.2.3, p.\,238)[\,see references Section~\ref{sec:references}\,].
% Consequently we are able to use a sequence-defining macro as an argument for
% the \cmd{\RubikRotation} command. In fact this is very convenient, since it allows
% one to store lots of different rotation sequences by name alone. Note that
@@ -656,7 +677,7 @@
% For example, by installing the \textsc{rubikpatterns} package we are able to use the
% name `sixspot' for a macro denoting the rotation sequence
% which generates the well known `sixspot' configuration (see the `patterns' page on the
-% Reid website)[\,see refs Section~\ref{sec:references}\,]. The `sixspot' sequence is
+% Reid website)[\,see references Section~\ref{sec:references}\,]. The `sixspot' sequence is
% defined as follows:
%\begin{quote}
% \begin{verbatim}
@@ -790,10 +811,9 @@
%
% The \cmd{\RubikRotation} command can also be used to scramble the
% cube using a random sequence of rotations. If the first argument
-% is the lower-case word `random' \textsc{and} the second argument
+% is the word `random' \textsc{and} the second argument
% is an integer $n$, ($1\leq n \leq 200$), then a random sequence
-% of $n$ rotations will be performed; otherwise a default value
-% of 50 is used (for example, if the second argument is not an integer).
+% of $n$ rotations will be performed.
% If $n > 200$ then the currently set maximum value $n=200$ will be used.
%
% As a safety feature the maximum $n$ can be changed only by editing the
@@ -887,46 +907,54 @@
%\end{quote}
%
%
-% \subsection[CheckRubikState]{\cmd{\CheckRubikState} command}
+% \subsection[CheckState]{\cmd{\CheckState} command}
+% \label{sec:checkstate}
%
-% \DescribeMacro{\CheckRubikState}
+% \DescribeMacro{\CheckState}
% Since it is easy to inadvertently define an invalid Rubik cube
% (e.g.,~enter an invalid number of, say, yellow facelets), this command
% simply checks the current colour state of all the cubies
% of a 3x3x3 Rubik cube, and shows the number of facelets of each colour.
-% An ERROR: code is issued if the number of facelets having a given colour exceeds~6.
-% The results are written to the the \texttt{.log} file, and displayed under
-% the graphic if the \cmd{\ShowRubikErrors} command is used.
+% An ERROR: code is issued if the number of facelets having a given colour
+% exceeds~9 for a 3x3x3 cube (Rubik cube), or exceeds 4 for a 2x2x2 cube (Two cube).
+% The results are written to the the \texttt{.log} file, and displayed at the point
+% the \cmd{\ShowErrors} command is used (for code see Section~\ref{sec:checkstatecode}).
%
% One can check the current Rubik state (for errors) by issuing the command
%\begin{quote}
%\begin{verbatim}
-% \CheckRubikState%
+% \CheckState%
%\end{verbatim}
%\end{quote}
-% Note (1)~that such a check is implemented automatically with each \cmd{\RubikRotation}
-% command, and (2)~this is actually only a very superficial check---simply counting the number
+% Note (1)~that such a check is implemented automatically with each \cmd{\RubikRotation} and
+% \cmd{\TwoRotation} command, and (2)~and makes only a very superficial check---simply counting the number
% of cubies of each colour.
%
+% Note that the \cmd{\CheckState} command replaces the earlier \cmd{\CheckRubikState}, but
+% we retain the old command for backwards compatibility (for the moment).
%
%
+% \subsection[ShowErrors]{\cmd{\ShowErrors} command}
+% \label{sec:showerrors}
%
-% \subsection[ShowRubikErrors]{\cmd{\ShowRubikErrors} command}
%
-% \DescribeMacro{\ShowRubikErrors}
+% \DescribeMacro{\ShowErrors}
% Any errors which arise can be made visible using the
-% command \cmd{\ShowRubikErrors}.
+% command \cmd{\ShowErrors}.
% This command places a copy of the `error' file (\texttt{rubikstateERRORS.dat})
-% underneath the graphic image so you can see any errors if there are any---all this
-% detail can also be found in the \texttt{.log} file.
+% underneath the graphic image so you can see any errors if there are any (note that
+% details of all errors are are written by default to the \texttt{.log} file)
+% (for code see Section~\ref{sec:showerrorscode}).
%
-% Consequently, this command must be placed \textit{after} a TikZ picture
+% Consequently, the \cmd{\ShowErrors} command must be placed \textit{after} a TikZ picture
% environment---it cannot be used inside a TikZ environment. In fact this command
-% is probably best placed at the end of the document (if there are several such
-% environments), where it will reveal all rotation errors generated while
-% processing the whole document.
+% is probably best placed at the end of the document where it will reveal all
+% rotation errors generated while processing the whole document.
% Once the document is free of errors this command can be removed or just commented out.
-% Run the test file \texttt{example-rot.tex} to see an example of the use of this command.
+% The file \texttt{rubikexamples.pdf} shows an example of the use of this command.
+%
+% Note that the \cmd{\ShowErrors} command replaces the original \cmd{\ShowRubikErrors} command,
+% which will be retained for backward compatibility.
%
%
% \section{Files generated}
@@ -945,7 +973,7 @@
% \item The Perl script \texttt{rubikrotation.pl} also writes error data
% to the file \texttt{rubikstateERRORS.dat}. A copy of this file is displayed
% under the graphic image when the command
-% \cmd{\ShowRubikErrors} is used after the TikZ picture environment.
+% \cmd{\ShowErrors} is used after the TikZ picture environment.
%
% \end{itemize}
%
@@ -954,7 +982,7 @@
% \label{generaloverview}
%
% When \LaTeX\ processes \texttt{rubikrotation.sty} the following steps
-% are implemented.
+% are implemented (see Section~\ref{sec:thecode}):
% \begin{itemize}
%
% \item[1.] A check is made to see if \texttt{fancyvrb.sty} is loaded: if not
@@ -974,7 +1002,8 @@
% \end{itemize}
%
%
-% When a \cmd{\RubikRotation} command is processed it first writes the current
+% When a \cmd{\RubikRotation} command is processed
+% (see Section~\ref{sec:rubikrotationcode}, line~102), it first writes the current
% colour configuration of each face (the `rubik state') to the temporary file
% \texttt{rubikstate.dat} (this will be read by the Perl script \texttt{rubikrotation.pl}).
% The \cmd{\RubikRotation} command also appends the keyword `\texttt{checkrubik}'
@@ -987,6 +1016,7 @@
%\begin{quote}
% \begin{verbatim}
% % filename: rubikstate.dat
+% cubesize,three
% up,W,W,W,W,W,W,W,W,W
% down,Y,Y,Y,Y,Y,Y,Y,Y,Y
% left,B,B,B,B,B,B,B,B,B
@@ -1007,6 +1037,7 @@
%\begin{quote}
% \begin{verbatim}
% % filename: rubikstate.dat
+% cubesize,three
% up,W,W,W,W,W,W,W,W,W
% down,Y,Y,Y,Y,Y,Y,Y,Y,Y
% left,B,B,B,B,B,B,B,B,B
@@ -1017,13 +1048,13 @@
% rotation,random,45
%\end{verbatim}
%\end{quote}
-% A \cmd{\CheckRubikState} command triggers the same sequence of events except
+% A \cmd{\CheckState} command triggers the same sequence of events except
% that no ``\texttt{rotation,....}'' line is written.
%
% The action of the Perl script \texttt{rubikrotation.pl} is controlled by
% the keywords (first argument of
% each line) associated with each line of the file \texttt{rubikstate.dat}.
-% When control passes to Perl, the script \texttt{rubikrotation.pl} starts
+% When control passes from \LaTeX\ to Perl, the script \texttt{rubikrotation.pl} starts
% by loading the current rubikstate (prompted by the keywords `\texttt{up}', `\texttt{down}',
% `\texttt{left}', `\texttt{right}', `\texttt{front}', `\texttt{back}'), and performing
% a syntax check---significant syntax errors at this stage
@@ -1036,21 +1067,29 @@
% then the Perl script performs a sequence of $n$ random rotations.
% Finally, the Perl script writes the final rubikstate to the text file
% \texttt{rubikstateNEW.dat}. All error messages are written to the
-% text file \texttt{rubikstateERRORS.dat} and also to the \LaTeX\ log-file.
+% text file \texttt{rubikstateERRORS.dat} and also to the \LaTeX\ log-file.
+% The Perl script now closes all open files and terminates.
%
-% Control then reverts to \LaTeX\ which then inputs the file
+% Control then passes back to \LaTeX\ (still in \texttt{rubikrotation.sty} processing
+% the \cmd{\RubikRotation} command---see Section~\ref{sec:rubikrotationcode}, line~115);
+% its next action is to input the file
% \texttt{rubikstateNEW.dat}. If there are more \cmd{\RubikRotation} commands
% (in the \texttt{.tex} file) then this cycle repeats accordingly.
% Eventually a \cmd{\Draw...} command is reached (in the \texttt{.tex} file) and
% the final rubikstate is drawn in a TikZ picture environment.
%
-% If the TikZ picture environment is followed by a \cmd{\ShowRubikErrors} command,
+% If the TikZ picture environment is followed by a \cmd{\ShowErrors} command,
% then a `verbatim' copy of the \texttt{rubikstateERRORS.dat} file is displayed
% immediately under the graphic. Once the graphic is error-free, then the
-% \cmd{\ShowRubikErrors} command can be removed or commented out.
+% \cmd{\ShowErrors} command can be removed or commented out.
+%
+% Alternatively, when processing a long document, it can be useful to place
+% a \cmd{\ShowErrors} command at the end of the document, where it will list
+% all errors which occurred. Once any errors have been fixed, this command can be
+% removed or commented out.
%
% Note that if a \textsc{bash} file is used to coordinate the process then it is often
-% convenient to use the linux \texttt{grep} utility to alert the user to any run-time errors,
+% convenient to use the Linux \texttt{grep} utility to alert the user to any run-time errors,
% by using \texttt{grep} to scan the \texttt{rubikstateERRORS.dat} file at the end of
% the run; for example, as follows:
%\begin{quote}
@@ -1062,53 +1101,37 @@
%\end{quote}
%
%
-% \section{References}
-% \label{sec:references}
-%
-%\begin{itemize}
-%
-% \item Abrahams PW, Berry K and Hargreaves KA (1990). \textit{\TeX\ for the impatient}
-% (Addison-Wesley Publishing Company), page~292.
-% {\newline}Available from: \url{http://www.ctan.org/pkg/impatient}
-% {\newline}[\,re:~\cmd{\rubikpercentchar} and \cmd{\@comment} in Section~\ref{sec:abrahams}\,]
-%
-%
-% \item Eijkhout V (1992). \textit{\TeX\ by topic: a {\TeX}nician's reference}.
-% (Addison-Wesley Publishing Company), pages~232 \&~238.
-% {\newline}Available from: \url{https://bitbucket.org/VictorEijkhout/tex-by-topic/}
-% [\,re:~\cmd{\string} in Section~\ref{sec:eijkhout}\,]
-% [\,re:~\cmd{\write} in Section~\ref{sec:seq-as-macros}\,]
%
%
-% \item Feuers\"{a}nger C (2015). Notes on programming in \TeX.
-% {\newline}(revision: 1.12.1-32-gc90572c; 2015/07/29)
-% \newline\url{http://pgfplots.sourceforge.net/TeX-programming-notes.pdf}
-% {\newline}[\,re:~loop macros in Section~\ref{sec:feuersanger}\,]
-%
-% \item Kociemba website (Kociemba H). \url{http://www.kociemba.org/cube.htm}
-%
-% \item Nickalls RWD and Syropoulos A (2015). The \textsc{rubikcube} package, v3.0.
-% \newline\url{http://www.ctan.org/pkg/rubik},
-%
-%
-% \item Randelshofer website (Randelshofer W). \url{http://www.randelshofer.ch/rubik/}
-% \ [\,re:~sequences and supersetENG notation\,]
-%
+% \section{Change history}
%
-% \item Reid website (Reid M). \ Patterns. \url{http://www.cflmath.com/Rubik/patterns.html}
-% \ [\,re:~sequences as macros; in Section~\ref{sec:seq-as-macros}\,]
+% \begin{itemize}
%
+% \item Version 5.0 (February 2018)
%
-% \item Tellechea C and Segletes SB (2016). The \textsf{listofitems} package, v1.2
-% \newline\url{http://www.ctan.org/pkg/listofitems}
-%\end{itemize}
+% --- minor bugfixes and better syntax checking in the Perl program.
+% The cube size being processed (ie 3x3x3 or 2x2x2) is now detected by the program.
+%
+% --- the command \cmd{\CheckState} replaces the earlier
+% \cmd{\CheckRubikState} command in order
+% to avoid confusion, now that we are able to process both the 3x3x3 cube (Rubik cube)
+% and also the 2x2x2 cube (Two cube)
+% (see Sections~\ref{sec:checkstate} and \ref{sec:checkstatecode} (code)).
+% The original command is retained (for now) for backward compatibility.
+% \verb!\CheckRubikState! $\rightarrow$ \verb!\CheckState!
+%
+% --- the command \cmd{\ShowErrors} replaces the earlier
+% \cmd{\ShowRubikErrors} command in order
+% to avoid confusion now, that we are able to process both the 3x3x3 cube (Rubik cube)
+% and also the 2x2x2 cube (Two cube)
+% (see Sections~\ref{sec:showerrors} and \ref{sec:showerrorscode} (code)).
+% The original command is retained (for now) for
+% backward compatibility. \verb!\ShowRubikErrors! $\rightarrow$ \verb!\ShowErrors!
+%
+%
%
%
%
-% \section{Change history}
-%
-% \begin{itemize}
-%
% \item Version 4.0 (March 2017)
%
% --- The \cmd{\RubikRotation} command has been enhanced to allow its argument to include
@@ -1147,7 +1170,7 @@
% --- A `man' file (manual file) for the Perl script \texttt{rubikrotation.pl} is now
% included in the package.
%
-% --- The Perl script \texttt{rubikrotation.pl} now uses as input and output filenames
+% --- The Perl script \texttt{rubikrotation.pl} now uses as input and output file-names
% those specified in the command-line of the CALLing program. This now allows the
% script \texttt{rubikrotation.pl} to be used as a stand-alone tool (see the
% \texttt{rubikrotation} `man' file for details).
@@ -1164,12 +1187,63 @@
%
% \end{itemize}
%
+%
+%
+%
+%
+% \section{References}
+% \label{sec:references}
+%
+%\begin{itemize}
+%
+% \item Abrahams PW, Berry K and Hargreaves KA (1990). \textit{\TeX\ for the impatient}
+% (Addison-Wesley Publishing Company), page~292.
+% {\newline}Available from: \url{http://www.ctan.org/pkg/impatient}
+% {\newline}[\,re:~\cmd{\rubikpercentchar} and \cmd{\@comment} in Section~\ref{sec:abrahams}\,]
+%
+%
+% \item Eijkhout V (1992). \textit{\TeX\ by topic: a {\TeX}nician's reference}.
+% (Addison-Wesley Publishing Company), pages~232 \&~238.
+% {\newline}Available from: \url{https://bitbucket.org/VictorEijkhout/tex-by-topic/}
+% [\,re:~\cmd{\string} in Section~\ref{sec:eijkhout}\,]
+% [\,re:~\cmd{\write} in Section~\ref{sec:seq-as-macros}\,]
+%
+%
+% \item Feuers\"{a}nger C (2015). Notes on programming in \TeX.
+% {\newline}(revision: 1.12.1-32-gc90572c; 2015/07/29)
+% \newline\url{http://pgfplots.sourceforge.net/TeX-programming-notes.pdf}
+% {\newline}[\,re:~loop macros in Section~\ref{sec:feuersanger}\,]
+%
+% \item Kociemba website (Kociemba H). \url{http://www.kociemba.org/cube.htm}
+%
+% \item Nickalls RWD and Syropoulos A (2015). The \textsc{rubikcube} package, v3.0.
+% \newline\url{http://www.ctan.org/pkg/rubik},
+%
+%
+% \item Randelshofer website (Randelshofer W). \url{http://www.randelshofer.ch/rubik/}
+% \ [\,re:~sequences and supersetENG notation\,]
+%
+%
+% \item Reid website (Reid M). \ Patterns. \url{http://www.cflmath.com/Rubik/patterns.html}
+% \ [\,re:~sequences as macros; in Section~\ref{sec:seq-as-macros}\,]
+%
+%
+% \item Tellechea C and Segletes SB (2016). The \textsf{listofitems} package, v1.2
+% \newline\url{http://www.ctan.org/pkg/listofitems}
+%
+%\end{itemize}
+%
+%
+%
+%
+%
% ^^A ==================================================
% \StopEventually{\PrintIndex}
%
-%
+%
%
% \section[The code]{The code (\texttt{rubikrotation.sty})}
+% \label{sec:thecode}
%
% {\noindent}In the following, the term `Perl script' denotes the script
% \texttt{rubikrotation.pl}. Useful information regarding the
@@ -1182,8 +1256,8 @@
%
% \begin{macrocode}
%<*rubikrotation>
-\def\RRfileversion{4.0}%
-\def\RRfiledate{2017/03/03}%
+\def\RRfileversion{5.0}%
+\def\RRfiledate{2018/02/25}% 25 February 2018
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{rubikrotation}[\RRfiledate\space (v\RRfileversion)]
% \end{macrocode}
@@ -1202,7 +1276,7 @@
%
% {\noindent}The \rubikrotation\ package requires access to the \textsf{fancyvrb} package
% for the \cmd{\VerbatimInput\{\}} command which we use for inputting and displaying
-% the error file (see Section~\ref{sec:showrubikerrors}).
+% the error file (see Section~\ref{sec:showerrors}).
% \begin{macrocode}
\@ifpackageloaded{fancyvrb}{}{%
\typeout{---rubikrotation requires the fancyvrb package%
@@ -1348,7 +1422,7 @@
% {\noindent}We first open the file \texttt{rubikstateERRORS.dat} which is used
% by the Perl script \texttt{rubikrotation.pl} for writing its error-messages to.
% This file is displayed by the command
-% \cmd{\ShowRubikErrors}.
+% \cmd{\ShowErrors}.
%
% \textsc{important note}: this file is created fresh each time LaTeX is run,
% and hence the Perl script only appends data to it during the \LaTeX\ run,
@@ -1362,8 +1436,8 @@
\typeout{---creating file rubikstateERRORS.dat}%
\newwrite\outfile%
\immediate\openout\outfile=rubikstateERRORS.dat%
-\@print{\@comment rubikstateERRORS.dat}%
-\@print{\@comment --------------------}%
+\@print{\@comment ShowErrors (rubikstateERRORS.dat)}%
+\@print{\@comment ---------------------------------}%
\immediate\closeout\outfile%
% \end{macrocode}
%
@@ -1372,7 +1446,7 @@
%
% Having set up all the primary files, we now need to set up a newwrite for
% all subsequent file openings (e.g.,~for \texttt{rubikstate.dat} and saving
-% to arbitrary filenames by the \cmd{\SaveRubikState} command). Otherwise, we
+% to arbitrary file-names by the \cmd{\SaveRubikState} command). Otherwise, we
% can easily exceed the LaTeX limit of 15. From here-on \TeX\ will use
% \texttt{openout7} when opening and writing to files. We will implement new
% openings using the command \verb!\@openstatefile! (see below).
@@ -1404,23 +1478,23 @@
% (see Sections~\ref{saverubikstate} and \ref{generaloverview}).
% The file \texttt{rubikstate.dat} is read by the Perl script, and represents
% the state on which the new \cmd{\RubikRotation} command acts.
-% Note that we append the key-word \texttt{checkstate} to the end of the file
-% in order to trigger the Perl script to implement its \texttt{checkstate} subroutine.
+% Note that we include the line \texttt{cubesize,three} to inform the Perl script
+% that the cube is a 3x3x3 cube (this is used in the `random' subroutine).
%
-% The actual state is simply an ordered sequence of the faces and the colours
+% The actual state (colour state) is simply an ordered sequence of the faces and the colours
% associated with each facelet of a face. The colour associated with a particular facelet
% is held by the variable for that facelet. For example, the top-left facelet associated with
% the \textsc{front} face is held in the variable \cmd{\Flt} (see Section~\ref{saverubikstate}).
% Further relevant documentation is in the \textsc{rubikcube} package.
% \begin{macrocode}
\newcommand{\@printrubikstate}{%
+ \@print{cubesize,three}%
\@print{up,\Ult,\Umt,\Urt,\Ulm,\Umm,\Urm,\Ulb,\Umb,\Urb}%
\@print{down,\Dlt,\Dmt,\Drt,\Dlm,\Dmm,\Drm,\Dlb,\Dmb,\Drb}%
\@print{left,\Llt,\Lmt,\Lrt,\Llm,\Lmm,\Lrm,\Llb,\Lmb,\Lrb}%
\@print{right,\Rlt,\Rmt,\Rrt,\Rlm,\Rmm,\Rrm,\Rlb,\Rmb,\Rrb}%
\@print{front,\Flt,\Fmt,\Frt,\Flm,\Fmm,\Frm,\Flb,\Fmb,\Frb}%
\@print{back,\Blt,\Bmt,\Brt,\Blm,\Bmm,\Brm,\Blb,\Bmb,\Brb}%
- \@print{checkstate}%
}
% \end{macrocode}
% \end{macro}
@@ -1440,8 +1514,8 @@
% Note that this macro uses the internal commands \cmd{\@comment} (`\%\%'),
% \cmd{\@commentone} (`\%') and \cmd{\@print}. \#1 is the output filename.
% We use several \cmd{\typeout} commands to write to the log file.
-% An example of the line of code we are trying to output to the
-%\texttt{rubikstateNEW.dat} file is as follows:
+% An example of one of the lines of code we are trying to output to the
+%\texttt{rubikstateNEW.dat} file is as follows:
% {\newline}\verb!\RubikFaceUp{W}{W}{G}{W}{W}{G}{B}{B}{Y}%!
% \begin{macrocode}
\newcommand{\SaveRubikState}[1]{%
@@ -1512,10 +1586,11 @@
% the command to write the main argument to the output data file.
% \begin{macrocode}
\newcommand{\RubikRotation}[2][1]{%
- \typeout{---TeX process (rubikrotation.sty)-------}%
- \typeout{---NEW rotation command------------------}%
+ \typeout{---TeX process---------------------------}%
+ \typeout{---script = rubikrotation.sty v\RRfileversion\space (\RRfiledate)}%
+ \typeout{---NEW rotation command}%
\typeout{---command = RubikRotation[#1]{#2}}%
- \typeout{---writing current Rubik state to file rubikstate.dat}%
+ \typeout{---writing current cube state to file rubikstate.dat}%
\@openstatefile% open data file
\@print{\@comment filename: rubikstate.dat}%
\@print{\@comment written by rubikrotation.sty%
@@ -1542,38 +1617,54 @@
%
%
%
-% \subsection{ShowRubikErrors command}
-% \label{sec:showrubikerrors}
+% \subsection{ShowErrors command}
+% \label{sec:showerrorscode}
%
-% \begin{macro}{\ShowRubikErrors}
-% This command inputs the file \texttt{rubikstateERRORS.dat}.
-% Also made a more convenient synonym = \cmd{\ShowErrors}.
+% \begin{macro}{\ShowErrors}
+% This command inputs the file \texttt{rubikstateERRORS.dat}
+% (output by the Perl program).
% \begin{macrocode}
-\newcommand{\ShowRubikErrors}{%
- \typeout{---ShowRubikErrors: inputting file rubikstateERRORS.dat}%
+\newcommand{\ShowErrors}{%
+ \typeout{---ShowErrors: inputting file rubikstateERRORS.dat}%
\VerbatimInput{rubikstateERRORS.dat}%
}
-\newcommand{\ShowErrors}{\ShowRubikErrors}
+% \end{macrocode}
+% Since this command replaces the original command = \cmd{\ShowRubikErrors}, we will
+% retain the original command for backward compatibility (for the moment at least).
+% \begin{macrocode}
+\newcommand{\ShowRubikErrors}{\ShowErrors}
% \end{macrocode}
% \end{macro}
%
%
-% \subsection{CheckRubikState command}
+% \subsection{CheckState command}
+% \label{sec:checkstatecode}
%
-% \begin{macro}{\CheckRubikState}
+% \begin{macro}{\CheckState}
% This command triggers the Perl script to implement
% some simple error checking of the Rubik configuration (state).
% This command (a)~writes the current Rubik state to the file
-% \texttt{rubikstate.dat}, and then (b)~CALLs the Perl script.
-% It also writes comments to the data file and also to the log file..
+% \texttt{rubikstate.dat}, (b)~writes the keyword `checkstate' to the
+% same file, and then (c)~CALLs the Perl script.
+% It also writes comments to the data file and also to the log file.
+%
+% Note (1)~that the command \cmd{\@printrubikstate} actually writes the
+% current state to the file \texttt{rubikstate.dat}, (2)~the keyword `checkstate'
+% triggers the Perl program to do a simple numerical check on the number
+% of facelets with each colour.
+%
+% Note also that the \cmd{\CheckState} command replaces the earlier
+% \cmd{\CheckRubikState}, but we retain the old command for backwards
+% compatibility (for the moment).
% \begin{macrocode}
-\newcommand{\CheckRubikState}{%
+\newcommand{\CheckState}{%
\typeout{---NEW check command------------------}%
- \typeout{---command = CheckRubikState}%
- \typeout{---writing current Rubik state to file rubikstate.dat}%
+ \typeout{---command = CheckState}%
+ \typeout{---writing current cube state to file rubikstate.dat}%
\@openstatefile% opens data file
\@print{\@comment filename: rubikstate.dat}%
\@printrubikstate%
+ \immediate\write\outfile{checkstate}%
\@closestatefile% close data file
\typeout{---running Perl script (rubikrotation.pl)}%
\immediate\write18{\rubikperlcmd}%
@@ -1581,6 +1672,7 @@
\input{rubikstateNEW.dat}%
\typeout{-----------------------------------------}%
}
+\newcommand{\CheckRubikState}{\CheckState}
% \end{macrocode}
% \end{macro}
%
diff --git a/Master/texmf-dist/source/latex/rubik/rubikrotation.ins b/Master/texmf-dist/source/latex/rubik/rubikrotation.ins
index 0c2aed56982..655f68e31ae 100644
--- a/Master/texmf-dist/source/latex/rubik/rubikrotation.ins
+++ b/Master/texmf-dist/source/latex/rubik/rubikrotation.ins
@@ -1,6 +1,6 @@
%% rubikrotation.ins
%%
-%% version 4.0
+%%
%%
%% --- automatic overwriting of .sty is disabled-------
%% =========================================================
@@ -16,9 +16,9 @@
Authors: RWD Nickalls (dick@nickalls.org)
and Apostolos Syropoulos (asyropoulos@yahoo.com)
- Copyright 03 March 2017 RWD Nickalls and A Syropoulos
+ Copyright February 25, 2018 RWD Nickalls and A Syropoulos
- VERSION 4.0
+ VERSION 5.0
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either
diff --git a/Master/texmf-dist/source/latex/rubik/rubiktwocube.dtx b/Master/texmf-dist/source/latex/rubik/rubiktwocube.dtx
new file mode 100644
index 00000000000..3e243cd8029
--- /dev/null
+++ b/Master/texmf-dist/source/latex/rubik/rubiktwocube.dtx
@@ -0,0 +1,2478 @@
+% \iffalse meta-comment
+% rubiktwocube.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 rubiktwocube.dtx and rubiktwocube.ins
+% and the derived file rubiktwocube.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{rubiktwocube.sty}{\usepackage{rubiktwocube}}{%
+ \GenericWarning{rubiktwocube.dtx}{Package file rubiktwocube.sty not found.
+ Documentation will be messed up!^^J
+ (Generate rubiktwocube.sty by (La)TeXing rubiktwocube.ins, and then^^J
+ process rubiktwocube.dtx again)^^J}\stop
+}%
+\pagestyle{myheadings}
+\markright{\texttt{rubiktwocube} \ \ (Rubik bundle v5.0, 2018) \ \ \texttt{www.ctan.org/pkg/rubik}}
+\usepackage{rubikcube} %% we require macros @join and rubikfont
+\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{rubiktwocube.dtx}
+ \PrintChanges
+ \PrintIndex
+\end{document}
+%</driver>
+% \fi
+%
+%
+%
+%%% \CheckSum{2308}
+%
+%%% \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 \rubiktwocube\ package}
+%
+% \author{
+% RWD Nickalls (dick@nickalls.org) \\
+% A Syropoulos (asyropoulos@yahoo.com)
+% }
+% \date{This file describes version \RTCfileversion\ (\RTCfiledate)\\
+% \texttt{www.ctan.org/pkg/rubik}}
+% \maketitle
+%
+% \begin{abstract}
+% The \rubiktwocube\ package provides LaTeX commands and macros
+% for typesetting TwoCube (2x2x2) notation, configurations, and
+% rotation sequences using the TikZ graphic language. It is part of the
+% Rubik `bundle'.
+% \end{abstract}
+%
+%
+% \begin{minipage}{12cm}
+% \centering
+% \ifpdf
+% \strut\hspace{5mm}\includegraphics[width=12cm]{rubiktwo-doc-figA.pdf}
+% \else
+% \fi
+% \end{minipage}
+%
+%
+% \tableofcontents
+%
+% \pagebreak
+%
+% \section{Introduction}
+%
+% The \rubiktwocube\ package (part of the \textsc{rubik} `bundle') provides a
+% collection of \LaTeX\ commands
+% and macros for typesetting Rubik 2x2x2 cube configurations using the
+% PGF/TikZ graphic languages.
+% This package is a minor extension of the \textsc{rubikcube} package, and users are
+% therefore assumed to be familiar with both the \textsc{rubikcube} and \textsc{rubikrotation}
+% packages. For examples of use see the file \texttt{rubikexamples.pdf}.
+%
+%
+% \subsection{Requirements}
+%
+% The \rubiktwocube\ package requires the TikZ package (since it makes
+% use of the TikZ picture environment), and also the
+% \textsc{rubikcube} package.
+%
+% For full functionality the complementary packages \textsc{rubikrotation} and
+% \textsc{rubikpatterns} also need to be loaded.
+% Note that the \textsc{rubikrotation} package requires Perl to be installed.
+% See the `Installation' section in the \textsc{rubikcube} package documentation
+% (\texttt{rubikcube.pdf}) for more details.
+
+%
+%
+%
+% \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 \textsc{rubikcube}, \textsc{rubikrotation},
+% \textsc{rubikpatterns} and \textsc{rubiktwocube}.
+%
+% Here we describe only the installation of the \textsc{rubiktwocube} package,
+% which consists of the following files:
+%\begin{verbatim}
+% rubiktwocube.ins
+% rubiktwocube.dtx
+% rubiktwocube.pdf --documentation of the rubiktwocube package
+% rubiktwo-doc-figA.pdf
+%\end{verbatim}
+% Before installing the \textsc{rubiktwocube} package make sure the following packages
+% are already installed (TikZ graphics system and the \textsc{rubikcube} package).
+%
+%
+% \subsection{\texttt{rubiktwocube.sty}}
+%
+% The style option \texttt{rubiktwocube.sty} is generated by running (pdf)\LaTeX\ on
+% the file \texttt{rubiktwocube.ins} as follows:
+%\begin{verbatim}
+% pdflatex rubiktwocube.ins
+%\end{verbatim}
+%
+%
+% \subsection{\texttt{rubiktwocube.pdf}}
+%
+% The documentation file (\texttt{rubiktwocube.pdf}) is then 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 rubiktwocube.dtx
+% pdflatex rubiktwocube.dtx
+% makeindex -s gind.ist rubiktwocube
+% makeindex -s gglo.ist -o rubiktwocube.gls rubiktwocube.glo
+% pdflatex rubiktwocube.dtx
+% pdflatex rubiktwocube.dtx
+%\end{verbatim}
+%
+%
+% \subsection{Placing the files}
+%
+% Place the files either in the local working directory, or where your system
+% will find them. For a Linux system with a standard \TeX\ Directory Structure (TDS), then:
+%
+%\medskip
+%{\noindent}*.sty $\rightarrow$
+% \texttt{/usr/local/texlive/texmf-local/tex/latex/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\{rubiktwocube\}}.
+% Note that the \rubiktwocube\ package requires the TikZ package, and so always load TikZ
+% before \rubiktwocube\ as follows:
+% \begin{quote}
+%\begin{verbatim}
+% \usepackage{tikz}
+% \usepackage{rubikcube,rubikrotation,rubikpatterns,rubiktwocube}
+%\end{verbatim}
+% \end{quote}
+%
+%
+%
+% \subsection{\texttt{rubikexamples.pdf}}
+%
+% The Rubik bundle includes a `RubikExamples' file (\texttt{rubikexamples.pdf})
+% as well as associated \texttt{.sh} (Linux) and \texttt{.bat} (Microsoft) batch
+% files which can be used to facilitate processing the source file (\texttt{rubikexamples.tex}).
+% See the `Installation' section in the \textsc{rubikcube} package documentation
+% (\texttt{rubikcube.pdf}) for details regarding processing the examples source file.
+%
+%
+%
+% \pagebreak
+%
+% \section{Command conventions}
+% \label{sec:conventions}
+%
+% The examples given in the file \texttt{rubikexamples.pdf} present a good overview of
+% the commands and how to use them.
+%
+%
+%
+% \subsection[Keywords Two and Rubik]{The keywords Two and Rubik in commands}
+%
+% 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 `Two' in a command reflects the fact that
+% the command relates to a 2x2x2 cube (a `Two' cube). Similarly, commands which relate
+% to a 3x3x3 cube (a `Rubik' cube) ---see the \textsc{rubikcube} package---
+% use instead the word `Rubik'.
+%
+%
+%
+% It is assumed that users are familiar with the \textsc{rubikcube}
+% and \textsc{rubikrotation} packages, since virtually all \rubiktwocube\
+% commands mirror the Rubik (3x3x3) cube commands, such that the word `Rubik'
+% is replaced by the word `Two' (exceptions are highlighted).
+% For example, the commands for drawing a 2x2x2 cube and a 3x3x3 cube from a RU viewpoint
+% are respectively \cmd{\DrawTwoCubeRU} and \cmd{\DrawRubikCubeRU}.
+% The examples given in the file \texttt{rubikexamples.pdf} present a good overview of
+% the commands and how to use them.
+%
+% For more detailed information see (a)~the `code' section (Section~\ref{sec:thecode}),
+% or (b)~see the equivalent 3x3x3 commands in the \textsc{rubikcube} package.
+%
+%
+%
+%
+%
+% \section{Colour commands}
+% \label{sec:listofcolourcommands}
+%
+% The following list shows the \rubiktwocube\ colour commands paired
+% (for convenience) with the equivalent 3x3x3 version from the
+% \textsc{rubikcube} package. The \texttt{..} indicates that mandatory arguments are required.
+%
+%
+%\begin{verbatim}
+% RubikCube TwoCube
+% 3x3x3 2x2x2
+%
+% \RubikCubeSolved \TwoCubeSolved
+% \RubikCubeSolvedWY \TwoCubeSolvedWY
+% \RubikCubeSolvedWB \TwoCubeSolvedWB
+% \RubikCubeGrey \TwoCubeGrey
+% \RubikCubeGray \TwoCubeGray
+% \RubikCubeGreyWY
+% \RubikCubeGrayWY
+% \RubikCubeGreyWB
+% \RubikCubeGrayWB
+% \RubikCubeGreyAll \TwoCubeGreyAll
+% \RubikCubeGrayAll \TwoCubeGrayAll
+% \RubikSolvedConfig.. \TwoSolvedConfig..
+%
+% \RubikFaceUp.. \TwoFaceUp..
+% \RubikFaceDown.. \TwoFaceDown..
+% \RubikFaceLeft.. \TwoFaceLeft..
+% \RubikFaceRight.. \TwoFaceRight..
+% \RubikFaceFront.. \TwoFaceFront..
+% \RubikFaceBack.. \TwoFaceBack..
+% \RubikFaceUpAll.. \TwoFaceUpAll..
+% \RubikFaceDownAll.. \TwoFaceDownAll..
+% \RubikFaceLeftAll.. \TwoFaceLeftAll..
+% \RubikFaceRightAl.. \TwoFaceRightAll..
+% \RubikFaceFrontAl.. \TwoFaceFrontAll..
+% \RubikFaceBackAll.. \TwoFaceBackAll..
+%
+% \RubikSidebarWidth.. \TwoSidebarWidth..
+% \RubikSidebarLength.. \TwoSidebarLength..
+% \RubikSidebarSep.. \TwoSidebarSep..
+%
+% \RubikSliceTopL.. \TwoSliceTopL..
+% \RubikSliceTopR.. \TwoSliceTopR..
+% \RubikSliceBottomL.. \TwoSliceBottomL..
+% \RubikSliceBottomR.. \TwoSliceBottomR..
+%\end{verbatim}
+%
+%
+%
+% \section{Draw commands}
+% \label{sec:listofdrawcommands}
+%
+% The following list shows the \rubiktwocube\ Draw commands paired
+% (for convenience) with the equivalent 3x3x3 version from the
+% \textsc{rubikcube} package. Commands in round brackets show short-hand
+% equivalents.
+%
+%
+%\begin{verbatim}
+% RubikCube TwoCube
+% 3x3x3 2x2x2
+%
+% \DrawRubikCubeRU \DrawTwoCubeRU
+% \DrawRubikCubeRD \DrawTwoCubeRD
+% \DrawRubikCubeLU \DrawTwoCubeLU
+% \DrawRubikCubeLD \DrawTwoCubeLD
+% \DrawRubikCubeF \DrawTwoCubeF
+% \DrawRubikCubeSF \DrawTwoCubeSF
+%
+% \DrawRubikCubeSidebarFL.. \DrawTwoCubeSidebarFL..
+% \DrawRubikCubeSidebarFR.. \DrawTwoCubeSidebarFR..
+% \DrawRubikCubeSidebarFU.. \DrawTwoCubeSidebarFU..
+% \DrawRubikCubeSidebarFD.. \DrawTwoCubeSidebarFD..
+% \DrawRubikCubeSidebarBL.. \DrawTwoCubeSidebarBL..
+% \DrawRubikCubeSidebarBR.. \DrawTwoCubeSidebarBR..
+% \DrawRubikCubeSidebarBU.. \DrawTwoCubeSidebarBU..
+% \DrawRubikCubeSidebarBD.. \DrawTwoCubeSidebarBD..
+%
+% \DrawRubikFaceUp \DrawTwoFaceUp (= \DrawTwoFaceU )
+% \DrawRubikFaceDown \DrawTwoFaceDown (= \DrawTwoFaceD )
+% \DrawRubikFaceLeft \DrawTwoFaceLeft (= \DrawTwoFaceL )
+% \DrawRubikFaceRight \DrawTwoFaceRight (= \DrawTwoFaceR )
+% \DrawRubikFaceFront \DrawTwoFaceFront (= \DrawTwoFaceF )
+% \DrawRubikFaceBack \DrawTwoFaceBack (= \DrawTwoFaceB )
+%
+% \DrawRubikFaceUpSide \DrawTwoFaceUpSide (= \DrawTwoFaceUS )
+% \DrawRubikFaceDownSide \DrawTwoFaceDownSide (= \DrawTwoFaceDS )
+% \DrawRubikFaceLeftSide \DrawTwoFaceLeftSide (= \DrawTwoFaceLS )
+% \DrawRubikFaceRightSide \DrawTwoFaceRightSide (= \DrawTwoFaceRS )
+% \DrawRubikFaceFrontSide \DrawTwoFaceFrontSide (= \DrawTwoFaceFS )
+% \DrawRubikFaceBackSide \DrawTwoFaceBackSide (= \DrawTwoFaceBS )
+%
+% \DrawRubikFlatUp.. \DrawTwoFlatUp..
+% \DrawRubikFlatDown.. \DrawTwoFlatDown..
+% \DrawRubikFlatLeft.. \DrawTwoFlatLeft..
+% \DrawRubikFlatRight.. \DrawTwoFlatRight..
+% \DrawRubikFlatFront.. \DrawTwoFlatFront..
+% \DrawRubikFlatBack.. \DrawTwoFlatBack..
+%
+%\end{verbatim}
+%
+%
+%
+%
+% \section{Rotation commands}
+% \label{sec:rotationcommands}
+%
+% \bigskip
+%
+%
+%\begin{verbatim}
+% RubikCube TwoCube
+% 3x3x3 2x2x2
+%
+% \RubikRotation.. \TwoRotation..
+% \SaveRubikState.. \SaveTwoState..
+% \ShowErrors \ShowErrors
+% \CheckState \CheckState
+%\end{verbatim}
+%
+%
+% \subsection{List of rotation commands}
+% \label{sec:listofrotationcommands}
+%
+%
+% All the commands presented here also have a \cmd{\Two\{\}} equivalent form which
+% typesets both the hieroglyph and its lettercode in a vertical format.
+% These have been omitted here owing to the difficulty of including this form easily
+% in the following table.
+%
+% 2x2x2 \textsc{changes}: Note that all these command names mirror their 3x3x3 equivalents in
+% the \textsc{rubikcube} package; the changes in the command prefixes
+% are as follows:
+%
+% \cmd{\tr} $\leftarrow$ \cmd{\rr}
+%
+% \cmd{\trh} $\leftarrow$ \cmd{\rrh}
+%
+% \cmd{\Two} $\leftarrow$ \cmd{\Rubik}
+%
+% \cmd{\textTwo} $\leftarrow$ \cmd{\textRubik}
+%
+% \pagebreak
+%
+% \subsubsection{Face rotations}
+% \label{sec:facerotations}
+%
+%
+% \newcommand{\dnstrut}{\rule{0pt}{17pt}}
+% \newcommand{\dns}{\hspace{2mm}}
+% \newcommand{\dnsp}{\hspace{2mm}}
+%
+% \newcommand{\dnTwo}[1]{%
+% \dnstrut\tr{#1}\dns\cmd{\tr\{#1\}}%
+% & \trh{#1}\dns\cmd{\trh\{#1\}}%
+% & \Two{#1}\dns\cmd{\Two\{#1\}} \nonumber\\%
+% }%
+%
+% \newcommand{\dntextTwo}[1]{%
+% \dnstrut\tr{#1}\dns\cmd{\tr\{#1\}}%
+% & \trh{#1}\dns\cmd{\trh\{#1\}}%
+% & \textTwo{#1}\dns\cmd{\textTwo\{#1\}} \nonumber\\%
+% }%
+%
+%
+% \begin{supertabular}[lll]{p{3cm} p{3cm} p{4.5cm}}
+% \dntextTwo{U}
+% \dntextTwo{Up}
+% \dntextTwo{D}
+% \dntextTwo{Dp}
+% \dntextTwo{L}
+% \dntextTwo{Lp}
+% \dntextTwo{R}
+% \dntextTwo{Rp}
+% \dntextTwo{F}
+% \dntextTwo{Fp}
+% \dntextTwo{B}
+% \dntextTwo{Bp}
+% \end{supertabular}
+%
+%
+%
+% \subsubsection{Axis rotations}
+% \label{sec:listofaxisrotations}
+%
+% \begin{supertabular}[lll]{p{3cm} p{3cm} p{4.5cm}}
+% \dnTwo{x}
+% \dnTwo{xp}
+% \dnTwo{y}
+% \dnTwo{yp}
+% \dnTwo{z}
+% \dnTwo{zp}
+% \end{supertabular}
+%
+%
+% \begin{supertabular}[lll]{p{3cm} p{3cm} p{4.5cm}}
+% \dnTwo{u}
+% \dnTwo{up}
+% \dnTwo{d}
+% \dnTwo{dp}
+% \dnTwo{l}
+% \dnTwo{lp}
+% \dnTwo{r}
+% \dnTwo{rp}
+% \dnTwo{f}
+% \dnTwo{fp}
+% \dnTwo{b}
+% \dnTwo{bp}
+% \end{supertabular}
+%
+%
+% \begin{supertabular}[lll]{p{3cm} p{3cm} p{4.5cm}}
+% \dnTwo{Uc}
+% \dnTwo{Ucp}
+% \dnTwo{Dc}
+% \dnTwo{Dcp}
+% \dnTwo{Lc}
+% \dnTwo{Lcp}
+% \dnTwo{Rc}
+% \dnTwo{Rcp}
+% \dnTwo{Fc}
+% \dnTwo{Fcp}
+% \dnTwo{Bc}
+% \dnTwo{Bcp}
+% \end{supertabular}
+%
+%
+% \begin{supertabular}[lll]{p{3cm} p{3cm} p{4.5cm}}
+% \dnTwo{CR}
+% \dnTwo{CRp}
+% \dnTwo{CL}
+% \dnTwo{CLp}
+% \dnTwo{CU}
+% \dnTwo{CUp}
+% \dnTwo{CD}
+% \dnTwo{CDp}
+% \dnTwo{CF}
+% \dnTwo{CFp}
+% \dnTwo{CB}
+% \dnTwo{CBp}
+% \end{supertabular}
+%
+%
+%
+% \section{References}
+%
+% See the \textsc{rubikcube} package documentation for a full list of references.
+%
+%
+% \section{Change history}
+%
+% \begin{itemize}
+%
+% \item Version 5.0 (February 2018)
+%
+% ---First release.
+%
+% \end{itemize}
+%
+%
+%
+%
+% ^^A =======================
+% \StopEventually{\PrintIndex}
+%
+% \bigskip\bigskip\bigskip\bigskip
+%
+% \section{The code}
+% \label{sec:thecode}
+%
+% All the 2x2x2 code here is essentially a cut-down version of the
+% 3x3x3 code (\textsc{rubikcube} package); i.e.,~we have mostly just
+% removed the 3x3x3 code relating to middle columns and rows, exchanged the
+% word `Rubik' for the word `Two' in command names, and refashioned some of the commands
+% involved in writing the temporary file \texttt{rubikstate.dat}.
+% We assume that users are familiar with the \textsc{rubikcube} and
+% \textsc{rubikrotation} package documentation.
+%
+% In order to avoid much repetition, we describe here only the
+% essential details for understanding the relatively minor changes made in order to
+% transform the earlier 3x3x3 \textsc{rubikcube} package code into
+% working 2x2x2 code. In the following, the various instances of the
+% heading `\textsc{changes:}' imply that more extensive details will be found
+% with the equivalent `Rubik' commands in the \textsc{rubikcube} or \textsc{rubikrotation}
+% package documentation.
+%
+% Relatively few 2x2x2 square hieroglyphs are required; some needed
+% reformulating from their 3x3x3 cousins, ie those associated
+% with \texttt{L,\,Lp,\,R,\,Rp,\,U,\,Up,\,D,\,Dp}.
+% The axis rotations and the rotations \texttt{F,\,Fp,\,B,\,Bp} simply required
+% renaming; for~example, as a `TwoRotationHieroglyph' (\cmd{\trh..}) instead of
+% the 3x3x3 `RubikRotationHieroglyph (\cmd{\rrh..}).
+%
+%
+%
+%
+% \subsection{Package heading}
+%
+% The `RTC' in the following refers to the package name RubikTwoCube.
+%
+% \begin{macrocode}
+%<*rubiktwocube>
+\def\RTCfileversion{5.0}%
+\def\RTCfiledate{2018/02/25}% February 25, 2018
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{rubiktwocube}[\RTCfiledate\space (v\RTCfileversion)]
+% \end{macrocode}
+% The package requires TikZ (we use the pgfmathsetmacro command)
+% ---so we load it if not already loaded.
+% \begin{macrocode}
+\@ifpackageloaded{tikz}{}{%
+ \typeout{---rubiktwocube requires the TikZ package.}%
+ \RequirePackage{tikz}}%
+% \end{macrocode}
+%
+%
+%
+% {\noindent}The package requires \texttt{rubikcube.sty}. However \texttt{rubikcube.sty}
+% is not automatically loaded (for the moment at least) since this makes it difficult
+% to errorcheck new versions, so we just write a message.
+% \begin{macrocode}
+\@ifpackageloaded{rubikcube}{}{%
+ \typeout{---rubiktwocube requires the rubikcube package.}%
+ }%
+\@ifpackageloaded{rubikrotation}{}{%
+ \typeout{---rubiktwocube requires the rubikrotation package.}%
+ }%
+% \end{macrocode}
+%
+% \begin{macro}{\rubiktwocube}
+% First we create a suitable logo
+% \begin{macrocode}
+\newcommand{\rubiktwocube}{\textsc{rubiktwocube}}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \subsection{Saving the Two-cube state}
+% \label{sec:codesavingtwostate}
+%
+% Note that this package writes this state data to the same `output' file
+% (\texttt{rubikstate.dat}) as used by the 3x3x3 \textsc{rubikrotation} package,
+% since there is no need to change this (since the TwoCube corners will be processed in
+% exactly the same way as for 3x3x3 cube corners).
+%
+% \begin{macro}{\@printTWOstate}
+% This internal command writes the TwoCube state data to
+% the `output' file \texttt{rubikstate.dat}, and is used by the \cmd{\TwoRotation} command
+% (see also \textsc{rubikrotation} package documentation Sections on \textit{save rubikstate}
+% and \textit{general overview} for further details).
+% The file \texttt{rubikstate.dat} is read by the Perl script, and represents
+% the state on which the \cmd{\TwoRotation} command acts.
+%
+% \textsc{changes}: Since this is a TwoCube all the non-corner facelets
+% (ie those in middle rows \& columns) are filled with X (grey).
+% We have also introduced a new line in the output file (\texttt{rubikstate.dat})
+% namely \texttt{cubesize,two} which is used to inform the Perl program that we
+% are dealing with a TwoCube.
+% \begin{macrocode}
+\newcommand{\@printTWOstate}{%
+ \@print{cubesize,two}%
+ \@print{\space \space up,\Ult,\Umt,\Urt,\Ulm,\Umm,\Urm,\Ulb,\Umb,\Urb}%
+ \@print{down,\Dlt,\Dmt,\Drt,\Dlm,\Dmm,\Drm,\Dlb,\Dmb,\Drb}%
+ \@print{left,\Llt,\Lmt,\Lrt,\Llm,\Lmm,\Lrm,\Llb,\Lmb,\Lrb}%
+ \@print{right,\Rlt,\Rmt,\Rrt,\Rlm,\Rmm,\Rrm,\Rlb,\Rmb,\Rrb}%
+ \@print{front,\Flt,\Fmt,\Frt,\Flm,\Fmm,\Frm,\Flb,\Fmb,\Frb}%
+ \@print{back,\Blt,\Bmt,\Brt,\Blm,\Bmm,\Brm,\Blb,\Bmb,\Brb}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \subsection{SaveTwoState command}
+% \label{sec:codesavetwostate}
+%
+% \begin{macro}{\SaveTwoState}
+% We create a TwoCube version of the existing \cmd{\SaveRubikState} command
+% (\textsc{rubikrotation} package), simply for symmetry and convenience.
+% This command is identical to the `Rubik' version, and will require
+% the \textsc{rubikrotation} package to be loaded already (as does the following
+% \cmd{\TwoRotation} command.
+% \begin{macrocode}
+\newcommand{\SaveTwoState}{\SaveRubikState}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \subsection{TwoRotation command}
+% \label{sec:codetworotation}
+%
+% Note that this command writes the data to the same file
+% (\texttt{rubikstate.dat}) as that output by the equivalent 3x3x3
+% \cmd{\RubikRotation} command, since there is no need to change this.
+%
+% Note that although the system works perfectly well even if we just continue to use the
+% 3x3x3 \cmd{\RubikRotation} command, it was felt appropriate to implement a special
+% TwoCube version of this command, since this allows the Perl script to be aware
+% (via the \texttt{cubesize,two} line written to the \texttt{rubikstate.dat} file)
+% which sort of cube it is dealing with, and hence allows the option for the program to
+% adjust its action accordingly (for example, with regard to the randomisation procedure
+% which is different for different cubes).
+%
+%
+% \begin{macro}{\TwoRotation}
+% The \cmd{\TwoRotation}\oarg{integer}\marg{comma separated sequence}
+% command (a)~writes the current TwoCube state to the file \texttt{rubikstate.dat},
+% (b)~writes the rotation sequence (either once or multiple times depending
+% on the value of the optional integer argument), and then (c)~CALLs the
+% Perl script \texttt{rubikrotation.pl}. It~also writes comments to the
+% data file and also to the log file.
+%
+% The way we allow the user to (optionally) process the main argument multiple
+% times is simply by writing the associated output command multiple
+% times to the output data-file. Consequently, we require the \cmd{\TwoRotation}
+% command to allow a square-bracket optional
+% argument (a non-negative integer) to specify the number of such repeats.
+%
+% \textsc{2x2x2 changes}: (1)~We have replaced `Rubik' by `Two' in the command-name
+% (2)~we use the command \cmd{\@printTWOstate} (see above) to write the current state data,
+% (3)~the \texttt{RTC} in the fileversion and filedate names denotes `RubikTwoCube'.
+% \begin{macrocode}
+\newcommand{\TwoRotation}[2][1]{%
+ \typeout{---TeX process}%
+ \typeout{---script = TwoRotation cmd (rubiktwocube.sty)%
+ v\RTCfileversion\space (\RTCfiledate)}%
+ \typeout{---NEW rotation command}%
+ \typeout{---command = TwoRotation[#1]{#2}}%
+ \typeout{---writing current TWOcube state to file rubikstate.dat}%
+ \@openstatefile% open data file
+ \@print{\@comment filename: rubikstate.dat}%
+ \@print{\@comment written by TwoRotation cmd (rubiktwocube.sty)%
+ v\RTCfileversion\space (\RTCfiledate)}%
+ \@printTWOstate%
+ %% countingloop code from Feuersaenger (2015)
+ \newcount\ourRRcounter%
+ \@countingloop{\ourRRcounter} in 1:{#1}{%
+ \immediate\write\outfile{rotation,#2}}%
+ \@closestatefile% close data file
+ \typeout{---CALLing Perl script (rubikrotation.pl)}%
+ \immediate\write18{\rubikperlcmd}%
+ \typeout{---inputting NEW datafile (data written by Perl script)}%
+ \input{rubikstateNEW.dat}%
+ \typeout{-----------------------------------------}%
+ }
+% \end{macrocode}
+% \end{macro}
+% As usual we require the \texttt{--shell-escape} command-line option to be used.
+% This is provided by the \textsf{shellesc} package, and is equivalent
+% to \cmd{\immediate}\cmd{\write18}.
+% In the future we may need to replace the \verb!\immediate\write18! with \verb!\ShellEscape!
+% ---see the \textsf{shellesc} package documentation.
+%
+%
+%
+%
+% \subsection{TwoFaceX macros}
+% \label{sec:codetwoface}
+%
+% Allocate the four facelet colours to each face
+% (only four facelets now).
+% \begin{macrocode}
+\newcommand{\TwoFaceUp}[4]{%
+ \def\Ult{#1}\def\Urt{#2}\def\Ulb{#3}\def\Urb{#4}}
+\newcommand{\TwoFaceFront}[4]{%
+ \def\Flt{#1}\def\Frt{#2}\def\Flb{#3}\def\Frb{#4}}
+\newcommand{\TwoFaceRight}[4]{%
+ \def\Rlt{#1}\def\Rrt{#2}\def\Rlb{#3}\def\Rrb{#4}}
+\newcommand{\TwoFaceDown}[4]{%
+ \def\Dlt{#1}\def\Drt{#2}\def\Dlb{#3}\def\Drb{#4}}
+\newcommand{\TwoFaceLeft}[4]{%
+ \def\Llt{#1}\def\Lrt{#2}\def\Llb{#3}\def\Lrb{#4}}
+\newcommand{\TwoFaceBack}[4]{%
+ \def\Blt{#1}\def\Brt{#2}\def\Blb{#3}\def\Brb{#4}}
+\newcommand{\TwoFaceUpAll}[1]{%
+ \def\Ult{#1}\def\Urt{#1}\def\Ulb{#1}\def\Urb{#1}}
+\newcommand{\TwoFaceFrontAll}[1]{%
+ \def\Flt{#1}\def\Frt{#1}\def\Flb{#1}\def\Frb{#1}}
+\newcommand{\TwoFaceRightAll}[1]{%
+ \def\Rlt{#1}\def\Rrt{#1}\def\Rlb{#1}\def\Rrb{#1}}
+\newcommand{\TwoFaceLeftAll}[1]{%
+ \def\Llt{#1}\def\Lrt{#1}\def\Llb{#1}\def\Lrb{#1}}
+\newcommand{\TwoFaceDownAll}[1]{%
+ \def\Dlt{#1}\def\Drt{#1}\def\Dlb{#1}\def\Drb{#1}}
+\newcommand{\TwoFaceBackAll}[1]{%
+ \def\Blt{#1}\def\Brt{#1}\def\Blb{#1}\def\Brb{#1}}
+% \end{macrocode}
+%
+%% set the default colour = grey = X
+% \begin{macrocode}
+\TwoFaceUpAll{X}%
+\TwoFaceDownAll{X}%
+\TwoFaceLeftAll{X}%
+\TwoFaceRightAll{X}%
+\TwoFaceFrontAll{X}%
+\TwoFaceBackAll{X}%
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\newcommand{\TwoSolvedConfig}[6]{%
+ \TwoFaceRightAll{#1}%
+ \TwoFaceLeftAll{#2}%
+ \TwoFaceUpAll{#3}%
+ \TwoFaceDownAll{#4}%
+ \TwoFaceFrontAll{#5}%
+ \TwoFaceBackAll{#6}%
+}
+% \end{macrocode}
+%
+%
+%
+%
+% \subsection{Grey cube}
+% \label{sec:greycube}
+%
+%
+% \begin{macro}{\TwoCubeGrey}
+% \begin{macro}{\TwoCubeGreyAll}
+% This command sets up an all-grey Twocube. We accommodate both spellings
+% `grey' and `gray' (as used by TikZ). We include \cmd{\TwoCubeGreyAll}
+% (exactly the same) to complement the 3x3x3 version just for convenience.
+%
+% Note that we include the \cmd{\RubikCubeGreyAll} command immediately before
+% the \cmd{\TwoSolvedConfig} in order to first initialise all facelets to grey (X),
+% (since the \cmd{..Config..} command only sets the corner cubies)
+% \begin{macrocode}
+\newcommand{\TwoCubeGrey}{\RubikCubeGreyAll\TwoSolvedConfig{X}{X}{X}{X}{X}{X}}%
+\newcommand{\TwoCubeGreyAll}{\TwoCubeGrey}
+\newcommand{\TwoCubeGray}{\TwoCubeGrey}
+\newcommand{\TwoCubeGrayAll}{\TwoCubeGrey}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% Note that we include the \cmd{\RubikCubeGreyAll} command immediately before
+% the \cmd{\TwoSolvedConfig} in order to first initialise all facelets to grey (X),
+% (since the \cmd{..Config..} command only sets the corner cubies)
+% \begin{macrocode}
+\newcommand{\TwoCubeSolvedWY}{\RubikCubeGreyAll\TwoSolvedConfig{G}{B}{W}{Y}{O}{R}}%
+\newcommand{\TwoCubeSolved}{\TwoCubeSolvedWY}%
+\newcommand{\TwoCubeSolvedWB}{\RubikCubeGreyAll\TwoSolvedConfig{R}{O}{W}{B}{G}{Y}}%
+% \end{macrocode}
+%
+%
+%
+% \subsection{Slice macros}
+% \label{sec:slice}
+%
+%
+%
+% Only top and bottom horizontal slices,
+% as viewed from TopR, TopL,BottomR,BottomL.
+% \begin{macrocode}
+\newcommand{\TwoSliceTopR}[4]{%
+ \def\Flt{#1}\def\Frt{#2}\def\Rlt{#3}\def\Rrt{#4}}
+\newcommand{\TwoSliceTopL}[4]{%
+ \def\Llt{#1}\def\Lrt{#2}\def\Flt{#3}\def\Frt{#4}}
+\newcommand{\TwoSliceBottomR}[4]{%
+ \def\Flb{#1}\def\Frb{#2}\def\Rlb{#3}\def\Rrb{#4}}
+\newcommand{\TwoSliceBottomL}[4]{%
+ \def\Llb{#1}\def\Lrb{#2}\def\Flb{#3}\def\Frb{#4}}
+%%---------------------
+\newcommand{\DrawTwoCubeFrontFace}{%
+\draw[line join=round,line cap=round,ultra thick,fill=\Flt]%
+(0,1) -- (0, 2) -- (1,2) -- (1,1) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Frt]%
+(1,1) -- (1, 2) -- (2,2) -- (2,1) -- cycle;
+%%
+\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=\Frb]%
+(1,0) -- (1, 1) -- (2,1) -- (2,0) -- cycle;
+}
+% \end{macrocode}
+%
+%
+%
+%
+% \subsection{DrawTwoCube.. macros}
+% \label{sec:drawtwocube}
+%
+%
+%
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeRU}{%
+%%-----------Front face----------
+\DrawTwoCubeFrontFace %% frontface
+%%-----------Up face----------
+%%---top row
+\draw[line join=round,line cap=round,ultra thick,fill=\Ult]%
+(0.33,2.33) -- (0.66,2.66) -- (1.66,2.66) -- (1.33,2.33) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Urt]%
+(1.33,2.33) -- (1.66,2.66) -- (2.66,2.66) -- (2.33,2.33) -- cycle;
+%%---bottom row
+\draw[line join=round,line cap=round,ultra thick,fill=\Ulb]%
+(0,2) -- (0.33,2.33) -- (1.33,2.33) -- (1,2) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Urb]%
+(1,2) -- (1.33,2.33) -- (2.33,2.33) -- (2,2) -- cycle;
+%%-----------Right face----------
+%%---top row
+\draw[line join=round,line cap=round,ultra thick,fill=\Rlt]%
+(2,1) -- (2, 2) -- (2.33,2.33) -- (2.33,1.33) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Rrt]%
+(2.33,1.33) -- (2.33, 2.33) -- (2.66,2.66) -- (2.66,1.66) -- cycle;
+%%---bottom row
+\draw[line join=round,line cap=round,ultra thick,fill=\Rlb]%
+(2,0) -- (2, 1) -- (2.33,1.33) -- (2.33,0.33) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Rrb]%
+(2.33,0.33) -- (2.33, 1.33) -- (2.66,1.66) -- (2.66,0.66) -- cycle;
+}
+%%
+\newcommand{\DrawTwoCube}{\DrawTwoCubeRU}
+%%
+\newcommand{\DrawTwoCubeRD}{%
+\DrawTwoCubeFrontFace %% frontface
+%%----------Right face--------
+%%---top row
+\draw[line join=round,line cap=round,ultra thick,fill=\Rlt]%
+(2,1) -- (2, 2) -- (2.33,1.66) -- (2.33,0.66) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Rrt]%
+(2.33,0.66) -- (2.33, 1.66) -- (2.66,1.33) -- (2.66,0.33) -- cycle;
+%%---bottom row
+\draw[line join=round,line cap=round,ultra thick,fill=\Rlb]%
+(2,0) -- (2, 1) -- (2.33,0.66) -- (2.33,-0.33) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Rrb]%
+(2.33,-0.33) -- (2.33, 0.66) -- (2.66,0.33) -- (2.66,-0.66) -- 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=\Drt]%
+(1.33,-0.33) -- (1, 0) -- (2,0) -- (2.33,-0.33) -- cycle;
+%%---bottom row
+\draw[line join=round,line cap=round,ultra thick,fill=\Dlb]%
+(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=\Drb]%
+(1.66,-0.66) -- (1.33, -0.33) -- (2.33,-0.33) -- (2.66,-0.66) -- cycle;
+}
+%%
+\newcommand{\DrawTwoCubeLD}{%
+\DrawTwoCubeFrontFace %% frontface
+%%------------Left face--------
+%%---top row
+\draw[line join=round,line cap=round,ultra thick,fill=\Llt]%
+(-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=\Lrt]%
+(-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]%
+(-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=\Drt]%
+(0.66,-0.33) -- (1, 0) -- (2,0) -- (1.66,-0.33) -- cycle;
+%%---bottom row
+\draw[line join=round,line cap=round,ultra thick,fill=\Dlb]%
+(-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=\Drb]%
+(0.33,-0.66) -- (0.66, -0.33) -- (1.66,-0.33) -- (1.33,-0.66) -- cycle;
+}
+%%
+\newcommand{\DrawTwoCubeLU}{%
+\DrawTwoCubeFrontFace %% frontface
+%%-----------Left face-----------
+%%------top row
+\draw[line join=round,line cap=round,ultra thick,fill=\Llt]%
+(-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=\Lrt]%
+(-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]%
+(-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---------
+\draw[line join=round,line cap=round,ultra thick,fill=\Ult]%
+(-0.33,2.33) -- (-0.66, 2.66) -- (0.33,2.66) -- (0.66,2.33) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Urt]%
+(0.66,2.33) -- (0.33, 2.66) -- (1.33,2.66) -- (1.66,2.33) -- cycle;
+%%---bottom row
+\draw[line join=round,line cap=round,ultra thick,fill=\Ulb]%
+(0,2) -- (-0.33, 2.33) -- (0.66,2.33) -- (1,2) -- cycle;
+\draw[line join=round,line cap=round,ultra thick,fill=\Urb]%
+(1,2) -- (0.66, 2.33) -- (1.66,2.33) -- (2,2) -- cycle;
+}
+% \end{macrocode}
+%
+%
+% \subsection{DrawTwoFlat.. macros}
+% \label{sec:drawtwoflat}
+%
+% These `Flat' macros draw a specified face with its origin
+% (left bottom corner of the face) at a specified $(x,y)$ coordinate.
+% They allow USERS to place the image of a face at a specific location.
+%
+%
+% \begin{macrocode}
+%%----------------------
+\newcommand{\DrawTwoFlatUp}[2]{%
+\pgfmathsetmacro{\ux}{#1}%
+\pgfmathsetmacro{\uy}{#2}%
+%%-----top row
+\draw[line join=round,line cap=round,ultra thick,fill=\Ult]%
+(\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=\Urt]%
+(\ux + 1,\uy + 1) -- (\ux + 1,\uy + 2) -- (\ux + 2,\uy + 2)%
+ -- (\ux + 2,\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=\Urb]%
+(\ux + 1,\uy + 0) -- (\ux + 1,\uy + 1) -- (\ux + 2,\uy + 1)%
+ -- (\ux + 2,\uy + 0) -- cycle;
+}
+%%-------------------------
+\newcommand{\DrawTwoFlatDown}[2]{%
+\pgfmathsetmacro{\ddx}{#1}%
+\pgfmathsetmacro{\ddy}{#2}%
+%%---top row
+\draw[line join=round,line cap=round,ultra thick,fill=\Dlt]%
+(\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=\Drt]%
+(\ddx + 1,\ddy + 1) -- (\ddx + 1,\ddy + 2) -- (\ddx + 2,\ddy + 2)%
+ -- (\ddx + 2,\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=\Drb]%
+(\ddx + 1,\ddy + 0) -- (\ddx + 1,\ddy + 1) -- (\ddx + 2,\ddy + 1)%
+ -- (\ddx + 2,\ddy + 0) -- cycle;
+}
+%%-------------------------
+\newcommand{\DrawTwoFlatLeft}[2]{%
+\pgfmathsetmacro{\lx}{#1}%
+\pgfmathsetmacro{\ly}{#2}%
+%%---top row
+\draw[line join=round,line cap=round,ultra thick,fill=\Llt]%
+(\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=\Lrt]%
+(\lx + 1, \ly + 1) -- (\lx + 1, \ly + 2) -- (\lx + 2, \ly + 2)%
+ -- (\lx + 2, \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=\Lrb]%
+(\lx + 1, \ly + 0) -- (\lx + 1, \ly + 1) -- (\lx + 2, \ly + 1)%
+ -- (\lx + 2, \ly + 0) -- cycle;
+}
+%%--------------------------
+\newcommand{\DrawTwoFlatRight}[2]{%
+\pgfmathsetmacro{\rx}{#1}%
+\pgfmathsetmacro{\ry}{#2}%
+%%---top row
+\draw[line join=round,line cap=round,ultra thick,fill=\Rlt]%
+(\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=\Rrt]%
+(\rx + 1, \ry + 1) -- (\rx + 1, \ry + 2) -- (\rx + 2, \ry + 2)%
+ -- (\rx + 2, \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=\Rrb]%
+(\rx + 1, \ry + 0) -- (\rx + 1, \ry + 1) -- (\rx + 2, \ry + 1)%
+ -- (\rx + 2, \ry + 0) -- cycle;
+}
+%%--------------
+\newcommand{\DrawTwoFlatFront}{%
+%% This command is used /only/ by the \cmd{\DrawRubikFlat} command.
+%% NOTE: x, y variables not implemented as not required here
+%%---top row
+\draw[line join=round,line cap=round,ultra thick,fill=\Flt]%
+(0,1) -- (0, 2) -- (1,2) -- (1,1) -- cycle;
+%%
+\draw[line join=round,line cap=round,ultra thick,fill=\Frt]%
+(1,1) -- (1, 2) -- (2,2) -- (2,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=\Frb]%
+(1,0) -- (1, 1) -- (2,1) -- (2,0) -- cycle;
+}
+%%--------------------------
+\newcommand{\DrawTwoFlatBack}[2]{%
+\pgfmathsetmacro{\bx}{#1}%
+\pgfmathsetmacro{\by}{#2}%
+%%---top row
+\draw[line join=round,line cap=round,ultra thick,fill=\Blt]%
+(\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=\Brt]%
+(\bx + 1,\by + 1) -- (\bx + 1,\by + 2) -- (\bx + 2,\by + 2)%
+ -- (\bx + 2,\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=\Brb]%
+(\bx + 1,\by + 0) -- (\bx + 1,\by + 1) -- (\bx + 2,\by + 1)%
+ -- (\bx + 2,\by + 0) -- cycle;
+}
+%%------------------------------
+\newcommand{\DrawTwoCubeF}{%
+ \DrawTwoFlatUp{0}{2}%
+ \DrawTwoFlatDown{0}{-2}%
+ \DrawTwoFlatLeft{-2}{0}%
+ \DrawTwoFlatFront%
+ \DrawTwoFlatRight{2}{0}%
+ \DrawTwoFlatBack{4}{0}%
+}
+%%
+\newcommand{\DrawTwoCubeSF}{%
+ \DrawTwoCubeRU% RU
+ \DrawTwoFlatDown{0}{-2}%
+ \DrawTwoFlatLeft{-2}{0}%
+ \DrawTwoFlatBack{2.666}{0.66}%
+}
+% \end{macrocode}
+%
+%
+%
+%
+%
+%
+% \subsection{Sidebars (Face)}
+% \label{sec:sidebarsfacecode}
+%
+%
+% Making sidebar macros for a TwoCube (converting the 3x3x3x versions
+% to the 2x2x2 versions).
+% {\newline} (1) change name $\rightarrow$ \verb!TWOside@barX!
+% {\newline} (2) change the value \verb!(3 + \bs)! $\rightarrow$ \verb!(2 + \tbs)!
+% (as only two squares on a side).
+% {\newline} (3) change the Sidebar length parameter names by adding a \cmd{\t} prefix
+% to distinguish the TwoCube parameters from those of the RubikCube. Thus we change
+% the Rubik names (\cmd{\dx}, \cmd{\dy}, \cmd{\bw}, \cmd{\bl}, \cmd{\blh}, \cmd{\bs})
+% to their equivalent Two names (\cmd{\tdx}, \cmd{\tdy}, \cmd{\tbw}, \cmd{\tbl},
+% \cmd{\tblh}, \cmd{\tbs}).
+%
+% The coordinates of the bottom left corner of a TwoSidebar are (\cmd{\tdx}, \cmd{\tdy}).
+% The other parameters are width (\cmd{\tbw}), length (\cmd{\tbl}),
+% half length (\cmd{\tblh}), separation (\cmd{\tbs}).
+%
+% \begin{macro}{\TwoSidebarWidth}
+% \begin{macro}{\TwoSidebarLength}
+% \begin{macro}{\TwoSidebarSep}
+% These commands set the width, length and separation of the Sidebars.
+% Each takes a single scalar argument (no units).
+% \newline\textsc{usage}: \cmd{\TwoSidebarWidth}\marg{0.5}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+\newcommand{\TwoSidebarWidth}[1]{\pgfmathsetmacro{\tbw}{#1}}
+\newcommand{\TwoSidebarLength}[1]{\pgfmathsetmacro{\tbl}{#1}}
+\newcommand{\TwoSidebarSep}[1]{\pgfmathsetmacro{\tbs}{#1}}
+% \end{macrocode}
+% We first set some default values. We have set the Sidebar
+% width and separation to 2/3 those of the Rubik 3x3x3 values
+% (so that when a 3x3x3 cube and a 2x2x2 cube
+% are scaled to be the same size, then the Sidebar width and sep will be the same)
+% These also seem to look good generally as well.
+% Of course, users can adjust these as they wish anyway. Any new values will
+% will of course act globally unless constrained (either by using curley brackets, or
+% by writing them into a \TeX\ environment).
+% \begin{macrocode}
+\TwoSidebarWidth{0.2}
+\TwoSidebarLength{1.0}
+\TwoSidebarSep{0.2}
+% \end{macrocode}
+%
+%
+% \begin{macro}{\NoSidebar}
+% This command \cmd{\NoSidebar}\marg{colour code} (defined in the \textsc{rubikcube} package)
+% defines the 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).
+% {\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 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 cancelled (undefined)
+% as follows: \verb!\NoSidebar{}!.
+% \end{macro}
+%
+% \medskip
+%
+% \begin{macro}{\TWOside@barL}
+% \begin{macro}{\TWOside@barR}
+% \begin{macro}{\TWOside@barT}
+% \begin{macro}{\TWOside@barB}
+
+% These commands \cmd{\TWOside@barX}\marg{position no}\marg{facelet location} (where
+% X is one of L~(Left), R~(Right), T~(Top), B~(Bottom), which denote the side of the
+% 2x2 square representing a face), draw a single small bar in a position (1, or 2),
+% having the colour of a specified facelet. The integers 1, 2 denote the facelet number
+% (measured from the grid origin = bottom left corner of the face)
+% adjacent to which the bar is positioned.
+%
+% These macros are used in the various `Sidebar' commands which draw pairs of
+% these small bars adjacent to specified faces.
+% \newline\textsc{changes}: Rubik $\rightarrow$ Two, \cmd{\bw} $\rightarrow$ \cmd{\tbw},
+% \cmd{\bl} $\rightarrow$ \cmd{\tbl}, \cmd{\bs} $\rightarrow$ \cmd{\tbs},
+% \cmd{\dx} $\rightarrow$ \cmd{\tdx}, \cmd{\dy} $\rightarrow$ \cmd{\tdy}
+% (see Section~\ref{sec:sidebarscode} for details of these variables).
+% \newline\textsc{usage}: \verb!\TWOside@barL{2}{\Lrt}!
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+\newcommand{\TWOside@barL}[2]{%
+ %% #1 = cubie possn no, #2 = colour
+ \ifthenelse{\equal{#2}{\no@sidebar}}{}{%
+ \pgfmathsetmacro{\tblh}{\tbl*(0.5)}%
+ \pgfmathsetmacro{\tdx}{0 - \tbs - \tbw}%
+ \pgfmathsetmacro{\tdy}{#1-1+0.5-\tblh}%
+ \draw[fill=#2] (\tdx,\tdy) -- (\tdx,\tdy + \tbl)
+ -- (\tdx+\tbw,\tdy+\tbl) -- (\tdx+\tbw,\tdy) -- cycle;
+}}
+%% changed Rubik value (3 + \bs) --> (2 + \tbs) (as only TWO squares)
+\newcommand{\TWOside@barR}[2]{%
+ %% #1 = cubie possn no, #2 = colour
+ \ifthenelse{\equal{#2}{\no@sidebar}}{}{%
+ \pgfmathsetmacro{\tblh}{\tbl*(0.5)}%
+ \pgfmathsetmacro{\tdx}{2 + \tbs}%
+ \pgfmathsetmacro{\tdy}{#1 -1+0.5-\tblh}%
+ \draw[fill=#2] (\tdx,\tdy) -- (\tdx,\tdy + \tbl)
+ -- (\tdx+\tbw,\tdy+\tbl) -- (\tdx+\tbw,\tdy) -- cycle;
+}}
+%% changed Rubik value (3 + \bs) --> (2 + \tbs) (as only TWO squares)
+\newcommand{\TWOside@barT}[2]{%
+ %% #1 = cubie possn no, #2 = colour
+ \ifthenelse{\equal{#2}{\no@sidebar}}{}{%
+ \pgfmathsetmacro{\tblh}{\tbl*(0.5)}%
+ \pgfmathsetmacro{\tdx}{#1 -1+0.5-\tblh}%
+ \pgfmathsetmacro{\tdy}{2 +\tbs}%
+ \draw[fill=#2] (\tdx,\tdy) -- (\tdx,\tdy + \tbw)
+ -- (\tdx+\tbl,\tdy+\tbw) -- (\tdx+\tbl,\tdy) -- cycle;
+}}
+\newcommand{\TWOside@barB}[2]{%
+ %% #1 = cubie possn no, #2 = colour
+ \ifthenelse{\equal{#2}{\no@sidebar}}{}{%
+ \pgfmathsetmacro{\tblh}{\tbl*(0.5)}%
+ \pgfmathsetmacro{\tdx}{#1 -1+0.5-\tblh}%
+ \pgfmathsetmacro{\tdy}{0 -\tbs-\tbw}%
+ \draw[fill=#2] (\tdx,\tdy) -- (\tdx,\tdy + \tbw)
+ -- (\tdx+\tbl,\tdy+\tbw) -- (\tdx+\tbl,\tdy) -- cycle;
+}}
+% \end{macrocode}
+%
+
+
+%
+% \subsubsection{DrawTwoFaceXSide macros}
+% \label{sec:drawtwofacexside}
+%
+% Only 2 bars on each side for a TwoCube.
+% Change from 3x3x3: we remove the middle cols \& row sections
+% change name DrawRubikLayerSide --> DrawTwoLayerSide
+%
+% RWDN 16 Feb 2018
+% v5: removed many (duplicated and unnecessary) macros, and replaced them
+% with these TwoFace.. macros using just the basic \cmd{\TWOside@bar..} macros
+% for drawing small single bars.
+%
+% These new macros draw a specified face (using the ..Flat.. commands)
+% as well as all the associated sidebars.
+% Note we continue to use the key-word `Side' here to indicate we are
+% drawing all the sidebars, since we are drawing a face.
+% (only for 3D cubes do we use the word `SidebarXX' for denoting a particular
+% Sidebar to be drawn etc.)
+%
+% \begin{macrocode}
+\newcommand{\DrawTwoFaceUpSide}{%
+ \DrawTwoFlatUp{0}{0}%
+ \TWOside@barT{1}{\Brt}%
+ \TWOside@barT{2}{\Blt}%
+ \TWOside@barL{2}{\Llt}%
+ \TWOside@barL{1}{\Lrt}%
+ \TWOside@barR{2}{\Rrt}%
+ \TWOside@barR{1}{\Rlt}%
+ \TWOside@barB{1}{\Flt}%
+ \TWOside@barB{2}{\Frt}%
+}
+\newcommand{\DrawTwoFaceFrontSide}{%
+ \DrawTwoFlatFront{0}{0}%
+ \TWOside@barT{1}{\Ulb}%
+ \TWOside@barT{2}{\Urb}%
+ \TWOside@barL{2}{\Lrt}%
+ \TWOside@barL{1}{\Lrb}%
+ \TWOside@barR{2}{\Rlt}%
+ \TWOside@barR{1}{\Rlb}%
+ \TWOside@barB{1}{\Dlt}%
+ \TWOside@barB{2}{\Drt}%
+}
+\newcommand{\DrawTwoFaceRightSide}{%
+ \DrawTwoFlatRight{0}{0}%
+ \TWOside@barT{1}{\Urb}%
+ \TWOside@barT{2}{\Urt}%
+ \TWOside@barL{2}{\Frt}%
+ \TWOside@barL{1}{\Frb}%
+ \TWOside@barR{2}{\Blt}%
+ \TWOside@barR{1}{\Blb}%
+ \TWOside@barB{1}{\Drt}%
+ \TWOside@barB{2}{\Drb}%
+}
+\newcommand{\DrawTwoFaceLeftSide}{%
+ \DrawTwoFlatLeft{0}{0}%
+ \TWOside@barT{1}{\Ult}%
+ \TWOside@barT{2}{\Ulb}%
+ \TWOside@barL{2}{\Brt}%
+ \TWOside@barL{1}{\Brb}%
+ \TWOside@barR{2}{\Flt}%
+ \TWOside@barR{1}{\Flb}%
+ \TWOside@barB{1}{\Dlb}%
+ \TWOside@barB{2}{\Dlt}%
+}
+\newcommand{\DrawTwoFaceBackSide}{%
+ \DrawTwoFlatBack{0}{0}%
+ \TWOside@barT{1}{\Urt}%
+ \TWOside@barT{2}{\Ult}%
+ \TWOside@barL{2}{\Rrt}%
+ \TWOside@barL{1}{\Rrb}%
+ \TWOside@barR{2}{\Llt}%
+ \TWOside@barR{1}{\Llb}%
+ \TWOside@barB{1}{\Drb}%
+ \TWOside@barB{2}{\Dlb}%
+}
+\newcommand{\DrawTwoFaceDownSide}{%
+ \DrawTwoFlatDown{0}{0}%
+ \TWOside@barT{1}{\Flb}%
+ \TWOside@barT{2}{\Frb}%
+ \TWOside@barL{2}{\Lrb}%
+ \TWOside@barL{1}{\Llb}%
+ \TWOside@barR{2}{\Rlb}%
+ \TWOside@barR{1}{\Rrb}%
+ \TWOside@barB{1}{\Brb}%
+ \TWOside@barB{2}{\Blb}%
+}
+%%
+%% v5: made Face versions (for USER) without the (x,y) coordinates
+\newcommand{\DrawTwoFaceUp}{\DrawTwoFlatUp{0}{0}}
+\newcommand{\DrawTwoFaceDown}{\DrawTwoFlatDown{0}{0}}
+\newcommand{\DrawTwoFaceLeft}{\DrawTwoFlatLeft{0}{0}}
+\newcommand{\DrawTwoFaceRight}{\DrawTwoFlatRight{0}{0}}
+\newcommand{\DrawTwoFaceFront}{\DrawTwoFlatFront{0}{0}}
+\newcommand{\DrawTwoFaceBack}{\DrawTwoFlatBack{0}{0}}
+%%
+%% v5: made short forms --> abbreviations
+\newcommand{\DrawTwoFaceU}{\DrawTwoFlatUp{0}{0}}
+\newcommand{\DrawTwoFaceD}{\DrawTwoFlatDown{0}{0}}
+\newcommand{\DrawTwoFaceL}{\DrawTwoFlatLeft{0}{0}}
+\newcommand{\DrawTwoFaceR}{\DrawTwoFlatRight{0}{0}}
+\newcommand{\DrawTwoFaceF}{\DrawTwoFlatFront{0}{0}}
+\newcommand{\DrawTwoFaceB}{\DrawTwoFlatBack{0}{0}}
+%%
+%% v5: made short forms --> abbreviations
+\newcommand{\DrawTwoFaceUS}{\DrawTwoFaceUpSide}
+\newcommand{\DrawTwoFaceDS}{\DrawTwoFaceDownSide}
+\newcommand{\DrawTwoFaceLS}{\DrawTwoFaceLeftSide}
+\newcommand{\DrawTwoFaceRS}{\DrawTwoFaceRightSide}
+\newcommand{\DrawTwoFaceFS}{\DrawTwoFaceFrontSide}
+\newcommand{\DrawTwoFaceBS}{\DrawTwoFaceBackSide}
+% \end{macrocode}
+%
+%
+%
+%
+%
+% \subsection{Sidebars (Cube)}
+% \label{sec:sidebarscubecode}
+%
+%
+% In order to position sidebars adjacent to a TwoCube (ie in 3D)
+% requires that we first make some new \cmd{\TWOside@bar..}
+% commands which draw sidebars adjacent to the \textsc{back} face
+% (we have already made the macros for the front
+% face sidebars---see Section~\ref{sec:sidebarsfacecode}).
+% 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{\DrawTwoCubeSidebarRBRU}.
+% 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!\DrawTwoCubeSidebarRB{RU}!.
+% We then use the \cmd{\@join} command to append the string \verb!RU! to the string
+% \verb!DrawTwoCubeSidebarRB! forming the (internal)
+% command \cmd{\DrawTwoCubeSidebarRBRU}.
+%
+% In the following we will group the development according to to the view direction.
+%
+%
+%
+% \subsubsection{Sidebars: RU view}
+%
+% \subsubsection*{Right-Back vert sidebar (RU view)}
+%
+% Need to write a new \cmd{\TWOside@barR..} command
+% (see Section~\ref{sec:sidebarsfacecode}).
+% This draws only a single small bar.
+% Each of the two small bars has a numbered position (1,2);
+% (dx,dy) = bottom Left corner of single bar
+%
+% \begin{macrocode}
+\newcommand{\TWOside@barRbackRU}[2]{%
+ %% #1 = cubie possn no, #2 = colour
+ %% tdx --> tdx + (2/3)
+ %% tdy --> tdy + (2/3)
+ \ifthenelse{\equal{#2}{\no@sidebar}}{}{%
+ \pgfmathsetmacro{\tblh}{\tbl*(0.5)}%
+ \pgfmathsetmacro{\tdx}{2 + \tbs +0.666}%
+ \pgfmathsetmacro{\tdy}{#1 -1+0.5-\tblh +0.666}%
+ \draw[fill=#2] (\tdx,\tdy) -- (\tdx,\tdy + \tbl)
+ -- (\tdx+\tbw,\tdy+\tbl) -- (\tdx+\tbw,\tdy) -- cycle;%
+}}
+% \end{macrocode}
+% Now make the RB (RightBack) vertical sidebar command;
+% ie bar~1 is at the bottom; bar~2 is at the top.
+%
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarRBRU}{%
+ \TWOside@barRbackRU{2}{\Blt}%
+ \TWOside@barRbackRU{1}{\Blb}%
+}
+% \end{macrocode}
+% Now make the reverse command (BR) = RB
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarBRRU}{\DrawTwoCubeSidebarRBRU}
+% \end{macrocode}
+% Finally, make the join commands
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarRB}[1]{\@join{\DrawTwoCubeSidebarRB}{#1}}
+\newcommand{\DrawTwoCubeSidebarBR}[1]{\@join{\DrawTwoCubeSidebarBR}{#1}}
+% \end{macrocode}
+%
+%
+%
+% \medskip
+%
+% \subsubsection*{Up-Back horiz sidebar (RU view)}
+%
+%
+% \begin{macrocode}
+\newcommand{\TWOside@barTbackRU}[2]{%
+ %% #1 = cubie possn no; #2 = colour
+ %% tdx --> tdx + (2/3)
+ %% tdy --> tdy + (2/3)
+ \ifthenelse{\equal{#2}{\no@sidebar}}{}{%
+ \pgfmathsetmacro{\tblh}{\tbl*(0.5)}%
+ \pgfmathsetmacro{\tdx}{#1 -1+0.5-\tblh +0.666}%
+ \pgfmathsetmacro{\tdy}{2 +\tbs +0.666}%
+ \draw[fill=#2] (\tdx,\tdy) -- (\tdx,\tdy + \tbw)
+ -- (\tdx+\tbl,\tdy+\tbw) -- (\tdx+\tbl,\tdy) -- cycle;
+}}
+% \end{macrocode}
+% Now make the UB (Up-Back) horizontal sidebar command;
+% ie bar~1 is on the left, bar~2 is on the right (as we look at the cube).
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarUBRU}{%
+ \TWOside@barTbackRU{1}{\Brt}%
+ \TWOside@barTbackRU{2}{\Blt}%
+}
+% \end{macrocode}
+% Now make the reverse command (BU) = UB
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarBURU}{\DrawTwoCubeSidebarUBRU}
+% \end{macrocode}
+% Now make the join commands
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarUB}[1]{\@join{\DrawTwoCubeSidebarUB}{#1}}
+\newcommand{\DrawTwoCubeSidebarBU}[1]{\@join{\DrawTwoCubeSidebarBU}{#1}}
+% \end{macrocode}
+%
+%
+%
+% \medskip
+%
+% \subsubsection*{Front-Left vert sidebar (RU view)}
+%
+% Since this is a front-face sidebar we can use the regular
+% \cmd{TWOside@barL..} command.
+% Now make the FL (Front-Left) vertical sidebar command;
+% ie bar~1 is at the bottom; bar~2 is at the top.
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarFLRU}{%
+ \TWOside@barL{2}{\Lrt}%
+ \TWOside@barL{1}{\Lrb}%
+}
+% \end{macrocode}
+% Now do the reverse (LF)
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarLFRU}{\DrawTwoCubeSidebarFLRU}
+% \end{macrocode}
+% Now do the two join commands
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarFL}[1]{\@join{\DrawTwoCubeSidebarFL}{#1}}
+\newcommand{\DrawTwoCubeSidebarLF}[1]{\@join{\DrawTwoCubeSidebarLF}{#1}}
+% \end{macrocode}
+%
+%
+%
+% \medskip
+%
+% \subsubsection*{Front-Down horiz sidebar (RU view)}
+%
+% Since this is a front face sidebar we can use the regular
+% \cmd{TWOside@barL..} command.
+%
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarFDRU}{%
+ \TWOside@barB{1}{\Dlt}%
+ \TWOside@barB{2}{\Drt}%
+}
+% \end{macrocode}
+% Now do the reverse (DF) = FD
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarDFRU}{\DrawTwoCubeSidebarFDRU}
+% \end{macrocode}
+% Now do the two join commands
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarFD}[1]{\@join{\DrawTwoCubeSidebarFD}{#1}}
+\newcommand{\DrawTwoCubeSidebarDF}[1]{\@join{\DrawTwoCubeSidebarDF}{#1}}
+% \end{macrocode}
+% But FD-LU is the same as FD-RU, so we need to make copies of each.
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarDFLU}{\DrawTwoCubeSidebarDFRU}
+\newcommand{\DrawTwoCubeSidebarFDLU}{\DrawTwoCubeSidebarFDRU}
+% \end{macrocode}
+%
+%
+%
+% \medskip
+%
+% \subsubsection{Sidebars: LU view}
+%
+%
+% \subsubsection*{Left-Back vert sidebar (LU view)}
+%
+% \begin{macrocode}
+\newcommand{\TWOside@barLbackLU}[2]{%
+ %% #1 = cubie possn no, #2 = colour
+ %% tdx --> tdx - 2/3
+ %% tdy --> tdy + 2/3
+ \ifthenelse{\equal{#2}{\no@sidebar}}{}{%
+ \pgfmathsetmacro{\tblh}{\tbl*(0.5)}%
+ \pgfmathsetmacro{\tdx}{0 - \tbs -\tbw -0.666}%
+ \pgfmathsetmacro{\tdy}{#1 -1+0.5-\tblh +0.666}%
+ \draw[fill=#2] (\tdx,\tdy) -- (\tdx,\tdy + \tbl)
+ -- (\tdx+\tbw,\tdy+\tbl) -- (\tdx+\tbw,\tdy) -- cycle;
+}}
+% \end{macrocode}
+% Now make the LB (LeftBack) vertical sidebar command;
+% bar~1 is at the bottom
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarLBLU}{%
+ \TWOside@barLbackLU{2}{\Brt}%
+ \TWOside@barLbackLU{1}{\Brb}%
+}
+% \end{macrocode}
+% Now do the reverse (BL) = LB
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarBLLU}{\DrawTwoCubeSidebarLBLU}
+% \end{macrocode}
+% Now make the join commands
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarLB}[1]{\@join{\DrawTwoCubeSidebarLB}{#1}}
+\newcommand{\DrawTwoCubeSidebarBL}[1]{\@join{\DrawTwoCubeSidebarBL}{#1}}
+% \end{macrocode}
+%
+%
+% \medskip
+%
+% \subsubsection*{Up-Back horizontal sidebar (LU view)}
+%
+% \begin{macrocode}
+\newcommand{\TWOside@barTbackLU}[2]{%
+ %% #1 = cubie possn no; #2 = colour
+ %% tdx --> tdx-2/3
+ %% tdy --> tdy+2/3
+ \ifthenelse{\equal{#2}{\no@sidebar}}{}{%
+ \pgfmathsetmacro{\tblh}{\tbl*(0.5)}%
+ \pgfmathsetmacro{\tdx}{#1 -1+0.5-\tblh -0.666}%
+ \pgfmathsetmacro{\tdy}{2 +\tbs +0.666}%
+ \draw[fill=#2] (\tdx,\tdy) -- (\tdx,\tdy + \tbw)
+ -- (\tdx+\tbl,\tdy+\tbw) -- (\tdx+\tbl,\tdy) -- cycle;
+}}
+% \end{macrocode}
+% Now make the UB (Up-Back) version
+% bar~1 is at the left, 2 on the right.
+%
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarUBLU}{%
+ \TWOside@barTbackLU{1}{\Brt}%
+ \TWOside@barTbackLU{2}{\Blt}%
+}
+% \end{macrocode}
+% Now do the reverse (BU) = UB
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarBULU}{\DrawTwoCubeSidebarUBLU}
+% \end{macrocode}
+% We do NOT need to make the join commands here
+% as the USER commands for BU and UB are the same as for the RU
+%
+%
+%
+% \medskip
+%
+% \subsubsection*{Front-Right vertical sidebar (LU view)}
+%
+%
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarFRLU}{%
+ \TWOside@barR{2}{\Rlt}%
+ \TWOside@barR{1}{\Rlb}%
+}
+% \end{macrocode}
+% Now do the reverse (RF)
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarRFLU}{\DrawTwoCubeSidebarFRLU}
+% \end{macrocode}
+% Now do the two join commands
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarFR}[1]{\@join{\DrawTwoCubeSidebarFR}{#1}}
+\newcommand{\DrawTwoCubeSidebarRF}[1]{\@join{\DrawTwoCubeSidebarRF}{#1}}
+% \end{macrocode}
+%
+%
+% \subsubsection{Sidebars: RD view}
+%
+% \medskip
+%
+% \subsubsection*{Front-Up horizontal sidebar (RD view)}
+%
+%
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarFURD}{%
+ \TWOside@barT{1}{\Ulb}%
+ \TWOside@barT{2}{\Urb}%
+}
+% \end{macrocode}
+% Now do the reverse (UF) = FU
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarUFRD}{\DrawTwoCubeSidebarFURD}
+% \end{macrocode}
+% Now do the two join commands
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarFU}[1]{\@join{\DrawTwoCubeSidebarFU}{#1}}
+\newcommand{\DrawTwoCubeSidebarUF}[1]{\@join{\DrawTwoCubeSidebarUF}{#1}}
+% \end{macrocode}
+%
+%
+% \medskip
+%
+% \subsubsection*{Front-Left vertical sidebar (RD view)}
+%
+%
+% Only need to copy an earlier command here since FL, RD view = same as for RU view.
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarFLRD}{\DrawTwoCubeSidebarFLRU}
+\newcommand{\DrawTwoCubeSidebarLFRD}{\DrawTwoCubeSidebarLFRU}
+% \end{macrocode}
+%
+%
+%
+%
+% \medskip
+%
+% \subsubsection*{Right-Back vertical sidebar (RD view)}
+%
+%
+% \begin{macrocode}
+\newcommand{\TWOside@barRbackRD}[2]{%
+ %% #1 = cubie possn no, #2 = colour
+ %% tdx --> tdx + (2/3)
+ %% tdy --> tdy - (2/3)
+ \ifthenelse{\equal{#2}{\no@sidebar}}{}{%
+ \pgfmathsetmacro{\tblh}{\tbl*(0.5)}%
+ \pgfmathsetmacro{\tdx}{2 + \tbs +0.666}%
+ \pgfmathsetmacro{\tdy}{#1 -1+0.5-\tblh -0.666}%
+ \draw[fill=#2] (\tdx,\tdy) -- (\tdx,\tdy + \tbl)
+ -- (\tdx+\tbw,\tdy+\tbl) -- (\tdx+\tbw,\tdy) -- cycle;
+}}
+% \end{macrocode}
+% Now make the RB (RightBack) version
+% bar~1 is at the bottom
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarRBRD}{%
+\TWOside@barRbackRD{2}{\Blt}%
+\TWOside@barRbackRD{1}{\Blb}%
+}
+% \end{macrocode}
+% now do the reverse (BR) = RB
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarBRRD}{\DrawTwoCubeSidebarRBRD}
+% \end{macrocode}
+% Do NOT need to make the join commands (as same as for the RU view)
+%
+%
+%
+%
+% \medskip
+%
+% \subsubsection*{Down-Back horizotal sidebar (RD view)}
+%
+%
+% \begin{macrocode}
+\newcommand{\TWOside@barBbackRD}[2]{%
+ %% #1 = cubie possn no; #2 = colour
+ %% tdx --> tdx+2/3
+ %% tdy --> tdy-2/3
+ \ifthenelse{\equal{#2}{\no@sidebar}}{}{%
+ \pgfmathsetmacro{\tblh}{\tbl*(0.5)}%
+ \pgfmathsetmacro{\tdx}{#1 -1+0.5-\tblh +0.666}%
+ \pgfmathsetmacro{\tdy}{0 -\tbs - \tbw -0.666}%
+ \draw[fill=#2] (\tdx,\tdy) -- (\tdx,\tdy + \tbw)
+ -- (\tdx+\tbl,\tdy+\tbw) -- (\tdx+\tbl,\tdy) -- cycle;
+}}
+% \end{macrocode}
+% Now make the DB (Down-Back) version
+% bar~1 is at the left, 2 on the right (as we look at the cube)
+%
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarDBRD}{%
+ \TWOside@barBbackRD{1}{\Brb}%
+ \TWOside@barBbackRD{2}{\Blb}%
+}
+% \end{macrocode}
+% Now do the reverse (BD) = DB
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarBDRD}{\DrawTwoCubeSidebarDBRD}
+% \end{macrocode}
+%% Now make the join commands
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarDB}[1]{\@join{\DrawTwoCubeSidebarDB}{#1}}
+\newcommand{\DrawTwoCubeSidebarBD}[1]{\@join{\DrawTwoCubeSidebarBD}{#1}}
+% \end{macrocode}
+%
+%
+% \subsubsection{Sidebars: LD view}
+%
+%
+% \medskip
+%
+% \subsubsection*{Front-Up horizotal sidebar (LD view)}
+%
+% But FU (LD view) is the same as for (RU view), (see above)
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarFULD}{\DrawTwoCubeSidebarFURD}
+\newcommand{\DrawTwoCubeSidebarUFLD}{\DrawTwoCubeSidebarUFRD}
+% \end{macrocode}
+%
+% \medskip
+%
+% \subsubsection*{Front-Right vertical sidebar (LD view)}
+%
+% But FR (LDview) is the same as for (LU view), (see above)
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarFRLD}{\DrawTwoCubeSidebarFRLU}
+\newcommand{\DrawTwoCubeSidebarRFLD}{\DrawTwoCubeSidebarRFLU}
+% \end{macrocode}
+%
+%
+%
+% \medskip
+%
+% \subsubsection*{Left-Back vertical sidebar (LD view)}
+%
+% \begin{macrocode}
+\newcommand{\TWOside@barLbackLD}[2]{%
+ %% #1 = cubie possn no, #2 = colour
+ %% tdx --> tdx-2/3
+ %% tdy --> tdy-2/3
+ \ifthenelse{\equal{#2}{\no@sidebar}}{}{%
+ \pgfmathsetmacro{\tblh}{\tbl*(0.5)}%
+ \pgfmathsetmacro{\tdx}{0 - \tbs -\tbw -0.666}%
+ \pgfmathsetmacro{\tdy}{#1 -1+0.5-\tblh -0.666}%
+ \draw[fill=#2] (\tdx,\tdy) -- (\tdx,\tdy + \tbl)
+ -- (\tdx+\tbw,\tdy+\tbl) -- (\tdx+\tbw,\tdy) -- cycle;
+}}
+% \end{macrocode}
+% Now make the LB (LeftBack) version
+% bar~1 is at the bottom
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarLBLD}{%
+ \TWOside@barLbackLD{2}{\Brt}%
+ \TWOside@barLbackLD{1}{\Brb}%
+}
+% \end{macrocode}
+% Now do the reverse (BL) = LB
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarBLLD}{\DrawTwoCubeSidebarLBLD}
+% \end{macrocode}
+% Do NOT need to make the join commands (same as for the LU view)
+%
+%
+%
+% \medskip
+%
+% \subsubsection*{Down-Back horizontal sidebar (LD view)}
+%
+%
+%
+% \begin{macrocode}
+\newcommand{\TWOside@barBbackLD}[2]{%
+ %% #1 = cubie possn no; #2 = colour
+ %% tdx --> tdx-2/3
+ %% tdy --> tdy-2/3
+ \ifthenelse{\equal{#2}{\no@sidebar}}{}{%
+ \pgfmathsetmacro{\tblh}{\tbl*(0.5)}%
+ \pgfmathsetmacro{\tdx}{#1 -1+0.5-\tblh -0.666}%
+ \pgfmathsetmacro{\tdy}{0 -\tbs - \tbw -0.666}%
+ \draw[fill=#2] (\tdx,\tdy) -- (\tdx,\tdy + \tbw)
+ -- (\tdx+\tbl,\tdy+\tbw) -- (\tdx+\tbl,\tdy) -- cycle;
+}}
+% \end{macrocode}
+% Now make the DB (Down-Back) version
+% bar~1 is at the left, 2 on the right (as we look at the cube)
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarDBLD}{%
+\TWOside@barBbackLD{1}{\Brb}%
+\TWOside@barBbackLD{2}{\Blb}%
+}
+% \end{macrocode}
+% Now do the reverse (BD) = DB
+% \begin{macrocode}
+\newcommand{\DrawTwoCubeSidebarBDLD}{\DrawTwoCubeSidebarDBLD}
+% \end{macrocode}
+% Do NOT need to make any join commands (same as for the RD view)
+%
+%
+%
+%
+% \subsection{\hspace{3mm}Hieroglyphs}
+% \label{sec:codehieroglyphs}
+%
+% Not many changes to make (from rubikcube sty). In general we try to
+% keep things fairly intuitive by changing Rubik $\rightarrow$ Two,
+% and changing r $\rightarrow$ t.
+% Note that since this package uses a lot of commands defined in the
+% \texttt{rubikcube} package, eg the `join' utility and the rubikfont,
+% consequently rubikcube sty needs to be loaded when running this package.
+%
+% We only need to make significant changes to the
+% following hieroglyphs: L,R,U,D,Lp,Rp,Up,Dp.
+%
+% Unchanged are: axis rotations (eg Rc) and letter rotations (eg B),
+% so these hieroglyphs just need newdefs making for them;
+% eg trF $\leftarrow$ rrF, etc
+%
+% We need to rename some of the `square' furniture associated with the L,R,U,D etc face
+% rotation hieroglyphs: for example, the D heiroglyph requires the following:
+%{\newline} change rr $\rightarrow$ tr
+%{\newline} change SquareD $\rightarrow$ SquaretD
+%{\newline} change RubikD $\rightarrow$ TwoD
+%{\newline} change textRubikD $\rightarrow$ textTwoD
+%
+% For a TWOcube we only need to make two lines in a square;
+% ie we want to shift the top line down/sideways
+% and shift the bottom line up/sideways by
+% an amount which makes the final position = 1/3 of the square.
+% Since the top and bottom lines (and also the left and right lines)
+% are at 0.25 unit,
+% then the extra distance = 0.25/3 = 0.0833;
+% so for horiz lines we add/subtract @ty, and
+% for vertical lines we add/subtract @tx.
+%
+% \begin{macro}{\@tx}
+% \begin{macro}{\@ty}
+%\begin{macrocode}
+\pgfmathsetmacro{\@tx}{0.0833}
+\pgfmathsetmacro{\@ty}{0.0833}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% We continue to use the rubikfont.
+%
+% \begin{macro}{\@tr}
+% \begin{macro}{\@trp}
+% \begin{macrocode}
+\newcommand{\@tr}[1]{{\@rubikfont #1}}
+\newcommand{\@trp}[1]{{\@rubikfont #1\@rubikprime}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% We need to rename the basic `join' commands: ie change Rubik $\rightarrow$ Two, and
+% change r $\rightarrow$ t, as follows:
+%
+% \begin{macro}{\tr}
+% \begin{macro}{\trh}
+% \begin{macro}{\Two}
+% \begin{macro}{\textTwo}
+% \begin{macrocode}
+\newcommand*{\tr}[1]{\@join{\tr}{#1}}
+\newcommand*{\trh}[1]{\@join{\trh}{#1}}
+\newcommand*{\Two}[1]{\@join{\Two}{#1}}
+\newcommand*{\textTwo}[1]{\@join{\textTwo}{#1}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \subsubsection{\hspace{3mm}Rotation B}
+% \label{sec:coderotationB}
+%
+% \begin{macro}{\trB}
+% \begin{macro}{\trhB}
+% \begin{macro}{\TwoB}
+% \begin{macro}{\textTwoB}
+% \begin{macrocode}
+\newcommand{\trB}{\rrB}
+\newcommand{\trBp}{\rrBp}
+\newcommand{\trhB}{\rrhB}
+\newcommand{\trhBp}{\rrhBp}
+\newcommand{\TwoB}{\RubikB}
+\newcommand{\TwoBp}{\RubikBp}
+\newcommand{\textTwoB}{\textRubikB}
+\newcommand{\textTwoBp}{\textRubikBp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \subsubsection{\hspace{3mm}Rotation D}
+% \label{sec:coderotationD}
+%
+% We need to rename some of the items as follows:
+%{\newline} change rr $\rightarrow$ tr
+%{\newline} change SquareD $\rightarrow$ SquaretD
+%{\newline} change RubikD $\rightarrow$ TwoD
+%{\newline} change textRubikD $\rightarrow$ textTwoD
+%
+% \begin{macro}{\trD}
+% \begin{macro}{\SquaretD}
+% \begin{macro}{\trhD}
+% \begin{macro}{\TwoD}
+% \begin{macro}{\textTwoD}
+% These commands all draw forms which denote the D rotation.
+%
+% Feb 2017 (RWDN): \ added the \cmd{\@tlen} length to the \cmd{\trhD} 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{\trD}{\@tr{D}}
+%%
+\newcommand{\SquaretD}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick] (\@sb,\@sddd - \@ty) -- (\@sbh, \@sddd - \@ty);
+\draw [thick, ->] (\@sb,\@sd + \@ty) -- (\@sbh, \@sd + \@ty);
+\end{tikzpicture}%
+}
+\newcommand{\trhD}{\raisebox{-0.333\height}{\@tlen\SquaretD\@tlen}}
+%%
+\newcommand{\TwoD}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquaretD\\
+\trD%
+\end{minipage}%
+}}
+\newcommand{\textTwoD}{\trD\,\trhD}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Dp}
+%
+% \begin{macro}{\trDp}
+% \begin{macro}{\SquaretDp}
+% \begin{macro}{\trhDp}
+% \begin{macro}{\TwoDp}
+% \begin{macro}{\textTwoDp}
+% These commands all draw forms which denote the Dp rotation.
+% \begin{macrocode}
+\newcommand{\trDp}{\@trp{D}}
+%%
+\newcommand{\SquaretDp}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick] (\@sb,\@sddd - \@ty) -- (\@sbh, \@sddd - \@ty);
+\draw [thick, <-] (\@sb,\@sd + \@ty) -- (\@sbh, \@sd + \@ty);
+\end{tikzpicture}%
+}
+\newcommand{\trhDp}{\raisebox{-0.333\height}{\@tlen\SquaretDp\@tlen}}
+%%
+\newcommand{\TwoDp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquaretDp\\
+\trDp%
+\end{minipage}%
+}}
+\newcommand{\textTwoDp}{\trDp\,\trhDp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{\hspace{3mm}Rotation F}
+%
+% \begin{macro}{\trF}
+% \begin{macro}{\trhF}
+% \begin{macro}{\TwoF}
+% \begin{macro}{\textTwoF}
+% \begin{macrocode}
+\newcommand{\trF}{\rrF}
+\newcommand{\trFp}{\rrFp}
+\newcommand{\trhF}{\rrhF}
+\newcommand{\trhFp}{\rrhFp}
+\newcommand{\TwoF}{\RubikF}
+\newcommand{\TwoFp}{\RubikFp}
+\newcommand{\textTwoF}{\textRubikF}
+\newcommand{\textTwoFp}{\textRubikFp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation L}
+%
+% \begin{macro}{\trL}
+% \begin{macro}{\SquaretL}
+% \begin{macro}{\trhL}
+% \begin{macro}{\TwoL}
+% \begin{macro}{\textTwoL}
+% These commands all draw forms which denote the L rotation.
+% \begin{macrocode}
+\newcommand{\trL}{\@tr{L}}
+%%
+\newcommand{\SquaretL}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick, <-] (\@sd + \@tx, \@sb) -- (\@sd + \@tx, \@sbh);
+\draw [thick] (\@sddd - \@tx, \@sb) -- (\@sddd - \@tx, \@sbh);
+\end{tikzpicture}%
+}
+\newcommand{\trhL}{\raisebox{-0.333\height}{\@tlen\SquaretL\@tlen}}
+%%
+\newcommand{\TwoL}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquaretL\\
+\trL%
+\end{minipage}%
+}}
+\newcommand{\textTwoL}{\trL\,\trhL}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Lp}
+%
+% \begin{macro}{\trLp}
+% \begin{macro}{\SquaretLp}
+% \begin{macro}{\trhLp}
+% \begin{macro}{\TwoLp}
+% \begin{macro}{\textTwoLp}
+% These commands all draw forms which denote the Lp rotation.
+% \begin{macrocode}
+\newcommand{\trLp}{\@trp{L}}
+%%
+\newcommand{\SquaretLp}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick,->] (\@sd + \@tx, \@sb) -- (\@sd + \@tx, \@sbh);
+\draw [thick] (\@sddd - \@tx, \@sb) -- (\@sddd - \@tx, \@sbh);
+\end{tikzpicture}%
+}
+\newcommand{\trhLp}{\raisebox{-0.333\height}{\@tlen\SquaretLp\@tlen}}
+%%
+\newcommand{\TwoLp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquaretLp\\
+\trLp%
+\end{minipage}%
+}}
+\newcommand{\textTwoLp}{\trLp\,\trhLp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \subsubsection{\hspace{3mm}Rotation R}
+%
+% \begin{macro}{\trR}
+% \begin{macro}{\SquaretR}
+% \begin{macro}{\trhR}
+% \begin{macro}{\TwoR}
+% \begin{macro}{\textTwoR}
+% These commands all draw forms which denote the R rotation.
+% \begin{macrocode}
+\newcommand{\trR}{\@tr{R}}
+%%
+\newcommand{\SquaretR}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+%% draw three lines in the square, one with an arrow
+\draw [thick] (\@sd + \@tx, \@sb) -- (\@sd + \@tx, \@sbh);
+\draw [thick, ->] (\@sddd - \@tx, \@sb) -- (\@sddd - \@tx, \@sbh);
+\end{tikzpicture}%
+}
+\newcommand{\trhR}{\raisebox{-0.333\height}{\@tlen\SquaretR\@tlen}}
+%%
+\newcommand{\TwoR}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquaretR\\
+\trR%
+\end{minipage}%
+}}
+\newcommand{\textTwoR}{\trR\,\trhR}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Rp}
+%
+% \begin{macro}{\trRp}
+% \begin{macro}{\SquaretRp}
+% \begin{macro}{\trhRp}
+% \begin{macro}{\TwoRp}
+% \begin{macro}{\textTwoRp}
+% These commands all draw forms which denote the Rp rotation.
+% \begin{macrocode}
+\newcommand{\trRp}{\@trp{R}}
+%%
+\newcommand{\SquaretRp}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick] (\@sd + \@tx, \@sb) -- (\@sd + \@tx, \@sbh);
+\draw [thick, <-] (\@sddd - \@tx, \@sb) -- (\@sddd - \@tx, \@sbh);
+\end{tikzpicture}%
+}
+\newcommand{\trhRp}{\raisebox{-0.333\height}{\@tlen\SquaretRp\@tlen}}
+%%
+\newcommand{\TwoRp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquaretRp\\
+\trRp%
+\end{minipage}%
+}}
+\newcommand{\textTwoRp}{\trRp\,\trhRp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{\hspace{3mm}Rotation U}
+%
+% \begin{macro}{\trU}
+% \begin{macro}{\SquaretU}
+% \begin{macro}{\trhU}
+% \begin{macro}{\TwoU}
+% \begin{macro}{\textTwoU}
+% These commands all draw forms which denote the U rotation.
+% \begin{macrocode}
+\newcommand{\trU}{\@tr{U}}
+%%
+\newcommand{\SquaretU}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick, <-] (\@sb,\@sddd - \@ty) -- (\@sbh, \@sddd - \@ty);
+\draw [thick] (\@sb,\@sd + \@ty) -- (\@sbh, \@sd + \@ty);
+\end{tikzpicture}%
+}
+\newcommand{\trhU}{\raisebox{-0.333\height}{\@tlen\SquaretU\@tlen}}
+%%
+\newcommand{\TwoU}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquaretU\\
+\trU%
+\end{minipage}%%
+}}
+\newcommand{\textTwoU}{\trU\,\trhU}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \subsubsection{\hspace{3mm}Rotation Up}
+%
+% \begin{macro}{\trUp}
+% \begin{macro}{\SquaretUp}
+% \begin{macro}{\trhUp}
+% \begin{macro}{\TwoUp}
+% \begin{macro}{\textTwoUp}
+% These commands all draw forms which denote the Up rotation.
+% \begin{macrocode}
+\newcommand{\trUp}{\@trp{U}}
+%%
+\newcommand{\SquaretUp}{%
+\begin{tikzpicture}[scale=0.5]
+\DrawNotationBox;
+\draw [thick, ->] (\@sb,\@sddd - \@ty) -- (\@sbh, \@sddd - \@ty);
+\draw [thick] (\@sb,\@sd + \@ty) -- (\@sbh, \@sd + \@ty);
+\end{tikzpicture}%
+}
+\newcommand{\trhUp}{\raisebox{-0.333\height}{\@tlen\SquaretUp\@tlen}}
+%%
+\newcommand{\TwoUp}{%
+{\@rubikfont%
+\begin{minipage}{0.6cm}
+\centering%
+\SquaretUp\\
+\trUp%
+\end{minipage}%%
+}}
+\newcommand{\textTwoUp}{\trUp\,\trhUp}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{\hspace{3mm}Axis rotations}
+% \label{sec:codeaxisversions}
+%
+% For completeness we include a \cmd{\textTwo} 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{\textTwo} font argument.
+%
+%
+% \begin{macrocode}
+\newcommand{\trx}{\rrx}
+\newcommand{\trxp}{\rrxp}
+\newcommand{\try}{\rry}
+\newcommand{\tryp}{\rryp}
+\newcommand{\trz}{\rrz}
+\newcommand{\trzp}{\rrzp}
+\newcommand{\trl}{\rrl}
+ \newcommand{\trlp}{\rrlp} %%new
+\newcommand{\trr}{\rrr}
+ \newcommand{\trrp}{\rrrp} %%new
+\newcommand{\tru}{\rru}
+ \newcommand{\trup}{\rrup} %%new
+\newcommand{\trd}{\rrd}
+ \newcommand{\trdp}{\rrdp} %%new
+\newcommand{\trf}{\rrf}
+ \newcommand{\trfp}{\rrfp} %%new
+\newcommand{\trb}{\rrb}
+ \newcommand{\trbp}{\rrbp} %%new
+%
+\newcommand{\trLc}{\rrLc}
+\newcommand{\trLcp}{\rrLcp}
+\newcommand{\trRc}{\rrRc}
+\newcommand{\trRcp}{\rrRcp}
+\newcommand{\trUc}{\rrUc}
+\newcommand{\trUcp}{\rrUcp}
+\newcommand{\trDc}{\rrDc}
+\newcommand{\trDcp}{\rrDcp}
+\newcommand{\trFc}{\rrFc}
+\newcommand{\trFcp}{\rrFcp}
+\newcommand{\trBc}{\rrBc}
+\newcommand{\trBcp}{\rrBcp}
+\newcommand{\trCL}{\rrCL}
+\newcommand{\trCLp}{\rrCLp}
+\newcommand{\trCR}{\rrCR}
+\newcommand{\trCRp}{\rrCRp}
+\newcommand{\trCU}{\rrCU}
+\newcommand{\trCUp}{\rrCUp}
+\newcommand{\trCD}{\rrCD}
+\newcommand{\trCDp}{\rrCDp}
+\newcommand{\trCF}{\rrCF}
+\newcommand{\trCFp}{\rrCFp}
+\newcommand{\trCB}{\rrCB}
+\newcommand{\trCBp}{\rrCBp}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\newcommand{\trhx}{\rrhx}
+\newcommand{\trhxp}{\rrhxp}
+\newcommand{\trhy}{\rrhy}
+\newcommand{\trhyp}{\rrhyp}
+\newcommand{\trhz}{\rrhz}
+\newcommand{\trhzp}{\rrhzp}
+\newcommand{\trhl}{\rrhl}
+ \newcommand{\trhlp}{\rrhlp} % new
+\newcommand{\trhr}{\rrhr}
+ \newcommand{\trhrp}{\rrhrp} % new
+\newcommand{\trhu}{\rrhu}
+ \newcommand{\trhup}{\rrhup} % new
+\newcommand{\trhd}{\rrhd}
+ \newcommand{\trhdp}{\rrhdp} % new
+\newcommand{\trhf}{\rrhf}
+ \newcommand{\trhfp}{\rrhfp} % new
+\newcommand{\trhb}{\rrhb}
+ \newcommand{\trhbp}{\rrhbp} % new
+\newcommand{\trhLc}{\rrhLc}
+\newcommand{\trhLcp}{\rrhLcp}
+\newcommand{\trhRc}{\rrhRc}
+\newcommand{\trhRcp}{\rrhRcp}
+\newcommand{\trhUc}{\rrhUc}
+\newcommand{\trhUcp}{\rrhUcp}
+\newcommand{\trhDc}{\rrhDc}
+\newcommand{\trhDcp}{\rrhDcp}
+\newcommand{\trhFc}{\rrhFc}
+\newcommand{\trhFcp}{\rrhFcp}
+\newcommand{\trhBc}{\rrhBc}
+\newcommand{\trhBcp}{\rrhBcp}
+\newcommand{\trhCL}{\rrhCL}
+\newcommand{\trhCLp}{\rrhCLp}
+\newcommand{\trhCR}{\rrhCR}
+\newcommand{\trhCRp}{\rrhCRp}
+\newcommand{\trhCU}{\rrhCU}
+\newcommand{\trhCUp}{\rrhCUp}
+\newcommand{\trhCD}{\rrhCD}
+\newcommand{\trhCDp}{\rrhCDp}
+\newcommand{\trhCF}{\rrhCF}
+\newcommand{\trhCFp}{\rrhCFp}
+\newcommand{\trhCB}{\rrhCB}
+\newcommand{\trhCBp}{\rrhCBp}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\newcommand{\Twox}{\Rubikx}
+\newcommand{\Twoxp}{\Rubikxp}
+\newcommand{\Twoy}{\Rubiky}
+\newcommand{\Twoyp}{\Rubikyp}
+\newcommand{\Twoz}{\Rubikz}
+\newcommand{\Twozp}{\Rubikzp}
+\newcommand{\Twol}{\Rubikl}
+ \newcommand{\Twolp}{\Rubiklp} % new
+\newcommand{\Twor}{\Rubikr}
+ \newcommand{\Tworp}{\Rubikrp} % new
+\newcommand{\Twou}{\Rubiku}
+ \newcommand{\Twoup}{\Rubikup} % new
+\newcommand{\Twod}{\Rubikd}
+ \newcommand{\Twodp}{\Rubikdp} % new
+\newcommand{\Twof}{\Rubikf}
+ \newcommand{\Twofp}{\Rubikfp} % new
+\newcommand{\Twob}{\Rubikb}
+ \newcommand{\Twobp}{\Rubikbp} % new
+\newcommand{\TwoLc}{\RubikLc}
+\newcommand{\TwoLcp}{\RubikLcp}
+\newcommand{\TwoRc}{\RubikRc}
+\newcommand{\TwoRcp}{\RubikRcp}
+\newcommand{\TwoUc}{\RubikUc}
+\newcommand{\TwoUcp}{\RubikUcp}
+\newcommand{\TwoDc}{\RubikDc}
+\newcommand{\TwoDcp}{\RubikDcp}
+\newcommand{\TwoFc}{\RubikFc}
+\newcommand{\TwoFcp}{\RubikFcp}
+\newcommand{\TwoBc}{\RubikBc}
+\newcommand{\TwoBcp}{\RubikBcp}
+\newcommand{\TwoCL}{\RubikCL}
+\newcommand{\TwoCLp}{\RubikCLp}
+\newcommand{\TwoCR}{\RubikCR}
+\newcommand{\TwoCRp}{\RubikCRp}
+\newcommand{\TwoCU}{\RubikCU}
+\newcommand{\TwoCUp}{\RubikCUp}
+\newcommand{\TwoCD}{\RubikCD}
+\newcommand{\TwoCDp}{\RubikCDp}
+\newcommand{\TwoCF}{\RubikCF}
+\newcommand{\TwoCFp}{\RubikCFp}
+\newcommand{\TwoCB}{\RubikCB}
+\newcommand{\TwoCBp}{\RubikCBp}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\textTwox}{\rrhx}
+\newcommand{\textTwoxp}{\rrhxp}
+\newcommand{\textTwoy}{\rrhy}
+\newcommand{\textTwoyp}{\rrhyp}
+\newcommand{\textTwoz}{\rrhz}
+\newcommand{\textTwozp}{\rrhzp}
+\newcommand{\textTwol}{\rrhl}
+ \newcommand{\textTwolp}{\rrhlp} %new
+\newcommand{\textTwor}{\rrhr}
+ \newcommand{\textTworp}{\rrhrp} %new
+\newcommand{\textTwou}{\rrhu}
+ \newcommand{\textTwoup}{\rrhup} %new
+\newcommand{\textTwod}{\rrhd}
+ \newcommand{\textTwodp}{\rrhdp} %new
+\newcommand{\textTwof}{\rrhf}
+ \newcommand{\textTwofp}{\rrhfp} %new
+\newcommand{\textTwob}{\rrhb}
+ \newcommand{\textTwobp}{\rrhbp} %new
+\newcommand{\textTwoLc}{\rrhLc}
+\newcommand{\textTwoLcp}{\rrhLcp}
+\newcommand{\textTwoRc}{\rrhRc}
+\newcommand{\textTwoRcp}{\rrhRcp}
+\newcommand{\textTwoUc}{\rrhUc}
+\newcommand{\textTwoUcp}{\rrhUcp}
+\newcommand{\textTwoDc}{\rrhDc}
+\newcommand{\textTwoDcp}{\rrhDcp}
+\newcommand{\textTwoFc}{\rrhFc}
+\newcommand{\textTwoFcp}{\rrhFcp}
+\newcommand{\textTwoBc}{\rrhBc}
+\newcommand{\textTwoBcp}{\rrhBcp}
+\newcommand{\textTwoCL}{\rrhCL}
+\newcommand{\textTwoCLp}{\rrhCLp}
+\newcommand{\textTwoCR}{\rrhCR}
+\newcommand{\textTwoCRp}{\rrhCRp}
+\newcommand{\textTwoCU}{\rrhCU}
+\newcommand{\textTwoCUp}{\rrhCUp}
+\newcommand{\textTwoCD}{\rrhCD}
+\newcommand{\textTwoCDp}{\rrhCDp}
+\newcommand{\textTwoCF}{\rrhCF}
+\newcommand{\textTwoCFp}{\rrhCFp}
+\newcommand{\textTwoCB}{\rrhCB}
+\newcommand{\textTwoCBp}{\rrhCBp}
+% \end{macrocode}
+%
+% --------------------------
+% End of this package
+% --------------------------
+% \begin{macrocode}
+%</rubiktwocube>
+% \end{macrocode}
+%
+%
+% \Finale
+%
+\endinput
diff --git a/Master/texmf-dist/source/latex/rubik/rubiktwocube.ins b/Master/texmf-dist/source/latex/rubik/rubiktwocube.ins
new file mode 100644
index 00000000000..650d81b8164
--- /dev/null
+++ b/Master/texmf-dist/source/latex/rubik/rubiktwocube.ins
@@ -0,0 +1,66 @@
+%% rubiktwocube.ins
+%%
+%% --- automatic overwriting of .sty is disabled-------
+%% =========================================================
+%% Authors: RWD Nickalls (dick@nickalls.org)
+%% and Apostolos Syropoulos (asyropoulos@yahoo.com)
+%%
+%%
+%% --------------- start of docstrip commands ------------------
+%%
+\def\batchfile{rubiktwocube.ins}
+\input docstrip.tex
+
+\preamble
+
+-----------------------------------------------------------------
+ Authors: RWD Nickalls (dick@nickalls.org)
+ and Apostolos Syropoulos (asyropoulos@yahoo.com)
+
+ Copyright February 25, 2018 RWD Nickalls and A Syropoulos
+
+ VERSION 5.0
+
+ This work may be distributed and/or modified under the
+ conditions of the LaTeX Project Public License, either
+ version 1.3c of this license or (at your option) any
+ later version: <http://www.latex-project.org/lppl.txt>
+
+ This work consists of the files listed in the README file.
+-----------------------------------------------------------------
+
+ This is a LaTeX/TikZ package for drawing Rubik cubes
+ Please report errors or suggestions for improvement to
+
+ RWD Nickalls (dick@nickalls.org)
+ Apostolos Syropoulos (asyropoulos@yahoo.com)
+
+ This package requires the basic TikZ package to be loaded already
+------------------------------------------------------------------
+\endpreamble
+
+\keepsilent %%disables most of the screen output
+%% \askforoverwritefalse %%enables automatic overwriting of .sty
+\generate{\file{rubiktwocube.sty}{\from{rubiktwocube.dtx}{rubiktwocube}}}
+
+%%now write a screen message for the user
+\obeyspaces
+\Msg{*******************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the *}
+\Msg{* following file into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* rubiktwocube.sty *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file *}
+\Msg{* rubiktwocube.dtx through LaTeX. *}
+\Msg{* For an index, process any filename.idx file by *}
+\Msg{* makeindex -s gind.ist filename *}
+\Msg{* For list of changes, process any filename.glo file *}
+\Msg{* makeindex -s gglo.ist -o filename.gls filename.glo *}
+\Msg{* *}
+\Msg{* Happy TeXing! *}
+\Msg{*******************************************************}
+
+\endbatchfile
+%%------------EOF---------------