; TeX output 1992.09.25:1734Fx<"VG cmbx10DoOcumenrtationformultido.tex:|=AloOopmacroforGenericT EB_X n+XQ cmr12TimothryVVanZandt2K cmsy8bVVersion1.0^Z28SeptemrbSer1992<_81"rUsagenotes@01߆T cmtt12multido.tex/multido.styAconrtainsthe\multidomacro,(whichisaloSopfacility0for_GenericTVeX.ThismacrohappSenstobeusefulfordrarwingpictures,}-andwas0originallydevrelopSedforthePSTVrickspackXage,2 |{Ycmr816butyoucanuseitforotherpurpSoses0aswrell.0AspSecialfeatureissupportof xed-poinrtaddition.|FVorexample,APSTricrksuses0them\multidotoputnrumbSersmonaxes, _mruchmlikeinthefollowingL"s3H- cmcsc10Ha^T E!Xfexample:0PSTVricrksuses\multdointernallytoputnumbSersonaxes,muchlikeinthisL"s3Ha^T E!X0example:M_('ExXarchives.1*F0/}h! cmsl12DoScumenrtationformultido.tex>pv.1.0 28SeptembSer1992:20stu wiswhatevreryouwantrepSeated;itcanbeanrybalancedT UE!Xvinput.Trffepetitions0isthenrumbSertimesstu isrepeated.`0Thec rstargumenrtistheinterestingone.xvariablesisacomma-separatedlistof0vXariabledeclarations.22 Eacrhvariabledeclarationisoftheform:variable35=initialvalue+incrffement0variable-isacommandsequencethatcanbSeusedinstu .bItisinitiallysettoinitial0value,andisthenincremenrtedbyincrffementwitheachrepSetition.0The rstletterofthevXariablenamedeterminesthevariabletrypSe.Therearefour0vXariabletrypSes:00N cmbx12Dimension(dorD)QjThe.initialvXalueandtheincremenrtshouldbSedimensionsM_(lengths,Qin=L"s3Ha^T E!X=parlance).06Thesubstitutiontextisadimension,withspM_units.8E.g.,\dx=4cm+5pt.A 0Numb`er(norN)qThe"initialvXalueandincremenrtshouldbSeintegersornumbSersM_withthesamenrumbSerofdigitstotherighrtofthedecimal.JTheoneexceptionM_is>thatitisalwrays>OK,fortheinitialvXaluetobSeaninrteger.!gTherecanbeatM_most8digitsoneacrhsideofthedecimal.ThesubstitutiontextisanumbSer,M_with xed-pSoinrtaddition.8E.g.,\n=3+7.05,\Nx=5.30+-1.25.0Integer(iorI)TherinitialvXalueandincremenrtshouldbSeintegers.{>ThisgivesM_thesameresultasusinganrumbServXariable,butitisfaster.8E.g.,\I=2+-1.0Real(rorR)CThetinitialvXalueandincremenrtshouldbSeintegersornumbSersM_withatmost4digitsoneacrhsideofthedecimal.62ThesubstitutiontextisaM_nrumbSer,]buts9with oatingpoinrtadditionandoccasionalsmallerrors.ҒThisM_givresalesssatisfactoryresultthanusinganumbServXariable,butitisfaster.M_E.g.,\ry=4.2+1.05.0Herearesomeexamplesthatillustratehorwthesubstitutiontextisdetermined:M_\multido{}{10}{\TeX\,}dT UE!XT UEXT UEXT UEXT UEXT UEXT UEXT UEXT UEXT UEXM_\multido{\d=2pt+3pt}{5}{\d,,}d131072sp,327680sp,524288sp,720896sp,917504sp,M_\multido{\n=2+3}{10}{\n,,}d2,5,8,11,14,17,20,23,26,29,M_\multido{\i=2+3}{10}{\i,,}d2,-1,-4,-7,-10,-13,-16,-19,-22,-25,0 IffX ^2Don'tCsusecommastomarkthedecimalpGointwithinthe': cmti10variablesargument,GastheywillbGe confusedUUfordelimiters. eF0DoScumenrtationformultido.tex>pv.1.0 28SeptembSer1992:3M_\multido{\r=2+3.05}{6}{\r,,}d2.0,5.05,8.1,11.15001,14.20001,17.25002,M_\multido{\n=2.00+3.05}{8}{\n,,}d2.00,-1.05,-4.10,-7.15,-10.20,-13.25,-16.30,-19.35,0HerearesomedetailsabSoutthecrhoiceofnames:AM_YVourhcomputerwron'texploSdeifyouusenamesthatcon ictwithT UE!XinternalM_commands, ubuthyroumightwanttochecknamecon ictsifyougetinexplicableM_errors.1The9command\MultidoCheckNamescanbSeusefulinthiscase.ItM_causes`\multidotorepSortanerrorwhenevreryouuseavXariablenamethatM_isalreadyde ned.8Butseethenextitem.AM_TheYwhole\multidoloSopisgrouped.|Thismeans,Ge.g.,thatYalthough\iM_isaPlainT UE!Xcommandsequence(givingadotless\"),XyroucanusetheM_vXariable\iifyroudonotuseanydotlessi'sinstu (andifyoudonotuseM_\MultidoCheckNames).0Hereareafewmoredetails:AM_\MultidocommandscanbSenested.AM_Spaces aftera\multidocommandareignored.!Thismakres\multidomoreM_hospitableforpictures.AM_SpacesbSetrweenthevXariouspartsofthevariablesargumentareignored.0And nallyhereafewspSecialfeatures,Ssomeofwhicrhareofinterestmainlymacro0writersandotherT UE!Xnicians:AM_The/materialthatisrepSeatedisnotgrouped,TsothatyroucaninsertyourownM_recursivreroutines.AM_Therej{isavXarianrt,o\mmultido,whichj{worksjustlike\multidoexceptthatM_thevXariablesareallincremenrtedoncebSeforestarting.AM_There~xarevXarianrts,l\Multidoand\MMultidoof\multidoand\mmultido,M_resp.,that.donotgroupthewholeloSop.* Thiscanbeuseful,e.g.,for.makingM_enrtriesinanalignmentenvironment.[However,5hthesecannotbSenestedwithinM_anry\multidomacro.AM_IfDthenrumbSerDofrepetitionsisanegativrenumbSer,9,thevXariablesareincre-M_menrtedbackwards.AM_Thecounrtregister\multidocountkeepstrackofthenumbSeroftheitera-M_tions.F0DoScumenrtationformultido.tex>pv.1.0 28SeptembSer1992:4AM_Thetcommand\multidostopcausesthe\multidoloSoptoquitattheendofM_thecurrenrtiteration.AM_FixedpSoinrtadditionisperformedbry\FPaddand\FPsub:g9q\FPaddfnum1gfnum2gfcsgg9q\FPsubfnum1gfnum2gfcsgM_num2Cisaddedtoorsubtractedfromnum1,jandtheanswrersisstoredintheM_command}sequencegivrenasthethirdargument.TherulesabSoutdecimalsM_andsoonthatapplytonrumbServXariablesapplyhereaswrell.8E.g.,afterg9q\FPsub{1.75}{-0.15}{\answer}M_thede nitionof\answeris1.90.!F0DoScumenrtationformultido.tex>pv.1.0 28SeptembSer1992:582"rDoOcumenrtedcode0YVes,thedoScumenrtationisprettyscimpyV.)0ThesemacrosuseT UE!Xprimitivres,plusthePlainT UEXcommands:ȍM_\dimen@,H\dimen@i,\dimen@ii,\count@,\newcount,\newtoks,\@ne,M_\tw@,and\@z@.ɍ0Checrkwhether lehasbSeenloadedalreadyV.Ӎ4@1;U`\expandafter\ifx\csnamemultido@\endcsname\relax\else 4@2FԴ\expandafter\endinput4@3;U`\fi:0Idenrtifythe leontheterminal:4@4;U`\message{\space\spacev\fileversion\space\space4@5FԴ\filedate\space\spacepv.1.0 28SeptembSer1992:6I\multido,I\mmultido,I\Multido,I\MMultido019;U`\def\multido{\multido@{}{\begingroup}{\endgroup}} 020;U`\def\mmultido{\multido@{\multido@stepvar}{\begingroup}{\endgroup}}021;U`\def\Multido{\multido@{}{}{}}022;U`\def\MMultido{\multido@{\multido@stepvar}{}{}}.5VI\multido@U0\multido@initvar_3proScessesthevXariabledeclarations,{initializingthevalueofthe0vXariablesyandde ning\multido@stepvartoincremenrtthevariableswitheacrh0repSetition.8\multido@countissettothenrumberofrepetitions.023;U`\def\multido@#1#2#3#4#5#6{%\ 024FԴ#2%025RT\multido@count=#5\relax026RT\def\multido@stepvar{}%027RT\def\do{\noexpand\do\noexpand}%028RT\multido@initvar#4,\@nil,%029RT\let\do\noexpand030RT\edef\multido@stepvar{\multido@stepvar}%031RT\ifnum\multido@count<\z@\multido@count=-\multido@count\fi032RT\multidocount=1\relax033RT#1%034RT\multido@stuff{#6}%035RT\multido@loop036FԴ#3%037FԴ\ignorespaces}+5VI\multido@loop0\multido@loopdoSestherepetition.038;U`\def\multido@loop{%039FԴ\the\multido@stuff040FԴ\ifnum\multidocount<\multido@count041RT\advance\multidocount\@ne042RT\multido@stepvar043RT\expandafter\multido@loop044FԴ\fi}+5VI\multidostop045;U`\def\multidostop{\multidocount=\multido@count}-F0DoScumenrtationformultido.tex>pv.1.0 28SeptembSer1992:7I\multido@initvar,I\multido@@initvar,I\multido@getvartype0\multido@initvarpasseseacrhvXariabledeclarationto\multido@@initvar.э046;U`\def\multido@badvar{% 047FԴ\multido@count=0048FԴ\errhelp{\multidocommandwillbeskipped.}%049FԴ\errmessage{Bad\string\multido\spacevariabledeclaration}}050;U`\def\multido@initvar#1,{%051FԴ\def\multido@temp{#1}%052FԴ\ifx\multido@temp\@nnil\else053RT\ifx\multido@temp\@empty\else054]\\multido@@initvar#1\@nil=+\@nil\relax055RT\fi056RT\expandafter\multido@initvar057FԴ\fi}058;U`\def\multido@@initvar#1=#2+#3\@nil#4\relax{%059FԴ\ifx\@empty#4\@empty060RT\multido@badvar061FԴ\else062RT\multido@vartype#1\@empty063RT\ifx\multido@temp\relax064]\\multido@badvar065RT\else066]\\multido@temp{#2}{#3}#1%067RT\fi068FԴ\fi}069;U`\def\multido@vartype#1{%070FԴ\ifcat\noexpand\@nil\noexpand#1%071X\expandafter\multido@@vartype\string#1\@nil072FԴ\else073RT\let\multido@temp\relax074FԴ\fi}075;U`\def\multido@@vartype#1#2#3\@nil{%076FԴ\expandafter\let\expandafter\multido@temp077RT\csnamemultido@init@#2\endcsname})[؍I\MultidoCheckNames078;U`\def\MultidoCheckNames{%079FԴ\let\multido@@@vartype\multido@vartype080FԴ\def\multido@vartype##1{%081RT\ifx\undefined##1%082]\\multido@@@vartype{##1}%083RT\else084]\\errhelp{\multidocommandwillbeskipped.}%085]\\errmessage{Multidovariable\string##1alreadydefined}%086]\\let\multido@temp\relax4F0DoScumenrtationformultido.tex>pv.1.0 28SeptembSer1992:8087RT\fi}}K+0FVoreacrhvXariabletypSe,wemustnowde ne\multido@initvartypffe.!.Thesyntaxof0thesemacrosis:qM_\multido@init@vartypffefinitial35valuegfincrementgfvariablegr0andtheoutcomeshouldbSe:>\h1.M_SetvariabletotheinitialvXalue.F>\h2.M_Inrvoke6\multido@addtostepfstepsstu g,wherestepstu iswhatevrershouldM_bSeTdonetoincremenrtthevXariable.fstepstu gisexpanded rst,rwithexpan-M_sionsuppressedbry\do.'s>I\multido@addtostep088;U`\def\multido@addtostep#1{\edef\multido@stepvar{\multido@stepvar#1}})!I\multido@init@d,I\multido@init@D,I\multido@step@d0WVestartwiththevXariabletrypSefordimensions(d,D).ߍ089;U`\def\multido@init@d#1#2#3{% 090FԴ\dimen@=#1\relax091FԴ\edef#3{\number\dimen@sp}%092FԴ\dimen@=#2\relax093FԴ\ifnum\multido@count<\z@\dimen@=-\dimen@\fi094FԴ\multido@addtostep{\do\multido@step@d{\do#3}{\number\dimen@sp}}}095;U`\def\multido@step@d#1#2{%096FԴ\dimen@=#1\advance\dimen@#2097FԴ\edef#1{\number\dimen@sp}}%098;U`\def\multido@init@D{\multido@init@d}'вI\multido@init@i,I\multido@init@I,I\multido@step@i0NorwthevXariabletypSeforintegers(i,I).ߍ099;U`\def\multido@init@i#1#2#3{%+100FԴ\count@=#1\relax+101FԴ\edef#3{\the\count@}%+102FԴ\count@=#2\relax+103FԴ\ifnum\multido@count<\z@\count@=-\count@\fi+104FԴ\multido@addtostep{\do\multido@step@i{\do#3}{\the\count@}}}+105;U`\def\multido@step@i#1#2{%+106FԴ\count@=#1\advance\count@by#2+107FԴ\edef#1{\the\count@}}+108;U`\def\multido@init@I{\multido@init@i} <נF0DoScumenrtationformultido.tex>pv.1.0 28SeptembSer1992:9I\multido@init@r,I\multido@init@R,I\multido@step@r0NorwthevXariabletypSeforreals(r,R).N+109;U`\def\multido@init@r#1#2#3{% +110FԴ\dimen@=#1pt+111FԴ\@dimtonum\dimen@#3%+112FԴ\dimen@=#2pt+113FԴ\ifnum\multido@count<\z@\dimen@=-\dimen@\fi+114FԴ\multido@addtostep{\do\multido@step@r{\do#3}{\number\dimen@sp}}}+115;U`\def\multido@step@r#1#2{%+116FԴ\dimen@=#1pt\advance\dimen@#2+117FԴ\@dimtonum\dimen@#1}+118;U`\def\multido@init@R{\multido@init@r}*4I\multido@init@n,I\multido@step@n0NorwthevXariabletypSefornumbSers(n,N).N+119;U`\def\multido@init@n#1#2#3{%+120FԴ\edef#3{#1}%+121FԴ\ifnum\multido@count<\z@\expandafter\FPsub\else\expandafter\FPadd\fi+122FԴ{0}{#2}\multido@temp+123FԴ\multido@addtostep{\do\FPadd{\do#3}{\multido@temp}{\do#3}}}+124;U`\def\multido@init@N{\multido@init@n}*4I\FPadd,I\FPsub0Simple- xed-pSoinrtadditioncouldn'tbeharder.\dimen@and\dimen@iareusedas0scratcrh-cffounters(toavoidcreatinganewcounter).\count@,Si\multido@countand0\multidocountParealsousedasscratcrhcounters.|\dimen@iiisusedasascratch0dimensionregister.@Z0This>isprobablyprettryoptimal,Rgiventherequirementsthatleadingandtrailing0spacesyObSeOKy*intheargumenrts,andthatthereneednotbeanrynumbSerstothe0leftofthedecimal.N+125;U`\def\FPadd#1#2#3{% +126FԴ\edef\multido@temp{#1..\noexpand\@nil#2}%+127FԴ\expandafter\FPadd@\multido@temp..\@nil+128FԴ\let#3\multido@temp}+129;U`\def\FPsub#1#2{%+130FԴ\edef\multido@temp{\noexpand\FPsub@#2\noexpand\@empty}%+131FԴ\FPadd{#1}{\multido@temp}}+132;U`\def\FPsub@#1{\ifx-#1\else-#1\fi}+133;U`\def\FPadd@#1.#2.#3\@nil#4.#5.#6\@nil{%+134FԴ\begingroup+135RT\def\multido@temp{\let\next\relax}% ESF0DoScumenrtationformultido.tex;rv.1.0 28SeptembSer1992710+136RT\let\next\z@ +137RT\afterassignment\multido@temp\count@=#1\next+138RT\dimen@i=0#2sp\relax+139RT\let\next\z@+140RT\afterassignment\multido@temp\multido@count=#4\next+141RT\multidocount=0#5\relax+142RT\dimen@=\number\count@sp+143RT\count@=\@ne+144RT\dimen@ii=1sp+145RT\FPadd@@@#500000000\@nil+146RT\ifdim#1\dimen@ii<\z@+147]\\count@=-\tw@+148]\\dimen@=-\dimen@+149RT\fi+150RT\ifdim#4\dimen@ii<\z@+151]\\count@=-\count@+152]\\multido@count=-\multido@count+153RT\fi+154RT\ifnum\count@\z@+155]\\advance\multido@count\dimen@+156]\\advance\multidocount\dimen@i+157]\\ifnum\multidocount<\multido@temp\relax+158iR\advance\multidocount\multido@temp\relax+159]\\else+160iR\advance\multido@count\@ne+161]\\fi+162]\\advance\count@-3+163RT\else+164]\\advance\multido@count-\dimen@+165]\\advance\multidocount-\dimen@i+166]\\ifnum\multido@count<\z@+167iR\multido@count=-\multido@count+168iR\multidocount=-\multidocount+169iR\advance\count@\@ne+170]\\else+171iR\ifnum\multido@count=\z@+172t\ifnum\multidocount<\z@+173QX\multidocount=-\multidocount+174QX\advance\count@\@ne+175t\fi+176iR\fi+177]\\fi+178]\\ifnum\multidocount<\z@+179iR\advance\multidocount\multido@temp+180iR\advance\multido@count-\@ne+181]\\fi+182]\\advance\multidocount\multido@temp\relax NF0DoScumenrtationformultido.tex;rv.1.0 28SeptembSer1992711+183RT\fi +184RT\expandafter\FPadd@@\the\multidocount\@empty\@nil+185FԴ\endgroup}+186;U`\def\FPadd@@#1#2#3\@nil{\xdef\multido@temp{%+187FԴ\ifnum\count@=-1-\fi+188FԴ\the\multido@count\ifx#2\@empty\else.#2#3\fi}}+189;U`\def\FPadd@@@#1#2#3#4#5#6#7#8#9\@nil{\def\multido@temp{1#9}}+190;U`\expandafter\catcode`\@=\theatcode\relax VXF0DoScumenrtationformultido.tex;rv.1.0 28SeptembSer19927120ThisindexisonlyforthedoScumenrtedcode.=Underlinednrumbersreferroughlyto0the> linenrumbSer> oftheenrtry'sde nition,Randallothersindicatecodelineswhere0itisused.3>'"V 3 cmbx10SymtbYols 0\@@@dimtonum Hã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.|120\@@dimtonum ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã. (11,f120\@dimtonum6ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.jN11,f111,117HeA0\afterassignmentpã.ã.ã.ã.ã.ã.ã.ã.ã.X137,f140F0\FPaddã.ã.ã.ã.ã.ã.ã.ã. 121,f123,125,125felΎ4,1310\FPadd@ꍑã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.X127,f1330\FPadd@@0ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.X184,f1860\FPadd@@@dvã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.X145,f1890\FPsubã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã. 121,f125ffelΎ4,f1290\FPsub@ꍑã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.X130,f132I0\ifdimã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.X146,f150M0\MMultidodvã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã. (19 (fe 4K,f220\mmultidodvã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã. (19 (fe 4K,f200\Multido0ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã. (19 (fe 4K,f210\multido0ã.ã.ã.ã.ã.ã.ã.ã.ã.ã. 19,f19ffe 4,f48,49,840\multido@dvã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.q19{23,f23ffe 40\multido@@@vartype6ã.ã.ã.ã.ã.ã.ã.ã.ã. (79,f820\multido@@initvardã.ã.ã.ã.ã.ã.ã.9469fe 4,,f54,580\multido@@vartypedã.ã.ã.ã.ã.ã.ã.ã.ã.ã. (71,f750\multido@addtostep6ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.Nã.ã.ã.ã.ã.ã.ã.ã. m88,f88ffe 4,f94,104,114,123\multido@badvar*ã.ã.ã.ã.ã.ã.ã.ã.ã.946,f60,64|\multido@count䍑ã.ã. u16,f16ffe 4,f25,31,40, %45,47,93,103,113,121,140,152,%155,/160,164,166,167,171,180,188\multido@getvartype Bã.ã.ã.ã.ã.ã.ã.ã.ã.ã.|46|fe 4\multido@init@D*ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã. (89 (fe 4K,f98\multido@init@d*ã.ã.ã.ã.ã.ã.ã.ã.ã.989,f89ffe 4,f98\multido@init@I*ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã. @m99 @mfe 43,f108\multido@init@i*ã.ã.ã.ã.ã.ã.ã.ã.Q99,f99ffe 4,f108\multido@init@N*ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã. .124\multido@init@n*ã.ã.ã.ã.ã.ã.ã. 119,f119ffelΎ4,f124\multido@init@R*ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.X109XßfelΎő,f118\multido@init@r*ã.ã.ã.ã.ã.ã.ã. 109,f109ffelΎ4,f118\multido@initvarpã.ã.ã.ã.ã.K-28,f46ffe 4,f50,56\multido@loopã.ã.ã.ã.ã.ã.ã.ã.K-35,f38,38fe 4,43\multido@step@d*ã.ã.ã.ã.ã.ã.ã.ã.ã.9899fe 4,,f94,95\multido@step@i*ã.ã.ã.ã.ã.ã.ã.jN99jNfe 4],f104,105\multido@step@n*ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã. .119 .felΎ\multido@step@r*ã.ã.ã.ã.ã.ã.ã. 109 felΎ],f114,115\multido@stepvar 20,f22,26,30,42,88\multido@stuff䍑ã.ã.ã.ã.ã.ã.ã.K-18,f18ffe 4,f34,39\multido@vartypepã.ã.ã.ã.ã.K-62,f69,79,80\MultidoCheckNames6ã.ã.ã.ã.ã.ã.ã.ã.ã. (78,f78ffe 4\multidocountã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã. 16 fe 4,%17,732,40,41,45,141,156{158,%165,/168,172,173,178,179,182,184\multidostop Hã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã.ã. (45,f45ffe 4X; I