÷ƒ’À;è TeX output 1997.03.06:1138‹ÿÿÿÿ ª ýs o ýÞ‘Z5óÂÖN G® cmbx12ºCustomizing–záBibliographic“St‘ÿuÂyle“FilesŽŸ’Ð<¼óX«Q cmr12»P•¬ratric“k–ê¨W.“DalyŽŽŽŽŽŸ’–uThis–ê¨papšSŽer“describ˜es“program“ó߆µT cmtt12ÄmakebstŽŸ’±Øº»v¬rersion–ê¨3.0“from“1995/03/15ŽŸ>_ý‘IóÂÖN ff cmbx12Æ1Ž‘aLËInŒÌtros3ductionŽŸ5S‘IóKñ`y cmr10²This–¾7T‘þU>Ÿ'EŽ‘ãxX“program“is“meanš¸ãt“to“bGe“used“together“with“generic“bibliographic“st˜yleŽ¤ ‘I les–¢ito“proGduce“customized“óßêŸ'EŽ‘ãxX.‘YThe“generic,Ž¡‘Ior–ç×master“ le,‘ wcan“bšGe“pro˜cessed“b¸ãy‘ dóm#½R cmss10Édo˜cstrip“²with“selected“options“to“ac•¸ãhiev“e‘ç×theŽ¡‘Idesired–Ábibliographic“stš¸ãyle.‘ñ T‘ÿ*ªo“this“end,‘Š\a“ÉdoGcstrip“²batc˜h“job“should“bGe“made“up.Ž¡‘IHo•¸ãw“ev“er,‘Í©bšGecause–«¾of“the“large“n•¸ãum“b˜er–«¾of“options“aš¸ãv‘ÿqÇailable,‘Í©an“in˜teractiv˜e,‘Í©dialogueŽ¡‘Isystem–UUwš¸ãould“bGe“more“con˜v˜enien˜t.Ž©N8‘IThis›´program,–ÌËÇmakebst²,“accomplishes˜this˜goal.‘öãIt˜de nes˜macros˜to˜establishŽ¡‘Isucš¸ãh–ea“ÉdoGcstrip“²batc˜h“job“ le,‘üand“to“organize“a“men˜u“of“options.‘["The“men˜u“infor-Ž¡‘Imation–óAis“con•¸ãtained,›ßho“w“ev“er,˜in–óAthe“master“ le“itself,˜since“the“t•¸ãw“o–óAare“in¸ãtimatelyŽ¡‘Irelated.‘PHTh•¸ãus›ðØdi eren“t˜master˜ les˜with˜totally˜di eren“t˜option˜structures˜ma“y˜bGeŽ¡‘IaccommoGdated.Ž¦‘IThe–µbatc¸ãh“job“could“in“fact“bGe“made“up“with“an“editor“without“calling‘±BÇmakebst²,Ž¡‘Ibut–UUthis“program“doGes“simplify“the“task.Ž¦‘IInciden¸ãtally‘ÿ*ª,‘xthe–=ÞÉdošGcstrip“²run“can“only“b˜e“carried“out“bš¸ãy“means“of“a“batc˜h“job.Ž¡‘IRunning‘)ÛÉdoGcstrip›N²in•¸ãteractiv“ely˜inserts˜default˜pre-˜and˜pGostam“bles˜in˜the˜text,‘theŽ¡‘Ilatter–UUincluding“an“Ç\endinput“²command“that“ÈBib²T‘þU>Ÿ'EŽ‘ãxX“will“not“understand.ŽŸ%_ü‘IÆ2Ž‘aLËThe–ffMaster“FileŽŸ5S‘I²The–îmaster“ le“is“a“ÈBib²T‘þU>Ÿ'EŽ‘ãxX“bibliographic“stš¸ãyle“ le“con˜taining“alternativ˜e“coGdingŽ¡‘IdepšGending–©on“Édo˜cstrip“²options.‘nwThe“options“are“selected“when“Édo˜cstrip“²is“run,Ž¡‘Ieither›UUin•¸ãteractiv“ely˜or˜through˜a˜batc“h˜job.Ž¦‘ISuppGose–(íthat“one“of“the“options“is“called“Çxyz².‘búThen“the“folloš¸ãwing“alternativ˜es“areŽ¡‘IpGossible:Ž¤N8‘bÇ%‘•Róý': cmti10Êone–“çline“of“c–ÿ}'o“dingŽ¡‘Iincludes‘'v²the–UUsingle“line“of“coGding;Ž¡‘bÇ%‘•RÊone–“çline“of“c–ÿ}'o“dingŽŽŸ’ø²1ŽŽŒ‹* ª ýs‘Ió#p®0J cmsl10ÎCUSTOMIZING‘UUBIBLIOGRAPHIES’¹#y²2ŽŽ o ý´‘IÊexcludes‘'v²the–UUsingle“line;Ž©|¬‘bÇ%<*xyz>Ž¤ ‘bÊsever›ÿ}'al–“çlines“of“c˜o˜dingŽ¡‘bÇ%ŽŸ|­‘IÊincludes‘'v²all–UUthe“brac•¸ãk“eted‘UUlines;Ž¦‘bÇ%<*!xyz>Ž¡‘bÊsever›ÿ}'al–“çlines“of“c˜o˜dingŽ¡‘bÇ%ŽŸ|­‘IÊexcludes‘'v²all–UUthe“brac•¸ãk“eted‘UUlines.ŽŸN8‘IOptions–šwmaš¸ãy“bGe“logically“com˜bined:‘ü the“sym˜bGol“Ç|“²is“a“logical“Éo˜r²,‘«¿Ç&“²a“logical“Éand²,Ž¡‘IÇ!–UU²a“logical“Énot²;“parenš¸ãtheses“Ç(“²and“Ç)“²ma˜y“bGe“used“to“group“options.ŽŸ R‘Ió ÂÖN  cmbx12Ë2.1Ž‘gÀUsing–€with“ó!ñkAH cmssbx10Ìdo]ÞcstripŽŸÃŒ‘I²In–³@order“to“generate“a“true“ÈBib²T‘þU>Ÿ'EŽ‘ãxX“st¸ãyle“ le“with“selected“options“from“the“masterŽ¡‘I le,‘Zit–%ëis“necessary“to“run“a“ÉdošGcstrip“²batc¸ãh“job.‘ãˆSupp˜ose“that“the“master“ le“isŽ¡‘Inamed–¼ÕÇmaster.mbs²,›Öµthe“resulting‘àbÈBib²T‘þU>Ÿ'EŽ‘ãxX“st¸ãyle“ le“is“to“bGe“Çsilly.bst²,˜and“theŽ¡‘Ibatcš¸ãh–ñÇjob“ le“itself“is“called“Çsilly.dbj².‘GT‘ÿ*ªo“proGduce“this“with“options,–äsa˜y‘ÿ*ª,“ÇxyzŽ¡‘I²and–UUÇabc²,“the“batcš¸ãh“job“w˜ould“loGok“something“lik˜e:ŽŸ|¬‘f¹˜ó"ߤN cmtt9Í\def\batchfile{silly.dbj}Ž¤ ‘f¹˜\input‘¹–docstripŽ©‘f¹˜\preambleŽ¡‘f¹˜This–¹–is“for“Journal“of“Silly“ResultsŽ¡‘f¹˜\endpreambleŽ¦‘f¹˜\postambleŽ¡‘f¹˜End–¹–of“customized“bst“fileŽ¡‘f¹˜\endpostambleŽ¦‘f¹˜\keepsilentŽ¦‘f¹˜\generateFile{silly.bst}{f}{\from{master.mbs}{xyz,abc}}Ž¡Ÿ|­‘I²A‘âÕpreamš¸ãble–âùis“not“necessary‘ÿ*ª,‘balthough“it“is“advisable“to“include“some“statemen˜tŽ¤ ‘IabšGout–­Íthe“application“of“the“bibliographic“st•¸ãyle.‘{.A‘­¶p˜ostam“ble‘­ÍÊis‘î²vital,‘ÃêotherwiseŽ¡‘Ithe– default“will“add“Ç\endinput“²at“the“end“of“the“ le,‘Isomething“that“ÈBib²T‘þU>Ÿ'EŽ‘ãxX“willŽ¡‘Inot–öÛunderstand.‘RIThe“Ç\keepsilent“²is“optional“and“just“suppresses“ÉdoGcstrip“²outputŽ¡‘Iduring‘UUproGcessing.ŽŸ R‘IË2.2Ž‘gÀThe–€Men u“FileŽŸÃŒ‘I²This›¢gprogram,–µ¬Çmakebst²,“simpli es˜the˜creation˜of˜the˜batc¸ãh˜job˜ le.‘XþT‘ÿ*ªo˜do˜that,Ž¡‘Iit–4needs“information“on“the“aš¸ãv‘ÿqÇailable“options.‘f°This“information“m˜ust“bGe“stored“inŽŽŽŒ‹ v ª ýs‘IÎCUSTOMIZING‘UUBIBLIOGRAPHIES’¹#y²3ŽŽ o ý´‘Ia–uspGecial“format,›Œ}in“the“master“ le“itself.‘ö'Alternativ¸ãely‘ÿ*ª,˜that“information“ma¸ãy“bGeŽ¤ ‘Iextracted–qSand“stored“in“a“ le“with“the“same“roGot“name“but“extension“Ç.opt².‘ÅÂÎThisŽ¡‘Ifeature–ßäis“not“recommended“since“it“can“lead“to“inconsistencies!‘Ý›²The“format“of“theŽ¡‘Imenš¸ãu–UUinformation“is“illustrated“bGelo˜w“in“Section“4.Ž©N8‘IIn–T°the“master“ le,‘Ô†this“information“m¸ãust“bšGe“enclosed“within“Édo˜cstrip“²optionsŽ¡‘IÇ%<*options>›؈².–ªª.“.‘ƒ2Ç%˜²and˜Êmust‘Ë`²bGe˜ended˜b¸ãy˜an˜Ç\endoptions˜²command.Ž¡‘IIt–µ’maš¸ãy“also“include“an˜y“n˜um˜bGer“of“commen˜ts.‘<†The“rest“of“the“ le“m˜ust“bGe“enclosedŽ¡‘Iwithin–Þ˜Ç%<*!options>“².–ªª.“.‘‰BÇ%–Þ˜²to“exclude“it“when“the“men¸ãu“informationŽ¡‘Iis–UUextracted“with“ÉdoGcstrip².Ž¦‘IA‘dÔsample–emen¸ãu“in“the“master“ le“to“select“one“or“none“of“options“Çxyz“Êor‘x¨ÇzyxŽ¡‘I²wš¸ãould–UUloGok“th˜us:ŽŸÀ‡‘f¹˜Í%<*options>Ž¤ ‘f¹˜\mes{Select–¹–one“of“these}Ž¡‘f¹˜\optdef{f}{xyz}{Option–¹–forword}{to“do“forward“stuff}Ž¡‘f¹˜\optdef{r}{zyx}{Option–¹–reverse}{to“do“reverse“stuff}Ž¡‘f¹˜\optdef{*}{}{None–¹–of“the“above}{}Ž¡‘f¹˜\getansŽ¡‘f¹˜\endoptionsŽ¡‘f¹˜%Ž¡‘f¹˜%<*!options>Ž¡‘f¹˜.–¹–.“.“.“.“.Ž¡‘f¹˜%Ž¡ŸÀ†‘I²An–UUexplanation“of“these“commands“is“to“bGe“found“in“Section“4.Ž¦‘IThe–߶menš¸ãu“information“ma˜y“bGe“extracted“from“the“master“ le“b˜y“means“of‘¦ÓÉdoGcstripŽ¤ ‘I²and–¦"stored“in“a“ le“with“extension“Ç.opt².‘d-If“this“ le“is“presen¸ãt,‘ºUÇmakebst“²o ers“toŽ¡‘Iread–7Sit“instead“of“the“master“ le,›=Talthough“this“is“Ênot‘*+²recommended,˜as“explainedŽ¡‘IabGo•¸ãv“e.ŽŸ%A{‘IÆ3Ž‘aLËRunning‘Ÿÿó$߆µTff cmtt12ÏmakebstŽŸ5S‘I²This–ñ*is“actually“a“T‘þU>Ÿ'EŽ›ãxX“program,‘although“it“will“also“run“under“LŸýó5‘üffóÙ“ Rcmr7±AŽŽ‘͉²T‘þU>Ÿ'EŽ˜X.‘EEIn“thatŽ¡‘Isense,–UUit“is“likš¸ãe“ÉdoGcstrip“²itself.‘qÇTh˜us“run“the“program“with“(something“lik˜e)ŽŸÀ‡‘bÇtex‘UUmakebstŽŸÀ†‘I²The–nÔprogram“ rst“asks“for“the“name“of“the“master“ le.‘$òThis“is“the“ le“con¸ãtaining“allŽ¡‘IpšGossible–Z²bibliographic“st¸ãyle“commands,‘\ with“Édo˜cstrip“²options“for“selectiv¸ãe“output.Ž¡‘IA–UUdefault“name“is“o ered,“as“w¸ãell“as“a“default“extension“(Ç.mbs²).Ž¦‘INext,›Nthe–]Ìprogram“asks“for“the“name“of“the“output“ le,˜the“Ç.bst“² le.‘DThe“extensionŽ¡‘Ihere–¦vis“optional,‘º¾defaulting“to“Ç.bst².‘e+This“name“also“determines“the“name“of“theŽ¡‘Ibatcš¸ãh–ØÂjob“ le,‘ùwhic˜h“will“ha˜v˜e“the“same“roGot“name“with“the“extension“Ç.dbj²,‘ùforŽ¡‘Ithe‘UUó%ÅUé cmssi10ÐdoGcstrip–“çÊb‘ÿ}'atch“job².Ž¦‘IThe–Þwactual“inš¸ãterrogation“then“bGegins.‘ ,All“the“information“for“the“men˜us“is“con-Ž¡‘Itained–Wýin“the“master“bibliographic“stš¸ãyle“ le.‘yÀThe“reason“for“this“is“that“the“men˜uŽ¡‘Iinformation–~¥mš¸ãust“conform“to“the“a˜v‘ÿqÇailable“options“in“the“master“ le,‘ˆùso“it“mak˜esŽŽŽŒ‹y ª ýs‘IÎCUSTOMIZING‘UUBIBLIOGRAPHIES’¹#y²4ŽŽ o ý´‘Isense–.that“one“ le“should“con¸ãtain“bGoth.‘ûÊThe“master“ le“is“only“read“up“to“theŽ¤ ‘IÇ\endoptions‘UU²command.Ž©N8‘IFinally‘ÿ*ª,›0µthe–'Œbatc¸ãh“job“ le“is“closed,˜and“the“user“is“ask¸ãed“if“it“should“bGe“run.‘b„If“heŽ¡‘IdoGes–Žûnot“takš¸ãe“up“this“o er,‘eor“if“he“later“edits“the“batc˜h“job,‘ethen“it“ma˜y“bGe“runŽ¡‘Imanš¸ãually–UUwith“(something“lik˜e)ŽŸ^¯‘bÇtex‘UUÊbstname‘À[Ç.dbjŽŸ%,k‘IÆ4Ž‘aLËThe–ffMenŒÌu“InformationŽŸ5S‘I²The–¹set“of“questions“in“the“inš¸ãterrogation“m˜ust“ t“the“a˜v‘ÿqÇailable“options“in“theŽ¡‘Imaster–J le.‘ï¦F‘ÿ*ªor“this“reason,‘‰Çthe“menš¸ãu“information“is“con˜tained“in“the“master“ leŽ¡‘Iitself.‘çÐThe–Òprogram“Çmakebst“²supplies“the“macros“that“are“used“in“the“men¸ãu“ leŽ¡‘Ito–UUsimplify“writing“and“proGcessing“men¸ãu“information.Ž¦‘IT‘ÿ*ªo–“prinš¸ãt“a“message“to“the“terminal,‘¢~use“Ç\mes{ó !",š cmsy10¸hÊtext‘òظiŽ‘œÇ}².‘*öA‘’ÿnew“line“ma˜y“bGe“forcedŽ‘+¨Í\mesŽŽŽŽ¡‘I²within–UUÊtext‘H-²b¸ãy“means“of“Ç^^J².Ž¦‘IT‘ÿ*ªo–4in¸ãterrogate“the“user“for“a“respGonse,›use“Ç\ask{\Êc‘ÿ}'om‘ÄcÇ}{¸hÊtext‘òظiŽ‘œÇ}²,˜whic¸ãh“writes“ÊtextŽ‘+¨Í\askŽŽŽŽ¡‘I²to–UUthe“terminal,“and“puts“the“respGonse“in“the“command“Ç\Êc‘ÿ}'om².Ž¦‘IAlmost–Ñ‹all“inš¸ãterrogations“will“consist“of“a“list“of“m˜utually“exclusiv˜e“options,‘ð™oneŽ‘ìæÍ\optdefŽŽŽŽ¡‘I²of–¡–whicš¸ãh“is“the“default.‘V‹F‘ÿ*ªor“eac˜h“item“in“the“list,‘´§one“m˜ust“spGecify“the“k˜eybGoardŽ¡‘IrespšGonse–Ñ”that“is“to“select“it,‘ð¤the“actual“name“of“the“Édo˜cstrip“²option“that“realizesŽ¡‘Iit,–UUand“t•¸ãw“o–UUpieces“of“explanatory“text.‘qÇF‘ÿ*ªor“example,ŽŸ^¯‘bÇ\optdef{a}{abr}{Abbreviations}{of–?ýsuch“words}ŽŸ^®‘I²means–@that“Çabr“²is“the“true“ÉdoGcstrip“²option“name“that“is“selected“bš¸ãy“t˜yping‘BÍÇa².‘_ÀTheŽ¡‘It•¸ãw“o–€ˆexplanatory“texts“are“written“to“the“terminal“immediately“as“part“of“the“men¸ãu,Ž¡‘Ibut–ùbonly“the“ rst“text“is“ec¸ãhoGed“when“the“selection“is“made“(for“con rmation)“andŽ¡‘Iis–UUalso“written“to“the“batcš¸ãh“job“ le“(as“commen˜t).Ž¦‘IThe–UUdefault“option“mš¸ãust“ha˜v˜e“the“respGonse“Ç*².Ž¦‘IA‘Ùºmen¸ãu–ÙÚis“written“to“the“terminal,‘òŒ rst“with“a“Ç\mes“²command“to“state“the“sub‘Ž8jectŽ¡‘Imatter,›i=and–þÜthen“with“a“sequence“of“Ç\optdef“²statemen•¸ãts,˜eac“h–þÜof“whic¸ãh“alsoŽ¡‘Iwrites–;0the“texts“to“the“terminal.‘iThe“respšGonse“is“then“read“in“and“pro˜cessed“withŽ‘ìæÍ\getansŽŽŽŽ¡‘IÇ\getans²,‘Wwhic¸ãh–ðwrites“the“reply“to“the“command“Ç\ans“²and“writes“the“appropriateŽ¡‘IÉdošGcstrip–¿ý²option“to“the“batc¸ãh“job“ le.‘±ÀIf“the“resp˜onse“do˜es“not“corresp˜ond“to“an¸ãyŽ¡‘Iof–:?those“in“the“men¸ãu“list,›?ªit“is“set“to“Ç*²;‘CFif“there“is“no“Ç*“²in“the“list,˜then“Ç\ans“²is“setŽ¡‘Ito– óthe“last“enš¸ãtry‘ÿ*ª.‘ The“command“Ç\ans“²is“still“a˜v‘ÿqÇailable“afterw˜ards“for“an˜y“extraŽ¡‘Itesting–UUthat“migh¸ãt“bGe“needed.Ž¦‘IAn–UUexample“menš¸ãu“appGears“as“follo˜ws:ŽŸ^¯‘f¹˜Í\mes{^^JJOURNAL–¹–VOLUME“NUMBER:}Ž¤ ‘f¹˜\optdef{*}{}{Volume–¹–plain}{as“vol(num)}Ž¡‘f¹˜\optdef{i}{vol-it}{Volume‘¹–italic}%Ž¡’‡Ì²{as–¹–{\string\em\space“vol}(num)}Ž¡‘f¹˜\optdef{b}{vol-bf}{Volume‘¹–bold}%Ž¡’ƒ{as–¹–{\string\bf\space“vol}(num)}Ž¡‘f¹˜\optdef{d}{vol-2bf}{Volume–¹–and“number“bold}%ŽŽŽŒ‹¸ ª ýs‘IÎCUSTOMIZING‘UUBIBLIOGRAPHIES’¹#y²5ŽŽ o ý´’ƒÍ{as–¹–{\string\bf\space“vol(num)}}Ž¤ ‘f¹˜\getansŽ¡Ÿ%_ü‘IÆ5Ž‘aLËMore–ffComplex“BatcŒÌh“JobsŽŸ5S‘I²V‘ÿ*ªersion–·³3.0“of‘~ÐÇmakebst“²alloš¸ãws“the“master“ le“to“de ne“more“sophisticated“batc˜hŽ¤ ‘Ijobs,‘¾sucš¸ãh–as“additional“master“ les“with“their“o˜wn“options.‘VThis“is“made“pGossibleŽ¡‘IbGecause–ÄEthe“options“are“not“written“directly“in“the“Ç\generateFile“²command,Ž¡‘Ias–äin“earlier“vš¸ãersions,‘°but“to“a“command“Ç\MBopts².‘ÕThe“batc˜h“ le“then“con˜tainsŽ¡‘Isomething‘UUlik¸ãe:Ž©N8‘bÇ\def\MBopts{\from{¸hÊsour–ÿ}'c“e.ext‘òظiŽ‘3P¢Ç}{%Ž¡‘lÊlines–“çfr‘ÿ}'om“menu“sessionŽ¡‘g?ÿÇ}}Ž¡‘b\generateFile{¸hÊoutput.ext‘òظiŽ‘3ô3Ç}{f}{\MBopts}Ž¦‘I²Normally–ôthe“Êlines–M£fr‘ÿ}'om“menu“session‘ÍW²conš¸ãtain–ôjust“the“ÉdoGcstrip“²options.‘XRHo˜w˜ev˜er,Ž¡‘Ithe–ÊÝmaster“ le“could“add“other“things“to“the“de nition“of“Ç\MBopts²,‘è>ev¸ãen“closingŽ¡‘Iit–…and“starting“a“new“de nition.‘ÐIt“just“has“to“mak¸ãe“sure“that“the“braces“areŽ¡‘Ibalanced.ŽŸN8‘IA‘ý4n•¸ãum“bGer–ý`a“macros“are“pro•¸ãvided,›'bwhic“h–ý`are“used“b¸ãy‘ íÇmakebst“²itself,˜to“simplifyŽ‘À$Í\MBaskfileŽŽŽŽ¡‘I²making–UUcomplex“menš¸ãus.‘qÇT‘ÿ*ªo“ask“for“the“name“of“a“ le“in˜teractiv˜ely‘ÿ*ª,Ž¦‘bÇ\MBaskfile{¸hÊPr‘ÿ}'ompting‘“çtext‘òظiŽ‘I¯ãÇ}(¸hÊr–ÿ}'o“ot.ext‘òظiŽ‘)ÃÇ){¸hÊio‘¡˜¸iŽ‘–6Ç}\ÊfnameŽ¦‘I²maš¸ãy–AbGe“giv˜en,›Q¼where“Êr–ÿ}'o“ot.ext‘²is–Athe“default“name“of“the“ le,˜Êio‘ÀÙ²is“Çi“²(for“input)Ž¡‘Iif–ý“the“ le“mš¸ãust“already“exist,‘'¢and“Ç\Êfname‘½î²is“the“command“that“receiv˜es“the“ leŽ¡‘Iname.‘qÇThe–UUrošGot“name“will“b˜e“in“Ç\froot²,“the“extension“in“Ç\fext².ŽŸN8‘IT‘ÿ*ªext–UUis“written“to“the“batc¸ãh“job“ le“withŽ‘/Ó>Í\wrŽŽŽŽ¦‘bÇ\wr{¸hÊtext‘òظiŽ‘œÇ}Ž¦‘I²Anš¸ãy–Jicommands“in“Êtext‘=A²that“are“to“bGe“written“literally“m˜ust“bGe“preceded“b˜yŽ¡‘IÇ\string².Ž©N8‘ISince–S4anš¸ãy“braces“in“Êtext‘F ²m˜ust“bšGe“balanced,‘’¬something“sp˜ecial“m¸ãust“b˜e“done“toŽ‘yºÍ\MBswitchŽŽŽŽ¡‘I²pšGermit– Øthem“to“b˜e“prinš¸ãted“as“normal“c˜haracters.‘PThe“command“Ç\MBswitch“²ac-Ž¡‘Icomplishes–ûAthis;‘N7the“paren¸ãtheses“Ç(›?ý)“²replace“Ç{˜}“²as“the“delimiters.‘cŒThis“shouldŽ¡‘Ialw•¸ãa“ys–UUbGe“giv¸ãen“within“Ç\begingroup“².–ªª.“.“Ç\endgroup².Ž¦‘IAs–¬an“example,‘(ÎsuppšGose“the“master“ le“con¸ãtains“only“half“the“co˜ding“for“the“Ç.bstŽ¡‘I² le,‘u˜the–;ñother“half“bGeing“in“one“of“sevš¸ãeral“other“master“ les.‘%›W‘ÿ*ªe“m˜ust“promptŽ¡‘Ifor–}‹this“second“ le,›‡˜include“it“for“its“options,˜and“makš¸ãe“sure“that“Ç\MBopts“²kno˜wsŽ¡‘IabšGout–UUit.‘qÇThe“follo¸ãwing“co˜de“in“the“master“ le“will“do“this.ŽŸN8‘bÇ\MBaskfile{Name–?ýof“second“master“file}(aa.mbs)i\xfileŽ¡‘b\begingroup\MBswitchŽ¡‘b\wr(\string\MBopta})ŽŽŽŒ‹-U ª ýs‘IÎCUSTOMIZING‘UUBIBLIOGRAPHIES’¹#y²6ŽŽ o ý´‘bÇ\wr(\string\from{\xfile}{\string\MBoptb}})Ž¤ ‘b\wr(\string\def\string\MBopta{\pc)Ž¡‘b\endgroupŽ¡‘bÊr–ÿ}'e“gular–“çmenu“information“for“ rst“ leŽ¡‘bÇ\begingroup\MBswitchŽ¡‘b\wr(}\string\def\string\MBoptb{\pc)Ž¡‘b\endgroupŽ¡‘b\input\xfile\relaxŽ¡‘b\begingroup\MBswitchŽ¡‘b\wr({\pc)Ž¡‘b\endgroupŽ¡‘b\endoptionsŽ¤N8‘I²The–UUresulting“Ç.dbj“² le“con¸ãtainsŽ¡‘bÇ\def\MBopts{\from{first.mbs}{%Ž¤ ‘b\MBopta}Ž¡‘b\from{second.mbs}{\MBoptb}}Ž¡‘b\def\MBopta{%Ž¡‘bÊ rst–“çset“of“optionsŽ¡‘bÇ}\def\MBoptb{%Ž¡‘bÊse–ÿ}'c“ond–“çset“of“optionsŽ¡‘bÇ{%Ž¡‘lü}}Ž¡‘b\generateFile{sample.bst}{f}{\MBopts}ŽŸ%_ü‘IÆ6Ž‘aLËCos3dingŽŸ5S‘I²This–ÖEsection“presen¸ãts“and“explains“the“actual“coGding“of“the“macros.‘ô˜It“is“nestedŽ¡‘IbšGet•¸ãw“een–³‰Ç%<*program>“²and“Ç%²,‘Óåwhic¸ãh“are“indicators“to“Édo˜cstrip“²that“thisŽ¡‘Ico•Gding›UUb“elongs˜to˜the˜program˜ le.ŽŸ Ln‘IË6.1Ž‘gÀPreliminariesŽŸÃŒ‘I²The–ÿz rst“thing“is“to“opGen“up“i/o“devices“for“comm¸ãunicating“with“the“terminal“andŽ¡‘I les.‘å¿(Some–&¨of“this“has“bšGeen“b˜orro•¸ãw“ed–&¨from“Édo˜cstrip².)‘å¿The“terminal“input“andŽ¡‘Ioutput–UUare“Ç\ttyin“²and“Ç\ttyout“²respGectiv¸ãely‘ÿ*ª,“while“the“output“ le“if“Ç\outfile².Ž©N8‘Lüs±1Ž‘Sª®ó(©±Ê cmsy9Óhó)ÒoÇw cmss9Ôp¾9rogramŽ‘$´ÓiŽ¤ ‘Lüs±2Ž‘Sª®Í\newwrite\outfileŽ¡‘Lüs±3Ž‘Sª®Í\newread\ttyinŽ¡‘Lüs±4Ž‘Sª®Í\newread\infileŽ¡‘Lüs±5Ž‘Sª®Í\newwrite\ttyoutŽŸN8‘,`\mesŽŽŸ ‘1¨\wrŽŽŽŽŽ‘I²The›µ™t•¸ãw“o˜commands˜for˜outputting˜text˜are˜de ned:‘2OÇ\mes˜²writes˜to˜the˜terminalŽŸ ‘Iwhile–UUÇ\wr“²writes“to“the“output“ le.Ž¦‘Lüs±6Ž‘Sª®Í\def\mes{\immediate\write\ttyout}Ž¡‘Lüs±7Ž‘Sª®Í\def\wr#1{\immediate\write\outfile{#1}}ŽŽŽŒ‹8Ù ª ýs‘IÎCUSTOMIZING‘UUBIBLIOGRAPHIES’¹#y²7ŽŽ o ý´‘IT‘ÿ*ªo–UUassist“inserting“new“lines“in“the“middle“of“text,“de ne“a“newline“sym¸ãbGol.Ž©N8‘Lüs±8Ž‘Sª®Í\newlinechar=`\^^JŽŸN8‘À$\MBswitchŽŽŽ‘I²There–©Sare“times“when“w¸ãe“need“to“write“a“line“of“coGde“to“the“output“ le“withŽ¤ ‘Iun¸ãbalanced–äábraces“in“that“line.› j(They“are“balanced“in“another“line.)˜Suc¸ãh“linesŽ¡‘Iare–mwritten“with“Ç\wr{...}².‘¹If“the“braces“in“the“argumen¸ãt“are“not“balanced,‘sthenŽ¡‘Ithere–$ will“bšGe“trouble.‘aZT‘ÿ*ªo“get“around“this,‘-èc¸ãhange“the“category“co˜des“of“the“bracesŽ¡‘Ito–UU`other'“and“let“parenš¸ãtheses“tak˜e“their“place.Ž¦‘Lüs±9Ž‘Sª®Í\def\MBswitch{\catcode`\{=12‘¹–\catcode`\}=12Ž¤ ‘I±10Ž’•ÐâÍ\catcode`\(=1‘¹–\catcode`\)=2\relax}ŽŸN8‘I²The›UUw•¸ãa“y˜to˜emplo“y˜this˜is˜asŽŸN8‘f¹˜Í\begingroup\MBswitchŽ¡‘f¹˜\wr(..{..)Ž¡‘f¹˜\endgroupŽ¡ŸN8‘,`\askŽŽŽ‘I²T‘ÿ*ªo–ÌEget“a“respGonse“from“the“terminal,›ç®use“Ç\ask².‘DHo•¸ãw“ev“er,˜there–ÌEare“some“complica-Ž¤ ‘Itions–2here.‘^fIf“only“carriage-return“is“pressed,‘&Óthen“the“respGonse“command“is“equalŽ¡‘Ito–áÇ\par²;‘*]for“anš¸ãything“else,‘!Åa“t˜ypGed-in“text“includes“a“trailing“blank.‘\KW‘ÿ*ªe“m˜ust“testŽ¡‘Ifor–UUÇ\par“²and“remo•¸ãv“e–UUthe“blank“if“it“is“there.Ž¦‘I±11Ž‘Sª®Í\def\defpar{\par}Ž¤ ‘I±12Ž‘Sª®Í\def\remblk#1‘¹–@@{#1}Ž¡‘I±13Ž‘Sª®Í\def\ask#1#2{\mes{#2}\read\ttyin–¹–to“#1\ifx#1\defpar\def#1{}\elseŽ¡‘I±14Ž‘a×pÍ\edef#1{\expandafter\remblk#1@@}\fi}ŽŸN8‘yº\getrootŽŽŸ ‘3P\getextŽŽŽŽŽ‘I²T‘ÿ*ªo–0:parse“the“name“of“a“ le“in¸ãto“roGot“and“extension,‘7¦use“commands“Ç\getroot“²andŽŸ ‘IÇ\getext².Ž¦‘I±15Ž‘Sª®Í\def\groot#1.#2@@{#1}Ž¡‘I±16Ž‘Sª®Í\def\getroot#1{\expandafter\groot#1.@@}Ž¡‘I±17Ž‘Sª®Í\def\gext#1.#2.#3@@{#2}Ž¡‘I±18Ž‘Sª®Í\def\getext#1{\expandafter\gext#1..@@}ŽŸN8‘Ž\MBaskfileŽŽŽ‘I²Sevš¸ãeral–'2times“it“is“necessary“to“ask“for“a“ le“name“in˜teractiv˜ely‘ÿ*ª,‘0land“ma˜ybGe“test“ifŽ¤ ‘Iit–áexists.‘_KThis“mighš¸ãt“ev˜en“bGe“done“in“the“Ç.mbs“² le,‘(øso“pro˜vide“a“macro“to“simplifyŽ¡‘Ithis–UUtask.‘qÇThe“syn¸ãtax“isŽ¤N8‘bÇ\MBaskfile{¸hÊPr‘ÿ}'ompting‘“çtext‘òظiŽ‘I¯ãÇ}(¸hÊr–ÿ}'o“ot.ext‘òظiŽ‘)ÃÇ){¸hÊio‘¡˜¸iŽ‘–6Ç}\ÊfnameŽ¡‘I²where›Þ¶Êr–ÿ}'o“ot.ext‘ÑŽ²is˜the˜default˜name˜for˜the˜ le˜sough¸ãt,‘öoand˜Ç\Êfname‘Ÿ²is˜the˜commandŽ¤ ‘Ithat–Ãconš¸ãtains“the“ nal“ le“name.‘$The“commands“Ç\froot“²and“Ç\fext“²will“con˜tainŽ¡‘Ithe–6 roGot“and“extensions“of“the“ le“name,‘<^if“they“are“needed“for“further“parsing.‘g`IfŽ¡‘IÊio‘¡˜²=Çi–®Î²(for“input),›Å,then“the“resulting“ le“m¸ãust“already“exist,˜else“the“macro“loGopsŽ¡‘Iagain.‘¤ÉIf›fVÊr–ÿ}'o“ot‘Y.²is˜blank,–j–then˜only˜the˜extension˜is˜giv¸ãen˜as˜default,“but˜a˜ le˜roGotŽ¡‘Iname–UUmš¸ãust“bGe“en˜tered.Ž¦‘I±19Ž‘Sª®Í\def\MBaskfile#1(#2.#3)#4#5{%ŽŸ ‘I±20Ž‘Sª®Í\loopŽŽŽŒ‹@H ª ýs‘IÎCUSTOMIZING‘UUBIBLIOGRAPHIES’¹#y²8ŽŽ o ý´‘I±21Ž‘]ÚÍ\def\ans{#2.#3}Ž¤ ‘I±22Ž‘Sª®Í\if!#2!Ž¡‘I±23Ž‘XdDÍ\if!#3!\ask{#5}{#1}\fiŽ¡‘I±24Ž‘]ÚÍ\ask{#5}{#1–¹–(default“extension=#3)}\elseŽ¡‘I±25Ž‘]ÚÍ\ask{#5}{#1‘¹–(default=\ans)}Ž¡‘I±26Ž‘Sª®Í\fiŽ¡‘I±27Ž‘]ÚÍ\ifx#5\empty‘¹–\edef#5{\ans}\fiŽ¡‘I±28Ž‘]ÚÍ\edef\froot{\getroot#5}Ž¡‘I±29Ž‘]ÚÍ\edef\fext{\getext#5}Ž¡‘I±30Ž‘]ÚÍ\ifx\fext\empty‘¹–\def\fext{#3}\fiŽ¡‘I±31Ž‘]ÚÍ\edef#5{\froot.\fext}Ž¡‘I±32Ž‘Sª®Í\if#4iŽ¡‘I±33Ž‘]ÚÍ\def\temp{Cannot–¹–find“file“`#5'}Ž¡‘I±34Ž‘]ÚÍ\openin\infile#5\relaxŽ¡‘I±35Ž‘]ÚÍ\ifeof\infile–¹–\def\ans{}\fi“\closein\infileŽ¡‘I±36Ž‘Sª®Í\elseŽ¡‘I±37Ž‘XdDÍ\def\temp{There–¹–is“no“default}Ž¡‘I±38Ž‘XdDÍ\ifx\froot\empty‘¹–\def\ans{}\fiŽ¡‘I±39Ž‘Sª®Í\fiŽ¡‘I±40Ž‘]ÚÍ\ifx\ans\empty–¹–\mes{***“\temp}Ž¡‘I±41Ž‘Sª®Í\repeat}Ž©ÕÔ‘1¨\pcŽŽŸ ‘'¦|\pcpcŽŽŽŽ¤ ¡‘'¦|\spspŽŽŽŽŽ‘I²No¸ãw–à”for“some“spGecial“commands“to“simplify“outputting“%“signs“and“double“spacesŽŸ ‘Ito–UUthe“output“ le.ŽŸ{l‘I±42Ž‘Sª®Í{\catcode`\%=12Ž¡‘I±43Ž‘XdDÍ\gdef\pc{%}Ž¡‘I±44Ž‘XdDÍ\gdef\pcpc{%%‘¹–}Ž¡‘I±45Ž‘Sª®Í}Ž¡‘I±46Ž‘Sª®Í\def\spsp{\space\space}Ž¦‘,`\NowŽŽŽ‘I²In–ærorder“to“date-and-time-stamp“the“resulting“batcš¸ãh“job“ le,‘ ¹w˜e“need“macros“toŽ© ‘IproGduce–UUthe“curren¸ãt“date“and“time.‘qÇ(In“T‘þU>Ÿ'EŽ‘ãxX“there“is“no“Ç\today“²command.)ŽŸ{l‘I±47Ž‘Sª®Í\newcount\hoursŽ¡‘I±48Ž‘Sª®Í\newcount\minutesŽ¡‘I±49Ž‘Sª®Í\def\SetTime{\hours=\timeŽ¡‘I±50Ž‘yw^Í\global\divide\hours–¹–by“60Ž¡‘I±51Ž‘yw^Í\minutes=\hoursŽ¡‘I±52Ž‘yw^Í\multiply\minutes–¹–by“60Ž¡‘I±53Ž‘yw^Í\advance\minutes‘¹–by-\timeŽ¡‘I±54Ž‘yw^Í\global\multiply\minutes–¹–by-1“}Ž¡‘I±55Ž‘Sª®Í\SetTimeŽ¡‘I±56Ž‘Sª®Í\def\now{\number\hours:\ifnum\minutes<10‘¹–0\fi\number\minutes}Ž¡‘I±57Ž‘Sª®Í\def\today{\number\year/\ifnum\month<10‘¹–0\fi\number\monthŽ¡‘I±58Ž‘a×pÍ/\ifnum\day<10‘¹–0\fi\number\day}Ž¡‘I±59Ž‘Sª®Í\def\Now{\today\space–¹–at“\now}ŽŸ–ë‘IË6.2Ž‘gÀMen u‘€MacrosŽŸÃŒ‘3PÍ\optdefŽŽŽ‘I²F‘ÿ*ªor–Leacš¸ãh“men˜u,›NPa“general“text“is“written“with“Ç\mes²,˜follo•¸ãw“ed›Lb“y˜a˜list˜of˜a“v‘ÿqÇailableŽ¦‘Ioptions.‘qÇThe–UUinformation“that“will“bGe“needed“isŽŸ‘U8ä1.ŽŽŽ‘bthe–UUrespGonse“letter“to“select“the“option,ŽŽŽŒ‹ L ª ýs‘IÎCUSTOMIZING‘UUBIBLIOGRAPHIES’¹#y²9ŽŽ o ý´‘U8ä2.ŽŽŽ‘bthe–Ýactual“ÉdoGcstrip“²option“name,‘õas“de ned“in“the“master“bibliographic“st¸ãyleŽ¤ ‘b le,Ž©‘U8ä3.ŽŽŽ‘ba–'2piece“of“text“that“is“prinš¸ãted“in“the“men˜u“list,‘0lto“bGe“ec˜hoGed“in“con rmationŽ¡‘bof–UUthe“cš¸ãhoice,“and“also“to“bGe“written“to“batc˜h“job“ le“as“a“commen˜t,Ž¦‘U8ä4.ŽŽŽ‘ba–º second“piece“of“text“that“is“only“written“to“the“men¸ãu,‘Sto“enhance“theŽ¡‘bexplanation.ŽŸN8‘IThe–+*true“option“name“and“the“ rst“piece“of“text“are“stored“as“commands“pre xedŽ¡‘Ibš¸ãy–JÇ\opt@“²and“Ç\txt@“²respGectiv˜ely‘ÿ*ª,‘‡>follo˜w˜ed“b˜y“the“respGonse“letter.‘O÷Eac˜h“optionŽ¡‘IrespGonse–õTletter“is“also“stored“in“a“list“Ç\optlist“²whicš¸ãh“is“initialized“to“con˜tain“onlyŽ¡‘Ia–áquestion“mark.‘ÖThe“commands“Ç\nxtopt“²and“Ç\rstopt“²are“used“to“extract“theŽ¡‘Inext–UUand“remaining“options“from“the“list.Ž©N8‘I±60Ž‘Sª®Í\def\optdef#1#2#3#4{\expandafter\def\csname‘¹–opt@#1\endcsname{#2}%Ž¤ ‘I±61Ž‘]ÚÍ\expandafter\def\csname‘¹–txt@#1\endcsname{#3}%Ž¡‘I±62Ž‘]ÚÍ\edef\optlist{#1,\optlist}%Ž¡‘I±63Ž‘]ÚÍ\mes{(#1)–¹–#3\space“#4}}Ž¡‘I±64ŽŽ¡‘I65Ž‘Sª®Í\def\optlist{?,}Ž¡‘I±66ŽŽ¡‘I67Ž‘Sª®Í\def\nxtopt#1,#2@@{#1}‘¹–\def\rstopt#1,#2@@{#2}Ž¡‘I±68ŽŽŸN8‘3PÍ\getansŽŽŽ‘I²The–½Éuser“selection“is“read“in“with“Ç\getans²,‘æin¸ãto“the“command“Ç\ans².‘«#It“thenŽ¤ ‘IprošGcesses–›Wthe“resp˜onse“bš¸ãy“ rst“c˜hec˜king“if“there“is“an“option“correspGonding“to“it;Ž¡‘Iif–3inot,‘:2the“respšGonse“Ç\ans“²is“set“to“the“default“Ç*².‘fxIf“no“star“resp˜onse“exists,‘:2then“itŽ¡‘Itakš¸ães–fthe“ rst“en˜try“in“Ç\optlist“²(the“last“one“en˜tered)“as“the“default“respGonse.‘WwItŽ¡‘Ithen–”calls“Ç\wropt“²to“write“the“necessary‘æ!ÉdoGcstrip“²option“and“explanatory“commen¸ãtŽ¡‘Ito–¬¤the“batc¸ãh“job“ le.‘9ŒFinally‘ÿ*ª,‘Îait“uses“the“option“list“Ç\optlist“²to“clear“all“the“Ç\opt@Ž¡‘I²commands.‘¢úThis–e»last“step“is“necessary“to“a•¸ãv“oid–e»con icts“with“previous“men¸ãus:Ž¡‘Iwithout–nøit,‘uaa“respGonse“that“is“not“in“the“currenš¸ãt“list“migh˜t“ho˜w˜ev˜er“exist“from“anŽ¡‘Iearlier‘UUmen¸ãu.Ž¦‘I±69Ž‘Sª®Í\newif\ifswŽ¤ ‘I±70Ž‘Sª®Í\def\getans{\ask{\ans}{\spsp‘¹–Select:}Ž¡‘I±71Ž‘]ÚÍ\expandafter\ifx\csname–¹–opt@\ans\endcsname\relax“\def\ans{*}\fiŽ¡‘I±72Ž‘]ÚÍ\expandafter\ifx\csname‘¹–opt@\ans\endcsname\relaxŽ¡‘I±73Ž‘kJœÍ\edef\ans{\expandafter\nxtopt\optlist@@}\fiŽ¡‘I±74Ž‘]ÚÍ\swtrue‘¹–\loopŽ¡‘I±75Ž‘f‘Í\edef\temp{\expandafter\nxtopt\optlist@@}%Ž¡‘I±76Ž‘f‘Í\edef\optlist{\expandafter\rstopt\optlist@@}%Ž¡‘I±77Ž‘f‘Í\if\temp?\swfalse\elseŽ¡‘I±78Ž‘p2Í\if\temp\ans\wropt\ansŽ¡‘I±79Ž‘Sª®ÓhÔoptlistŽ‘ ­Ói‘/?æó-ßêŸ'EŽ‘ãxX,“the˜Ç\end˜²command˜causes˜problems,“bGecause˜it˜hasŽ¡‘IbGeen–UUrede ned;“the“command“Ç\@@end“²con¸ãtains“the“original“Ç\end².Ž¦‘E±176Ž‘Sª®Í\def\ofile{\oroot.dbj}Ž¤ ‘E±177Ž‘Sª®Í\ask{\yn}{Shall–¹–I“now“run“this“batch“job?“(NO)}Ž¡‘E±178Ž‘Sª®Í\def\temp{\relax}Ž¡‘E±179Ž‘Sª®Í\if!\yn!\else\if\yn–¹–n\else\if\yn“N\elseŽ¡‘E±180Ž‘Sª®Í\def\temp{\input\ofile}\fi\fi\fiŽ¡‘E±181Ž‘Sª®Í{\catcode`\@=11‘¹–\ifx\@@end\undefined\elseŽ¡‘E±182Ž‘]ÚÍ\global\let\end=\@@end\fi}Ž¡‘E±183Ž‘Sª®Í\tempŽ¡‘E±184Ž‘Sª®Í\endŽ¡‘E±185Ž‘Sª®ÓhÒ=Ôp¾9rogramŽ‘$´ÓiŽŽŽŒø†Àƒ’À;説 ó-ßê