; TeX output 1996.05.27:1834soDtGGcmr17The7tGGcmss17sverb!", cmsy10 npacqkage#XQ cmr12MarkWVoSoding=sܣH8Mary1996:ōINff cmbx12ContentsPI"V cmbx101XUserTguidea1 XK`y cmr101.1oTheUUm#R cmss10listingxenvironmentƂ.p2o1.1.1Con guring thelistingxenvironment+2o1.1.2ChoGosingadi er-entUUend-text....p3X1.2oW*ritingUUtexttoa le[㍍...p3X1.3oTheUU 'ExX's bmemory*.XbSuppGortUUfortabcharactersintheverbatimtext.XbAnUUenvironmentfortypGesettingdemonstrationsofL5ffٓRcmr7A͉TU>'ExXmarkup.XbItMallworkscorrectlywiththedoGcsystemfordocumentingL5ffA͉TU>'ExXpackqages.XbA8Afairly8HhairybutquitepGowerful8HprogrammerinterfacetotheyukkybitsofbtheUUpackqage.XThe׽interfaceisdescribGedinitsownsection,WsothatmoretimidreaderscanIavoidUUit.qThatsaid,someofthestu inthissectiongetsrathertechnical.XNoteOthatthispackqagedoGesn'teventrytodoanythingwithshortbitsofver-IbatimEtext(ashandledbythe\verb:...:command).lIEhaveaseparatepackqageI(syntax)UUwhichdoGesallsortsofhorriblethingsalongthoselines.6I"N cmbx121.1gThe#kAH cmssbx10listingenvironmentuTIThemainmethoGdfortypesettingverbatimtextisthelistinggenvironment.UThis$ߤN cmtt9listingIworksbprettymuchthesameasthestandardverbatimenvironment,withsomeIexceptions,UUwhicharedescribGedbelow.XSonthatyouknowexactlywhatyou'regetting,herearetherulesbywhichIsverbUUdecideswhattheverbatimtextactuallyis:XbIf7there'sanytext, pWotherthanspaces,onthesamelineastheb`\begin{listing}',x@then>thecontents>oftheenvironment>bGeginsimmedi-batelyXIaftertheclosingbrace(withallleadingspacespreserved).zOtherwise,btheUUtextbGeginsonthefollowingline.XbIfWthereisanytext,otherthanspaces,bGeforethe`\end{listing}',butonbthesameline,thisisconsideredtobGethelastlineofthetext;&#otherwisethebtextUUispresumedtohaveUUendedattheendofthepreviousline.XbAnyFtextfollowingthe\end{listing}onthesamelineisthrownaway*.bThere*]aregoGod*]reasonsforthis,_butthey'retechnical.Essentially*]there'sbnothingUUIcandoabGoutit.XT*abPcharactersaresuppGortedwithintheenvironment:ogtabstopsareseteveryIeighthUUcolumn,althoughthiscanbGemodi ed.6I1.1.1l#Con guringTthe&kAH cmssbx10listingqen9vironmentuTIThe}textsizeusedinthelisting]environment}issetbythe\listingsizecommand.IBydefault,4wthisissetto\small,althoughyoucanrede neitinthedoGcumentIpreamble,UUoritcanbGesetinthedocumentclass.XTheq,amountbywhichthelistingtextisindentediscontrolledbytheI\listingindentFӲlengthparameter.F@Thisisa xedlength,2whosedefaultvqalueIisUU1em.2 soVSffnfdTheUUlistingxenvironmentqffnSffN32ffZǍ]...inUUthefollowingcoGde:linit8MOVR0,#200*F;Version2.00please bLDRR1,=&4B534154,;Magicnumber(`TASK')bADRR2,appNameY;FindapplicationnamebSWIWimp_Initialise;RegisterasaWIMPtask]TheUUnextstepisto...SmIffNq@ \dotsinthefollowingcode: \begin{listing} init8MOVR0,#200*F;Version2.00pleaseUaLDRR1,=&4B534154,;Magicnumber(`TASK')UaADRR2,appNameY;FindapplicationnameUaSWIWimp_Initialise;RegisterasaWIMPtask \end{listing} Thenextstepisto\dots@ffN32ffffffNI1.1.2l#ChoQosingTadi eren9tend-textuTIThe/listingӼenvironmentisterminatedbytheexactcharactersequence3Plisting* I`\end{listing}'. Thisisn'ttoGomuchofaproblem,unlessyouwanttoincludeIthisarstringinthetext.Thisisachievedarbythelistingenvironment,dzwhichallowsIyouUUtospGecifytheend-textto ndasanargument.XF*orUUexample:SfflfdTheUUlistingenvironmentu|fflSffN32ff9Ǎ]TypGeUUalistingasfollows:l\begin{listing} lThisisalisting. s,Yes.l\end{listing}OTypealistingasfollows: \begin{listing*}{}\begin{listing}Thisisalisting. s,Yes.\end{listing}^SffN32ffSffffNw,XDon'thinclude`spGecial'charactersinyourchosenend-textunlessyouknowIwhatUUyou'redoing.6I1.2gWritingtexttoa leIY*oucanwriteverbatimtexttoa leusingtheverbwriteenvironment.QThesyntaxyverbwriteIisUUfairlystraightforward:b\begin{verbwrite}{̸h le-name[i}zd...\end{verbwrite}3 soXThe[textoftheenvironment[iswrittentothenamed le.TherulesabGoutwhere ItheUUtextactuallystartsandendsarethesameasforthelistingxenvironment.XThereisalsoa-vqariant,likelisting,whichallowsyoutochoGosetheend-text.ITheUUend-textisthe rstargument,the lenamecomessecond.XThereisarestrictiononthecharactersyoucanwritetothe le:NvtheymustallIbGetconsidered`printable'byTU>'ExX;otherwisetheywillbGereadbackinas`^^ hchars!i*9'IwhichF isn'ttoGogood.CUnfortunately*,9thisincludestabcharacters,soyoucan'tIwriteUUthem.^1XF*orUUexample:X\begin{verbwrite}{wrdemo.tmp} XThisissometextwrittentoXafilenearthebeginningofXthefile.X\end{verbwrite}6I1.3gThe'߆T cmtt12\verbinputcommanduTIY*ouڊcaninputapre-preparedtext leexactlyasitisintheinputusingthe$\verbinput I\verbinputUUcommand.qThe lenameisgivenasanargument.qF*orexample:Sffg1эfdTheUU\verbinputcommand\ffg1юSffN32ff#lThisissometextwrittento lafilenearthebeginningoflthefile.@\verbinput{wrdemo.tmp}0SffN32ffSffffNM9I1.4gThedemoenvironmentIPackqageauthorsneedtodoGcumenttheirpackqages,Iandit'scommontowanttoIdisplay`examplesshowingtheoriginaltextandtheoutputside-by-side(or,cwhenIspacedoGesn'tpermitthis, uoneabovetheother).+BoththeL5ffA͉TU>'ExXbookandTheIL雍Q(t}\cmti7ATKß'E-XComp}'anioncontainUUsuchexamples.XThedemoenvironmentallowssuchdisplaystobGecreatedeasily*.ThesyntaxIofUUtheenvironmentUUisasfollows:b\begin{demo}[?۸hshap}'e[iJ"]{htitle[i/j}ļ...\end{demo}XThe cmmi10f(p)=cZUR yt>1ĵf(t)d[ٲ(t)$@\[\sum_{p\;\rmprime}  f(p)=\int_{t>1}لf(t)\,{\rmd}\pi(t)\]3@gff&3.ffgffff&SQs2ffN:@ \begin{demo}{Fromthe\textit{\TeXbook}} \[\sum_{p\;\rmprime},f(p)=\int_{t>1}&Yf(t)\,{\rmd}\pi(t)\] \end{demo}GffN32ffffffN^XAs0withtheotherenvironments0createdbythispackqage,g}there'sa-variant&`demo* IwhichUUtakestheend-textasanargument.!čI2aLProgrammerffinterfaceIThiskLsectiondescribGesthepubliclyavqailableroutinesprovidedbythesverbpack-Iage. \kRoutinesnotdescribGedherearelibabletobechangedorevenremovedIwithoutUUwarning,sodon'tusethem.6I2.1gEnvironmentho`oksuTIEachpoftheenvironmentscreatedhereworksinthesameway*.>Forpeachenviron-ImentfoGo,Ythere'samaincommandresponsiblefordoingthework,Ycalled\sv@foo.IThisUUisgivenalltheargumentsofthenormalenvironment,andtwomore:XbTheUU`end-text'tosearchfor,whichmarkstheendoftheenvironment.XbSomeǛactionstopGerformafterthetexthasbeenreadandprocessed.ȚThisballowsUUthecallingmacrotodosomeextraactions,likeclosingbGoxes,etc.XAllltheenvironmentsldoiscallthemaincommandwithappropriatearguments.6I2.2gReadingtheverbatimtextuTITheUUmainscanningroutineis\sv@read.qItiscalledwiththreearguments:3P\sv@readXbTheUUend-textmarkingtheendoftheenvironment.XbTheVnameofamacro(whichmustbGeasingletoken)whichiscalledwithablineяoftextasitssingleargument.vThisisgiveneachlineoftextwhichisbreadUUfromtheenvironmentUUinturn.XbABmacro,*or_othersortofaction,whichistobGedonewhenthetexthasbeenbreadUUandproGcessed.50^soXThe0macro\sv@readassumesthatthecallerhasalreadymadesomeprovision IforremovingthecategorycoGdesofthefollowingtext,*byeithercalling\@verbatimIorUUusingtheconstructionX\let\do=\@makeother X\dospecialsXNote8thatanyspacecharactersyoureadusing\sv@readwillbGecatcodedas \sv@safespcI\active.NormallythisisOKQbGecause\obeyspaces(or\@vobeyspaces)willIbGe΅ine ect.XIfyou'redoingsomethingmoreexotic,likewritingtexttoa leorIbuildingacommandstring,youcancall\sv@safespcwhichde nestheactive-IspaceUUcharactertobGeanormalwhitespace-spacewhenexpanded.!čI3aLImplementationIThism~sectionde nesseveralmacrosandenvironmentswhichallowverbatimtyping,Iwith&ahighdegreeofcon gurability*.9 OK,sothissortofthing'sbGeendonesooftenIbGeforeUUthatitisn'ttrue,butIdon'treallycare.Ls1S* cmsy9h+ow cmss9pack9age#g i6I3.1gSimplethingsuTIT*odhelpusbuildfunnymacroswhichinvolvestrangeanddi erentcategorycoGdes,II'llJbwritesomesimplemacroswhichIJ_canusewhilebuildingmycomplicatedandIcleverUUones. L\@cspecialsIThis^6macroisusedtoassistthede nitionofsomeoftheenvironments.kIt^6makesI`\', `{'and`}'into`other'characters, andreplacesthemwith`|',`<'and`>'IrespGectively*.v>Note'that`['and`]'aren'tused,becausetheymakede ningcom-Imandswhichtakeoptionalargumentsawkward.[/NotethatweopGenagrouphere.IThisUUshouldbGeclosedusing|endgroupattheendofthespecialsection.Ls2S\def\@cspecials{% Ls3]\begingroup%Ls4]\catcode`|0%Ls5]\catcode`<1%Ls6]\catcode`>2%Ls7]\catcode`\{12%Ls8]\catcode`\}12%Ls9]\catcode`\\12%I10S} \sv@startlistingIThisUUmacrosetseverythingupnicelyforalisting#-typGeverbatimenvironment.I11S\def\sv@startlisting{%I12]\def\par{\@@par\penalty\interlinepenalty}%I13]\@@par%I14]\leftskip\@totalleftmargin%I15]\obeylines%I16]\@noligs%I17]\let\do\@makeother\dospecials%I18]\verbatim@font%I19]\frenchspacing%6;WsoI20]\@vobeyspaces% I21]\settabwidth%I22]\catcode9\active%I23]\lccode`\~9\lowercase{\let~\sv@vtab}%I24]\lccode`\~13\lowercase{\let~\vinput@cr}%I25]\interlinepenalty500%I26S}6I3.2gTabcharacterhandlinguTIOneSofthethingswewanttodohereishandletabcharacterspropGerly*.i(Here, I`propGerly'means`movingtothenextcolumnwhichisamultipleofeight',lthewayItheseUUthingswerealwaysmeantto.)b\settabwidthIThetabsusedbyourtabbGedverbatimenvironmentsaresetupbythisroutine.PItIsetslthetabwidthparameter\svtabto8timesthewidthofa\ttspace.IfyouIreallyUUwant,youcanrede nethismacro.I27S\newdimen\svtab I28S\def\settabwidth{\setbox\z@\hbox{\texttt{\space}}\svtab8\wd\z@}y\sv@vtabIHereSwehandletabsinsideverbatimenvironments.m.W*eexpGecteachlinetobGeItypGesetUUasabox,usingsomethinglikeX\setbox0\hbox{#1} X\leavevmodeX\box0X\parXThe΁ideaisthatyoumaketabactive,andsetittothismacro.LW*estopthe IcurrentLbGox,Nstretchittotherightwidth,Nandstartanotheronestraightafter,NsoInobGodyknowthedi erence.aThecoGdehereisstraightfromAppGendixDmofTheITKß'E-Xb}'ook.I29S\def\sv@vtab{% I30]\hfill\egroup%I31]\@tempdima\wd\z@%I32]\divide\@tempdima\svtab%I33]\multiply\@tempdima\svtab%I34]\advance\@tempdima\svtab%I35]\wd\z@\@tempdima%I36]\leavevmode\box\z@%I37]\setbox\z@\hbox\bgroup%I38S}\verbinputIW*e!allowinputfroma le,T bythe\verbinputcommand.W*edisplaythetext IprettyUUmuchthesameasthelistingxenvironmentbGelow.XW*e')settabandreturnactive,[andgetthemtodoappropriatethings.BThisIisn'tUUactuallyallthathard.I39S\def\verbinput#1{% I40]\begin{listinglist}%I41]\listingsize%I42]\sv@startlisting%I43]\setbox\z@\hbox\bgroup%7F9soI44]\input{#1}% I45]\sv@stripspc%I46]\egroup%I47]\ifdim\wd\z@=\z@%I48f\ifhmode\par\fi%I49]\else%I50f\leavevmode\box\z@\par%I51]\fi%I52]\end{listinglist}%I53S}`\vinput@crIThisMmacrohandlesreturncharacterswhileinputtingtextin\verbinput.ZW*e IjustUUoutputourcurrentbGox,andstartanother.I54S\def\vinput@cr{%I55]\egroup%I56]\leavevmode\box\z@%I57]\par%I58]\setbox\z@\hbox\bgroup%I59S}I3.3gReadingverbatimtextuTIThetraditionalwayofreadingverbatimtextistouseadelimitedargument,asIdescribGed 8intheTKß'E-Xb}'ook.YThis 8workswell-ishifthetextisn'tverylong.YA &bGetterIsolutionzwouldbGetopickoutthetextline-by-lineandproGcessitlikethat.USothisIisUUwhatwedo.`y\matcherIF*orlongverbatimenvironments,4weneedtobGeableto ndtheendtext.aThisIisSrathertricky*.=Thesolutionhereisratherhorrible.TheenvironmentSpicksoutIeach`ylineofthetextatatime,cBasanargument,cBandteststoseeifitcontainstheItextwe'reafter.W*edothetestinaparticularlyyukkyway:*weaddtheactualItargetNtexttotheendoftheline,OandinspGectthetextfollowingthematchtoseeIifUUthematchisattheend.XThe}\matchermacrocreatesa`matcher'whichwillteststringstoseeiftheyIcontainUUsomethinginteresting.XT*oK`createamatcher,sayK`\matcher{3Ehcmd-name[ii }{shtar}'getظi}{phpr}'ocess-cmdi}?.IThe.Zcommandhcmd-name[i=jacceptsalineoftextasanargumentandcallstheIhpr}'ocess-cmdiĔwith5thetextofthelinebGeforethematch,;}orthewholelot.gItalsoIsetsUU\@ifmatchedappropriately*.X(HavingspGentagescomingupwiththiscruftmyself,Ifoundsomeverysimilar,IbutslightlybGetter,codeinAppGendixD.SoI'vechangedminetomatchDonald's.IAnyway*,UUcreditwhereit'sdue:qcheersDon.)I60S\newif\if@matchedI61S\def\matcher#1#2#3{%I62]\expandafter\def\csname\string#1$match\endcsname##1#2##2##3\end{%I63f\ifx##2\relax%I64p2\@matchedfalse%I65f\else%I66p2\@matchedtrue%I67f\fi%I68f#3{##1}%I69]}%8 PDsoI70]\expandafter\def\expandafter#1\expandafter##\expandafter1\expandafter{% I71f\csname\string#1$match\endcsname##1#2\relax\end%I72]}%I73S}b\sv@stripspcIThis/macrostripsanytrailingglueinthecurrenthorizontallist.dThisisfairly Isimple,-9actually:Xwe#2justloGopwhileglueisthelastitem.aIt'sslightlycomplicatedIbyvpGenaltieswhichTU>'ExXputsintothelistbGetweentheglueitems,butwejustIremoveUUthemtoGo.UUI74S\def\sv@stripspc{% I75]\unpenalty%I76]\ifdim\lastskip=\z@\else%I77f\unskip\expandafter\sv@stripspc%I78]\fi%I79S} L\sv@percentIThis7macrostripsasingleleadingpGercentcharacterifthereisone,=~andifthedoGc IpackqageUUisloaded.qW*estorethepGossiblystrippedtextin\@tempa.UUI80S\begingroupI81S\catcode`\%=12I82S\gdef\sv@percent#1#2\relaxI83f{\ifx\check@percent\@@undefinedI84\ifx#1\relax\def\@tempa{}\elseI85T\def\@tempa{#1#2}\fi\elseI86\ifx#1\relax\def\@tempa{}\elseI87T\ifx#1%\def\@tempa{#2}\elseI88ܰ\def\@tempa{#1#2}\fi\fi\fi}I89S\endgroup\@isspacesIW*e/wanttoavoidwritingthe rstandlastlinesoftheenvironmenttothe le Iifthere'snothinginthem.T*odothis,ߦweneedtoknowwhetherapieceoftextIcontains4onlyspacecharacters.eThismacrodoGesthis,inarathernastyway*.eSeeItheUUothermacrosbGelowfordetailsofhowthisworks.XW*e@de ne\sv@safespcatthesametime:A=thismakesspaceactiveandexpandItoUUaspacecharacterwhichisnotactive.qNeat,huh?UUI90S\lccode`\~32 I91S\lccode`\!32I92S\lowercase{%I93]\def\@isspaces#1{%I94f\ifx#1\relax%I95p2\def\@tempb{\@tempswafalse}%I96f\else\ifx#1~%I97p2\let\@tempb\@isspaces%I98f\else%I99p2\def\@tempb##1\relax{}%E100f\fi\fi%E101f\@tempb%E102]}E103]\def\sv@safespc{%E104f\catcode32\active%E105f\def~{}%E106]}E107S}9 [Ԡsoy\sv@readIThis macrodoGesthemainjobofreadingachunk ofverbatimtext.NY*oucallitlike Ithis:b\sv@read{?hend-textظi-}{E'hpr}'ocess-line-proci}{!ihend-pr}'ociN}XTheY=hend-textظi47isY=thetextto ndattheendofthe`environment':yweY=stopIwhenUUwe ndit.XThe hpr}'ocess-line-prociWis amacrowhichispassedasanargumenteachlineIwhichUUwereadfromthetext.XTheyhend-pr}'oci46isyamacrotocalloncewe'vey nishedreadingallofthetext.IThisUUcantidyupanenvironmentUUorclosea leorwhatever.XW*eͽreadthetextbypickingoutnewlinesusingadelimitedmacro.W*ehaveItoUUbGealittleclever,becausenewlinesareactiveinverbatimtext.XW*e$willalsostrip`%'signso thebGeginningifthedocpackqageishere(docItriesdtoplaywithL5ffA͉TU>'ExX'sverbatimstu ,anddoGesn'tunderstandthewaywedoIthings).E108S\def\sv@read#1#2#3{%XThisUUcoGdedoesallsortsofevilthings,soI'llstartbyopeningagroup.E109]\begingroup%XSoUUthatIcanspGottheend-text,I'llcreateamatchermacro.E110]\matcher\@match{#1}\sv@read@ii%XSo_thatI7canidentifylineends,I'llmakethemactive.?I'llalsomakespaces Iactivebsothattheycanexpandtowhatevertheyoughttoexpandto(spacesinI les,UUorfunny charactersorwhatever.E111]\catcode13\active% E112]\catcode32\active%XI'll*usethe\if@tempswa agtotellmewhetherI*oughttooutputthecurrentIline.iThisofthejobisdonebytwosubmacros.-I'llde nethemintermsofmyIcurrentd arguments(tosavelotsoftokenmunging).The rstjustextractstheInextUUline(whichendsatthenextnewlinecharacter)andtriestomatchit.E114]\lccode`\~13\lowercase{% E115f\def\sv@read@i##1~{\@match{##1}}%E116]}%XThe,resultsofthematchgetpassedhere,4alongwiththetextofthelineupto ItheUUmatchedtext.E117]\def\sv@read@ii##1{%XThe rstjobtodoistomaybGestripo percentsignsfromthebeginning,ǐtoIkeepUUdoGchappy*.E118f\sv@percent##1\relax\relax%10 fsoXNowIneedtodecidewhetherIoughttooutputthisline.ThemethoGdgoes Ilikethis:Poifthisisthe rstline(\if@tempswaisfalse)orthelast(\if@matchedisItrue),UUand]޲thetextconsistsonlyofspaces,thenI'llignoreit.XThex rstthingtodoistonoticethelastline{if\if@matchedistrue,>thenI'llImake_\if@tempswafalsetomakethe rst-lineandlast-linecasesworkthesameIway*.E119f\if@matched\@tempswafalse\fi%XNowUifthisisthe rstorlastline,UI'llexamineitforspaces.rThisisdoneinaIseparateUUmacro.qItwillset\if@tempswafalseifthetextcontainsonlyspaces.E120f\if@tempswa\else\@tempswatrue\expandafter\@isspaces\@tempa\relax\fi%XNow,ifq\if@tempswaisstilltrue,pGerformthehpr}'ocess-line-prociW[]onthelineIofUUtext.qI'llprovideagroup,sothatitdoGesn'tupsetmetoomuch.E121f\if@tempswa% E122p2\begingroup%E123p2\expandafter#2\expandafter{\@tempa}%E124p2\endgroup%E125f\fi%XTheUUnextlinewon'tbGethe rstone,soI'llsetthe agtrueinreadiness.E126f\@tempswatrue%XNow,+?ifwthatwasn'tthelastline,+?goroundagain;VotherwiseendthegroupI IstartedUUagesago,anddotheuser'shend-pr}'oci0.E127f\if@matched\def\@tempa{\endgroup#3}\else\let\@tempa\sv@read@i\fi% E128f\@tempa%E129]}%XNowUUtostartthethingup.qI'llreadthe rstline.E130]\sv@read@i%E131S} L\sv@readenvIThisLmacroworksoutanappropriateend-textforthecurrentenvironment.EoIfyou IsayUU\sv@readenv{BU1hmacr}'o-name[i},UUitwillexpanddoXh/j cmti9macro-name i{\12end{\12hcurrent-env-name i ~}C12b}{\end{:+|hcurrent-env-name iP}}IEasy*,UUno?XThisUUisalldonewithmirrors.qNo,err...it'sUUdonewith\expandafter.E132S\begingroup E133S\lccode`\<=`\{E134S\lccode`\>=`\}E135S\lccode`\|=`\\E136S\lowercase{\endgroupE137S\def\sv@readenv#1{%E138]\expandafter\expandafter\expandafter%E139f#1\expandafter\sv@readenv@i\@currenvir\@@%E140S}E141S\def\sv@readenv@i#1\@@{{|end<#1>}{\end{#1}}}E142S}11 q sob\sv@verblineIThismacrotypGesetsalineinaverbatimway*,soyoucanconstructarealverbatim Ienvironmentfromit.:.It'sabittrickyinthewaythatitcatchesthelastline.:.Don'tIworrytabGoutthis:*it'seasyreally*.B|Notethe\relaxafterthe\par{thisisbecauseIdoGcUUtriestodocleverthingswith\partostrip`%'signsout.E143S\def\sv@verbline#1{% E144]\setbox\z@\hbox{#1\sv@stripspc}%E145]\ifdim\wd\z@=\z@%E146f\if@matched\ifhmode\par\relax\fi\else\leavevmode\par\relax\fi%E147]\else%E148f\leavevmode\box\z@\par\relax%E149]\fi%E150S}6I3.4gListingenvironmentsuTITheQlisting޲environmentisourequivqalentofthestandardverbatimenvironment. IW*edosomeslightlyclevererthings,though,tomakesure(forexample)thatevenItextUUwhichcontains\end{listing}canbGetypGeset.b\listinglist LlistinglistIThisode nesthelayoutoforthelisting7environment.Itostartsalistwiththeap-IpropriateshapGe.It'salsomadeintoanenvironment,sothattheend-paragraph-IenvironmentUUbitsworkcorrectly*.XTheK\listingindentlengthparametersetsuptheindentationofthelistings.IIfԎthere'sa\parindentsetting,]I'lllinelistingsupwiththat;+otherwiseI'lljustIchoGoseUUsomethingwhichloGoksright.E151S\newdimen\listingindent E152S\AtBeginDocument{%E153]\ifdim\parindent=\z@\listingindent1em\else\listingindent\parindent\fi%E154S}XNowUUtode neasizehoGokfortheenvironment.qThisisfairlysimplestu .E155S\ifx\listingsize\@@undefinedE156]\let\listingsize\smallE157S\fiXNowUUtode netheenvironmentitself.qThisisreallyeasy*.E158S\def\listinglist{%E159]\list{}{%E160f\leftmargin\listingindent%E161f\rightmargin\z@%E162f\labelwidth\z@%E163f\labelsep\z@%E164f\itemindent\z@%E165f\listparindent\z@%E166f\let\makelabel\relax%E167f\parsep\z@skip%E168]}%E169]\parfillskip\@flushglue%E170]\item\relax%E171S}E172S\let\endlistinglist\endlist12 |so3PlistingIThetlistingenvironmentistheonlyrealverbatim-likeenvironmentwecreatewill IallUUthiskit,althoughitdoGesthejobverynicely*.XTheenvironmentindentsitscontentsslightly*,unlikeverbatim,andusesasmal-IlerytypGefaceinanattemptto t77-columntextonanA5page.2ThereisalsoaI-vqariant,which#allowsyoutospGecifytheterminatingtext.0ThisenablesyoutoIincludeUUabsolutelyanytextintheenvironment,including\end{listing}.XFirst,UUwemustde nethe\listingcommand.E173S\def\listing{% E174]\listinglist%E175]\listingsize%E176]\sv@readenv\sv@listing%E177S}XNowwede nethe\@listingcommand,KwhichdoGesmostofthework.W*e IbaseUUthelistingxenvironmentUUonalist.E178S\def\sv@listing#1#2{%E179]\sv@startlisting%E180]\sv@read{#1}\sv@verbline{\endlistinglist#2}%E181S}XNowwede nethestarredversion.HThecommandnameneedstoincludethe I`*'Mhcharacter,lsowemustuse\csname.YThere'ssomehackingheretoallowusIto*readthenameusingtheappropriatecatcoGdesforotherwisenormalcharacters:IL5ffA͉TU>'ExXactivqatessomecharactersandmakesthemtypGesetthemselvestosuppressIsomeUUligaturing.E182S\expandafter\def\csnamelisting*\endcsname{% E183]\listinglist%E184]\listingsize%E185]\begingroup%E186]\@noligs%E187]\def\@tempa##1{\endgroup\sv@listing{##1}{\end{listing*}}}%E188]\@tempa%E189S}"ignoreIThe]signoreenvironmententirelyignoresitscontents. AnythingatallmaybGeput IintoUUtheenvironment:qitisdiscardedutterly*.XW*ede nesomemacrosforde ningignoringenvironments,3RbGecausethiscanIbGeUUusefulforversioncontrol,pGossibly*.E190S\def\sv@ignore#1#2{% E191]\@bsphack%E192]\let\do\@makeother\dospecials%E193]\sv@read{#1}\@gobble{\@esphack#2}%E194S}E195S\def\ignore{\sv@readenv\sv@ignore}E196S\def\ignoreenv#1{%E197]\expandafter\let\csname#1\endcsname\ignore%E198S}E199S\def\unignoreenv#1{%E200]\expandafter\def\csname#1\endcsname{\endgroup}%E201]\expandafter\def\csnameend#1\endcsname%E202p2{\begingroup\def\@currenvir{#1}}%E203S}13soI3.5gTheverb"writeenvironmentuTITheǛverbwriteenvironmentallowstexttobGewrittentoa leinaverbatimway*. INoteUUthattabcharactersdon'twork,bGecauseTU>'ExXrefusestobenice.$\sv@writeIAsseemstobGetraditionalnow,*we rstde neageneralhookqablemacrowhichIallowsUUacallertospGecifytheend-textandwhattodoafterwards. E204S\newwrite\sv@writefile E205S\def\sv@write#1#2{%E206]\begingroup%E207]\@bsphack%E208]\let\do\@makeother\dospecials%E209]\sv@safespc%E210]\sv@read{#1}\sv@writeline{\sv@endwrite#2}%E211S}E212S\def\sv@writeline#1{%E213]\immediate\write\sv@writefile{#1}%E214S}E215S\def\sv@endwrite{%E216]\@esphack%E217]\endgroup%E218S}$verbwriteINow &wecande netheactualenvironment.:W*ede nea-vqariantwhichallows ItheUUusertospGecifytheend-text,justtomakesure. E219S\def\verbwrite#1{%E220]\immediate\openout\sv@writefile#1\relax%E221]\sv@readenv\sv@write%E222S}E223S\def\endverbwrite{\immediate\closeout\sv@writefile}E224S\expandafter\def\csnameverbwrite*\endcsname#1#2{%E225]\immediate\openout\sv@writefile#2\relax%E226]\sv@write{#1}{\immediate\closeout\sv@writefile\end{verbwrite*}}%E227S}0I3.6gThedemoenvironmentuTIByewayoftyingallofthistogether,Ie|presentanenvironmentfordisplayingdemon-IstrationsofL5ffA͉TU>'ExXmarkup.NW*ereadthecontentsoftheenvironment,writeittoaItempGorary" le,,andreaditbacktwice,,typGesettingitthe rsttimeanddisplayingIitUUverbatimthesecondtime.b\sv@demonameIThis}Rmacroexpandstothe lenametouseforthetempGorarydata.T*oallowtheIpackqageڅdoGcumentationtodemonstratethedemoenvironmentitself,weneedtoIkeeplanestingcount.WThisavoidstoGomuchhackery*,whichunfortunatelyappGearsItoUUplagueallofmyTU>'ExXcoGde. E228S\newcount\sv@nestcountE229S\def\sv@demoname{demo\number\sv@nestcount.tmp}y\sv@demoIAsforlisting,Kwedoallthebusinessthroughaprivqatemacro.-ThisisgoGodbecauseIitFmeanswecanleavethemainmacroreadable.lTheargumentistheend-texttoIspGot.14*soE230S\def\sv@demo#1#2{% E231]\@ifnextchar[{\sv@demo@i{#1}{#2}}{\sv@demo@i{#1}{#2}[n]}%E232S}E233S\def\sv@demo@i#1#2[#3]#4{%E234]\advance\sv@nestcountby\@ne%E235]\immediate\openout\sv@writefile\sv@demoname\relax%E236]\sv@write{#1}{%E237f\immediate\closeout\sv@writefile%E238f\sv@dodemo{#2}{#3}{#4}%E239]}%E240S}э,`demoIThisistherealenvironment.W*eprovidedemotoGo,NtoallowtheusertochoGose ItheUUend-text..E241S\def\demo{\sv@readenv\sv@demo}E242S\expandafter\def\csnamedemo*\endcsname#1{\sv@demo{#1}{\end{demo*}}}\sv@dodemoIFirst,?let'sde nesomecommonbitsofcoGdeinthestu below.Theminipages IusedQtotypGesetthematerialhassomecleverstu toavoidstrangespacingintheIoutput..E243S\def\sv@demosmp{% E244]\begin{minipage}[t]{\@tempdima}%E245]\vskip8\p@%E246]\hrule\@height\z@%E247]\raggedright%E248]\vbox\bgroup%E249S}E250S\def\sv@demoemp{%E251f\par\unpenalty\unskip%E252]\egroup%E253]\vskip8\p@%E254]\hrule\@height\z@%E255]\end{minipage}%E256S}.XThisUUisthemacrowhichactuallytypGesetsthedemonstration.E257S\def\sv@dodemo#1#2#3{%XNowpworkoutsomevqalues.W*eset\hsizetothelinewidthleaving2emof IspaceFoneitherside.EThesizeoftheminipagesiscalculateddepGendingontheIshapGeUUofthedemonstration.qThisisallfairlysimple.E258]\begingroup% E259]\@tempdima\linewidth%E260]\advance\@tempdima-2em%E261]\hsize\@tempdima%E262]\if#2w%E263f\advance\@tempdima-2em%E264]\else%E265f\advance\@tempdima-3em%E266f\divide\@tempdima2%E267]\fi%.XNowweopGenabigverticalbGox,andputinaheadertomarko thedemon- Istration.15soE268]\par% E269]\setbox\z@\hbox{\strut\enspace#3\enspace\strut}%E270]\@tempdimb.5\dp\z@%E271]\advance\@tempdimb-.5\ht\z@%E272]\ht\z@\@tempdimb\dp\z@\@tempdimb%E273]\noindent\hskip1em\vtop{%E274f\hb@xt@\hsize{%E275p2\hrulefill%E276p2\raise\@tempdimb\box\z@%E277p2\hrulefill%E278f}%E279f\nointerlineskip%E280f\hb@xt@\hsize{\vrule\@height5\p@\hfil\vrule\@height5\p@}%E281f\nointerlineskip%XNow0weinserttheoutputtextinthe rstminipage.XI'llforce`%'tobGea IcommentUUcharacter,incasesomethinglikedoGchashaditswickedway*.E282f\vskip-\parskip%E283f\noindent\hbox{}\hskip1em%E284f\sv@demosmp%E285f\catcode`\%14\relax%E286f\input{\sv@demoname}%E287f\sv@demoemp%XInsertSsomekindofseparationbGetweenSthetwo.jInS`wide'format,westarta Inew2line,j9andputaruleo bGetween2thetwo. RIn2`narrow'format,j9wejustleaveIsomeUUspace.E288f\if#2w% E289p2\vskip8\p@\hrule\vskip8\p@%E290p2\noindent\hbox{}%E291f\fi%E292f\hskip1em%XNowUUweputtheverbatimcopyofthetextintheotherminipage.E293f\sv@demosmp%E294f\listingindent\z@%E295f\verbinput\sv@demoname%E296f\sv@demoemp%E297f\par%E298f\nointerlineskip%E299f\hb@xt@\hsize{\vrule\@height5\p@\hfil\vrule\@height5\p@}%E300f\hrule%E301]}%E302]\endgroup%E303]\par%E304]\vskip\baselineskip%E305]#1%E306S}XThat'sUUallthereis.qHaveUUfun.E307Sh)5" cmmi9=pack9age#g i1xвMarkUUW*oGoding,8May199616 sogI1Nq cmbx12AppendixꨍIAenTheffGNUGeneralPublicLicenceIThecLfollowingisthetextoftheGNUcHGeneralPublicLicence,funderthetermsof IwhichUUthissoftwareisdistrubuted."UyGNUTGENERALPUBLICLICENSEmV*ersionUU2,June1991}bCopyrightUU(C)1989,1991F*reeSoftwareUUFoundation,Inc.uJ675UUMassAve,Cambridge,MA02139,USAsbEveryoneUUispGermittedtocopyanddistributeverbatimcopies1ofUUthislicensedoGcument,butchangingitisnotallowed.6IA.1k1PreambleuTIThe{licensesformostsoftware{aredesignedtotakeawayyourfreedomtoshareandIchange)@it.cBycontrast,2theGNU)5GeneralPublicLicenseisintendedtoguaranteeIyour freedomtoshareandchangefreesoftware|tomakesurethesoftwareisfreeIfor1allitsusers.eThisGeneralPublicLicenseappliestomostoftheF*reeSoftwareIF*oundation'ssoftwareandtoanyotherprogramwhoseauthorscommittousingIit.A(SomeotherF*reeSoftwareFoundationsoftwareiscoveredbytheGNULibraryIGeneralUUPublicLicenseinstead.)qY*oucanapplyittoyourprograms,toGo.XWhenwespGeakoffreesoftware,qwearereferringtofreedom,qnotprice.=OurIGeneralPublicLicensesaredesignedtomakesurethatyouhavethefreedomtoIdistributeՇcopiesoffreesoftwareՇ(andchargeforthisserviceifyouwish),thatyouIreceive4sourcecoGdeorcangetitifyouwantit,thatyoucanchangethesoftwareorIuse"piecesofitinnewfreeprograms;3"andthatyouknowyoucandothesethings.XT*oprotectyourrights,weneedtomakerestrictionsthatforbidanyonetodenyIyouTtheserightsortoaskyoutosurrendertherights.WrTheserestrictionstranslateItocertainrespGonsibilitiesforyouifyoudistributecopiesofthesoftware,$orifyouImoGdifyUUit.XF*oro"example,uifyoudistributecopiesofsuchaprogram,uwhethergratisorforIaġfee,tyoumustgivetherecipientsalltherightsthatyouhave.Y*oumustmakeIsureTMthatthey*,TtoGo,receiveTMorcangetthesourcecode.qoAndyoumustshowthemItheseUUtermssotheyknowtheirrights.XW*eprotectyourrightswithtwosteps:"(1)copyrightthesoftware,֘and(2)o erIyouthislicensewhichgivesyoulegalpGermissiontocopy*,bdistributeand/ormoGdifyItheUUsoftware.XAlso,bforeachauthor'sprotectionandours,wewanttomakecertainthatIeveryoneunderstandsthatthereisnowarrantyforthisfreesoftware. eIftheIsoftware%ismoGdi edbysomeoneelseandpassedon,wewantitsrecipientstoIknowthatwhattheyhaveisnottheoriginal, %sothatanyproblemsintroGducedbyIothersUUwillnotre ectontheoriginalauthors'reputations.XFinally*,yany>freeprogramisthreatenedconstantlybysoftwarepatents.-W*eIwish(toavoid(thedangerthatredistributorsofafreeprogramwillindividuallyIobtain)patentlicenses,2ine ectmakingtheprogramproprietary*.cETo)preventthis,17soIwe]bhavemadeitclearthatanypatentmustbGelicensedforeveryone'sfreeuseor InotUUlicensedatall.XTheBprecisetermsandconditionsforcopying,}IdistributionandmoGdi cationIfollow.IA.2k1Termsqandconditionsforcopying,lMdistributionandk1mo`di cationuTU80.bThisLicenseappliestoanyprogramorotherworkwhichcontainsanoticebplacedbythecopyrightholdersayingitmaybGedistributedunderthetermsbofthisGeneralPublicLicense.KThe\Program",bGelow,referstoanysuchbprogramorwork,Tanda\workbasedontheProgram"meanseitherthebProgramVoranyderivqativeworkundercopyrightlaw:tthatistosay*,W0aworkbcontainingMtheProgramorapGortionofit,eitherverbatimorwithmoGdi-b cationsrand/ortranslatedintoanotherlanguage.[(Hereinafter,ytranslationbiseincludedwithoutlimitationintheterm\moGdi cation".)EachlicenseeisbaddressedUUas\you".ڍbActivities3otherthancopying,mdistributionandmoGdi cationarenotcoveredbbyA,thisLicense;GtheyareoutsideitsscopGe.kTheactofrunningtheProgrambisgnotrestricted,ͫandtheoutputfromtheProgramiscoveredgonlyifitsbcontentsRyconstituteaworkbasedontheProgram(indepGendentofhavingbbGeenmadebyrunningtheProgram).BWhetherthatistruedependsonwhatbtheUUProgramdoGes.U81.bY*oucmaycopyanddistributeverbatimcopiesoftheProgram'ssourcecoGdebas`youreceiveit,inanymedium,providedthatyouconspicuouslyandappro-bpriately\publishoneachcopyanappropriatecopyrightnoticeanddisclaimerbof\warranty;`ZkeepintactallthenoticesthatrefertothisLicenseandtothebabsencecofanywarranty;andgiveanyotherrecipientsoftheProgramabcopyUUofthisLicensealongwiththeProgram.bY*ouqmaychargeafeeforthephysicalactoftransferringacopy*,I7andyoubmayUUatyouroptiono erwarrantyprotectioninexchangeforafee.U82.bY*oujmaymoGdifyyourcopyorcopiesoftheProgramoranypGortionofit,bthusformingaworkbasedontheProgram,)2andcopyanddistributesuchbmoGdi cations^orworkunderthetermsofSection1above,provided^thatyoubalsoUUmeetalloftheseconditions:f8(a)xY*ou'mustcausethemoGdi ed lestocarryprominentnoticesstatingxthatUUyouchangedthe lesandthedateofanychange.e(b)xY*ou)Tmustcauseanyworkthatyoudistributeorpublish,2!thatinwholexor)inpartcontainsorisderivedfromtheProgramoranypartthereof,xto3bGelicensedasawholeatnochargetoallthirdpartiesunderthextermsUUofthisLicense.f(c)xIfthemoGdi edprogramnormallyreadscommandsinteractivelywhenxrun,you*mustcauseit,whenstartedrunningforsuchinteractiveuseinxthe\Amostordinaryway*,]to\AprintordisplayanannouncementincludingxanAappropriatecopyrightAnoticeandanoticethatthereisnowarrantyx(orifabpatenttlicensewouldnotpGermitroyalty-freeredistributionoftheProgrambyballrthosewhoreceivecopiesdirectlyorindirectlythroughyou,thentheonlybwayqyoucouldsatisfybGothitandthisLicensewouldbGetorefrainentirelybfromUUdistributionoftheProgram.bIfnanypGortionofthissectionisheldinvqalidorunenforceableunderanybparticular;circumstance,@thebalanceofthesectionisintendedtoapplyandbtheUUsectionasawholeisintendedtoapplyinothercircumstances.bIt *isnotthepurpGoseofthissectiontoinduceyoutoinfringeanypatentsborAotherpropGertyrightclaimsortocontestvqalidityofanysuchclaims;Gthisbsection?hasthesolepurpGoseofprotectingtheintegrity?ofthefreesoftwarebdistributionΫsystem,whichisimplementedbypubliclicensepractices.DManybpGeople`havemadegenerouscontributionstothewiderangeofsoftwaredis-btributed)throughthatsysteminrelianceonconsistentapplicationofthat20Ssobsystem;3itisuptotheauthor/donortodecideifheorsheiswillingtodis- btributesoftwarethroughanyothersystemandalicenseecannotimpGosethatbchoice.bThisAsectionisintendedtomakethoroughlyclearwhatisbGelievedtobGeabconsequenceUUoftherestofthisLicense.U88.bIffthedistributionand/oruseoftheProgramisrestrictedincertaincountriesbeitherTbypatentsorbycopyrightedinterfaces,Ttheoriginalcopyrightholderbwho8placestheProgramunderthisLicensemayaddanexplicitgeograph-bicalI1distributionlimitationexcludingthosecountries,KsothatdistributionisbpGermittedonlyinoramongcountriesnotthusexcluded.Insuchcase,thisbLicense/incorpGoratesthelimitationasifwritteninthebodyofthisLicense.U89.bTheF*reeSoftwareFoundationmaypublishrevisedand/ornewversionsofbthe.GeneralPublicLicensefromtimetotime.SuchnewversionswillbGebsimilarginspirittothepresentversion,butmaydi erindetailtoaddressbnewUUproblemsorconcerns.bEachversionisgivenadistinguishingversionnumbGer.IftheProgramspe-bci esWaversionnumbGerofthisLicensewhichappliestoitand\anylaterbversion",youhavetheoptionoffollowingthetermsandconditionseitherofbthatT"versionorofanylaterversionpublishedbytheF*reeSoftwareF*ounda-btion.!If\theProgramdoGesnotspecifyaversionnumbGerofthisLicense,^youbmayUUchoGoseanyversioneverpublishedbytheF*reeSoftwareF*oundation.P810.bIfB[youwishtoincorpGoratepartsoftheProgramintootherfreeprogramsbwhosefordamages,uincludinganygeneral,uspQecial,incidental>orcon-bsequen9tialqdamagesarisingoutoftheuseorinabilitytousethe21sobprogramg(includingbutnotlimitedtolossofdataordatabQeing brenderedinaccurateorlossessustainedb9yyouorthirdpartiesorabfailureoftheProgramtoopQeratewithan9yotherprograms),Tevenbif8suc9hholderorotherpartyhasbQeenadvisedofthepossibilit9yofbsuc9hTdamages.sENDTOFTERMSANDCONDITIONSЇIA.3k1App`endix:How{toApplyTheseTermstoYourNewk1ProgramsuTIIf youdevelopanewprogram,OandyouwantittobGeofthegreatestpossibleusetoItheapublic,"thebGestwayatoachieveathisistomakeitfreesoftwarewhicheveryoneIcanUUredistributeandchangeundertheseterms.XT*o~doso,/attachthefollowingnoticestotheprogram.|AItissafesttoattachIthemktothestartofeachsource letomoste ectivelyconveytheexclusionofIwarranty;VandVMeach leshouldhaveatleastthe\copyright"lineandapGointertoIwhereUUthefullnoticeisfound.I ICopyright(C)19yy s,IThisprogramisfreesoftware;youcanredistributeitand/ormodifyIitunderthetermsoftheGNUGeneralPublicLicenseaspublishedbyItheFreeSoftwareFoundation;eitherversion2oftheLicense,orI(atyouroption)anylaterversion.IThisprogramisdistributedinthehopethatitwillbeuseful,IbutWITHOUTANYWARRANTY;withouteventheimpliedwarrantyofIMERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE. s,SeetheIGNUGeneralPublicLicenseformoredetails.IYoushouldhavereceivedacopyoftheGNUGeneralPublicLicenseIalongwiththisprogram;ifnot,writetotheFreeSoftwareIFoundation,Inc.,675MassAve,Cambridge,MA02139,USA.XAlsoUUaddinformationonhowtocontactyoubyelectronicandpapGermail. XIf theprogramisinteractive,make itoutputashortnoticelikethiswhenitIstartsUUinaninteractiveUUmoGde:IGnomovisionversion69,Copyright(C)19yynameofauthor IGnomovisioncomeswithABSOLUTELYNOWARRANTY;fordetailstype`showw'.IThisisfreesoftware,andyouarewelcometoredistributeitIundercertainconditions;type`showc'fordetails.XThedhypGotheticalcommands`showw'and`showc'shouldshowtheappropriate IpartsoftheGeneralPublicLicense.Ofcourse,5pthecommandsyouusemaybGeIcallednsomethingotherthan`showw'and`showc';theycouldevenbGemouse-clicksIorUUmenuitems{whateversuitsyourprogram.XY*oushouldalsogetyouremployer(ifyouworkasaprogrammer)oryourIschoGol,&Kifany*,tosigna\copyrightdisclaimer"fortheprogram,ifnecessary*.^-HereIisUUasample;alterthenames:22 soIYoyodyne,Inc.,herebydisclaimsallcopyrightinterestintheprogram I`Gnomovision'(whichmakespassesatcompilers)writtenbyJamesHacker.I,1April1989ITyCoon,PresidentofViceXThis4GeneralPublicLicensedoGesnotpermitincorporatingyourprograminto Iproprietary[programs."Ifyourprogramisasubroutinelibrary*,youmayconsiderIitmoreusefultopGermitlinkingproprietaryapplicationswiththelibrary*.3CIfthisIiswhatyouwanttodo,usetheGNULibraryGeneralPublicLicenseinsteadofIthisUULicense.!čIIndexIThe(italicnumbGers(denotethepageswherethecorrespondingentryisdescribed,InumbGers1)underlinedpointtothede nition,8eallothersindicatetheplaceswhereitIisUUused.!ߍ2t : cmbx9SymCbKols RЍI\!3>}%o cmr9.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. fJ91I\%3>}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. 81,T285I\<3>}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L133I\>3>}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L134I\@@v}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. rp139,T141I\@@parP}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. 12,T13I\@@undefinedYҍ}.΍}.}.}.}.}.}.}.}.}.}.}.}.}. 83,T155I\@bsphackl}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}. rp191,T207I\@cspecials}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. yz2 yzfeI\@currenvir}.΍}.}.}.}.}.}.}.}.}.}.}.}.}. rp139,T202I\@esphackl}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}. rp193,T216I\@flushglue}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L169I\@gobble}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L193I\@height}.΍}.}.}.}.}.}.}.}. =246,T254,280,299I\@ifnextcharYҍ}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L231I\@isspaces@0}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}. 90 fe ?Ŝ,T120I\@makeother}.΍}.}.}.}.}.}.}.}.}.}. 117,T192,208I\@matchƈ}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. rp110,T115I\@matchedfalseB}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}. fJ64I\@matchedtrue- }.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. fJ66I\@noligs}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. 16,T186I\@tempaƈ}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. l84{ g88,Ö120,123,127,128,187,188I\@tempbƈ}.΍}.}.}.}.}.}.}.}.}.}.}.H95,T97,99,101I\@tempdima@0}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.j<31{35,T244,259{261,263,265,266I\@tempdimb@0}.΍}.}.}.}.}.}.}.}.}.}. 270{272,T276I\@tempswafalseB}.΍}.}.}.}.}.}.}. 195,T113,119I\@tempswatrue- }.΍}.}.}.}.}.}.}.}.}.}.}. rp120,T126I\@totalleftmarginyꍑ}.΍}.}.}.}.}.}.}.}.}.}.}. fJ14I\@vobeyspaces- }.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. fJ20I\\3>}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. 9,T135I\{3>}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. 7,T133ߍ\}3>}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. 8,T134 \|3>}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L135\~3>}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.H23,T24,90,114QdA\activeƈ}.΍}.}.}.}.}.}.}.}.}.}. Q22,T104,111,112\AtBeginDocument}.΍}.}.}.}.}.}.}.}.}.}.}.}.L152QMB\baselineskip- }.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L304\beginP}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. 40,T244Q{C\check@percentB}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}. fJ83QD\demo }.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L241demoT(en9vironment)}.΍}.}.}.}.}.}.}.}.}.}.}.}.L241Lfe demo*T(en9vironment)*}.΍}.}.}.}.}.}.}.}.}.}.}.}. )5\dov}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. 117,T192,208\dospecials}.΍}.}.}.}.}.}.}.}.}.}. 117,T192,208RApE\endL}. <52,T62,71,141,187,226,242,255\endlist}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L172\endlistinglistz}.΍}.}.}.}.}.}.}.}.}. rp172,T180\endverbwrite- }.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L223\enspace}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L269en9vironments:demo*Ƃ}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. )5demoJ}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. fJ15 fJfe ?ignore}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. fJ13 fJfe ?listing*@*}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. )3listinglist-}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}. fJ12 fJfe ?listingl}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.2,T13Tfe ?verbwrite}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.3,T14Tfe ?23 soMF /I\frenchspacingB}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}. fJ190 HI\hb@xt@ƈ}.΍}.}.}.}.}.}.}.}.}.}.}.}.274,T280,299I\hruleP}.΍}.}.}.}.}.}.}.}.}.}. =246,T254,289,300I\hrulefill@0}.΍}.}.}.}.}.}.}.}.}.}.}.}.}. rp275,T277=II\if@matched}.΍}.}.}.}.}.}.}. Q60,T119,127,146I\if@tempswa}.΍}.}.}.}.}.}.}.}.}.}.}.}.}. rp120,T121I\ignoreƈ}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. rp195,T197IignoreT(en9vironment)b}.΍}.}.}.}.}.}.}.}.}.}.L190Lfe I\ignoreenv@0}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L196I\inputP}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. 44,T286I\interlinepenaltyyꍑ}.΍}.}.}.}.}.}.}.}.}. 12,T25I\item }.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L170I\itemindent}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L164 +LI\labelsepl}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L163I\labelwidth}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L162I\lastskipl}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. fJ76I\lccodeƈ}.΍}.}. d23,T24,90,91,114,133{135I\leavevmode}.΍}.}.}.}.}. #36,T50,56,146,148I\leftmargin}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L160I\leftskipl}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. fJ14I\linewidth@0}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L259I\list }.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L159I\listing}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L173IlistingT(en9vironment)j}.΍}.}.}.}.}.}.}. 2,173fe Ilisting*T(en9vironment)=ҍ}.΍}.}.}.}.}.}.}.}.}. )3I\listingindentB}.΍}.}.}. =151,T153,160,294I\listinglistYҍ}.΍}.}.}.}.}.}.}.}.151fe ,T174,183IlistinglistT(en9vironment)*}.΍}.}.}.}.}.}.L151Lfe I\listingsizeYҍ}.΍}.}. >41,T155,156,175,184I\listparindentB}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.L165I\lowercase@0}.΍}.}.}.}.}. #23,T24,92,114,1363MI\makelabel@0}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L166I\matcher}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. 60 fe ?Ŝ,T110 NI\newcountl}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L228I\newdimenl}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. 27,T151I\newifP}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. fJ60I\newwritel}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L204I\noindentl}.΍}.}.}.}.}.}.}.}.}.}.273,T283,290I\nointerlineskip}.΍}.}.}.}.279,T281,298I\numberƈ}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L229@OI\obeylines@0}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. fJ15R+P \parL}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.t12,T48,50,@57,146,148,251,268,297,303\parfillskipYҍ}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L169\parindent@0}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L153\parsepƈ}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L167\parskip}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L282\penalty}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. fJ12͍Q€R\raggedrightYҍ}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L247\raiseP}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L276\rightmarginYҍ}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L161RʮS\settabwidthYҍ}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}. 21,T27Tfe ?\smallP}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L156\strutP}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L269\sv@demo}.΍}.}.}.}.}.}.}.}.}.}.}.230fe ,T241,242\sv@demo@i@0}.΍}.}.}.}.}.}.}.}.}.}.}.}.}. rp231,T233\sv@demoemp}.΍}.}.}.}.}.}.}.}.}.250,T287,296\sv@demonameYҍ}.΍}.}.}.}.}. =228 =fe ,T235,286,295\sv@demosmp}.΍}.}.}.}.}.}.}.}.}.243,T284,293\sv@dodemo@0}.΍}.}.}.}.}.}.}.}.}.}.}.}.}. rp238,T243Tfe \sv@endwriteYҍ}.΍}.}.}.}.}.}.}.}.}.}.}.}. rp210,T215\sv@ignore@0}.΍}.}.}.}.}.}.}.}.}.}.}.}.}. rp190,T195\sv@listing}.΍}.}.}.}.}.}.}.}.}.176,T178,187\sv@nestcount- }.΍}.}.}.}.}.}.}.228,T229,234\sv@percent}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}. 80 fe ?Ŝ,T118\sv@read}.΍}.}.}.}.}.}. 5,T108Tfe N,T180,193,210\sv@read@i@0}.΍}.}.}.}.}.}.}.}.}.115,T127,130\sv@read@ii}.΍}.}.}.}.}.}.}.}.}.}.}.}.}. rp110,T117\sv@readenv}.΍}.}. 132 fe ,T176,195,221,241\sv@readenv@i- }.΍}.}.}.}.}.}.}.}.}.}.}. rp139,T141\sv@safespc}.΍}.}.}.}.}.}.}.}.}.}.}. , 6,T103,209\sv@startlisting}.΍}.}.}.}.}.}. D11 Dfe ?,T42,179\sv@stripspcYҍ}.΍}.}.}.}.}.}.}.}.}.}. D45,T74Tfe ? UP,T144\sv@verblineYҍ}.΍}.}.}.}.}.}.}.}.}.}.}.}. rp143 rpfe Rj,T180\sv@vtab}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. 23,T29Tfe ?\sv@writel}.΍}.}.}.}.}.}.}. =204 =fe ,T221,226,236\sv@writefile- }.΍}.}.}.}.}.}.}.}.}.}.}. g204,213,A220,223,225,226,235,237\sv@writeline- }.΍}.}.}.}.}.}.}.}.}.}.}. rp210,T212\svtabP}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.27,T28,32{34R T\textttƈ}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. fJ28QAU\unignoreenvYҍ}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L199\unpenalty@0}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}. 75,T251QdV\verbatim@fontB}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}. fJ18\verbinput@0}.΍}.}.}.}.}.}.}.}.}.}.}.}. ?:4,T39Tfe ? UP,T295244psoI\verbwrite@0}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.L219 IverbwriteT(en9vironment) }.΍}.}.}.}.}. 3,219fe \vinput@cr@0}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. 24,T54Tfe ? \vruleP}.΍}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}.}. rp280,T29925i ;2t : cmbx91Nq cmbx12/j cmti9+ow cmss9* cmsy9)5" cmmi9(t}\cmti7'߆T cmtt12&kAH cmssbx10%o cmr9$ߤN cmtt9#kAH cmssbx10"N cmbx12!': cmti10 cmmi10 0ercmmi7K`y cmr10ٓRcmr7u cmex10l