; TeX output 1997.03.28:1759soDtGGcmr17The7tGGcmss17moqredefspackagegiXQ ff cmr12more/de ningcommands(F4rankenstein'sbrain)?XQ cmr12MattSwift߆T cmtt12GVVersion:8v1.01 *DoScumenrtationrevision:81996/03/25$!Kt : cmbx9Abstractэoo cmr9A!}deligh9tful!collectionofde ning,$expansion,and!debuggingcommands bthatTmak9eelegantprogramminginL5Aacmr6A TuAEXfunandeasy:.#8INff cmbx12PartffII Nq cmbx12DiscussionꨍIK`y cmr10ThesemmmacroswerewritteninrespGonsetopracticalprogrammingneeds.$zIm2wouldn'tIwriteUUapackqagewithoutthemnow.!čI1aLNamingffconventionsITheconventionisthatacapital!': cmti10Emeansthemacroexpandssomethingjustonce.IAlowercasee,asin"*argumentsqareexpanded.Commandswhichtakehcsname[iIargumentsUUhaveNameintheirnames.XWhenUUIwritep}'ackageinthisdoGcumentation,ImeanL5ffٓRcmr7A͉TU>'ExXpackqageorclass.I2aLDe ningffcommandsI\InitCS5and\InitCS*takeoneargument,ոh\csname[i0m,andinitializeitto{}.>The#ߤN cmtt9\InitCS3P\InitCS*Inon-*-formUUislong;the*-formisnot.X\InitName̲and\InitName*arethesamebuttakeanargumenthcsname[iy\InitName$\InitName*IwithoutUUabackslash.XT*ojmakeiteasiertoavoidtheproblemofcomparinglongandnon-longmacros \ShortEmpty$\LongEmptyIwithUU\ifx,comparemacroswith\ShortEmptyand\LongEmpty.X\ReserveCS{h\csname[i-ߘ}reservesh\csname[i7`forthecurrentpackqage'suse.$\ReserveCSL\ReserveNameI\ReserveNameUU{hcsname[i(}doGesthesameforahcsname[i,.X\requirecommandK_islike\providecommand,butifthecontrolsequenceis 6\requirecommandIalreadyȀde ned,%K\CheckCommandiscalledtomakesureit'sde nedidentically*,1*soIwhereas9\providecommandassumesthatifit'salreadyde ned,Qthede nitionis Iappropriate.-Using,\requirecommandguar}'antees[thatacontrolsequencewillhaveItheUUgivende nition;oranerrorwilloGccur.X\newtokens8{h\csname[i-ߘ},q\newlet{h\csname[i}{h\csname[i},qand\newboolean$\newtokens\newlet \newbooleanI{hcsname[i(} giveanerroriftheircontrolsequenceargumentisalreadyde-I ned.|z\newtokensXcreatesatokenvqariable.\newletdoGesa\letassignment.I\newbooleany{hcsname[i(}createsthreenewcontrolsequences:twoswitches,I\csnametrue&aand\csnamefalse,andatest,\ifcsname. \newtokensisnotIouter.qIsUUthereanyreasonthisreallymatters?XLike8thekernel's\providecommand,qthecommands\providetokens{h\csname[i-ߘ},\providetokens 6\provideboolean 6\providesavebox$ 6\providecounter0\providelengthI\provideboolean8{hcsname[i(},q\providesavebox{h\csname[i-ߘ},\providecounterI{hcsname[i(},and>\providelength{h\csname[i-ߘ}willcreateanewob8ject(orob-Ijects)obasedonthenameh\csname[i7 vorhcsname[i1}onlyiftheyarenotalreadyIde ned. SeethecorrespGondingcommandsthatbeginwith\newinsteadofI\provideOforadescriptionofwhatkindofob8jectiscreated.`IncontrastwithI\providecommand,nhowever,these6commandswillwritearecordtothelog leifItheir+argumentwasalreadyde ned(\providecommanddoGesnothingatallinthisIcase).X\Undefine{h\csname[i-ߘ}causesh\csname[i56tobGeunde ned.4\UndefineNamey\Undefineb\UndefineNameIdoGesUUthesameforahcsname[i,.qUsewithcaution.\globalworksbGeforeit.X\defcommand8{h\csname[i-ߘ}[h#ofar}'gs!i1p][hdefaultforanoptar}'g}ib]de nesh\csname[i \defcommandL\defcommand*IinTthesamemanneras\newcommandexceptnowarningorerrorisissuedifIh\csname[iz4isUUalreadyde ned.X\defcommandRoisverysimilartotheprimitive\def,sowhywouldyouwantIto@useit?F*oronething,;thesyntaxisthesameasalltheotherL5ffA͉TU>'ExXde ningIcommands,ٿsoCitiseasiertoread,andeasiertochangetheworddefcommandtoIone\oftheotherde ningcommands.jSecond,^\defcommandsthattakeargumentsIhavesimplersyntaxwhende ningcommandsarenested.OY*oustillhavetodoubleItheA#charactersinthede nitionbGody*,E$butAtheargumentspGeci cation(e.g.,E$[n])IisUUthesameasifnotnested.XThere isapGerformance-syntaxtradeo ;yIchoGosetouse\defcommandwheneverItheb6commandtobGede nedistakinganargument.jWhenitdoesnottakeanIargument,+thereisnodi erencebGetween\defand\defcommandexceptthat\defIisUUfaster.XIaseezverylittlereasontoeveryuse\renewcommand.6ItcausesanerrorwhenIthe(controlsequenceisnotalreadyde ned.@ConceivqablythisisusefulduringIdevelopment+tocatchprogrammingmistakes,butmuchmoreoftenI ndthatIIdon'tRcarewhetherthecontrolsequencewasde nedornot,SandthereforetheerrorI\renewcommandUUmightraiseisinappropriateandaproblem.X\NewName{hcsname[i(}{htemplate[i-T5}{hb}'ody}iQc}de neshcsname[i3Ӳtoexpandto3P\NewNamey\NewName*Ihb}'ody}ih}Zusing+aTU>'ExX-styleargumenthtemplate[i1,,ae.g.#1#2\@nilorsimply#1#2.IThe.6*-formisnotlong.dIfhcsname[i/ isalreadyde ned,6 anerrorwillbGesignalled.X\DefNameEislike\NewNamebutnoerrorissignalledifhcsname[i2Y)isalready3P\DefNamey\DefName*Ide ned.XIfthecommand\Globalimmediatelyprecedes\NewNameor\DefName,^then\GlobalItheUUde nitionwillbGeglobal.X$F C cmbxti10To\do:tpGetIsomethinglike%2in-IsideŸhse}'cond%3}tokens!iGwherever#1oGccurs.3B\EExpandexpandsthe rsttokenofh rstItokens!ilonlyyonce.ߒThe*-versionsmakeeachargumentshort.ߒThesecommandsIcanUUnest.XF*orUUexample,I% ?\def\a?{\b}c?\def\b?{Hello}c?\eExpand\a?world\In{m\def\c?{Thisisagoodwaytoavoidlotsofnoexpandsandexpandafters. #1.And?Icontinue.}m\cc?}c?\EExpand\a?BLOOB\In{m\edef#1{\b?world}mThis?isagoodwaytoavoidlotsofnoexpandsandmexpandafters. \a?BLOOB.AndIcontinue.c?} I'R6 cmss12LOOKSLIKE:_JIffi̟0Ǎ0ff㍑ThisisagoGodwaytoavoidlotsofnoGexpandsandexpandafters.>Helloworld.>AndIUUcontinue.ThisisagoGodwaytoavoidlotsofnoGexpandsandexpandafters.>Helloworld.>AndIUUcontinue.i0ffffffi̎$QXTheUUtwocommandsexpandtothesamethreesentences.3 vsoI4aLGobblingIItBoGccursfairlyoftenthatyouwanttogobblethingswhile\makeatotherisin\Gobble 3P\GobbleM3P\GobbleO$y\GobbleMM0y\GobbleMO<y\GobbleOM Ie ect,OKsothesecommandnameshaveno@'s. 0TheM鲲standsforamandatoryIargument,2andҷtheOUstandsforanoptionalargument.F*orexample,2suppGoseIthere>isacommand\foo[hoptar}'g}i#]{hmar}'g}iA}.rIfyou\let\foo\GobbleOM,thenItheUUargumentsto\foowillbGegobbledappropriately*.X\GobbleUUisthesameas\GobbleM,inimitationoftheinternal\@gobble.!čI5aLDebuggingII+haveTplansforexpandingthissectioninthenextreleasewithsomeAPIcom-ImandsUUforcontrollingthelevelofdebuggingoutput.XL5ffA͉TU>'ExXbydefaultgivesverylittlecontextforerrors.`\VerboseErrors\VerboseErrorsI[hnumb}'eri(]causesL5ffA͉TU>'ExXtogivehnumb}'eri2linesofcontext,ZforthemaximumIbyUUdefault.X\Debugy{hnumb}'eri(}setsadebuggingparametertohnumb}'eri-fʲ.Iyfhaveyplans!|\DebugItoturnthisintoabitwiseparameterlikemanyCprograms,G]butrightnowtheIbGehaviorvistoissueamessagewith\typeout,Ncall\VerboseErrors,andusetheIparameterKDtoassignvqaluesto\tracingoutput,{\tracingpages,\tracingmacros,IandUU\tracingcommands.XThe9commands\MonsterError,\MonsterWarning,and9\MonsterInfoarede-b\MonsterError 6\MonsterWarningL\MonsterInfo$b\MonsterDebugI nedBhereforusebyotherpackqagesandclasses.~TheyaresimplywrappGersforItheUUobviouskernelcommands.!čI6aLMiscellaneousffinternalsI\@ifundefined@cs{h\csname[i-ߘ}{htrue[i}{hfalse[i}A6executesthehtrue[i&Hclauseiff\@ifundefined@csIh\csname[iz4isUUnotde ned,andthehelse[i Iclauseotherwise.X\addto@macro{h\csname[i-ߘ}{htokens!i#`}8addshtokens!i(c&totheendof{h\csname[i}.L\addto@macro 6\lg@addto@macroITheY%rede nitionof{h\csname[i-ߘ}isloGcal.Thekernelprovidestheglobalequivqalent,I\g@addto@macro.q\lg@addto@macroUUisbGothlongandglobal.X\prependto@macro{h\csname[i-ߘ}{htokens!i#`}addshtokens!i+̲tothebGeginningoff\prependto@macrot\g@prependto@macro9\lg@prependto@macroI{h\csname[i-ߘ}.^Therede nitionof{h\csname[i}isloGcal.^TheglobalequivqalentisI\g@prependto@macro.q\lg@prependto@macroUUisbGothlongandglobal.XLetE b> cmmi10TBԲbGethesequenceoftokensbetweenE\E@carand\@nil.JlThe rsttokenof\E@car...\@nil\E@cdr...\@nilITgisexpandedonce,Hand\E@car...\@nilexpandstothe rsttokenoftheresult.X\E@cdr...\@nilissimilar,̉butexpandstotheentireresultexc}'epttWits rstItoken.XF*orUUexample,after`\def\a{Hello} `\def\b{world}Ye\E@car?\athere\b.\@nil8wouldexpand rstofalltoH.And\E@cdr?\athere\b.\@nilIwould|expand rstofalltoellothere\b.,andtheneventuallyexpandfullytoIellothere?world..XTheexampleismorecomplicatedthanyouwouldnormallyuse.9UsuallyyouIwant-tocarandcdrasequenceoftokenscontainedinmacro\foo,#andthisIisCeasyenoughwith\E@car\foo\@nil. :T*ochopo the rsttokenof\foo,4.soI\edef\foo?{\E@cdr\foo\@nil}."(IfUyou'rewondering,thespaceafter\foois Iirrelevqant.)#8IPartffIs3IIImplemenZtationꨍI7aLVfersionffcontrol$\fileinfob\fileversion$\filedatey\docdate$\PPOptArgITheseUUde nitionsmustbGethe rstonesinthe le.Ls1S\def\fileinfo{moredefiningcommands(Frankenstein'sbrain)} Ls2S\def\fileversion{v1.01}Ls3S\def\filedate{1996/03/25}Ls4S\def\docdate{1996/03/25}Ls5S\edef\PPOptArg{%Ls6]\filedate\space\fileversion\space\fileinfoLs7S}XStoprighthereifwe'rejustloadingthe le'sinformation,janddon'twantto IloadMthiscoGdefortypesettingitsdocumentation(onlymakessenseforcertainpack-Iages).3TheHJuStLaAdInFoRmAtIoN! agwillbGesetbythedocumentationdriver;ItheUUDoXNeeDME agwillbGesetinthedtx le,andwillappearaboveUUifit'sset.Ls8S\makeatletter Ls9S\@ifundefined{JuStLoAdInFoRmAtIoN}{%I10]}{%I11]\@ifundefined{DoXNeeDME}{%I12f}{%I13f\usepackage{moredefs}%I14]}I15]\makeatotherI16]\endinputI17S}XNowUUwecheckforL5ffA͉TU>'ExX2eanddeclarethepackqage.I18S\NeedsTeXFormat{LaTeX2e}I19S\ProvidesPackage{moredefs}[\PPOptArg]!čI8aLGettingffstartedIW*eUUwillbGegintousecommandsaswede nethem. \@ifundefined@csIW*eUUwantthismacrotomakeothermacroseasiertoread.I20S\newcommand*\@ifundefined@cs[1]{%I21]\edef\reserved@a{%I22f\expandafter\@gobble\string#1%I23]}%I24]\@ifundefined\reserved@aI25p2\@firstoftwoI26f\@secondoftwoI27S}5@soI9aLDe ningffcommands \sc@star@or@long \sc@star@nothingIThek}macros\sc@star@or@longand\sc@star@nothingareparalleltothekernel's I\@star@or@longuand\l@ngrel@x,}whichcontrolwhetherde nitionsarelongorInot.\sc@star@or@longzcausesthevqalueof\sc@star@nothingtobGeeither*orIempty*,depGending onwhetherit ndsa*whenitiscalled.GItalsosetsthekernel'sI\l@ngrel@x:tonothingor\long, respGectively*.O(We:needboth agsatleastonce.)I28S\newcommand*\sc@star@nothing{} I29S\newcommand*\sc@star@or@long[1]{%args:defining-commandI30]\@ifstar{%I31p2\let\l@ngrel@x\relaxI32p2\def\sc@star@nothing{*}#1%I33f}{%ELSEI34f\let\l@ngrel@x\longI35f\def\sc@star@nothing{}%I36f#1%I37]}%I38S}f\requirecommand \requirecommand* \require@commandIAUUtypicalapplicationofthestarmechanismsis\requirecommand.I39S\newcommand\requirecommand{%I40]\sc@star@or@long\require@commandI41S}I42S\newcommand\require@command[1]{%args:\csnameI43]\@ifundefined@cs{#1}{%I44p2\expandafter\newcommand\sc@star@nothingI45f}{%ELSEI46f\expandafter\CheckCommand\sc@star@nothingI47]}%I48]{#1}%I49S}3P\InitCS y\InitCS* $\InitName \InitName* \ReserveCS b\ReserveName L\ShortEmpty \LongEmptyI50S\newcommand\InitCS{%I51]\@star@or@long\Init@CSI52S}I53S\newcommand\Init@CS[1]{%args:\csnameI54]\l@ngrel@x\def#1{}%I55S}I56S\newcommand\InitName{%I57]\sc@star@or@long\Init@NameI58S}I59S\newcommand\Init@Name[1]{%args:csnameI60]\expandafter\DefName\sc@star@nothing{#1}{}{}%I61S}I62S\newcommand\ReserveCS[1]{%args:\csnameI63]\newcommand{#1}{}%I64S}I65S\newcommand\ReserveName[1]{%args:csnameI66]\NewName{#1}{}{}%I67S}I68S\InitCS*\ShortEmptyI69S\InitCS\LongEmpty6H so3P\sc@t@a 3P\sc@t@b 3P\sc@t@c 3P\sc@t@d 3P\sc@t@e 3P\sc@t@f 3P\sc@t@gIScratchUUvqariables. 9I70S\ReserveCS\sc@t@a I71S\ReserveCS\sc@t@bI72S\ReserveCS\sc@t@cI73S\ReserveCS\sc@t@dI74S\ReserveCS\sc@t@eI75S\ReserveCS\sc@t@fI76S\ReserveCS\sc@t@g\newtokens 3P\newletIBecause%\newtoksis\outer,YwehavetofoGol\defintoallowingittobGeinits IargumentUUbyusing\@nameuse.I77S\newcommand\newtokens[1]{%args:\csnameI78]\@ifdefinable#1{%I79f\@nameuse{newtoks}#1%I80]}%I81S}I82S\newcommand*\newlet[2]{%args:\csname-a\csname-bI83]\@ifdefinable#1{%I84f\let#1#2%I85]}%I86S} 6\providetokens 6\providelength f\providesavebox f\providecounter L\newboolean f\providebooleanITheL}\newbooleancommandisthesameastheoneinthe(p0J cmsl10ifthenpackqage;Oosothat IpackgeUUwon'tclashwiththisone.qIsn't\requirecommandnice?I87S\newcommand*\providetokens[1]{%args:\csnameI88]\@ifundefined@cs{#1}{%I89p2\@nameuse{newtokens}#1%I90f}{%ELSEI91f\MonsterInfo{moredefs}{\protect\providetokens\spaceisnotreallocatingI92=tokenvariable\protect#1.\MessageBreakI93=Theexistingcontentsare[\the#1]}%I94]}%I95S}I96S\newcommand*\providelength[1]{%args:\csnameI97]\@ifundefined@cs{#1}{%I98p2\newlength{#1}%I99f}{%ELSEE100f\MonsterInfo{moredefs}{\protect\providelength\spaceisnotreallocatingE101=\protect#1.\MessageBreakE102=Theexistingvalueis[\the#1]}%E103]}%E104S}E105S\newcommand*\providesavebox[1]{%args:\csnameE106]\@ifundefined@cs{#1}{%E107p2\newsavebox{#1}%E108f}{%ELSEE109f\MonsterInfo{moredefs}{\protect\providesavebox\spaceisnotreallocatingE110=box\protect#1.}%E111]}%E112S}E113S\newcommand*\providecounter[1]{%args:stringE114]\@ifundefined{c@#1}{%E115p2\newcounter{#1}%E116f}{%ELSE7SVsoE117f\MonsterInfo{moredefs}{\protect\providecounter\spaceisnotreallocating E118=counter#1.\MessageBreakE119=Theexistingvalueis[\expandafter\number\csnamec@#1\endcsname]}%E120]}%E121S}E122S\requirecommand*\newboolean[1]{%args:stringE123]\csnamenewif\expandafter\endcsname\csnameif#1\endcsnameE124S}E125S\newcommand*\provideboolean[1]{%args:stringE126]\@ifundefined{if#1}{%E127p2\newboolean{#1}%E128f}{%ELSEE129f\MonsterInfo{moredefs}{\protect\provideboolean\spaceisnotreallocatingE130=\protect#1.\MessageBreakE131=Thevalueis[\@nameuse{if#1}TRUE\elseFALSE\fi]}%E132]}%E133S}e\sc@toks@a b\addto@macro f\lg@addto@macro \prependto@macro 9\g@prependto@macro H\lg@prependto@macroIThere$arestillmissingacoupleofthepGermutations,.butI$won'taddthemuntilI IneedUUthem.qY*oucanaddthemyourselfinthecon guration lemoredefs.cfg. ̍E134S\newtokens\sc@toks@aE135E136S\newcommand\addto@macro[2]{%E137]\sc@toks@a=\expandafter{#1#2}%E138]\edef#1{%E139f\the\sc@toks@aE140]}%E141S}E142S\newcommand\lg@addto@macro[2]{%E143]\sc@toks@a=\expandafter{#1#2}%E144]\long\xdef#1{%E145f\the\sc@toks@aE146]}%E147S}E148S\newcommand\prependto@macro[2]{%E149]\sc@toks@a=\expandafter{#1#2}%E150]\edef#1{%E151f\the\sc@toks@aE152]}%E153S}E154S\newcommand\g@prependto@macro[2]{%E155]\sc@toks@a=\expandafter{#1#2}%E156]\global\edef#1{%E157f\the\sc@toks@aE158]}%E159S}E160S\newcommand\lg@prependto@macro[2]{%E161]\sc@toks@a=\expandafter{#1#2}%E162]\long\xdef#1{%E163f\the\sc@toks@aE164]}%E165S}$\Undefine \UndefineNameI\globalUUworksbGeforeit.8 ^]soE166S\newcommand\Undefine[1]{%args:\csname E167]\let#1\@undefinedE168S}E169S\newcommand\UndefineName[1]{%args:csnameE170]\expandafter\let\csname#1\endcsname\@undefinedE171S} L\defcommand b\defcommand* b\def@commandISeeUUtheuserdoGcumentationforadiscussionofwhentousethisinsteaeofr\def. ꫍E172S\newcommand\defcommand{%E173]\@star@or@long\def@commandE174S}E175S\newcommand\def@command{%E176]\let\@ifdefinable\@rc@ifdefinableE177]\new@commandE178S}y\DefName $\DefName* $\def@name y\NewName $\NewName* $\new@name 3P\Global \sc@globalI\GlobalUUworksbGefore\DefNameand\NewNameonly! ꫍E179S\newcommand\DefName{%E180]\@star@or@long\def@nameE181S}E182S\newcommand\def@name[3]{%args:arglistcsnamebodyE183]\sc@global\l@ngrel@x\@namedef{#1}#2{#3}%E184S}E185S\newcommand\NewName{%E186]\@star@or@long\new@nameE187S}E188S\newcommand\new@name[3]{%args:arglistcsnamebodyE189]\@ifundefined{#1}{%E190p2\sc@global\l@ngrel@x\@namedef{#1}#2{#3}%E191f}{%ELSEE192f\defcommand\reserved@a{%E193p2#1%E194f}%E195f\@notdefinableE196]}%E197S}E198S\newcommand\sc@global{%E199]\relaxE200S}E201S\newcommand\Global{%E202]\def\sc@global{%E203f\global\let\sc@global\relax\globalE204]}%E205S}\CheckName L\CheckName* L\check@name b\RequireName \RequireName* \require@name ꫍E206S\newcommand\CheckName{%E207]\@star@or@long\check@nameE208S}E209S\newcommand\check@name[3]{%args:arglistcsnamebodyE210]\expandafter\DefName\sc@star@nothing{reserved@a}{#2}{#3}%E211]\expandafter\@check@eq\csname#1\endcsname\reserved@aE212S}E213S\newcommand\RequireName{%9 h#soE214]\sc@star@or@long\require@name E215S}E216S\newcommand\require@name[3]{%args:arglistcsnamebodyE217]\@ifundefined{#1}{%E218p2\expandafter\DefName\sc@star@nothing{#1}{#2}{#3}%E219f}{%ELSEE220f\expandafter,\expandafterE221p2\expandafter\CheckNameE222p2\expandafter\sc@star@nothingE223p\csname#1\endcsnameE224p2{#2}{#3}%E225]}%E226S}H\NewTextFontCommand t\NewRobustCommand 9\new@robustcommand H\new@@robustcommandE227S\newcommand\NewTextFontCommand[2]{%args:\csnamefont-commandE228]\ReserveCS{#1}%E229]\DeclareTextFontCommand{#1}{#2}%E230S}E231S\newcommand\NewRobustCommand{%E232]\@star@or@long\new@robustcommandE233S}IW*e8need\new@@robustcommandtoescapGeweirdexpansiontroublesinside\@ Iifdefinable.E234S\newcommand\new@robustcommand[1]{%E235]\InitCS\sc@t@aE236]\@ifdefinable#1{%E237f\def\sc@t@a{\new@@robustcommand#1}%E238]}%E239]\sc@t@aE240S}E241S\newcommand\new@@robustcommand[1]{%E242]\edef\reserved@a{\string#1}%E243]\def\reserved@b{#1}%E244]\edef\reserved@b{%E245f\expandafter\strip@prefix\meaning\reserved@bE246]}%E247]\edef#1{%E248f\ifx\reserved@a\reserved@bE249p2\noexpand\x@protectE250p2\noexpand#1%E251f\fiE252f\noexpand\protectE253f\expandafter\noexpand\csnameE254p2\expandafter\@gobble\string#1\endcsnameE255]}%E256XdD\let\@ifdefinable\@rc@ifdefinableE257XdD\expandafter\new@command\csnameE258f\expandafter\@gobble\string#1\endcsnameE259S}'|\EletE260S\newcommand\Elet{%10 resoE261]\expandafter\let\expandafter E262S}"\EEletE263S\newcommand*\EElet{%E264]\expandafter\expandafter\expandafter\let\expandafter\expandafterE265S}b\NewUserInfo \NewUserInfo* \new@userinfoIUsing@\lowercasesinthismacroistricky*,N;sinceitgetsexpandedonlyinTU>'ExX's Istomach.E266S\newcommand\NewUserInfo{%E267]\sc@star@or@long\new@userinfoE268S}E269S\newcommand*\new@userinfo[2][]{%E270]\expandafter\InitCS\sc@star@nothing{#2}%E271]\def\sc@t@b{#1}%E272]\ifx\sc@t@b\ShortEmptyE273f\edef\sc@t@a{%E274p2\edef\noexpand\sc@t@b{%E275yw^\E@cdr\string#2\@nilE276p2}%E277f}%E278f\lowercase\expandafter{\sc@t@a}%E279]\elseE280f\edef\sc@t@b{\E@cdr\string#1\@nil}%E281]\fiE282]\edef\sc@t@a{%E283f\noexpand\NewName\sc@star@nothing{\sc@t@b}{####1}E284p2{\noexpand\renewcommand\sc@star@nothing\noexpand#2{####1}}E285]}%E286]\sc@t@aE287S}!čI10ifdControllingffexpansion 6\EExpand...\Inf\EExpand*...\In L\sc@EExpand 6\eExpand...\Inf\eExpand*...\In L\sc@eExpand$\eExecute\eExecute*IUsesUU\sc@t@a,\sc@t@b,\sc@t@c.E288S\newcommand\eExpand{%E289]\sc@star@or@long\sc@eExpandE290S}E291S\NewName{sc@eExpand}{#1\In#2}{%args:objectbodyE292]\l@ngrel@x\edef\sc@t@a{#1}%E293]\expandafter\defcommand\sc@star@nothing\sc@t@b[1]{#2}%E294]\expandafter,\sc@t@bE295f\expandafter{\sc@t@a}%E296S}E297S\newcommand\EExpand{%E298]\sc@star@or@long\sc@EExpandE299S}IWhenthisisshort,bGoththetwoargsareshort.V\sc@star@nothinggetsresetIbyUUthe rst\defcommand,sowesaveitin\sc@t@c.E300S\NewName{sc@EExpand}{#1\In#2}{%args:objectbodyE301]\let\sc@t@c\sc@star@nothing11 {EsoE302]\expandafter,\expandafter E303f\expandafter\defcommandE304f\expandafter\sc@t@cE305f\expandafter\sc@t@aE306f\expandafter{#1}%E307]\expandafter\defcommand\sc@t@c\sc@t@b[1]{#2}%E308]\expandafter\sc@t@bE309f\expandafter{\sc@t@a}%E310S}E311S\newcommand\eExecute[1]{%args:bodyE312]\eExpand#1\In{##1}%E313S}"\E@car "\E@cdrE314S\NewName{E@cdr}{#1\@nil}{%E315]\expandafter\@cdr#1\@nilE316S}E317S\NewName{E@car}{#1\@nil}{%E318]\expandafter\@car#1\@nilE319S}!čI11ifdGobbling3P\Gobble y\GobbleM y\GobbleO $\GobbleMM $\GobbleMO $\GobbleOM b\sc@gobbleOMI&m#R cmss10M-for-mandatoryarg,5i.e.,one-token.dOforoptionalarg,5i.e.,a-square-bracepair.E320S\newlet\Gobble\@gobbleE321S\newlet\GobbleM\@gobbleE322S\NewName{GobbleO}{[#1]}E323]{}E324S\newlet\GobbleMM\@gobbletwoE325S\newcommand\GobbleOM{%E326]\@ifnextchar[E327p2\sc@gobbleOME328f\GobbleE329S}E330S\NewName{sc@gobbleOM}{[#1]#2}E331]{}E332S\newcommand\GobbleMO[1]{%E333]\@ifnextchar[E334p2\GobbleOE335f{}%E336S}!čI12ifdDebugging 6\VerboseErrorsIW*eUUdonotuse\setcounterbutrathersetthesecountersloGcally.E337S\newcommand*\VerboseErrors[1][\@M]{%args:[number]E338]\c@errorcontextlines#1%E339]\showboxbreadth#1%E340]\showboxdepth#1%E341S}12 'so"\DebugISetUU\debugto0,1,or2.E342S\newcommand*\Debug[1]{%args:debug-level E343]\ifnum#1>0%E344f\let\sc@t@a\@ME345]\elseE346f\let\sc@t@a\m@neE347]\fiE348]\VerboseErrors[\sc@t@a]%E349]\tracingoutput#1%E350]\tracingpages#1%E351]\tracingmacros#1%E352]\tracingcommands#1%E353]\typeout{++++Debugging[#1]\on@line}%E354S}\MonsterError f\MonsterWarning b\MonsterInfoE355S\newcommand\MonsterWarning[2]{%args:packagewarningE356]\GenericWarning s,%continuationmessageE357f{(#1)\@spaces\@spaces\@spaces\@spaces\@spaces}E358f{Frankenstein(#1)WARNING:#2}%E359S}E360S\newcommand\MonsterError[3]{%args:packageerror-messagehelp-textE361]\GenericError%args:continuationmessagewhere-helpwhat-helpE362f{(#1)\@spaces\@spaces\@spaces\@spaces\@spaces}E363f{Frankenstein(#1)error:#2}E364f{Seethedocumenationforthe#1packageformoreinformation.}E365f{#3}%E366S}E367S\newcommand\MonsterInfo[2]{%args:packageinfoE368]\GenericInfoX%continuationmessageE369f{(#1)\@spaces\@spaces\@spaces\@spaces\@spaces}E370f{Frankenstein(#1)says:#2}%E371S}13ysoIIndexINumbGerswritteninitalicrefertothepagewherethecorrespondingentryisde- IscribGed,Dthe onesunderlinedtothecodelineofthede nition,DtheresttothecodeIlinesUUwheretheentryisused.卍⍑Imacro=X\subitemmacro+,\usage{4},\main{134}*eIerrorcon9textlines=X\subitemerrorcontextlines+,338 cwIname=X\subitemname+,\main{206}IChec9kCommand=X\subitem*+\CheckCommand+,46IChec9kName*=X\subitem*+\CheckName*+,\usage{2},\main{206}IChec9kName=X\subitem*+\CheckName+,\usage{2},\main{206}Icsname=X\subitem*+\csname+,42,53,62,77,82,87,96,105,119,123,166,170, g211,!*223,g227,s253,257IDebug=X\subitem*+\Debug+,\usage{4},\main{342} cwIDeclareT:extFon9tCommand=X\subitem*+\DeclareTextFontCommand+,229Icommand=X\subitemcommand+,\main{172}Iname=X\subitemname+,\main{179}Idef=X\subitem*+\def+,1--4,32,35,54,202,237,243,271Idefcommand*=X\subitem*+\defcommand*+,\usage{2},\main{172}Idefcommand=X\subitem*+\defcommand+,\usage{2},\main{172},192,293,303,307IDefName*=X\subitem*+\DefName*+,\usage{2},\main{179}IDefName=X\subitem*+\DefName+,\usage{2},60,\main{179},210,218IdoAcdate=X\subitem*+\docdate+,\main{1}Icar=X\subitemcar+,\main{314}Icdr=X\subitemcdr+,275,280,\main{314}Iedef=X\subitem*+\edef+,5,21,138,150,156,242,244,247,273,274,280, g282,3X292IEElet=X\subitem*+\EElet+,\usage{3},\main{263}IeExecute*=X\subitem*+\eExecute*+,\usage{3},\main{288}IeExecute=X\subitem*+\eExecute+,\usage{3},\main{288}IEExpand*...=X\subitem*+\EExpand*...\In+,\usage{3},\main{288}IeExpand*...=X\subitem*+\eExpand*...\In+,\usage{3},\main{288}IEExpand...=X\subitem*+\EExpand...\In+,\usage{3},\main{288}IeExpand...=X\subitem*+\eExpand...\In+,\usage{3},\main{288}IEExpand=X\subitem*+\EExpand+,297IeExpand=X\subitem*+\eExpand+,288,312IElet=X\subitem*+\Elet+,\usage{3},\main{260}Ielse=X\subitem*+\else+,131,279,345Iendcsname=X\subitem*+\endcsname+,119,123,170,211,223,254,258Iendinput=X\subitem*+\endinput+,16Iexpandafter=X\subitem*+\expandafter+,22,44,46,60,119,123,137,143,149,155,g161,170,210,g211,218,220{g222,245,253,g254,257,258,g261,264,270,g278,G2293{295,g302{309,3315,318⍒ª =X\subitem*+\fi+,131,251,281,347 ⍒ª ledate=X\subitem*+\filedate+,\main{1}ª leinfo=X\subitem*+\fileinfo+,\main{1}ª lev9ersion=X\subitem*+\fileversion+,\main{1}\ªGenericError=X\subitem*+\GenericError+,361ªGenericInfo=X\subitem*+\GenericInfo+,368ªGenericW:arning=X\subitem*+\GenericWarning+,356ªGlobal=X\subitem*+\Global+,\usage{2},\main{179}ªglobal=X\subitem*+\global+,156,203ªGobble=X\subitem*+\Gobble+,\usage{4},\main{320}ªGobbleM=X\subitem*+\GobbleM+,\usage{4},\main{320}ªGobbleMM=X\subitem*+\GobbleMM+,\usage{4},\main{320}ªGobbleMO=X\subitem*+\GobbleMO+,\usage{4},\main{320}ªGobbleO=X\subitem*+\GobbleO+,\usage{4},\main{320}ªGobbleOM=X\subitem*+\GobbleOM+,\usage{4},\main{320}ªifn9um=X\subitem*+\ifnum+,343ªifx=X\subitem*+\ifx+,248,272ªCS=X\subitemCS+,51,53ªName=X\subitemName+,57,59ªInitCS*=X\subitem*+\InitCS*+,\usage{1},\main{50}ªInitCS=X\subitem*+\InitCS+,\usage{1},\main{50},235,270ªInitName*=X\subitem*+\InitName*+,\usage{1},\main{50}ªInitName=X\subitem*+\InitName+,\usage{1},\main{50}ªlet=X\subitem*+\let+,31,34,84,167,170,176,203,256,261,264,301, બ344,3X346ªlong=X\subitem*+\long+,34,144,162ªLongEmpt9y=X\subitem*+\LongEmpty+,\usage{1},\main{50}ªlo9wercase=X\subitem*+\lowercase+,278ªne=X\subitemne+,346ªmak9eatletter=X\subitem*+\makeatletter+,8ªmak9eatother=X\subitem*+\makeatother+,15ªmeaning=X\subitem*+\meaning+,245ªMessageBreak=X\subitem*+\MessageBreak+,92,101,118,130ªMonsterDebug=X\subitem*+\MonsterDebug+,\usage{4}ªMonsterError=X\subitem*+\MonsterError+,\usage{4},\main{355}ªMonsterInfo=X\subitem*+\MonsterInfo+,\usage{4},91,100,109,117,129,355fe ªMonsterW:arning=X\subitem*+\MonsterWarning+,\usage{4},\main{355}ªNeedsT:eXFormat=X\subitem*+\NeedsTeXFormat+,18ªcommand=X\subitemcommand+,177,257ªname=X\subitemname+,\main{179}ªrobustcommand=X\subitemrobustcommand+,\main{227}ªuserinfo=X\subitemuserinfo+,\main{266}ªnewbAoolean=X\subitem*+\newboolean+,\usage{2},\main{87}⍒ cmmi10K`y cmr10ٓRcmr7