\documentclass{article} \usepackage{ran_toks} \usepackage{ifthen} \useThisSeed{606574325} % comment out this line, and uncomment next line to get ... %\useLastAsSeed % a new pseudo-random sequence each time you compile. % Other useful switches %\ranToksOn % the default %\ranToksOff \parindent0pt \parskip6pt \def\cs#1{\texttt{\char`\\#1}} \begin{document} \begin{center}\bfseries Test file for \textsf{ran\_toks} Package\\[3pt] D. P. Story \end{center} Test of the \verb!\ranToks! command. \ranToks{myPals}{% {Jim}{Richard}{Don} {Alex}{Tom}{J\"{u}rgen} } I have {\nToksFor{myPals}} pals, they are \useRanTok{1}, \useRanTok{2}, \useRanTok{3}, \useRanTok{4}, {\useRanTok{5}} and \useRanTok{6}. (Listed in the order of best friend to least best friend.) Test of the \verb!\bRTVToks!/\verb!\eRTVToks! pair of commands, which encloses \texttt{rtVW} environments. \bRTVToks{myThoughts}% \begin{rtVW} \begin{minipage}[t]{.67\linewidth} Roses are red and violets are blue, I've forgotten the rest, have you too? \end{minipage} \end{rtVW} \begin{rtVW} \begin{minipage}[t]{.67\linewidth} I gave up saying bad things like \verb!$#%%%^*%^&#$@#! when I was just a teenager. \end{minipage} \end{rtVW} \begin{rtVW} \begin{minipage}[t]{.67\linewidth} I am a good guy, pass it on! The code for this last sentence is, \begin{verbatim} %#$% I am a good guy, pass it on! ^&*&^* \end{verbatim} How did that other stuff get in there? \end{minipage} \end{rtVW} \eRTVToks \begin{enumerate} \displayListRandomly[\item]{myThoughts} \end{enumerate} Use \verb!\useRTName! command when another list separates the current position from the list you want to use. Here we want to use the list named \texttt{myPals}, but since that definition, a new list named \texttt{myThoughts} was declared. \useRTName{myPals} List of pals: \useRanTok{1}, \useRanTok{2}, \useRanTok{3}, \useRanTok{4}, \useRanTok{5}, and \useRanTok{6}. For mixing lists. it might be easier to use the optional parameter: {\useRanTok[myPals]{1}} and \useRanTok[myThoughts]{1} The \cs{rtTokByNum} can retrieve an item from the list in its declared order; eg, from the \texttt{myPals} list, the first and last are {\rtTokByNum[myPals]{1}} and \rtTokByNum[myPals]{\nToksFor{myPals}}. We demonstrate the command \cs{reorderRanToks} and the optional parameters of \cs{displayListRandomly}: \begin{quote}\reorderRanToks{myPals}% List of pals: \displayListRandomly[\ifnum\i=\last\space and \fi][\ifnum\i=\last.\else,\fi\space]{myPals} \end{quote} The reordering is global, so \displayListRandomly[\ifnum\i=\last\space and \fi][\ifnum\i=\last\else, \fi]{myPals} are listed in the same order as above, and different from the original random order seen in the second paragraph of this document. Without the Oxford comma: My pals are \displayListRandomly[\ifnum\i=\last and \fi][\ifnum\i=\last.\else\ifnum\i=\lessone\relax\space\else, \fi\fi]{myPals} The following is the same logic but uses the syntax of the \textsf{ifthen} package: My pals are \displayListRandomly[\ifthenelse{\i=\last}{and }{}][\ifthenelse{\i=\last}{.}{\ifthenelse{\i=\lessone}{\space}{, }}]{myPals} Test the \cs{copyRanToks} command: \copyRanToks{myPals}{myPals1}\displayListRandomly[\ifthenelse{\i=\last}{and }{}][\ifthenelse{\i=\last}{.}{\ifthenelse{\i=\lessone}{\space}{, }}]{myPals1} This does not change the order of the \texttt{myPals} list, which is still \displayListRandomly[\ifnum\i=\last\space and \fi][\ifnum\i=\last.\else,\fi\space]{myPals} \end{document}