÷ƒ’À;è TeX output 1996.03.07:1114‹ ÿÿÿÿŸ$Ÿæ’QºÁó$ý': cmti10ÏMidnight‘?üMacr‘ÿ}'os:‘E«dolines.tex‘ 4Dóò"V cmbx10Â9ŽŽŽ ƒ3Ú ý˜“Có4pÚãi( cmssdc10ßdolines.texŽ’ÌsÛóKñ`y cmr10«Meta-macros–U>to“separate“argumenš¸ãts“b˜y“newlines“and“b˜yŽ¤ ’ÌsÛempt¸ãy‘U>lines.Ž¡’ÌsÛV‘ÿ*ªersion:›1.0–U>(15“April“1991)“(doGc:˜15“Apr“1991)Ž¡’ÌsÛCop•¸ãyrigh“t‘[ž²×cŽŽŽ‘U>ó !",š cmsy10· ŽŽŽŽ‘ª}«1991–U>Marcel“R.“v‘ÿqÇan“der“GoGotŽŽŽŸH;The–xomacros“in“dolines.tex“are“inš¸ãtended“to“help“y˜ou“write“y˜our“o˜wn“macros,‘Á6rather“than“to“t˜ypGeset“textŽ¤ directly–ÿ*ª.‘^Consequenš¸ãtly“,‘&!it–Tis“assumed“that“y˜ou“ha˜v˜e“some“expGerience“writing“macros;‘-ÿin“other“w˜ords,‘&!assumeŽ¡that–UUthis“whole“section“is“preceded“bš¸ãy“a“\dangerous“bGend"“sym˜bGol.Ž¡‘$Dolines.tex*–jPhelps“to“write“macros“for“whicš¸ãh“line“breaks“inserted“b˜y“the“user“are“impGortan˜t.‘°·WhenŽ¡the–û°de nitions“from“dolines.tex“are“in“e ect,‘%Gtext“consists“of“paragraphs“separated“bš¸ãy“one“or“more“empt˜yŽ¡lines–éŒ(as“usual).‘MÚEacš¸ãh“paragraph“consist“of“one“or“more“lines,‘ÿwhere“a“line“is“terminated“b˜y“a“normal“newlineŽ¡c¸ãharacter,–Á`óßêŸ'EŽ‘ãxX–¾ytreats“newlines“as“if“they“are“spaces).‘­2Note“that,‘Áas“far“as“dolines.texŽ¡is–¥üconcerned,‘ú%a“paragraph“can“only“bGe“terminated“bš¸ãy“an“empt˜y“line,‘ú%not“b˜y›ÿ*ª,–ú%e.g.,“È\par–¥ü«or“È\vskip«.‘c»T˜oŽ¡use–¼Édolines.tex,‘Ö¦yš¸ãou“ha˜v˜e“to“de ne“three“macros,–Ö¦È\beforelines«,“È\everyline#1«,“and‘¼ÉÈ\afterlines«.‘¨#WhenŽ¡dolines.tex–cmdetects“the“bGeginning“of“a“paragraph,›fòÈ\beforelines“«is“called.‘œNext,˜for“ev¸ãery“line,˜È\everylineŽ¡«is–vcalled“with“as“argumenš¸ãt“a“single“macro.‘U}That“macro“has“as“its“expansion“the“line“that“w˜as“read.‘U}(Usually‘ÿ*ª,Ž¡this––is“almost“the“same“as“saš¸ãying“that“È\everyline“«is“called“with“the“line“as“argumen˜t.)‘3üAfter“the“last“lineŽ¡of–1´the“paragraph,›8ÔÈ\afterlines“«is“called.‘eçNo“output“is“generated,˜other“than“what“is“proGduced“bš¸ãy“y˜our“o˜wnŽ¡macros.Ž¡‘$There–î'are“t•¸ãw“o›î'w“a“ys˜of˜using˜dolines.tex.‘<Ÿ'EŽ‘ãxX“resumes“normal“proGcessing.Ž¡È\begindolines–¦«and“the“line“equal“to“È\enddolines“«form“a“group“(as“with“È\filedolines«);‘.àÈ\finishdolinesŽ¡«is–UUcalled“ó!p®0J cmsl10Ìoutside“«this“group.Ž¡‘$Here–[is“hoš¸ãw“w˜e“can“extend“the“p•Go“etry–[en˜vironmen˜t“with“t˜w˜o“con˜trol“sequences“È\beginpoem“«andŽ¡È\endpoem«.‘qÇW‘ÿ*ªe–UUkš¸ãeep“the“abGo˜v˜e“de nitions“of“È\beforelines“«etc.ŽŸ6‰ffÕÁG¦È\def\beginpoem{\medskip–?ü\hrule“\begindolines}Ž¡\def\enddolines{\endpoem}Ž¡\def\finishdolines{\hrule‘?ü\medskip}ŽŸæf‰ffÕÁGŸG׉€ÕÁGŸ ±ö‘øó|{Ycmr8­*Ž‘$T‘ÿJªo–ÕXuse“dolines.tex“yšÃŽou“also“need“Midnigh˜t/loŸ'EŽ‘ãxXb“o“ok):ŽŸ P”‰ffÕÁGŸ 5È\beginpoemŽ©ERoses–?üare“red,Ž¤ µ\quad–?üViolets“are“blue;Ž¡Rhymes–?ücan“be“typesetŽ¡\quad–?üWith“boxes“and“glue.Ž¦Blauw–?üde“viooltjes,Ž¡\quad–?üRood“zijn“de“rozen;Ž¡Een–?ürijm“kan“gezetŽ¡\quad–?üMet“plaksel“en“dozen.Ž¡\endpoemŽŸæf‰ffÕÁGŸ «Note–šthat“wš¸ãe“nev˜er“de ned“È\endpoem«,‘ž+as“it“is“nev˜er“expanded.‘ •In“fact,‘ž+there“is“no“reason“to“terminate“theŽ¤ p•Go“em–¬with“a“conš¸ãtrol“sequence.‘UäIf“w˜e“de ne“È\def\enddolines{***}«,‘gthree“stars“on“a“single“line“will“pla˜y“theŽ¡r^‘úÿÿole–UUof“È\endpoem“«abGo•¸ãv“e.Ž©Eó1*à=» manfntÜŽ‘$óo´‹Ç cmr9¬There–aare“a“few“things“to“bšAÇe“careful“ab˜out.‘First,‘+a“line“mš¾9ust“ha˜v˜e“propAÇerly“nested“óߤN cmtt9É{...}“¬groups.‘(BecauseŽ¤ ‘$a–line“is“read“as“an“argumenš¾9t“delimited“b˜y“a“ó ©±Ê cmsy9¸h¬return¸iŽ‘&‘£¬c˜haracter.)‘¯Y‘ÿ:«ou“should“not“use“this“to“fold“long“lines,Ž¡bšAÇecause–å°that“will“insert“an“explicit“¸h¬return¸iŽ‘&6߬c¾9haracter“with“catco˜de“12“in“the“line.‘ Second,‘ï8spaces“at“the“b˜eginning“ofŽ¡a–Âline“are“skippAÇed,‘Ò»unless“yš¾9ou“c˜hange“the“catcoAÇde“of“`É Ž‘¹–¬'.‘°This“means“that,›Ò»for“instance,˜there“can“bAÇe“spaces“in“fron¾9t“ofŽ¡É\endpoem¬.‘¿(Spaces–òBare“skippšAÇed“at“the“b˜eginning“of“a“line“b˜ecause“at“that“p˜oin¾9t“T‘þuAŸïÿEŽ‘˜ŸX“is“in“\state“N"‘ò:|“see“Chapter“8Ž¡of–&@The“T‘þuAŸïÿEŽ‘˜ŸXb•AÇo“ok.)‘O3Third,›*{when–&@É\everyline“¬is“called,˜the“line“that“is“its“argumenš¾9t“is“already“tok˜enized.‘O3This“meansŽ¡that–¹ha“catcoAÇde“c¾9hange“within“É\everyline“¬cannot“e ect“this“line.‘ýÌF‘ÿ:«urthermore,›ËËwhen“É\beforelines“¬is“called,˜the“ rstŽ¡line–Tis“already“read“and“tok¾9enized.Ž¦ÜŽ‘$É\filedolines–L#¬and“É\begindolines“¬treat“lines“in“prettš¾9y“m˜uc˜h“the“same“w˜a˜y‘ÿ:«.‘ÀÞThere“is“ho˜w˜ev˜er“a“signi can˜tŽ¡‘$di erence–M_in“the“w•¾9a“y›M_commen“ts˜are˜treated.‘ÙÉIf˜a˜line˜has˜a˜commen“t˜(i.e.,–u^it˜ends˜with˜`É%...¬'),“É\begindolinesŽ¡¬will–¿Ümiss“the“¸h¬return¸iŽ‘%ë7¬at“the“end“of“the“line.›ÿóThis“is“normal“for“T‘þuAŸïÿEŽ‘˜ŸX,“it“can“bAÇe“used“to“fold“long“lines.˜Ho•¾9w“ev“er,‘Ðõif‘¿Üy“ouŽ¡are–"4using“É\filedolines¬,‘%mcommen¾9ts“will“bšAÇe“skipp˜ed,‘%mbut“lines“are“not“concatenated:‘61É\filedolines“¬will“not“miss“theŽ¡¸h¬return¸iŽ‘ k¬!›Ì“(This–%¾is“bAÇecause“É\filedolines“¬uses“T‘þuAŸïÿEŽ‘˜ŸX's“É\read“¬primitiv¾9e.)˜A‘%rather“obscure“di erence“is“that“a“line“consist-Ž¡ing–”úof“just“`É\par¬'“is“read“as“an“emptš¾9y“line“b˜y“É\filedolines¬,‘®¦whereas“it“is“read“as“a“non-empt˜y“line“b˜y“É\begindolines¬.Ž¡If–Tyš¾9ou“w˜an˜t“to“use“É\begindolines“¬to“read“from“a“ le,“y˜ou“can“sa˜y“É\expandafter\begindolines\input‘¹–...¬.Ž©E‘$«It–í³is“pGossible“for“È\finishdolines“«to“takš¸ãe“argumen˜ts,‘Êbut“they“ha˜v˜e“to“appGear“on“the“line“follo˜w-Ž¤ ing–SPthe“line“with“the“expansion“of“È\enddolines«.‘k¸SuppGose“wš¸ãe“c˜hange“the“p•Go“em–SPen˜vironmen˜t“b˜y“de ningŽ¡È\finishdolines‘UU«asŽŸæ_Ÿô‘$È\def\finishdolines#1%Ž¡‘3¿÷{\line{\strut–?ý\hss“---“#1\hss\hss}\hrule“\medskip}ŽŽŽ¦«Hence,‘gùÈ\finishdolines–d?«will“prinš¸ãt“the“author's“name“under“the“p•Go“em.‘ž…The–d?argumen˜t“should“bGe“written“onŽ¡the–UUline“follo¸ãwing“È\endpoem«:ŽŸ6IðŸÜ‘$È\beginpoemŽ¡‘3¿÷...Ž¡‘$\endpoemŽ¡‘${A.U.‘?ýThor}ŽŽŽŸÔ\‘$«Sometimes–Iwš¸ãe“w˜an˜t“to“use“dolines.tex“to“read“just“one“paragraph“b˜y“making“È\enddolines“«equal“toŽ¡an–•Nemptš¸ãy“line.‘1²F‘ÿ*ªor“instance,‘¥La“macro“È\address“«whic˜h“reads“an“address“terminated“b˜y“an“empt˜y“line.‘1²TheŽ¡problem–ðªwith“de ning“È\def\enddolines{}“«is“that“if“there“is“an“emptš¸ãy“line“bGefore“the“address“(or“ev˜en“if“theŽ¡rest–HSof“the“line“after“È\address“«is“empt¸ãy),‘Jíno“lines“will“bGe“read“at“all.‘mqT‘ÿ*ªo“ensure“that“at“least“one“paragraphŽ¡is–UUread,“w¸ãe“use“È\beforelines“«to“de ne“È\enddolines«:ŽŸÓŸô‘$È\def\beforelines{\normalbeforelines\def\enddolines{}}Ž¡‘$\let\enddolines=\relaxŽŽŽŽŒ‹ ‹Ÿ$Ÿæ’UëÏMidnight‘“çMacr‘ÿ}'os:‘™–dolines.tex‘ 4DÂ11ŽŽŽ ƒ3Ú ý†Ì&«Here,‘~È\normalbeforelines–y«denotes“whatevš¸ãer“m˜ust“bšGe“done“at“the“b˜eginning“of“the“address.‘  4InitiallyŽ¤ È\enddolines–>A«is“equal“to“È\relax«,›x|but“as“soGon“as“the“ rst“non-empt¸ãy“line“is“found,˜È\enddolines“«is“rede-Ž¡ ned–as“an“emptš¸ãy“line.‘[]F‘ÿ*ªollo˜wing“that,‘‰an“empt˜y“line“causes“calls“of“È\afterlines“«and“È\finishdolines«.‘[](AŽ¡w•¸ãa“y–UUto“include“an“emptš¸ãy“line“in“the“address“is“to“write“a“tie“(`È~«')“on“a“line“of“its“o˜wn.)ŽŸÜŽ‘$¬As–))a“more“complicated“example,‘nwš¾9e“design“a“simple“v˜erbatim“en˜vironmen˜t.‘WðThe“v˜erbatim“en˜vironmen˜tŽ¤ ‘$treats–~"horizonš¾9tal“tabs“as“spaces,‘˜Uand“considers“m˜ultiple“empt˜y“lines“equal“to“a“single“empt˜y“line.‘VÚW‘ÿ:«e“ rstŽ¡write–½Þmacros“É\setupverbatim“¬and“É\finishverbatim¬.‘ÿIThe“ rst“sets“up“the“cš¾9haracter“coAÇdes“for“v˜erbatim“prin˜ting,‘Ï\theŽ¡second–Tresets“those“c¾9haracter“coAÇdes.ŽŸ ff‰ffÕÁG© €È\def\setupverbatimŽ¤ ‘¿ô{\medskip–?ü\hrule“\bgroupŽ¡‘ÿð\def\do##1{\catcode`##1=12‘?ü}\dospecialsŽ¡‘ÿð\obeyspaces‘?ü\ttŽ¡‘¿ô}Ž¤\def\finishverbatim{\egroup–?ü\hrule“\medskip}Ž¡{\obeyspaces\global\let Ž–?ý=\ Ž“}ŽŸæf‰ffÕÁGŸ ñÇ«Grouping–Ûis“used“to“kš¸ãeep“the“catcoGde“c˜hanges“loGcal.‘_ôPlain“T‘þU>Ÿ'EŽ‘ãxX's“È\dospecials“«macro“applies“the“macro“È\doŽ¤ «to– €all“spGecial“cš¸ãharacters“(`È\«',–ª`È$«',“etc.),“whic˜h,“in– €this“case,‘ªgiv˜es“them“all“catcoGde“12“(\other").‘X€But“w˜e“don'tŽ¡w•¸ãan“t–catcošGde“12“for“spaces,‘Q}b˜ecause“the“È\tt“«fonš¸ãt“has“a“visible“space“c˜haracter“`È Ž‘?ý«'.‘ÎóTherefore,‘Q}spaces“areŽ¡made–UUactivš¸ãe“with“È\obeyspaces«,“and“in“the“last“line“w˜e“mak˜e“an“activ˜e“space“equal“to“È\ ŽŽ‘ ÕO«.Ž¡‘$T‘ÿ*ªo–Tcstart“setting“vš¸ãerbatim“text,‘T“w˜e“use“È\beginverbatim«;‘T´È\readverbatim“«is“used“to“t˜ypGeset“a“wholeŽ¡ le–UUin“vš¸ãerbatim“moGde.‘qÇThe“macros“for“t˜ypGesetting“lines“and“paragraphs“are“v˜ery“straigh˜tforw˜ard.ŽŸX-‰ffÕÁG¦È\def\beginverbatim{\setupverbatim\begindolines}Ž¡\let\finishdolines=\finishverbatimŽ¤\def\readverbatim#1{\setupverbatim\filedolines{#1}\finishverbatim}Ž¡\def\beforelines{\smallskip}Ž¤ \def\everyline#1{\hbox{\strut‘?ü#1}}Ž¡\def\afterlines{\smallskip}ŽŸæf‰ffÕÁGŸ ñÇ‘$«Finally‘ÿ*ª,‘·hw•¸ãe›£Ëha“v“e˜to˜de ne˜È\enddolines«.‘])W‘ÿ*ªe˜w“an“t˜to˜matc“h˜È\beginverbatim˜«with˜È\endverbatim«,Ž¡so–UUwš¸ãe“w˜ould“lik˜e“to“doŽ¤‘$È\def\enddolines{\endverbatim}ŽŽŽ¡«The–e»problem“is“that“this“makš¸ães“È\enddolines“«expand“to“the“Ìcon˜trol“sequence“È\endverbatim«.‘¢øBut“while“w˜eŽ¤ are–"in“vš¸ãerbatim“moGde,‘,Tno“con˜trol“sequences“are“recognized,‘,TbšGecause“`È\«'“is“not“an“escap˜e“cš¸ãharacter.‘`±What“w˜eŽ¡really›˜dw•¸ãan“t˜is˜to˜mak“e˜the˜expansion˜of˜È\enddolines˜«equal˜to˜the˜Ìstring˜«\·n«endv“erbatim".‘:ôThis˜is˜done˜b“yŽ¡tempšGorarily–UUmaking“`È\«'“a“normal“c¸ãharacter“and“`È/«'“an“escap˜e“c¸ãharacter:ŽŸX-‰ffÕÁG¦È{\catcode`\/=0‘?ü/catcode`/\=12Ž¡‘?ü/gdef/enddolines{\endverbatim}Ž¡}ŽŸæf‰ffÕÁGŸ ñÇ«This–‚completes“the“vš¸ãerbatim“en˜vironmen˜t.‘‚ONote“that“È\endverbatim“«is“only“recognized“if“it“appGears“on“aŽ¡line–|‡bš¸ãy“its“o˜wn“and“is“not“preceded“b˜y“spaces.‘ç]If“y˜ou“are“not“afraid“of“confusion,‘†Ty˜ou“can“c˜hange“the“nameŽ¡È\finishverbatim–UU«to“È\endverbatim«.ŽŽŒø$Eƒ’À;è©3ÚÕÁGó4pÚãi( cmssdc10ó1*à=» manfntó$ý': cmti10ó!p®0J cmsl10óßCÊscmtt8óߤN cmtt9óßê