From 910f589664407d620dc2a30c7b1de1a10e715df1 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Fri, 19 May 2017 21:06:02 +0000 Subject: ran_toks (19may17) git-svn-id: svn://tug.org/texlive/trunk@44429 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/ran_toks/ran_toks.sty | 231 ++++++++++++++-------- 1 file changed, 151 insertions(+), 80 deletions(-) (limited to 'Master/texmf-dist/tex/latex') 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 f656d89a241..f5f253e0b17 100644 --- a/Master/texmf-dist/tex/latex/ran_toks/ran_toks.sty +++ b/Master/texmf-dist/tex/latex/ran_toks/ran_toks.sty @@ -7,8 +7,8 @@ %% ran_toks.dtx (with options: `copyright,package') %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% ran_toks.sty package, 2013/08/03 %% -%% Copyright (C) 2012 D. P. Story %% +%% Web package, %% +%% Copyright (C) 1999-2017 D. P. Story %% %% dpstory@uakron.edu %% %% %% %% This program can redistributed and/or modified under %% @@ -17,9 +17,9 @@ %% macros/latex/base/lppl.txt; either version 1 of the %% %% License, or (at your option) any later version. %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\NeedsTeXFormat{LaTeX2e} +\NeedsTeXFormat{LaTeX2e}[1997/12/01] \ProvidesPackage{ran_toks} - [2016/02/06 v1.0e Randomizing tokens] + [2017/05/04 v1.1 Randomizing tokens (dps)] \RequirePackage{verbatim} \@ifundefined{nextrandom}{\input{random.tex}}{} \def\nextrandom{\begingroup @@ -89,47 +89,38 @@ \def\endverbatimwrite{\@esphack} \def\rt@IWVO{\immediate\write\verbatim@out} \def\InitSeedValue{\the\randomi} -\def\rt@writeSeedData{% - \ifsaveseed - \@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{\InitSeedValue\space c \rt@msgi}% - \rt@IWVO{\the\randomi\space c \rt@msgii}% - }\immediate\closeout\saveseedinfo - \fi -} +\def\rt@writeSeedData{\ifsaveseed + \@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{\InitSeedValue\space c \rt@msgi}% + \rt@IWVO{\the\randomi\space c \rt@msgii}}\immediate + \closeout\saveseedinfo\fi} \AtEndDocument{\rt@writeSeedData}% -\def\rt@populateList#1{% - \rt@listIn={}% - \rt@nCnt=0 - \@whilenum\rt@nCnt<#1\do{% - \advance\rt@nCnt1 +\def\rt@populateList#1{\rt@listIn={}\rt@nCnt\z@ + \@whilenum\rt@nCnt<#1\do{\advance\rt@nCnt\@ne \edef\rt@listInHold{\the\rt@listIn\noexpand\\{\the\rt@nCnt}}% - \rt@listIn=\expandafter{\rt@listInHold}% - }% -} -\def\rt@RandomizeList#1{% - \global\rt@listIn={}\global\rt@newListIn={}\global\rt@listOut={}% + \rt@listIn=\expandafter{\rt@listInHold}}} +\def\rt@RandomizeList#1{\global + \rt@listIn={}\global\rt@newListIn={}\global\rt@listOut={}% \rt@nMax=#1\relax\rt@populateList{\the\rt@nMax}% \ifwerandomize \expandafter\rt@randomizeList\else \global\rt@listOut=\expandafter{\the\rt@listIn}\fi -} -\def\rt@randomizeList{% - \let\\=\rt@processi + \global\rt@nameedef{\rt@BaseName-List}{\the\rt@listOut}} +\def\rt@randomizeList{\let\\=\rt@processi \setrannum{\rt@getRanNum}{1}{\the\rt@nMax}% \ifrtdebug\typeout{\string\rt@getRanNum=\the\rt@getRanNum}\fi - \rt@nCnt=0\relax + \rt@nCnt\z@ \ifrtdebug\typeout{LISTING: \the\rt@listIn}\fi \the\rt@listIn \rt@loopTest } -\def\rt@loopTest{\advance\rt@nMax-1\relax - \ifnum\rt@nMax>0\relax +\def\rt@loopTest{\advance\rt@nMax\m@ne + \ifnum\rt@nMax>\z@ \def\rt@next{% \rt@listIn=\expandafter{\the\rt@newListIn}% \rt@newListIn={}\rt@randomizeList}% @@ -140,7 +131,7 @@ \fi \rt@next } -\def\rt@processi#1{\advance\rt@nCnt1 +\def\rt@processi#1{\advance\rt@nCnt\@ne \ifnum\rt@nCnt=\rt@getRanNum \edef\rt@listOutHold{\the\rt@listOut}% \global\rt@listOut=\expandafter{\rt@listOutHold\\{#1}}% @@ -152,28 +143,49 @@ \ifrtdebug\typeout{\string\rt@newListIn: \the\rt@newListIn}\fi \fi } +\def\rt@modarith#1#2{\count\z@=#1\relax\count\tw@=#1\relax + \advance\count\z@\m@ne\divide\count\z@ #2\relax + \multiply\count\z@ #2\relax + \advance\count\tw@-\count\z@ + \edef\rt@mod{\the\count\tw@}} +\def\rt@badIndex#1#2{\PackageWarningNoLine{ran_toks} + {The argument of \string\useRanTok{#1} on line + \the\inputlineno\space is\MessageBreak + greater than \string\nToksFor{#2} (\nToksFor{#2}), + instead will use\MessageBreak + \string\useRanTok{\rt@mod}, obtained from modular + arithmetic.\MessageBreak + You might want to fix this} +} +\def\rt@badTokName#1{% + \PackageWarningNoLine{ran_toks} + {The token list `#1' on line \the\inputlineno\space + is undefined,\MessageBreak + possibly simply mispelled; check spelling.\MessageBreak + If undefined, use \string\ranToks\space or \string\bRTVToks/% + \string\eRTVToks\space\MessageBreak + to define a list with the name `#1'}% +} +\def\rt@warnTokName#1{% + \PackageWarningNoLine{ran_toks} + {The token list `#1' on line \the\inputlineno\space + is already defined,\MessageBreak + will overwrite this list}% +} \def\ranToks#1{\begingroup \useRTName{#1}% \r@nToks } -\long\def\r@nToks#1{% - \rt@nMax=0 - \r@ndToks#1\rt@NIL -} +\long\def\r@nToks#1{\rt@nMax\z@\r@ndToks#1\rt@NIL} \def\rt@NIL{@nil} \newcommand{\useRTName}[1]{\gdef\rt@BaseName{#1}}% \let\rt@BaseName\@empty -\newcommand{\bRTVToks}[1]{% - \rt@nCnt=0 - \useRTName{#1}% -} -\newcommand{\eRTVToks}{% - \global\rt@nameedef{\rt@BaseName Cnt}{\the\rt@nCnt}% - \expandafter\r@nVToks\expandafter{\rt@BaseName}% -} +\newcommand{\bRTVToks}[1]{\rt@nCnt\z@\useRTName{#1}} +\newcommand{\eRTVToks}{\global + \rt@nameedef{\rt@BaseName Cnt}{\the\rt@nCnt}% + \expandafter\r@nVToks\expandafter{\rt@BaseName}} \def\reVerbEnd{\ifhmode\unskip\fi} -\newenvironment{rtVW}{% - \global\advance\rt@nCnt1 +\newenvironment{rtVW}{\global\advance\rt@nCnt\@ne \immediate\openout\rt@Verb@write \jobname_\rt@BaseName\the\rt@nCnt.cut \let\verbatim@out\rt@Verb@write @@ -187,45 +199,104 @@ \gdef\rt@BaseName{#1}% \expandafter\rt@nMax\@nameuse{#1Cnt}% \rt@listIn={}\rt@nCnt=0\relax\let\rt@listInHold\@empty - \@whilenum\rt@nCnt<\rt@nMax\do{% - \advance\rt@nCnt1 - \edef\rt@listInHold{% - \the\rt@listIn{\noexpand\rt@inputVerb{#1\the\rt@nCnt}}}% - \rt@listIn=\expandafter{\rt@listInHold}% - }% -\ifrtdebug\typeout{\string\r@nVToks: \the\rt@listIn}\fi - \expandafter\r@nToks\expandafter{\the\rt@listIn}% -} + \@whilenum\rt@nCnt<\rt@nMax\do{\advance\rt@nCnt\@ne + \edef\rt@listInHold{% + \the\rt@listIn{\noexpand\rt@inputVerb{#1\the\rt@nCnt}}}% + \rt@listIn=\expandafter{\rt@listInHold}}\ifrtdebug + \typeout{\string\r@nVToks: \the\rt@listIn}\fi + \expandafter\r@nToks\expandafter{\the\rt@listIn}} \def\rt@inputVerb#1{\input{\jobname_#1.cut}} \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 + \advance\rt@nMax\@ne \global\@namedef{rtTok\the\rt@nMax\rt@BaseName}{#1}% \def\rt@next{\@ifnextchar\rt@NIL - {\rt@endToks\@gobble}{\r@ndToks}}% - \fi\rt@next -} -\def\rt@endToks{% - \global\rt@nameedef{nMax4\rt@BaseName}{\the\rt@nMax}% - \rt@RandomizeList{\the\rt@nMax}% - \rt@nCnt=0 - \let\\\assignRanToks - \the\rt@listOut - \endgroup -} -\def\assignRanToks#1{\advance\rt@nCnt1 - \global\rt@nameedef{rtRanTok\the\rt@nCnt\rt@BaseName}% - {\noexpand\@nameuse{rtTok#1\rt@BaseName}}% -} -\newcommand{\nToksFor}[1]{\@nameuse{nMax4#1}} -\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}}% + {\rt@endToks\@gobble}{\r@ndToks}}\fi\rt@next} +\def\rt@performRanDefns#1{% + \rt@RandomizeList{#1}\rt@nCnt\z@ + \let\\\rt@ssign\the\rt@listOut} +\def\rt@endToks{\global + \rt@nameedef{nMax4\rt@BaseName}{\the\rt@nMax}% + \rt@performRanDefns{\the\rt@nMax}\endgroup} +\def\reorderRanToks#1{\begingroup\useRTName{#1}\expandafter + \ifx\csname nMax4#1\endcsname\relax + \rt@badTokName{#1}\else + \rt@performRanDefns{\@nameuse{nMax4#1}}\fi +\endgroup} +\newcommand\copyRanToks[2]{\begingroup\expandafter + \ifx\csname nMax4#1\endcsname\relax + \rt@badTokName{#1}% + \else\expandafter + \ifx\csname nMax4#2\endcsname\relax + \useRTName{#2}\global + \rt@nameedef{nMax4#2}{\@nameuse{nMax4#1}}% + \rt@nCnt=\csname nMax4#2\endcsname\relax + \@whilenum\rt@nCnt>\z@\do{\global + \rt@nameedef{rtTok\the\rt@nCnt#2}% + {\noexpand\@nameuse{rtTok\the\rt@nCnt#1}}% + \advance\rt@nCnt\m@ne}% + \rt@performRanDefns{\@nameuse{nMax4#2}}\else + \rt@warnTokName{#2}\fi + \fi +\endgroup} +\def\rt@ssign#1{\advance\rt@nCnt\@ne\global + \rt@nameedef{rtRanTok\the\rt@nCnt\rt@BaseName}{\noexpand + \@nameuse{rtTok#1\rt@BaseName}}} +\newcommand{\nToksFor}[1]{\expandafter + \ifx\csname nMax4#1\endcsname\relax + \textbf{??}\rt@badTokName{#1}\else + \@nameuse{nMax4#1}\fi} +\newcommand{\rtTokByNum}[2][\rt@BaseName]{\expandafter + \ifx\csname nMax4#1\endcsname\relax + \textbf{??}\rt@badTokName{#1}\else + \@nameuse{rtTok#2#1}\expandafter\ignorespaces\fi} +\newcommand{\useRanTok}[2][\rt@BaseName]{\bgroup + \expandafter\ifx\csname nMax4#1\endcsname\relax + \rt@badTokName{#1}\else + \ifnum#2>\nToksFor{#1}\rt@modarith{#2}{\nToksFor{#1}}% + \rt@badIndex{#2}{#1}\@nameuse{rtRanTok\rt@mod#1}\else + \@nameuse{rtRanTok#2#1}\fi\fi\egroup} +\newcommand{\displayListRandomly}[1][]{\bgroup\def\rt@prior{#1}% + \displ@yListRandomly} +\newcommand{\displ@yListRandomly}[2][]{\rt@nCnt\z@ + \expandafter\ifx\csname nMax4#2\endcsname\relax + \rt@rgi\space\textbf{??}\rt@badTokName{#2}#1% + \else + \def\rt@post{#1}\useRTName{#2}\let\i\rt@nCnt + \def\first{1}\edef\last{\@nameuse{nMax4#2}}% + \@tempcnta\last \advance\@tempcnta\m@ne + \edef\lessone{\the\@tempcnta}% + \@whilenum\rt@nCnt<\last\advance\rt@nCnt\@ne + \do{\rt@prior\useRanTok{\the\rt@nCnt}\rt@post}% + \fi\egroup } +\def\rt@gettonil#1\@nil{\def\to@nilarg{#1}} +\def\rt@ifspc{\ifx\@let@token\@sptoken + \let\rt@next\rt@xifspc\else + \let\rt@next\rt@gettonil\fi\rt@next} +\begingroup +\def\:{\rt@xifspc} +\expandafter\gdef\: {\futurelet\@let@token\rt@ifspc} +\endgroup +\def\rt@strpspcs{\futurelet\@let@token\rt@ifspc} +\def\ProbDBWarningMsg#1{\filename@parse{#1} + \PackageWarning{ran_toks} + {The file \filename@area\filename@base.\ifx\filename@ext\relax + tex\else\filename@ext\fi\space cannot be found}} +\def\useTheseDBs#1{\def\rt@dblist{#1}\ifx\rt@dblist\@empty\else + \let\rt@DB@List\@empty + \edef\temp@expand{\noexpand\@for\noexpand\@@tmp:=\rt@dblist}% + \temp@expand\do{\ifx\@@tmp\@empty\else + \expandafter\rt@strpspcs\@@tmp\@nil\edef\@@tmp{\to@nilarg}% + \edef\rt@nextDB{\noexpand + \InputIfFileExists{\@@tmp}{}{\noexpand + \ProbDBWarningMsg{\@@tmp}}}% + \toks\tw@=\expandafter{\rt@DB@List}% + \toks@=\expandafter{\rt@nextDB}% + \edef\rt@DB@List{\the\toks\tw@\space\the\toks@}\fi + }\expandafter\rt@DB@List\fi} +\let\useProbDBs\useTheseDBs \endinput %% %% End of file `ran_toks.sty'. -- cgit v1.2.3