% \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
