÷ƒ’À;è TeX output 1997.01.23:0050‹ÿÿÿÿ ª ýs o ýÞ’±y™óDÓítG®G®cmr17¹The–7tóÖÆG®G®cmss17ºtabulašŒqrx“¹pac˜k‘ÿäageŸùº¯ó!",š cmsy10¿ŽŽŽŸ’Õþ­óX«Q cmr12»Da¬rvid‘ê¨CarlisleŽŽŸ’ÃpScarlisle@cs.man.ac.ukŽŽŽŽŽŸ&37’Ý 1995/03/20ŽŸ.’æ!Kót ‰: cmbx9ÇAbstractŽŸ¬Ñ‘oßüóo´‹Ç cmr9ÆA‘å‡new›å½en•¾9vironmen“t,–×óߤN cmtt9ÈtabularxÆ,“is˜de ned,“whic•¾9h˜tak“es˜the˜same˜argu-Ž¤ ‘bmen¾9ts–áFas“Ètabular*Æ,›ë¯but“moAÇdi es“the“widths“of“certain“columns,˜rather“thanŽ¡‘bthe–cin¾9ter“column“space,‘wto“set“a“table“with“the“requested“total“width.‘#TheŽ¡‘bcolumns–á¹that“maš¾9y“stretc˜h“are“mark˜ed“with“the“new“tok˜en“ÈX‘á¬Æin“the“pream˜bleŽ¡‘bargumen¾9t.Ž¡‘oßüThis–Tpacš¾9k‘ÿ|rage“requires“the“Èarray“Æpac˜k‘ÿ|rage.Ž©!Ä‘IóÂÖN ff cmbx12Ê1Ž‘aLËInŒÌtros3ductionŽŸç‘IóKñ`y cmr10²This–=pacš¸ãk‘ÿqÇage“implemen˜ts“a“v˜ersion“of“the“ó ßê‘ "5Ÿý-:ó¹Aa¨cmr6Á1ŽŽŽ‘LÜÀY‘ÿJªou–ÕXcan“noÃŽw“use“ó"ßCÊscmtt8Í\footnote“Àinside“ÍtabularxÀ!ŽŽŸ’ø²1ŽŽŒ‹* ª ýs o ýË™‘d€ŸßL͉ff,¤fd¤™œ„ ff–&»Ÿüfd²Multicolumn‘UUen¸ãtry!“¡„ ffŽ’‘ÚOTHREE‘Ÿ™œ„ ffŽ’Áò€F¸ãOURŽŽ’+™›Ÿ™œ„ ffŽŽŸ‰ff,¡¤'™œ„0ff–ŸØfdone“¡„0ffŽ‘!ÌÎThe–UUwidth“of“thisŽ¤ ‘!ÌÎcolumn–UUdepGends“onŽ¡‘!ÌÎthe–UUwidth“of“the“table.ŽŽ’‹séŸ'™œ„0ffŽ’˜“4three‘ ¸åŸ'™œ„0ffŽ’Áò€Column–UUfour“will“actŽ¤ ’Áò€in–UUthe“same“w•¸ãa“y‘UUasŽ¡’Áò€column›UUt•¸ãw“o,˜with˜theŽ¡’Áò€same‘UUwidth.ŽŽ’+™›Ÿ'™œ„0ffŽŽŸ(‰ff,ŽŽŽŸ5çÚ‘IÊ3Ž‘aLËDi erences›ffbs3et•ŒÌw“een˜ó#߆µTff cmtt12Îtabularx˜Êand˜Îtabular*ŽŸç‘I²These›‹§t•¸ãw“o˜en“vironmen“ts˜tak“e˜the˜same˜argumen“ts,‘³þto˜pro•Gduce˜a˜table˜of˜a˜sp“eci edŽ¤ ‘Iwidth.‘qÇThe–UUmain“di erences“bGet•¸ãw“een–UUthem“are:ŽŸÆg‘X¸ŽŽŽ‘bËtabularx–²mošGdi es“the“widths“of“the“Ìc‘ÿ}'olumns²,‘Kïwhereas“Ëtabular*“²mo˜di esŽ¡‘bthe–UUwidths“of“the“in¸ãter-column“Ìsp–ÿ}'ac“es².Ž©c4‘X¸ŽŽŽ‘bËtabular–Íp²and“Ëtabular*“²en•¸ãvironmen“ts›Ípma“y˜bGe˜nested˜with˜no˜restriction,Ž¡‘bho•¸ãw“ev“er–[“if“one“Ëtabularx“²en•¸ãvironmen“t–[“oGccurs“inside“another,‘]"then“the“innerŽ¡‘bone–UUÌmust‘H-²bGe“enclosed“b¸ãy“Ë{‘?ý}².Ž¦‘X¸ŽŽŽ‘b²The›ë6b•Go“dy˜of˜the˜Ëtabularx˜²en•¸ãvironmen“t˜is˜in˜fact˜the˜argumen“t˜to˜a˜com-Ž¡‘bmand,‘ã‰and–Çso“certain“constructions“whicš¸ãh“are“not“allo˜w˜ed“in“command“ar-Ž¡‘bgumen•¸ãts›UU(lik“e˜Ë\verb²)˜ma“y˜not˜bGe˜used.Ÿü^ÿ±2ŽŽŽ¦‘X¸ŽŽŽ‘bËtabular*–P˜²uses“a“primitivš¸ãe“capabilit˜y“of“T‘þU>Ÿ'EŽ‘ãxX“to“moGdify“the“in˜ter“column“spaceŽ¡‘bof–˜¦an“alignmenš¸ãt.‘;»Ëtabularx“²has“to“set“the“table“sev˜eral“times“as“it“searc˜hesŽ¡‘bfor–íthe“bGest“column“widths,‘Îand“is“therefore“m•¸ãuc“h›íslo“w“er.‘U¤Also˜the˜fact˜thatŽ¡‘bthe›UUb•Go“dy˜is˜expanded˜sev•¸ãeral˜times˜ma“y˜break˜certain˜T‘þU>Ÿ'EŽ‘ãxX˜constructs.ŽŸ ÎB‘IÊ4Ž‘aLËCustomising–ffthe“bs3ehaŒÌviour“of“ÎtabularxŽŸç‘Ió$ÂÖN  cmbx12Ï4.1Ž‘gÀT‘þàerminal‘€outputŽ©uT‘I²If–ûothis“declaration“is“made,‘dösaš¸ãy“in“the“doGcumen˜t“pream˜ble,‘döthen“all“follo˜wingŽ‘òf È\tracingtabularxŽŽŽŽ¡‘IËtabularx›" ²en•¸ãvironmen“ts˜will˜prin“t˜information˜abGout˜column˜widths˜as˜they˜re-Ž¡‘IpGeatedly–UUre-set“the“tables“to“ nd“the“correct“widths.Ž¡‘XAs–°an“alternativ¸ãe“to“using“the“Ë\tracingtabularx“²declaration,‘Ñ either“of“the“op-Ž¡‘Itions–ºËinfoshow“²or“Ëdebugshow“²maš¸ãy“bGe“giv˜en,‘( either“in“the“Ë\usepackage“²commandŽ¡‘Ithat–UUloads“Ëtabularx²,“or“as“a“global“option“in“the“Ë\documentclass“²command.ŽŸº´‘IÏ4.2Ž‘gÀThe›€en• vironmen“t˜used˜to˜t“yp`eset˜the˜ó%߆µT cmtt12ÐX˜ÏcolumnsŽ¦‘I²By–dUdefault“the“ËX‘cβspGeci cation“is“turned“inš¸ãto“Ëp{¸hÌsomeŽ‘B+value‘À[¸iŽ‘:!ÇË}².‘ žÈSuc˜h“narro˜wŽ¡‘Icolumns–†)often“require“a“spšGecial“format,‘Ò^this“ma¸ãy“b˜e“ac•¸ãhiev“ed–†)using“the“Ë>“²syn-Ž¡‘Itax–>of“Ëarray.sty².‘ŸƒSo“for“example“yš¸ãou“ma˜y“giv˜e“a“spGeci cation“of“Ë>{\small}X².Ž¡‘IAnother–Ÿþformat“whicš¸ãh“is“useful“in“narro˜w“columns“is“ragged“righ˜t,‘ÄCho˜w˜ev˜er“LŸýó5‘üff±AŽŽ‘͉²T‘þU>Ÿ'EŽ‘ãxX'sŽ¡‘IË\raggedright–ž{²macro“rede nes“Ë\\“²in“a“w•¸ãa“y›ž{whic“h˜con icts˜with˜its˜use˜in˜a˜tab-Ž¡‘Iular–Â-or“arraš¸ãy“en˜vironmen˜ts.‘¸OF‘ÿ*ªor“this“reason“this“pac˜k‘ÿqÇage“in˜troGduces“the“com-Ž‘÷ 6È\arraybackslashŽŽŽŽ¡‘I²mand–ôÐË\arraybackslash²,›®this“ma¸ãy“bGe“used“after“a“Ë\raggedright²,˜Ë\raggedleftŽ¡‘I²or–UUË\centering“²declaration.‘qÇThš¸ãus“a“Ëtabularx“²pream˜ble“ma˜y“spGecifyŽ¡‘IË>{\raggedright\arraybackslash}X².Ž‘IŸ}‰ffÿrŸ J=‘ "5Ÿý-:Á2ŽŽŽ‘LÜÀSince–3V‘ÿJªersion“1.02,›(éÍ\verb–@and“\verb*–3ÀmaÃŽy“b{\small\raggedright\arraybackslash}X}Ž¡‘I²and–UUthen“use“ËY“²in“the“Ëtabularx“²preamš¸ãble“argumen˜t.Ž¡‘XThe–xMËX‘xD²columns“are“set“using“the“Ëp“²column“whic¸ãh“correspGonds“to“Ë\parbox[t]².Ž‘÷ 6È\tabularxcolumnŽŽŽŽ¡‘I²Y‘ÿ*ªou–µAmaš¸ãy“w˜an˜t“them“set“using,–;sa˜y‘ÿ*ª,“the–µAËm“²column,‘;whic˜h“correspGonds“toŽ¡‘IË\parbox[c]².‘¥It–_Jis“not“pGossible“to“cš¸ãhange“the“column“t˜ypGe“using“the“Ë>“²syn˜tax,Ž¡‘Iso–å¦another“system“is“pro¸ãvided.‘LË\tabularxcolumn“²should“bšGe“de ned“to“b˜e“a“macroŽ¡‘Iwith–Ÿone“argumen•¸ãt,‘Â]whic“h–Ÿexpands“to“the“Ëtabular“²preamš¸ãble“spGeci cation“that“y˜ouŽ¡‘Iw•¸ãan“t–”:to“correspšGond“to“ËX².“The“argumen¸ãt“will“b˜e“replaced“b¸ãy“the“calculated“widthŽ¡‘Iof–UUa“column.Ž¡‘XThe–ðdefault“is“Ë\newcommand{\tabularxcolumn}[1]{p{#1}}².‘ ¼˜So“wš¸ãe“ma˜yŽ¡‘Icš¸ãhange–UUthis“with“a“command“suc˜h“as:Ž¡‘IË\renewcommand{\tabularxcolumn}[1]{>{\small}m{#1}}ŽŸþ6‘IÏ4.3Ž‘gÀColumn‘€widthsŽŸuT‘I²Normally–‘¸all“ËX‘‘¨²columns“in“a“single“table“are“set“to“the“same“width,‘ Ðho•¸ãw“ev“er–‘¸it“isŽ¡‘IpGossible–'‡to“makš¸ãe“Ëtabularx“²set“them“to“di eren˜t“widths.‘bƒA‘'|pream˜ble“argumen˜t“ofŽ¡‘IË{>{\hsize=.5\hsize}X>{\hsize=1.5\hsize}X}– ‘²spGeci es“t•¸ãw“o– ‘columns,‘6Ÿthe“sec-Ž¡‘Iond–ÂÂwill“bGe“three“times“as“wide“as“the“ rst.‘º Ho•¸ãw“ev“er–ÂÂif“yš¸ãou“w˜an˜t“to“pla˜y“gamesŽ¡‘Ilikš¸ãe–UUthis“y˜ou“should“follo˜w“the“follo˜wing“t˜w˜o“rules.Ž©‘X¸ŽŽŽ‘b²Makš¸ãe–í%sure“that“the“sum“of“the“widths“of“all“the“ËX‘í ²columns“is“unc˜hanged.‘O (InŽ¡‘bthe›ƒzabGo•¸ãv“e˜example,‘the˜new˜widths˜still˜add˜up˜to˜t“wice˜the˜default˜width,Ž¡‘bthe–UUsame“as“t•¸ãw“o–UUstandard“ËX“²columns.)Ž¦‘X¸ŽŽŽ‘b²Do–UUnot“use“Ë\multicolumn“²enš¸ãtries“whic˜h“cross“an˜y“ËX“²column.Ž¦‘IAs–UUwith“most“rules,“these“maš¸ãy“bGe“brok˜en“if“y˜ou“kno˜w“what“y˜ou“are“doing.ŽŸ!Ä‘IÊ5Ž‘aLËThe‘ffMacrosŽŸç‘Lüs±1Ž‘Sª®ó'©±Ê cmsy9Òhó(ÒoÇw cmss9Ópack¾9ageŽ‘#g ÒiŽŸ‘Lüs±2Ž‘Sª®È\DeclareOption{infoshow}{\AtEndOfPackage\tracingtabularx}Ž¤ ‘Lüs±3Ž‘Sª®È\DeclareOption{debugshow}{\AtEndOfPackage\tracingtabularx}Ž¡‘Lüs±4Ž‘Sª®È\ProcessOptionsŽŸ‘X²This–UUrequires“Ëarray.sty².Ž¡‘Lüs±5Ž‘Sª®È\RequirePackage{array}[1994/02/03]Ž©‘X²First–UUsome“registers“etc.“that“w¸ãe“need.Ž¡‘Lüs±6Ž‘Sª®È\newdimen\TX@col@widthŽ¡‘Lüs±7Ž‘Sª®È\newdimen\TX@old@tableŽ¡‘Lüs±8Ž‘Sª®È\newdimen\TX@old@colŽ¡‘Lüs±9Ž‘Sª®È\newdimen\TX@targetŽ¡‘I±10Ž‘Sª®È\newdimen\TX@deltaŽ¡‘I±11Ž‘Sª®È\newcount\TX@colsŽ¡‘I±12Ž‘Sª®È\newif\ifTX@Ž¦‘X²Noš¸ãw–Ž6a“tric˜k“to“get“the“b•Go“dy–Ž6of“an“en˜vironmen˜t“in˜to“a“tok˜en“register,‘œnwithoutŽŸ ‘Idoing–Gƒanš¸ãy“expansion.‘m,This“doGes“not“do“an˜y“real“c˜hec˜king“of“nested“en˜vironmen˜ts,ŽŽŸ’ø3ŽŽŒ‹  ª ýs o ý´‘I²so–;bif“yš¸ãou“should“need“to“nest“one“Ëtabularx“²inside“another,‘@“the“inner“one“m˜ust“bGeŽ¤ ‘Isurrounded–UUb¸ãy“Ë{‘?ý}².Ž¡‘À$È\tabularxŽŽŽ‘I²Prior–ŽÇto“v1.06,›Ý$This“macro“toGok“t•¸ãw“o‘ŽÇargumen“ts,˜whic“h›ŽÇw“ere˜sa“v“ed˜in˜separateŽ¡‘Iregisters–A/bšGefore“the“table“b˜o˜dy“wš¸ãas“sa˜v˜ed“b˜y“Ë\TX@get@body².‘5VUnfortunatly“thisŽ¡‘Idisables–·Éthe“Ë[t]“²optional“argumen•¸ãt.‘™#No“w–·Éjust“sa•¸ãv“e–·Éthe“width“spGeci cation“sepa-Ž¡‘Irately‘ÿ*ª,‘¾ªthen–©™clear“the“tok¸ãen“register“Ë\toks@².‘n”Finally“call“Ë\TX@get@body“²to“bGeginŽ¡‘Isaš¸ãving–z£the“b•Go“dy–z£of“the“table.‘á²The“Ë{\ifnum0=`}\fi“²w˜as“added“at“v1.03,‘ƒ÷to“allo˜wŽ¡‘IËtabularx–UU²to“appGear“inside“a“Ë\halign².Ÿü^ÿ±3ŽŽŽ¡‘X²This–mecš¸ãhanism“of“grabbing“an“en˜vironmen˜t“b•Go“dy›do“es˜ha•¸ãv“e˜the˜disadv‘ÿqÇan“tageŽ¡‘I(shared–/Ówith“the“AMS‘/Êalignmenš¸ãt“en˜vironmen˜ts)“that“y˜ou“can“not“mak˜e“extensionŽ¡‘Ien•¸ãvironmen“ts›UUb“y˜coGde˜suc“h˜asŽ©òê‘IÈ\newenvironment{foo}{\begin{tabularx}{XX}}{\end{tabularx}}ŽŸòê‘I²as–'Éthe“cošGde“is“lo˜oking“for“a“literal“string“Ë\end{tabularx}“²to“stop“scanning.‘b˜SinceŽ¡‘Ivš¸ãersion–C‘2.02,‘Gone“ma˜y“a˜v˜oid“this“problem“b˜y“using“Ë\tabularx“²and“Ë\endtabularxŽ¡‘I²directly–UUin“the“de nition:Ž¦‘IÈ\newenvironment{foo}{\tabularx{XX}}{\endtabularx}ŽŸòê‘I²The–5Õscanner“noš¸ãw“loGoks“for“the“end“of“the“curren˜t“en˜vironmen˜t“(Ëfoo“²in“this“ex-Ž¡‘Iample.)‘gDThere–üare“some“restrictions“on“this“usage,‘&Ithe“principal“one“bGeing“thatŽ¡‘IË\endtabularx–UU²is“the“Ì rst‘H-²tokš¸ãen“of“the“`end“coGde'“of“the“en˜vironmen˜t.Ž© ùu‘I±13Ž‘Sª®È\def\tabularx#1{%ŽŸùu‘I²Allo¸ãw–œ†Ë\tabularx“\endtabularx“²(but“not“Ë\begin{tabularx}“\end{tabularx“²toŽ¡‘IbGe–UUused“in“Ë\newenvironment“²de nitions.Ž¦‘I±14Ž‘Sª®È\edef\TX@{\@currenvir}%ŽŸ ‘I±15Ž‘]ÚÈ{\ifnum0=`}\fiŽŸùu‘IË\relax–:²added“at“v1.05“so“that“non-expandable“length“tok•¸ãens,‘rlik“e–:Ë\textwidth“²doŽ¡‘Inot–UUgenerate“an“extra“space,“and“an“o•¸ãv“erfull‘UUbGo“x.Ž¦‘I±16Ž‘]ÚÈ\TX@target#1\relaxŽ¤ ‘I±17Ž‘]ÚÈ\TX@typeout{Target–¹–width:“#1“=“\the\TX@target.}%Ž¡‘I±18Ž‘]ÚÈ\toks@{}\TX@get@body}Ž¤ì`‘“b\endtabularxŽŽŽ‘I²This–UUdoGes“not“do“vš¸ãery“m˜uc˜h.–ªª.“.Ž¦‘I±19Ž‘Sª®È\let\endtabularx\relaxŽ¡‘“b\TX@get@bodyŽŽŽ‘I²Place–©all“tokš¸ãens“as“far“as“the“ rst“Ë\end“²in˜to“a“tok˜en“register.‘ ÍÄThen“callŽŸ ‘IË\TX@find@end–UU²to“see“if“w¸ãe“are“at“Ë\end{tabularx}².Ž¦‘I±20Ž‘Sª®È\long\def\TX@get@body#1\endŽŸ ‘I±21Ž‘]ÚÈ{\toks@\expandafter{\the\toks@#1}\TX@find@end}Ž¡‘“b\TX@find@endŽŽŽ‘I²If–Ów¸ãe“are“at“Ë\end{tabularx}²,›ícall“Ë\TX@endtabularx²,˜otherwise“add“Ë\end{...}“²toŽŸ ‘Ithe–UUregister,“and“call“Ë\TX@get@body“²again.Ž¦‘I±22Ž‘Sª®È\def\TX@find@end#1{%Ž¤ ‘I±23Ž‘]ÚÈ\def\@tempa{#1}%Ž¡‘I±24Ž‘]ÚÈ\ifx\@tempa\TX@\expandafter\TX@endtabularxŽ‘IŸYP‰ffÿrŸ J=‘ "5Ÿý-:Á3ŽŽŽ‘LÜÀThis–4šadds“an“extra“levšÃŽel“of“grouping,‘Œkwhic˜h“is“not“really“needed.‘äçInstead,‘ŒkI‘4@could“useŽ¤ €Í\iffalse{\fi\ifnum0=`}\fiŽ‘ni Àhere,–~5and‘)<Í\ifnum0=`{}\fiŽ‘CÒ°Àb€table“with“eac¸ãh“ËX‘>{²column“the“width“of“the“ nal“table.‘j+Assuming“that“there“isŽ¡‘Iat–Ý‚least“one“ËX‘Ýc²column,‘õythis“will“prošGduce“a“table“that“is“to˜o“wide.‘IÖDivide“the“excessŽ¡‘Iwidth–êbš¸ãy“the“n˜um˜bGer“of“ËX‘Ù²columns,‘!Ìand“reduce“the“column“width“b˜y“this“amoun˜t.Ž¡‘IReset–k7the“table.‘³mIf“the“table“is“not“noš¸ãw“the“correct“width,‘p¯a“Ë\multicolumn“²en˜tryŽ¡‘Im¸ãust–>`bGe“`hiding'“one“of“the“ËX›>Z²columns,‘B÷and“so“there“is“one“less“ËX˜²column“a ectingŽ¡‘Ithe–Áùwidth“of“the“table.‘·³So“wš¸ãe“reduce“b˜y“1“the“n˜um˜bšGer“of“X‘ÁÝcolumns“and“rep˜eatŽ¡‘Ithe‘UUproGcess.ŽŸ‘øf È\TX@endtabularxŽŽŽ‘I²Although›*I‘ha•¸ãv“e˜tried˜to˜mak“e˜Ëtabularx˜²loGok˜lik“e˜an˜en“vironmen“t,‘Œit˜is˜in˜fact˜aŽ¡‘Icommand,–UUall“the“wš¸ãork“is“done“b˜y“this“macro.Ž¦‘I±28Ž‘Sª®È\def\TX@endtabularx{%ŽŸ‘I²De ne–‹´the“ËX‘‹¦²column,‘™Kwith“an“inš¸ãternal“v˜ersion“of“the“Ë\newcolumntype“²command.Ž¡‘IThe–UUË\expandafter“²commands“enable“Ë\NC@newcol“²to“get“the“Ìexp‘ÿ}'ansion“²ofŽ¡‘IË\tabularxcolumn{\TX@col@width}–å·²as“its“argumen¸ãt.‘"íThis“will“bGe“the“de nitionŽ¡‘Iof–UUan“ËX“²column,“as“discussed“in“section“4.Ž¦‘I±29Ž‘]ÚÈ\expandafter\TX@newcol\expandafter{\tabularxcolumn{\TX@col@width}}%ŽŸ‘I²Initialise–º‰the“column“width,‘Öand“the“n•¸ãum“bšGer–º‰of“ËX‘º-²columns.‘¡cThe“n•¸ãum“b˜er–º‰of“ËXŽ¡‘I²columns–ö‚is“set“to“one,‘ ywhicš¸ãh“means“that“the“initial“coun˜t“will“bšGe“one“to˜o“high,‘ ybutŽ¡‘Ithis–UUv‘ÿqÇalue“is“decremen¸ãted“bšGefore“it“is“used“in“the“main“lo˜op.Ž¡‘XSince–UUv1.02,“switc¸ãh“the“de nition“of“Ë\verb².Ž¦‘I±30Ž‘]ÚÈ\let\verb\TX@verbŽŸ‘I²Since›tv1.05,‘»Ïsa•¸ãv“e˜the˜v‘ÿqÇalues˜of˜all˜LŸýó5‘üff±AŽŽ‘͉²T‘þU>Ÿ'EŽ‘ãxX˜coun“ters,‘»Ïthe˜list˜Ë\cl@@ckpt˜²con“tainsŽ¡‘Ithe–%_names“of“all“the“LŸýó5‘üff±AŽŽ‘͉²T‘þU>Ÿ'EŽ‘ãxX“counš¸ãters“that“ha˜v˜e“bGeen“de ned“so“far.‘áåW‘ÿ*ªe“expandŽ¡‘IË\setcounter–æ²at“this“pGoinš¸ãt,‘!Éas“it“results“in“few˜er“tok˜ens“bGeing“stored“in“Ë\TX@ckpt²,Ž¡‘Ibut–ˆKthe“actual“resetting“of“the“coun¸ãters“oGccurs“when“Ë\TX@ckpt“²is“expanded“afterŽ¡‘Ieacš¸ãh–mtrial“run.‘…Actually“since“v1.07,‘2³use“something“equiv‘ÿqÇalen˜t“to“the“expansionŽ¡‘Iof–±the“original“de nition“ofË\setcounter²,‘È®so“that“Ëtabularx“²w¸ãorks“in“conjunctionŽ¡‘Iwith‘UUËcalc.sty².Ž¦‘I±31Ž‘]ÚÈ\def\@elt##1{\global\value{##1}\the\value{##1}\relax}%Ž¤ ‘I±32Ž‘]ÚÈ\edef\TX@ckpt{\cl@@ckpt}%Ž¡‘I±33Ž‘]ÚÈ\let\@elt\relaxŽ¡‘I±34Ž‘]ÚÈ\TX@old@table=\maxdimenŽ¡‘I±35Ž‘]ÚÈ\TX@col@width=\TX@targetŽ¡‘I±36Ž‘]ÚÈ\global\TX@cols=\@neŽŸ‘I²T¸ãypGeout–UUsome“headings“(unless“this“is“disabled).Ž¦‘I±37Ž‘]ÚÈ\TX@typeout@Ž¡‘I±38Ž‘f‘È{\@spaces–¹–Table“Width\@spaces“Column“Width\@spaces“X“Columns}%ŽŸ‘I²First–UUattempt.‘qÇMoGdify“the“ËX“²de nition“to“coun¸ãt“ËX“²columns.Ž¦‘I±39Ž‘]ÚÈ\TX@trial{\def\NC@rewrite@X{%Ž¡‘I±40Ž’‚êŠÈ\global\advance\TX@cols\@ne\NC@find‘¹–p{\TX@col@width}}}%ŽŽŸ’ø²5ŽŽŒ‹6  ª ýs o ý´‘I²RepGeatedly–”zdecrease“column“width“un¸ãtil“table“is“the“correct“width,‘» or“stops“shrink-Ž¤ ‘Iing,‘Ošor–N+the“columns“bGecome“t•¸ãw“o›N+narro“w.‘odIf˜there˜are˜no˜m“ulticolumn˜en“tries,‘OšthisŽ¡‘Iwill–UUonly“tak¸ãe“one“attempt.Ž©‘I±41Ž‘]ÚÈ\loopŽ¤ ‘I±42Ž‘f‘È\TX@arithŽ¡‘I±43Ž‘f‘È\ifTX@Ž¡‘I±44Ž‘f‘È\TX@trial{}%Ž¡‘I±45Ž‘]ÚÈ\repeatŽŸ‘I²One–,last“time,‘4Fwith“wš¸ãarnings“bac˜k“on“(see“appGendix“D)‘+øuse“Ëtabular*“²to“put“it“inŽ¤ ‘Ia–UUbGoš¸ãx“of“the“righ˜t“size,“in“case“the“algorithm“failed“to“ nd“the“correct“size.Ž¡‘XSince–¬Æv1.04,‘Î}loGcally“makš¸ãe“Ë\footnotetext“²sa˜v˜e“its“argumen˜t“in“a“tok˜en“register.Ž¡‘ISince–²äv1.06,‘ GË\toks@“²conš¸ãtains“the“pream˜ble“spšGeci cation,‘ Gand“p˜ossible“optionalŽ¡‘Iargumenš¸ãt,–UUas“w˜ell“as“the“table“b•Go“dy‘ÿ*ª.Ž¦‘I±46Ž‘]ÚÈ{\let\@footnotetext\TX@ftntext\let\@xfootnotenext\TX@xftntextŽ¤ ‘I±47Ž‘f‘È\csname‘¹–tabular*\expandafter\endcsname\expandafter\TX@targetŽ¡‘I±48Ž‘p2È\the\toks@Ž¡‘I±49Ž‘f‘È\csname‘¹–endtabular*\endcsname}%ŽŸ‘I²Noš¸ãw–Œšthe“alignmen˜t“is“ nished,‘Úkand“the“Ë}“²has“restored“the“original“meaning“ofŽ¤ ‘IË\@footnotetext–UU²expand“the“register“Ë\TX@ftn“²whic¸ãh“will“execute“a“series“ofŽ¡‘IË\footnotetext[¸hÌnum‘Äc¸iŽ‘¶%Ë]{¸hÌnote‘À[¸iŽ‘/CË}Ž¡‘I²commands.‘\W‘ÿ*ªe–Aneed“to“bšGe“careful“ab˜out“clearing“the“register“as“wš¸ãe“ma˜y“bGe“insideŽ¡‘Ia–UUnested“Ëtabularx².Ž¦‘I±50Ž‘]ÚÈ\global\TX@ftn\expandafter{\expandafter}\the\TX@ftnŽŸ‘I²Noš¸ãw–* nish“o “the“Ëtabularx“²en˜vironmen˜t.‘ð Note“that“w˜e“need“Ë\end{tabularx}Ž¡‘I²here–׶as“the“Ë\end{tabularx}“²in“the“user's“ le“is“nevš¸ãer“expanded.‘øêNo˜w“use“Ë\TX@Ž¡‘I²rather–UUthan“Ëtabularx².Ž¡‘XW‘ÿ*ªe–]‹also“need“to“ nish“o “the“group“started“b¸ãy“Ë{\ifnum0=`}\fi“²in“the“macroŽ¡‘IË\tabularx².Ž¦‘I±51Ž‘]ÚÈ\ifnum0=`{\fi}%ŽŸ ‘I±52Ž‘]ÚÈ\expandafter\end\expandafter{\TX@}}ŽŸ‘À$\TX@arithŽŽŽ‘I²Calculate–þ×the“column“width“for“the“next“try‘ÿ*ª,‘$setting“the“ ag“Ë\ifTX@“²to“false“if“theŽ¡‘IlošGop–UUshould“b˜e“ab˜orted.Ž¦‘I±53Ž‘Sª®È\def\TX@arith{%Ž¤ ‘I±54Ž‘]ÚÈ\TX@falseŽ¡‘I±55Ž‘]ÚÈ\ifdim\TX@old@table=\wd\@tempboxaŽŸ‘I²If–ú˜wš¸ãe“ha˜v˜e“reduced“the“column“width,‘#ébut“the“table“width“has“not“c˜hanged,‘#éw˜eŽ¤ ‘Istop– Rthe“loGop,‘Rand“output“the“table“(whicš¸ãh“will“cause“an“o˜v˜er-full“alignmen˜t)“withŽ¡‘Ithe–UUprevious“v‘ÿqÇalue“of“Ë\TX@col@width².Ž¦‘I±56Ž‘f‘È\TX@col@width=\TX@old@colŽ¤ ‘I±57Ž‘f‘È\TX@typeout@{Reached–¹–minimum“width,“backing“up.}%Ž¡‘I±58Ž‘]ÚÈ\elseŽŸ‘I²Otherwise–UUcalculate“the“amounš¸ãt“b˜y“whic˜h“the“curren˜t“table“is“toGo“wide.Ž¦‘I±59Ž‘f‘È\dimen@=\wd\@tempboxaŽ¡‘I±60Ž‘f‘È\advance\dimen@‘¹–-\TX@targetŽ¡‘I±61Ž‘f‘È\ifdim\dimen@<\TX@deltaŽŸ‘I²If–ïèthis“amoun¸ãt“is“less“than“Ë\TX@delta²,‘VŒstop.‘ A€(Ë\TX@delta“²should“bGe“non-zeroŽŸ ‘Iotherwise–UUwš¸ãe“ma˜y“miss“the“target“due“to“rounding“error.)ŽŽŸ’ø6ŽŽŒ‹D9 ª ýs o ý´‘I±62Ž‘p2È\TX@typeout@{Reached‘¹–target.}%Ž© ‘I±63Ž‘f‘È\elseŽŸnï‘I²Reduce–”âthe“n•¸ãum“bGer–”âof“e ectivš¸ãe“ËX‘”Ò²columns“b˜y“one.‘0o(Chec˜king“that“w˜e“do“not“getŽ¤ ‘I0,‘(Fas–this“wš¸ãould“proGduce“an“error“later.)‘_Then“divide“excess“width“b˜y“the“n˜um˜bGerŽ¡‘Iof–Güe ectiv¸ãe“columns,‘J§and“calculate“the“new“column“width.‘mTT‘ÿ*ªempGorarily“store“thisŽ¡‘Iv‘ÿqÇalue–UU(times“-1)“in“Ë\dimen@².ŽŸ nï‘I±64Ž‘p2È\ifnum\TX@cols>\@neŽ¦‘I±65Ž‘yw^È\advance\TX@cols–¹–by“\m@neŽ¦‘I±66Ž‘p2È\fiŽ¦‘I±67Ž‘p2È\divide\dimen@–¹–by“\TX@colsŽ¦‘I±68Ž‘p2È\advance\dimen@–¹–by“-\TX@col@widthŽ¦‘I±69Ž‘p2È\ifdim–¹–\dimen@“>“\z@ŽŸnï‘I²If–¶Ôthe“new“width“w¸ãould“bšGe“to˜o“narro¸ãw,‘Öˆab˜ort“the“lo˜op.‘<òAš¸ãt“the“momen˜t“toGo“narro˜w,Ž¡‘Imeans–UUless“than“0‘ª®pt!ŽŸ nï‘I±70Ž‘yw^È\TX@typeout@{Columns–¹–too“narrow.}%Ž¦‘I±71Ž‘p2È\elseŽŸnï‘I²Otherwise›û-sa•¸ãv“e˜the˜old˜settings,‘$£and˜set˜the˜new˜column˜width.‘cPSet˜the˜ ag˜toŽ¡‘Itrue–UUso“that“the“table“will“bšGe“set,“and“the“lo˜op“will“b˜e“executed“again.Ž¤ nï‘I±72Ž‘yw^È\TX@old@col=\TX@col@widthŽ¦‘I±73Ž‘yw^È\TX@old@table=\wd\@tempboxaŽ¦‘I±74Ž‘yw^È\TX@col@width=-\dimen@Ž¦‘I±75Ž‘yw^È\TX@trueŽ¦‘I±76Ž‘p2È\fiŽ¦‘I±77Ž‘f‘È\fiŽ¦‘I±78Ž‘]ÚÈ\fi}Ž©LÍ‘À$\TX@deltaŽŽŽ‘I²Accept–UUa“table“that“is“within“Ë\hfuzz“²of“the“correct“width.Ž¡‘I±79Ž‘Sª®È\TX@delta=\hfuzzŽ¦‘X²Initialse–~÷the“ËX‘~ì²column.‘î¬The“de nition“can“bGe“emptš¸ãy“here,‘‰_as“it“is“set“for“eac˜hŽŸ ‘IËtabularx‘UU²en•¸ãvironmen“t.Ž¡‘I±80Ž‘Sª®È\newcolumntype{X}{}Ž¦‘øf \tabularxcolumnŽŽŽ‘I²The–UUdefault“de nition“of“ËX“²is“Ëp{#1}².Ž¡‘I±81Ž‘Sª®È\def\tabularxcolumn#1{p{#1}}Ž¦‘Ž\TX@newcolŽŽŽ‘I²A‘…¥little–…ômacro“just“used“to“cut“doš¸ãwn“the“n˜um˜bGer“of“Ë\expandafter“²commandsŽŸ ‘Ineeded.Ž¡‘I±82Ž‘Sª®È\def\TX@newcol{\newcol@{X}[0]}Ž¦‘À$\TX@trialŽŽŽ‘I²Mak¸ãe–UUa“test“run.Ž¡‘I±83Ž‘Sª®È\def\TX@trial#1{%ŽŸ ‘I±84Ž‘]ÚÈ\setbox\@tempboxa=\hbox{%Ž©nï‘I²Anš¸ãy–lUextra“commands.‘¶ÆThis“is“used“on“the“ rst“run“to“coun˜t“the“n˜um˜bGer“of“ËXŽŸ ‘I²columns.Ž¡‘I±85Ž‘f‘È#1\relaxŽ¦‘I²Since–éáv1.04,‘makš¸ãe“Ë\footnotetext“²gobble“its“argumen˜ts.‘ /jAlso“loGcally“clearŽ¤ ‘IË\TX@vwarn–ïç²so“that“the“wš¸ãarning“is“generated“b˜y“the“Ëfinal“²run,‘V‹and“doGes“notŽ¡‘IappGear–UUin“the“middle“of“the“table“if“Ë\tracingtabularx².ŽŸ nï‘I±86Ž‘]ÚÈ\let\@footnotetext\TX@trial@ftnŽŸ ‘I±87Ž‘]ÚÈ\let\TX@vwarn\@emptyŽŽŸ’ø²7ŽŽŒ‹Pv ª ýs o ý´‘I²Do–?ÿnot“nest“Ëtabularx“²en•¸ãvironmen“ts–?ÿduring“trial“runs.‘1ÅThis“wš¸ãould“w˜aste“time,Ž¤ ‘Iand–UUthe“global“setting“of“Ë\TX@cols“²w¸ãould“break“the“algorithm.Ž©‘I±88Ž‘a×pÈ\expandafter\let\expandafter\tabularx\csname‘¹–tabular*\endcsnameŽŸ ‘I±89Ž‘a×pÈ\expandafter\let\expandafter\endtabularx\csname‘¹–endtabular*\endcsnameŽŸ‘I²Added–pat“v1.05:‘Çþdissable“Ë\write²s“during“a“trial“run.‘ sThis“tric¸ãk“is“from“theŽ¡‘IT‘þU>Ÿ'EŽ‘ãxXBoGok.Ž¦‘I±90Ž‘a×pÈ\let\immediate=\relax\def\write##1##{{\afterassignment}\toks@=}%ŽŸ‘I²T‘ÿ*ªurn–~Xo “wš¸ãarnings“(see“appGendix“D).“Also“prev˜en˜t“them“bGeing“turned“bac˜k“on“b˜yŽ¡‘Isetting–UUthe“parameter“names“to“bGe“registers.Ž¦‘I±91Ž‘f‘È\hbadness=\@M\hfuzz=\maxdimenŽŸ ‘I±92Ž‘f‘È\let\hbadness=\@tempcnta\let\hfuzz=\@tempdimaŽŸ‘I²Makš¸ãe–®the“table,‘ÄHand“ nish“the“h˜bGo˜x.‘|Since“v1.06,‘ÄHË\toks@“²con˜tains“the“pream˜bleŽ¡‘IspšGeci cation,–UUand“p˜ossible“optional“argumenš¸ãt,“as“w˜ell“as“the“table“b•Go“dy‘ÿ*ª.Ž¦‘I±93Ž‘f‘È\expandafter\tabular\the\toks@ŽŸ ‘I±94Ž‘f‘È\endtabular}%Ž¤‘I²Since–UUv1.05“reset“all“LŸýó5‘üff±AŽŽ‘͉²T‘þU>Ÿ'EŽ‘ãxX“counš¸ãters,“b˜y“executing“Ë\TX@ckpt².Ž¦‘I±95Ž‘]ÚÈ\TX@ckptŽ¡‘I²Prin¸ãt–UUsome“statistics.‘qÇAdded“Ë\TX@align“²in“v1.05,“to“line“up“the“columns.Ž¦‘I±96Ž‘]ÚÈ\TX@typeout@{\@spacesŽ¤ ‘I±97Ž‘kJœÈ\expandafter\TX@alignŽ¡‘I±98Ž‘yw^È\the\wd\@tempboxa\space\space\space\space\space\@@Ž¡‘I±99Ž‘kJœÈ\expandafter\TX@alignŽ¡‘E±100Ž‘yw^È\the\TX@col@width\space\space\space\space\space\@@Ž¡‘E±101Ž‘kJœÈ\@spaces\the\TX@cols}}ŽŸ‘À$\TX@alignŽŽŽ‘I²Macro–UUadded“at“v1.05,“to“impro•¸ãv“e–UUthe“prin¸ãting“of“the“tracing“info.Ž¦‘E±102Ž‘Sª®È\def\TX@align#1.#2#3#4#5#6#7#8#9\@@{%Ž¡‘E±103Ž‘]ÚÈ\ifnum#1<10‘¹–\space\fiŽ¡‘E±104Ž‘]ÚÈ\ifnum#1<100‘¹–\space\fiŽ¡‘E±105Ž‘]ÚÈ\ifnum#1<\@m\space\fiŽ¡‘E±106Ž‘]ÚÈ\ifnum#1<\@M\space\fiŽ¡‘E±107Ž‘]ÚÈ#1.#2#3#4#5#6#7#8\space\space}Ž¤‘øf \arraybackslashŽŽŽ‘IË\\‘UU²hac¸ãk.Ž¦‘E±108Ž‘Sª®È\def\arraybackslash{\let\\=\@arraycr}Ž¡‘ó­ \tracingtabularxŽŽŽ‘I²Prin¸ãt–UUstatistics“on“column“and“table“widths.Ž¦‘E±109Ž‘Sª®È\def\tracingtabularx{%Ž¤ ‘E±110Ž‘]ÚÈ\def\TX@typeout{\PackageWarningNoLine{tabularx}}%Ž¡‘E±111Ž‘]ÚÈ\def\TX@typeout@##1{\typeout{(tabularx)‘¹–##1}}}ŽŸ‘ Lø\TX@typeoutŽŽŽ‘I²The–UUdefault“is“to“bšGe“to“b˜e“quietŽ¦‘E±112Ž‘Sª®È\let\TX@typeout\@gobbleŽ¡‘E±113Ž‘Sª®È\let\TX@typeout@\@gobbleŽŸ‘3P\TX@ftnŽŽŽ‘I²A–UUtokš¸ãen“register“for“sa˜ving“foGotnote“texts.Ž¦‘E±114Ž‘Sª®È\newtoks\TX@ftnŽŽŸ’ø²8ŽŽŒ‹ ZΠª ýs o ý´‘ LøÈ\TX@ftntextŽŽŸ ‘“b\TX@xftntextŽŽŽŽŽ‘I²Inside–UUthe“alignmenš¸ãt“just“sa˜v˜e“up“the“foGotnote“text“in“a“tok˜en“register.Ž©‘E±115Ž‘Sª®È\long\def\TX@ftntext#1{%Ž¤ ‘E±116Ž‘]ÚÈ\edef\@tempa{\the\TX@ftn\noexpand\footnotetextŽ¡‘E±117Ž’²*fÈ[\the\csname‘¹–c@\@mpfn\endcsname]}%Ž¡‘E±118Ž‘]ÚÈ\global\TX@ftn\expandafter{\@tempa{#1}}}%Ž¡‘E±119Ž‘Sª®È\long\def\TX@xftntext[#1]#2{%Ž¡‘E±120Ž‘]ÚÈ\global\TX@ftn\expandafter{\the\TX@ftn\footnotetext[#1]{#2}}}Ž¤‘ÙÌ\TX@trial@ftnŽŽŽ‘I²On–UUtrial“runs,“gobble“foGotnote“texts.Ž¦‘E±121Ž‘Sª®È\long\def\TX@trial@ftn#1{}Ž¡‘X²This–ðlast“section“wš¸ãas“added“at“V‘ÿ*ªersion“1.02.‘^ûPrevious“v˜ersions“doGcumen˜ten˜tedŽ¤ ‘Ithe–Âfact“that“Ë\verb“²did“not“w¸ãork“inside“Ëtabularx²,‘ÝQbut“that“did“not“stop“pGeopleŽ¡‘Iusing–ê–it!‘1‰This“usually“put“LŸýó5‘üff±AŽŽ‘͉²T‘þU>Ÿ'EŽ‘ãxX“inš¸ãto“an“irreco˜v˜erable“error“pGosition,‘æwith“errorŽ¡‘Imessages–éthat“did“not“men¸ãtion“the“cause“of“the“error.‘È„The“`p•Go“or–éman's“Ë\verb²'Ž¡‘I(and–åË\verb*²)“de ned“here“is“based“on“page“382“of“the“T‘þU>Ÿ'EŽ‘ãxXBoGok.‘wxAs“explainedŽ¡‘Ithere,‘îëdoing–Ð3vš¸ãerbatim“this“w˜a˜y“means“that“spaces“are“not“treated“correctly‘ÿ*ª,‘îëandŽ¡‘Iso–6Ë\verb*“²maš¸ãy“w˜ell“bGe“useless,‘Öho˜w˜ev˜er“I‘!consider“this“section“of“cošGde“to“b˜e“error-Ž¡‘Ireco•¸ãv“ery‘ÿ*ª,–UUrather“than“a“real“implemenš¸ãtation“of“v˜erbatim.Ž¡‘XThe––Cmecš¸ãhanism“is“quite“general,‘¦~and“an˜y“macro“whic˜h“w˜an˜ts“to“allo˜w“a“formŽ¡‘Iof–ÈFË\verb“²to“bGe“used“within“its“argumenš¸ãt“ma˜y“Ë\let\verb=\TX@verb².‘BÂ(Making“sureŽ¡‘Ito–UUrestore“the“real“de nition“later!)Ž¡‘XË\verb–UU²and“Ë\verb*“²are“sub‘Ž8ject“to“the“follo¸ãwing“restictions:Ž©‘U8ä1.ŽŽŽ‘bSpaces–‚ÿin“the“argumenš¸ãt“are“not“read“v˜erbatim,‘­but“ma˜y“bšGe“skipp˜ed“accordingŽ¡‘bto–UUT‘þU>Ÿ'EŽ‘ãxX's“usual“rules.Ž¦‘U8ä2.ŽŽŽ‘bSpaces–Ð`will“bGe“added“to“the“output“after“conš¸ãtrol“w˜ords,‘ê÷ev˜en“if“they“w˜ere“notŽ¡‘bpresen¸ãt–UUin“the“input.Ž¦‘U8ä3.ŽŽŽ‘bUnless–iŸ'EŽ‘ãxX“wš¸ãould“strip“the“outer“braces“from“suc˜h“a“group.‘øäThe“`Ë!²'Ž¡‘Iwill–UUbGe“remo•¸ãv“ed‘UUlater.Ž¡‘XOriginally›ÊI‘Éõfollo•¸ãw“ed˜Kn“uth,–åñand˜had˜Ë\def\@tempa{##1}²,“ho•¸ãw“ev“er˜this˜did˜notŽ¡‘Ialloš¸ãw–ŠäË#“²to“appGear“in“the“argumen˜t.‘uSo“in“v1.04,‘˜HI‘ŠÖc˜hanged“this“to“to“use“a“tok˜enŽ¡‘Iregister,›¥xand–•qË\edef².‘2This“allo¸ãws“Ë#“²appGear,˜but“makš¸ães“eac˜h“one“appGear“t˜wice!,‘¥xsoŽ¡‘Ilater–UUwš¸ãe“loGop“through,“replacing“Ë##“²b˜y“Ë#².Ž¤ ºZ‘E±127Ž‘Sª®È\def\TX@vb#1{\def\@tempa##1#1{\toks@{##1}\edef\@tempa{\the\toks@}%ŽŸ ‘E±128Ž‘f‘È\expandafter\TX@v\meaning\@tempa\\‘¹–\\\ifnum0=`{\fi}}\@tempa!}Ž©/‘'¦|\TX@vŽŽŽ‘I²Strip–UUthe“initial“segmen¸ãt“of“the“Ë\meaning²,“including“the“`Ë!²'“added“earlier.Ž¡‘E±129Ž‘Sª®È\def\TX@v#1!{\afterassignment\TX@vfirst\let\@tempa=‘¹–}Ž¦‘X²As–ZÜexplained“abGo•¸ãv“e›ZÜw“e˜are˜going˜to˜replace˜Ë##˜²pairs˜b“y˜Ë#².‘‚[T‘ÿ*ªo˜do˜this˜w“e˜needŽ¤ ‘Inon-spGecial–Û1Ë#“²tok•¸ãens.‘IMak“e–Û1Ë*“²inš¸ãto“a“parameter“tok˜en“so“that“w˜e“can“de ne“macrosŽ¡‘Iwith–UUargumenš¸ãts.‘qÇThe“normal“meanings“will“bGe“restored“b˜y“the“Ë\endgroup“²later.ŽŸ ºZ‘E±130Ž‘Sª®È\begingroupŽ¤ ‘E±131Ž‘Sª®È\catcode`\*=\catcode`\#Ž¡‘E±132Ž‘Sª®È\catcode`\#=12Ž¦‘Ž\TX@vfirstŽŽŽ‘I²As–^Îa“spšGecial“case,‘¡,prev•¸ãen“t–^Îthe“ rst“c¸ãharacter“from“b˜eing“dropp˜ed.‘Ž2This“mak¸ãesŽ¤ ‘IË\verb*|‘?ý|–˜ò²proGduce“Ë ².›