|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T t
Length: 43986 (0xabd2) Types: TextFile Names: »tugbot.sty«
└─⟦52210d11f⟧ Bits:30007239 EUUGD2: TeX 3 1992-12 └─⟦c319c2751⟧ »unix3.0/TeX3.0.tar.Z« └─⟦036c765ac⟧ └─⟦this⟧ »TeX3.0/TeXmacros/tugbot.sty« └─⟦060c9c824⟧ Bits:30007080 DKUUG TeX 2/12/89 └─⟦this⟧ »./tex82/TeXmacros/tugbot.sty« └─⟦52210d11f⟧ Bits:30007239 EUUGD2: TeX 3 1992-12 └─⟦63303ae94⟧ »unix3.14/TeX3.14.tar.Z« └─⟦c58930e5c⟧ └─⟦this⟧ »TeX3.14/TeXmacros/tugbot.sty«
% ***** TUGBOT86.STY ***** 8 Jul 87, bb % % WARNING -- UNDER CONSTRUCTION % % This file contains the TeX82 instructions for preparing a document % in TUGboat format. It is based on the TeX80 TUGboat format and on % AMSPPT.STY (AMS-TeX82). It is compatible with, but does not % require (or load) AMS-TeX. It assumes that PLAIN.TEX is preloaded. % % This version differs in significant ways from the production version % used at the AMS to generate the published TUGboat; particular % features of the production version address idiosyncracies of the % Alphatype CRS typesetter, used to prepare camera copy, which are not % relevant to output prepared on, e.g., a laser printer. % % Explicit registers: % Counters: 0 = \pageno (PLAIN) % 1 = \xcol -- column on page (values 1 or 2) % 2 = \spoolno -- sequential segment count % Files: 1 = page number xref definitions \def\makeatletter{\catcode`\@=11 } \chardef\other=12 \def\makeatother{\catcode`\@=\other} \makeatletter % used, as in PLAIN, in protected control sequences % Stuff different from PLAIN, or reiterated for clarity \def~{\penalty\@M \ } % tie -- this is PLAIN value; it is reset in AMS-TeX \clubpenalty=10000 \widowpenalty=10000 \normallineskiplimit=1pt \newif\ifNoParIndent \NoParIndentfalse \def \NoParIndent{\parindent=0pt \NoParIndenttrue} \newdimen\normalparindent \normalparindent=20pt % plain = 20pt \def \NormalParIndent{\global\parindent=\normalparindent \global\NoParIndentfalse} \NormalParIndent % set up auxiliary `page numbers' % \pageno = \count0 as used in PLAIN \countdef\xcol=1 \xcol=1 \countdef\spoolno=2 \spoolno=1 % some things with the same names as in, or reiterated from, AMS-TeX \def \BlackBoxes{\overfullrule=5pt } \def \NoBlackBoxes{\overfullrule=0pt } \def \document{} % override an AMS-TeX convention \def \linebreak{\unskip\break} \def \newline{\hskip0pt plus\pagewd \break} %\let\brk=\linebreak % TeX80 version %\let\lbrk=\newline % TeX80 version \output{\output@} \f %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % ***** utility registers and definitions ***** % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % test registers for transient use; paired - internal/external \newbox\T@stBox \newbox\TestBox \newcount\T@stCount \newcount\TestCount \newdimen\T@stDimen \newdimen\TestDimen % \cs existence test, stolen from TeXbook exercise 7.7 \def \ifundefined#1{\expandafter\ifx\csname#1\endcsname\relax } % Smashes repeated from AMS-TeX; PLAIN implements only full \smash . \newif\iftop@ \newif\ifbot@ \def\topsmash{\top@true\bot@false\smash@} \def\botsmash{\top@false\bot@true\smash@} \def\smash{\top@true\bot@true\smash@} \def\smash@{\relax\ifmmode\def\next{\mathpalette\mathsm@sh}% \else\let\next\makesm@sh\fi \next } \def\finsm@sh{\iftop@\ht\z@\z@\fi\ifbot@\dp\z@\z@\fi\box\z@} % Vertical `laps'; cf. \llap and \rlap \long\def\ulap#1{\vbox to \z@{\vss#1}} \long\def\dlap#1{\vbox to \z@{#1\vss}} % And centered horizontal and vertical `laps' \def\xlap#1{\hbox to \z@{\hss#1\hss}} \long\def\ylap#1{\vbox to \z@{\vss#1\vss}} \long\def\zlap#1{\ylap{\xlap{#1}}} % Avoid unwanted vertical glue when making up pages. \def \basezero{\baselineskip\z@ \lineskip\z@} % Today's date, to be printed on drafts. Based on TeXbook, p.406. \def\today{\number\day\space \ifcase\month\or Jan \or Feb \or Mar \or Apr \or May \or Jun \or Jul \or Aug \or Sep \or Oct \or Nov \or Dec \fi \number\year} \newif\ifPrelimDraft \PrelimDraftfalse \def\PrelimDraft{\PrelimDrafttrue \def\midrtitle{\tensl preliminary draft, \today}} \f %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % ***** fonts and friends ***** % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Struts give ascenders and descenders to assist in baseline alignment % (e.g. of adjoining vertical boxes); useful only with text fonts. % % \strut is defined in PLAIN . The structure of \strutt is equivalent. \newbox\struttbox \def\strutt{\relax\ifmmode\copy\struttbox\else\unhcopy\struttbox\fi} % Struts are given the following dimensions for use in TUGboat: % % \strut = height/depth of parenthesis in current font % (not the same as PLAIN) % \strutt height + depth = \normalbaselineskip, % height = same as \strut % (equivalent to PLAIN \strut ) % The fonts below are sufficient for most ordinary TUGboat production. % Additional titling fonts are defined elsewhere, and occasionally an % extra font will be needed for a particular item (e.g. the device % charts) and defined in that file. % all PLAIN CM fonts \font\tenrm=cmr10 \font\ninerm=cmr9 \font\eightrm=cmr8 \font\sevenrm=cmr7 \font\sixrm=cmr6 \font\fiverm=cmr5 \font\teni=cmmi10 \skewchar\teni='177 \font\ninei=cmmi9 \skewchar\ninei='177 \font\eighti=cmmi8 \skewchar\eighti='177 \font\seveni=cmmi7 \skewchar\seveni='177 \font\sixi=cmmi6 \skewchar\sixi='177 \font\fivei=cmmi5 \skewchar\fivei='177 \font\tensy=cmsy10 \skewchar\tensy='60 \font\ninesy=cmsy9 \skewchar\ninesy='60 \font\eightsy=cmsy8 \skewchar\eightsy='60 \font\sevensy=cmsy7 \skewchar\sevensy='60 \font\sixsy=cmsy6 \skewchar\sixsy='60 \font\fivesy=cmsy5 \skewchar\fivesy='60 \font\tenex=cmex10 \font\tenbf=cmbx10 \font\ninebf=cmbx9 \font\eightbf=cmbx8 \font\sevenbf=cmbx7 \font\sixbf=cmbx6 \font\fivebf=cmbx5 \font\tentt=cmtt10 \font\ninett=cmtt9 \font\eighttt=cmtt8 \font\tensl=cmsl10 \font\ninesl=cmsl9 \font\eightsl=cmsl8 %\font\sevensl=amsl7 \let\sevensl=\eightsl % for distribution \font\tenit=cmti10 \font\nineit=cmti9 \font\eightit=cmti8 \font\sevenit=cmti7 \font\tenupit=cmu10 \font\tensmc=cmcsc10 \f \font\tentex=cmtex10 \def \mit{\fam\@ne} \def \cal{\fam\tw@} \def \sy{\cal} % old name % fonts added at AMS % \font\eightex=amex8 % \newfam\cyrfam % uncomment if needed % \font\tencyr=mcyr10 % \font\ninemcyr=mcyr9 % \font\eightcyr=mcyr8 % \font\sixcyr=mcyr6 %\font\ninesmc=amcsc9 \let\ninesmc=\tensmc % temporary expedient %\font\eightsmc=amcsc8 \let\eightsmc=\tensmc % temporary expedient %\font \sixteenssb=amssbx16 \font \sixteenssb=cmssbx10 scaled \magstep3 % for distribution %\font \twelvessb=amssbx12 \font \twelvessb=cmssbx10 scaled \magstep1 % for distribution \font \tenssb=cmssbx10 %\font \eightssb=amssbx8 %\font \seventphon=tphon7 % used in macro index and device list \newfam\titlefam \def \titlefont{\textfont\titlefam=\sixteenssb \scriptfont\titlefam=\twelvessb \scriptscriptfont\titlefam=\tenssb \fam\titlefam \sixteenssb \baselineskip=16pt } % Formerly \twelvessb and \eightssb % Planned additions and changes: % % Dynamic loading of fonts, probably in groups according to size % Removal of \rm, \bf, etc., from \*point expansions, replacement % by generic \rm, \bf, etc. definitions % Mechanism for switching neatly between serif and sans-serif \f % Allow text to be a bit stretchier than the built-in setting; % TeXbook, page 433, 355 \newdimen\normaltenptstretch \normaltenptstretch=1.6667pt \newdimen\extratenptstretch \extratenptstretch=4pt \def\NormalTenPointSpacing{\fontdimen3\tenrm=\normaltenptstretch \fontdimen3\tenit=\normaltenptstretch} \def\StretchyTenPointSpacing{\fontdimen3\tenrm=\extratenptstretch \fontdimen3\tenit=\extratenptstretch} \def \AddToTenPoint{} % permit external additions to font \def \tenpoint{\normalbaselineskip=12pt % \def\pointsize@AmS{t} \abovedisplayskip=3pt plus 3pt minus 1pt \belowdisplayskip=3pt plus 3pt minus 1pt \abovedisplayshortskip=0pt plus 3pt \belowdisplayshortskip=1pt plus 3pt minus 1pt \def\rm{\fam\z@\tenrm}% \textfont0=\tenrm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm \def\oldstyle{\fam\@ne\teni}% \textfont1=\teni \scriptfont1=\seveni \scriptscriptfont1=\fivei \textfont2=\tensy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy \textfont3=\tenex \scriptfont3=\tenex \scriptscriptfont3=\tenex \def\it{\fam\itfam\tenit}% \textfont\itfam=\tenit \scriptfont\itfam=\sevenit \def\sl{\fam\slfam\tensl}% \textfont\slfam=\tensl \scriptfont\slfam=\sevensl \def\bf{\fam\bffam\tenbf}% \textfont\bffam=\tenbf \scriptfont\bffam=\eightbf \scriptscriptfont\bffam=\sixbf % \def\cyr{\fam\cyrfam\tencyr}% % \textfont\cyrfam=\tencyr \scriptfont\cyrfam=\eightcyr % \scriptscriptfont\cyrfam=\sixcyr \def\smc{\tensmc}% \def\tt{\tentt}% \def\upright{\tenupit}% \setbox\strutbox=\hbox{\vrule height7.5pt depth2.5pt width\z@}% \setbox\struttbox=\hbox{\vrule height8.5pt depth3.5pt width\z@}% \normalbaselines \AddToTenPoint \rm } \tenpoint % initialize -- default font \f \newdimen\normalnineptstretch \normalnineptstretch=1.5pt \newdimen\extranineptstretch \extranineptstretch=3.6pt \def\NormalNinePointSpacing{\fontdimen3\ninerm=\normalnineptstretch} \def\StretchyNinePointSpacing{\fontdimen3\ninerm=\extranineptstretch} \def \AddToNinePoint{} \def \ninepoint{\normalbaselineskip=11pt \abovedisplayskip=2.5pt plus 2.5pt minus 1pt \belowdisplayskip=2.5pt plus 2.5pt minus 1pt \abovedisplayshortskip=0pt plus 2.5pt \belowdisplayshortskip=1pt plus 2.5pt minus 1pt \def\rm{\fam\z@\ninerm}% \textfont0=\ninerm \scriptfont0=\sevenrm \scriptscriptfont0=\fiverm \def\oldstyle{\fam\@ne\ninei}% \textfont1=\ninei \scriptfont1=\seveni \scriptscriptfont1=\fivei \textfont2=\ninesy \scriptfont2=\sevensy \scriptscriptfont2=\fivesy \def\it{\fam\itfam\nineit}% \textfont\itfam=\nineit \def\sl{\fam\slfam\ninesl}% \textfont\slfam=\ninesl \def\bf{\fam\bffam\ninebf}% \textfont\bffam=\ninebf \scriptfont\bffam=\sevenbf \scriptscriptfont\bffam=\sixbf % \def\cyr{\fam\cyrfam\ninmcyr}% % \textfont\cyrfam=\ninmcyr \scriptfont\cyrfam=\sixcyr % \scriptscriptfont\cyrfam=\sixcyr \def\smc{\ninesmc}% \def\tt{\ninett}% \setbox\strutbox=\hbox{\vrule height 6.75pt depth 2.25pt width\z@}% \setbox\struttbox=\hbox{\vrule height 7.25pt depth 2.75pt width\z@}% \normalbaselines \AddToNinePoint \rm } % this is equivalent to baselineskip = 10pt % \setbox\struttbox=\hbox{\vrule height 7.75pt depth 3.25pt width\z@}% \f \newdimen\normaleightptstretch \normaleightptstretch=1.333pt \newdimen\extraeightptstretch \extraeightptstretch=3pt \def\NormalEightPointSpacing{\fontdimen3\eightrm=\normaleightptstretch} \def\StretchyEightPointSpacing{\fontdimen3\eightrm=\extraeightptstretch} \def \AddToEightPoint{} \def \eightpoint{\normalbaselineskip=10pt \abovedisplayskip=2pt plus 2pt minus 1pt \belowdisplayskip=2pt plus 2pt minus 1pt \abovedisplayshortskip=0pt plus 2pt \belowdisplayshortskip=1pt plus 2pt minus 1pt \def\rm{\fam\z@\eightrm}% \textfont0=\eightrm \scriptfont0=\sixrm \scriptscriptfont0=\fiverm \def\oldstyle{\fam\@ne\eighti}% \textfont1=\eighti \scriptfont1=\sixi \scriptscriptfont1=\fivei \textfont2=\eightsy \scriptfont2=\sixsy \scriptscriptfont2=\fivesy % \textfont3=\eightex \scriptfont3=\eightex \scriptscriptfont3=\eightex \def\it{\fam\itfam\eightit}% \textfont\itfam=\eightit \def\sl{\fam\slfam\eightsl}% \textfont\slfam=\eightsl \def\bf{\fam\bffam\eightbf}% \textfont\bffam=\eightbf \scriptfont\bffam=\sixbf \scriptscriptfont\bffam=\sixbf % \def\cyr{\fam\cyrfam\eightcyr}% % \textfont\cyrfam=\eightcyr \scriptfont\cyrfam=\sixcyr % \scriptscriptfont\cyrfam=\sixcyr \def\smc{\eightsmc}% \def\tt{\eighttt}% \setbox\strutbox=\hbox{\vrule height 6pt depth 2pt width\z@}% \setbox\struttbox=\hbox{\vrule height 7pt depth 3pt width\z@}% \normalbaselines \AddToEightPoint \rm } % this is equivalent to baselineskip = 9pt % \setbox\struttbox=\hbox{\vrule height 6.5pt depth 2.5pt width\z@}% % PLAIN's definition of \raggedright doesn't permit any stretch, and % results in too many overfull boxes. Change. \newdimen\raggedskip \raggedskip=\z@ \newdimen\raggedstretch \raggedstretch=5em \newskip\raggedparfill \raggedparfill=\z@ plus 1fil \def \raggedspaces{\spaceskip=.3333em \xspaceskip=.5em } % Some applications may have to add stretch, in order to avoid % all overfull boxes. \def \raggedright{\rightskip=\raggedskip plus\raggedstretch \raggedspaces \parfillskip=\raggedparfill } \def \raggedleft{\leftskip=\raggedskip plus\raggedstretch \raggedspaces \parfillskip=\z@ } \def \raggedcenter{\leftskip=\raggedskip plus\raggedstretch \rightskip=\leftskip \raggedspaces \parindent=\z@ \parfillskip=\z@ } \def \normalspaces{\spaceskip=.3333em plus.1667em minus.1111em \xspaceskip=.4444em plus.5em minus.037em } \f %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % ***** abbreviations ***** % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def \careof{\leavevmode\hbox{\raise.75ex\hbox{c}\kern-.15em /\kern-.125em\smash{\lower.3ex\hbox{o}}} \ignorespaces} \def \sfrac#1/#2{\leavevmode\kern.1em \raise.5ex\hbox{\the\scriptfont0 #1}\kern-.1em /\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}} \def \d@sh#1{\nobreak\thinspace#1\penalty0\thinspace} \def \dash{\d@sh{--}} \def \Dash{\d@sh{---}} % Hack to permit automatic hyphenation after an actual hyphen. \def\hyph{-\penalty0\hskip0pt\relax } \def\slash{/\penalty0\hskip0pt} % "breakable" slash \def \TeX{\leavevmode\hbox{T\kern-.1667em\lower.424ex\hbox{E}\kern-.125emX}} \def \TUG{\TeX\ \UG} \def \UG{Users Group} \def \TUB{TUGboat} \def \SC{Steering Committee} \def \AMS{American Mathematical Society} \def \POBox{P.\thinspace O.~Box } \def \POBoxTUG{\POBox\unskip~9506, Providence, RI~02940} \def \AMSTeX{\leavevmode\hbox{$\cal A\kern-.2em\lower.376ex \hbox{$\cal M$}\kern-.2em\cal S$-\TeX}} \def \JoT{{\sl The Joy of \TeX}} % note -- \LaTeX definition is from LATEX.TEX 2.08 of 27 Mar 85, % adapted for additional flexibility in TUGboat %\def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{\sc a}\kern-.15em % T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}} %\def \LaTeX{\leavevmode L\kern-.36em\raise.3ex\hbox{\smc a}\kern-.15em\TeX} \def \LaTeX{\TestCount=\the\fam \leavevmode L\raise.42ex \hbox{$\fam\TestCount\scriptstyle\kern-.3em A$}\kern-.15em\TeX} % Note -- The `official' \MF uses \font\manual=manfnt, which, % although it is now in general distribution, may not be % available to all users. \let\manual=\tenssb % replace by manfnt if that is available %\font\manual=manfnt % font used for the METAFONT logo, etc. \def \MF{{\manual META}\-{\manual FONT}} \let\slMF=\MF %\def \slMF{{\manual 89:;}\-{\manual <=>:}} % slant the logo \def \mf{{\smc Metafont}} \def \Pas{Pascal} \def \UNIX{{\smc unix}} \def \VAX{\leavevmode\hbox{V\kern-.12em A\kern-.1em X}} \def \WEB{{\tt WEB}} % Miscellaneous useful stuff \def\bull{\vrule height 1ex width .8ex depth -.2ex } % square bullet \f %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % ***** page dimensions ***** % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newdimen\trimlgt \trimlgt=10.5in % 11in \newdimen\headmargin \headmargin=2.5pc % 3.5pc \newdimen\pagelgt \newdimen\rheadlgt \rheadlgt=2.5pc %% + headmargin = 6pc = 1in \newdimen\toplgt \toplgt=0pt \newdimen\normalcollgt \normalcollgt=54pc % 52pc for 5#2 \newdimen\collgt \collgt=\normalcollgt \newdimen\Collgt \maxdepth=2pt \newdimen\botlgt \botlgt=0pt \newdimen\rfootlgt \rfootlgt=2pc \newif\ifThisIsFirstPage \ThisIsFirstPagefalse \def \resetpagelgt{\pagelgt=\collgt \Collgt=\collgt \advance\pagelgt by \rheadlgt \ifThisIsFirstPage \advance\Collgt by-\toplgt \advance\Collgt by-\botlgt \fi \advance\pagelgt by \maxdepth \global\advance\pagelgt by \rfootlgt \global\vsize=\Collgt } \def \resetfpagelgt{\global\ThisIsFirstPagetrue \resetpagelgt } % exclude special first page material \resetpagelgt \raggedbottom \newdimen\colwd \newdimen\pagewd \pagewd=39pc \newdimen\trimwd \trimwd=\pagewd \def \onecol{\colwd=\pagewd \OneCol } \newdimen\onenarrowcolwd \onenarrowcolwd=30pc \def \onenarrow{\colwd=\onenarrowcolwd \OneCol } % before 5#2, `narrow' was 34pc \newdimen\onemediumcolwd \onemediumcolwd=34pc \def \onemedium{\colwd=\onemediumcolwd \OneCol } \newdimen\twocolcolwd \twocolcolwd=18.75pc \def \twocol{\colwd=\twocolcolwd \TwoCol } \newdimen\threecolcolwd \threecolcolwd=12pc \def \threecol{\colwd=\threecolcolwd \ThreeCol } \f %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % ***** headers/footers ***** % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def \midrtitle{} % to allow for ``advertisements'' notice \def \rtitlex{\TUB, \volx } \def \rtitle{\hbox to \pagewd{\tenrm \rlap{\hbox to \pagewd{\hfil\midrtitle\hfil}}% \ifodd\pageno \rtitlex\hfil\number\pageno \else \number\pageno\hfil\rtitlex \fi }} \def \runhead{\vbox to \rheadlgt{\topskip=1pc \rtitle \vfil }} \def \runfoot{\vbox to \rfootlgt{\topskip=1.5pc \ifnum\xcol=2 \hbox to \pagewd{\midrtitle\hfil\midrtitle}\fi \vfil }} \def \resetfirsthead{\global\toplgt=\z@ \gdef\firsthead{}} \resetfirsthead \newbox\firsth@@d \newbox\firsth@ad \def \setfirsthead{\global\ThisIsFirstPagetrue \def\endset{\egroup % finish \T@stBox \ifdim \toplgt=\z@ \global\toplgt=\ht\T@stBox \resetpagelgt \fi % assume that \firsth@ad ends with glue, hence no \dp \global\setbox\firsth@ad=\vbox to \toplgt{\box\T@stBox \vfil}% \global\setbox\firsth@@d=\vbox to \toplgt{\vfil}% \gdef\firsthead{\ifnum \xcol=2 \box\firsth@ad \else \copy\firsth@@d \fi }}% \setbox\T@stBox=\vbox\bgroup \hsize=\pagewd } \def \resetfirstfoot{\global\botlgt=\z@ \gdef\firstfoot{}} \resetfirstfoot \newbox\firstf@@t \newbox\firstf@ot \def \setfirstfoot{\global\ThisIsFirstPagetrue \def\endset{\egroup % finish \T@stBox \ifdim \botlgt=\z@ \botlgt=\ht\T@stBox \global\advance\botlgt by \dp\T@stBox \resetpagelgt \fi \global\setbox\firstf@ot=\vbox to \botlgt{\box\T@stBox \vfil}% \global\setbox\firstf@@t=\vbox to \botlgt{\vfil}% \gdef\firstfoot{\ifnum \xcol=2 \copy\firstf@ot \else \copy\firstf@@t \fi }}% \setbox\T@stBox=\vbox\bgroup \hsize=\pagewd } \f %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % ***** output ***** % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % In the absence of automatic column-balancing, provide a mechanism % for manually shortening a specified page. \newif\ifSh@rtPage \Sh@rtPagefalse \newif\ifSh@rtPagePending \Sh@rtPagePendingfalse \newcount\Sh@rtPageNo \newdimen\Sh@rtPageLgt \def\@to{to} \def\@by{by} % #1 = to/by; #2 = \dimen; #3 = <dimen>; #4 = * of Shorten*Page \def\@toby#1#2#3#4{\def\@tb{#1}% \ifx \@tb\@to \global #2=#3 \else \ifx \@tb\@by \T@stDimen=#3 % accommodate negative #3 #2=\normalcollgt \global\advance #2 by -#3 \else \errmessage{#1 is invalid syntax; \string\Shorten#4Page requires "to" or "by"}\fi \fi } \def\@plusno#1#2;{\if +#1\T@stCount=\pageno \advance\T@stCount by #2 \else \T@stCount=#1#2 \fi } \def \ShortenPage #1 #2 #3. {\global\Sh@rtPagePendingtrue % \global\Sh@rtPageNo=#1 \@plusno#1;\global\Sh@rtPageNo=\T@stCount \@toby{#2}{\Sh@rtPageLgt}{#3}{}} \def \ShortenThisPage #1 #2. {\global\Sh@rtPagetrue \@toby{#1}{\vsize}{#2}{This}} % Two cases: 0 = last page was nonstandard; reset \vsize % 1 = do not reset \vsize: okay or length already reset \def \D@EndPage{\global\advancepageno \T@stCount=1 \ifThisIsFirstPage \T@stCount=0 \global\ThisIsFirstPagefalse \resetfirsthead \resetfirstfoot \global\collgt=\normalcollgt \fi \ifSh@rtPage \T@stCount=0 \global\Sh@rtPagefalse \fi \ifSh@rtPagePending \ifnum\pageno = \Sh@rtPageNo \T@stCount=1 \global\vsize=\Sh@rtPageLgt \global\Sh@rtPagePendingfalse \global\Sh@rtPagetrue \fi \fi \ifcase \T@stCount \resetpagelgt \fi } \f % Distinguish between laser printer output (for proofing and other % general use) and production, which uses a phototypesetter. \newif\ifLaser \Lasertrue % Registration marks \def \HorzR@gisterRule{\vrule height 0.2pt depth 0pt width 0.5in } \def \DownShortR@gisterRule{\vrule height 0.2pt depth 1pc width 0.2pt } \def \UpShortR@gisterRule{\vrule height 1pc depth 0pt width 0.2pt } % ``T'' marks centered on top and bottom edges of paper \def \ttopregister{\dlap{% \hbox to \trimwd{\HorzR@gisterRule \hfil \HorzR@gisterRule \HorzR@gisterRule \hfil \HorzR@gisterRule}% \hbox to \trimwd{\hfil \DownShortR@gisterRule \hfil}}} \def \tbotregister{\ulap{% \hbox to \trimwd{\hfil \UpShortR@gisterRule \hfil}% \hbox to \trimwd{\HorzR@gisterRule \hfil \HorzR@gisterRule \HorzR@gisterRule \hfil \HorzR@gisterRule}}} \def \topregister{\ttopregister} \def \botregister{\tbotregister} % All pages containing data are formatted by \midpage \def \midpage#1{\vbox{\basezero \ifLaser \hrule height\z@ depth\z@ width\p@ \vskip-\rheadlgt \else \vbox to \trimlgt \bgroup \topregister \vskip \headmargin \fi \vbox to \pagelgt{\basezero \ifnum\xcol=2 \runhead \else \vbox to \rheadlgt{}\fi \ifThisIsFirstPage \firsthead \fi \hbox to \pagewd{#1}% % \vsize applied in \pagebody \ifThisIsFirstPage \firstfoot \fi \vfil % if no depth, avoid underfull box \runfoot }% \ifLaser \else \vfill \botregister \egroup \fi}% \ifnum\xcol=2 \global\xcol=1 \D@EndPage \else \global\xcol=2 \fi \global\advance\spoolno by 1 } % The production version includes trim marks, which are required % on photographic paper, but are unsuitable for laser printer output. % The production version also generates 2 separate .dvi pages for each % logical page; these are overlaid photographically, and allow the % Alphatype to run more efficiently on 2-column pages. % For laser printer output, each page is output as a unit. \f % Reorganize \pagecontents from PLAIN to put footnotes at very % bottom of page, even if \raggedbottom. \def\pagecontents{\ifvoid\topins\else\unvbox\topins\fi \dimen@=\dp\@cclv \unvbox\@cclv % open up \box255 \ifr@ggedbottom \kern-\dimen@ \vfil \fi \ifvoid\footins\else % footnote info is present \vskip\skip\footins \footnoterule \unvbox\footins\fi } \def \newcol{\par\vfill\eject} \newif\ifOneColFormat \newbox\SaveP@geBox \def \OneCol{\hsize=\colwd \gdef\newpage{\par\vfill\eject}% \OneColFormattrue \gdef\output@{% \ifLaser \xcol=2 \shipout\midpage{\hfil\pagebody \hfil}% \else \shipout\midpage{\hfil\pagebody \hfil}% \shipout\vbox to \trimlgt{\basezero \topregister \vskip\headmargin \vbox to \pagelgt{\basezero \runhead \vfill }% \vfill \botregister }% \D@EndPage \global\xcol=1 \global\advance\spoolno by 1 \fi }} \def \TwoCol{\hsize=\colwd \gdef\newpage{\par\vfill\eject \ifnum\xcol=2 \null\vfill\eject \fi }% \OneColFormatfalse \gdef\output@{% % use PLAIN's \pagebody instead of \box255 \ifnum\xcol=1 \ifLaser \global\setbox\SaveP@geBox=\vbox{\pagebody}% \global\xcol=2 \else \shipout\midpage{\pagebody \hfil}\fi \else \shipout\midpage{\ifLaser \box\SaveP@geBox \fi \hfil\pagebody }\fi \ifnum\outputpenalty>-\@MM \else \dosupereject \fi }} \f % Three-column format is a hack. Collect all column data and % ship it out in the third segment, but conform to the \midpage % convention that \xcol can never be greater than 2. \newbox\SaveP@geTwoBox \def \ThreeCol{\hsize=\colwd \gdef\newpage{\par\vfill\eject \loop \ifnum\xcol>1 \advance\xcol by 1 \hbox to \hsize{\hfill}\vfill\eject \repeat }% \OneColFormatfalse \gdef\output@{% % use PLAIN's \pagebody instead of \box255 \ifnum\xcol=1 \global\setbox\SaveP@geBox=\vbox{\pagebody}% \global\xcol=2 \else \ifnum\xcol=2 \global\setbox\SaveP@geTwoBox=\vbox{\pagebody}% \global\xcol=3 \else \ifLaser \else \xcol=1 \shipout\midpage {\vbox to \vsize{\null\vfill}}\fi \xcol=2 \shipout\midpage{\box\SaveP@geBox \hfil \box\SaveP@geTwoBox \hfil \pagebody }\fi \fi \ifnum\outputpenalty>-\@MM \else \dosupereject \fi }} \f % Dates and other items which identify the volume and issue % To use: \vol 5, 2. % \issdate October 1984. % \issueseqno=10 % For production, these are set in a separate file, TUGBOT.DATES, % which is issue-specific. \def \v@lx{\gdef\volx{Volume~\volno~(\volyr), No.~\issno}} \def \volyr{} \def \volno{} \def \vol #1,#2.{\gdef\volno{#1\unskip}% \gdef\issno{\ignorespaces#2\unskip}% \setbox\TestBox=\hbox{\volyr}% \ifdim \wd\TestBox > .2em \v@lx \fi } \def \issdate #1#2 #3.{\gdef\issdt{#1#2 #3}\gdef\volyr{#3}% \gdef\bigissdt{#1{\smc\uppercase{#2}} #3}% \setbox\TestBox=\hbox{\volno}% \ifdim \wd\TestBox > .2em \v@lx \fi } % TUGboat conventions include the issue number in the file name. % Permit this to be incorporated into file names automatically. % If issue number = 11, \Input filnam will read tb11filnam.tex. \newcount\issueseqno \issueseqno=-1 \def \Input #1 {\ifnum\issueseqno<0 \def\infil@{#1}% \else \def\infil@{tb\number\issueseqno#1}\fi \input \infil@ } % Write out (both to a file and to the log) the starting page number % of an article, to be used for cross references and in contents. % \pagexref is used for articles fully processed in the TUGboat run. % \PageXref is used for "extra" pages, where an item is submitted % as camera copy, and only running heads (at most) are run. \def \pagexref#1{\ifFirstPar \nobreak \fi % don't clobber switch by accident \write-1{\def\expandafter\noexpand\csname#1\endcsname{\number\pageno}}% \write1{\def\expandafter\noexpand\csname#1\endcsname{\number\pageno}}% \ifFirstPar \nobreak \fi } % and don't allow page break \def \PageXref#1{% \immediate\write-1{\def\expandafter \noexpand\csname#1\endcsname{\number\pageno}}% \immediate\write1{\def\expandafter \noexpand\csname#1\endcsname{\number\pageno}}} \f % Section titles and separators \newskip\Tabskss \Tabskss=0pt plus 1000pt minus 1000pt \newskip\AboveTitleSkip \AboveTitleSkip=12pt % 10pt plus 2pt minus 2pt \newskip\BelowTitleSkip \BelowTitleSkip=8pt % plus 1pt minus 1pt \setbox\T@stBox=\hbox{\titlefont O} \newdimen\stfontheight \stfontheight=\ht\T@stBox \newdimen\strulethickness \strulethickness=.6pt \newcount\n@stnum \n@stnum=0 \def \sthrule{\hrule height\strulethickness depth 0pt } \def \stvrule{\vrule height 2\stfontheight depth\stfontheight width\strulethickness } \def \sectitlebox #1<{\vbox{\sthrule \hbox to \hsize{\stvrule\hfil #1\hfil\vrule width\strulethickness }% \sthrule }} \def \secsep{\vskip 5\baselineskip} \newif\ifSecTitle \SecTitlefalse %\def \sectitle #1<{\par \SecTitletrue % \penalty-1000\secsep % \centerline{\sectitlebox \titlefont #1<}% % \nobreak \vskip\baselineskip } \def \sectitle #1<{\par \SecTitletrue \penalty-1000\secsep \n@stnum=0 {\def\\{ }\setbox\T@stBox=\hbox{\titlefont#1}% \ifdim\wd\T@stBox < \hsize \def\result{\unhbox\T@stBox}% \else \def\\{\cr\noalign{\global\advance\n@stnum by 1 }}% \setbox\T@stBox=\vbox{\titlefont \halign{\hfil##\hfil\cr#1\crcr}}% \def\result{\vbox{\unvbox\T@stBox}}\fi \ifnum\n@stnum=1 \def\stvrule{\vrule height 3.5\stfontheight depth\stfontheight width\strulethickness }\fi \centerline{\sectitlebox \titlefont\result<}}% \nobreak \vskip\baselineskip } %\def \secsep{\vskip\baselineskip % * * * as for TUGboat pre 5#2 % \centerline{\hbox to 180pt{% % \leaders\hbox to 15pt{\hfil\char'052\hfil}\hfill}}% % \vskip2\baselineskip } \def \littlesep{\vskip 3pt plus 1pt minus 1pt \centerline{\hbox to 90pt{\ignorespaces \leaders\hbox to 10pt{\hfil .\hfil}\hfill} }% \vskip 3pt plus 1pt minus 1pt} % Titles, authors, subtitles, and first-paragraph formatting \newif\ifFirstPar \FirstParfalse \def\SetupFirstPar{\global\parindent=0pt \global\FirstPartrue } % make the first paragraph after a title start flush left, % then reset \parindent; but if all paragraphs should start % flush left, then don't reset. \everypar{\ifNoParIndent \else \ifFirstPar \NormalParIndent \global\FirstParfalse \fi \fi } % For uppercasing title and author; from AMSPPT.STY, version 0 \def\uctext@#1{\uppercase@#1\gdef\uppercase@@{}$\m@th$} \def\uppercase@#1$#2${\gdef\uppercase@@{\uppercase@}\uppercase {#1}${#2}$\uppercase@@} \f \newif\ifCtrTitle \CtrTitlefalse \def \TitleUC{} % ordinary titles uc/lc \def \titleframe #1#2#3{\ifSecTitle \SecTitlefalse \else \vskip\AboveTitleSkip \fi \ifCtrTitle \def\CTSkip{\unskip\hfil}\CtrTitlefalse \else \def\CTSkip{}\fi \vbox{#1\halign{\hbox to \hsize {\bf\TitleUC{\CTSkip\ignorespaces##\unskip\hfil}}\strutt\cr #2\crcr}}% \let\oldcr=\cr\def\cr{}% \setbox\T@stBox=\hbox{#3}% \let\cr=\oldcr \ifdim \wd\T@stBox < 5pt % omit if author is null \else \nobreak \vskip 4pt % 4pt + \BelowTitleSkip = \baselineskip \vbox{\halign{\hbox to \hsize {\hskip\parindent\CTSkip\ignorespaces##\hfil}\cr #3\crcr}}\fi \setbox\T@stBox=\hbox{}% \nobreak \vskip\BelowTitleSkip \SetupFirstPar } \def \title #1\\#2\endx{\titleframe{}{#1}{#2}} \def \Title #1\\#2\endx{\titleframe{\def\TitleUC{\uctext@}}{#1}{#2}} \def \ctrtitle #1\\#2\endx{\CtrTitletrue\titleframe{}{#1}{#2}} \def \ctrTitle #1\\#2\endx{\CtrTitletrue \titleframe{\def\TitleUC{\uctext@}}{#1}{#2}} % \subtitle and \subsubtitle are used in the announcements box \def \subtitle #1\endx{{\CtrTitletrue % \AboveTitleSkip=10pt \titleframe{}{#1}{}}} \def \subsubtitle #1\endx{{\CtrTitletrue \ifFirstPar \AboveTitleSkip=0pt \fi % \else \AboveTitleSkip=10pt \titleframe{}{\sl#1}{}}} % \section was first defined for Jacques Desarmenien's article in 5#2 \def \section #1 #2\par{\ifFirstPar \nobreak \else \penalty-200 \vskip 8pt \fi \noindent{\bf\hbox to \normalparindent{#1\hfil}#2}\endgraf \nobreak \vskip 4pt \SetupFirstPar } % This is based on \beginsection in PLAIN and \section above. \outer\def\beginsection#1\par{\ifFirstPar \nobreak \else \vskip\z@ plus 4\baselineskip \penalty-100 \vskip\z@ plus-4\baselineskip \vskip 8pt \vskip\parskip \fi \message{#1}{\raggedright\noindent\bf#1\endgraf}\nobreak \vskip 4pt \SetupFirstPar } \f % Define address blocks and other structures that use \obeylines % in the context \tag ...< % This requires that < be active, so that \obeylines is invoked % at the outer level. \tag{...} will not deliver the data with % ^M (carriage return) intact, so is not a suitable format for % any construction using \obeylines; the reference (if any) in % The TeXbook has not been found, and this information has been % determined empirically, referring to \obeylines constructions % in PLAIN and MANMAC.TeX (The TeXbook macros). {\catcode`\^^M=\active % these lines must end with % \gdef\obeylinesblock{\catcode`\^^M\active \let^^M\par\nobreak}} {\catcode`\<=\active \obeylines \gdef\AddrFrame#1#2{\endgraf\def\Phone{\leavevmode\kern\parindent}% \catcode`\<=\active % % next line intentionally ends with <cr> % \def<{ \egroup\allowbreak\catcode`\<=12 #2 }\bgroup #1\obeylinesblock }% \gdef\LetterAddr{\AddrFrame{\penalty9999\smallskip}{}}% \gdef\TextAddr{\AddrFrame{\penalty9999}{}}% \gdef\Submitted{\AddrFrame{\nobreak\smallskip \parindent=1.5\normalparindent % \def\Signed{\parfillskip=\normalparindent \qquad\hfil }}{}}% \gdef\Columnist{\AddrFrame{\nobreak\FirstParfalse % \def\NetAddr{\smallskip \indent\indent }% \def\Phone{\NetAddr }}% {\nobreak \vskip\BelowTitleSkip \SetupFirstPar }\sl }% } \f % Support verbatim listing of TeX source, as defined in TeXbook, p. 421; % lifted from MANMAC.TEX, and modified slightly for narrower columns. % % Although | is ordinarily an escape character within verbatim mode, % provide a method for letting it instead be the character itself % within a display verbatim listing, as needed; this is based on % a technique developed by Michael Ferguson. Note that within one % \begintt...\endtt block, | can be only one of: % the printing | character, or % active (the escape character) % It cannot perform both functions at the same time. \def\ttverbatim{\begingroup \catcode`\\=\other \catcode`\{=\other \catcode`\}=\other \catcode`\$=\other \catcode`\&=\other \catcode`\#=\other \catcode`\%=\other \catcode`\~=\other \catcode`\_=\other \catcode`\^=\other \catcode`\"=\other \obeyspaces \obeylines \hyphenpenalty=10000 \tt} \newskip\ttglue {\tenpoint\tt \global\ttglue=.5em plus .25em minus .15em} % this should be installed in each font % From David Eppstein's ``Trees'' paper (6#1), preserve initial spaces. {\obeyspaces\gdef {\ifvmode\indent\fi\space}} \newdimen\ttrightskip \ttrightskip=5pc \newif\ifttVertChar \ttVertCharfalse {\catcode`\|=\active \gdef\VertChar{\def|{\char"7C }}} \outer\def\begintt{$$\def\par{\leavevmode\null\endgraf}\ttverbatim \parskip=\z@ \ifttVertChar \VertChar \global\ttVertCharfalse \else \catcode`\|=0 \fi \frenchspacing \rightskip=-\ttrightskip \ttfinish} {\catcode`\|=0 |catcode`|\=\other % | is temporary escape character |obeylines % end of line is active |gdef|ttfinish#1^^M#2\endtt{#1|vbox{#2}|endgroup$$}} % Other non-tt elements that may be embedded within \begintt...\endtt . \def\MTH{$} \def\sb{_} \def\sp{^} \def\SP{{\tt\char"20 }} % "visible" space \chardef\bs=`\\ \def\vrt{{\tt\char`\|}} \catcode`\|=\active %{\obeylines \gdef|{\ttverbatim \spaceskip\ttglue \let^^M=\ \let|=\endgroup}} {\obeylines \gdef\activatettbar{\global\catcode`\|=\active % \gdef|{\ttverbatim \spaceskip\ttglue \xspaceskip\ttglue % \let^^M=\ \let|=\endgroup}}} \activatettbar % The active | (which here implements verbatim mode) is redefined in % such headers as TABLES.TeX and must be able to be reinstated. % \activatettbar has been tested with TABLES.TeX, and the two uses % are mutually operable (TUGboat 7#2, "Tables in INRSTeX"). \f % Define a structure that will permit a list (using \obeylines) % to be made into 2 columns, split by \vsplit, indented the % normal \parindent \def \NormalizeBlockHeight{\TestCount=1 % \@ne \TestDimen=\dimen0 \advance\TestDimen by-\topskip \CutOneLine } \def \CutOneLine{\advance\TestCount by 1 \advance\TestDimen by-\baselineskip \ifdim\TestDimen < \baselineskip % \@ne \def\result{\TestDimen=\baselineskip \multiply\TestDimen by \TestCount \advance\TestDimen by \topskip \global\dimen0=\TestDimen }% \else \def\result{\CutOneLine }\fi \result } \def \twosplit{{\topskip=\baselineskip \splittopskip=\topskip \setbox0=\copy\TestBox \dimen0=\ht\TestBox \NormalizeBlockHeight \divide\dimen0 by 2 \setbox\LeftHalf=\vsplit\TestBox to \dimen0 \ifdim\ht\TestBox > \ht\LeftHalf \advance\dimen0 by \baselineskip \setbox\TestBox=\copy0 \setbox\LeftHalf=\vsplit\TestBox to \dimen0 \fi \line{\kern\parindent\valign{##\vfil\cr \unvbox\LeftHalf\cr\noalign{\hfil}\unvbox\TestBox\cr}}}% \global\setbox0=\null} \newbox\LeftHalf \newdimen\HalfWd \HalfWd=\twocolcolwd \advance\HalfWd by-\normalparindent \divide\HalfWd by 2 {\obeylines \gdef\twouplist #1{\topskip=\baselineskip \splittopskip=\topskip % \begingroup \parindent=0pt \obeylines % next line ends with intentional <cr> \def\endtwouplist{ \egroup % % end of \vbox \endgroup % % end of \obeylines group \twosplit }% \global\setbox\TestBox=\vbox\bgroup\hsize=\HalfWd % \indent\vrule height\topskip width 0pt #1}% } \f % Tags for special formatting of editor's notes, meeting % attendees lists, etc. \def \Editor{\noindent To the Editor:\par} \def \xEdNote{{\tenupit Editor's note:\enspace }} \def \EdNote #1{\if #1[\unskip\hskip1em [\thinspace\xEdNote\ignorespaces \else \ifFirstPar \else \medskip\noindent \fi \xEdNote #1\fi } \def \Attendee #1 {\par \noindent\hangindent 2\normalparindent \hbox to .5\normalparindent{\hfil #1\thinspace}\ignorespaces} \def \Dag{\raise .6ex\hbox{$\scriptstyle\dagger$}} % Footnotes are mainly supported by PLAIN format, with these % exceptions. \skip\footins=12pt % full blank line % 24pt \def\footnoterule{\kern-8pt \hrule width 5pc \kern 7.6pt } % the \hrule is .4pt high \newif\ifDelayFirstPar \DelayFirstParfalse \def\vfootnote#1{\ifFirstPar \DelayFirstPartrue \fi \insert\footins\bgroup \interlinepenalty\interfootnotelinepenalty \splittopskip\ht\strutbox % top baseline for broken footnotes \splitmaxdepth\dp\strutbox \floatingpenalty\@MM \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip \parindent=\normalparindent % always indent footnotes; added for TUGboat \textindent{#1}\footstrut\futurelet\next\fo@t} \def\@foot{\strut\egroup \ifDelayFirstPar \SetupFirstPar \global\DelayFirstParfalse \fi } % Draw a box around a whole page, e.g. announcements page; % format must be \onenarrow or \onemedium, and start on a new page. \def \bigbox{\hrule \hbox\bgroup \vrule\kern 1pc \vbox\bgroup \vskip 1pc } \def \endbox{\endgraf \vskip 1pc \egroup \kern 1pc\vrule \egroup \hrule } \f % Macros to produce extra running heads for stripping onto pages % received as camera copy. Format must be preset to \OneCol, and % start on a new page. % Generate 5 (4 + normal running head) per page. \def \DrawT@pLines{\vskip\topskip \ulap{\line{\raise 1ex\rlap{\leaders\hrule\hskip\pagewd}% \leaders\hrule\hfill}}\medskip} \def \r@nhead{\vbox to .23\vsize{\basezero \hsize=\pagewd \vfil \topregister \vskip\headmargin \runhead \DrawT@pLines }\medskip \advancepageno } \def \nextrunner{% \ifnum\T@stCount>0 \ifnum\T@stCount>5 \TestCount=5 \else\TestCount=\T@stCount \fi \advance\T@stCount by-\TestCount \DrawT@pLines % always one at top of page \loop\ifnum\TestCount>1 \r@nhead \advance\TestCount by\m@ne \repeat \newpage \nextrunner \fi } \def \ExtraRunheads #1, #2.{\T@stCount=#1 \gdef\pageprefix{#2}% % as in A-10 for appendices; not used just now \nextrunner } \catcode`\@=12 % @ is prohibited in AMS-TeX, but should not be in TUGboat % some hyphenation exceptions: \hyphenation{man-u-script man-u-scripts} \endinput \tracingonline=1 \showbox255