diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/rubik/rubikexamples.tex |
Initial commit
Diffstat (limited to 'macros/latex/contrib/rubik/rubikexamples.tex')
-rw-r--r-- | macros/latex/contrib/rubik/rubikexamples.tex | 1998 |
1 files changed, 1998 insertions, 0 deletions
diff --git a/macros/latex/contrib/rubik/rubikexamples.tex b/macros/latex/contrib/rubik/rubikexamples.tex new file mode 100644 index 0000000000..7e14e1a6e3 --- /dev/null +++ b/macros/latex/contrib/rubik/rubikexamples.tex @@ -0,0 +1,1998 @@ +%% +%% rubikexamples.tex +%% February 25, 2018 +%% Requires ALL the rubik bundle packages and also the tikz package +%% Part of the Rubik bundle v5.0 (www.ctan.org/pkg/rubik) +%% authors: RWD Nickalls & A Syropoulos +%%--------NOTE------------------------------------------- +%% USAGE: (pdf)latex --shell-escape rubikexamples.tex +%% run three times to get all labels and fig nos correct +%%------------------------------------------------------- +\documentclass[a4paper]{article} + +%------rubik---------- +\usepackage{tikz} %% load tikz BEFORE rubikcube +\usepackage{rubikcube,rubikrotation,rubikpatterns,rubiktwocube} +%---------------------- +\usepackage{url} +\usepackage{ifpdf} +\usepackage{lmodern} +%--------------------- +\ifpdf + \usepackage[verbose]{microtype} + \usepackage{cmap} + \usepackage[pdfencoding=auto]{hyperref} + + \hypersetup{% + pdftitle={rubikexamples.pdf}, + pdfsubject={Rubik cube, Rubik bundle}, + pdfkeywords={Rubik cube LaTeX} + } +\fi +%%------------------- +\pagestyle{myheadings} +\markright{\texttt{rubikexamples.pdf} \ \ +(Rubik bundle v5.0, 2018) \ \ \texttt{www.ctan.org/pkg/rubik}} + +%% increase text height and width +\addtolength{\oddsidemargin}{-1.5cm} +\addtolength{\textwidth}{3cm} +\addtolength{\textheight}{1cm} +%---------------------- +%==========Rubik stuff================ +%----edge sequences for 3x3x3 cubes-------------------------- +\newcommand{\CycleThreeEdgesFlipTwo}{[CycleThreeEdgesFlipTwo],F,R,U,Rp,Up,Fp}% +\newcommand{\cyclethreeedgesfliptwo}{\CycleThreeEdgesFlipTwo}% +% +%----corner sequences-------------------------- +\newcommand{\AllYellow}{[allyellow],R,U,Rp,U,R,Up,Up,Rp}% = SUNE %cross -->allyellow +\newcommand{\allyellow}{\AllYellow}% +\newcommand{\CycleThreeCorners}{[cyclethreecorners],Lp,U,R,Up,L,U,Rp,Up}% +\newcommand{\cyclethreecorners}{\CycleThreeCorners}% +\newcommand{\SwapTwoCorners}{[swaptwocorners],Rp,F,Rp,B2,R,Fp,Rp,B2,R2,Up} +\newcommand{\swaptwocorners}{\SwapTwoCorners} +% +%% brace and bracket macros +\newcommand{\Rubikbracket}[1]{$\left(\mbox{#1}\right)$} +\newcommand{\Rubikbrace}[1]{$\left\{\mbox{#1}\right\}$} +\newcommand{\cubenumber}[1]{\strut\raisebox{1cm}{#1}} +%----------------- +% +\begin{document} +% +\ifpdf\pdfbookmark[1]{Title}{Title}\fi +\title{Rubik examples\\ +\smallskip\normalsize\texttt{www.ctan.org/tex-archives/macros/latex/contrib/rubik/rubikexamples.pdf} +\,\footnote{This file is part of the Rubik bundle v5.0. To generate this file, +use the following command: \newline \texttt{\$ pdflatex --shell-escape rubikexamples.tex}}} +\author{RWD Nickalls\,\footnote{email: \textsf{dick@nickalls.org}}% + \ \ \& A Syropoulos\,\footnote{email: \textsf{asyropoulos@yahoo.com}}} +\date{25 February, 2018 (Rubik bundle v5.0)} +\maketitle +\tableofcontents + +\pagebreak +%%---------------------- +\section{Preliminaries} +These examples were generated using the \TeX\ +Rubik bundle\,\footnote{\url{http://www.ctan.org/pkg/rubik}} v5.0. +They assume some familiarity with the four packages \textsc{rubikcube}, +\textsc{rubikrotation}, \textsc{rubikpatterns} and \textsc{rubiktwocube}. +For~documentation see the following files: + +\begin{quote} +\begin{verbatim} +rubikcube.pdf 3x3x3 documentation +rubikrotation.pdf commands for implementing rotation sequences +rubikrotationPL.pdf documentation of rubikrotation.pl (Perl program) +rubikpatterns.pdf small database of well-known 3x3x3 configurations +rubikpatternsLIST.pdf shows all configurations in the rubikpatterns database +rubiktwocube.pdf 2x2x2 documentation +\end{verbatim} +\end{quote} + +This file requires the following packages: \texttt{tikz, rubikcube, rubikrotation, +rubikpatterns, rubiktwocube}; note that the \texttt{tikz} package must be loaded +\textit{before} the \texttt{rubikcube} package. + +This file needs to be run using the \verb!--shell-escape! command-line option; +for example: +\begin{quote} +\begin{verbatim} +pdflatex --shell-escape rubikexample.tex +\end{verbatim} +\end{quote} +This is because nearly all the examples make use of the \verb!\RubikRotation! +command, which calls the Perl script \texttt{rubikrotation.pl}. +If you do forget to use the \verb!--shell-escape! command-line switch, +the file will still run, but all the cubes will remain in the initial +unprocessed configuration\,\footnote{As a quick check, run this file +(\texttt{rubikexamples.tex}) in a separate directory and look at Figure~1; +if this appears as a `solved' cube then your system has failed to call the Perl +script \texttt{rubikrotation.pl} correctly for some reason. The most likely +causes of this are (a)~failure to invoke the \texttt{--shell-escape} command-line +option correctly, or (b)~failure to use a configuration file correctly +(ie your system can't find the Perl program)---search the \texttt{.log} file +to see whether the file \texttt{rubikrotation.pl} has been used.}. + +\subsection{3x3x3 vs 2x2x2 command names} +The introduction of the \textsc{rubiktwocube} package (Rubik bundle v5) +has necessitated a few command name changes in order to avoid confusion +(see the \textsc{rubikcube} package documentation \S\,3.1 for details). +Consequently, command names containing the word `\texttt{Rubik}' denote +a 3x3x3 cube action; similarly those containing the word `\texttt{Two}' +denote a 2x2x2 cube action. + +\subsection{Environments} +When using the Rubik bundle one sometimes needs to be mindful of the various +\LaTeX\ environments in which Rubik commands are placed (e.g.,~the figure, +minipage and TikZ picture environments), since these environments restrict +the actions of commands they contain to the particular environment. +The \verb!\ShowCube! command is also relevant here, since it is a +minipage-wrapper for the TikZ picture environment. Only Rubik \verb!\Draw..! +commands and TikZ commands (e.g.,~\verb!\draw! and \verb!\node!) +actually need to be inside a TikZ picture environment, and hence +inside a \verb!\ShowCube! command. + +This issue arises because the Rubik bundle allows you to create figures +showing different stages during a sequence of rotations. Consequently +the effects of commands executed inside an environment (especially +commands which determine the colour-state or rotations), may not be +apparent to subsequent commands outside that particular environment. +See Example~3 for an illustration of how to handle environments. + +\pagebreak + +%%------------------ +\section{RubikCube examples (3x3x3)} + +\subsection{Sixspot} +\typeout{---Example (sixspot)} + +In Figure~\ref{fig:sixspot} we show the so-called ``sixspot'' configuration, + generated from a solved cube using the rotation sequence +\rr{U}, \rr{Dp}, \rr{R}, \rr{Lp}, \rr{F}, \rr{Bp}, \rr{U}, \rr{Dp}. + +%%--------FIGURE 1 ----------- +\begin{figure}[hbt] +\centering +\RubikCubeSolvedWY +\RubikRotation{\sixspot} +\ShowCube{7cm}{0.7}{\DrawRubikCubeSF} +\caption{\label{fig:sixspot}The `sixspot' configuration.} +\end{figure} +%---------------- + +{\noindent}Creating a macro to hold a rotation sequence greatly +facilitates their use, as follows: +\begin{quote} +\begin{verbatim} +\newcommand{\sixspot}{[sixspot],U,Dp,R,Lp,F,Bp,U,Dp} +\end{verbatim} +\end{quote} +We can now process this sequence using its macro name as an argument +for the \verb!\RubikRotation! command. The code used for the above +Figure uses the \verb!\ShowCube{}{}{}! command for which \verb!#1! +is the minipage width, \verb!#2! is the tikzpicture scale factor (0--1), +and \verb!#3! can include \textsc{rubikcube} package \verb!\Draw..! +commands, and any commands which are valid for use in a TikZ +\texttt{tikzpicture} environment. The code for the above figure is +as follows: + +\begin{quote} +\begin{verbatim} +\begin{figure}[hbt] + \centering + \RubikCubeSolvedWY + \RubikRotation{\sixspot} + \ShowCube{7cm}{0.7}{\DrawRubikCubeSF} +\caption{...} +\end{figure} +\end{verbatim} +\end{quote} + +Note that the sixspot sequence is a so-called `order~3' sequence, which +means that running the `sixspot' sequence 3 times returns the cube +to its original `solved' state. The~command for processing it three +times is \verb!\RubikRotation[3]{\sixspot}!. + +Note that the semi-flat form of the cube here is generated by the + \verb!\DrawRubikCubeSF! command, where the terminal SF denotes + the Semi-Flat form. To draw it completely flat use a terminal F, + e.g.,~\verb!\DrawRubikCubeF! (see Figure~\ref{fig:sixspotE}). + +\subsubsection{Log-file extract} +Users may find it instructive to inspect the the log-file and +follow the dynamic interaction between \LaTeX\ and the Perl script. +This is easy to follow, since output by \texttt{rubikrotation.sty} +is prefixed by 3 dashes (\verb!---!), while output by the Perl script +is prefixed by 3 dots (\verb!...!). Search for the keyword `Example', +as this is written to the log-file at the start of each example. + +The following is part of the log-file extract associated with Example~1. + +\begin{quote} +\begin{verbatim} +---Example (sixspot) + +---TeX process--------------------------- +---script = rubikrotation.sty v5.0 (2018/02/25) +---NEW rotation command +---command = RubikRotation[1]{[SixSpot],U,Dp,R,Lp,F,Bp,U,Dp,<(8q*, 8f*)>} +---writing current cube state to file rubikstate.dat +\openout7 = `rubikstate.dat'. + +\ourRRcounter=\count134 +---CALLing Perl script (rubikrotation.pl) +runsystem(perl $HOME/RubikTeX/PERLstuff/dtx-rubikrotation/rubikrotation.pl + -i rubikstate.dat -o rubikstateNEW.dat)...executed. + +---inputting NEW datafile (data written by Perl script) +(./rubikstateNEW.dat + +...PERL process.................................. +...script = rubikrotation.pl v5.0 (25 February 2018) +...reading the current cube state (from File: rubikstate.dat) +... +...command = cubesize,three +...cube = THREEcube +... +......up,W,W,W,W,W,W,W,W,W +....down,Y,Y,Y,Y,Y,Y,Y,Y,Y +....left,B,B,B,B,B,B,B,B,B +...right,G,G,G,G,G,G,G,G,G +...front,O,O,O,O,O,O,O,O,O +....back,R,R,R,R,R,R,R,R,R +... +...rotation keyword +...checking state of cube +...cubiesum = 54 (Red=9, Or=9, Ye=9, Gr=9, Bl=9, Wh=9, X=0) +... +...command = rotation,[SixSpot],U,Dp,R,Lp,F,Bp,U,Dp,<(8q*, 8f*)> +...dataline = rotation,[SixSpot],U,Dp,R,Lp,F,Bp,U,Dp,<(8q*; 8f*)> +...[SixSpot] is a label OK +...rotation U, OK +...rotation Dp, OK +...rotation R, OK +...rotation Lp, OK +...rotation F, OK +...rotation Bp, OK +...rotation U, OK +...rotation Dp, OK +...writing new cube state to file rubikstateNEW.dat +...SequenceName = SixSpot +...SequenceInfo = (8q*; 8f*) +...SequenceShort = [SixSpot],U,Dp,R,Lp,F,Bp,U,Dp +...SequenceLong = U,Dp,R,Lp,F,Bp,U,Dp +) +\end{verbatim} +\end{quote} + +\pagebreak + +\subsection{ShowErrors} +\typeout{---Example (ShowRubikErrors)} + + In this example we demonstrate the use of the \verb!\ShowErrors! + command\,\footnote{ The \texttt{ {\textbackslash}ShowErrors} command + replaces the earlier \texttt{{\textbackslash}ShowRubikErrors} command + which is now deprecated. However, the earlier command is still + supported (for now) for backward compatibility.}, + which places a copy of the Perl output file \verb!rubikstateERRORS.dat! + underneath the graphic so you can see a list of all the errors, if any. + Note that this example is similar to the previous one except that we have + introduced several errors---e.g.,~bad minipage width, typos, as well as + some animals---into the rotation sequence). + It is important to note that the \verb!\ShowErrors! command must be + placed \textit{after} the TikZ picture environment (i.e.,~in this case after +the \verb!\ShowCube! command), or even at the end of the document. +Note that full details of all errors are also included in the .log file (search for \texttt{*ERR}). + +%%--------FIGURE 2 ----------- +% +\RubikCubeSolvedWY +\RubikRotation{[sixspot],U,Dp,R,Lp,F,Bp,U,Dpppp,cat,dog} +\begin{figure}[hbt] +\centering +\ShowCubeF{4.5cm}{0.5}{\DrawRubikCubeF} +\ShowErrors +\parbox{0.8\textwidth}{% +\caption{\label{fig:sixspotE}The same `sixspot' sequence of rotations as shown +in Example~1, but now with some errors (wrong minipage width, typos and some +animals\,!) in the rotation sequence (it \textit{should} be just +\texttt{U,Dp,R,Lp,F,Bp,U,Dp}).}} +\end{figure} +% +{\noindent}In this example we have used the F version of the \verb!\ShowCube! +command (\verb!\ShowCubeF!) which places an fbox around the image so you can see the +extent of any white space etc. This reveals that the set minipage-width ($4.5$cm) in +the \verb!\ShowCubeF! command---see code below---is too narrow: it should be +5cm ($10 \times 0.5$) to just include the whole image (i.e.,~$10 \times$ the TikZ +scale-factor in this case). +Once fixed, we can remove the F from the \verb!\ShowCubeF! command. +Note also that only `\verb!\Draw...!' commands really need to be inside the TikZ +picture environment (i.e.,~inside the \verb!\ShowCube! command). The above figure +was generated by the following code. +%----------------- +\begin{quote} +\begin{verbatim} +\RubikCubeSolvedWY +\RubikRotation{[sixspot],U,Dp,R,Lp,F,Bp,U,Dpppp,cat,dog} +\begin{figure}[hbt] + \centering + \ShowCubeF{4.5cm}{0.5}{\DrawRubikCubeF} + \ShowErrors +\caption{....} +\end{figure} +\end{verbatim} +\end{quote} +Even if the \verb!\ShowErrors! command is not used, it is always a good idea +to check the file \verb!rubikstateERRORS.dat! after a \LaTeX\ run, since this +file will also reveal any errors. + + +\pagebreak +%---------------------- + +\subsection{Environments} +\typeout{---Example (Environments)} + + +In this example we highlight the fact that Rubik commands used inside a \LaTeX\ +environment remain local to that environment, and how this can sometimes be +problematic. Commands whose reach is meant to be more global need to be +executed outside such environments, where they can implement global colour +settings, which will then be accessible to subsequent \verb!\Draw..! commands. + +Since we are drawing images, this is primarily an issue +with the \verb!minipage!, \verb!figure!, and TikZ picture environments. +Consequently, it is generally best when drawing a sequence of cubes to reserve +the TikZ picture environment only for \verb!\Draw..! commands and TikZ +commands. Importantly, this also applies to our main display tool the \verb!\ShowCube! +command, since this is a minipage-wrapper for the TikZ picture environment +(see the \textsc{rubikcube} package documentation). + +In this example the first cube (9a) uses a \verb!\RubikCubeSolvedWY! command +\textit{inside} a \verb!\ShowCube! environment. However, if we now perform the +rotation \textRubik{R}\ (using the command \verb!\RubikRotation{R}!) this results +in a quite unexpected effect on cube (9b) (and obviously not correct). +This is because the action of the initial \verb!\RubikCubeSolved! command + (setting a new colour-state) is not visible outside its \verb!\ShowCube! + environment, and hence the subsequent \verb!\RubikRotation{R}! command is unaware + of this earlier attempt to update the global colour-state information. + It turns out that the internal colour-state was actually last updated following + the action of the \textbackslash\texttt{RubikRotation\{[sixspot],....\}} + command used in Example~2, being the last colour-state command executed + \textit{outside} an environment (a \texttt{figure} environment in that + example). Consequently, the strange cube 9b is not what we expected. + +\medskip +\noindent% +\cubenumber{9a}% +\ShowCube{2cm}{0.5}{% + \RubikCubeSolvedWY% + \DrawRubikCubeRU}% +\quad\Rubik{R}% +\RubikRotation{R}% +\cubenumber{9b}% +\ShowCube{2cm}{0.5}{\DrawRubikCubeRU}% +%--------------- +\hspace{5mm} +\begin{minipage}{0.5\textwidth} +\begin{verbatim} +\usepackage{tikz,rubikcube,rubikrotation} +\newcommand{\cubenumber}[1]{\strut\raisebox{1cm}{#1}} +... +\cubenumber{9a}% +\ShowCube{2cm}{0.5}{% + \RubikCubeSolvedWY% + \DrawRubikCubeRU% + }% +\quad\Rubik{R}% +\RubikRotation{R}% +\cubenumber{9b}% +\ShowCube{2cm}{0.5}{\DrawRubikCubeRU}% +\end{verbatim} +\end{minipage} + +\bigskip + +If we now bring the \verb!\RubikCubeSolvedWY! command out of the \verb!\ShowCube! +environment and place it \textit{before} the \verb!\ShowCube! command (see cubes 9c, 9d), +then its colour `state' information becomes globally accessible (i.e.,~colour-state +gets updated) and therefore gets used by the subsequent \verb!\RubikRotation{R}! +command, and hence the cube (9d) is now rendered correctly. + +\bigskip + +\noindent% +\cubenumber{9c}% +\RubikCubeSolvedWY% +\ShowCube{2cm}{0.5}{\DrawRubikCubeRU}% +\quad\Rubik{R}% +\RubikRotation{R}% +\cubenumber{9d}% +\ShowCube{2cm}{0.5}{\DrawRubikCubeRU}% +%--------------- +\hspace{5mm} +\begin{minipage}{0.5\textwidth} +\begin{verbatim} +\cubenumber{9c}% +\RubikCubeSolvedWY% +\ShowCube{2cm}{0.5}{\DrawRubikCubeRU}% +\quad\Rubik{R}% +\RubikRotation{R}% +\cubenumber{9d}% +\ShowCube{2cm}{0.5}{\DrawRubikCubeRU}% +\end{minipage} +\end{verbatim} +\end{minipage} + +\bigskip + +Note that the horizontal space occupied by \texttt{9d} is almost exactly +the same as \verb!\quad!, and so we don't need to include any additional +space before the \verb!\cubenumber{9d}! command. + + + +\pagebreak +%---------------------- +\subsection{Coordinates} +\typeout{---Example (coordinates)} + + +For all cubes the origin of coordinates is defined as the bottom left corner of +the \textsc{front} face. Consequently, it is easy to determine the coordinates +of points and hence draw lines, circles, and place lettering or other objects +using the standard TikZ \verb!\draw..! and \verb!\node..! commands. Note that for +convenience point $P$ (bottom back left corner) is designed to be $(-1,-1)$ +on the 2D view. (The~following diagram is Fig~1 from the \textsc{rubikcube} +package documentation). + +\begin{figure}[hbt] +\centering +\RubikFaceFrontAll{X} % X = default = grey +\ShowCube{5.6cm}{0.7}{% + \DrawRubikFaceFront + +\draw[line join=round,line cap=round,ultra thick] (0,0) -- (0,4); % Y +\draw[line join=round,line cap=round,ultra thick] (0,0) -- (4,0); % X + +%draw labels +\node (Ylabel) at (-0.35, 3.8) {$Y$}; +\node (Xlabel) at ( 3.8, -0.4) {$X$}; + +%%----------draw the Rubik faces-------- +%% outline Front face +\draw[line join=round,line cap=round,ultra thick]% + (0,3) -- (-1,2) -- (-1,-1) -- (2,-1) -- (3,0); +%% +%% outline Down face +\draw[line join=round,line cap=round,ultra thick]% + (-1,-1) -- (0, 0); +%% +%% +%% draw labels +\node (Y0) at (-0.4, 0) [blue]{$0$}; +\node (Y1) at (-0.4, 1) [blue]{$1$}; +\node (Y2) at (-0.4, 2) [blue]{$2$}; +\node (Y3) at (-0.4, 3) [blue]{$3$}; +%% +\node (X0) at (0, -0.5) [blue]{$0$}; +\node (X1) at (1, -0.5) [blue]{$1$}; +\node (X2) at (2, -0.5) [blue]{$2$}; +\node (X3) at (3, -0.5) [blue]{$3$}; +%% +\node (P) at (-2.4, -1) [blue]{$P\,(-1,-1)$}; +} +\end{figure} + +{\noindent}The code for the figure is given below. + +We draw everything in the \verb!\ShowCube! environment; the \textsc{front} face +in grey (colour code = \texttt{X}) using the Rubik command +\verb!\DrawRubikFlatFront!, and then draw all the lines and text using standard +TikZ commands. The correct minipage-width argument (5.6cm) for the +\verb!\ShowCube! command is determined by trial-and-error, using the `fbox' +form of the command (\verb!\ShowCubeF!), and then the `F' is removed +($\rightarrow$ \verb!\ShowCube!). In order to avoid confusion, all Rubik commands +start with a capital letter (e.g.,~\verb!\Draw..!), while all TikZ commands +start with a lower-case letter (e.g.,~\verb!\draw..!). + +\begin{quote} +\begin{verbatim} +\begin{figure}[hbt] +\centering +\RubikFaceFrontAll{X}% X = default non-colour (grey) +\ShowCube{5.6cm}{0.7}{% + \DrawRubikFaceFront + \draw[line join=round,line cap=round,ultra thick] (0,0) -- (0,4);% Yaxis + \draw[line join=round,line cap=round,ultra thick] (0,0) -- (4,0);% Xaxis + \node (Ylabel) at (-0.35, 3.8) {$Y$}; + \node (Xlabel) at ( 3.8, -0.4) {$X$}; + %% outline Left and Down faces + \draw[line join=round,line cap=round,ultra thick]% + (0,3) -- (-1,2) -- (-1,-1) -- (2,-1) -- (3,0); + \draw[line join=round,line cap=round,ultra thick]% + (-1,-1) -- (0, 0); + \node (Y0) at (-0.4, 0) [blue]{$0$}; + \node (Y1) at (-0.4, 1) [blue]{$1$}; + \node (Y2) at (-0.4, 2) [blue]{$2$}; + \node (Y3) at (-0.4, 3) [blue]{$3$}; + \node (X0) at (0, -0.5) [blue]{$0$}; + \node (X1) at (1, -0.5) [blue]{$1$}; + \node (X2) at (2, -0.5) [blue]{$2$}; + \node (X3) at (3, -0.5) [blue]{$3$}; + \node (P) at (-2.4, -1) [blue]{$P\,(-1,-1)$}; + } +\end{figure} +\end{verbatim} +\end{quote} + + +\pagebreak + +%---------------------- +\subsection{Face notation} +\typeout{---Example (face notation)} + +The following diagram is Fig~2 from the \textsc{rubikcube} package documentation. + +\begin{figure}[htb] +\centering% +\RubikFaceUpAll{Y} +\RubikFaceFrontAll{G} +\RubikFaceRightAll{O} +\ShowCubeF{5cm}{0.6}{% +\DrawRubikCubeRU% +%%----------------- + +%% Right +\draw[line width=2pt,color=blue,->] (3.5,2) -- (5.3, 2); +\node (R) at (4.6, 2.5) [blue]{\textbf{\textsf{R}}}; +\node (x) at (5.8, 2) [blue]{\textbf{\textsf{x}}}; + +%%Left +\draw[line width=2pt,color=blue] (-0.2,2) -- (-1.5, 2); +\node (L) at (-1.1, 2.5) [blue]{\textbf{\textsf{L}}}; + +%%Up +\draw[line width=2pt,color=blue,->] (2, 3.5) -- (2, 5.5); +\node (U) at (1.4, 4.7) [blue]{\textbf{\textsf{U}}}; +\node (y) at (2, 6.1) [blue]{\textbf{\textsf{y}}}; + +%%Down +\draw[line width=2pt,color=blue] (2, -0.2) -- (2, -1.5); +\node (D) at (2.6, -1.1) [blue]{\textbf{\textsf{D}}}; + + +%%Front +\draw[line width=2pt,color=blue,->] (1.5, 1.5) -- (0, -1); +\node (F) at (0.7, -0.7) [blue]{\textbf{\textsf{F}}}; +\node (z) at (-0.3, -1.4) [blue]{\textbf{\textsf{z}}}; + +%%Back +\draw[line width=2pt,color=blue] (3.2, 4.2) -- (4, 5.5); +\node (B) at (4.4, 5) [blue]{\textbf{\textsf{B}}}; +%% +} +\end{figure} + +{\noindent}The code for the figure is as follows +(the origin $(0,0)$ is at the bottom left corner of the \textsc{front} (green) face). + +\begin{quote} +\begin{verbatim} +\begin{figure}[htb] +\centering% +\RubikFaceUpAll{Y} +\RubikFaceFrontAll{G} +\RubikFaceRightAll{O} +\ShowCubeF{5cm}{0.6}{% + \DrawRubikCubeRU% + %% Right + \draw[line width=2pt,color=blue,->] (3.5,2) -- (5.3, 2); + \node (R) at (4.6, 2.5) [blue]{\textbf{\textsf{R}}}; + \node (x) at (5.8, 2) [blue]{\textbf{\textsf{x}}}; + %%Left + \draw[line width=2pt,color=blue] (-0.2,2) -- (-1.5, 2); + \node (L) at (-1.1, 2.5) [blue]{\textbf{\textsf{L}}}; + %%Up + \draw[line width=2pt,color=blue,->] (2, 3.5) -- (2, 5.5); + \node (U) at (1.4, 4.7) [blue]{\textbf{\textsf{U}}}; + \node (y) at (2, 6.1) [blue]{\textbf{\textsf{y}}}; + %%Down + \draw[line width=2pt,color=blue] (2, -0.2) -- (2, -1.5); + \node (D) at (2.6, -1.1) [blue]{\textbf{\textsf{D}}}; + %%Front + \draw[line width=2pt,color=blue,->] (1.5, 1.5) -- (0, -1); + \node (F) at (0.7, -0.7) [blue]{\textbf{\textsf{F}}}; + \node (z) at (-0.3, -1.4) [blue]{\textbf{\textsf{z}}}; + %%Back + \draw[line width=2pt,color=blue] (3.2, 4.2) -- (4, 5.5); + \node (B) at (4.4, 5) [blue]{\textbf{\textsf{B}}}; + } +\end{figure} +\end{verbatim} +\end{quote} + + +\pagebreak + +%---------------------- +\subsection{Grey cube} +\label{sec:greycube} +\typeout{---Example (grey cube)} + +When explaining elementary layer-1 moves, it can be useful to use the `grey cube' +(\verb!\RubikCubeGreyWY!) ---White opposite Yellow--- as this sets up only +the central cubie on each face. +We have shown the first cube here in Semi-Flat (SF) mode simply to show how the grey +cube is configured (note that a WB version (\verb!\RubikCubeGreyWB!) +and an `all-grey' version (\verb!\RubikCubeAllGrey!) are also available. +Note that all these grey cube commands will also accept +the word `gray' (to be consistent with TikZ). + +In this example, we show how to position a single `flipped' white/orange edge +cubie in the top layer. + +\begin{figure}[hbt] + +\centering% +\RubikCubeGreyWY% + +\RubikFaceUp{X}{X}{X}% + {X}{W}{O}% + {X}{X}{X}% + +\RubikFaceRight{X}{W}{X} + {X}{G}{X} + {X}{X}{X} +% +\cubenumber{1}% +\ShowCube{5cm}{0.5}{\DrawRubikCubeSF}% +%------------------ +\quad\Rubik{Rp}\RubikRotation{Rp} +\cubenumber{2}% +\ShowCube{2cm}{0.5}{\DrawRubikCube}% +%----------------------- +\quad\Rubik{Fp}\RubikRotation{Fp} +\cubenumber{3}% +\ShowCube{2cm}{0.5}{\DrawRubikCube}% +%----------------------- +\end{figure} + + +{\noindent}The code for the figure is given below. +After setting up the first cube, we then just use the \verb!\RubikRotation! +command to generate the remaining cubes. +The colours are coded as follows: R~(red), O~(orange), Y~(yellow), +G~(green), B~(blue), W~(white), and X~(grey). + +\begin{quote} +\begin{verbatim} +\usepackage{tikz,rubikcube,rubikrotation} +\newcommand{\cubenumber}[1]{\strut\raisebox{1cm}{#1}} +... +\begin{figure}[hbt] +\centering +% set up the first cube +\RubikCubeGreyWY% +\RubikFaceUp{X}{X}{X}% + {X}{W}{O}% + {X}{X}{X}% + +\RubikFaceRight{X}{W}{X} + {X}{G}{X} + {X}{X}{X} +\cubenumber{1}% +\ShowCube{5cm}{0.5}{\DrawRubikCubeSF}% +% +\quad\Rubik{Rp}\RubikRotation{Rp} +\cubenumber{2}% +\ShowCube{2cm}{0.5}{\DrawRubikCube}% +% +\quad\Rubik{Fp}\RubikRotation{Fp} +\cubenumber{3}% +\ShowCube{2cm}{0.5}{\DrawRubikCube}% +\end{figure} +\end{verbatim} +\end{quote} + + +\pagebreak + +%------------------------------- +\subsection{Scramble a cube} +\label{sec:scrambleacube} +\typeout{---Example (scramble a cube)} + +In this example we use the \verb!\RubikRotation! command to scramble a `solved' +Rubik cube via a sequence of 120 random rotations, using the following command +(the details of the process can be seen in the \texttt{.log} file): +\begin{quote} +\begin{verbatim} +\RubikRotation{random,120} +\end{verbatim} +\end{quote} +On this occasion we draw the cube Flat (F) using the command \verb!\DrawRubikCubeF!. +In this example, we also make use of the \verb!\SaveRubikState{}! command to save +the configuration (state) displayed here in Figure~3 to a file +(\texttt{rubikexampfig3.tex}) using \verb!\SaveRubikState{rubikexampfig3.tex}!, +so we can display the same cube configuration later but in a different format +(we show it again in the following example (Example~\ref{sec:saverubikstate}). +Note that since we are using a random sequence, it follows that each +time this file is run not only will a visually different cube be generated, +but the same state will be shown both +here and in Example~\ref{sec:saverubikstate}. +%%--------FIGURE 3 ----------- +\begin{figure}[hbt] + \centering + \RubikCubeSolvedWY + \RubikRotation{random,120} + \SaveRubikState{rubikexampfig3.tex} + \ShowCubeF{6cm}{0.5}{\DrawRubikCubeF} +\parbox{0.7\textwidth}{% +\caption{\label{fig:randomone}This shows a cube generated by 120 random rotations}} +\end{figure} +%---------------- +\begin{quote} +\begin{verbatim} +\usepackage{tikz,rubikcube,rubikrotation} +... +\begin{figure}[hbt] + \centering\RubikCubeSolvedWY + \RubikRotation{random,120} + \SaveRubikState{rubikexampfig3.tex} + \ShowCubeF{6cm}{0.5}{\DrawRubikCubeF} +\caption{....} +\end{figure} +\end{verbatim} +\end{quote} + +{\noindent}Q: How do we determine the minipage-width ($7.2$cm) in the +\verb!\ShowCube! command? + +\smallskip + +{\noindent}A: The object is 12~cubie squares wide. Since the TikZ scale-factor +argument of the \verb!\ShowCube! command (cms/unit length) in this +case is set to~$0.5$, then the true width of the image will +be $12 \times 0.5 = 6$\,cm. Note that here we have used the \verb!\ShowCubeF! +command and so we can see that this is correct. Changing the scale-factor will +change the image size and hence a new width argument will be required to just fit +the image. + +Note that in this particular case (where there is only a single image in the +`figure' environment), since the \verb!\ShowCube! command places the image +(in a TikZ picture environment) centrally inside a minipage, the image will +in fact be centrally placed in the \verb!\textwidth! provided the image +is \textit{smaller} than the fbox---i.e.,~if we used instead a minipage-width of, +say, 12\,cm the image would still appear centred in the \verb!\textwidth! in +this case. However, when there are several images in the `figure', then the spacing +may appear strange unless each image closely fits its own minipage-width etc. +It is often useful, therefore, to check the size of the fbox (using the +\verb!\ShowCubeF! command) as we have done here. + + +\pagebreak + +%---------------------- +\subsection{SaveRubikState} +\label{sec:saverubikstate} +\typeout{---Example (SaveRubikState)} + +In this example we display a cube having the same colour state as that shown in +the previous example (Example~\ref{sec:scrambleacube}) ---see Figure~\ref{fig:randomone}. +The cube's colour state was saved from the previous example using the command +\verb!\SaveRubikState{rubikexampfig3.tex}!, and then input here +using the command \verb!\input{rubikexampfig3.tex}!. These commands therefore allow the +state of a previous cube to be saved to a file, and then displayed again +later in a different format. + +%%-----------FIGURE 4 ----------- +\begin{figure}[hbt] + \centering + \input{rubikexampfig3.tex} + \ShowCube{4cm}{0.8}{\DrawRubikCubeLD} +\parbox{0.7\textwidth}{% + \caption{\label{fig:randomtwo} This shows a Rubik cube in exactly the same + colour state as the one shown in Figure~\ref{fig:randomone}, but here displayed + as a cube seen from the LD (Left-Down) viewpoint.}% +}% +\end{figure} + +%%--------------------------------- +\begin{quote} +\begin{verbatim} +\usepackage{tikz,rubikcube,rubikrotation} +... +\begin{figure}[hbt] + \centering + \input{rubikexampfig3.tex} + \ShowCube{4cm}{0.8}{\DrawRubikCubeLD} + \parbox{0.7\textwidth}{% + \caption{....}% + }% +\end{figure} +\end{verbatim} +\end{quote} + +\noindent\textsc{note}: The command \verb!\SaveRubikState{}! is part of the +\textsc{rubikrotation} package; see the documentation for further details. + + +\pagebreak + +%---------------------- +\subsection{Series of cubes} +\typeout{---Example (series of cubes)} + +Here we show a convenient way of displaying a series of small cubes showing +the action of a sequence of rotations (\rr{U}, \rr{R}, \rr{F}) on a solved cube. + +\begin{figure}[hbt] +\centering +\RubikCubeSolvedWY% +\ShowCube{2cm}{0.5}{\DrawRubikCubeRU}% +\quad\Rubik{U}\quad% +\RubikRotation{U}% +\ShowCube{2cm}{0.5}{\DrawRubikCubeRU}% +\quad\Rubik{R}\quad% +\RubikRotation{R}% +\ShowCube{2cm}{0.5}{\DrawRubikCubeRU}% +\quad\Rubik{F}\quad% +\RubikRotation{F}% +\ShowCube{2cm}{0.5}{\DrawRubikCubeRU}% +\caption{The rotations \rr{U}, \rr{R}, \rr{F}\ on a solved cube.} +\end{figure} + +{\noindent}The code for the above sequence is as follows: +\begin{quote} +\begin{verbatim} +\usepackage{tikz,rubikcube,rubikrotation} +... +\begin{figure}[hbt] + \centering% + \RubikCubeSolvedWY% + \ShowCube{2cm}{0.5}{\DrawRubikCubeRU}% + \quad\Rubik{U}\quad% + \RubikRotation{U}% + \ShowCube{2cm}{0.5}{\DrawRubikCubeRU}% + \quad\Rubik{R}\quad% + \RubikRotation{R}% + \ShowCube{2cm}{0.5}{\DrawRubikCubeRU}% + \quad\Rubik{F}\quad% + \RubikRotation{F}% + \ShowCube{2cm}{0.5}{\DrawRubikCubeRU}% +\caption{The rotations \rr{U}, \rr{R}, \rr{F}\ on a solved cube.} +\end{figure} +\end{verbatim} +\end{quote} + +{\noindent}\textsc{Note} 1: We start with the White-opposite-Yellow (WY) +solved cube, using the command \verb!\RubikCubeSolvedWY!. +A White-opposite-Blue (WB) solved cube is available as \verb!\RubikCubeSolvedWB!. + +\medskip + +{\noindent}\textsc{Note} 2: There are four different commands for typesetting + 3x3x3 rotation codes in various formats (a slightly different set of four +commands are used for the equivalent 2x2x2 rotation codes). +In~this (3x3x3) example, we have used two of them; for example: +{\newline}\verb!\rr{U}! $\rightarrow$ \rr{U} \ (here the \verb!\rr{}! stands +for `rubik rotation'), and also +{\newline}\verb!\Rubik{U}! $\rightarrow$ \Rubik{U}. This command typesets +both the hieroglyph and the rotation code vertically one above the other. + The other two commands are as follows: +{\newline}\verb!\rrh{U}! $\rightarrow$ \rrh{U} \ (here the \verb!\rrh{}! +stands for `rubik rotation hieroglyph'), and also +{\newline}\verb!\textRubik{U}! $\rightarrow$ \textRubik{U}. This command +typesets both the rotation code and the hieroglyph on the same line one +after the other. + + +\pagebreak + +%---------------------- +\subsection{Rotation sequence} +\typeout{---Example (rotation sequence)} + +We now explore using the named Rubik cube rotation sequences and associated +patterns available in the \textsc{rubikpatterns} package---a small macro database +(see the \textsc{rubikpatterns} documentation, and also its companion file \texttt{rubikpatternsLIST.pdf}). Having the sequences available as macros is +very convenient since (a)~it avoids making errors when typing them out, +and (b)~allows the easy application of software tools. + + A Rubik pattern is the configuration generated by a sequence of rotations + (or `moves') from some initial starting configuration (typically a `solved' + configuration). For example, FourSpot is a well known pattern which we can + generate from a solved Rubik cube using the macro \verb!\FourSpot!; it is + defined in the \textsc{rubikpatterns} package as follows: +\begin{quote} +\begin{verbatim} +\newcommand{\FourSpot}{[FourSpot],F2,B2,U,Dp,R2,L2,U,Dp,<(12q*, 8f*)>} +\newcommand{\fourspot}{\FourSpot} +\end{verbatim} +\end{quote} + Note that for convenience the macros names in the \textsc{rubikpatterns} package + are defined in both upper and lower-case (i.e.,~the macros \verb!\FourSpot! + and \verb!\fourspot! are identical). The following figure shows the FourSpot + sequence and pattern. + +\bigskip + +\noindent% +\RubikCubeSolvedWY% +\ShowCube{2cm}{0.5}{\DrawRubikCubeRD} +\RubikRotation{\FourSpot} +\quad% +\SequenceBraceA{FourSpot}{% + \ShowSequence{}{\Rubik}{\SequenceLong}% + } +\quad% +\ShowCube{5cm}{0.5}{\DrawRubikCubeSF} + +\bigskip + +{\noindent}The code for the above figure is as follows: + + +\begin{quote} +\begin{verbatim} +\usepackage{tikz,rubikcube,rubikrotation,rubikpatterns} +... +\noindent% +\RubikCubeSolvedWY% +\ShowCube{2cm}{0.5}{\DrawRubikCubeRD} +\RubikRotation{\FourSpot} +\quad% +\SequenceBraceA{FourSpot}{% + \ShowSequence{}{\Rubik}{\SequenceLong}% + } +\quad% +\ShowCube{5cm}{0.5}{\DrawRubikCubeSF} +\end{verbatim} +\end{quote} +Note that we have spread the code slightly here in order to emphasise that +the \verb!\ShowSequence! command is being used as an argument for the +\verb!\SequenceBraceA! command (the `A' in the command \verb!\SequenceBraceA! +denotes that the annotation is placed Above the sequence.) +We have used a solved cube with the WY (White opposite Yellow) +configuration (\verb!\RubikCubeSolvedWY!). +The first cube is drawn from the RD (Right-Down) viewpoint (\verb!\DrawRubikCubeRD!). +The second cube is drawn from the SF (Semi-Flat) viewpoint (\verb!\DrawRubikCubeSF!) +so we can see all the faces. + +Note that we execute the \verb!\RubikRotation{}! command \textit{before} showing +the sequence itself. This is because the Perl program (CALLed by +\verb!\RubikRotation!) allocates the rotation sequence to the variable +\verb!\SequenceLong! which we then display using the \verb!\ShowSequence! command +(see the \textsc{rubikrotation} documentation for details). + + +\pagebreak + +%---------------------- +\subsection{SixTs} +\typeout{---Example (SixTs)} + +A more interesting cube pattern is the SixTs configuration (from the +\textsc{rubikpatterns} package), which we now show in a slightly +different way (adding an extra face and also some cube sidebars), as follows: + +\bigskip + +\noindent\hfil% +\RubikCubeSolvedWB +\ShowCube{1.6cm}{0.4}{ + \DrawRubikCubeRU + \DrawRubikFlatDown{0}{-3.3}} +\RubikRotation{\sixts} +\quad\SequenceBraceA{SixTs}{\ShowSequence{,\ }{\texttt}{\SequenceLong}} +\quad\ShowCube{3cm}{0.5}{ + \DrawRubikCubeRU + \DrawRubikCubeSidebarFL{RU} + \DrawRubikCubeSidebarFD{RU} + \DrawRubikCubeSidebarBR{RU} + \DrawRubikCubeSidebarBU{RU} + } + +\hfil + +\bigskip + +This time we have started with a solved cube having the WB configuration +(White opposite Blue), which is generated using the command +\verb!\RubikCubeSolvedWB! +(we have added the \textsc{down} face (blue) below to reveal the colour of this +face---see note below). + +The rotation sequence is in `long-format' (expanded into +separate rotations), comma-separated and space, typewriter font, +using the command \verb!\ShowSequence{,\ }{\texttt}{\SequenceLong}!. + +The final image shows the sixT cube together with the main cube sidebars + indicating the colours of the adjacent facelets, +using the \verb!\DrawRubikCubeSidebarXX! commands. +The code for the above figure is as follows: + +\begin{quote} +\begin{verbatim} +\RubikCubeSolvedWB +\ShowCube{1.6cm}{0.4}{% + \DrawRubikCubeRU% + \DrawRubikFlatDown{0}{-3.3}% + } +\RubikRotation{\SixTs} +\quad\SequenceBraceA{SixTs}{% + \ShowSequence{,\ }{\texttt}{\SequenceLong}% + } +\quad\ShowCube{2cm}{0.5}{ + \DrawRubikCubeRU + \DrawRubikCubeSidebarFL{RU} + \DrawRubikCubeSidebarFD{RU} + \DrawRubikCubeSidebarBR{RU} + \DrawRubikCubeSidebarBU{RU} + } +\end{verbatim} +\end{quote} + + + +\subsubsection*{Notes} + +\begin{enumerate} + + \item We have drawn the \textsc{down} face of the first cube using the command +\verb!\DrawRubikFlatDown{0}{-3.3}! where the two arguments are the $x$ and +$y$ coordinates of the \textit{bottom left} corner of the \textsc{down} face +(blue); these $(x,y)$ arguments allow us to position the blue `flat' face in +relation to the cube. Note that the grid origin of a cube image (on the page) +coincides with the \textit{bottom left} corner of the \textsc{front} face +(green in this case). + +\item The first image is really just 4 units wide. This is because the 2D width +of the \textit{side} face (red) is designed to measure 1~unit wide in the +oblique view (similarly, the 2D height of the \textit{top} face also measures +just 1~unit). Consequently, since the TikZ scale factor used is $0.4$, then +the (minimum) width argument for its \verb!\ShowCube{}{}{}! command is +$4\times 0.4 = 1.6$cm., hence we have \verb!\ShowCube{1.6cm}{0.4}{...}!. + +\end{enumerate} + + +\pagebreak + +%---------------------- +\subsection[Cycle three edges]{Cycle three edges (flip two)} +\typeout{---Example (cycle three edges (flip two))} + +The following example illustrates a sequence used for cycling three edges, +which is often used in generating the `cross' formation while solving the +final layer. However, it is a useful exercise to perform this sequence on +a solved cube, as this reveals quite clearly its rather complex actions +(it~also swaps two pairs of corners). + + The black arrow (no flip) and magenta arrows (flip) indicate the \textsc{up} + face edge cubies which are cycled anti-clockwise by the sequence +\ShowSequence{,}{\rr}{F,R,U,Rp,Up,Fp}. The blue arrows indicate the associated +`collateral damage' actions (two pairs of corner cubies swap positions); +depending on the circumstances, these other actions may be an acceptable +cost since they can be fixed at a later stage. (This diagram is from +Section~13 in the \textsc{rubikcube} package documentation). + +Note that we include the \textsc{up}-face sidebars to reveal the remaining +facelet colours of the top layer (using the command \verb!\DrawRubikFaceUpSide!) +so we can see how the sequence makes the cubies rotate and turn as they move. + + \bigskip% + \noindent\hfil% + \RubikCubeSolvedWY% + \ShowCube{2cm}{0.5}{\DrawRubikCubeRU}% + \quad\ShowCube{2.3cm}{0.5}{% + \DrawRubikFaceUpSide% + \draw[thick,->,color=magenta] (1.5,0.5) -- (2.4, 1.4); + \draw[thick,->] (2.5,1.5) -- (1.6, 2.4); + \draw[thick,->,color=magenta] (1.3, 2.3) -- (1.3, 0.5); + \draw[thick,<->, color=blue] (0.5,2.6) -- (2.5, 2.6); + \draw[thick,<->, color=blue] (0.5,0.3) -- (2.5, 0.3); + }% + \RubikRotation{\CycleThreeEdgesFlipTwo}% + \quad\ShowSequence{}{\Rubik}{\SequenceLong}\quad$\longrightarrow$\quad% + \ShowCube{2.3cm}{0.5}{\DrawRubikFaceUpSide}% + \hfil% + \bigskip% + + +{\noindent}The code for the figure is as follows + + +\begin{verbatim} +\newcommand{\CycleThreeEdgesFlipTwo}{F,R,U,Rp,Up,Fp}% + ... + ... + \RubikCubeSolved% + \ShowCube{2cm}{0.4}{\DrawRubikCubeRU}% + \quad\ShowCube{2.3cm}{0.4}{% + \DrawRubikFaceUpSide% + \draw[thick,->,color=magenta] (1.5,0.5) -- (2.4, 1.4); + \draw[thick,->] (2.5,1.5) -- (1.6, 2.4); + \draw[thick,->,color=magenta] (1.3, 2.3) -- (1.3, 0.5); + \draw[thick,<->, color=blue] (0.5,2.6) -- (2.5, 2.6); + \draw[thick,<->, color=blue] (0.5,0.3) -- (2.5, 0.3); + }% + \RubikRotation{\CycleThreeEdgesFlipTwo}% + \quad\ShowSequence{}{\Rubik}{\SequenceLong}\quad$\longrightarrow$\quad% + \ShowCube{2.3cm}{0.4}{\DrawRubikFaceUpSide}% +\end{verbatim} + +{\noindent}Note that the TikZ \verb!\draw! commands (for drawing the arrows +on the cube face) start with a lower-case letter, and also require a terminal +semicolon. + + + + +\pagebreak +%---------------------- +\subsection{Superflip} +\typeout{---Example (superflip)} + + +Once you can solve Rubik's cube, then an interesting exercise is to generate +the so-called `superflip' configuration, in which all the +corners are correctly solved, while all the edges are +flipped\,\footnote{See the `superflip' entry in \textit{Wikipedia}, and also +the Kociemba website (\url{www.kociemba.org/cube.htm}); particularly the page +\url{http://kociemba.org/math/oh.htm}}. + +%--------draw the images------------- +\begin{figure}[hbt] + \centering + \RubikCubeSolvedWY% + \ShowCube{2cm}{0.5}{\DrawRubikCubeRU}% + \qquad$\longrightarrow$\qquad% + \RubikRotation{\superflip}% + \ShowCube{2cm}{0.5}{\DrawRubikCubeLD}% + \qquad% + \ShowCube{5cm}{0.5}{\DrawRubikCubeSF}% +\caption{Two representations of the superflip configuration.} +\end{figure} +%---------------------- + +{\noindent}A superflip sequence converts the solved cube on the left +into the form on the right, using the command \verb!\RubikRotation{\superflip}!. +The code for the above figure is shown below (the~\verb!\superflip! macro +used here is from the \textsc{rubikpatterns} package). +\begin{verbatim} +\usepackage{tikz,rubikcube,rubikrotation,rubikpatterns} +... +\begin{figure}[hbt] + \centering + \RubikCubeSolvedWY% + \ShowCube{2cm}{0.5}{\DrawRubikCubeRU}% + \qquad$\longrightarrow$\qquad% + \RubikRotation{\superflip}% + \ShowCube{2cm}{0.5}{\DrawRubikCubeLD} + \qquad% + \ShowCube{5cm}{0.5}{\DrawRubikCubeSF} +\caption{...} +\end{figure} +\end{verbatim} + + +The following superflip sequence\,\footnote{This particular superflip +sequence (in the \textsc{rubikpatterns} package) is due to Reid (1995); +for details see the \textsc{rubikpatterns} package documentation, and +also \url{http://kociemba.org/math/oh.htm}. +Another 20-move superflip sequence (due to H Kociemba), is designated +as K32466 in \url{www.nickalls.org/dick/papers/tex/RUBIK20moves.zip}.} +has just 20 HTM rotations (Half Turn Metric: counting 180~degree turns +as just one `rotation'). Note that the \textsc{rubikpatterns} package +contains this particular superflip sequence as the macro \verb!\superflip! +(see \texttt{rubikpatterns.pdf}). Consequently the code +\verb!\ShowSequence{,}{\large\texttt}{\superflip}!, will typeset the sequence +as follows: + +\begin{center} +%% show the Short code +\ShowSequence{,}{\texttt}{\superflip} +\end{center} +Note that for convenience, the \textsc{rubikpatterns} package includes +the sequence name (in square brackets) as the first element of the +associated macro. This is possible since the contents of a comma-separated +square bracket are not actioned as a rotation by the \verb!\RubikRotation! +command. + +\pagebreak + +Next we present the same superflip sequence but without commas and in +the form of hieroglyphs, using the \verb!\Rubik! font, for which we +require the `expanded' \verb!\SequenceLong! form (since the `short form' +includes trailing digits---see Section~11 in the \textsc{rubikcube} +documentation), using the following code: + +\begin{quote} +\begin{verbatim} +\usepackage{tikz,rubikcube,rubikrotation,rubikpatterns} +... +\RubikCubeSolvedWY +\RubikRotation{\superflip} +\noindent\strut\hspace{-8mm}\ShowSequence{}{\Rubik}{\SequenceLong} +\end{verbatim} +\end{quote} +which gives + + +\bigskip + +\RubikCubeSolvedWY +\RubikRotation{\superflip} +\noindent\strut\hspace{-8mm}\ShowSequence{}{\Rubik}{\SequenceLong} + + +%%--------------------------------- +\bigskip + +\subsubsection*{Equivalent sequence} + + +Interestingly, the superflip sequence is actually equivalent to +\Rubikbrace{\Rubikbracket{\Rubik{Rm}\Rubik{U}}4, \Rubik{x}, +\Rubik{yp}}3 \ \ (Harris (2008), p151). +Furthermore we can readily demonstrate this, as we can process +this novel form of the sequence using some useful features of +the \verb!\RubikRotation! command, as follows: + +\begin{quote} +\begin{verbatim} +\RubikCubeSolvedWF +\RubikRotation[3]{[superflip],(Rm,U)4,x,yp,<Harris (2008), p151>} +\ShowCube{4cm}{0.4}{\DrawRubikCubeSF} +\end{verbatim} +\end{quote} +which generates the following + +%------------------- +\begin{figure}[hbt] + \centering + \RubikCubeSolvedWY + %%% \RubikRotation[3]{[shortsuper],(Rmp,Up)4,yp,x}% ORG + \RubikRotation[3]{[shortsuper],(Rm,U)4,x,yp,<Harris (2008), p151>} + \ShowCube{5cm}{0.5}{\DrawRubikCubeSF} + \end{figure} +%---------------------- +{\noindent}which is exactly the same configuration as before. +Note that to do this we made use of the `repeat' option \verb![3]! +as well as the \verb!(Rmp,Up)4! `repeat-block' in +the argument of the \verb!\RubikRotation! command above. + + +\pagebreak + +%---------------------- +\subsection{Inverse sequence} +\typeout{---Example (inverse sequence)} + + +Generating the inverse of a Rubik sequence involves (a)~reversing the +order of the sequence, and (b)~inverting each rotation in the sequence +(see Sections~5.1 and 5.1.1 in the \textsc{rubikrotation} package +documentation). + +From the grey-cube example~(\ref{sec:greycube}) we saw that the sixspot +sequence is: \verb!U,Dp,R,Lp,F,Bp,U,Dp!; its inverse is therefore +readily determined as \verb!D,Up,B,Fp,L,Rp,D,Up!. Note that this is +easy to check since the sequence generated by the \verb!\RubikRotation! +command is held by the macro \verb!\SequenceLong!. For~example, the +output of the following commands +\begin{quote} +\begin{verbatim} +\fbox{\strut\rule{0pt}{10pt}% + The inverse of the sixspot sequence is: + \RubikRotation{\sixspot,<inverse>} + \ShowSequence{,}{\texttt}{\SequenceLong}. + } +\end{verbatim} +\end{quote} +is \quad\fbox{\strut\rule{0pt}{10pt} % +The inverse of the sixspot sequence is: +\RubikRotation{\sixspot,<inverse>} +\ShowSequence{,}{\texttt}{\SequenceLong}. +} + +\bigskip + +A sequence and its inverse will annihilate each other when applied +consecutively. For example, in the following figure we start with +a solved cube and apply the sixspot sequence. Applying the inverse +of the sixspot sequence then results in the solved cube configuration + again. + +\newcommand{\sixspotarrow}{$\quad\overrightarrow{\strut\textsc{sixspot}}\quad$} +\newcommand{\sixspotINVarrow}{$\quad\overrightarrow{\strut\textsc{sixspotINV}}\quad$} + +\begin{figure}[hbt] +\centering +\RubikCubeSolvedWY% + \ShowCube{2cm}{0.5}{\DrawRubikCubeRU}% +\RubikRotation{\sixspot}% + \sixspotarrow% + \ShowCube{2cm}{0.5}{\DrawRubikCubeRU}% +\RubikRotation{\sixspot,<inverse>}% + \sixspotINVarrow% + \ShowCube{2cm}{0.5}{\DrawRubikCubeRU} +\end{figure} + +{\noindent}The code for the above figure is as follows: + +\begin{verbatim} +\newcommand{\sixspotarrow}{$\quad\overrightarrow{\strut\textsc{sixspot}}\quad$} +\newcommand{\sixspotINVarrow}{$\quad\overrightarrow{\strut\textsc{sixspotINV}}\quad$} +... +\RubikCubeSolvedWY\ShowCube{2cm}{0.5}{\DrawRubikCubeRU}% +\RubikRotation{\sixspot}% + \sixspotarrow% + \ShowCube{2cm}{0.5}{\DrawRubikCubeRU}% +\RubikRotation{\sixspot,<inverse>}% + \sixspotINVarrow% + \ShowCube{2cm}{0.5}{\DrawRubikCubeRU} +\end{verbatim} + + +A significant property of the superflip configuration is that it is its own +inverse. Consequently we can achieve a similar result simply by applying the +superflip sequence \textit{twice in succession}, as follows: + +\newcommand{\superfliparrow}{$\quad\overrightarrow{\strut\textsc{superflip}}\quad$} + +\begin{figure}[hbt] +\centering +\RubikCubeSolved% + \ShowCube{2cm}{0.5}{\DrawRubikCubeRU}\superfliparrow% +\RubikRotation{\superflip}% + \ShowCube{2cm}{0.5}{\DrawRubikCubeRU}\superfliparrow% +\RubikRotation{\superflip}% + \ShowCube{2cm}{0.5}{\DrawRubikCubeRU} +\end{figure} + + +\pagebreak + +%------------------- +\subsection{OLL example} + +% ThreeCube YellowCross (from dnRUBIKsolution15) +\newcommand{\yellowcross}{[yellowcross],F,R,U,Rp,Up,Fp} +\newcommand{\arrow}[1]{$\overrightarrow{\strut\mbox{#1}}$} +\newcommand{\ShowYellowFace}{\ShowCube{2.6cm}{0.6}{\NoSidebar{X}\DrawRubikFaceUpSide}} + +Here we illustrate the use of the \verb!\NoSidebar! command (see the +\textsc{rubikcube} package documentation) to generate nice displays +of so-called OLL (Orientate Lower Layer) configurations, which are +typically rendered using the yellow face. + +For example, the following sequence shows an efficient +algorithm (sequence) for `solving' the OLL configuration shown +in cube~A (listed as OLL case~33 in Harris +(2008, page~61)\footnote{Harris D (2008). \textit{Speedsolving the cube}, +(Stirling Publishing Co, New York) {\newline}(\texttt{www.stirlingpublishing.com}) +[covers 2x2x2, 3x3x3, 4x4x4, 5x5x5 cubes].} and also on the Harris OLL webpage \url{http://www.cubestation/3x3x3/cfop/oll/ollprintablepage.php}). + + +%% Dan Harris case 33 (in his 2008 book) +\newcommand{\CaseXXXIII}{[caseHarris33],R, U, Rp, U, R, Up, Rp, Up, Rp, F, R, Fp} +% {\DH2008thth} + +\bigskip + +%% setup OLL position DH33 (Dan Harris) +\RubikCubeGreyAll +\RubikFaceUp{X}{Y}{Y} + {Y}{Y}{X} + {Y}{X}{X} +\RubikFaceBack XXY XXXXXX +\RubikFaceLeft XXX XXXXXX +\RubikFaceRight YYX XXXXXX +\RubikFaceFront XYX XXXXXX +% +\cubenumber{A}% +\ShowCube{2.6cm}{0.6}{\NoSidebar{X}\DrawRubikFaceUpSide}% +% +\RubikRotation{\CaseXXXIII}% +\quad\SequenceBraceA{OLLcase33Harris}{% + \ShowSequence{}{\Rubik}{\CaseXXXIII}% + }% +\quad$\longrightarrow$\quad% +\cubenumber{B}% +\ShowCube{2.6cm}{0.6}{\NoSidebar{X}\DrawRubikFaceUpSide}% + +\bigskip + +{\noindent}The code for the above figure is as follows (note that +the \verb!\NoSidebar{X}! command is placed inside the \verb!\ShowCube! +environment in order to limit its action). + +\begin{quote} +\begin{verbatim} +\newcommand{\cubenumber}[1]{\strut\raisebox{1cm}{#1}} +\newcommand{\CaseXXXIII}{[caseHarris33],R,U,Rp,U,R,Up,Rp,Up,Rp,F,R,Fp} +% +\RubikCubeGreyAll +\RubikFaceUp{X}{Y}{Y} + {Y}{Y}{X} + {Y}{X}{X} +\RubikFaceBack XXY XXXXXX +\RubikFaceLeft XXX XXXXXX +\RubikFaceRight YYX XXXXXX +\RubikFaceFront XYX XXXXXX +\cubenumber{A}% +\ShowCube{2.6cm}{0.6}{\NoSidebar{X}\DrawRubikFaceUpSide}% +\RubikRotation{\CaseXXXIII}% +\quad\SequenceBraceA{OLLcase33Harris}{% + \ShowSequence{}{\Rubik}{\CaseXXXIII}% + }% +\quad$\longrightarrow$\quad% +\cubenumber{B}% +\ShowCube{2.6cm}{0.6}{\NoSidebar{X}\DrawRubikFaceUpSide}% +\end{verbatim} +\end{quote} +Note that since we originally defined the OLL case~33 algorithm +(Harris 2008) as a macro, it follows that we could instead have +recovered the OLL~33 configuration (cube~A above) using the +inverse algorithm, as follows: + +\bigskip + +\RubikCubeGreyAll +\RubikFaceUpAll{Y} +\RubikRotation{<inverse>,\CaseXXXIII} +\ShowCube{2.6cm}{0.6}{\NoSidebar{X}\DrawRubikFaceUS}% +\hspace{1cm} +\begin{minipage}{4cm} +\begin{verbatim} +\RubikCubeGreyAll +\RubikFaceUpAll{Y} +\RubikRotation{<inverse>,\CaseXXXIII} +\ShowCube{2.6cm}{0.6}{\NoSidebar{X}\DrawRubikFaceUS} +\end{verbatim} +\end{minipage} + +\bigskip + +{\noindent}Note that in this last example we have used the more convenient +short-hand US (UpSide) version of the \verb!\DrawRubikFaceUpSide! command, +namely \verb!\DrawRubikFaceUS!. + + + +\pagebreak +%---------------------- +\subsection{Cube patterns} +\typeout{---Example (Cube patterns)} + +\newcommand{\CycleThreeUpEdges}{[CycleUpEdges],F2,U,Rm,Up,Up,Lm,U,Fp2} +\newcommand{\StripesOrtho}{[StripesOrtho],Lp,Fp,Rp,L,U,D, Rp,Dp,Lp,Bp,U2,Lp,Up,R,L,Up,F2,Rp,<Harris 2008, p150>} + +We now look at how the \verb!\RubikRotation! command can be used to +investigate cube patterns, which are typically shown only as a +regular cube. For example, consider the following interesting sequence +\linebreak\texttt{L' F' R' L U D R' D' L' B' U2 L' U' R L U' F2 R'} +(Harris 2008, page~150), which is presented as a cube with orthogonal +stripes (see figure~A). In order to show the pattern using the Rubik + bundle, it is often useful to first express the sequence as a macro. + In this particular case we need to adjust the Harris (2008) notation + slightly to make it compatible (ie, insert commas, change trailing + `primes' into a trailing `p'), give it a suitable name + (say, \verb![StripesOrtho]!), and, for completion, include the citation +in an `infoblock' ($<$...$>$), as follows: + +\begin{verbatim} +\newcommand{\StripesOrtho}{% + [StripesOrtho],Lp,Fp,Rp,L,U,D,Rp,Dp,Lp,Bp,U2,Lp,Up,R,L,Up,F2,Rp,<Harris 2008, p150>} +\end{verbatim} +We can now process it simply by using its macro-name as the argument for +the \verb!\RubikRotation! command; for example, the following code displays +it as figure~A. + +\begin{verbatim} +\RubikCubeSolved +\RubikRotation{\StripesOrtho} +\ShowCube{2.6cm}{0.6}{\DrawRubikCubeRU} +\end{verbatim} + +At first sight this looks like a nice example of orthogonal stripes, +but if we look at all the faces by rendering the cube in a Semi-Flat +(SF) view (using the command \verb!\DrawRubikCubeSF!) + ---see~figure~B--- this reveals that unfortunately only five faces +actually have a center stripe. + +\bigskip + +\RubikCubeSolved +\RubikRotation{\StripesOrtho} +\cubenumber{A} +\ShowCube{2.6cm}{0.6}{\DrawRubikCubeRU} +\hspace{3cm} +\cubenumber{B} +\ShowCube{4cm}{0.4}{\DrawRubikCubeSF} + +\bigskip + +{\noindent}So the question is: can we improve on this and create a cube +with a fully orthogonal pattern, by swapping the relevant red/yellow +and blue/yellow edge cubies in the back layer? Since it is impossible +to swap just two edge cubies within the same layer in a 3x3x3 cube +without changing any other cubies, the answer is no. However, we are +able to cycle cleanly three edge cubies within one face, and a single +cycle could at least create the final stripe with only minimal collateral +damage. + +For example, if we rotate the whole cube using the rotation denoted +as \rr{Rcp} (= \verb!\rr{Rcp}!)\,\footnote{There are several equivalent +notations for this: \rr{Rcp} $\equiv$ \rr{xp} $\equiv$ \rr{CRp}; +the c and C denote a whole cube rotation.} to bring the \textsc{back} face to +the \textsc{up} position (as shown in figure~C), we can then cycle the three +\textsc{up} edge cubies UL, UR, UF clockwise using the following +`CycleThreeUpEdges' sequence: +\begin{verbatim} +\newcommand{\CycleThreeUpEdges}{F2,U,Rm,Up,Up,Lm,U,Fp2} +\end{verbatim} +We can combine these two actions using the command +\verb!\RubikRotation{Rcp,\CycleThreeUpEdges}!, which will then align the +three red facelets in the \textsc{up} face and form the final stripe +(see figure~D). + +\RubikCubeSolved +\RubikRotation{\StripesOrtho,Rcp} +\cubenumber{C} +\ShowCube{2.6cm}{0.6}\DrawRubikCubeRU +\hspace{3cm} +\RubikRotation{\CycleThreeUpEdges} +\cubenumber{D} +\ShowCube{4cm}{0.4}\DrawRubikCubeSF + +\medskip + +The downside, of course, is that a yellow and a white facelet are also +swapped in the top layer, but at least we now have a cube with six +mutually adjacent orthogonal central stripes\,! + + +\pagebreak + +%%=====================TWOcube stuff====================================== +%%======================================================================== + +\section{TwoCube examples (2x2x2)} + +\subsection{Commands \& notation} + +Regarding the 2x2x2 cube as a `TwoCube' (instead of a RubikCube) makes +the 2x2x2 commands very intuitive (assuming you are familiar with the +3x3x3 commands), since they are mostly obtained just by exchanging +the word `Rubik' in 3x3x3 commands for the word `Two'. For example, + +\medskip + +\verb!3x3x3!\quad\hspace{1cm}$\rightarrow$\quad\hspace{1cm}\verb!2x2x2! + +\smallskip + +\verb!\RubikCubeSolvedWY! $\rightarrow$ \verb!\TwoCubeSolvedWY! + +\verb!\RubikRotation!\qquad\ $\rightarrow$ \quad\verb!\TwoRotation! + +\verb!\SaveRubikState!\qquad\ $\rightarrow$ \quad\verb!\SaveTwoState! + +\medskip + +Note that although the 2x2x2 cube does not have any middle slices, one can still + actually use the 3x3x3 commands \verb!\RubikRotation! and \verb!\SaveRubikState! + in the usual way (because the corner cubies are still processed in +the usual way). However, in the interests of consistency +both of these commands have equivalent `Two' versions: namely +\verb!\TwoRotation! and \verb!\SaveTwoState!. + +Of course there are considerably fewer rotation codes and hieroglyphs +associated with the TwoCube (since there are no middle slices), and +their commands also mirror the 3x3x3 equivalents in the \textsc{rubikcube} +package; i.e.,~\verb!Rubik! $\rightarrow$ \verb!Two! and +\verb!r! $\rightarrow$ \verb!t!. Thus the changes associated with the +four key commands can be summarised as follows : + + \medskip + + \verb!3x3x3! \hphantom{$\rightarrow$} \verb!2x2x2! + + \smallskip + + \verb!\rr{}! $\rightarrow$ \verb!\tr{}! + + \verb!\rrh{}! $\rightarrow$ \verb!\trh{}! + + \verb!\Rubik{}! $\rightarrow$ \verb!\Two{}! + + \verb!\textRubik{}! $\rightarrow$ \verb!\textTwo{}! + + +%----------------------- + +\bigskip + +%------------------- +\subsection{Visualising white-space} + +This example shows how the F version of the \verb!\ShowCube{}{}{}! command can be useful for revealing excess white space. + + + + \bigskip + +\TwoCubeSolvedWB% +\ShowCubeF{3cm}{0.6}{\DrawTwoCubeRU}% +\quad\ShowCubeF{1.7cm}{0.6}{\DrawTwoFaceUS}% +\hspace{1cm} +\begin{minipage}{0.3\textwidth} +\begin{verbatim} +\TwoCubeSolvedWB% +\ShowCubeF{3cm}{0.6}{\DrawTwoCubeRU}% +\quad% +\ShowCubeF{1.7cm}{0.5}{\DrawTwoFaceUS}% +\end{verbatim} +\end{minipage} + + +\bigskip + + Both images above have an F-box drawn around them (so we can see the + extent of any white space) using the F version of the \verb!\ShowCube!$\{\mbox{\textit{width}}\}\{\mbox{\textit{scale-factor}}\}\{\}$ command, + namely \verb!\ShowCubeF{}{}{}!. Clearly the \verb!3cm! width we have + used for the first cube above is too much, and so in the second pair + of images below we have reduced this width for the first image to + its correct value of \verb!1.6cm!, and have removed the F from the + \verb!\ShowCubeF! command accordingly. + +\bigskip + +\quad% +\TwoCubeSolvedWB% +\ShowCube{1.6cm}{0.6}{\DrawTwoCubeRU}% +\quad% +\ShowCube{1.7cm}{0.6}{\DrawTwoFaceUS}% +\hspace{1cm} +\begin{minipage}{0.3\textwidth} +\begin{verbatim} +\TwoCubeSolvedWB% +\ShowCube{1.6cm}{0.6}{\DrawTwoCubeRU}% +\quad% +\ShowCube{1.7cm}{0.5}{\DrawTwoFaceUS}% +\end{verbatim} +\end{minipage} + +\bigskip + +Thus use of the F version of the the \verb!ShowCube! command allows +the user to easily determine---by trial \& error---the correct minipage +width for a particular cube. + + +\pagebreak + +%------------------- +\subsection{Flat and semi-flat formats} + +We can view the hidden faces of a cube using the semi-flat (SF) and +flat (F) versions of the \verb!\DrawTwoCube..! command as follows. + +In the first figure we have also used the F version of the +\verb!\ShowCube{}{}{}! command to reveal the size of the minipage +which contains the image. Notice that since the 2D width of the side +face (red) is approximately 1 unit, we can estimate that the total +width of the image will be 6 + 1 = 7 units, and hence as we have +specified a TikZ scale factor of 0.6, then the required width of +the minipage is approximately $4.2$ ($= 7 \times 0.6$) +---see Section~4.1 in the \textsc{rubikcube} package documentation +for details). + +\bigskip + +\begin{minipage}{0.3\textwidth} +\centering +\TwoCubeSolvedWB% +\ShowCubeF{4.2cm}{0.6}{\DrawTwoCubeSF}% +\end{minipage} + \hspace{2cm} +\begin{minipage}{0.3\textwidth} +\begin{verbatim} +\TwoCubeSolvedWB% +\ShowCubeF{4.2cm}{0.6}{\DrawTwoCubeSF}% +\end{verbatim} + \end{minipage} + +\bigskip + +\begin{minipage}{0.3\textwidth} +\centering +\TwoCubeSolvedWB% +\ShowCube{4.8cm}{0.6}{\DrawTwoCubeF}% +\end{minipage} + \hspace{2cm} +\begin{minipage}{0.3\textwidth} +\begin{verbatim} +\TwoCubeSolvedWB% +\ShowCube{4.8cm}{0.6}{\DrawTwoCubeF}% +\end{verbatim} + \end{minipage} + + + + \pagebreak + +%------------------- +\subsection{Grey cube} + + +A cube with all of the facelets coloured grey (a `grey' cube) can be +useful as a starting state for instruction. Such a cube is generated +by the command \verb!\TwoCubeGreyAll!. +We can then allocate colours to those facelets demonstrating +some feature of cube manipulation. + Here we are showing how to rotate the GWR corner cubie in the bottom layer + up into its `solved' position in the top layer. We also use two cube + sidebars to show the colours of the hidden facelets of the corner cubie. + + \bigskip + + +\noindent\hfil% +\TwoCubeGrey +\ShowCube{2cm}{0.7}{\DrawTwoCube}% +% +\TwoFaceUp{X}{X} + {R}{W}% +\TwoFaceFront{G}{R} + {W}{X}% +\TwoFaceLeft XX + XG% +\TwoFaceDown{R}{X} + {X}{X}% +\quad\ShowCube{2cm}{0.7}{ + \DrawTwoCube + \DrawTwoCubeSidebarFD{RU} + \DrawTwoCubeSidebarFL{RU} + }% +\quad\Two{Lp}\quad +\TwoRotation{Lp} +\ShowCube{2cm}{0.7}{\DrawTwoCube}% +\hfil% + +\bigskip + +{\noindent}The code for the above figure is as follows: +\begin{quote} +\begin{verbatim} +\noindent\hfil% +\TwoCubeGrey +\ShowCube{2cm}{0.6}{\DrawTwoCube}% +% +\TwoFaceUp{X}{X} + {R}{W}% +\TwoFaceFront{G}{R} + {W}{X}% +\TwoFaceLeft XX + XG% +\TwoFaceDown{R}{X} + {X}{X}% +\ShowCube{2cm}{0.6}{ + \DrawTwoCube + \DrawTwoCubeSidebarFD{RU} + \DrawTwoCubeSidebarFL{RU} + }% +\quad\Two{Lp}\quad +\TwoRotation{Lp} +\ShowCube{2cm}{0.6}{\DrawTwoCube}% +\hfil% +\end{verbatim} +\end{quote} +Notice that the curly brackets associated with the \verb!\TwoFace..! commands +can be omitted providing at least one space is left before the first colour code +(see the \verb!\TwoFaceLeft..! command above). + + + \pagebreak + +%------------------- +\subsection{Scrambled cube} + +In the following example we scramble the cube using 20 random rotations using +$\langle$\texttt{random,20}$\rangle$ as the argument +for the \verb!\TwoRotation{}! command. We have also added a set of cube sidebars +to the second cube. The final semi-flat (SF) cube has the same colour configuration +and shows the hidden faces, allowing you to check the colours of the sidebars. + +\bigskip + + \noindent\hfil% + \TwoCubeSolvedWY% + \ShowCube{1.8cm}{0.7}{\DrawTwoCubeRU}% + \qquad$\longrightarrow$\qquad% + %--------------- + \TwoRotation{random,20} + %---------------- + \ShowCube{2.8cm}{0.7}{ + \DrawTwoCubeRU + \DrawTwoCubeSidebarFL{RU} % Front-Left edge sidebar + \DrawTwoCubeSidebarFD{RU} % Front-Down edge + \DrawTwoCubeSidebarBR{RU} % Back-Right edge + \DrawTwoCubeSidebarBU{RU} % Back-Up edge + }% + \qquad\ShowCube{5cm}{0.7}{\DrawTwoCubeSF}% + \hfil% + + \bigskip + + + \begin{quote} + \begin{verbatim} + \noindent\hfil% + \TwoCubeSolvedWY% + \ShowCube{1.8cm}{0.7}{\DrawTwoCubeRU}% + \qquad$\longrightarrow$\qquad% + %--------------- + \TwoRotation{random,20} + %---------------- + \ShowCube{2.8cm}{0.7}{ + \DrawTwoCubeRU + \DrawTwoCubeSidebarFL{RU} % Front-Left edge sidebar + \DrawTwoCubeSidebarFD{RU} % Front-Down edge + \DrawTwoCubeSidebarBR{RU} % Back-Right edge + \DrawTwoCubeSidebarBU{RU} % Back-Up edge + }% + \qquad\ShowCube{5cm}{0.7}{\DrawTwoCubeSF}% + \hfil% + \end{verbatim} + \end{quote} + + + +%------------------- +\subsubsection*{A simple scramble} + +A simple scramble (from a solved position) which +makes each face have four different facelets is $\left\{\mbox{\tr{R}, +\tr{y}}\right\}$5 as follows (note that the optional \verb!\TwoRotation! +square bracket holds the repeat number~$5$): + +\bigskip + +\begin{minipage}{0.3\textwidth} +\centering +\TwoCubeSolvedWB% +\TwoRotation[5]{R,y}% +\ShowCube{5cm}{0.6}{\DrawTwoCubeF}% +\end{minipage} + \hspace{2cm} +\begin{minipage}{0.3\textwidth} +\begin{verbatim} +\TwoCubeSolvedWB% +\TwoRotation[5]{R,y}% +\ShowCube{5cm}{0.6}{\DrawTwoCubeF}% +\end{verbatim} + \end{minipage} + + +\pagebreak + +%------------------- +\subsection{Swap two corners} + +The following example is the header figure for the \textsc{rubiktwocube} +package documentation, and shows the `SwapTwoCorners' sequence often +necessary in the solution of a 2x2x2 cube. + + \bigskip + + \noindent\hfil% + %% set up the cube with corners swapped + \TwoCubeSolvedWY% + \TwoRotation{Rc2}% turn upside down (= Rc2) x2 + \TwoRotation{\swaptwocorners}% + %% + % now show the cube, before and after swapping the corners again + \ShowCube{1.6cm}{0.6}{\DrawTwoCubeRU}% + \quad\ShowCube{1.7cm}{0.5}{\DrawTwoFaceUS}% + \TwoRotation{\swaptwocorners}% + \quad\SequenceBraceA{SwapTwoCorners}{\ShowSequence{}{\Two}{\SequenceLong}}% + \quad$\longrightarrow$% + \quad\ShowCube{1.7cm}{0.5}{\DrawTwoFaceUS}% + \hfil% + + \bigskip% + + {\noindent}The code for the above figure is as follows: + \begin{verbatim} + \usepackage{tikz} + \usepackage{rubikcube,rubikrotation,rubikpatterns,rubiktwocube} + ... + \newcommand{\SwapTwoCorners}{[swaptwocorners],Rp,F,Rp,B2,R,Fp,Rp,B2,R2,Up} + \newcommand{\swaptwocorners}{\SwapTwoCorners} + ... + \noindent + \hfil% + %% set up the cube with corners swapped + \TwoCubeSolvedWY% + \TwoRotation{Rc2}% turn cube upside down about the R face + \TwoRotation{\swaptwocorners}% + %% now show the cube, before and after swapping the corners + \ShowCube{1.6cm}{0.6}{\DrawTwoCubeRU}% + \quad\ShowCube{1.7cm}{0.5}{\DrawTwoFaceUS}% + \TwoRotation{\swaptwocorners}% + \quad\SequenceBraceA{SwapTwoCorners}{\ShowSequence{}{\Two}{\SequenceLong}}% + \quad$\longrightarrow$% + \quad\ShowCube{1.7cm}{0.5}{\DrawTwoFaceUS}% + \hfil% + \end{verbatim} + +\pagebreak + +%------------------- +\subsection{OLL example} + +Here we illustrate an OLL algorithm which orientates the last layer +starting from a single yellow facelet in the UFL position. + +\bigskip + +\noindent\hfil% +\TwoCubeGreyAll% +\TwoFaceUp{X}{X}% + {Y}{X}% +\TwoFaceBack XY XX +\TwoFaceRight XY XX% +\TwoFaceFront XY XX% +\ShowCube{2cm}{0.7}{\NoSidebar{X}\DrawTwoFaceUS} + \SaveTwoState{cubeTWO.tex} %*** +\TwoRotation{\allyellow}% +\quad\SequenceBraceA{AllYellow}{\ShowSequence{}{\Two}{\SequenceLong}}\quad$\longrightarrow$\quad% +\ShowCube{1.5cm}{0.7}{\NoSidebar{X}\DrawTwoFaceUS} +\hfil% + +\bigskip + +The code is shown below. Note that we have used the \verb!\NoSidebar{X}! +command to disable the drawing of any grey sidebars by the \verb!\DrawTwoFaceUS! +command\footnote{Note that the \textbackslash\texttt{DrawTwoFaceUS} command is a short-hand +equivalent to the \textbackslash\texttt{DrawTwoFaceUpSide} command.} + and hence only yellow sidebars are drawn. Note that we have placed the +\verb!\NoSidebar{X}! command inside the \verb!\ShowCube! environment in order +to limit its action locally. + +\begin{quote} +\begin{verbatim} +\noindent\hfil% +\TwoCubeGreyAll% +\TwoFaceUp{X}{X}% + {Y}{X}% +\TwoFaceBack XY XX +\TwoFaceRight XY XX% +\TwoFaceFront XY XX% +\ShowCube{2cm}{0.7}{\NoSidebar{X}\DrawTwoFaceUS}% +\TwoRotation{\allyellow}% +\quad\SequenceBraceA{AllYellow}{\ShowSequence{}{\Two}{\SequenceLong}}% +\quad$\longrightarrow$\quad% +\ShowCube{1.5cm}{0.7}{\NoSidebar{X}\DrawTwoFaceUS}% +\hfil% +\end{verbatim} +\end{quote} + +\bigskip + + +\begin{center} +------ END ------ +\end{center} + +\end{document}
\ No newline at end of file |