From 07d426b145a3c2e39a7a85b56dc211f9fbd0a0df Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Fri, 12 Feb 2016 00:26:01 +0000 Subject: ran_toks (10feb16) git-svn-id: svn://tug.org/texlive/trunk@39684 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/ran_toks/README.md | 52 ++++ .../doc/latex/ran_toks/doc/rantoks_man.pdf | Bin 74942 -> 81844 bytes .../doc/latex/ran_toks/doc/rantoks_man.tex | 284 +++++++++++++-------- .../doc/latex/ran_toks/examples/mytext.verb | 1 + .../doc/latex/ran_toks/examples/ran_toks.tex | 16 +- .../doc/latex/ran_toks/examples/random_tst.tex | 103 ++++++++ .../doc/latex/ran_toks/examples/random_tst_qz.tex | 115 +++++++++ .../texmf-dist/source/latex/ran_toks/ran_toks.dtx | 70 +++-- Master/texmf-dist/tex/latex/ran_toks/ran_toks.sty | 51 ++-- 9 files changed, 544 insertions(+), 148 deletions(-) create mode 100644 Master/texmf-dist/doc/latex/ran_toks/README.md create mode 100644 Master/texmf-dist/doc/latex/ran_toks/examples/mytext.verb create mode 100644 Master/texmf-dist/doc/latex/ran_toks/examples/random_tst.tex create mode 100644 Master/texmf-dist/doc/latex/ran_toks/examples/random_tst_qz.tex diff --git a/Master/texmf-dist/doc/latex/ran_toks/README.md b/Master/texmf-dist/doc/latex/ran_toks/README.md new file mode 100644 index 00000000000..ca048779fa6 --- /dev/null +++ b/Master/texmf-dist/doc/latex/ran_toks/README.md @@ -0,0 +1,52 @@ +The ran_toks Package +Author: D. P. Story +Dated: 2016/02/06 +Version: v1.0e + +This short package, with minimal requirements, defines macros for +randomizing a list of tokens. There are two approaches: + + 1. \ranToks{myList}{ {One}{Two}{Three}{Four}{Five} }: Here the token + list occurs as the argument of the \ranToks command. myList is the + name of this list. The tokens can be anything that \TeX accepts as + a macro argument, this excludes \verb, for example. + + 2. Another construct writes verbatim to the disk, so the tokens can + be of arbitrary size, and include \verb and the verbatim + environment, for example, + + \bRTVToks{myStuff} + \begin{rtVW} + The inline answer is \verb!x^3! + \end{rtVW} + \begin{rtVW} + This is my stuff, leave it alone! + \end{rtVW} + ... + \begin{rtVW} + The verbatim listing is + \begin{verbatim} + \bRTVToks{myStuff} + ... (missing stuff) + \eRTVToks + \end{verbatim} + \end{rtVW} + \eRTVToks + +To actually see the randomized list, use the \useRanTok{num} command: For +myList, we would write \useRanTok{1}, \useRanTok{2}, \useRanTok{3}, +\useRanTok{4}, and {\useRanTok{5}} to obtain a random listing of the +tokens in the myList list. + +For user of AeB or eqexam, the latter structure can be used to randomize +the order of the questions on a quiz or exam. + +If the ran_toks.sty file is not provided in the distribution, then tex (not latex) +the file ran_toks.dtx. + +Enjoy! + +Now, I must get back to my retirement. + +dps +2016/02/08 diff --git a/Master/texmf-dist/doc/latex/ran_toks/doc/rantoks_man.pdf b/Master/texmf-dist/doc/latex/ran_toks/doc/rantoks_man.pdf index f325fc70c37..08b4e443b69 100644 Binary files a/Master/texmf-dist/doc/latex/ran_toks/doc/rantoks_man.pdf and b/Master/texmf-dist/doc/latex/ran_toks/doc/rantoks_man.pdf differ diff --git a/Master/texmf-dist/doc/latex/ran_toks/doc/rantoks_man.tex b/Master/texmf-dist/doc/latex/ran_toks/doc/rantoks_man.tex index ffe4d67bd64..b36612f1590 100644 --- a/Master/texmf-dist/doc/latex/ran_toks/doc/rantoks_man.tex +++ b/Master/texmf-dist/doc/latex/ran_toks/doc/rantoks_man.tex @@ -2,12 +2,19 @@ \usepackage[fleqn]{amsmath} \usepackage[ web={centertitlepage,designv,forcolorpaper, - usesf,latextoc,pro}, %tight, + latextoc,pro}, %tight, eforms,aebxmp ]{aeb_pro} \usepackage{ran_toks} -\useThisSeed{1441984427} + +%\useThisSeed{1441984427} %\useLastAsSeed +\useThisSeed{2001383846} + +%2001383846 % initializing seed value +%1629639958 % last random number used + + %\rtdebugtrue %\ranToksOn %\ranToksOff @@ -25,11 +32,29 @@ \hskip2em\hbox{}\nobreak\hfill#1} \def\fitit{\eq@fititin{\exrtnlabelformat}} \@mparswitchfalse\reversemarginpar -%\def\meta#1{$\langle\textit{\texttt{#1}}\rangle$} +\renewcommand{\paragraph} + {\@startsection{paragraph}{4}{0pt}{6pt}{-3pt} + {\normalfont\normalsize\bfseries}} +\renewcommand{\subparagraph} + {\@startsection{subparagraph}{5}{\parindent}{6pt}{-3pt}% + {\normalfont\normalsize\bfseries}} +\makeatother + +\def\anglemeta#1{$\langle\textit{\texttt{#1}}\rangle$} \def\meta#1{\textit{\texttt{#1}}} +\def\darg#1{\texttt{\{#1\}}} +\def\takeMeasure{\bgroup\obeyspaces\takeMeasurei} +\def\takeMeasurei#1{\global\setbox\webtempboxi\hbox{\ttfamily#1}\egroup} +\def\bxSize{\wd\webtempboxi+2\fboxsep+2\fboxrule} +\usepackage[active]{srcltx} + +\let\amtIndent\leftmargini +\def\SUB#1{${}_{\text{#1}}$} + +\newdimen\aebdimen \aebdimen\topsep +\newcommand\bVerb[1][]{\begingroup#1\vskip\aebdimen\parindent0pt}% +\def\eVerb{\vskip\aebdimen\endgroup\noindent} -\makeatother -%\usepackage[active]{srcltx} \urlstyle{rm} @@ -43,7 +68,7 @@ email={dpstory@acrotex.net}, subject=Documentation for the ran\_toks package, talksite={\url{www.acrotex.net}}, - version={1.0}, + version={1.0e}, Keywords={LaTeX,PDF,random, tokens, JavaScript,Adobe Acrobat}, copyrightStatus=True, copyrightNotice={Copyright (C) \the\year, D. P. Story}, @@ -67,8 +92,7 @@ \def\exSrc{\makebox[0pt][r]{\large{\Pisymbol{webd}{157}}\enspace}} %\pagestyle{empty} -\parindent0pt -\parskip\medskipamount +%\parindent0pt\parskip\medskipamount \definePath\bgPath{"C:/Users/Public/Documents/% @@ -96,21 +120,31 @@ is long overdue; users of \textbf{AeB} and of \textsf{eqexam} have long asked fo randomize the order of the problems in a test or quiz, or anything for that matter. -\exSrc The example file for this package is \texttt{ran\_toks.tex} found in the -\texttt{examples} folder. The file reproduces the sample code of this -manual. +\newtopic\noindent\exSrc The \texttt{examples} folder contains three demonstration files: +\begin{enumerate} + \item \texttt{ran\_toks.tex} reproduces the sample code of this manual. + \item \texttt{random\_tst.tex} shows how to use \textsf{ran\_toks} to + randomize the \emph{questions} of an exam document created by the + \textsf{eqexam} package. + \item \texttt{random\_tst\_qz.tex} shows how to randomize choices of a + multiple choice field in a \texttt{quiz} environment of the + \textsf{exerquiz} package, when the choices contain verbatim text. +\end{enumerate} \section{The Preamble and Package Options} The preamble for this package is -\begin{Verbatim}[xleftmargin=20pt,commandchars=!()] -!fbox(\usepackage{ran_toks}) +\bVerb\takeMeasure{\string\usepackage\darg{ran\_toks}}% +\begin{minipage}{\bxSize}\kern0pt +\begin{Verbatim}[frame=single] +\usepackage{ran_toks} \end{Verbatim} +\end{minipage}\eVerb The package itself has no options. The requirements for \textsf{ran\_toks} are the \textsf{verbatim} package (part of the standard {\LaTeX} distribution, and the macro file -\texttt{random.tex}, by Donald Arseneau +\texttt{random.tex} by Donald Arseneau \section{The main commands and environments}\label{rtmain} @@ -124,17 +158,20 @@ command}{\CMD{ranToks}} command} The \cs{ranToks} command was the original concept; declare a series of tokens to be randomized. -\begin{Verbatim}[xleftmargin=20pt,commandchars=!()] -!fbox(!parbox(1.5in)(\ranToks{!meta(name)}{% - {!meta(token_1)} - {!meta(token_2)} +\bVerb\takeMeasure{\string\ranToks\darg{\meta{name}}\{\%\enspace}% +\begin{minipage}{\bxSize}\kern0pt +\begin{Verbatim}[frame=single,commandchars=!()] +\ranToks{!meta(name)}{% + {!meta(token!SUB(1))} + {!meta(token!SUB(2))} ... - {!meta(token_n)} -})) + {!meta(token!SUB(n))} +} \end{Verbatim} -were \meta{token\_k} is any non-verbatim content;\footnote{Any token that +\end{minipage}\eVerb +were \meta{token\SUB{k}} is any non-verbatim content;\footnote{Any token that can be in the argument of a command.} each token is enclosed in braces -(\verb!{}!), this is required. The \meta{name} parameter is required, and +(\darg{}), this is required. The \meta{name} parameter is required, and must be unique for the document; it is used to build the names of internal macros. Of course several such \cs{ranToks} can be used in the document, either in the preamble or in the body of the document. Multiple @@ -142,34 +179,37 @@ either in the preamble or in the body of the document. Multiple \emph{After} a \cs{ranToks} command has been executed, the number of tokens counted is accessible through the \cs{nToksFor} command, -\begin{Verbatim}[xleftmargin=20pt,commandchars=!()] -!fbox(\nToksFor{!meta(name)}) +\bVerb\takeMeasure{\string\nToksFor\darg{\meta{name}}}% +\begin{minipage}{\bxSize}\kern0pt +\begin{Verbatim}[frame=single,commandchars=!()] +\nToksFor{!meta(name)} \end{Verbatim} +\end{minipage}\eVerb The one argument is \meta{name}, and will expand to the total number of tokens listing as argument in the \cs{ranToks} command by the same name. The \cs{ranToks} command does not display the randomized tokens, for that the command \cs{useRanTok} is used. -\begin{Verbatim}[xleftmargin=20pt,commandchars=!()] -!fbox(!parbox(1.3in)(\useRTName{!meta(name)} -\useRanTok{1} -\useRanTok{2} -... -\useRanTok{n})) +\bVerb\takeMeasure{\string\useRTName\darg{\meta{name}}}% +\begin{minipage}{\bxSize} +\begin{Verbatim}[frame=single,commandchars=!()] +\useRanTok{!meta(num)} +\useRTName{!meta(name)} \end{Verbatim} +\end{minipage}\eVerb The argument of \cs{useRanTok} is a positive integer between 1 and -\verb!\nToksFor{!\meta{name}\verb!}!, the number of tokens declared by \cs{ranToks}, inclusive. -There is no space created following the \cs{useRanTok} command, so if -these are to be used ``inline'', enclose them in braces (\verb~{}~), eg, -\verb!{\useRanTok{1}}!. The use of \cs{useRTName} is optional unless the -listing of the \cs{useRanTok} commands is separated from the \cs{ranToks} -command that defined them by another \cs{ranToks} command of a different -name. That should be clear! +\cs{nToksFor\darg{\meta{name}}}, the number of tokens declared by +\cs{ranToks}, inclusive. There is no space created following the +\cs{useRanTok} command, so if these are to be used ``inline'', enclose them +in braces (\darg{}), for example, \darg{\cs{useRanTok\darg{1}}}. The use of +\cs{useRTName} is optional unless the listing of the \cs{useRanTok} commands +is separated from the \cs{ranToks} command that defined them by another +\cs{ranToks} command of a different name. That should be clear! Consider this example. -\begin{Verbatim}[xleftmargin=20pt,commandchars=!()] +\begin{Verbatim}[xleftmargin=\amtIndent] \ranToks{myPals}{% {Jim}{Richard}{Don} {Alex}{Tom}{J\"{u}rgen} @@ -183,13 +223,13 @@ 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.) The verbatim listing is, -\begin{Verbatim}[xleftmargin=20pt,commandchars=!()] +\begin{Verbatim}[xleftmargin=\amtIndent] I have {\nToksFor{myPals}} pals, they are \useRanTok{1}, \useRanTok{2}, \useRanTok{3}, \useRanTok{4}, {\useRanTok{5}} and \useRanTok{6}. \end{Verbatim} Notice that \cs{useRanToks} are not enclosed in braces for 1--4 because -they are each followed by a comma; the fifth token, \verb!{useRanTok{5}}!, is +they are each followed by a comma; the fifth token, \texttt{\darg{\cs{useRanTok\darg{5}}}}, is enclosed in braces to generate a space following the insertion of the text. Repeating the sentence yields, ``I have {\nToksFor{myPals}} pals, they are @@ -214,33 +254,38 @@ and verbatim environments. \texorpdfstring{\protect\cs{bRTVToks}/\protect\cs{eRTVToks}} {\CMD{bRTVToks}/\CMD{eRTVToks}} pair of commands} -Sometimes the content to be randomized is quite large and contain verbatim +Sometimes the content to be randomized is quite large or contains verbatim text. For this, it may be more convenient to use the -\cs{bRTVToks}/\cs{eRTVToks} command pair. The syntax is -\begin{Verbatim}[xleftmargin=20pt,commandchars=!()] -!fbox(!parbox(1.6in)(\bRTVToks{!meta(name)} +\cs{bRTVToks}/\penalty0\cs{eRTVToks} command pair. The syntax is +\bVerb\takeMeasure{\string\bRTVToks\darg{\meta{name}}\quad}% +\edef\WIDTH{\the\wd\webtempboxi}% +\def\1{\rlap{\hspace*{\WIDTH}\texttt{\% End token listing}}}% +\takeMeasure{\string\bRTVToks\darg{\meta{name}}\quad\% <- Begin token listing}% +\begin{minipage}{\bxSize}\kern0pt +\begin{Verbatim}[frame=single,commandchars=!()] +\bRTVToks{!meta(name)}!quad% <- Begin token listing \begin{rtVW} - !meta(content) + !anglemeta(content!SUB(1)) \end{rtVW} ... ... \begin{rtVW} - !meta(content) + !anglemeta(content!SUB(n)) \end{rtVW} -\eRTVToks)) +!1\eRTVToks \end{Verbatim} +\end{minipage}\eVerb The \cs{bRTVToks}\texttt{\{\meta{name}\}} command begins the (pseudo) -environment and is ended by \cs{eRTVToks}. Between these two are a series -of \texttt{rtVW} (random toks verbatim write) environments. When the document -is compiled, the contents of each of these environments is written to the -disk drive and saved under a different name (based on the parameter -\meta{name}). Later, using the \cs{useRanTok} commands, they are input -back into the document in a random order. +environment and is ended by \cs{eRTVToks}. Between these two are a series of +\texttt{rtVW} (random toks verbatim write) environments. When the document is +compiled, the contents (\anglemeta{content\SUB{i}}) of each of these environments +are written to the computer hard drive and saved under a different name +(based on the parameter \meta{name}). Later, using the \cs{useRanTok} +commands, they are input back into the document in a random order. The use of \cs{useRTName} and \cs{useRanTok} were explained and illustrated in the previous section. Let's go to the examples, - -\begin{Verbatim}[xleftmargin=20pt,commandchars=!()] +\begin{Verbatim}[xleftmargin=\amtIndent] \bRTVToks{myThoughts} \begin{rtVW} \begin{minipage}[t]{.67\linewidth} @@ -251,7 +296,7 @@ I've forgotten the rest, have you too? \begin{rtVW} \begin{minipage}[t]{.67\linewidth} I gave up saying bad things like -\verb!$#%%%^*%^&#$@#! when I was just a teenager +\verb!$#%%%^*%^&#$@#! when I was just a teenager. \end{minipage} \end{rtVW} \begin{rtVW} @@ -278,7 +323,7 @@ I've forgotten the rest, have you too? \begin{rtVW} \begin{minipage}[t]{.67\linewidth} I gave up saying bad things like -\verb!$#%%%^*%^&#$@#! when I was just a teenager +\verb!$#%%%^*%^&#$@#! when I was just a teenager. \end{minipage} \end{rtVW} \begin{rtVW} @@ -297,7 +342,7 @@ How did that other stuff get in there? \item \useRanTok{3} \end{enumerate} The verbatim listing of the example above is -\begin{Verbatim}[xleftmargin=20pt,commandchars=!()] +\begin{Verbatim}[xleftmargin=\amtIndent] \begin{enumerate} \item \useRanTok{1} \item \useRanTok{2} @@ -305,39 +350,69 @@ The verbatim listing of the example above is \end{enumerate} \end{Verbatim} +\paragraph*{On the \cs{displayListRandomly} command.}\label{para:DLR} +In the enumerate example immediately above, the items in the list are +explicitly listed as \cs{item \cs{useRanTok\darg{1}}} and so one; an +alternate approach is to use the command \cs{displayListRandomly}, like so, +\begin{Verbatim}[xleftmargin=\amtIndent] +\begin{enumerate} + \displayListRandomly[\item]{myThoughts} +\end{enumerate} +\end{Verbatim} +The \cs{displayListRandomly} has the syntax, +\bVerb\takeMeasure{\string\displayListRandomly[\anglemeta{prior}]\darg{\meta{name}}}% +\begin{minipage}{\bxSize}\kern0pt +\begin{Verbatim}[frame=single,commandchars=!()] +\displayListRandomly[!anglemeta(prior)]{!meta(name)} +\end{Verbatim} +\end{minipage} +\eVerb The action of \cs{displayListRandomly} is to expand all tokens that +are listed in the \meta{name} token list, each entry is displayed with +\anglemeta{prior}\cs{useRanTok\darg{i}}, where \texttt{i} goes from~1 to +\cs{nToksFor\darg{\meta{name}}}. In the example above, \meta{prior} is +\cs{item}, but normally, its default is empty. + + + \section{Additional arguments and commands}\label{AddCmds} The syntax given earlier for \cs{useRanTok} was not completely specified. It is -\begin{Verbatim}[xleftmargin=20pt,commandchars=!()] -!fbox(\useRanTok[!meta(name)]{!meta(number)}) +\bVerb\takeMeasure{\string\useRanTok[\meta{name}]\darg{\meta{num}}}% +\begin{minipage}{\bxSize}\kern0pt +\begin{Verbatim}[frame=single,commandchars=!()] +\useRanTok[!meta(name)]{!meta(num)} \end{Verbatim} +\end{minipage}\eVerb The optional first parameter specifies the \meta{name} of the list from -which to draw a random token; the \meta{number} is the number of the -token in the range of 1 and \verb!\nToksFor{!\meta{name}\verb!}!, +which to draw a random token; \meta{num} is the number of the +token in the range of 1 and \cs{nToksFor\darg{\meta{name}}}, inclusive. The optional argument is useful in special circumstances when you want to mix two random lists together. -To illustrate: \useRanTok[myPals]{1}, \useRanTok[myThoughts]{1} +\newtopic\noindent To illustrate: \useRanTok[myPals]{1}, \useRanTok[myThoughts]{1} -The verbatim listing is -\begin{Verbatim}[xleftmargin=20pt,commandchars=!()] +\newtopic\noindent The verbatim listing is +\begin{Verbatim}[xleftmargin=\amtIndent] To illustrate: \useRanTok[myPals]{1}, \useRanTok[myThoughts]{1} \end{Verbatim} -This is a rather bad illustration. Every time this document is compiled -there is a different page break on page~\pageref*{AddCmds}. This must be used -wisely. +The typeset version looks a little strange, but recall, the text of +\texttt{myThoughts} were each put in a \texttt{minipage} of width \texttt{.67\cs{linewidth}}. +Without the \texttt{minipage}, the text would wrap around normally. -The original order of the list of tokens is not lost, you can retrieve +\paragraph*{Accessing the original order.} The original order of the list of tokens is not lost, you can retrieve them using the command \cs{rtTokByNum}, -\begin{Verbatim}[xleftmargin=20pt,commandchars=!()] -!fbox(\rtTokByNum[!meta(name)]{!meta(number)}) +\bVerb\takeMeasure{\string\rtTokByNum[\meta{name}]\darg{\meta{num}}}% +\begin{minipage}{\bxSize}\kern0pt +\begin{Verbatim}[frame=single,commandchars=!()] +\rtTokByNum[!meta(name)]{!meta(num)} \end{Verbatim} +\end{minipage}\eVerb This command expands to the token declared in the list named \meta{name} -that appears at the \meta{number} place in the list. (Rather awkwardly written.) +that appears at the \meta{num} place in the list. (Rather awkwardly written.) For example, my really best pals are {\rtTokByNum[myPals]{3}} and \rtTokByNum[myPals]{4}, but don't tell them. The listing is, -\begin{Verbatim}[xleftmargin=20pt,commandchars=!()] +\begin{Verbatim}[xleftmargin=\amtIndent] For example, my really best pals are {\rtTokByNum[myPals]{3}} and \rtTokByNum[myPals]{4}, but don't tell them. \end{Verbatim} @@ -345,30 +420,32 @@ In some sense, \cs{rtTokByNum[\meta{name}]} acts like a simple array, the length of which is \cs{nToksFor\{\meta{name}\}}, and whose $k^{\text{th}}$ element is \cs{rtTokByNum[\meta{name}]\{\meta{k}\}}. -The randomization may be turned off using \cs{ranToksOff} or turned back -on with \cs{ranToksOn}. -\begin{Verbatim}[xleftmargin=20pt,commandchars=!()] -!fbox(!parbox(.9in)(\ranToksOff -\ranToksOn)) +\paragraph*{Turning off randomization.} The randomization may be turned off +using \cs{ranToksOff} or turned back on with \cs{ranToksOn}. +\bVerb\takeMeasure{\string\ranToksOff\quad\string\ranToksOn}% +\begin{minipage}{\bxSize}\kern0pt +\begin{Verbatim}[frame=single,commandchars=!()] +\ranToksOff!quad\ranToksOn \end{Verbatim} +\end{minipage}\eVerb This can be done globally in the preamble for the whole of the document, or in the body of the document just prior to either \cs{ranToks} or \cs{bRTVToks}. For example, -\begin{Verbatim}[xleftmargin=20pt,commandchars=!()] +\begin{Verbatim}[xleftmargin=\amtIndent] \ranToksOff \ranToks{integers}{ {1}{2}{3}{4} } -\ranToksOff +\ranToksOn \end{Verbatim} -This should make $\verb!\useRanTok{3}! = \verb!\rtTokByNum{3}! = 3 $; -executing this code, we get, \ranToksOff\ranToks{integers}{ {1}{2}{3}{4} }\ranToksOff -$\useRanTok{3} = \rtTokByNum{3} = 3 $? As anticipated. +As a check, executing `$\cs{useRanTok\darg{3}} = \cs{rtTokByNum\darg{3}} = 3 $' yields +`\ranToksOff\ranToks{integers}{ {1}{2}{3}{4}}\ranToksOn +$\useRanTok{3} = \rtTokByNum{3} = 3 $'? As anticipated. The command \cs{ranToksOff} is probably best in the preamble to turn off all randomization while the rest of the document is being composed. -The \textsf{ran\_toks} package writes an auxiliary file named -\verb!\jobname\_rt.sav!, below represents two typical lines in this file. -\begin{Verbatim}[xleftmargin=20pt,commandchars=!()] +\paragraph*{The \textsf{ran\_toks} auxiliary file.} The package writes to a file named +\cs{jobname\_rt.sav}, below represents two typical lines in this file. +\begin{Verbatim}[xleftmargin=\amtIndent] 1604051353 % initializing seed value 5747283528 % last random number used \end{Verbatim} @@ -381,42 +458,48 @@ Normally, the pseudo-random number generator provided by you recompile again before another minute, you'll get the same initial seed value. -To obtain a new initial seed value each time you compile, place -\cs{useLastAsSeed} in the preamble. -\begin{Verbatim}[xleftmargin=20pt,commandchars=!()] -!fbox(\useLastAsSeed) +\paragraph*{Controlling the initial seed value.} To obtain a new initial seed +value each time you compile, place \cs{useLastAsSeed} in the preamble. +\bVerb\takeMeasure{\string\useLastAsSeed}% +\begin{minipage}{\bxSize}\kern0pt +\begin{Verbatim}[frame=single] +\useLastAsSeed \end{Verbatim} +\end{minipage}\eVerb When the document is compiled, the initial seed value taken as the second -line in the \verb!\jobname\_rt.sav! file, as seen in the above example. +line in the \cs{jobname\_rt.sav} file, as seen in the above example. With this command in the preamble, a new set of random numbers is generated on each compile. If the file \cs{jobname\_rt.sav} does not exist, the generator will be initialized by its usual method, using the time and date. The command \cs{useThisSeed} allows you to reproduce a previous pseudo-random sequence. -\begin{Verbatim}[xleftmargin=20pt,commandchars=!()] -!fbox(\useThisSeed{!meta(init_seed_value)}) +\bVerb\takeMeasure{\string\useThisSeed\darg{\meta{init\_seed\_value}}}% +\begin{minipage}{\bxSize}\kern0pt +\begin{Verbatim}[frame=single,commandchars=!()] +\useThisSeed{!meta(init_seed_value)} \end{Verbatim} +\end{minipage}\eVerb This command needs to be placed in the preamble. The value of \meta{init\_seed\_value} is an integer, normally taken from the -first line of the \verb!\jobname\_rt.sav! file. +first line of the \cs{jobname\_rt.sav} file. When creating tests (possibly using \textsf{eqexam}), the problems, or contiguous collections of problems, can be randomly ordered using the -\cs{bRTVToks}/\cs{eRTVToks} paradigm. For example, suppose there are two -classes and you want a random order (some of) the problems for each of the -two classes. Proceed as follows: +\cs{bRTVToks}/\penalty0\cs{eRTVToks} command pair paradigm. For example, +suppose there are two classes and you want a random order (some of) the +problems for each of the two classes. Proceed as follows: \begin{enumerate} \item Compile the document, open \cs{jobname\_rt.sav}, and copy the first line (in the above example, that would be \texttt{1604051353}). -\item Place \verb!\useThisSeed{1604051353}! in the preamble. Compiling +\item Place \cs{useThisSeed\darg{1604051353}} in the preamble. Compiling will bring back the same pseudo-random sequence very time. \item Comment this line out, and repeat the process (use \cs{useLastAsSeed} to generate new random sequences at each compile) until you get another distinct randomization, open \cs{jobname\_rt.sav}, and copy the first line again, say its \texttt{735794511}. -\item Place \verb!\useThisSeed{735794511}! in the preamble. +\item Place \cs{useThisSeed\darg{735794511}} in the preamble. \item Label each \begin{Verbatim} %\useThisSeed{1604051353} % 11:00 class @@ -426,12 +509,13 @@ To reproduce the random sequence for the class, just uncomment the random seed used for that class. \end{enumerate} If you are using \textsf{eqexam}, the process can be automated as follows: -\begin{Verbatim}[xleftmargin=20pt,commandchars=!()] +\begin{Verbatim}[xleftmargin=\amtIndent,commandchars=!()] \vA{\useThisSeed{1604051353}} % 11:00 class \vB{\useThisSeed{735794511}} % 12:30 class \end{Verbatim} Again, this goes in the preamble. +\newtopic\noindent Now, I simply must get back to my retirement. \dps \end{document} diff --git a/Master/texmf-dist/doc/latex/ran_toks/examples/mytext.verb b/Master/texmf-dist/doc/latex/ran_toks/examples/mytext.verb new file mode 100644 index 00000000000..82865ace47c --- /dev/null +++ b/Master/texmf-dist/doc/latex/ran_toks/examples/mytext.verb @@ -0,0 +1 @@ +Hello \verb!$%$#$^~_! world! diff --git a/Master/texmf-dist/doc/latex/ran_toks/examples/ran_toks.tex b/Master/texmf-dist/doc/latex/ran_toks/examples/ran_toks.tex index 5136f083717..9bbe5ef985d 100644 --- a/Master/texmf-dist/doc/latex/ran_toks/examples/ran_toks.tex +++ b/Master/texmf-dist/doc/latex/ran_toks/examples/ran_toks.tex @@ -2,7 +2,7 @@ \usepackage{ran_toks} %\useThisSeed{606574325} -%\useLastAsSeed +\useLastAsSeed %\rtdebugtrue %\ranToksOn %\ranToksOff @@ -39,7 +39,7 @@ I've forgotten the rest, have you too? \begin{rtVW} \begin{minipage}[t]{.67\linewidth} I gave up saying bad things like -\verb!$#%%%^*%^&#$@#! when I was just a teenager +\verb!$#%%%^*%^&#$@#! when I was just a teenager. \end{minipage} \end{rtVW} \begin{rtVW} @@ -53,9 +53,9 @@ How did that other stuff get in there? \end{rtVW} \eRTVToks \begin{enumerate} - \item \useRanTok{1} - \item \useRanTok{2} - \item \useRanTok{3} + \item \useRanTok{1} + \item \useRanTok{2} + \item \useRanTok{3} \end{enumerate} Use \verb!\useRTName! command when another list separates the current @@ -64,11 +64,11 @@ position from the list you want to use. Here we want to use the list named \texttt{myThoughts} was declared. \useRTName{myPals} -List of pals: \useRanTok{1}, \useRanTok{2}, \useRanTok{3}, \useRanTok{4}, -\useRanTok{4}, \useRanTok{5}. +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}. +{\useRanTok[myPals]{1}} and \useRanTok[myThoughts]{1} The \verb!\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}} diff --git a/Master/texmf-dist/doc/latex/ran_toks/examples/random_tst.tex b/Master/texmf-dist/doc/latex/ran_toks/examples/random_tst.tex new file mode 100644 index 00000000000..1f64c79907c --- /dev/null +++ b/Master/texmf-dist/doc/latex/ran_toks/examples/random_tst.tex @@ -0,0 +1,103 @@ +% +% This demo file shows how to randomize the questions of an exam created +% by the eqexam package. +% +\documentclass{article} +\usepackage[allowrandomize,nosolutions, + forpaper,pointsonleft,noparttotals]{eqexam} +\usepackage{ran_toks} + +\useLastAsSeed +%\useThisSeed{452836675} % fi,t,f,s + +\examNum{1} +\title[T\nExam]{Test \nExam} +\author{D. P. Story} +\subject[MC]{My Course} +\date{Spring \the\year} +\keywords{Test~\nExam, Section 001} + +\university +{% + THE UNIVERSITY OF AKRON\\ + Theoretical and Applied Mathematics +} +\email{dpstory@uakron.edu} + +\begin{document} +\maketitle + + +\begin{exam}{Exam\nExam} + +\begin{instructions} +Solve each problem without error. +\end{instructions} + +\bRTVToks{Exam\nExam} + +\begin{rtVW} +\begin{problem}[5] +First: Which is correct? +\begin{answers}{4} +\bChoices[nCols=2,random] + \Ans1 True\eAns + \Ans0 False\eAns + \Ans0 Maybe\eAns + \Ans0 Perhaps\eAns +\eChoices +\end{answers} +\end{problem} +\end{rtVW} + +\begin{rtVW} +\begin{problem}[5] +Second: Which is correct? +\begin{answers}{4} +\bChoices[nCols=2,random] + \Ans1 True\eAns + \Ans0 False\eAns + \Ans0 Maybe\eAns + \Ans0 Perhaps\eAns +\eChoices +\end{answers} +\end{problem} +\end{rtVW} + +\begin{rtVW} +\begin{problem}[5] +Third: Which is correct? +\begin{answers}{4} +\bChoices[nCols=2,random] + \Ans1 True\eAns + \Ans0 False\eAns + \Ans0 Maybe\eAns + \Ans0 Perhaps\eAns +\eChoices +\end{answers} +\end{problem} +\end{rtVW} + +\begin{rtVW} +\begin{problem}[5] +Fourth: Which is correct? +\begin{answers}{4} +\bChoices[nCols=2,random] + \Ans1 True\eAns + \Ans0 False\eAns + \Ans0 Maybe\eAns + \Ans0 Perhaps\eAns +\eChoices +\end{answers} +\end{problem} +\end{rtVW} + +\eRTVToks + +% Ok, now display this questions in a random order. +\displayListRandomly{Exam\nExam} + + +\end{exam} + +\end{document} diff --git a/Master/texmf-dist/doc/latex/ran_toks/examples/random_tst_qz.tex b/Master/texmf-dist/doc/latex/ran_toks/examples/random_tst_qz.tex new file mode 100644 index 00000000000..3ca3c4043ef --- /dev/null +++ b/Master/texmf-dist/doc/latex/ran_toks/examples/random_tst_qz.tex @@ -0,0 +1,115 @@ +% +% This demo file shows how to randomize the choices of a quiz created +% by the exerquiz package, where the choices have verbatim text. +% +% The questions themselves are not randomized, but they can be, see random_tst.tex +% to see how to do this. +% +\documentclass{article} +\usepackage[designiv]{web} +\usepackage[allowrandomize,showgrayletters]{exerquiz} +\usepackage{ran_toks} + +% When using cross-referencing and \useLastAsSeed, the cross-references are never up to date. +% Once you randomize, read the auxiliary file (\jobname_rt.save), copy the first seed listed +% and paste in as the argument of \useThisSeed. Compile a few more times to bring cross-refereces +% up to date. +%\useLastAsSeed +\useThisSeed{1327548830} + +\rowsepDefault{3pt} + + +\begin{document} + +\begin{quiz*}{myRandomQuiz} + Riddle me this. +\begin{questions} + \item Try to guess the correct answer. + \begin{answers}{2} + \bChoices[random] + \Ans0 1 a choice\eAns + \Ans1\label{eq} 2 another choice\eAns + \Ans0 3 still another choice\eAns + \Ans0 4 another\eAns + \Ans0 5 incoming\eAns + \Ans0 6 more choices\eAns + \Ans0 7 another still\eAns + \Ans0 8 too many\eAns + \Ans0 9 choices\eAns + \Ans0 10 \input{mytext.verb}\eAns + \eFreeze + \Ans0 10 None of these\eAns + \eChoices + \end{answers} +\end{questions} +\end{quiz*}\quad\ScoreField\currQuiz\CorrButton\currQuiz + + +\newpage + +\bRTVToks{myChoices} +\begin{rtVW} +\verb!$ true $! +\end{rtVW} +\begin{rtVW} +\verb!~ false %! +\end{rtVW} +\begin{rtVW} +\verb!% maybe ^! +\end{rtVW} +\begin{rtVW} +\verb!$& perhaps #$! +\end{rtVW} +\eRTVToks + +\begin{quiz*}{myQuiz} +Solve each. +\begin{questions} + + \item Which is true? (Answer: \hyperref[rtAns3]{(\REF*{rtAns3})}) +\useRTName{myChoices} +\begin{manswers}*{1} +\bChoices[random=true,label=rtAns] + \Ans{1}\label{rtAns3}\rtTokByNum{1}\eAns + \Ans{0} Wow, \rtTokByNum{2}, this is great!\eAns + \Ans{0}\rtTokByNum{3}\eAns + \Ans{0}\rtTokByNum{4}\eAns +\eFreeze + \Ans{1} Hello mom!\eAns +\eChoices +\end{manswers} +\begin{solution} +The answer is \useSavedAlts{rtAns}, or to be more precise, +\useSavedAltsAns{rtAns}. \hyperref[rtAns3]{(\REF*{rtAns3})} +\end{solution} + + \item Which is true? (Ans: \hyperref[rtAns1]{(\REF*{rtAns1})}) +\useRTName{myChoices} +\begin{answers}*{3} + \bChoices[random,nCols=2] + \Ans{1}\label{rtAns1} \rtTokByNum{1}\eAns + \Ans{0} \rtTokByNum{2}\eAns + \Ans{0} \rtTokByNum{3}\eAns + \Ans{0} \rtTokByNum{4}\eAns + \eChoices +\end{answers} +\begin{solution} +The answer is \hyperref[rtAns1]{(\REF*{rtAns1})} found in the +\nameref{rtAns1} on page~\pageref{rtAns1}. +\end{solution} + + \item Which is true? +\useRTName{myChoices} +\begin{answers}{3} + \bChoices[random] + \Ans{1} \rtTokByNum{1}\eAns + \Ans{0} \rtTokByNum{2}\eAns + \Ans{0} \rtTokByNum{3}\eAns + \Ans{0} \rtTokByNum{4}\eAns + \eChoices +\end{answers} +\end{questions} +\end{quiz*} + +\end{document} diff --git a/Master/texmf-dist/source/latex/ran_toks/ran_toks.dtx b/Master/texmf-dist/source/latex/ran_toks/ran_toks.dtx index 5236428ec86..be22614b340 100644 --- a/Master/texmf-dist/source/latex/ran_toks/ran_toks.dtx +++ b/Master/texmf-dist/source/latex/ran_toks/ran_toks.dtx @@ -29,7 +29,7 @@ % %<*copyright> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ran_toks.sty package, 2012/10/29 %% +%% ran_toks.sty package, 2013/08/03 %% %% Copyright (C) 2012 D. P. Story %% %% dpstory@uakron.edu %% %% %% @@ -42,7 +42,7 @@ % %\NeedsTeXFormat{LaTeX2e} %\ProvidesPackage{ran_toks} -% [2012/11/18 v1.0a Randomizing tokens] +% [2016/02/06 v1.0e Randomizing tokens] %<*driver> \documentclass{ltxdoc} %\usepackage{\jobname} @@ -114,7 +114,11 @@ % and \texttt{random.tex}, the package was written by Donald Arseneau. % \begin{macrocode} \RequirePackage{verbatim} -\input{random.tex} +% \end{macrocode} +% Input \texttt{random.tex} if now already input. +%\changes{v1.0d}{2013/08/03}{Added conditional input of random.tex} +% \begin{macrocode} +\@ifundefined{nextrandom}{\input{random.tex}}{} % \end{macrocode} % We redefine \cs{nextrandom} from \texttt{random.tex} to save the initializing seed. % \begin{macrocode} @@ -128,8 +132,9 @@ \nextrandom \nextrandom \nextrandom % \end{macrocode} % Save the initial seed value to \cs{rtInitSeedValue}. +% \changes{v1.0c}{2013/08/03}{Save the initial seed value to \cs{rtInitSeedValue}.} % \begin{macrocode} - \xdef\rtInitSeedValue{\the\randomi}% + \xdef\InitSeedValue{\the\randomi}% \fi \count@ii\randomi \divide\count@ii 127773 % modulus = multiplier * 127773 + 2836 @@ -181,22 +186,30 @@ % last random seed. If the file \cs{jobname\_rt.sav} does not exist, the generator will be % initialized using time and date data. % \begin{macrocode} -\def\useLastAsSeed{\IfFileExists{\jobname_rt.sav}% - {% +\def\useLastAsSeed{\rt@useLastAsSeed} +\@onlypreamble\useLastAsSeed +\def\rt@useLastAsSeed{% + \IfFileExists{\jobname_rt.sav}{% \PackageInfo{ran_toks}{Inputting \jobname_rt.sav}% - \newread\readsavfile + \@ifundefined{readsavfile}{\newread\readsavfile}{}% \openin\readsavfile=\jobname_rt.sav - \read\readsavfile to \rtInitSeedValue + \read\readsavfile to \InitSeedValue \read\readsavfile to \lastRandomNum \closein\readsavfile \randomi=\lastRandomNum +% \end{macrocode} +% When \cs{useLastAsSeed}, the last becomes the first. +% \begin{macrocode} + \xdef\InitSeedValue{\the\randomi} }{% \PackageInfo{ran_toks}{\jobname_rt.sav cannot be found, \MessageBreak using the random initializer}% }% } -\@onlypreamble\useLastAsSeed +\@ifundefined{aeb@randomizeChoices}{% + \let\inputRandomSeed\useLastAsSeed + \let\useRandomSeed\useThisSeed}{} % \end{macrocode} % % \section{Utility commands} @@ -215,18 +228,18 @@ % \end{macrocode} % We write only if \cs{ifsaveseed} is true. % \begin{macrocode} -\def\rtInitSeedValue{\the\randomi} +\def\InitSeedValue{\the\randomi} \def\rt@writeSeedData{% \ifsaveseed - \newwrite\rt@savedata - \immediate\openout \rt@savedata \jobname_rt.sav - \let\verbatim@out\rt@savedata + \@ifundefined{saveseedinfo}{\newwrite\saveseedinfo}{} + \immediate\openout \saveseedinfo \jobname_rt.sav + \let\verbatim@out\saveseedinfo \def\rt@msgi{initializing seed value}% \def\rt@msgii{last random number used}% \uccode`c=`\%\uppercase{% - \rt@IWVO{\rtInitSeedValue\space c \rt@msgi}% + \rt@IWVO{\InitSeedValue\space c \rt@msgi}% \rt@IWVO{\the\randomi\space c \rt@msgii}% - }% + }\immediate\closeout\saveseedinfo \fi } % \end{macrocode} @@ -387,13 +400,16 @@ % \DescribeMacro{\r@ndToks} is main looping command for \cs{ranToks} % and \cs{eRTVToks} (through \cs{r@nVToks}). If the ending token \cs{rt@NIL} is detected, we % break off and go to \cs{rt@endToks}. +% \changes{v1.0e}{2016/02/06}{Fixed a bug, when the first two tokens \texttt{\#1} are the same, +% we get an incorrect decision} % \begin{macrocode} -\long\def\r@ndToks#1{% +\def\rt@PAR{\par} +\long\def\r@ndToks#1{\def\rt@rgi{#1}% % \end{macrocode} % If the current argument is \cs{par}, we skip it % \begin{macrocode} - \ifx#1\par\def\rt@next{\r@ndToks}\else - \advance\rt@nMax1 + \ifx\rt@rgi\rt@PAR\def\rt@next{\r@ndToks}\else + \advance\rt@nMax1\relax \global\@namedef{rtTok\the\rt@nMax\rt@BaseName}{#1}% \def\rt@next{\@ifnextchar\rt@NIL {\rt@endToks\@gobble}{\r@ndToks}}% @@ -427,7 +443,8 @@ % \begin{macrocode} \def\assignRanToks#1{\advance\rt@nCnt1 \global\rt@nameedef{rtRanTok\the\rt@nCnt\rt@BaseName}% - {\noexpand\rtTokByNum[\rt@BaseName]{#1}}% + {\noexpand\@nameuse{rtTok#1\rt@BaseName}}% +% {\noexpand\rtTokByNum[\rt@BaseName]{#1}}% } % \end{macrocode} % \subsection{Additional user access commands} @@ -439,13 +456,26 @@ % The argument of it is an integer, eg, \verb!\rtTokByNum{3}! is the third token, as listed in the order % given in the argument of \cs{ranToks}. % \begin{macrocode} -\newcommand{\rtTokByNum}[2][\rt@BaseName]{\@nameuse{rtTok#2#1}\ignorespaces} +\newcommand{\rtTokByNum}[2][\rt@BaseName]{\@nameuse{rtTok#2#1}% + \ignorespaces} % \end{macrocode} %\DescribeMacro{\useRanTok} After \cs{ranToks} has been executed, the user has access to the % randomized tokens through \cs{useRanTok}. The argument is an integer 1 through max. % \begin{macrocode} \newcommand{\useRanTok}[2][\rt@BaseName]{\@nameuse{rtRanTok#2#1}} % \end{macrocode} +% \DescribeMacro{\displayListRandomly} lists all items in the list as passed +% by the required argument. For expanding in a list environment, use \cs{item} as +% the optional argument. Designed for listing all question in an eqexam +% document in random order. +%\changes{v1.0b}{2013/07/29}{Added \cs{displayListRandomly}} +%\changes{v1.0e}{2016/02/06}{Added optional argument to \cs{displayListRandomly}} +% \begin{macrocode} +\newcommand{\displayListRandomly}[2][]{\rt@nCnt=0\relax + \@whilenum\rt@nCnt<\nToksFor{#2}\advance\rt@nCnt1\relax + \do{#1\useRanTok{\the\rt@nCnt}}% +} +% \end{macrocode} % \begin{macrocode} % % \end{macrocode} diff --git a/Master/texmf-dist/tex/latex/ran_toks/ran_toks.sty b/Master/texmf-dist/tex/latex/ran_toks/ran_toks.sty index 97328c55b3f..f656d89a241 100644 --- a/Master/texmf-dist/tex/latex/ran_toks/ran_toks.sty +++ b/Master/texmf-dist/tex/latex/ran_toks/ran_toks.sty @@ -7,7 +7,7 @@ %% ran_toks.dtx (with options: `copyright,package') %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ran_toks.sty package, 2012/10/29 %% +%% ran_toks.sty package, 2013/08/03 %% %% Copyright (C) 2012 D. P. Story %% %% dpstory@uakron.edu %% %% %% @@ -19,9 +19,9 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{ran_toks} - [2012/11/18 v1.0a Randomizing tokens] + [2016/02/06 v1.0e Randomizing tokens] \RequirePackage{verbatim} -\input{random.tex} +\@ifundefined{nextrandom}{\input{random.tex}}{} \def\nextrandom{\begingroup \ifnum\randomi<\@ne % then initialize with time \global\randomi\time @@ -30,7 +30,7 @@ \global\multiply\randomi97 \global\advance\randomi\month \message{Randomizer initialized to \the\randomi.}% \nextrandom \nextrandom \nextrandom - \xdef\rtInitSeedValue{\the\randomi}% + \xdef\InitSeedValue{\the\randomi}% \fi \count@ii\randomi \divide\count@ii 127773 % modulus = multiplier * 127773 + 2836 @@ -58,22 +58,27 @@ \def\ranToksOff{\werandomizefalse} \def\useThisSeed#1{\saveseedfalse\randomi=#1} \@onlypreamble\useThisSeed -\def\useLastAsSeed{\IfFileExists{\jobname_rt.sav}% - {% +\def\useLastAsSeed{\rt@useLastAsSeed} +\@onlypreamble\useLastAsSeed +\def\rt@useLastAsSeed{% + \IfFileExists{\jobname_rt.sav}{% \PackageInfo{ran_toks}{Inputting \jobname_rt.sav}% - \newread\readsavfile + \@ifundefined{readsavfile}{\newread\readsavfile}{}% \openin\readsavfile=\jobname_rt.sav - \read\readsavfile to \rtInitSeedValue + \read\readsavfile to \InitSeedValue \read\readsavfile to \lastRandomNum \closein\readsavfile \randomi=\lastRandomNum + \xdef\InitSeedValue{\the\randomi} }{% \PackageInfo{ran_toks}{\jobname_rt.sav cannot be found, \MessageBreak using the random initializer}% }% } -\@onlypreamble\useLastAsSeed +\@ifundefined{aeb@randomizeChoices}{% + \let\inputRandomSeed\useLastAsSeed + \let\useRandomSeed\useThisSeed}{} \def\verbatimwrite{\@bsphack \let\do\@makeother\dospecials \catcode`\^^M\active \catcode`\^^I=12 @@ -83,18 +88,18 @@ \verbatim@start} \def\endverbatimwrite{\@esphack} \def\rt@IWVO{\immediate\write\verbatim@out} -\def\rtInitSeedValue{\the\randomi} +\def\InitSeedValue{\the\randomi} \def\rt@writeSeedData{% \ifsaveseed - \newwrite\rt@savedata - \immediate\openout \rt@savedata \jobname_rt.sav - \let\verbatim@out\rt@savedata + \@ifundefined{saveseedinfo}{\newwrite\saveseedinfo}{} + \immediate\openout \saveseedinfo \jobname_rt.sav + \let\verbatim@out\saveseedinfo \def\rt@msgi{initializing seed value}% \def\rt@msgii{last random number used}% \uccode`c=`\%\uppercase{% - \rt@IWVO{\rtInitSeedValue\space c \rt@msgi}% + \rt@IWVO{\InitSeedValue\space c \rt@msgi}% \rt@IWVO{\the\randomi\space c \rt@msgii}% - }% + }\immediate\closeout\saveseedinfo \fi } \AtEndDocument{\rt@writeSeedData}% @@ -192,9 +197,10 @@ \expandafter\r@nToks\expandafter{\the\rt@listIn}% } \def\rt@inputVerb#1{\input{\jobname_#1.cut}} -\long\def\r@ndToks#1{% - \ifx#1\par\def\rt@next{\r@ndToks}\else - \advance\rt@nMax1 +\def\rt@PAR{\par} +\long\def\r@ndToks#1{\def\rt@rgi{#1}% + \ifx\rt@rgi\rt@PAR\def\rt@next{\r@ndToks}\else + \advance\rt@nMax1\relax \global\@namedef{rtTok\the\rt@nMax\rt@BaseName}{#1}% \def\rt@next{\@ifnextchar\rt@NIL {\rt@endToks\@gobble}{\r@ndToks}}% @@ -210,11 +216,16 @@ } \def\assignRanToks#1{\advance\rt@nCnt1 \global\rt@nameedef{rtRanTok\the\rt@nCnt\rt@BaseName}% - {\noexpand\rtTokByNum[\rt@BaseName]{#1}}% + {\noexpand\@nameuse{rtTok#1\rt@BaseName}}% } \newcommand{\nToksFor}[1]{\@nameuse{nMax4#1}} -\newcommand{\rtTokByNum}[2][\rt@BaseName]{\@nameuse{rtTok#2#1}\ignorespaces} +\newcommand{\rtTokByNum}[2][\rt@BaseName]{\@nameuse{rtTok#2#1}% + \ignorespaces} \newcommand{\useRanTok}[2][\rt@BaseName]{\@nameuse{rtRanTok#2#1}} +\newcommand{\displayListRandomly}[2][]{\rt@nCnt=0\relax + \@whilenum\rt@nCnt<\nToksFor{#2}\advance\rt@nCnt1\relax + \do{#1\useRanTok{\the\rt@nCnt}}% +} \endinput %% %% End of file `ran_toks.sty'. -- cgit v1.2.3