; TeX output 1997.11.26:2326y?DtGGcmr17The7tGGcmss17examclass!", cmsy10rXQ cmr12JasonAlexander2K cmsy8y37 1997/11/24(>U!Jt : cmbx9Abstract xo cmr9Atnewuclass le,ow cmss9exam,foruL5Aacmr6A TuAEXc.25" cmmi9"+_isude ned.;Itautomatessev9eral kfeaturesusedindesigningtests:'g(1)itpro9videsforthebindingofquestionskandansw9ersinanintuitiveandnaturalway;(2)if(1)isdone,!examwill,atkthe1user'srequest,automaticallygenerateansw9erkeys;=(3)multipleversionskofthesametestareautomaticallygenerated,withtheorderingofquestionskwithineac9hsectionrandomlypAermutedsoastominimizecheating;and(4)ken9vironmentsۣarepro9videdtoassistinconstructingthemostcommontypAeskoftestquestion:q{true/false,{m9ultiple-choice, ll-in-the-blank,shortanswerkandTessa9yquestion. ߍR"Nff cmbx121jLDescriptionRK`y cmr10T*eachingMattheuniversitylevelisarewardingandenjoyableprofession,butit RseemsalmostuniversallyagreedupGonthattheexaminationprocessisadistastefulRone.Notmerelyforthestudents,9mindyou,9butalsoforthefacultyaswellR(althoughVitisdiculttoconvincethestudentbGodyVofthisfact).9Personally*,VIR nd~the#': cmti10writingofexamsenjoyable,but~theadministeringandgradingofsameRfalls1 ratherfarbGehind.eThe$m#R cmss10examclasscannothelpwiththelatteroptions,8MbutitRcanUUmakeyourlifeconsiderablyeasierwiththeformerincertainsettings.aInialargeuniversityisettings,2professorscommonlyusemultipleversionsoftheRsameP>test.bTheargumentbGeingthatdi erentversionsofthesametestreduceRcheatinginsofarascopyingo ofone'sneighbGorbecomesmoredicult.fAThisRisR onewayR theproGcessofwritingexamsbecomestediousanddistasteful:k1onceRfaced withacompletedtest,randomlyrearrangingthequestionstomakecheatingRharder.:Human&bGeingsevolved&torecognizepatternsreadilyandthusdonotReasily/generaterandomnumbGers/(orpseudo-randomnumbers,f9for/thatmatter).RConsequently*,mostwP\randomlyrearranged"testsconsistofpatterns:everyotherRquestion,.questionslistedinreverseorder,etc./Butthisproblemisminor.TheRr}'eal=>problem4isthatrearrangingtheorderofquestionsisbGoring.Whycan'taRcomputerUUdoitforme?qW*ell,withtheexamclass,thatcannowhappGen.R1qffr @ -:q% cmsy6L|{Ycmr8ThisX lehasvÎersionnumb'ExX2 b> cmmi10"+TdocumentstartingwithV%ߤN cmtt9\documentclass{exam} V\begin{document}RIfOyouwanttocreateanexamin12pttypGe,use&'ExX2". زconsidersanoption:LanythingRthat:canbGeincluded(inbrackets):afterthe\documentclasscommand.MSincetheRexamclassisbuiltupGontheordinaryL5ffA͉TU>'ExX2",earticleclass,mostofthestandardRL5ffA͉TU>'ExX]optionsworkasdescribGedinLamport's(p0J cmsl10TheL4ff)8)cmsl8AxTU>'ExXCompanion.Most,`)butRnotjall|inordertogettwoGcolumnjoutput,fthemulticolpackqagemustbGeinstalled.RInKaddition,thereare veoptionsnotfoundinthearticleclass:unokey,onekey,Rnoform,mcbold,andmcunderline.TheoptionnokeysuppressinggenerationRofYanswerkeys,onekeyonlycreatesananswerkeyforthe rstexam,andtheRoptionpnoformsuppressestheformlabGelthatisordinarilyaddedtoeachexam.RThe optionmcboldidenti esthecorrectanswerinmultiplechoicequestionsbyRbGoldfaceratherthanaboxaroundthecorrectletter.TheoptionmcunderlineRidenti es_thecorrectanswerinmultiplechoicequestionsbyunderlining..NotethatRthemmcboldandmcunderlineoptionsarecumulative:SrequestingmbGothoptionswillRgiveyoubGoldfaceunderlinedanswers.RIfneitheroneisspGeci ed, examwilldefaultRtoUUbGoxingtheletterofthecorrectanswer.qThisisshownintheexamplesbGelow.aOnetechnicalnote:(Inthecasethemcunderlineoptionisgiven,QthecorrectRanswermayspanseverallines.DTheordinaryL5ffA͉TU>'ExX2"*rcommand\underlinedoGesRnotprovideforthispGossibility*.Consequently,L IincorpGoratedtheulempackqage,RwrittenVbyDonaldArseneau,W0forunderlining.v'ExX2",doesn't7likeitwhenyoutrytoaskforthe27thletterofRthe#6alphabGet.aIfyour}'eallyneed#6morethan27copiesofanexam,-'ExXto 6\ConstantBlanksRtypGesetEtheunderlinein ll-in-the-blankenvironmentsusinglinesofaconstantRlength,UUregardlessofthelengthofthecorrectword.a\ProportionalBlankshasonemandatoryargument(arealnumbGerr).,Ittells9\ProportionalBlanksRTU>'ExX totypGesettheunderlinein ll-in-the-blankenvironmentsusinglinesthatareRexactlyrȲtimesthelengthofthecorrectanswerwhenthecorrectansweristypGesetRbyUUTU>'ExX.qThedefaultsettingis\ProportionalBlanks{1}.aIf1youincludebGoth\ConstantBlanksand\ProportionalBlanksintheRpreamble,myouRwillnotgetanerror. xInsteadtheexamwillbGetypesetusingRwhicheverUUswitchwaslastset.a\StudentInfoLineSpacing*requiresalengthasitsargument.ThisvqalueisS\StudentInfoLineSpacingRused?todeterminetheamountofadditionalspacingbGetweenlinesinthestudentRdataӖbGoxappearingintheupperright-handcorneroftheexam.FThedefaultvqalueRisUU6pt.3ay?R*"V cmbx102.1.1u#SummaryTofOptionsRL͉ffq) ͟fffdͻOptionNamem*9ffsRequiredPrackXage͟ffڟQFVunctionp[ffffq)fd͟$fffdͲOrdinaryl;L5ffA͉TU>'ExXarti-cleoptions(exceptfortwocolumn)m*9$ffnone) $ffڟQOrdinaryUUfunctionp[$ffffq)͟ fffdtwocolumnm*9 ffmMmulticol"{ ffڟQgenerateUUatwoUUcolumnexamp[ ffffq)͟ fffdnokeym*9 ffڲnone)  ffڟQsuppressUUallanswerkeysp[ ffffq)͟fffdonekeym*9ffڲnone) ffڟQgeneratePBonlythe rstanswerkey*, ڟQsuppressingUUallothersp[ffffq)͟'0fffdnoformm*90ffڲnone) '0ffڟQsuppressthelabGelsidentifying ڟQtheformoftheexam(onlyworksڟQforthedefaultsettings,mseetheڟQdescriptionUUofrexamtop)p['0ff(ffq)͟$fffdmcboldm*9$ffڲnone) $ffڟQidentifyYthecorrectanswerin ڟQmultiple-choice%environmentsbyڟQusingUUbGoldfacep[$ffffq)͟$fffdmcunderlinem*9$ffڲnone) $ffڟQidentifyYthecorrectanswerin ڟQmultiple-choice%environmentsbyڟQunderliningUUitp[$ffffq) R2.1.2u#SummaryTofSwitc9hes?MRЀffL X ͟fffdͻSwitcrhName#ׄff>FVunction|ffffL Xfd͟ fffd\NumberOfVersions#ׄ ff>spGecifyUUnumberUUofexamstomake ԟ ffffL X͟ fffd\class#ׄ ff>ClassUUdata(E.g.,\Philosophy29") ffffL X͟ fffd\examname#ׄ ff>ExamUUname(E.g.,\MidtermExam")͟ ffffL X͟ fffd\ConstantBlanks#ׄ ff>SeeUUabGove~Ɵ ffffL X͟ fffd\ProportionalBlanks#ׄ ff>SeeUUabGove~Ɵ ffffL X͟ fffd\StudentInfoLineSpacing#ׄ ff>SetUUspacingindatabGoxB0g ffffL XB9񍍑R2.2pThe+kAH cmssbx10 llinenvironmentuTRThis_Eenvironmentisprimarilyintendedfor ll-in-the-blankquestions(sadtosay*,*|fillin RsuchUUquestionsareaskedinacollegeenvironment).qThegeneralsyntaxisV\begin{fillin} `,\begin{question}iHowmuch\blank{wood}coulda\blank{woodchuck}chuckifawoodchuckcouldi\blank{chuck}wood?`,\end{question}`,\begin{question}nYShesells\blank{seashells}bythe\blank{seashore}.`,\end{question}V\end{fillin}4-%y?RWhenUUtypGeset,thequestionswillbeprintedintheexamas:^81.kHowmuchfe=5couldafe/4chuckifawoGodchuckcouldfeqɎqwoGod?ƍ^82.kSheUUsellsfe$X+bythefe$@'X.RbutUUintheanswerkeyas:^81.kHowmuchwoGodfe=5couldawoGodchuckfe/4chuckifawoGodchuckcouldchuckfeqɎqwoGod?^82.kSheUUsellsseashellsfe$X+bytheseashorefe$@'X.ڍR2.3pThesho"rtanswerenvironmentuTRTheemostlikelytypGeofquestionaskedonuniversityexamsistheshort-answershortanswer Rquestion.Whether>itbGemathematics,xphysics,or>philosophy(mythreeareasofRinterest,|nintnoparticularorder),suchquestionsallowtheinstructortoassesstheRstudent'sbreadthofknowledge.[+Theshortanswer5environmentdoGesnotformatitsRquestionskinanyparticularwayotherthanenumeratingthem,butitdoGesallowtheRbinding6Yofanswerstoquestions.gsAlthoughincludingananswerisnotmandatory*,RIb ndbithelpfuljusttonoteexactlywhatitwasthatIhadinmindatthetimeIRaskedefthequestion.AndyourT*A'swillprobablylikeit,iktoGo.ThegeneralsyntaxRis:V\begin{shortanswer} `,\begin{question}iStateHobbes'definitionofthestateofnatureandtheroleitplaysinihissocialphilosophy.i\begin{answer}sThestateofnatureis\ldotsi\end{answer}`,\end{question}`,\begin{question}iStateseveralexamplesthatseemtoillustratethatMill'stheoryofiUtilitarianismcannotbefollowedinpractice,andexplainwhy.iAfterwards,stateMill'sresponsetotheproblemsyouraised.i\begin{answer}sOftentimesitappearsweneedtoactonourmoralinstinctswithoutstakingtimetodeliberate(asinthecaseofsavingadrowningchild).sAccordingtoMill,though,itseemsthatbeforeeachmoralactionwesoughttodeliberateinordertobesurethattheactionwetakeissuchsastomaximizetheoverallgeneralutility\ldotsi\end{answer}`,\end{question}V\end{shortanswer}RNoteOthattheanswersenvironmentOappGearsinsideNthequestionenvironment.oThis RisUUimpGortantandbadthingswillhappenifyoudon'tdoit.aInUUtheexam,thiswillbGetypesetas:5:y?^81.kStateHobbGes'de nitionofthestateofnatureandtheroleitplaysinhis ksoGcialUUphilosophy*.^82.kStateEseveralexamplesthatseemtoillustratethatMill'stheoryofUtilitar-kianismcannotbGefollowedinpractice,andexplainwhy*./.Afterwards,statekMill'sUUrespGonsetotheproblemsyouraised.(&RInUUtheanswerkey*,thiswillbGetypGesetas:(%^81.kStateHobbGes'de nitionofthestateofnatureandtheroleitplaysinhisksoGcialUUphilosophy*.kAnsw9er:ΈTheUUstateofnatureis...^82.kStateEseveralexamplesthatseemtoillustratethatMill'stheoryofUtilitar-kianismcannotbGefollowedinpractice,andexplainwhy*./.Afterwards,statekMill'sUUrespGonsetotheproblemsyouraised.kAnsw9er:ΈOftenLtimesitappGearsweneedtoactonourmoralinstinctswith-outtakingtimetodelibGerate(asinthecaseofsavingadrowningchild).AccordingќtoMill,though,itќseemsthatbGeforeeachmoralactionweoughtwtodelibGerateinordertobesurethattheactionwetakeissuchasUUtomaximizetheoverallUUgeneralutility*...ϿR2.4pThetruefalseenvironmentuTRIThavearunningdebatewithafriendoverwhethertrue/falsequestionshaveanyytruefalseRmeritbasatoGolformeasuringcomprehension.9Regardlessofthat,/IbdecidedtoRincludeUUthemanyway*.qTheUUgeneralsyntaxis:(&V\begin{truefalse} `,\begin{question}i\answer{False}Ladenswallowsflyfasterthanunladenswallows,iespeciallyiftheycarrycoconuts.`,\end{question}`,\begin{question}i\answer{True}QuantummechanicswasfirststatedusingtheimathematicaltoolsofHilbertspacesbyJohnvon~Neumann.`,\end{question}V\end{truefalse}(&RAgain,noticeFthattheanswerӲenvironmentFappGearswithinthequestionenviron- Rment.qTheUUabGovewillbGetypGesetintheexamas:UG#fe3v"Laden)swallows yfasterthanunladenswallows,espGeciallyiftheycarryv"coGconuts. UG#fe3v"Quantum[mechanicswas rststatedusingthemathematicaltoGolsofv"HilbGertUUspacesbyJohnvonNeumann.RItUUwillbGetypesetintheanswerkeyas:6Fy?Y F*alseY fetv"Laden)swallows yfasterthanunladenswallows,espGeciallyiftheycarry v"coGconuts.ZT*rueZfeN:v"Quantum[mechanicswas rststatedusingthemathematicaltoGolsofv"HilbGertUUspacesbyJohnvonNeumann.6R2.5pThemultiplechoiceEnvironmentuTRItisn'tdiculttoformatmultiplechoicequestionsinordinaryL5ffA͉TU>'ExX2"0l(justmultiplechoiceRusexmultiplynestedenumerate's),butthisenvironmenthastwonicerfeatures:itRprovidesforasimplerentryscheme,% andintheanswerkeyitbGoxesthecorrectRanswer.qTheUUsyntaxis:V\begin{multiplechoice} `,\begin{question}iHowmuchwoodcouldawoodchuckchuckifawoodchuckcouldchuckwood?nY\choice{Alot.}nY\choice{Morethanmost.}nY\choice{Exactly$\pi$cords.}nY\choice[!]{Itdependsonthenatureofthewoodchuck.}`,\end{question}V\end{multiplechoice}RInUUtheexam,thisistypGesetas:^81.kHow@muchwoGodcouldawoodchuck@chuckifawoGodchuck@couldchuck kwoGod?{!9(a)"AUUlot.z(b)"MoreUUthanmost.{s(c)"ExactlyUU.cords.z(d)"ItUUdepGendsonthenatureofthewoodchuck.RIntheanswerkey*,wifneitheroftheoptionsmcboldnormcunderlineweregiven, RtheUUanswerwillbGetypGesetas:^81.kHow@muchwoGodcouldawoodchuck@chuckifawoGodchuck@couldchuckkwoGod?{!9(a)"AUUlot.z(b)"MoreUUthanmost.{s(c)"ExactlyUU.cords.ffv4ff"$ff(d)UXffffff"$"ItUUdepGendsonthenatureofthewoodchuck.-RA[couple[ofnotes:}"youmayhaveanynumbGerofchoices|althoughI[usedfourin Rtheexample,]anythingfrom1{26willwork.Also,]noticethatthecorrectanswerRwasUUspGeci edbygivingtheoptionalargumentof!to\choice.7Qy?R2.6pThe xedenvironmentuTRT*oa#putitverysimply, xedactsexactlythesameasshortanswer,witha#theexception/`fixed Rthatgtheorderofthequestionsisnotrearrangedfordi erentcopiesoftheexam.RI intended"itfor,say*,a"bloGckofessayquestionsattheendofthetest..F*orsuchRquestions,1usuallyE8thereisasmallnumbGerE8(like2{3)andyoudon'tcareabGoutRrearrangingUUtheorder.6R2.7pStarredformsoftheab`oveenvironmentsREachoftheabGoveenvironmentshasa*-edformthatdi ersfromthepreviousde-Rscription ronlyinthatthedefaultidenti erissuppressed.X|Thatis,everyunstarr}'edRenvironmentUUbGeginswiththeidenti er:RSectiong cmmi12N@.8h,@ cmti12arffgument$DiRwhereN۲isthecurrentsectionnumbGerand !", cmsy10har}'gumentظi8ϲisanoptionalargumentRgiven totheenvironment.F*orexample,ifthe rstenvironmentinanexamisaRmultiplechoiceUUenvironment,includingV\begin{multiplechoice}[TheEasyQuestions]RinUUtheinput lewillresultinRSection1.8TheEasyQuestionsRtoUUbGetypesetintheexam.aHowever,one9mightnotalwaysdesirethesectionidenti er.gtIfso,thenusingRaٲ*-edenvironmentٲsuppressesthesectionidentifer.IfanoptionalargumentsisRgiven,UUitwillbGetypGeset ushleft.qE.g.,V\begin{multiplechoice*}[TheHardQuestions]RwillUUproGduceRTheHardQuestionsRInUUtheexam.aAlle{theenvironmentse{describGedabovee{(withtheexceptionof,questionandan-Rswer#)cantakeanoptionalargument.4ThisismeanttobGeatitleforthatparticularRsectionUUofthetest,statingthenumbGerUUofpointsperquestion,etc.6R2.8pTheblo]ckenvironmentuTRSoGon.afterversion1.01ofexamwasreleased,eseveralpGeoplepointedouttome/`blockRthatahighlydesirablefeatureshouldbGeprovided. TheproblempeoplefacedRwasthefollowing: Sometimes,whenwritinganexam,onewantstoincludeaRgraph,table,etc.WFandthenhaveseveralquestionspGertainingtothatgraph,table,Retc.LInl,the rstreleaseof3IexamitwasimpGossible(well,qimpGossiblewithoutusing8 ZРy?Ran[undoGcumented\trick")todothis,]sinceeveryquestionwouldbGerandomly RrepGositionedUUupontypesetting.aThe3bloGckenvironment3enablesonetoidentifyagroupofquestions,:aswellasRsomea preceedingtext,dasa\bloGck"thatshouldbekepttogethereventhoughtheRrest,ofthesectiongetsrearranged.VSo,hifonehasthreequestionsinabloGck,thoseRquestionsMwillalwaysbnbGekepttogether, inthesameorder,butthatbloGckwillbeRrandomly,Ashuedwiththerestofthequestionsinthesection.d(Ifthisisunclear,RtakeUUaloGokatthesample les.)aTheUUsyntaxisstraightforward.qF*orexample:V\begin{block} VHereisaspotwhereyoucanputsomeinstructions,agraph,orwhateverVyouwanttopreceedthequestionsinthisblock.[s,\begin{question}dXThisisthefirstquestion.dX\begin{answer}nYThisistheanswertothefirstquestion.dX\end{answer}[s,\end{question}[s,\begin{question}dXThisisthesecondquestion.dX\begin{answer}nYThisistheanswertothesecondquestion.dX\end{answer}[s,\end{question}[s,\begin{question}dXThisisthethirdquestion.dX\begin{answer}nYThisistheanswertothethirdquestion.dX\end{answer}[s,\end{question}V\end{block}RWillUUkeepthosethreequestionstogetherwhentherearranginghappGens. aThexbloGckenvironmentxmaybGeusedinany[VofthepreviouslydescribedquestionRenvironments.!čR3jLSps3ecialffFformattingTos3olsRTheVfollowingenvironments,"macros,andVlengthparametersallowtheusertocus-RtomizesvirtuallyeveryaspGectoftheexam.,AsI?describebelow,thedefaultsettingsRoftheexamarede nedusingtheseenvironments._^Noneoftheseenvironmentsal-Rlow 6forsettingtheheadersandfoGotersoftheexam(thatwillbeonethingI'dlikeRtoUUaddinthenextrelease).9 fy?R3.1pSp`ecialFormattingEnvironmentsuTRAnymaterialenclosedinthefrontmatter0environmentwillbGetypGesetonapage(orfrontmatter Rpages)'byitselfbGeforetheexam(andthekey*,toGo).VbFor'example,ifonewanted'toRmakeoacoversheetfortheexamwiththeclassnameandaplaceforthestudentRtoUUwritetheirname,i.d.qnumbGer,UUandsoforth.aAny"materialenclosedintheendmatterFenvironmentwillbGetypGesetonapageyendmatterR(or0pages)byitselfaftertheexam(andthekey*,7toGo).eFor0example,ifonewantedRtoplaceapagewithseveralimpGortantequations,constants,andtablesattheendRofUUtheexamforstudentstoreference,ifneeded.aAnymaterialenclosedintheexamtopenvironmentwillbGetypGesetonthenext%examtopRpage`followingthefrontmattertext,$ifanexamisbGeingcreated,andwillbGeomittedRifDananswerkeyisbGeingcreated.ThedefaultsettingsoftheexamclassusethisRenvironmentUUtocreatetheareafortheclassname,studentname,etc.qasfollows:V\begin{examtop} `,\@@line{\parbox{3in}{\classdata\\r\examtype\ifincludeform,Form:\fbox{\textsf{\Alph{version}}}\fi}r\hfillr\parbox{3in}{\normalsize\namedata}}r\bigskipV\end{examtop}RWherebF\classdataand\examtypearemacrosthatusethecurrentvqaluesassigned Rby1theswitches\classand\examname.\ifincludeformisde nedtobGetrueRunlessUUthenoformoptionwasgiven,inwhichcaseitisde nedtobGefalse.aTheUUde nitionof\namedatais:V\def\namedata{Name:\hrulefill\\[\namedata@vspace] &4StudentNumber:\hrulefill\\[\namedata@vspace]&4TA:\hrulefill\\[\namedata@vspace]&4Date:\hrulefill}RWhere8\namedata@vspaceisthelengthsetbytheswitch\StudentInfoLineSpacing. aF*orp-thosewhodon'tknow,v\@@lineistheL5ffA͉TU>'ExX2",4equivqalentofPlainTU>'ExX'sR\line@command.1Ifyouwishtouse\@@lineinde ningyourownexamtoporRkeytop,xpleasezbGesuretouse\makeatletterand\makeatotherintheappropriateRplaces,UUotherwiseyoucouldgeterrors.aAnymaterialenclosedinthekeytopenvironmentwillbGetypGesetonthenext*|keytopRpagefollowingthefrontmatterBotext,QFifakeyisbGeingcreated,QFandwillbeomit-RtedvifanexamisbGeingcreated.[*ThedefaultsettingsoftheexamclassusethisRenvironmentUUtocreatethetopofananswerkeyasfollows:[s,\begin{keytop} [s,\@@line{\hfill\HugeAnswerKey?\ifincludeformforExam\fbox{\textsf{\Alph{version}}}?\fi\hfill}?\bigskip[s,\end{keytop}10 o:y?aAnykmaterialenclosedintheexamprefaceenvironmentwillbGetypGesetontheexampreface Rsame5bpageastheexamtoptext,merightbGeneathitbutbeforeanysectionsoftheRexamareincluded.iIncaseyouarewonderingwhatthisenvironmentdoGesthatRcannotbGedonewithexamtop,EyourquestionisverygoGod.Thedi erenceisthis:RTheP&materialenclosedintheexamprefaceenvironmentissensitivetowhethertheRtwocolumnroptionwasgiven.&6IfthetwocolumnoptionwasD²given,thenthematerialRin examprefacewillbGetypGesetatthestartofthe rstcolumn.Bycontrast,theRmaterialgiveninexamtopisalwaystypGesetinasinglecolumnspanningtheentireRtextwidthUUofthepage,atthetopoftheexam.aAnydmaterialenclosedinthekeyprefaceenvironmentwillbGetypGesetonthe$keyprefaceRsame-pageasthekeytoptext,5rightbGeneathitbutbeforeanysectionsareincluded.RAsdescribGedabove,Wifthetwocolumnoptionwas̲given,thenthematerialinRkeyprefacewillbGetypesetatthestartofthe rstcolumn.+5Bycontrast,thematerialRgivenrinkeytopisalwaysᓲtypGesetinasinglecolumnspanningtheentiretextwidthRofUUthepage,atthetopofthekey*.aEssentially thesameastheexamprefaceenvironment,withtheobviouschangeexamclosingRthattheenclosedmaterialistypGesetattheendoftheexam,'onthesamepageRasootherestoftheexam(ifpGossible),butbeforetheendmatter.(AnymaterialRenclosedinanendmatter environmentistypGesetonapagebyitselfaftertheexamRorUUkey*.)aEssentially"thesameasthekeyprefaceenvironment,withtheobviouschange$keyclosingRthatJtheenclosedmaterialistypGesetattheendofthekey*,݇onthesamepageasRtheUUrestofthekey(ifpGossible),butbeforetheendmatter.6R3.2pSp`ecialFormattingMacrosuTRDuetothespGecialwaytheexamclassconstructsadocument(seethetechnicalRnotesinsection4),«severalspGecialmacrosareprovidedwhichenabletheusertoReasilytakeadvqantageofthewayexamsareconstructed.ȓInaddition,NthereareRseveral;lengthswhichtheusercanmoGdifytofurthercustomizetheappearanceofRtheUUexam.aThev\exammacrotakesoneargument,whichcanbGeanycommandorsequence/`\examRofWcommandssub8jecttotheconstraintsdescribGedinthetechnicalnotes.CTheRargument'VwillbGeincludedwhereveritisifandonlyifanexamisbGeingmade,RotherwiseUUtheargumentwillbGeignored.aThe/\\keymacrotakesoneargument,6whichcanbGeanycommandorsequence4\keyRofgcommandssub8jecttotheconstraintsdescribGedinthetechnicalnotes.Thear-RgumentwillbGeincludedwhereveritisifandonlyifakeyisbGeingmade,DotherwiseRtheUUargumentwillbGeignored.aJustliketheordinaryL5ffA͉TU>'ExXcommand\vspace,withtheexceptionthatthe\examvspaceRverticalUUspaceisincludedifandonlyifanexamisbGeingtypGeset.aJustDliketheordinaryL5ffA͉TU>'ExXcommand\vspace*,H8withtheexceptionthattheL\examvspace*RverticalUUspaceisincludedifandonlyifanexamisbGeingtypGeset.aJustliketheordinaryL5ffA͉TU>'ExXcommand\hspace,withtheexceptionthatthe\examhspaceRhorizontalUUspaceisincludedifandonlyifanexamisbGeingtypGeset.aJustDliketheordinaryL5ffA͉TU>'ExXcommand\hspace*,H8withtheexceptionthattheL\examhspace*11 |8y?RhorizontalUUspaceisincludedifandonlyifanexamisbGeingtypGeset. aJustDliketheordinaryL5ffA͉TU>'ExXcommand\hspace*,H8withtheexceptionthatthe$\keyvspaceRhorizontalUUspaceisincludedifandonlyifakeyisbGeingtypGeset.aJustDliketheordinaryL5ffA͉TU>'ExXcommand\hspace*,H8withtheexceptionthatthe\keyvspace*RhorizontalUUspaceisincludedifandonlyifakeyisbGeingtypGeset.aJustDliketheordinaryL5ffA͉TU>'ExXcommand\hspace*,H8withtheexceptionthatthe$\keyhspaceRhorizontalUUspaceisincludedifandonlyifakeyisbGeingtypGeset.aJustDliketheordinaryL5ffA͉TU>'ExXcommand\hspace*,H8withtheexceptionthatthe\keyhspace*RhorizontalUUspaceisincludedifandonlyifakeyisbGeingtypGeset.aThelastnewcommand(inversion1.02)is\word.\nThiscommandallowsthe/`\wordRusera,toinsertinessentialchangesinthewordingofaquestionbGetweenvqariousRversionsoftheexam. Thus,notonlywilltheorderofthequestionsbGedi erent,Rbuttheactualwor}'dingWofthequestionswillbGeslightlydi erentaswell.UF*orRexample,UUifoneincludes:V\begin{question} VIsthemostwell-known\word{{astronomer}{wrestler}{physicist}}inVtheworld\word{{CarlSagan}{RowdyRoddyPiper}{AlbertEinstein}}?V\end{question}RinUUanexam,the rstversionoftheexamwillincludethequestion^81.kIsUUthemostwell-knownUUastronomerintheworldCarlSagan?RbutUUthesecondversionoftheexamwillinclude^81.kIsUUthemostwell-knownUUwrestlerintheworldRowdyRoGddyPiper?RandUUthethirdversionoftheexamwillinclude^81.kIsUUthemostwell-knownUUphysicistintheworldAlbGertEinstein?aLet'scalltheargumentof\wordanoption-list.ƃIfonerequestsmorever- Rsions;ofanexamthanoptionsinanoption-list,\wordwillbGehave;asiftheRoption'ExXcommandswillworkwithoutaproblemintheexamclass,butthereRis#onenoteworthy#classofexceptions:cnocommand,Venvironment,or#macrothatRinvolvesEZacatcoGdechangewillworkwiththeexamclass.AF*orexample,\neitherR\verbZnortheenumerateenvironmentZwillworkwithintheexamclasssincecatcoGdeRchangestNareessentialtotheopGerationoftheseenvironments.γThereasonforthisRrestrictionUUhastodowithhowtheexamclasscreatesanexam.aV*ery:kbrie y(andthisisalloneneedstoknow,?unlessonewantstohacksomeRthe2coGde),)theideaisthis:aeverysectionheader,bloGckheader,instructions,andRquestionM2issavedM2toauniquelynamedmacrowhichallowstheexamclasstoretrieveRitwhenitisneeded.Sinceallofthesethingsaresavedinmacros,TU>'ExX\pGeeks"Rateachcharacter(withouttypGesettingit)whenitreadsthe le.VConsequently*,ReverycharacterintheexamgetsacatcoGdeassignedtoitbeforeanytypesettingRtakesUUplace.aF*uture6versionsoftheexamclassmightliftthisrestriction(andjustusetokenRlistslforeverything,qinsteadofmacros),buttherearetwolpGossibleproblemswithRthisԔapproach:pE rst,dTU>'ExXlimitsthenumbGerofdistincttokenliststoonly256|Rwhichzshouldn'treallyaproblem,)inpractice,butcould.+Second,ithasbGeenmyRexpGeriencegthatasingletokenlistcannotstorenearlytheamountofinformationRthatasinglemacrocan.Q=F*orexample,>onmymachine(aDell166w/32MBRAMRrunning9MikT*eX),I9canonlystoreapproximately15pagesofmaterialinasingleRtokenQlist,whereasI>canstoreapproximately45{50pagesofmaterialinasingleRmacro.PBSo,evenifIweretoassigndistincttokenliststoeachsectionoftheexam,Rno=singlesectionoftheexamcouldcontainmorethan15pagesofmaterialwithout13y?RexceedingUUthememoryonsomesystems. aI'llUUhavetothinkabGoutit.6R4.1pBugsuTRThisisn'treallya\bug",sotospGeak,becauseitdoGesn'tcauseanycrashes,butRitÙisaninstanceofunexplainedL5ffA͉TU>'ExXbGehaviorthatI}cannot gureout.UseofRthewybloGckenvironmentwysometimescausesunderfull?hboxwarnings.3Iwpcannot,atRthispGoint,diagnosethesourceoftheproblem.NF*ortunately,though,thisbugdoGesRnotseemtocauseanyvisibletypGesettingerrors.^Anyonewho guresthisoutandRtellsUUmehowto xitshallbGeawarded$10.00andmypGermanentgratitude.R4.2pChangesuTRPreviousĺreleasesoftheexamclassrequiredthatinstructionsforagivensectionRbGespeci edassuchbyusingthe\instructionscommand.TheneedforusingR\instructionshasbGeenliftedasofrelease1.02.Theruleisthis:WallmaterialRbGetween?thestartofasectionandthe rst\begin{question}or\begin{block}RwillbGetakentobetheinstructionsforthatsection.EOldexamscreatedwithR\instructionsqshouldstillworkwiththenewrelease(the\instructionsmacroRhasUUsimplybGeenrede nedas\relax).aThus,if]hyouareusing xedtoformataseriesofessayquestions,youmightwantRto%qtellstudentsthattheyonlyneedtowriteanswerstotwoofthefollowingthreeRquestions.iTheinstructiontextisalwaystypGesetatthebeginningofasection,RbGeforeUUanyquestionsaretypGeset.!čR5jLTheffCos3deRFirstjustsomedeclarationsandstu thatsayswearebuildinganextensiontoRtheUUordinaryL5ffA͉TU>'ExXclassarticle.Us1\ cmsy9hheader"i Us2\\ProvidesFile{exam.dtx}Us3\\NeedsTeXFormat{LaTeX2e}Us4\\ProvidesClass{exam}Us5\\newcounter{passes}Us6adD\setcounter{passes}{2}Us7\\newif\ifincludeformUs8adD\includeformtrueUs9\\newif\ifmcbold\mcboldfalseR10\\newif\ifmcunder\mcunderfalseR11\\newif\ifulem\ulemfalseR12\\newif\ifbox\boxtrueR13\\newif\iftwocolumn\twocolumnfalseR14\\gdef\@OneKeyHook{\relax}R15\\DeclareOption{mcbold}{\mcboldtrue\boxfalse}R16\\DeclareOption{mcunderline}{\mcundertrue\boxfalse}142y?R17\\DeclareOption{nokey}{\setcounter{passes}{1}} R18\\DeclareOption{onekey}{\setcounter{passes}{2}R19f\gdef\@OneKeyHook{\setcounter{passes}{1}R20o\gdef\@OneKeyHook{\relax}}}R21\\DeclareOption{noform}{\includeformfalse}R22\\DeclareOption{twocolumn}{\twocolumntrue}R23\\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}R24\\ProcessOptionsR25\\LoadClass{article}R26\\iftwocolumn\RequirePackage{multicol}\fiR27\\ifmcboldR28f\ifmcunderR29o\def\MCfont#1{\textbf{\uline{#1}}}R30f\elseR31o\def\MCfont#1{\textbf{#1}}R32f\fiR33\\elseR34f\ifmcunderR35o\def\MCfont#1{\uline{#1}}R36f\elseR37o\def\MCfont#1{\relax{#1}}R38f\fiR39\\fiR40\h=header"i6R5.1pTherandomnumb`ergeneratoruTRRANDOM.TEXUUv.1(DonaldArseneau)GeneratingrandomnumbGersUUinT*eX. aRandomdintegersaregeneratedintherange1to2147483646bythemacro\nextrandomR\nextrandom.%The;resultisreturnedinthecounter\randomi.DonotchangeR\randomiYexcept,ApGerhaps,toinitializeitatsomerandomvqalue.IfyoudonotRinitialize it,-;itwillbGeinitializedusingthetimeanddate.w(Thisisasparseini-Rtialization,U(giving!fewerthanamilliondi erentstartingvqalues,U(butyoushouldRuse othersourcesofnumbGers iftheyareavqailable{justremembGerthatmostoftheRnumbGersUUavqailabletoTU>'ExXarenotatallrandom.)aThev\nextrandomcommandisnotveryusefulbyitself,=unlessyouhaveexactly$\setrannumR2147483646+thingstochoGosefrom.:Muchmoreusefulisthe\setrannumcommandRwhichvsetsagivencountertoarandomvqaluewithinaspGeci edrange.NThereRarethreeparameters:M\setrannum{hc}'ounteri).}{hminimumci23E}{hmaximumci3B}.F*orRexample,UUtosimulateadie-roll:q\setrannum{\die}{1}{6}?\ifcase\die...aIfnyouneedrandomnumbGersthatarenotintegers,-youwillhavetouseL\setrandimen$\pointlessRdimen^registersand\setrandimen.F*orexample,tosetarandompageRwidth: 8\setrandimen?\hsize{3in}{6.5in}. AThe \\pointless"macrowillRremove=the\pt"thatT*eXTgivessoyoucanusethedimensionsaspureR`real'numbGers. 'Inthatcase,jspecifytherangeinptunits. 'F*orexample,R\setrandimen\answer{2.71828pt}{3.14159pt}8Theansweris\pointless\answer.aTherandomnumbGergeneratoristheonebyLewis,7?Goodman,andMillerR(1969)andusedasran0inNumerical?RecipiesusingSchrage'smethoGdfor15Iy?Ravoidingeover ows.|Themultiplieris16807(7^5|s)theaddedconstantis0,Īandthe RmoGdulus@is147483647(2^31 71)Therangeofintegersgeneratedis12147483646.RAQ2smallerQ3rangewouldreducethecomplexityofthemacrosabit,Rbutnotmuch{RmostBofthecoGdedealswithinitializationandtype-conversion.BOnBtheotherhand,RtheUUlargerangemaybGewastedduetothesparseseedinitialization.aIUUdonotincludethecoGdeinthedocumentation.6R5.2pIncorp`oratingthepack@ageulemuTRThisUUcoGdeisnotlistedinthedocumentation.R5.3pTheco`defortheexamclassRW*eBnowde neanenvironmentquestionthatsavesthesurroundedtextto Ramacro\sec@hse}'ction-numberiJgX@qsthquestion-numb}'eriPH ,Twherehse}'ction-numberiRandkhquestion-numb}'eriUarekexpressedaslowerkcaseromannumerals(thiswaytheyRcan~bGepartofthemacroname).*+NotethatwemustuselowercaseromannumeralsRsince,6I |bGelieve,L5ffA͉TU>'ExX2"-the \Romancommandusesthe\uppercasecommand,RwhichUUisnotexpandedfullyuntilfurtheralonginTU>'ExX'sgulletthanwewant.aFirst,UUde nesomenewcountersandtokenlists.R41\hothercoAde*Bi R42\\setcounter{section}{0}R43\\newcounter{extract}R44\\newcounter{question}\setcounter{question}{1}R45\\newcounter{length}\setcounter{length}{0}R46\\newcounter{temp}\setcounter{temp}{1}R47\\newcounter{wordtemp}\setcounter{wordtemp}{1}R48\\newcounter{form}R49\\newcounter{version}R50\\newcounter{current@section}R51\\newcounter{current@question}R52\\newcounter{innerloop}R53\\newcounter{sect}R54\\newcounter{sectionindex}R55\\newcounter{answer}R56\\newcounter{choice}R57adD\setcounter{choice}{1}R58\\newcounter{mcquestion}\setcounter{mcquestion}{1}R59\\newcounter{mcchoice}\setcounter{mcchoice}{1}R60\\newcounter{savelistcnt}R61\\newlength{\blank@length}R62\\newlength{\temp@length}R63\\newlength{\temp@@length}R64\\newlength{\namedata@vspace}R65\\newlength{\beforesectsep}R66adD\setlength{\beforesectsep}{\medskipamount}R67\\newlength{\aftersectsep}R68adD\setlength{\aftersectsep}{\medskipamount}16"y?R69\\newlength{\beforeinstsep} R70adD\setlength{\beforeinstsep}{\medskipamount}R71\\newlength{\afterinstsep}R72adD\setlength{\afterinstsep}{\medskipamount}R73adD\addtolength{\afterinstsep}{-\topsep}R74\\newif\ifchoice\choicefalseR75\\newif\ifanswerR76\\newif\ifnotfixedR77\\newif\ifcblanks\cblanksfalseR78\\newif\ifpblanks\pblankstrueR79\\newif\ifidentifier\identifierfalseR80\\newif\ifFirstQuestionInBlock\FirstQuestionInBlocktrueR81\\global\newtoks\temptoksR82\\global\newtoks\temp@toksR\setrannum;7requiresa\traditional"counter(i.e.,anon-L5ffA͉TU>'ExXcounter(i.e.,a RcounterUUwhosenamedoGesn'tbeginwithc@. R83\\newcount\exam@cR84\\newcount\exam@nR85\\newcount\exam@mR86\\setrannum{\exam@m}{1}{10}R87\\newtoks\@toklist͍'3PsectionRQuestionsQnaturallyoGccurinblockswhichhave,more-or-less,theQsamegeneralRformat.hF*orexample,onewillnaturallyhaveabloGckoftrue/falsequestionsto-Rgether,VfollowedVbyabloGckofshortanswer,VandthenabloGckofessayquestions.RW*e{don'twant{tomixquestionsbGetween{blocks{(sothatthetrue/falsequestionsRareUinterspGersedbetweenUtheshortanswerquestions).sGThusweneedtoindextheRquestionsUUbysectiontypGeaswellasquestionnumbGer.ލR88\\def\section{\stepcounter{section}R89f\setcounter{question}{1}}͍t\get@instructionsRThis3macrocollectseverythingbGetweenitandthenext\begintoken.7ItthencallsRtheH\find@instructions@endmacrotocheckHwhetherthe\begintokenbGelongsRtoUUthequestionenvironmentUUorsomeotherenvironment. R90\\long\def\get@instructions#1\begin{\@toklist=\expandafter{\the\@toklist#1}%R91f\find@instructions@end}͍S\find@instructions@endRIf~weareat\begin{question}or\begin{block}saveeverythingtotheappro-RpriatelyUUnamedmacro.qOtherwise,continueUUcollectingtokens R92\\def\find@instructions@end#1{%R93f\def\@tempa{#1}%R94f\ifx\@tempa\@QR95o\let\@next=\Qwrap@up@instructionsR96f\elseR97o\ifx\@tempa\@BlockR98y2\let\@next=\Bwrap@up@instructionsR99o\elseN100y2\@toklist=\expandafter{\the\@toklist\begin{#1}}%17Ρy?N101y2\let\@next=\get@instructions N102jp\fi\fi\@next}S\Qwrap@up@instructionsRUseVthecounterssectionandquestiontosavethecollectedtokenlistinamacro RnamedUUasdescribGedearlier.N103\\def\Qwrap@up@instructions{%N104adD\edef\@@temp{\roman{section}}N105adD\expandafter\xdef\csnameinst@sec\@@temp\endcsname{\the\@toklist}N106adD\begin{question}}N107\%\end{macro}N108\%N109\%\begin{macro}{\Bwrap@up@instructions}N110\%Usethecounters|section|and|question|tosavethecollectedtokenlistN111\%inamacronamedasdescribedearlier.N112\%X\begin{macrocode}N113\\def\Bwrap@up@instructions{%N114adD\edef\@@temp{\roman{section}}N115adD\expandafter\xdef\csnameinst@sec\@@temp\endcsname{\the\@toklist}N116adD\begin{block}}N117\%\end{macro}N118\%N119\%\begin{macro}{\endsection}N120\%Attheendofasection,makealistofquestionindexes.N121\%X\begin{macrocode}N122\\def\endsection{\make@qlist}L\make@qlistRAsdescribGedbelow,qweneedtocreateatokenlistcontainingtheindexnumbGers RofUUeachquestion.qThisisdonebyawhile-loGopasfollows:N123\\def\make@qlist{%N124f\setcounter{temp}{1}N125f\edef\@tempa{\roman{section}}%RW*e needtocreateanewtokenlisttoholdthequestionindexes.WhileweareRatwAit,mightaswellcreatethetokenlisttoholdtherearrangedquestionindexes.RThisUUsavesushavingtoincludeawhile-loGoplater.N126f\global\expandafter\newtoks\csnameqlist@sec\@tempa\endcsnameN127f\global\expandafter\newtoks\csnameqlist@scr@sec\@tempa\endcsnameN128f\global\csnameqlist@scr@sec\@tempa\endcsname={}RNow9lbGeingawhile-loopwhereeachpassthroughtheloopappendsanindexnumberRtoUUthequestionlist.N129f\@whilenum\value{question}>1\do{%N130o\edef\@questionnumber{\arabic{temp}}%N131o\expandafter\append\expandafter{\@questionnumber}%N132}{\csnameqlist@sec\@tempa\endcsname}N133o\addtocounter{question}{-1}N134o\addtocounter{temp}{1}}}18y?R5.4pThequestionenvironmentuT$\questionRW*ede ne\questionsothatitreadsinandsavesthesurroundtexttoamacro RlikeUUinthetabularxenvironment. N135\\def\question{\@toklist={} N136adD\get@question@body}b\endquestionRIncrementthequestioncountersothatthenextquestionwillbGeassignedtherightRnameN137\\def\endquestion{\stepcounter{question}}9\get@question@bodyRThisy[macrocollectseverythingbGetweenitandthenext\endtoken.ItthencallsRthez\find@question@endmacrotocheckzwhetherthe\endtokenbGelongstotheRquestionUUenvironmentorsomeotherenvironment.N138\\long\def\get@question@body#1\end{\@toklist=\expandafter{\the\@toklist#1}% N139f\find@question@end}9\find@question@endRIf%Eweareat\end{question},.saveeverythingtotheappropriatelynamedmacro.ROtherwise,UUcontinuecollectingtokensN140\\def\find@question@end#1{% N141f\def\@tempa{#1}%N142jp\ifx\@tempa\@Q\expandafter\wrap@upN143o\else\@toklist=\expandafter{\the\@toklist\end{#1}}%N144tJ\expandafter\get@question@body\fi}"y\wrap@upRUseVthecounterssectionandquestiontosavethecollectedtokenlistinamacro RnamedUUasdescribGedearlier.N145\\def\wrap@up{%N146adD\edef\@tempa{\roman{section}}%N147adD\edef\@tempb{\roman{question}}%N148adD\ifx\@currentsectionname\@truefalseN149jp\expandafter\xdef\csnamesec\@tempa@qst\@tempb\endcsname{%N150tJ\noexpand\@tfitemN151tJ\noexpand\@beforequestionhookN152tJ\the\@toklistN153tJ\noexpand\@endquestionhook}N154jp\elseN155jp\ifx\@currentsectionname\@truefalsestarN156tJ\expandafter\xdef\csnamesec\@tempa@qst\@tempb\endcsname{%N157}\noexpand\@tfitemN158}\noexpand\@beforequestionhookN159}\the\@toklistN160}\noexpand\@endquestionhook}N161tJ\elseN162tJ\ifx\@currentsectionname\@MCN163}\expandafter\xdef\csnamesec\@tempa@qst\@tempb\endcsname{%N1640\noexpand\@mcitemN1650\noexpand\begin{minipage}[t]{\noexpand\linewidth}N1660\noexpand\@beforequestionhook19sy?N1670\the\@toklist N1680\noexpand\@mcenditemN1690\noexpand\end{minipage}N1700\noexpand\@endquestionhook}N171}\elseN172}\ifx\@currentsectionname\@MCstarN1730\expandafter\xdef\csnamesec\@tempa@qst\@tempb\endcsname{%N174 \noexpand\@mcitemN175 \noexpand\begin{minipage}[t]{\noexpand\linewidth}N176 \noexpand\@beforequestionhookN177 \the\@toklistN178 \noexpand\@mcenditemN179 \noexpand\end{minipage}N180 \noexpand\@endquestionhook}N181}\elseN182}\expandafter\xdef\csnamesec\@tempa@qst\@tempb\endcsname{%N1830\noexpand\itemN1840\noexpand\@beforequestionhookN1850\the\@toklistN1860\noexpand\@endquestionhook}N187jp\fi\fi\fi\fiN188jp\end{question}}:\@QRStoreUUthenameoftheenvironmentUUforcomparisonin\find@question@end ލN189\\def\@Q{question}R5.5pTheblo]ckenvironmentuT+\blockRThisYmacroprovidesa\bloGck"environmentthatpreventsthequestionsitsur- RroundsUUfrombGeingrearranged.N190\\def\block{\@toklist={} N191adD\get@block@body}f\get@block@bodyN192\\long\def\get@block@body#1\end{\@toklist=\expandafter{\the\@toklist#1}% N193f\find@block@end}f\find@block@endN194\\def\find@block@end#1{% N195f\def\@tempa{#1}%N196jp\ifx\@tempa\@Block\expandafter\block@wrap@upN197o\else\@toklist=\expandafter{\the\@toklist\end{#1}}%N198tJ\expandafter\get@block@body\fi} 6\block@wrap@up ލN199\\def\block@wrap@up{%N200adD\edef\@tempa{\roman{section}}%N201adD\edef\@tempb{\roman{question}}%N202adD\expandafter\xdef\csnamesec\@tempa@qst\@tempb\endcsname{%20y?N203jp\noexpand\@startofblockhook N204jp\noexpand\@blockbreaklistN205jp\the\@toklistN206jp\noexpand\@endofblockhook}%N207adD\end{block}}9\@startofblockhook ֍N208\\def\@startofblockhook{\relax} \@blockbreaklistRThisimacrokeepsanytextfromthestartofabloGckfrombGeingtoocloselycon- Rnected*withthepreviousquestion.cThe\item[]isnecessaryincasetherandom-Rizing routinemoves thebloGcksothatitisthe rstquestion(withoutan\itemweRgetUUanerrorasL5ffA͉TU>'ExX2"+TwillcomplainabGouta\missing\item".N209\\def\@blockbreaklist{\@testforquestion}t\@testforquestionRChecks})toseeifthetokensimmediatelyfollowing\begin{block}aretheto-Rkens>\begin{question}..W*ehavetouse3argumentsbGecausewhenwecalledR\get@block@bodywtogetthematerialfor\@toklist, wefolloweditwitha\relaxRcommand(I'mnotsurewhyIŠdidthis,{butapparentlyIŠhadareasonatthetime).RThusvYwhatweareinterestedintestingarenotthe rsttwotokensof\@toklistRbutUUratherthesecondandthirdtokens.N210\\def\@testforquestion#1#2{% N211f\def\@@@temp{#2}N212f\ifx#1\beginN213o\ifx\@@@temp\@QN214y2\relaxN215o\elseN216y2\item[]N217o\fiN218f\elseN219o\item[]N220f\fi#1{#2}} \@endofblockhookN221\\def\@endofblockhook{\relax}'3P\@BlockN222\\def\@Block{block}$\endblockN223\\def\endblock{\stepcounter{question}}ˍR5.6pThefrontmatterenvironmentuTb\frontmatterRW*eFde ne\frontmattersothatitreadsinandsavesFthesurroundtexttoamacro RlikeUUinthetabularxenvironment.N224\\def\frontmatter{\@toklist={} N225adD\get@frontmatter@body}21Ty?f\endfrontmatterRThisUUdoGesn'tneedtodoanything. N226\\def\endfrontmatter{\relax}򍍍 \get@frontmatter@bodyRThisy[macrocollectseverythingbGetweenitandthenext\endtoken.Itthencalls RtheI\find@frontmatter@endmacrotocheckIwhetherthe\endtokenbGelongstoRtheUUfrontmatterxenvironmentorsomeotherenvironment.N227\\long\def\get@frontmatter@body#1\end{% N228f\@toklist=\expandafter{\the\@toklist#1}%N229f\find@frontmatter@end}򍍍 \find@frontmatter@endRIf̫weareat\end{frontmatter},*saveeverythingtotheappropriatelynamed Rmacro.qOtherwise,UUcontinuecollectingtokensN230\\def\find@frontmatter@end#1{%N231f\def\@tempa{#1}%N232f\ifx\@tempa\@FrontmatterN233o\expandafter\frontmatter@wrap@upN234f\elseN235o\@toklist=\expandafter{\the\@toklist\end{#1}}%N236o\expandafter\get@frontmatter@bodyN237f\fi}򍍍Ʋ\frontmatter@wrap@upRSaveUUallthescannedtextintoanappropriatelynamedmacroforlaterrecall.N238\\def\frontmatter@wrap@up{%N239f\xdef\@frontmattertext{\the\@toklist}N240f\end{frontmatter}}򍍍 \@FrontmatterRStoreUUthenameoftheenvironmentUUforcomparisonin\find@frontmatter@endN241\\def\@Frontmatter{frontmatter}2R5.7pTheendmatterenvironmentuTRThe$endmatterGenvironmentbGehavesjustlikethefrontmatterGenvironment,-except RtheUUenclosedtextissavedUUinadi erently-namedmacro.\endmatterRW*e@yde ne\endmattersothatitreadsinandsaves@ythesurroundtexttoamacroRlikeUUinthetabularxenvironment. N242\\def\endmatter{\@toklist={} N243adD\get@endmatter@body} \endendmatterRThisUUdoGesn'tneedtodoanything.N244\\def\endendmatter{\relax}H\get@endmatter@bodyRThisy[macrocollectseverythingbGetweenitandthenext\endtoken.Itthencalls Rthe\find@endmatter@endmacrotocheckwhetherthe\endtokenbGelongstotheRendmatterxenvironmentUUorsomeotherenvironment.N245\\long\def\get@endmatter@body#1\end{% N246f\@toklist=\expandafter{\the\@toklist#1}%N247f\find@endmatter@end}22hy?H\find@endmatter@endRIfweareat\end{endmatter},Tsaveeverythingtotheappropriatelynamedmacro. ROtherwise,UUcontinuecollectingtokens JN248\\def\find@endmatter@end#1{% N249f\def\@tempa{#1}%N250f\ifx\@tempa\@EndmatterN251o\expandafter\endmatter@wrap@upN252f\elseN253o\@toklist=\expandafter{\the\@toklist\end{#1}}%N254o\expandafter\get@endmatter@bodyN255f\fi}ɍ9\endmatter@wrap@upRSaveUUthescannedtexttoanappropriatelynamedmacroforlaterrecall.N256\\def\endmatter@wrap@up{%N257f\xdef\@endmattertext{\the\@toklist}N258f\end{endmatter}}ɍL\@EndmatterRStoreUUthenameoftheenvironmentUUforcomparisonin\find@endmatter@endN259\\def\@Endmatter{endmatter}aW*e&nowinitialize\@frontmattertextand\@endmattertexttoarandomly Rchosen'garbagevqaluethatnouserwilleveruse.ThisenablesustotestintheRmainUUloGopwhethertheuserhasusedfrontmatterxorendmatterinherdoGcument.1N260\\begin{frontmatter} N261f\relaxN262\\end{frontmatter}N263\\begin{endmatter}N264f\relaxN265\\end{endmatter}bR5.8pTheexamp"refaceenvironmentuTRTheexamprefaceenvironmentbGehavesjustlikethefrontmatterSenvironment,ex- Rceptmtheenclosedtextissavedminadi erently-namedmacro|onethatwillbGeRprintedUUjustbGeneathanytextspGeci edintheexamtopenvironment.ɍb\examprefaceRW*eFde ne\examprefacesothatitreadsinandsavesFthesurroundtexttoamacroRlikeUUinthetabularxenvironment. JN266\\def\exampreface{\@toklist={} N267adD\get@exampreface@body}f\endexamprefaceRThisUUdoGesn'tneedtodoanything.N268\\def\endexampreface{\relax} \get@exampreface@bodyRThisy[macrocollectseverythingbGetweenitandthenext\endtoken.Itthencalls RtheI\find@exampreface@endmacrotocheckIwhetherthe\endtokenbGelongstoRtheUUexamprefaceenvironmentorsomeotherenvironment. JN269\\long\def\get@exampreface@body#1\end{% N270f\@toklist=\expandafter{\the\@toklist#1}%N271f\find@exampreface@end}23 y? \find@exampreface@endRIf̫weareat\end{exampreface},*saveeverythingtotheappropriatelynamed Rmacro.qOtherwise,UUcontinuecollectingtokens N272\\def\find@exampreface@end#1{% N273f\def\@tempa{#1}%N274f\ifx\@tempa\@ExamprefaceN275o\expandafter\exampreface@wrap@upN276f\elseN277o\@toklist=\expandafter{\the\@toklist\end{#1}}%N278o\expandafter\get@exampreface@bodyN279f\fi}Ʋ\exampreface@wrap@upRSaveUUthescannedtexttoanappropriatelynamedmacroforlaterrecall.N280\\def\exampreface@wrap@up{%N281f\xdef\@examprefacetext{\the\@toklist}N282f\end{exampreface}} \@ExamprefaceRStoreUUthenameoftheenvironmentUUforcomparisonin\find@exampreface@endN283\\def\@Exampreface{exampreface}R5.9pTheexamclosingenvironmentuTRTheLDexamclosingoѲenvironmentbGehavesjustlikethefrontmatteroѲenvironment,Hexcept RtheUUenclosedtextissavedUUinadi erently-namedmacro.b\examclosingRW*eFde ne\examclosingsothatitreadsinandsavesFthesurroundtexttoamacroRlikeUUinthetabularxenvironment. N284\\def\examclosing{\@toklist={} N285adD\get@examclosing@body}f\endexamclosingRThisUUdoGesn'tneedtodoanything.N286\\def\endexamclosing{\relax} \get@examclosing@bodyRThisy[macrocollectseverythingbGetweenitandthenext\endtoken.Itthencalls RtheI\find@examclosing@endmacrotocheckIwhetherthe\endtokenbGelongstoRtheUUexamclosingxenvironmentorsomeotherenvironment.N287\\long\def\get@examclosing@body#1\end{% N288f\@toklist=\expandafter{\the\@toklist#1}%N289f\find@examclosing@end} \find@examclosing@endRIf̫weareat\end{examclosing},*saveeverythingtotheappropriatelynamed Rmacro.qOtherwise,UUcontinuecollectingtokensN290\\def\find@examclosing@end#1{%N291f\def\@tempa{#1}%N292f\ifx\@tempa\@ExamclosingN293o\expandafter\examclosing@wrap@upN294f\elseN295o\@toklist=\expandafter{\the\@toklist\end{#1}}%N296o\expandafter\get@examclosing@bodyN297f\fi}24y?Ʋ\examclosing@wrap@upRSaveUUthescannedtexttoanappropriatelynamedmacroforlaterrecall. JN298\\def\examclosing@wrap@up{% N299f\xdef\@examclosingtext{\the\@toklist}N300f\end{examclosing}}ɍ \@ExamclosingRStoreUUthenameoftheenvironmentUUforcomparisonin\find@examclosing@endN301\\def\@Examclosing{examclosing}aW*eFnowinitialize\@\examprefacetextand\@examclosingtextto\relaxso RthatЕincasetheuserdoGesn'tspecifyanyspecialtext,dnothingwillbetypesetinRtheUUactualexam.1N302\\begin{exampreface} N303f\relaxN304\\end{exampreface}N305\\begin{examclosing}N306f\relaxN307\\end{examclosing}bR5.10wThek"eyprefaceenvironmentuTRThekeyprefaceenvironmentbGehavesjustlikethefrontmatter;senvironment,$0except RtheUenclosedtextissavedUinadi erently-namedmacro|onethatwillbGeprintedRjustUUbGeneathanytextspeci edinthekeytopenvironment.ɍL\keyprefaceRW*ede ne\keyprefacesothatitreadsinandsavesthesurroundtexttoamacroRlikeUUinthetabularxenvironment. JN308\\def\keypreface{\@toklist={} N309adD\get@keypreface@body} 6\endkeyprefaceRThisUUdoGesn'tneedtodoanything.N310\\def\endkeypreface{\relax}Ʋ\get@keypreface@bodyRThisy[macrocollectseverythingbGetweenitandthenext\endtoken.Itthencalls Rthe*\find@keypreface@endmacrotocheck*whetherthe\endtokenbGelongstoRtheUUkeyprefaceenvironmentorsomeotherenvironment. JN311\\long\def\get@keypreface@body#1\end{% N312f\@toklist=\expandafter{\the\@toklist#1}%N313f\find@keypreface@end}Ʋ\find@keypreface@endRIfOweareat\end{keypreface},gsaveeverythingtotheappropriatelynamed Rmacro.qOtherwise,UUcontinuecollectingtokens JN314\\def\find@keypreface@end#1{%N315f\def\@tempa{#1}%N316f\ifx\@tempa\@KeyprefaceN317o\expandafter\keypreface@wrap@upN318f\elseN319o\@toklist=\expandafter{\the\@toklist\end{#1}}%N320o\expandafter\get@keypreface@bodyN321f\fi}25 :y?H\keypreface@wrap@upRSaveUUthescannedtexttoanappropriatelynamedmacroforlaterrecall.N322\\def\keypreface@wrap@up{% N323f\xdef\@keyprefacetext{\the\@toklist}N324f\end{keypreface}}b\@KeyprefaceRStoreUUthenameoftheenvironmentUUforcomparisonin\find@keypreface@endN325\\def\@Keypreface{keypreface}6R5.11wThek"eyclosingenvironmentuTRThe9keyclosing\environmentbGehavesjustlikethefrontmatter\environment,>except RtheUUenclosedtextissavedUUinadi erently-namedmacro.L\keyclosingRW*ede ne\keyclosingsothatitreadsinandsavesthesurroundtexttoamacroRlikeUUinthetabularxenvironment.N326\\def\keyclosing{\@toklist={} N327adD\get@keyclosing@body} 6\endkeyclosingRThisUUdoGesn'tneedtodoanything.N328\\def\endkeyclosing{\relax}Ʋ\get@keyclosing@bodyRThisy[macrocollectseverythingbGetweenitandthenext\endtoken.Itthencalls Rthe*\find@keyclosing@endmacrotocheck*whetherthe\endtokenbGelongstoRtheUUkeyclosingxenvironmentorsomeotherenvironment.N329\\long\def\get@keyclosing@body#1\end{% N330f\@toklist=\expandafter{\the\@toklist#1}%N331f\find@keyclosing@end}Ʋ\find@keyclosing@endRIfOweareat\end{keyclosing},gsaveeverythingtotheappropriatelynamed Rmacro.qOtherwise,UUcontinuecollectingtokensN332\\def\find@keyclosing@end#1{%N333f\def\@tempa{#1}%N334f\ifx\@tempa\@KeyclosingN335o\expandafter\keyclosing@wrap@upN336f\elseN337o\@toklist=\expandafter{\the\@toklist\end{#1}}%N338o\expandafter\get@keyclosing@bodyN339f\fi}H\keyclosing@wrap@upRSaveUUthescannedtexttoanappropriatelynamedmacroforlaterrecall.N340\\def\keyclosing@wrap@up{%N341f\xdef\@keyclosingtext{\the\@toklist}N342f\end{keyclosing}}b\@KeyclosingRStoreUUthenameoftheenvironmentUUforcomparisonin\find@keyclosing@endN343\\def\@Keyclosing{keyclosing}26*y?aW*eEnowinitialize\@keyprefacetextand\@keyclosingtextto\relaxso RthatЕincasetheuserdoGesn'tspecifyanyspecialtext,dnothingwillbetypesetinRtheUUactualexam.N344\\begin{keypreface} N345f\relaxN346\\end{keypreface}N347\\begin{keyclosing}N348f\relaxN349\\end{keyclosing}6R5.12wMacrosformanipulatingtokenlistsuTRInordertomakemanipulationoftokenlistseasier,\(or,really*,tojustincreasethe Roverallreadabilityofthesyntax,wede nesomemacrostomanipulatetokenlists.'3P\appendR\append{hstring}i!:}{htoken-listظi0}8appGendshstring}i&totherightmostendofhtoken-listظi2Ф.aNotethatweuse\@separatorbGetweenentriesinthelist,ratherthan\\asRrecommendedJintheTU>'ExXbGook,sinceJwewilllaterwanttorede nethelistseparatorRandpexe}'cute˲thelist.jIfweused\\,'vwerunintopGotentialcon ictsinexecutingRtheOlist,sinceL5ffA͉TU>'ExX2"(,atanygivenpGointduringtheexecutionofthelistentry*,RmightUUrede ne\\insuchawayastoscrewthingsup.N350\\def\append#1#2{% N351f\global\temp@toks=\expandafter{\the#2\@separator{#1}}%N352f\global#2=\expandafter{\the\temp@toks}}'3P\lengthRThe!usageis\length{htoken-listظi0}.+So\length{\foo}computesthelengthof RtheyItokenlist\foo,FwhereitisassumedthattheseparatorbGetweenlistelementsRisUU\@separator.N353\\def\length#1{% N354f\setcounter{length}{0}N355f\def\@separator##1{\stepcounter{length}}\the#1}'3P\removeR\remove{hnumb}'eri(}{htoken-listظi0}lremovesthehnumb}'eri+YDzthelementfromthetoken RlistYhhtoken-listظi3),Zlrede ningYhhtoken-listظi7JtoYhbGethatlist.}Asalways,weYhassumethatRtheUUlistelementsareseparatedbythetoken\@separator.N356\\def\remove#1#2{% N357f\exam@c=0N358f\temptoks={}N359f\def\@separator##1{\advance\exam@cby1\relaxN360tJ\ifnum\exam@c=#1\relax%N361tJ\setcounter{extract}{##1}%N362tJ\else\append{##1}{\temptoks}N363tJ\fi}N364f\the#2N365f\global#2=\expandafter{\the\temptoks}}274y?R5.13wScramblingtheorderofthequestionsuTRThe8generalideaisthat,qforeachsection,weformatokenlistnamed\qlist@sechci Rof-theform: {\@separator{1}\@separator{2}...\@separator{hnci*}-wherehciŲisRthenumbGerofthesection(inromannumerals),andhnci˲isthenumbGerofques-Rtionsminsectionhciز.W*ecallawhile-loGoptoloophncitimes,seachtimeremovingRaorandomlychosenentryfromthetokenlist.ThisentryisappGendedtothelistR\qlist@scrhmci@sechci k,wherehmcicisthecurrentvqalue(inromannumerals)ofRthedformwearegenerating.Oncethislistisbuilt,hdwecanthentypGesettheques-RtionsUUbysimplyrede ning\@separatorandexecutingthenewscrambledlist.t\@enddocumenthookRRede nekthe\@enddocumenthooksothatthequestionsareautomaticallygener-RatedwithouttheuserneedingtoinsertacommandafterallthequestionbloGcks.RThis:hastheironice ectthatabsolutelynothingtheuserseesintheinput leRcausespthetexttobGecreated.LIphaven'tpbeenrealcarefultopreventpcollisionsRoGccurringwithotherapplicationsthatuse\@enddocumenthook,sothiscouldbeRaUUsourceofproblems.aFirst,saveGanypreviouslyassignedmeaningto\@enddocumenthooksothatweRdon'tUUclobbGerit.N366\\let\@oldenddocumenthook=\@enddocumenthook N367\\def\@enddocumenthook{%RFirst,ninicasesomeoneusedthebloGckenvironment,rede neithequestionenviron-RmentUUsothatitdoGestherightthing.N368f\gdef\question{\item\@beforequestionhook} N369f\gdef\endquestion{\@endquestionhook}RW*eneedtocreatethenumbGerofformsspeci ed,(soweloopoverthetotalnumberRofforms.LInitializethecounterversionto1(thisisthevqaluewewillloGopover)Rand2Gstepthecounterform(sothatweactuallygeneratealltheformsthattheRuserUUwants).N370f\setcounter{version}{1} N371f\stepcounter{form}RLoGopUUuntilthevqalueofrversionexceedsform.N372f\@whilenum\value{version}<\value{form}\do{%RBut twopassespGerexamareneeded(oncefortheexam, 8oncefortheanswers), RsoZXwecreatean\inner-loGop"totakecareofthisproblem.SincewewillwanttheRanswerRkeytohaveaslightlydi erentformat(wheretheanswersareincluded!)RitUUpaystomakethisonthesecondpass.N373o\setcounter{innerloop}{0} N374o\@whilenum\value{innerloop}<\value{passes}\do{%RResetthepagecountersothatnonewexamsoranswerkeysstartonpage17(forRexample).N375w^\setcounter{page}{1}28?y?RIfinnerloop=0,twearemakinganexam.QTIfnot,wearemakingananswerkey*,tso RtakemStheappropriateactionforthetopoftheform.Sincewewon'twantabsent-Rmindedprofessorstomake200+copiesoftheanswerkey*,&printthetitleoftheRanswerUUkeyusing\Hugetocallattentiontoit.N376w^\ifx\@frontmattertext\relax N377\relaxN378w^\elseN379\@frontmattertext\pagebreakN380w^\fiN381w^\ifnum\value{innerloop}=0%N382\@examtopmatterN383\answerfalseN384\iftwocolumn\begin{multicols}{2}\fiN385\@examprefacetextN386w^\else%N387\@keytopmatterN388\answertrueN389\iftwocolumn\begin{multicols}{2}\fiN390\@keyprefacetextN391w^\fiN392w^\setcounter{sectionindex}{0}RAnd&> nally*,Zxoncewehavestartedmakingtheexam,ZxweneedtoloGopovereach RindividualUUsection.N393w^\@whilenum\value{sectionindex}<\value{section}\do{%N394]\addtocounter{sectionindex}{1}RStore8theromannumeralforthevqalueofsectionindexinthemacro\current@section RsoUUwecanuseitin\csname...\endcsnameUUpairs.N395]\edef\current@section{\roman{sectionindex}}RComputeUUthelengthof\qlist@sechcurr}'ent@sectionciN396]\length{\csnameqlist@sec\current@section\endcsname}RHere'sqthemainmeatofthecoGde.%PickarandomnumbGerbetweenq1andthelength Rofd\qlist@sechcurr}'ent@sectionciM_.Storeitinthecounter\exam@m.RemovedtheRmth\elementfrom\qlist@sechcurr}'ent@sectionciQ andstoreitasthe rstelementRina\qlist@scr@sechcurr}'ent@sectionciM_.ContinuingtodothiswillrearrangetheRorderSofthequestions.1TheonlythingweneedtokeepinmindistochangetheRrequestedGrangeoftherandomnumbGerGtokeepinmindthefactthatweremovedRan6elementfrom\qlist@sechcurr}'ent@sectionciM_.JAlthoughtherearefasterwaystoRdothis,"IchosetooptformorereadablecoGde,sincethispartoftheprogramissoRcomplexUUanyway*.N397]\csnamesec\current@section@fixed\endcsname N398]\ifnotfixedN399]\ifanswer\relax\elseN400]\typeout{Scramblingsection\current@section,question:}\fiN401]\@whilenum\value{length}>0\do{%N402\setrannum{\exam@m}{1}{\value{length}}N403\remove{\exam@m}{\csnameqlist@sec\current@section\endcsname}29My?N404\edef\@TEMP{\theextract} N405\ifnum\value{length}=1N406x\message{\@TEMP.}N407D\else\message{\@TEMP,}\fiRThe8two\expandafter'sarenecessarytopreventthetokenlist\qlist@scr@sechcurr}'ent@sectionci RfromUUconsistingofnothingbut\@separator{\@TEMP}\@separator{\@TEMP}...N408\expandafter\append\expandafter{\@TEMP}{\csnameN409Dqlist@scr@sec\current@section\endcsname}N410\length{\csnameqlist@sec\current@section\endcsname}}N411]\elseN412\csnameqlist@scr@sec\current@section\endcsname=\expandafter{%N413x\the\csnameqlist@sec\current@section\endcsname}N414]\fiRFinally*,>thecoGdedealingwithprocessingthedi erenttypGesofquestions. Each RtypGeTofquestionisprocessedintheexactsameway:weTperforman\ifxtotestRtoKseewhattypGeofquestionitis,andifitisthattypGeofquestion,executetheRfollowingcoGde,(/whichrede nes\begin{answer}...\end{answer}asnecessarytoRachieveUUthedesirede ects.aTheUU rsttypGeofquestionisshortanswerN415w^\expandafter\ifx\csnametype@sec\current@section\endcsname\@shortanswerRSpGecifyanexactmeaningfor\@separator,whichwillappearwhenweexecuteRtheUUquestionlist.N416]\def\@separator##1{\setcounter{temp}{##1} N417\edef\current@question{\roman{temp}}N418\csnamesec\current@section@qst\current@question\endcsname}RIfUUwearemakingaanswer,de netheanswerxenvironmenttobGethefollowing:N419\ifanswerN420]\gdef\answer{\begin{description}\item[Answer:]}N421]\gdef\endanswer{\end{description}}N422\elseROtherwise,UUmakeanswerxgobbletheanswerN423]\def\answer{\get@noanswer@body}N424]\def\endanswer{\relax}N425]\def\@S{answer}N426]\long\def\get@noanswer@body##1\end{\find@answer@end}N427]\def\find@answer@end##1{\def\@tempa{##1}N428\ifx\@tempa\@S\expandafter\finish@upN429D\else\expandafter\get@noanswer@body\fi}N430]\def\finish@up{\end{answer}}N431\fiRTypGesetUUthesectionheading.N432\par\vspace{\beforesectsep}N433\noindent{\largeSection\arabic{sectionindex}.\spaceN434 \csnamehead@sec\current@section\endcsname}N435 \par\vspace{\aftersectsep}30Y*y?N436\ifx\csnameinst@sec\current@section\endcsname\relax N437]\relaxN438\elseN439]\vspace{\beforeinstsep}N440]\csnameinst@sec\current@section\endcsnameN441]\par\vspace{\afterinstsep}N442\fiN443\begin{enumerate}N444L\the\csnameqlist@scr@sec\current@section\endcsnameN445\end{enumerate}N446w^\fi͍aTheUUnexttypGeofquestionis xed.qThisisjustlikeshortanswer. ͍N447w^\expandafter\ifx\csnametype@sec\current@section\endcsname\@fixedRSpGecifyanexactmeaningfor\@separator,whichwillappearwhenweexecute RtheUUquestionlist.N448]\def\@separator##1{\setcounter{temp}{##1} N449\edef\current@question{\roman{temp}}N450\csnamesec\current@section@qst\current@question\endcsname}͍RIfUUwearemakingaanswer,de netheanswerxenvironmenttobGethefollowing:N451\ifanswerN452]\gdef\answer{\begin{description}\item[Answer:]}N453]\gdef\endanswer{\end{description}}N454\else͍ROtherwise,UUmakeanswerxgobbletheanswerN455]\def\answer{\get@noanswer@body}N456]\def\endanswer{\relax}N457]\def\@S{answer}N458]\long\def\get@noanswer@body##1\end{\find@answer@end}N459]\def\find@answer@end##1{\def\@tempa{##1}N460\ifx\@tempa\@S\expandafter\finish@upN461D\else\expandafter\get@noanswer@body\fi}N462]\def\finish@up{\end{answer}}N463\fi͍RTypGesetUUthesectionheading.N464\par\vspace{\beforesectsep}N465\noindent{\largeSection\arabic{sectionindex}.\spaceN466 \csnamehead@sec\current@section\endcsname}N467 \par\vspace{\aftersectsep}N468\ifx\csnameinst@sec\current@section\endcsname\relaxN469]\relaxN470\elseN471]\vspace{\beforeinstsep}N472]\csnameinst@sec\current@section\endcsnameN473]\par\vspace{\afterinstsep}N474\fiN475\begin{enumerate}N476L\the\csnameqlist@scr@sec\current@section\endcsname31 dy?N477\end{enumerate}RTheSnextlineisnecessaryincasethe xedenvironmentSisthelastoneinanexam. RIf]otherenvironments]appGearafter xed,thenthisswitchwillbereversedattheRstartɖoftheloGopthatscramblestheorderofthequestions.C2ButifnoenvironmentsRappGearafter xed, thisswitchwillremainset,causingthereassignmentoftokenRlistsabGelowtofail.I.e.,fr}'omhereonoutnorearrangmentoftheexamquestionsRwillo}'ccur.qDzThat'sUUwhyweincludethebGelowswitch.N478\global\notfixedtrue N479w^\fiRTheUUnexttypGeofquestionis ll-in-the-blankN480w^\expandafter\ifx\csnametype@sec\current@section\endcsname\@fillinRDe neUU\@separatoragain.N481\def\@separator##1{\setcounter{temp}{##1} N482]\edef\current@question{\roman{temp}}N483]\csnamesec\current@section@qst\current@question\endcsname}RDe ne\blanksothatiteithermakesjustanunderlineoranunderlinewiththe RwordUUprintedoverit.N484\ifanswerN485]\ifcblanksN486\def\blank##1{\mbox{\rule[-1pt]{\blank@length}{.4pt}%N487D\hspace{-\blank@length}%N488D\makebox[\blank@length]{##1}}}N489]\fiN490]\ifpblanksN491\def\blank##1{\settowidth{\temp@length}{##1}%N492D\mbox{\rule[-1pt]{\blank@multiplier\temp@length}{.4pt}%N493D\hspace{-\blank@multiplier\temp@length}%N494D\makebox[\blank@multiplier\temp@length]{##1}}}N495]\fiN496]\elseN497L\ifcblanksN498\def\blank##1{\rule[-1pt]{\blank@length}{.4pt}}N499L\fiN500L\ifpblanksN501\def\blank##1{\settowidth{\temp@length}{##1}%N502D\rule[-1pt]{\blank@multiplier\temp@length}{.4pt}}N503L\fiN504\fiRTypGesetUUthesectionheading.N505\par\vspace{\beforesectsep}N506\noindent{\largeSection\arabic{sectionindex}.\spaceN507 \csnamehead@sec\current@section\endcsname}N508 \par\vspace{\aftersectsep}N509\ifx\csnameinst@sec\current@section\endcsname\relaxN510]\relaxN511\else32!nty?N512]\vspace{\beforeinstsep} N513]\csnameinst@sec\current@section\endcsnameN514]\par\vspace{\afterinstsep}N515\fiN516\begin{enumerate}N517]\the\csnameqlist@scr@sec\current@section\endcsnameN518\end{enumerate}N519w^\fiRW*eDnowconductaseriesofteststoseeexactlywhattypGeofquestionthecurrent RsectionLcontains.Onceamatchismade,Itheappropriatemacro(de nedbGelow)RisUUexpanded,whichtypGesetsallthequestionsinthatsection.N520\expandafter\ifx\csnametype@sec\current@section\endcsname\@fillinstar N521]\@fillinstarmainN522\fiN523\expandafter\ifx\csnametype@sec\current@section\endcsname\@MCN524]\@multiplechoicemainN525\fiN526\expandafter\ifx\csnametype@sec\current@section\endcsname\@MCstarN527]\@multiplechoicestarmainN528\fiN529\expandafter\ifx\csnametype@sec\current@section\endcsname\@shortanswerstarN530]\@shortanswerstarmainN531\fiN532\expandafter\ifx\csnametype@sec\current@section\endcsname\@truefalseN533]\@truefalsemainN534\fiN535\expandafter\ifx\csnametype@sec\current@section\endcsname\@truefalsestarN536]\@truefalsestarmainN537\fiN538\expandafter\ifx\csnametype@sec\current@section\endcsname\@fixedstarN539]\@fixedstarmainN540\fiN541}RThisUUistheendofthecoGdeforthesectionswhile-loop.N542w^\ifnum\value{innerloop}=0%N543\@examclosingtext\parN544w^\elseN545\@keyclosingtext\parN546w^\fiN547w^\iftwocolumn\end{multicols}\fiN548w^\ifx\@endmattertext\relaxN549\relaxN550w^\elseN551\pagebreak\@endmattertext\parN552w^\fiN553w^\pagebreakN554w^\addtocounter{innerloop}{1}}N555y2\@OneKeyHook33"x̠y?RThisistheendofthecoGdefortheinnerwhile-loop(thatgeneratesbothexams RandmUanswersheets.T*ogglethevqalueof\ifanswersothatonthesecondpassweRgenerateUUanswerstothequestions.qAddonetoinnerloop,toGo. {N556y2\stepcounter{version} N557y2\setcounter{sectionindex}{0}{RThisBistheendofthecoGdefortheformwhile-loop.kAdd-1toformtokeeptrackRof3thenumbGer3ofcopieswe've3made,*andrede nethe\qlist@sechse}'ctionci*+ lists,Rsince(theywereeatenupby\removeduringtherandomization.P(ThisiswhattheRnextUUloGopdoes.)N558y2\@whilenum\value{sectionindex}<\value{section}\do{% N559w^\addtocounter{sectionindex}{1}N560w^\edef\current@section{\roman{sectionindex}}N561w^\csnamesec\current@section@fixed\endcsnameN562w^\ifnotfixedN563w^\csnameqlist@sec\current@section\endcsname=\expandafter{\the\csnameN564qlist@scr@sec\current@section\endcsname}N565w^\csnameqlist@scr@sec\current@section\endcsname={}N566w^\else\notfixedtrue\fi}N567y2}} R6jLThefflayoutoftheexamt\NumberOfVersionsRAuser-level}.΍}.}.}.}.}.}. f575{577,T7773{eA˪\addtolengthYҍ}.΍}.}.}.}.}. 73˪\afterinstsep P71{73,骬441,473,514,骬866,886,910,骬937,986,1041,1078˪\aftersectsep467,T68,骬435,467,508,骬859,880,903,骬931,979,1034,1071˪\answer420,T423,452,骬455,922,924,骬967,Z969,1016,骬1019, 1053,1056˪\answerfalseYҍ}.΍}.}.}.}.}.383˪\answerspaceYҍ}.΍}.}.}.}. 1094 ꠟfe˪\answertrue}.΍}.}.}.}.}.}.388˪\append&131,350џfe ,362,408yaB {EUX\beforeinstsepy69,g70, cUX439,471,512,cUX864,884,908,cUX935,984,1039,1076EUX\beforesectsepy65,g66,cUX432,464,505,cUX857,877,901,cUX928,977,1032,1069EUX\bigskip}.΍}.}.}.}. 782,T801EUX\blankP}.΍}.}.}.}.}.}. B486,cUX491,498,501,cUX834,'%839,846,849EUX\blank@length- }.΍}. r61,cUX486{488,G2498,cUX757,3834{836,846EUX\blank@multiplieryꍑ}.cUX}. 1492{494,T502,cUX758,3840{842,850EUX\blockP}.΍}.}.}.}.}.}.}.}.}.}.190Пfe EUXblockT(en9vironment)*}.΍}. aS0j cmti98EUX\block@wrap@up h196,T199Tfe EUX\boxfalsel}.΍}.}.}.}.}. T15,T16EUX\boxtrue}.΍}.}.}.}.}.}.}.}. 12EUX\Bwrap@up@instructionscUX}.΍}.}.}.}. )N98,T109,113=qyR(CEUX\cblanksfalse- }.΍}. $77,T758EUX\cblankstrueYҍ}.΍}.}.}.}.}.757EUX\choiceƈ}.΍}.}.}.}.}.}.}.}.}.719Пfe EUX\choicefalseYҍ}.΍}.}. $74,T739EUX\choicetrue}.΍}.}.}.}.}.}.721EUX\classP}.΍}.}.}.}.}.}.}.}. j3,T571EUX\classdata@0}.΍}.}. 571 fe ,T777EUX\ConstantBlanksz}. j3,T757Tfe EUX\current@questionyꍑ}.cUX}.΍}.}.}. l417,T418,cUX449,450,482,cUX483,830,831,cUX875,876,896,cUX897,917,918,cUX925,962,963,cUX970, 1013,1014,cUX1050, 1051,1088EUX\current@section}.΍}.cUX}. 1395{397,T400,cUX403,409,410,cUX412,413,415,cUX418,434,436,536Ty?p440,444,447, p450,466,468,p472,476,480,p483,507,509,p513,517,520,p523,526,529,p532,535,538,p560,561,563{p565,825,831,p854,858,861,p865,869,876,p879,881,885,p889,897,898,p902,905,909,p913,918,930,p932,936,947,p957,963,974,p978,981,985,p996, 1006,1014,p1029,.1033,p1036,.1040,p1044,.1051,p1066,.1070,p1073, 1077,1081 "鍑R\CurrentOptionB}.΍}.}.}. 23hDR\DeclareOptionB}.΍}.}.}. p}.΍}.}.}. :15{18,T21{23VER\endanswer q421,T424, p453,Z456,1017,p1020, 1054,1057 "鍑R\endblockl}.΍}.}.}.}.}.}.}.223Пfe R\endendmatter- }.΍}.}.}.}.244Пfe R\endexamclosingz}.΍}.}.286Пfe R\endexamprefacez}.΍}.}.268Пfe R\endexamtop}.΍}.}.}.}.}.}.764Пfe R\endfrontmatterz}.΍}.}.226Пfe R\endkeyclosingB}.΍}.}.}.328Пfe R\endkeyprefaceB}.΍}.}.}.310Пfe R\endkeytop@0}.΍}.}.}.}.}.}.786Пfe R\endmatter@0}.΍}.}.}.}.}.}.242Пfe Rendmatter(en9viron- pmen9t)؍}.΍}.}.}.}.}.}. ?10R\endmatter@wrap@upT}.p}.΍}.}.}.}.}.}.}. i251,T256Tfe R\endquestion137fe },v369,p828,873,894,骬920,965,1011,1048 ˪\endsection}.΍}.}. 119,T122˪en9vironments:ڪblockƂ}.΍}.}.}.}.}.}.}.}.}. aS8ڪendmatter}.΍}.}.}.}.}. 5910ڪexamclosing-}.΍}.}.}. 5911ڪexampreface-}.΍}.}.}. 5911ڪexamtopl}.΍}.}.}. ¹10,T40ڪfillin*l}.΍}.}.}.}.}.}. 35 Οfe ?ڪfillin}.΍}.}.}.}.}.}.ʚ4,T35Tfe ?ڪfixed*}.΍}.}.}.}.}.}.}. 38 Οfe ?ڪfixedƂ}.΍}.}.}.}.}.}.}.ʚ8,T37Tfe ?ڪfrontmatter-}.΍}.}.}. 5910ڪkeyclosingY̍}.΍}.}.}.}. 5911ڪkeyprefaceY̍}.΍}.}.}.}. 5911ڪkeytop}.΍}.}.}.}. ¹10,T41ڪmultiplechoice*37fe ?ڪmultiplechoice x7,T37Tfe ?ڪsectionl}.΍}.}.}.}.}.}. 17 Οfe ?ڪshortanswer*<}.΍}.}. 36 Οfe ?ڪshortanswer-}.΍}.}.ʚ5,T36Tfe ?ڪtruefalse*Y̍}.΍}.}.}.}. 36 Οfe ?ڪtruefalse}.΍}.}.}.}.ʚ6,T35Tfe ?˪\exam 11,T1095TfeL,T1098, 骬1099, 1101,1102˪\exam@c X83,T357,359,360˪\exam@mƈ}. 85,T86,402,403˪\exam@nƈ}.΍}.}.}.}.}.}.}.}.}. 84˪\examclosingYҍ}.΍}.}.}.}.}.284Пfe ˪examclosing.(en9viron-骬men9t)؍}.΍}.}.}.}.}.}. ?11˪\examclosing@wrap@up骬}.΍}.}.}.}.}.}.}. i293,T298Tfe ˪\examhspace}.΍}.}. x 11,T1100Tfe˪\examhspace*Yҍ}.΍}.}.}.}.}. 5911˪\examnamel}.΍}. c3,T573,574˪\examprefaceYҍ}.΍}.}.}.}.}.266Пfe ˪exampreface.(en9viron-骬men9t)؍}.΍}.}.}.}.}.}. ?11˪\exampreface@wrap@up骬}.΍}.}.}.}.}.}.}. i275,T280Tfe ˪\examtop}.΍}.}.}.}.}.}.}.}.762Пfe ˪examtopT(en9vironment)骬}.΍}.}.}.}.}.}.}.}. 10,T40˪\examtypel}.΍}.}.}. 573 fe ,T778˪\examvspace}.΍}.}. x 11,T1097Tfe˪\examvspace*Yҍ}.΍}.}.}.}.}. 5911"鍒'NF˪\fboxsep}.΍}.}.}.}. 725,T726EUXfillinT(en9vironment) cUX}.΍}.}.}.}.}.}.}.}. >4,T579Tfe {BEUXfillin*v(en9vironment)l592lfe EUX\find@answer@end}.΍}.cUX}.΍}.}.}. l426,T427,cUX458,Z459,1022,cUX1023, 1059,1060EUX\find@block@endc193,T194Tfe EUX\find@endmatter@endcUX}.΍}.}.}.}.}.}.}. i247,T248Tfe EUX\find@examclosing@endcUX}.΍}.}.}.}.}.}.}. i289,T290Tfe EUX\find@exampreface@endcUX}.΍}.}.}.}.}.}.}. i271,T272Tfe EUX\find@examtop@endyꍑ}.cUX}.΍}.}.}.}.}.}.}. i767,T768Tfe EUX\find@frontmatter@endcUX}.΍}.}.}.}.}.}.}. i229,T230Tfe EUX\find@instructions@endcUX}.΍}.}.}.}.}.}.}.}. (91,T92Tfe ?EUX\find@keyclosing@endcUX}.΍}.}.}.}.}.}.}. i331,T332Tfe EUX\find@keypreface@endcUX}.΍}.}.}.}.}.}.}. i313,T314Tfe EUX\find@keytop@end}.΍}.cUX}.΍}.}.}.}.}.}.}. i788,T789Tfe EUX\find@question@endT}.cUX}.΍}.}.}.}.}.}.}. i139,T140Tfe EUX\finish@up q428,T430,cUX460,Z462,1024,cUX1026, 1061,1063EUX\FirstQuestionInBlocktruecUX}.΍}.}.}.}.}.}.}.}.}.}.}. ]80EUXfixedY(en9vironment)8,J683Jfe EUXfixed*T(en9vironment) d696 dfe EUX\frontmatterYҍ}.΍}.}.}.}.}.224Пfe EUXfrontmatter.(en9viron-cUXmen9t)؍}.΍}.}.}.}.}.}. ?10EUX\frontmatter@wrap@upcUX}.΍}.}.}.}.}.}.}. i233,T238Tfe EUX\Fullpages@0}.΍}.}.}.}.}.}.749Пfe qǍxgGEUX\get@block@bodyz}.΍}.}.cUX}.΍}.}.}. 191,T192Tfe N,T198EUX\get@endmatter@bodycUX}.΍}.}.}. 243,T245Tfe N,T254EUX\get@examclosing@bodycUX}.΍}.}.}. 285,T287Tfe N,T296547py?R\get@exampreface@body p}.΍}.}.}. 267,T269Tfe N,T278 R\get@examtop@bodyyꍑ}.p}.΍}.}.}. 763,T765Tfe N,T772R\get@frontmatter@bodyp}.΍}.}.}. 225,T227Tfe N,T236R\get@instructionsyꍑ}.p}.΍}.}.}.}. 90 fe ?^,T101,p590,603,616,p629,642,655,p668,'%681,694,707R\get@keyclosing@bodyp}.΍}.}.}. 327,T329Tfe N,T338R\get@keypreface@bodyp}.΍}.}.}. 309,T311Tfe N,T320R\get@keytop@body}.΍}.p}.΍}.}.}. 785,T787Tfe N,T793R\get@noanswer@bodyT}.p}.΍}.}.}.}.}.}.}. _H423,p426,429,455,p458,Z461,1019,p1022,.1025,p1056, 1059,1062R\get@question@bodyT}.p}.΍}.}.}. 136,T138Tfe N,T144\)uHR\hrulefill@0}.΍}.}. 575{578R\hspaceƈ}.΍}.}. 487,T493,p835,Z841,1101,p1102, 1107,1108\)4IR\identifierfalse}.΍}. 79R\ifanswerl}.΍}.}.}.}. r75,p399,419,451,p484,723,832,p921,939,966,p988, 1015,1052,p1087,1094{1096R\ifboxP}.΍}.}.}.}.}.}.}. $12,T725R\ifcblanks@0}.΍}.}.}. r77,p485,'%497,833,845R\ifchoicel}.΍}.}.}.}. $74,T720R\ifFirstQuestionInBlockp}.΍}.}.}.}.}.}.}.}.}.}.}. ]80R\ifidentifier- }.΍}.}.}.}. 79R\ifincludeformB}.΍}.}.}.p}.΍}.}.}.}.}. <~7,T778,799R\ifmcboldl}.΍}.}.}.}.}.}.9,T27˪\ifmcunder@0}.΍}. 10,T28,34 F˪\ifnotfixed c76,T398,562˪\ifpblanks@0}.΍}.}.}. r78, 骬490,'%500,838,848˪\ifsection@0}.΍}.}.}.}.}.}.824Пfe ˪\iftwocolumnYҍ}.΍}.}.}.}.}.13,J26,384,389,547˪\ifulemƈ}.΍}.}.}.}.}.}.}.}.}. 11˪\includeformfalseyꍑ}. 21˪\includeformtrue}.΍}.}. 8˪\instructions- }.΍}.}.}.}.570Пfe ˪\item }. j183,T216,219,骬368,420,452,骬725,728,730,骬733,827,872,骬892, 1010,1016,骬1047,.1053,骬1088, 1090,1092˪\itemindent}.΍}.}. B747,骬945,{955,994,1004˪\itemsep}.΍}.}.}.}. B748,骬946,{956,995,1005EҍUK˪\keyL}.%11,T1096TfeL,T1104,骬1105, 1107,1108˪\keyclosing}.΍}.}.}.}.}.}.326Пfe ˪keyclosing 4(en9viron-骬men9t)؍}.΍}.}.}.}.}.}. ?11˪\keyclosing@wrap@up骬}.΍}.}.}.}.}.}.}. i335,T340Tfe ˪\keyhspace@0}.΍}.}. x 12,T1106Tfe˪\keyhspace*}.΍}.}.}.}.}.}. 5912˪\keypreface}.΍}.}.}.}.}.}.308Пfe ˪keypreface 4(en9viron-骬men9t)؍}.΍}.}.}.}.}.}. ?11˪\keypreface@wrap@up骬}.΍}.}.}.}.}.}.}. i317,T322Tfe ˪\keytopƈ}.΍}.}.}.}.}.}.}.}.}.784Пfe ˪keytopT(en9vironment)骬}.΍}.}.}.}.}.}.}.}. 10,T41˪\keyvspace@0}.΍}.}. x 12,T1103Tfe˪\keyvspace*}.΍}.}.}.}.}.}. 5912˪\KYtop@wrap@up h791,T794Tfe EҍM,L˪\labelsepl}.΍}.}.}. B746,骬944,{954,993,1003˪\labelwidth}.΍}.}. B744,骬942,{952,991,1001EUX\leftmargin}.΍}.}. B745, cUX943,{953,992,1002 EUX\lengthƈ}.΍}.}.J353Jfe D,T396,410EUX\letL}.r95,T98,101,366,cUX808,'%811,814,817EUX\linewidth@0}.΍}.}. B165,cUX175,{872,892,1092EUX\LoadClass@0}.΍}.}.}.}.}.}. 25XxMEUX\make@qlist}.΍}.}. 122,T123Tfe EUX\makebox}.΍}.}.}.}.}.}.}.}.cUX}. 5t488,T494,836,842EUX\mcboldfalseYҍ}.΍}.}.}.}.}.}. 9EUX\mcboldtrue}.΍}.}.}.}.}.}. 15EUX\MCfontD29,31,35,37,728EUX\mcunderfalse- }.΍}.}.}.}. 10EUX\mcundertrueYҍ}.΍}.}.}.}.}. 16EUX\medskipamountB}.΍}.}.}.cUX}.΍}.}.}. 66,T68,70,72EUXmultiplechoicec(en9vi-cUXronmen9t)}. >7,T657Tfe EUXmultiplechoice*(en9vi-cUXronmen9t)}.΍}.}. J670 Jfe XyNEUX\namedatal}.΍}.}.}. 575 fe ,T781EUX\namedata@vspace}.΍}.cUX}.΍}. O64,T575{577,760EUX\NeedsTeXFormatz}.΍}.}.}. 3EUX\newcommand719,T749,760EUX\newcountl}.΍}.}.}.}.}. p83{85EUX\newcounter}.΍}.}.}.}.}.}.cUX}.΍}. 5,T43{56,58{60EUX\newenvironmentz}.΍}.}.cUX}. *579,T592,605,cUX618,631,644,cUX657,'%670,683,696EUX\newifP}.΍}.}. 7,T9{13,74{80EUX\newlength@0}.΍}.}.}.}.}.}.cUX}. r61{65,T67,69,71EUX\newtoks}.΍}.}.}.}.}.}.}.}.f81,T82,87,126,127EUX\nextrandom}.΍}.}.}.}.}.}. 5915EUX\noexpandl}.΍}.}.}. B150,cUX151,153,157,cUX158,160,164{cUX166,G2168{170,558Ly?p174{176, 8178{ p180,183,184,p186,'%203,204,206R\notfixedfalse h688,T701R\notfixedtrue- }. B478,p566,584,597,p610,623,636,p649,{662,675,1083R\NumberOfVersions3,T568Tfe 2PR\parboxƈ}.΍}.}.}.}.}. 777,T781R\PassOptionsToClass 23R\pblanksfalse- }.΍}.}.}.}.757R\pblankstrueYҍ}.΍}.}. $78,T758R\pointless@0}.΍}.}.}.}.}.}. 5915R\ProcessOptionsz}.΍}.}. 24R\ProportionalBlanksp}.΍}.}.}.}.}.}.}.}. >3,T758Tfe R\ProvidesClassB}.΍}.}.}.}. 4R\ProvidesFile- }.΍}.}.}.}.}. 2YQR\questionl}. 135 fe ,T368,p827,872,892,p919,964,1010,1047˪\Qwrap@up@instructions 骬}.΍}.}.}.}.}.}.}. 95,T103Tfe R˪\removeƈ}.΍}.}.}.}.}. 356 fe ,T403˪\RequirePackagez}.΍}.}. 26˪\rule }.΍}.}.}.}.}.}.}. B486,骬492,498,502,骬834,'%840,846,850S˪\section}.΍}.}.}.}.}.}.}.}. 88˪sectionT(en9vironment)88̟fe ?˪\setrandimenYҍ}.΍}.}.}.}.}. 5915˪\setrannum@0}. J15,T86,402˪\settowidth}.΍}.}.}.}.}.}.骬}. 5t491,T501,839,849˪shortanswer.(en9viron-骬men9t)؍}.΍}.}.}. >5,T631Tfe ˪shortanswer*u(en9viron-骬men9t)؍}.΍}.}.}.}.}. J644 Jfe ˪\stop }. un804,T810,822,823˪\StudentInfoLineSpacing骬}.΍}.}.}.}.}.}.}.}. >3,T760Tfe T˪\temp@@length- }.΍}.}.}.}. 63EUX\temp@length62,T491{ cUX494,501,502,cUX839{842,3849,850 !EUX\temp@toks82,T351,352EUX\temptoksl}.΍}.}.}.}.}.}.}. cUX}. r81,T358,362,365EUX\textbfƈ}.΍}.}.}.}.}.}.}. T29,T31EUX\theextract}.΍}.}.}.}.}.}.404EUXtruefalse(en9viron-cUXmen9t)؍}.΍}.}.}. >6,T605Tfe EUXtruefalse* 4(en9viron-cUXmen9t)؍}.΍}.}.}.}.}. J618 Jfe EUX\twocolumnfalsez}.΍}.}. 13EUX\twocolumntrueB}.΍}.}.}. 22EUX\typeout}.΍}.}.}.}.}.}.}.}.400!dyUEUX\ulemfalse@0}.΍}.}.}.}.}.}. 11EUX\ulineP}.΍}.}.}. iH29,T35,1088wgWEUX\word }.΍}.}.}.}.}.}.}.}. P12,T803Tfe EUX\wrap@up}.΍}.}.}.}. 142,T145Tfe y&XEUX\XMtop@wrap@up h770,T773Tfe 56;y 80j cmti9,@ cmti12+kAH cmssbx10*"V cmbx10)8)cmsl8(p0J cmsl10'N cmbx12& cmmi10K`y cmr10ٓRcmr7