diff options
author | Karl Berry <karl@freefriends.org> | 2007-04-02 23:48:15 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2007-04-02 23:48:15 +0000 |
commit | e0f182fd8b27038d7b911a1e9a6cdb180ebced8e (patch) | |
tree | 3b8d28ca765c26640d1d18a7b073e32e66f3dc41 /Master/texmf-dist/tex/plain/tugboat-plain | |
parent | 840c92f5af1df8211bed142e425912394a23ba7a (diff) |
separate tugboat-plain package a la ctan
git-svn-id: svn://tug.org/texlive/trunk@4101 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/plain/tugboat-plain')
-rw-r--r-- | Master/texmf-dist/tex/plain/tugboat-plain/tugboat.cmn | 1104 | ||||
-rw-r--r-- | Master/texmf-dist/tex/plain/tugboat-plain/tugboat.sty | 2245 | ||||
-rw-r--r-- | Master/texmf-dist/tex/plain/tugboat-plain/tugproc.sty | 366 |
3 files changed, 3715 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/plain/tugboat-plain/tugboat.cmn b/Master/texmf-dist/tex/plain/tugboat-plain/tugboat.cmn new file mode 100644 index 00000000000..854ff5e7146 --- /dev/null +++ b/Master/texmf-dist/tex/plain/tugboat-plain/tugboat.cmn @@ -0,0 +1,1104 @@ +%% @texfile{ +%% filename = "tugboat.cmn", +%% version = "1.18", +%% date = "2006/06/07", +%% time = "13:41:59 EDT", +%% checksum = "29788 1064 3117 35978", +%% filetype = "common macros for TUGboat", +%% copyright = "Copyright 1993-1996, 2006 TeX Users Group. +%% Unlimited copying and redistribution of this file +%% are permitted as long as this file is not +%% modified. Modifications (and redistribution of +%% modified versions) are also permitted, but only if +%% the resulting file is renamed." +%% author = "TeX Users Group", +%% address = "TeX Users Group, +%% P.O.Box 2311, +%% Portland, OR 97208-2311, +%% USA", +%% telephone = "+1 503 223-9994", +%% FAX = "+1 206 203-3960", +%% email = "TUGboat@tug.org", +%% codetable = "ISO/ASCII", +%% keywords = "tex users group, tugboat, common macros", +%% supported = "yes", +%% abstract = "This file contains macros common to both +%% the PLAIN and LaTeX style files for TUGboat, +%% the Communications of the TeX Users Group. +%% Among other things, it contains supplementary +%% definitions for abbreviations and logos that +%% appear in TUGboat.", +%% docstring = "The checksum field above contains a CRC-16 +%% checksum as the first value, followed by the +%% equivalent of the standard UNIX wc (word +%% count) utility output of lines, words, and +%% characters. This is produced by Robert +%% Solovay's checksum utility.", +%% } +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def\fileversion{v1.18} +\def\filedate{2006/06/07} + +\message{File `TUGBOAT.CMN' \fileversion \space\space <\filedate>} + +% +% ***** TUGBOAT.CMN ***** +% +% See the bottom of the file (after \endinput) for a list of +% items defined. +% + +% ************************************************************************* + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% ***** helpful shorthand ***** +% + +% The following allow for easier changes of category. These require that +% the character be addressed as a control-sequence: e.g. \makeescape\/ will +% make the / an escape character. + +\def\makeescape#1{\catcode`#1=0 } +\def\makebgroup#1{\catcode`#1=1 } +\def\makeegroup#1{\catcode`#1=2 } +\def\makemath#1{\catcode`#1=3 } +\def\makealign#1{\catcode`#1=4 } +\def\makeeol#1{\catcode`#1=5 } +\def\makeparm#1{\catcode`#1=6 } +\def\makesup#1{\catcode`#1=7 } +\def\makesub#1{\catcode`#1=8 } +\def\makeignore#1{\catcode`#1=9 } +\def\makespace#1{\catcode`#1=10 } +\def\makeletter#1{\catcode`#1=11 } +\def\makeother#1{\catcode`#1=12 } +\def\makeactive#1{\catcode`#1=13 } +\def\makecomment#1{\catcode`#1=14 } + +\def\makeatletter{\catcode`\@=11 } % included for historical reasons +\chardef\other=12 +\def\makeatother{\catcode`\@=\other} + + % alternative to localization +\def\savecat#1{% + \expandafter\xdef\csname\string#1savedcat\endcsname{\the\catcode`#1}} +\def\restorecat#1{\catcode`#1=\csname\string#1savedcat\endcsname} + + +\savecat\@ +\makeletter\@ % used, as in PLAIN, in protected control sequences + + % for restoring meanings of global control sequences +\def\SaveCS#1{% + \def\scratch{\expandafter\let\csname saved@@#1\endcsname}% + \expandafter\scratch\csname#1\endcsname} +\def\RestoreCS#1{% + \def\scratch{\expandafter\let\csname#1\endcsname}% + \expandafter\scratch\csname saved@@#1\endcsname} + + +% To distinguish between macro files loaded + +\def\plaintubstyle{plain} +\def\latextubstyle{latex} +\ifx\tugstyloaded@\undefined\let\tugstyloaded@\plaintubstyle\fi + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% ***** abbreviations and logos ***** +% + +\def\acro#1{{\SMC #1}\spacefactor1000 } + +\def\AllTeX{(\La)\TeX} +\def\AMS{American Mathematical Society} +\def\AmS{{\the\textfont2 A}\kern-.1667em\lower.5ex\hbox + {\the\textfont2 M}\kern-.125em{\the\textfont2 S}} +\def\AmSLaTeX{\AmS-\LaTeX} +\def\AmSTeX{\AmS-\TeX} +\def\ANSI{\acro{ANSI}} +\def\ASCII{\acro{ASCII}} +\def\aw{A\kern.1em-W} +\def\AW{Addison\kern.1em-\penalty\z@\hskip\z@skip Wesley} +\def\BibTeX{{\rm B\kern-.05em{\smc i\kern-.025emb}\kern-.08em\TeX}} +\def\CandT{{\sl Computers \& Typesetting}} +\def\ConTeXt{C\kern-.0333emon\-\kern-.0667em\TeX\kern-.0333emt} +\def\Cplusplus{C\raise.7ex\hbox{$_{++}$}} +\def\CSS{\acro{CSS}} +\def\CTAN{\acro{CTAN}} +\def\DTD{\acro{DTD}} +\def\DVD{\acro{DVD}} +\def\DVI{\acro{DVI}} +\def\DVIPDFMx{\acro{DVIPDFM}$x$} +\def\DVItoVDU{DVIto\kern-.12em VDU} +\def\eTeX{$\varepsilon$-\kern-.125em\TeX} +\def\FAQ{\acro{FAQ}} +\def\FTP{\acro{FTP}} +\def\GNU{\acro{GNU}} +\def\GUI{\acro{GUI}} +\def\Hawaii{Hawai`i} +\def\HTML{\acro{HTML}} +\def\HTTP{\acro{HTTP}} +\def\ISBN{\acro{ISBN}} +\def\ISO{\acro{ISO}} +\def\ISSN{\acro{ISSN}} +\def\JPEG{\acro{JPEG}} +% Japanese TeX +\def\JTeX{\leavevmode\hbox{\lower.5ex\hbox{J}\kern-.18em\TeX}} +\def\JoT{{\sl The Joy of \TeX\/}} +\def\LAMSTeX{L\raise.42ex\hbox{\kern-.3em\the\scriptfont2 A}% + \kern-.2em\lower.376ex\hbox{\the\textfont2 M}\kern-.125em + {\the\textfont2 S}-\TeX} +% note -- \LaTeX definition is from LATEX.TEX 2.09 of 7 Jan 86, +% adapted for additional flexibility in TUGboat +%\def\LaTeX{\TestCount=\the\fam \leavevmode L\raise.42ex +% \hbox{$\fam\TestCount\scriptstyle\kern-.3em A$}\kern-.15em\TeX} +% note -- broken in two parts, to permit separate use of La, +% as in (La)TeX +\def\La{\TestCount=\the\fam \leavevmode L% + \setbox\TestBox=\hbox{$\fam\TestCount\scriptstyle A$}% + \kern-.5\wd\TestBox\raise.42ex\box\TestBox} +\def\LaTeX{\La\kern-.15em\TeX} +\def\LaTeXe{\LaTeX{}\kern.05em2$_{\textstyle\varepsilon}$} +\def\MacOSX{Mac\,\acro{OS\,X}} +\def\MathML{Math\acro{ML}} +% for Robert McGaffey +\def\Mc{\setbox\TestBox=\hbox{M}M\vbox to\ht\TestBox{\hbox{c}\vfil}} +% Additional sizes of the manual font may be needed. +\font\manual=logo10 % font used for the METAFONT logo, etc. +\def\MF{{\manual META}\-{\manual FONT}\spacefactor1000 } +\def\MP{{\manual META}\-{\manual POST}\spacefactor1000 } +\def\mf{{\smc Metafont}} +\def\MFB{{\sl The \slMF book}} +% multilingual (INRS) TeX +\def\mtex{T\kern-.1667em\lower.5ex\hbox{\^E}\kern-.125emX\spacefactor1000 } +\def\NTStext{N\mkern-4mu \lower.5ex\hbox{$\cal T$}\mkern-2mu S} +\def\NTS{{\ifmmode \cal\NTStext \else $\cal\NTStext $\fi}} +\def\OMEGA{$\Omega$} +\def\OCP{\OMEGA\acro{CP}} +\def\OTP{\OMEGA\acro{TP}} +\def\Pas{Pascal} +\def\pcMF{\leavevmode\raise.5ex\hbox{p\kern-.3ptc}MF\spacefactor1000 } +\def\PCTeX{PC\thinspace\TeX} +\def\pcTeX{\leavevmode\raise.5ex\hbox{p\kern-.3ptc}\TeX} +\def\PDF{\acro{PDF}} +\def\PiC{P\kern-.12em\lower.5ex\hbox{I}\kern-.075emC\spacefactor1000 } +\def\PiCTeX{\PiC\kern-.11em\TeX} +\def\plain{{\tt plain}} +\def\PNG{\acro{PNG}} +\def\POBox{P.\thinspace O.~Box } +%\def\POBoxTUG{\POBox\unskip~9506, Providence, RI~02940} +\def\PS{{Post\-Script}} +\def\RTF{\acro{RTF}} +\def\SC{Steering Committee} +\def\SGML{\acro{SGML}} +\def\SliTeX{{\rm S\kern-.06em{\smc l\kern-.035emi}\kern-.06em\TeX}} +% for \def\slMF{{\manualsl META}\-{\manualsl FONT}\spacefactor1000 } +% Use \font\manualsl=logosl10 instead, if it's available, +\def\slMF{\MF} +% Atari ST (Klaus Guntermann) +\def\stTeX{{\smc st\rm\kern-0.13em\TeX}} +\def\SVG{\acro{SVG}} +\def\TANGLE{{\tt TANGLE}\spacefactor1000 } +\def\TB{{\sl The \TeX book\/}} +\def\TP{{\sl \TeX\/}: {\sl The Program\/}} +\def\TeX{T\kern-.1667em\lower.424ex\hbox{E}\kern-.125emX\spacefactor1000 } +\def\TeXhax{\TeX hax} +% Don Hosek +\def\TeXMaG{\TeX M\kern-.1667em\lower.5ex\hbox{A}\kern-.2267emG% + \spacefactor1000 } +%\def\TeXtures{\TestCount=\the\fam +% \TeX\-\hbox{$\fam\TestCount\scriptstyle TURES$}} +\def\TeXtures{{\it Textures}} +\let\Textures=\TeXtures +\def\TeXXeT{\TeX-{}-\XeT} +\def\TFM{\acro{TFM}} +\def\Thanh{H\`an~Th\^e\llap{\raise.5ex\hbox{\'{}}}~Th\`anh} +\def\TIFF{\acro{TIFF}} +\def\ttn{{\sl TTN}\spacefactor1000 } +\def\TTN{{\sl \TeX{} and TUG NEWS}\spacefactor1000 } +\def\tubfont{\sl} % redefined in other situations +\def\TUB{{\tubfont TUGboat\/}} +\def\TUG{\TeX\ \UG} +\def\tug{\acro{TUG}} +\def\UG{Users Group} +\def\UNIX{\acro{UNIX}} +\def\UTF{\acro{UTF}} +\def\VAX{V\kern-.12em A\kern-.1em X\spacefactor1000 } +\def\VorTeX{V\kern-2.7pt\lower.5ex\hbox{O\kern-1.4pt R}\kern-2.6pt\TeX} +\def\XeT{X\kern-.125em\lower.424ex\hbox{E}\kern-.1667emT\spacefactor1000 } +\def\XML{\acro{XML}} +\def\WEB{{\tt WEB}\spacefactor1000 } +\def\WEAVE{{\tt WEAVE}\spacefactor1000 } +% the Xe\TeX logo requires Eplain, which is not assumed here, so +% the definition is omitted. +\def\XHTML{\acro{XHTML}} +\def\XSLT{\acro{XSLT}} + +%******************************************************************** + +\newlinechar=`\^^J +\normallineskiplimit=1pt + +\clubpenalty=10000 +\widowpenalty=10000 + +\def\NoParIndent{\parindent=\z@} +\newdimen\normalparindent \normalparindent=20pt % plain = 20pt +\def\NormalParIndent{\global\parindent=\normalparindent} +\NormalParIndent + +\def\BlackBoxes{\overfullrule=5pt } +\def\NoBlackBoxes{\overfullrule=\z@ } +\def\newline{\hskip\z@ plus \pagewd \break} +\def\nohyphens{\hyphenpenalty\@M\exhyphenpenalty\@M} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% ***** 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 +\newif\ifT@stIf \newif\ifTestIf + + +% \cs existence test, stolen from TeXbook exercise 7.7 +\def\ifundefined#1{\expandafter\ifx\csname#1\endcsname\relax } + +% LaTeX conventions which are also useful here. +\ifx\tugstyloaded@\plaintubstyle + \let\@@input\input + \def\iinput#1{\@@input#1 } + \def\tub@inputcheck{\if\@nextchar\bgroup + \expandafter\iinput\else\expandafter\@@input\fi} + \def\input{\futurelet\@nextchar\tub@inputcheck} +\fi + +% 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@skip \lineskip\z@skip} + + +% Empty rules for special occasions +\def\nullhrule{\hrule height\z@ depth\z@ width\z@ } +\def\nullvrule{\vrule height\z@ depth\z@ width\z@ } + +% Support ad-hoc strut construction. +\def\makestrut[#1;#2]{\vrule height#1 depth#2 width\z@ } + +% Construct box for figure pasteup, etc. +% height = #1, width = #2, rule thickness = #3 +\def\drawoutlinebox[#1;#2;#3]{\T@stDimen=#3 + \vbox to#1{\hrule height\T@stDimen depth\z@ + \vss\hbox to#2{\vrule width\T@stDimen + \hfil\makestrut[#1;\z@]% + \vrule width\T@stDimen}\vss + \hrule height\T@stDimen depth\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} + +% Current time; this may be system dependent! +\newcount\hours +\newcount\minutes +\def\SetTime{\hours=\time + \global\divide\hours by 60 + \minutes=\hours + \multiply\minutes by 60 + \advance\minutes by-\time + \global\multiply\minutes by-1 } +\SetTime +\def\now{\number\hours:\ifnum\minutes<10 0\fi\number\minutes} + +\def\Now{\today\ \now} + +\newif\ifPrelimDraft \PrelimDraftfalse + +\def\midrtitle{\ifPrelimDraft {{\tensl preliminary draft, \Now}}\fi} + +% Section heads. The following set of macros is used to set the large +% TUGboat section heads (e.g. "General Delivery", "Fonts", etc.) + +\newdimen\PreTitleDrop \PreTitleDrop=\z@ + +\newskip\AboveTitleSkip \AboveTitleSkip=12pt +\newskip\BelowTitleSkip \BelowTitleSkip=8pt + +\newdimen\strulethickness \strulethickness=.6pt +\def\sthrule{\hrule height\strulethickness depth \z@ } +\def\stvrule{\vrule width\strulethickness } + +\newdimen\stbaselineskip \stbaselineskip=18pt + +\def\@sectitle #1{% + \par \SecTitletrue + \penalty-1000 + \secsep + \vbox{ + \sthrule + \hbox{% + \stvrule + \vbox{ + \advance\hsize by -2\strulethickness + \raggedcenter + \def\\{\unskip\break}% + \sectitlefont + \makestrut[2\stfontheight;\z@] + #1\unskip + \makestrut[\z@;\stfontheight]\endgraf + }% + \stvrule } + \sthrule } + \nobreak + \vskip\baselineskip } + +% distance between articles which are run together +\def\secsep{\vskip 5\baselineskip} + +\newif\ifSecTitle +\SecTitlefalse + + + +% Registration marks; permit them to be invisible + +\newdimen\RegRuleThickness \RegRuleThickness=0.2pt + +\def\HorzR@gisterRule{\vrule height\RegRuleThickness depth \z@ width 0.5in } +\def\DownShortR@gisterRule{% + \vrule height 0.2pt depth 1pc width\RegRuleThickness } +\def\UpShortR@gisterRule{\vrule height 1pc depth \z@ width\RegRuleThickness } + + +% ``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} + + + +% PLAIN's definition of \raggedright doesn't permit any stretch, and +% results in too many overfull boxes. We also turn off hyphenation. +\newdimen\raggedskip \raggedskip=\z@ +\newdimen\raggedstretch \raggedstretch=5em % ems of font set now (10pt) +\newskip\raggedparfill \raggedparfill=\z@ plus 1fil + +\def\raggedspaces{\spaceskip=.3333em \relax \xspaceskip=.5em \relax } +% Some applications may have to add stretch, in order to avoid +% all overfull boxes. + +\def\raggedright{% + \nohyphens + \rightskip=\raggedskip plus\raggedstretch \raggedspaces + \parfillskip=\raggedparfill } +\def\raggedleft{% + \nohyphens + \leftskip=\raggedskip plus\raggedstretch \raggedspaces + \parfillskip=\z@skip } +\def\raggedcenter{% + \nohyphens + \leftskip=\raggedskip plus\raggedstretch + \rightskip=\leftskip \raggedspaces + \parindent=\z@ \parfillskip=\z@skip } + +\def\normalspaces{\spaceskip\z@skip \xspaceskip\z@skip } + + +% Miscellaneous useful stuff + +\def\,{\relax\ifmmode\mskip\thinmuskip\else\thinspace\fi} + +%\def~{\penalty\@M \ } % tie -- this is PLAIN value; it is reset in AMS-TeX +\def~{\unskip\nobreak\ \ignorespaces} % AMS-TeX value + +\def\newbox{\alloc@4\box\chardef\insc@unt} % remove \outer +\def\boxcs#1{\box\csname#1\endcsname} +\def\setboxcs#1{\setbox\csname#1\endcsname} +\def\newboxcs#1{\expandafter\newbox\csname#1\endcsname} + +\def\gobble#1{} + +\def\vellipsis{% + \leavevmode\kern0.5em + \raise1pt\vbox{\baselineskip6pt\vskip7pt\hbox{.}\hbox{.}\hbox{.}} + } + +\def\bull{\vrule height 1ex width .8ex depth -.2ex } % square bullet +\def\cents{{\rm\raise.2ex\rlap{\kern.05em$\scriptstyle/$}c}} +\def\Dag{\raise .6ex\hbox{$\scriptstyle\dagger$}} + +\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\scriptfont\z@ #1}\kern-.1em + /\kern-.15em\lower.25ex\hbox{\the\scriptfont\z@ #2}} + +\def\thinskip{\hskip 0.16667em\relax} +\def\endash{--} +\def\emdash{\endash-} +\def\d@sh#1#2{\unskip#1\thinskip#2\thinskip\ignorespaces} +\def\dash{\d@sh\nobreak\endash} +\def\Dash{\d@sh\nobreak\emdash} +\def\ldash{\d@sh\empty{\hbox{\endash}\nobreak}} +\def\rdash{\d@sh\nobreak\endash} +\def\Ldash{\d@sh\empty{\hbox{\emdash}\nobreak}} +\def\Rdash{\d@sh\nobreak\emdash} + +% Hack to permit automatic hyphenation after an actual hyphen. + +\def\hyph{-\penalty\z@\hskip\z@skip } + +\def\slash{/\penalty\z@\hskip\z@skip } % "breakable" slash + +% Adapted from c.t.t posting by Donald Arseneau, 26 May 93. +\def\nth#1{\TestCount=#1\relax + \ifnum\TestCount <0 \multiply\TestCount by\m@ne \fi % subdue negatives + \T@stCount=\TestCount + \divide\T@stCount by 100 \multiply\T@stCount by 100 + \advance\TestCount by-\T@stCount % n mod 100 + \ifnum\TestCount >20 \T@stCount=\TestCount + \divide\T@stCount by 10 \multiply\T@stCount by 10 + \advance\TestCount by-\T@stCount % n mod 10 + \fi + \T@stCount=\the\fam\relax + $\fam\T@stCount#1^{\fam\T@stCount + \ifcase\TestCount th% 0th + \or st% 1st + \or nd% 2nd + \or rd% 3rd + \else th% nth + \fi + }$} + + +% Format information on reviewed items for book review articles. + +\def\Review:#1{\ifx[#1\@Rev[% + \else Book review:\enspace\sl #1% + \fi + } +\def\@Rev[#1]{\ignorespaces#1\unskip:\enspace\ignorespaces\sl} +\def\reviewitem{% + \def\revauth##1{\def\therevauth{##1, }\ignorespaces}% + \def\revtitle##1{\def\therevtitle{{\sl##1}. }\ignorespaces}% + \def\revpubinfo##1{\def\therevpubinfo{##1.}\ignorespaces}% + } +\def\endreviewitem{{\noindent\interlinepenalty=10000 + \therevauth\therevtitle\therevpubinfo\endgraf}% + \vskip\medskipamount + \ifx\tugstyloaded@\plaintubstyle + \DeleteOptionalSpacesandPars{\noindent\ignorespaces}% + \fi + } + +\def\booktitle#1{{\sl #1\/}} + + +% 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. + +\newcount\issueseqno \issueseqno=-1 + +\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 } + +% Original issue date included month and year. +\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 } +% Beginning in 2002, only year +\def\issyear #1.{\gdef\issdt{#1}\gdef\volyr{#1}% + \gdef\bigissdt{#1}% + \setbox\TestBox=\hbox{\volno}% + \ifdim \wd\TestBox > .2em \v@lx \fi } + +\vol 0, 0. % volume, issue. +\issdate Thermidor, 2001. % month, year of publication + + +\ifx\tugstyloaded@\plaintubstyle + \def\tubissue#1(#2){\TUB~#1, no.~#2} +\else + \def\tubissue#1#2{\TUB~#1, no.~#2} +\fi + +\def\xEdNote{{\tenuit Editor's note:\enspace }} + + +% 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. + + +\def\infil@{\jobname} +\def\Input #1 {\ifnum\issueseqno<0 \def\infil@{#1}% + \else \def\infil@{tb\number\issueseqno#1}\fi + \edef\jobname{\infil@}\@readFLN + \@@input \infil@\relax + \ifRMKopen\immediate\closeout\TBremarkfile\RMKopenfalse\fi} + +\newif\ifRMKopen \RMKopenfalse +\newwrite\TBremarkfile +\def\TBremarkON#1{% + \ifRMKopen\else\RMKopentrue\immediate\openout\TBremarkfile=\infil@.rmk \fi + \toks@={#1}% + \immediate\write\TBremarkfile{^^J\the\toks@}% + \immediate\write16{^^JTBremark:: \the\toks@^^J}} +\def\TBremarkOFF#1{} +\let\TBremark=\TBremarkOFF + +% for marking locations in articles that pertain to remarks +% in another file of editorial comments +\def\TUBedit#1{} + +% for using different filenames in Providence than those supplied +% by authors + +\def\TUBfilename#1#2{\expandafter\def\csname file@@#1\endcsname{#2}} +\newread\@altfilenames +\def\@readFLN{\immediate\openin\@altfilenames=\jobname.fln + \ifeof\@altfilenames\let\@result\relax\else + \def\@result{\@@input\jobname.fln }\fi + \immediate\closein\@altfilenames + \@result} +\@readFLN +\everyjob=\expandafter{\the\everyjob\@readFLN} + +% Following needs to work entirely in TeX's mouth +\def\@tubfilename#1{\expandafter\ifx\csname file@@#1\endcsname\relax + #1\else\csname file@@#1\endcsname\fi} + +\def\fileinput#1{\@@input\@tubfilename{#1} } + +% 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. + +\ifx\tugstyloaded@\plaintubstyle +\def\pagexrefON#1{% + \write-1{\def\expandafter\noexpand\csname#1\endcsname{\number\pageno}}% + \write\ppoutfile{% + \def\expandafter\noexpand\csname#1\endcsname{\number\pageno}}% + } +\def\PageXrefON#1{% + \immediate\write-1{\def\expandafter + \noexpand\csname#1\endcsname{\number\pageno}}% + \immediate\write\ppoutfile{\def\expandafter + \noexpand\csname#1\endcsname{\number\pageno}}} +\else +\def\pagexrefON#1{% + \write-1{\def\expandafter\noexpand\csname#1\endcsname{\number\c@page}}% + \write\ppoutfile{% + \def\expandafter\noexpand\csname#1\endcsname{\number\c@page}}% + } +\def\PageXrefON#1{% + \immediate\write-1{\def\expandafter + \noexpand\csname#1\endcsname{\number\c@page}}% + \immediate\write\ppoutfile{\def\expandafter + \noexpand\csname#1\endcsname{\number\c@page}}} +\fi + +\def\pagexrefOFF#1{} +\let\pagexref=\pagexrefOFF +\def\PageXrefOFF#1{} +\let\PageXref=\PageXrefOFF + +\def\xreftoON#1{% + \ifundefined{#1}% + ???\TBremark{Need cross reference for #1.}% + \else\csname#1\endcsname\fi} +\def\xreftoOFF#1{???} +\let\xrefto=\xreftoOFF + +\def\TBdriver#1{} + + +% Authors, addresses, signatures + +\def\theauthor#1{\csname theauthor#1\endcsname} +\def\theaddress#1{\csname theaddress#1\endcsname} +\def\thenetaddress#1{\csname thenetaddress#1\endcsname} + +\newcount\count@@ +\def\@defaultauthorlist{% % standard way of listing authors + \count@=\authornumber + \advance\count@ by -2 + \count@@=0 + \loop + \ifnum\count@>0 + \advance\count@@ by 1 + \ignorespaces\csname theauthor\number\count@@\endcsname\unskip, + \advance\count@ by -1 + \repeat + \count@=\authornumber + \advance\count@ by -\count@@ + \ifnum\authornumber>0 + \ifnum\count@>1 + \count@=\authornumber + \advance\count@ by -1 + \ignorespaces\csname theauthor\number\count@\endcsname\unskip\ and + \fi + \ignorespaces\csname theauthor\number\authornumber\endcsname\unskip + \fi + } + +\def\signature#1{\def\@signature{#1}} +\def\@signature{\@defaultsignature} + +\def\@defaultsignature{% + \count@=0 + \loop + \ifnum\count@<\authornumber + \medskip + \advance\count@ by \@ne + \signaturemark + \theauthor{\number\count@}\\ + \leavevmode\theaddress{\number\count@}\\ + \leavevmode\thenetaddress{\number\count@}\\ + \repeat + } + +\newdimen\signaturewidth \signaturewidth=12pc +\def\makesignature{% + \par + \penalty9000 + \vskip\medskipamount + \rightline{% + \vbox{\hsize\signaturewidth \ninepoint \raggedright + \parindent \z@ \everypar={\hangindent 1pc } + \parskip \z@skip + \netaddrat + \netaddrpercent + \def\|{\unskip\hfil\break}% + \def\\{\endgraf}% + \def\net{\tt}% + \def\phone{\rm Phone: } \rm + \@signature}} + } + +{\makeactive\@ + \gdef\signatureat{\makeactive\@\def@{\char"40\discretionary{}{}{}}} + \makeactive\% + \gdef\signaturepercent{\makeactive\%\def%{\char"25\discretionary{}{}{}}} +} + +\def\signaturemark{\leavevmode\llap{$\diamond$\enspace}} + + +% some hyphenation exceptions: +\hyphenation{Del-a-ware Dijk-stra Duane Eijk-hout + Flor-i-da Free-BSD Ghost-script Ghost-view + Hara-lam-bous Jac-kow-ski Karls-ruhe + Mac-OS Math-Sci-Net + Net-BSD Open-BSD Open-Office + Pfa-Edit Post-Script Rich-ard Skoup South-all + VM-ware Win-Edt + acro-nym ap-pen-dix asyn-chro-nous + bit-map bit-mapped bit-maps buf-fer buf-fers bool-ean + col-umns cus-tom-iz-able + data-base data-bases + de-riv-a-tive de-riv-a-tives de-riv-a-ble der-i-va-tion + fall-ing + half-way + key-note + long-est + ma-gyar man-u-script man-u-scripts + off-line over-view + pal-ettes par-a-digm par-a-dig-mat-ic par-a-digms + pipe-line pipe-lines + plug-in plug-ins pro-gram-mable + se-vere-ly spell-ing spell-ings stand-alone strong-est + sub-ex-pres-sion syn-chro-ni-city syn-chro-nous + time-stamp time-stamped + vis-ual vis-ual-ly + which-ever white-space white-spaces wide-spread wrap-around +} + + +\restorecat\@ + +\endinput + + +% ************************************************************************* + +Contents and Notes +------------------ + +\makeescape, ..., \makecomment allow users to change category +codes a little more easily. + +\savecat#1 and \restorecat#1 will save and restore the category +of a given character. These are useful in cases where one doesn't +wish to localize the settings and therefore be required to globally +define or set things. + +\SaveCS#1 and \RestoreCS#1 save and restore `meanings' of control +sequences. Again this is useful in cases where one doesn't want to +localize or where global definitions clobber a control sequence which +is needed later with its `old' definition. + +Abbreviations. Just a listing with indications of expansion where +that may not be obvious. For full definitions, see real code above. + +\AllTeX (\La)\TeX +\AMS American Mathematical Society +\AmSLaTeX +\AmSTeX +\ANSI +\ASCII +\aw A-W (abbreviation for Addison-Wesley) +\AW Addison-Wesley +\BibTeX +\CandT Computers \& Typesetting +\ConTeXt +\Cplusplus C++ +\CSS +\CTAN +\DTD +\DVD +\DVI +\DVIPDFMx +\DVItoVDU +\eTeX +\FAQ +\FTP +\GNU +\GUI +\Hawaii Hawai`i +\HTML HTML +\HTTP +\ISBN ISBN +\ISO +\ISSN +\JPEG +\JTeX +\JoT The Joy of \TeX +\LAMSTeX +\LaTeX +\LaTeXe +\MacOSX Mac OS X +\MathML +\Mc M ``w/ raised c'' +\MF METAFONT +\mf Metafont (using small caps) +\MFB The Metafont book +\MP METAPOST +\mtex multilingual TeX +\NTS +\OMEGA +\OCP \Omega CP +\OTP \Omega TP +\Pas Pascal +\pcMF pcMF +\PCTeX +\pcTeX +\PDF PDF +\PiCTeX +\plain plain (in typewriter font) +\PNG +\POBox P. O. Box +\POBoxTUG TUG PO Box +\PS PostScript +\RTF +\SC Steering Committee +\SGML SGML +\SliTeX +\slMF Metafont (slanted) +\stTeX TeX for the Atari ST +\SVG +\TANGLE +\TB The \TeX book +\TP \TeX the Program +\TeX +\TeXhax +\TeXMaG +\TeXtures +\Textures +\TeXXeT +\TFM +\Thanh Han The Thanh +\TIFF +\ttn TTN +\TTN \TeX and TUG News +\TUB TUGboat +\TUG TeX Users Group +\tug +\UG Users Group +\UNIX +\UTF +\VAX +\VorTeX +\XeT +\XML +\WEB +\WEAVE +\XHTML +\XSLT + +\NoBlackBoxes turns off marginal rules marking overfull boxes +\BlackBoxes turns them back on +\newline horizontal glue plus a break + +\ifundefined#1 checks argument with \csname against \relax + +\topsmash smashes above baseline (from AMSTeX) +\botsmash smashes below baseline (from AMSTeX) +\smash smashes both (from plain) + +\ulap lap upwards +\dlap lap downwards +\xlap reference point at center horizontally; 0 width +\ylap reference point at center vertically; 0 height, depth +\zlap combination \xlap and \ylap + +\basezero to avoid insertion of baselineskip and lineskip glue + +\nullhrule empty \hrule +\nullvrule empty \vrule + +\makestrut[#1;#2] ad hoc struts; #1=height, #2=depth + +\today today's date +\SetTime converts \time to hours, minutes +\now displays time in hours and minutes +\Now shows current date and time + +\ifPrelimDraft flag to indicate status as preliminary draft + +\rtitlex TUGboat volume and number info for running head +\midrtitle information for center of running head + +\HorzR@gisterRule pieces of registration marks ("trimmarks") +\DownShortR@gisterRule +\UpShortR@gisterRule + +\ttopregister top registration line with `T' in center +\tbotregister bottom registration line with inverted `T' in center +\topregister register actually used +\botregister + + +\raggedskip parameters used for ragged settings +\raggedstretch +\raggedparfill +\raggedspaces + +\raggedright +\raggedleft +\raggedcenter +\normalspaces +\raggedbottom + +\bull square bullet +\cents ``cents'' sign +\Dag superscripted dagger +\careof c/o +\sfrac slashed fraction + +\dash en-dash surrounded by thinspaces; only breakable AFTER +\Dash em-dash, as above + +\hyph permit automatic hyphenation after an actual hyphen + +\slash "breakable" slash +\nth for obtaining "1^{st}", "2^{nd}", 3^{rd}, etc. + +\tubissue gets \TUB followed by volume and issue numbers + +\xEdNote Editor's Note: + +\Review: Review: (for title of book review article) +\reviewitem begin data for item being reviewed + \revauth with one argument, author(s) of item being reviewed + \revtitle with one argument, title of ... + \revpubinfo with one argument, other info pertaining to ... +\endreviewitem end data for item being reviewed +\booktitle with one argument, format book title in text + +\Input \input with some other bookkeeping for + case where multiple articles are put together + +\TBremark reminder to TUGboat editorial staff +\TBremarkON +\TBremarkOFF + +\pagexref used to write out page numbers to screen and +\pagexrefON external files +\pagexrefOFF +\PageXref +\PageXrefON +\PageXrefOFF + +\xrefto used for symbolic cross-reference to other pages +\xreftoON in TUGboat +\xreftoOFF + +\TBdriver marks code which only takes effect when articles + are run together in a driver file + +\signatureat items for signatures +\signaturepercent +\signaturemark +\signaturewidth + + +% ************************************************************************* + +% Change history + +Version Date Changes +------- --------- --------------------------------------------------- +1.18 7 Jun 06 another fix to repair a stupid mistake + +1.16-1.17 24 May 06 fixes to repair stupid mistakes in 1.15 + +1.15 30 Apr 06 additions to match ltugboat.cls v2.0, 2006/04/25: + name macros and hyphenation exceptions + +1.14 21 Jun 04 added numerous name macros and hyphenation exceptions + +1.13l 15 Nov 03 updated header address to Portland, OR + +1.13k 28 Jun 03 added \RegRuleThickness to allow easy modification + +1.13j 16 Feb 03 added \issyear to handle removal of month + +1.13i 14 Oct 96 updated header and installed CRC-16 checksum + +1.13h 10 Nov 95 added \acro and converted all \SMC entries to use it + added acronyms \HTML and \PDF + +1.13g 4 Nov 95 added \MP for METAPOST + +1.13f 15 Apr 94 added \@Rev[...] to permit variable text for reviews + +1.13e 14 Mar 94 revised definition of \La to use actual width of A + added \LaTeXe definition + +1.13d 5 Jan 94 added {} to \TeX-{}-\Xet + +1.13c 11 Nov 93 removed extraneous " from header + added \AmSLaTeX, \CTAN, \ISSN + +1.13b 4 Nov 93 added \hyphenation{Eijk-hout} + +1.13a 18 Aug 93 corrected \nth to produce ordinal in current font + +1.13 27 May 93 upgraded \nth based on algorithm by Donald Arseneau + in comp.text.tex, 26 May 93 + +1.12 19 Feb 93 added \spacefactor1000 to all replacement text that ends + with a capital letter, so that if these items end a + sentence, there will be a normal end-of-sentence space + removed \hbox from definitions of \TeX, etc.; no longer + needed + changed definition of \TeXXeT to use \XeT rather than + unique dimensions + installed new TUG address and phone number in header + reformatted change history, similar to tugboat.sty + +1.11c 29 Nov 92 added macros to format book review and related items for + review articles + added \SGML + changed def of \UNIX to use \SMC rather than \smc + +1.11b 20 Oct 92 added font code for \ISBN font ("big small caps") + added \Textures as the current form + +1.11a 6 Jun 92 added \drawoutlinebox + +1.11 15 Mar 92 added \ttn and \TTN + +1.10 8 Mar 92 added \AllTeX + changed file name from .COM to .CMN to avoid objection + that .COM files have a special significance on DOS + and other operating systems + added standard headers, prepared for archive installation + +1.09 5 May 91 inserted large penalty at top of \makesignature to + inhibit break between article and signature + +1.08 24 Oct 90 modified signature slightly (took \medskip out of box) + fixed bug in previous rendition of \@readFLN + +1.07 16 Oct 90 added \TUBedit to facilitate editorial marking + added \iinput variant from LaTeX; \input redefined now + as with LaTeX + added mechanism for local file names in Providence + (\TUBfilename, \fileinput, etc.) + \tugstyload@ defaults to plain if it's not defined + +1.06 3 Aug 90 added \leavevmode to \@defaultsignature so that + \everypar is not executed inside a group + dash routines modified and corrected (to suppress + insertion of discretionary node after -- and ---; + and to allow hyphenation of ensuing word) + changed \lDash to \Ldash and \rDash to \Rdash + +1.05 29 Mar 90 added \lDash and \rDash for `parenthetical' dashing + added \TP for TeX: The Program + added \relax after file input of \Input + added \relax before \ifmmode of \, + +1.04 28 Feb 90 modified pagexref macros to work in both plain and + latex styles (this should NOT affect authors) + +1.03 26 Feb 90 removed <tab>s and adjusted definition of \slMF + +1.02 25 Feb 90 added definitions of \plaintubissue, \latextubissue + added definition of \tubissue + +1.01 19 Feb 90 added \signaturewidth to allow for modification + added \nth to obtain 1^{st}, etc. diff --git a/Master/texmf-dist/tex/plain/tugboat-plain/tugboat.sty b/Master/texmf-dist/tex/plain/tugboat-plain/tugboat.sty new file mode 100644 index 00000000000..3910979c48b --- /dev/null +++ b/Master/texmf-dist/tex/plain/tugboat-plain/tugboat.sty @@ -0,0 +1,2245 @@ +%% @texfile{ +%% filename = "tugboat.sty", +%% version = "1.17", +%% date = "2006/06/03", +%% time = "16:34:03 EDT", +%% checksum = "28581 2245 6313 69379", +%% filetype = "Plain TeX macros for TUGboat", +%% copyright = "Copyright 1993, 1999, 2003, 2006 TeX Users Group. +%% Unlimited copying and redistribution of this file +%% are permitted as long as this file is not +%% modified. Modifications (and redistribution of +%% modified versions) are also permitted, but only if +%% the resulting file is renamed." +%% author = "TeX Users Group", +%% address = "TeX Users Group, +%% P.O.Box 2311, +%% Portland, OR 97208-2311, +%% USA", +%% telephone = "+1 503 223-9994", +%% FAX = "+1 206 203-3960", +%% email = "TUGboat@tug.org", +%% codetable = "ISO/ASCII", +%% keywords = "tex users group, tugboat, plain tex", +%% supported = "yes", +%% abstract = "This file contains the plain-based macros +%% for preparation of TUGboat, the Communications +%% of the TeX Users Group.", +%% docstring = "The checksum field above contains a CRC-16 +%% checksum as the first value, followed by the +%% equivalent of the standard UNIX wc (word +%% count) utility output of lines, words, and +%% characters. This is produced by Robert +%% Solovay's checksum utility.", +%% } +%% ********************************************************* +%% +%% TeXing with this file also requires the following files: +%% TUGBOAT.CMN (version 1.08+) +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% TUGBOAT.STY + +\def\thistubstyle{plain} +\def\fileversion{v1.17} +\def\filedate{2006/06/03} + +% general items + +\def\makeatletter{\catcode`\@=11 } +\makeatletter % used, as in PLAIN, in protected control sequences + +% stop reading this file if it's been loaded already +\ifx\tugstyloaded@\thistubstyle\makeatother\initializearticle + \endinput\else\let\tugstyloaded@\thistubstyle\fi + +\message{File `TUGBOAT.STY' \fileversion \space\space <\filedate>} + +\input tugboat.cmn % macros common to tugboat.sty and + % ltugboat.sty (latex style file) + + +% some things with the same names as in, or reiterated from, AMS-TeX + +\def\document{} % override an AMS-TeX convention + +\output{\output@} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Directory. +% +% ** fonts +% ** page dimensions +% ** headers/footers +% ** page adjustment +% ** output +% ** general mechanism for tags +% ** titles, authors, addresses +% ** heads +% ** text and subtext +% ** lists +% ** verbatim +% ** figures +% ** utilities +% ** initialization + + + +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% ***** fonts ***** +% + + +% 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=cmti7 % Would use cmsl7 if it were standard. + % Currently needed only for \def of \LaTeX + +\font\tenit=cmti10 +\font\nineit=cmti9 +\font\eightit=cmti8 +\font\sevenit=cmti7 + +\font\tenuit=cmu10 +\font\tenbfsl=cmbxsl10 + +\font\tensmc=cmcsc10 +\font\ninesmc=cmcsc10 % redefine if cmcsc9 and/or cmcsc8 exist +\font\eightsmc=cmcsc10 + +\font\tentex=cmtex10 % for ASCII character set + +\def\mit{\fam\@ne} % from plain +\def\cal{\fam\tw@} % from plain +\def\sy{\cal} + +% cmss fonts are not needed all the time. Permit as-needed access. +\def\LoadSansFonts{% + \global\font\twelvess=cmss10 scaled \magstep1 + \global\font\tenss=cmss10 + \global\font\niness=cmss9 + \global\font\eightss=cmss8 + \addto\tenpoint{\def\ssf{\tenss}} + \addto\ninepoint{\def\ssf{\niness}} + \addto\eightpoint{\def\ssf{\eightss}} + \gdef\LoadSansFonts{}} + +% TUGboat section heads +\font \seventeenssb=cmssbx10 scaled \magstep3 +\font \twelvessb=cmssbx10 scaled \magstep1 + +\newfam\sectitlefam +\textfont\sectitlefam=\seventeenssb \scriptfont\sectitlefam=\twelvessb + +% \stbaselineskip set in tugboat.com +\def\sectitlefont{% + \fam\sectitlefam \seventeenssb \baselineskip=\stbaselineskip } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% ***** Definitions of \tenpoint, \ninepoint, etc. ***** +% + +% Following is a facility for adding commands to \tenpoint, \ninepoint +% and \eightpoint. \LoadSansFonts uses this technique above. +% Also used to add math families, as with: +% \addto\tenpoint{\textfont\frakfam...} +% to add a Fraktur family. +% +\def\addto#1#2{% + \csname @addsto\string#1\endcsname= + \expandafter{\the\csname @addsto\string#1\endcsname#2}} +\def\@additionsto#1{\expandafter\the\csname @addsto\string#1\endcsname} +\expandafter\newtoks\csname @addsto\string\tenpoint\endcsname +\expandafter\newtoks\csname @addsto\string\ninepoint\endcsname +\expandafter\newtoks\csname @addsto\string\eightpoint\endcsname + + +\newskip\ttglue +\def\setttglue{% + \edef\@thefont{\the\font}% to restore this font after the setting + \tt \ttglue=.5em plus .25em minus .15em + \@thefont} + +% We assume that \scriptscriptfonts remain the same throughout +\scriptscriptfont\z@=\fiverm +\scriptscriptfont\@ne=\fivei +\scriptscriptfont\tw@=\fivesy +\scriptscriptfont\thr@@=\tenex +\scriptscriptfont\bffam=\sixbf + +\newdimen\normaltenpointstretch \normaltenpointstretch=1.6667pt +\def\NormalTenPointSpacing{\AdjustNormalSpacing\tenpoint{}} +\def\StretchyTenPointSpacing{\AdjustNormalSpacing\tenpoint{2.4}} + +\def\tenpoint{% + \normalbaselineskip=12pt + \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}% + \textfont\z@=\tenrm \scriptfont\z@=\sevenrm + \def\oldstyle{\fam\@ne\teni}% + \textfont\@ne=\teni \scriptfont\@ne=\seveni + \textfont\tw@=\tensy \scriptfont\tw@=\sevensy + \textfont\thr@@=\tenex \scriptfont\thr@@=\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{\def\sl{\tenbfsl}\fam\bffam\tenbf}% + \textfont\bffam=\tenbf \scriptfont\bffam=\eightbf + \def\smc{\tensmc}% + \def\SMC{\ninerm}% + \def\tt{\tentt}% + \setttglue + \def\upright{\tenuit}% + \setbox\strutbox=\hbox{\vrule height7.5pt depth2.5pt width\z@}% + \setbox\struttbox=\hbox{\vrule height8.5pt depth3.5pt width\z@}% + \normalbaselines \rm + \@additionsto\tenpoint} + +\tenpoint % initialize -- default font + + +\newdimen\normalninepointstretch \normalninepointstretch=1.5pt +\def\NormalNinePointSpacing{\AdjustNormalSpacing\ninepoint{}} +\def\StretchyNinePointSpacing{\AdjustNormalSpacing\ninepoint{2.4}} + +\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}% + \textfont\z@=\ninerm \scriptfont\z@=\sevenrm + \def\oldstyle{\fam\@ne\ninei}% + \textfont\@ne=\ninei \scriptfont\@ne=\seveni + \textfont\tw@=\ninesy \scriptfont\tw@=\sevensy + \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 + \def\smc{\ninesmc}% + \def\SMC{\eightrm}% + \def\tt{\ninett}% + \setttglue + \setbox\strutbox=\hbox{\vrule height 6.75pt depth 2.25pt width\z@}% + \setbox\struttbox=\hbox{\vrule height 7.75pt depth 3.25pt width\z@}% + \normalbaselines \rm + \@additionsto\ninepoint } + +% The following setting can be used when baselineskip = 10pt +% \setbox\struttbox=\hbox{\vrule height 7.25pt depth 2.75pt width\z@}% + + +\newdimen\normaleightpointstretch \normaleightpointstretch=1.333pt +\def\NormalEightPointSpacing{\AdjustNormalSpacing\eightpoint{}} +\def\StretchyEightPointSpacing{\AdjustNormalSpacing\eightpoint{2.25}} + +\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}% + \textfont\z@=\eightrm \scriptfont\z@=\sixrm + \def\oldstyle{\fam\@ne\eighti}% + \textfont\@ne=\eighti \scriptfont\@ne=\sixi + \textfont\tw@=\eightsy \scriptfont\tw@=\sixsy +% \textfont\thr@@=\eightex \scriptfont\thr@@=\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 + \def\smc{\eightsmc}% + \def\tt{\eighttt}% + \setttglue + \setbox\strutbox=\hbox{\vrule height 6pt depth 2pt width\z@}% + \setbox\struttbox=\hbox{\vrule height 7pt depth 3pt width\z@}% + \normalbaselines \rm + \@additionsto\eightpoint } + +% The 8pt cap/small cap font is not loaded. See a corresponding remark +% above for the 9pt csc font. + +% this is equivalent to baselineskip = 9pt +% \setbox\struttbox=\hbox{\vrule height 6.5pt depth 2.5pt width\z@}% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% Following will allow text to be a bit stretchier than the built-in +% setting; TeXbook, page 433, 355 + +\def\@setstretch{\fontdimen3\the\font=} +\def\AdjustNormalSpacing#1#2{% #1=pointsize, #2=adjustment factor + {\T@stDimen=#2\csname normal\expandafter\gobble\string#1stretch\endcsname + #1% + \rm\@setstretch\T@stDimen + \it\@setstretch\T@stDimen + \bf\@setstretch\T@stDimen + }} + + + +% Anticipated changes to this font handling scheme: +% +% 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 + +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% ***** page dimensions ***** +% + + +% vertical dimensions + +\newdimen\trimlgt \trimlgt=11in % 10.5in (vols 7-9) +\newdimen\headmargin \headmargin=3.5pc % 2.5pc (vols 7-9) +\newdimen\pagelgt +\newdimen\rheadlgt \rheadlgt=2.5pc % + headmargin = 6pc = 1in +\newdimen\toplgt \toplgt=\z@ +\newdimen\normalcollgt \normalcollgt=54pc % 52pc for 5#2 +\newdimen\collgt \collgt=\normalcollgt +\newdimen\Collgt +\maxdepth=2pt +\newdimen\botlgt \botlgt=\z@ +\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 + +% horizontal dimensions + +\newdimen\colwd +\newdimen\intercolwd \intercolwd=\z@ +\newdimen\pagewd \pagewd=39pc +\newdimen\trimwd \trimwd=\pagewd +\newdimen\oddleftindent \oddleftindent\z@ +\newdimen\evenleftindent \evenleftindent\z@ + +\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 \intercolwd=1.5pc \TwoCol } + +\newdimen\threecolcolwd \threecolcolwd=12pc +\def\threecol{\colwd=\threecolcolwd \intercolwd=1.5pc \ThreeCol } + +\def\CenterOneCol{% + \oddleftindent\pagewd + \advance\oddleftindent -\colwd + \divide\oddleftindent\tw@ + \evenleftindent\oddleftindent + \coloffset\ifodd\pageno\oddleftindent\else\evenleftindent\fi + } + +\def\OneCol{\hsize=\colwd \CenterOneCol \numcols=1 \resetmaxcols} +\def\ZeroLeftIndents{\oddleftindent\z@ \evenleftindent\z@ \coloffset\z@ } +\def\TwoCol{\hsize=\colwd \numcols=2 \resetmaxcols \ZeroLeftIndents} +\def\ThreeCol{\hsize=\colwd \numcols=3 \resetmaxcols \ZeroLeftIndents} + +\def\resetmaxcols{% + \ifnum\numcols>\maxcols + \ifOverlaysinTeX \maxcols=\numcols + \else \immediate\write\sixt@@n{% + The new setting of \string\numcols is greater than \string\maxcols.^^J + Either allow overlays in TeX or increase \string\maxcols.}\fi + \fi} + +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% ***** headers/footers ***** +% + + +\def\pagenoprefix{} + +\def\rtitlex{\def\tubfont{\tenpoint\rm}\TUB, \volx } +\def\rtitle{% + \hbox to \pagewd{% + \tenrm + \makestrut[10pt;\z@]% + \ifodd\pageno \rtitlex\qquad\midrtitle\hfil\pagenoprefix\number\pageno + \else \pagenoprefix\number\pageno\hfil\midrtitle\qquad\rtitlex \fi + }% + } + +\def\runhead{\vbox to \rheadlgt{\rtitle \vfil }} + +\def\rfoot{% + \hbox to \pagewd{% + \tenrm + \makestrut[\z@;0.5pc]% + \midrtitle\hfil\midrtitle + }% + } + +\def\runfoot{\vbox to \rfootlgt{\vfil \rfoot }} + +% 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 + \def\@next{\nextrunner}% + \else \def\@next{}% + \fi + \@next } + +% Use \ExtraRunheads to generate running heads for stripping (e.g. for +% author-supplied camera-ready copy). E.g., ``\ExtraRunheads 12, {}.'' will +% generate 12 TUGboat running heads, up to 5 per page, starting with +% the current page number. + +\def\ExtraRunheads #1, #2.{% + \T@stCount=#1 + \gdef\pageprefix{#2}% % as in A-10 for appendices; not used just now + \nextrunner } + + +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% ***** insertions ***** +% + + +\newif\if@floatable \@floatabletrue % sometimes we don't want +\def\nofloat{\@floatablefalse} % midinsertions to float + +% redefine \@ins to avoid the \par of PLAIN +\def\@ins{\begingroup\setbox\z@\vbox\bgroup} + +\newinsert\botins +\newif\ifp@ge \newif\if@mid \newif\if@bot +\def\topinsert{\@midfalse\p@gefalse\@botfalse\@ins} +\def\botinsert{\@midfalse\p@gefalse\@bottrue\@ins} +\def\midinsert{\@midtrue\@botfalse\@ins} +\def\pageinsert{\@midfalse\@botfalse\p@getrue\@ins} +\skip\botins=\z@skip +\count\botins=1000 +\dimen\botins=\maxdimen +\def\endinsert{\egroup % finish the \vbox + \gdef\@next{}% + \if@mid \dimen@\ht\z@ \advance\dimen@\dp\z@ + \advance\dimen@12\p@ \advance\dimen@\pagetotal + \if@floatable + \ifdim\dimen@>\pagegoal\@midfalse\@botfalse\p@gefalse\fi\fi + \fi + \if@mid + \vskip\abovedisplayskip + \box\z@ + \vskip\belowdisplayskip + \gdef\@next{\@asifbelowdisplay}% + \else\insert\if@bot\botins\else\topins\fi + {\penalty100 % floating insertion + \if@bot\medskip\nobreak\fi + \splittopskip\z@skip + \splitmaxdepth\maxdimen \floatingpenalty\z@ + \ifp@ge \dimen@\dp\z@ + \vbox to\vsize{\unvbox\z@\kern-\dimen@}% depth is zero + \else \box\z@\fi + \if@bot\else\medskip\fi + }% + \fi\endgroup\@next} + +% Footnotes are mainly supported by PLAIN format, with these +% exceptions. + +\skip\footins=10pt +\def\footnoterule{\kern-5pt + \hrule width 5pc \kern 4.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 + \rm \parindent=\normalparindent % always indent footnotes; added for TUGboat + \textindent{#1}\makestrut[10pt;\z@]\futurelet\next\fo@t} +\def\@foot{\strut\egroup + \ifDelayFirstPar \SetupFirstPar \global\DelayFirstParfalse \fi } +\newif\ifFirstPar \FirstParfalse +\def\SetupFirstPar{\global\parindent=\z@ \global\FirstPartrue } + + +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% ***** output ***** +% + + +% Reorganize \pagecontents from PLAIN to put footnotes at very +% bottom of page, even if \raggedbottom. Also add bottom insertions. + +\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 + \ifvoid\botins\else + \vskip\skip\botins + \unvbox\botins\fi } + + +% Trim (registration) marks may or may not be placed around the pages; +% Overlaying may or may not be done within TeX (as opposed +% to the device driver). + +\newif\ifTrimmarks \Trimmarksfalse +\newif\ifOverlaysinTeX \OverlaysinTeXtrue + + +% All columns containing data are formatted by \midpage. Trim marks +% are put on all columns, but running heads only on the last column +% (i.e. column number = \numcols) + +\def\midpage#1{% + \vbox{ + \basezero + \hrule height\z@ depth\z@ width\p@ + \ifTrimmarks + \vskip-1in % default offset for laser printers + % this puts top trim at edge of paper + \vbox to \trimlgt \bgroup + \topregister + \vskip \headmargin + \else + \vskip-\rheadlgt % this puts runhead above default offset + \fi + \vbox to \pagelgt{ + \ifnum\xcol=\numcols \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 + \ifnum\xcol=\numcols \runfoot \else \vbox to \rfootlgt{}\fi + } + \ifTrimmarks \vfill \botregister \egroup \fi + }} + +% The production version includes trim marks, which are required +% on photographic paper, but are unsuitable for laser printer output +% (because they land at the edges of the page). For multiple +% column output, allowance is made for column overlays either +% within TeX or by the driver. The default is to have all +% overlays done within TeX, but large pages or matters of efficiency +% may dictate that driver-overlay is more appropriate. + +% When the overlaying is done within TeX, the .dvi contains just +% one page for each page to be printed. However, in the case +% that a driver is to do the overlaying we must anticipate that +% it will not be smart enough to properly overlay different numbers +% of .dvi pages for different printed pages (e.g. in the case that +% one job has both single- and double-column layout). Thus, for +% each printed page, TeX constructs a constant number (=\maxcols) +% of .dvi pages. Columns 1 through and including \numcols will +% be usual .dvi pages containing information for the typeset columns. +% Upon reaching column number \numcols, TeX will `fill out' the +% printed page with empty columns to \maxcols. + + +% set up auxiliary `page numbers' +% \pageno = \count0 as used in PLAIN + +% \xcol is the column number within a page; ranges from 1 to \maxcols +\countdef\xcol=1 \xcol=1 + +% \spoolno is the ordinal number of `.dvi' pages (i.e. the number +% of \shipouts performed) +\countdef\spoolno=2 \spoolno=0 + +\def\newcol{\endgraf\vfill\eject} + +\def\newpage{% + \vfill\eject + \loop + \ifnum\xcol>1 + {\leavevmode\endgraf\vfill\eject} % \xcol is advanced in the output routine + \repeat + } + +\newcount\numcols % `real' number of columns + +\newcount\@maxcolsofar % internal counter for box allocation +\@maxcolsofar=0 + +\newcount\maxcols % job-wide maximum number of columns +\maxcols=2 + + + % save the column or ship it out +\def\@saveorship{% + \ifOverlaysinTeX + \ifnum\xcol>\@maxcolsofar % if we need another column box allocated + \global\advance\@maxcolsofar\@ne + \newboxcs{column\number\xcol}% + \fi + \global\setboxcs{column\number\xcol}% + \else + \global\advance\spoolno\@ne + \shipout + \fi + } + +% horizontal offset of column from left edge of page +\newdimen\coloffset \coloffset\z@ +\def\incrcoloffset{% + \global\advance\coloffset\colwd + \global\advance\coloffset\intercolwd + } + +\def\output@{% + \@saveorship\midpage{\kern\coloffset\pagebody\hfil} + \incrcoloffset + \ifnum\xcol=\numcols % if at `real' last column, fill out page with + \loop % empty columns + \ifnum\xcol<\maxcols + \global\advance\xcol\@ne + \@saveorship\midpage{\vbox to \collgt{}\hfil} + \repeat + \fi + \ifnum\xcol=\maxcols % put page together if TeX is overlaying + \ifOverlaysinTeX + \global\advance\spoolno\@ne + \shipout\hbox{% + \xcol=1 + \loop \rlap{\boxcs{column\number\xcol}}% + \ifnum\xcol<\maxcols + \global\advance\xcol\@ne + \repeat + \hbox to \pagewd{}% + }% + \fi + \D@EndPage % possible shortening of next page + \global\coloffset\ifodd\pageno\oddleftindent\else\evenleftindent\fi + \global\xcol=1 + \else + \global\advance\xcol\@ne + \fi + \ExecuteNextDC % possible `Delayed Command' + } + + +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% ***** page adjustment ***** +% + + +% 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 -\T@stDimen + \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 + \@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 } + +% Add more powerful means of adjusting pages by keeping a list of +% commands to be executed prior to making up the next page. This +% technique will be expanded in the next version of the output +% routine. + +% "\DelayedCommand <page number> <column number> <command>\endCommand" +% places the token list <command> at the end of a list of "things to do". +% At the end of every column, the output routine checks this list to +% see whether the head of the list should be "executed" prior to +% building the next column. If so, the execution is performed. +% Right now, items must be placed in the execution list in order, +% and all items for a given column must be combined into a single +% token list. + +% Natural applications are double column figures and column size +% adjustments. E.g. +% \DelayedCommand +5 1 \global\advance\vsize by 2\baselineskip\endCommand +% will increase the \vsize of the first column of the page 5 pages from +% "now" by 2 baselines. To pull the \vsize back to normal would require +% another use of \DelayedCommand. Double column figures can be achieved +% with insertions called by \DelayedCommand. + +% Right now the technique is messy, but it can be used by those who know +% how it's implemented and know its limitations. + +\newtoks\@DelayedCommandList + +\def\DelayedCommand #1 #2 #3\endCommand{% + \@plusno#1;% + \edef\@temp{\the\@DelayedCommandList<\number\T@stCount>}% + \global\@DelayedCommandList=\expandafter{\@temp<#2>#3\endCommand}% + } + +\def\@FindNextDCPoint <#1><#2>#3\endList{% + \def\DCpage{#1}\def\DCcolumn{#2}} + +\def\FindNextDCPoint{% + \edef\@temp{\the\@DelayedCommandList}% + \ifx\@temp\empty \def\DCpage{\@M}\def\DCcolumn{0}% + \else + \edef\@form{% + \noexpand\@FindNextDCPoint\the\@DelayedCommandList\noexpand\endList}% + \@form + \fi} + +\def\@ExecuteNextDC <#1><#2>#3\endCommand#4\endList{% + \global\@DelayedCommandList={#4}% + #3} + +\def\ExecuteNextDC{% + \FindNextDCPoint + \ifnum \pageno=\DCpage \ifnum\xcol=\DCcolumn + \edef\@form{% + \noexpand\@ExecuteNextDC\the\@DelayedCommandList\noexpand\endList}% + \@form + \fi \fi} + + +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% ***** general mechanism for tags ***** +% + +% Upon sensing an opening tag (call it `\foo' here), the following process +% is set in motion: +% 1. \begingroup (so definitions and settings are localized); +% 2. the default situation for \foo is set up; +% 3. if appropriate, an \everyfoo list is read (this allows one +% to override the TUGboat.sty factory defaults); +% 4. optional commands are read. This involves looking ahead for +% a `[' and `normalizing' the optional environment so that +% backslashes and braces are interpreted as their standard selves. +% After the options are read, the `\',`{', and `}' are restored +% to their status appropriate to \foo; +% 5. the \@beginfoo macro is executed. This +% may involve branching dependent upon flags set by options. It may +% also be a place where spaces and carriage-returns are activated. +% 6. the `argument' to \foo is read and stored or processed on +% the fly (the method employed is generally fixed for each tag). +% The argument may be delimited by *...* (called the `short-form' +% here), or up to ...\endfoo (called the `long-form'). +% 7. a cleanup macro is executed which also ends the current group. +% This may do all the work if an argument has been read and stored. + +% Checking ahead. +% Often we check ahead to determine the next course of action. +% \@checknexttoken is used to check for optional commands, to check for the +% short-form argument-delimiter, and to ignore characters in certain +% situations. The macro is just a check; applications must do whatever +% is appropriate with the ensuing token. + +% \@checknexttoken checks the next token against argument #1. If the +% two are the same, #2 is executed, otherwise #3. The comparison is +% done with \ifx. Since we check ahead with \futurelet, the first +% argument is stored with \let as well. To include the case +% where #1 may be a space, we have to go through a small contortion +% to \let\@basetoken= that space. + +% At times, the \@nexttoken will be \outer and this will prevent its +% being incorporated in the definition of \@next below. For this reason, +% we store `\ifx\@basetoken\@nexttoken' away in a definition at a time +% when \@nexttoken is undefined and won't cause a problem. + +\def\if@baseis@next{\ifx\@basetoken\@nexttoken} + +\long\def\@checknexttoken #1#2#3{% + \futurelet\@basetoken\iffalse#1\fi + \long\def\@next{% +% \ifx \@basetoken\@nexttoken + \if@baseis@next + \long\def\@@next{#2}% + \else\long\def\@@next{#3}\fi + \@@next}% + \futurelet\@nexttoken\@next} + +% Eliminating characters from input. +% The following macros check ahead to see whether the next token is a +% token to be parsed from the input stream. \@ignoreall keeps +% checking to eliminate all such characters, whereas \@ignoreone drops +% at most one. Argument #2 is executed after characters are eliminated. + +% The token is removed by defining a control sequence whose +% contextual form includes the token. + + % execute #2 after ignoring (possibly) one occurrence of #1 +\long\def\@ignoreone#1#2{% + \def\@ignoreform#1{#2}% + \@checknexttoken{#1}{\@ignoreform}{#2}% + } + + % execute #2 after ignoring all occurrences of #1 +\long\def\@ignoreall#1#2{% + \def\@ignoreform#1{\@ignoretest}% + \def\@ignoretest{\@checknexttoken{#1}{\@ignoreform}{#2}}% + \@ignoretest + } + +% Particularly useful ignorances. + + % execute #1 after ignoring spaces +\def\DeleteOptionalSpaces#1{% + \@ignoreall{ }{#1}% + } + % execute #1 after ignoring spaces and \pars +\def\DeleteOptionalSpacesandPars#1{% + \@ignoreall{ }{\@ignoreall{\par}{#1}}% + } + + +% Checking and reading options. +% To check for the next optional argument, the macros must look +% ahead to the next character. If the next character is a `[', +% the option-reading mechanism is invoked. This check may be suppressed if +% the user has executed the \lastoption option. If \@lastoption is +% "true" or if the [ is NOT next, the macro goes on to reading any +% arguments and executing appropriately. + +\def\@checkoptions{% + \if@lastoption + \def\@next{\@executetoend}% + \else + \def\@next{\@checknexttoken {[}{\@readoptions}{\@executetoend}}% + \fi + \@next + } + +% Default "options" on start-up. Unless over-ridden, the situation +% will be: +% 1. there may be another option to check (i.e. \@lastoptionfalse); +% 2. it will be necessary to read the input file to determine the +% method of marking arguments (i.e. \@longformfalse); +% 3. arguments will be handled on the fly (i.e. \@savingargumentfalse); +% 4. the long-form ending delimiter will be \end... (where ... is +% the tag with which we're currently operating. + +\newif\if@lastoption \@lastoptionfalse +\def\lastoption{\@lastoptiontrue} + +\newif\if@longform \@longformfalse +\def\longform{\@longformtrue} + +\newif\if@savingargument \@savingargumentfalse + +\newtoks\enddelim + +\def\@defaultoptions{% + \@lastoptionfalse + \@longformfalse + \@savingargumentfalse + \enddelim=\expandafter{\csname end\CurrentTag\endcsname}% + \let\@long\empty + } + +% To read an optional command, \catcodes of \ { } are restored to their plain +% values, and the [...] form is parsed out by \@@readoptions. The argument +% to \@@readoptions is then executed, the 3 specials are restored and +% the we check again for [ after deleting spaces. One might, alternatively, +% parse out the initial `[' and activate the `]' to end options, but +% this would make it awkward to place options within other macros (since +% the `]' would have to be \catcoded properly for the definition). + +\def\@readoptions{% + \savecat\\\makeescape\\% + \savecat\{\makebgroup\{% + \savecat\}\makeegroup\}% + \@@readoptions} + +\def\@@readoptions[#1]{% + #1% + \restorecat\\\restorecat\{\restorecat\}% + \DeleteOptionalSpaces{\@checkoptions}% + } + + +% Short Form Tagging. +% We specify a character (*) to be used as a begin/end delimiter +% for the argument to most tags. This code could be copied and +% altered a bit to use another character. + +% The character will be encountered as either type `other' or as +% an `active' character. + +\newtoks\@otherSFD +\@otherSFD={*} +\let\@SFD=* % used in \@checknexttoken + +\newtoks\@activeSFD +{\makeactive\* + \global\@activeSFD={*}% +} + +\let\@plainast=\ast +\def\ast{\ifmmode\@plainast\else *\fi} + + +% Reading to the end-tag. +% Macros may just do their business after options have been +% read. In this case, there is no end-tag to worry about. +% Otherwise, the macros either read to the "long-form" of end-tag +% (e.g. \endtitle or \endauthor) or to the short-form (assumed to +% be * here). Unless an option has specified +% that the long-form is to be used, the macros look ahead to +% see whether the short-form delimiter occurs next. If so, +% it is assumed that the short-form is being used. In any case, +% the appropriate \@begin... macro is executed before the argument is +% handled. + +\newcount\@numarguments \@numarguments=1 + +\def\@executetoend{% + \ifnum\@numarguments>0 + \if@longform \def\@afterbegintag{\@longparse}% + \else + \def\@afterbegintag{\@checknexttoken + {\@SFD}{\@shortparse}{\@longparse}}% + \fi + \else + \def\@afterbegintag{}% + \fi + \csname @begin\CurrentTag\endcsname + \@afterbegintag + } + +% If the short-form is being used and an argument is to be saved, +% we must define a "form" which TeX may follow to pull out the +% tag's argument. The argument is stored away in the token register +% \@argument, and the appropriate end-operation is performed. +% Otherwise (the `argument' is processed on-the-fly), we parse out +% the initial short-form delimiter and activate the ending one. + +\newtoks\@argument + +\def\@shortparse{% + \if@savingargument + \edef\@form{% + \def\noexpand\@@shortparse\the\@otherSFD####1\the\@otherSFD}% + \@long\@form{\@argument{##1}\csname end\CurrentTag\endcsname}% + \else + \expandafter\makeactive\csname\the\@otherSFD\endcsname + \expandafter\def\the\@activeSFD + {\csname end\CurrentTag\endcsname + \expandafter\makeother\csname\the\@otherSFD\endcsname}% + \def\@@shortparse{% + \expandafter\@ignoreone\expandafter{\the\@otherSFD}% + {}% + }% + \fi + \@@shortparse} + +% On the other hand, if the long form is used, TeX must parse to +% the long-form ending tag. Ordinarily we know the ending-tag +% because it is just the \end... which corresponds to the tag +% which initiated the process. We do allow for the possibility, +% however, that we may want to switch this for some reason. E.g. +% the different \verbatim styles allow for \verbatim...\endverbatim +% and ||...||. The easiest way to implement the || style is +% to have the first || call \verbatim and have \verbatim know +% to look for || as the end-tag instead of \endverbatim. This may +% be accomplished by allowing for the possibility of different +% end-tags as below. + +\def\@longparse{% + \if@savingargument + \edef\@form{\def\noexpand\@@longparse####1\the\enddelim}% + \@long\@form{\@argument{##1}\csname end\CurrentTag\endcsname}% + \else \def\@@longparse{}\fi + \@@longparse + } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Macros generally available to tags. + +\def\longargument{\def\@long{\long}} + +\def\@authorstyle{\@@@a} +\def\@inlinestyle{\@@@i} +\def\@displaystyle{\@@@d} +\def\@altinlinestyle{} +\def\@altdisplaystyle{} + +\newif\if@removeprewhite \@removeprewhitefalse +\newif\if@removepostwhite \@removepostwhitefalse +\def\removeprewhite{\@removeprewhitetrue} +\def\removepostwhite{\@removepostwhitetrue} + +% Allow for line numbers on a listing as well as rules above and below. +\newif\if@ruled \@ruledfalse +\newif\if@numbered \@numberedfalse +\newcount\linenumber +\newcount\globallinenumber \globallinenumber = 0 +\newif\if@continuingnumbers \@continuingnumbersfalse +\def\continuenumbers{\numbered\@continuingnumberstrue} + +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% ***** title, section title, authors, addresses ***** +% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% title + +\def\title{% + \begingroup + \def\CurrentTag{title}% + \@defaultoptions + \@savingargumenttrue + \@checkoptions} + +\def\endtitle{% + \global\toks@=\expandafter{\the\@argument}% + \endgroup + \edef\thetitle{\ignorespaces\the\toks@\unskip}% + } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% section titles + +% Material mostly in tugboat.com now + +\setbox\T@stBox=\hbox{\sectitlefont O} +\newdimen\stfontheight \stfontheight=\ht\T@stBox + +\def\sectitle{% + \begingroup + \def\CurrentTag{sectitle}% + \@defaultoptions + \@savingargumenttrue + \global\SecTitletrue + \@checkoptions} + +\def\endsectitle{% + \@sectitle{\the\@argument}% + \endgroup + } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% authors + +\newcount\authornumber + +\def\author{% + \begingroup + \def\CurrentTag{author}% + \global\advance\authornumber by 1 + \@defaultoptions + \@savingargumenttrue + \@checkoptions} + +\def\endauthor{% + \global\toks@=\expandafter{\the\@argument}% + \endgroup + \expandafter\edef\csname theauthor\number\authornumber\endcsname + {\ignorespaces\the\toks@\unskip}% + \expandafter\let\csname theaddress\number\authornumber\endcsname\relax + \expandafter\let\csname thenetaddress\number\authornumber\endcsname\relax + } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% addresses + +\newif\if@address \@addressfalse +\def\address{% + \@addresstrue + \begingroup + \def\CurrentTag{address}% + \@defaultoptions + \@savingargumenttrue + \let\@addressstyle=\@authorstyle + \def\inline{\let\@addressstyle=\@inlinestyle}% + \def\display{\let\@addressstyle=\@displaystyle}% + \@checkoptions} + +\def\endaddress{% + \ifx\@addressstyle\@inlinestyle + \def\\{, }\the\@argument + \endgroup + \def\@next{}% + \else\ifx\@addressstyle\@displaystyle + \endgraf\raggedright + \everypar={\hangindent 1.5\parindent}% + \def\\{\endgraf}% + \def\|{\unskip\hfil\break}% + \vskip\abovedisplayskip + \the\@argument\endgraf + \vskip\belowdisplayskip + \@asifbelowdisplay + \endgroup + \def\@next{\ignorespaces}% + \else + \global\toks@=\expandafter{\the\@argument}% + \endgroup + \expandafter\edef\csname theaddress\number\authornumber\endcsname + {\ignorespaces\the\toks@\unskip}% + \def\@next{}% + \fi \fi + \@next + } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% network addresses + +\def\netaddress{% + \begingroup + \def\CurrentTag{netaddress}% + \@defaultoptions + \@savingargumenttrue + \let\@network\relax + \def\network##1{\def\@network{##1: }}% + \@SpecialsGetOther + \makeescape\\% + \netaddrat + \netaddrpercent + \@checkoptions} + +{\makeactive\@ + \gdef\netaddrat{\makeactive\@\def@{\char"40\discretionary{}{}{}}} + \makeactive\% + \gdef\netaddrpercent{\makeactive\%\def%{\char"25\discretionary{}{}{}}} +} + +% We want the definition of \thenetaddress... to land at the right +% nesting level, so we have to first pull it to the top, then +% drop back to where we are. + +\def\endnetaddress{% + \global\toks@=\expandafter{\the\@argument}% + \ifx\@network\relax + \gdef\@@network{}% + \else + \xdef\@@network{\@network}% + \fi + \endgroup + \expandafter\edef\csname thenetaddress\number\authornumber\endcsname + {{\noexpand\rm\@@network}% + {\noexpand\netaddrat\noexpand\netaddrpercent\noexpand\net + \ignorespaces\the\toks@\unskip}}% + } + +\def\net{\tt} + +% Overrides to default author and signature formats + +\def\authorlist#1{\def\@authorlist{#1}} + +% Except for the first article in a section, beginnings of articles +% are announced by a horizontal rule the width of the column. +% In the case that this rule happens to fall at the top of a column, +% we have to make sure that it appears at the VERY top of the column +% and not just on the first baseline. To accomplish this, we insert +% an empty rule first and then jump back over it to place the rule that +% readers will see. + +\def\article{% + \@allowspanningfigsfalse + \ifSecTitle \global\SecTitlefalse + \else \vskip\AboveTitleSkip + \kern\topskip + \nullhrule + \kern-\topskip + \kern-\strulethickness + \hrule height\strulethickness depth\z@ + \nobreak + \kern\medskipamount + \fi + \ifx\thetitle\relax + \else + \nobreak + {\parskip\z@\interlinepenalty\@M + \noindent\def\\{\unskip\break}\raggedstretch=.3\colwd\raggedright\bf + \ignorespaces\thetitle\unskip\endgraf}% + \fi + \ifnum\authornumber>0 + \nobreak + \vskip4pt + {\parskip\z@\interlinepenalty\@M + \def\\{\unskip\hfil\break}\hangindent\parindent\raggedright + \@authorlist\endgraf} + \fi + \nobreak + \vskip \BelowTitleSkip + \vskip -\parskip + \tenpoint + \DeleteOptionalSpacesandPars{\noindent\ignorespaces}% + } + + +\def\endarticle{\vfil\end} % redefined in drivers + +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% ***** heads ***** +% + +% Heads are set by first saving the text of the head in \@argument +% and then operating appropriately depending upon the \headlevel. +% Selection among the different heads is made by an \ifcase. + +% To remove extra \par tokens between heads and ensuing text in the +% input file, we call \DeleteOptionalSpacesandPars. To do this outside +% the `head' group and just before TeX returns to the normal input stream +% following a call to \head, we must define (globally) a control sequence +% (\@next) and call it at the very end. + +\newcount\headlevel \headlevel=1 + +\def\head{% + \begingroup + \def\CurrentTag{head}% + \@allowindentfalse + \@defaultoptions + \@savingargumenttrue + \def\\{\break}% + \@checkoptions} + +\def\endhead{% + \endgraf + \ifcase\headlevel\or\@domainhead\or\@dosubhead\or\@dosubsubhead\fi + \endgroup + \@next + } + +\def\@domainhead{% + \if@removeprewhite\else\vskip\baselineskip\fi + \noindent{\raggedright\bf\ignorespaces\the\@argument\unskip\endgraf}% + \if@removepostwhite % usually we want the white space + \else\kern0.5\baselineskip\fi + \nobreak + \gdef\@next{% + \if@allowindent\def\@next{}% usually we don't want to indent here + \else\def\@next{\DeleteOptionalSpacesandPars{\noindent\ignorespaces}}\fi + \@next + }% + } + +\def\@dosubhead{% + \if@removeprewhite\else\medskip\fi + \noindent{\frenchspacing\bf\ignorespaces\the\@argument + \unskip\if@headpunctuation.\fi}% + \hskip 0.5em plus \fontdimen3\the\font + \gdef\@next{\DeleteOptionalSpacesandPars{}}% + } + +\def\@dosubsubhead{% + {\frenchspacing\bf\ignorespaces\the\@argument\unskip}% + \hskip 0.5em plus \fontdimen3\the\font + \gdef\@next{\DeleteOptionalSpacesandPars{}}% + } + +\def\subhead{\head[\headlevel=2]} +\def\subsubhead{\head[\headlevel=3]} + +\newif\if@headpunctuation \@headpunctuationtrue +\def\nopunctuation{\@headpunctuationfalse} + +\newif\if@allowindent +\def\allowindent{\global\@allowindenttrue} +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% ***** text and subtext ***** +% + +% The code here exists primarily to implement \subtext. The treatment +% is similar to that for \head in that an \ifcase statement is called +% to choose between the various text levels. Here, however, we handle +% the `text' on the fly instead of saving it as an argument. + +\newcount\textlevel \textlevel=1 + +\def\text{% + \begingroup + \def\CurrentTag{text}% + \@defaultoptions + \@savingargumentfalse + \@checkoptions} + +\def\@begintext{% + \endgraf + \ifcase\textlevel\or\or\@setupsubtext\fi + } + +\def\@setupsubtext{% + \vskip\abovedisplayskip + \advance\leftskip by 0.5\parindent + \advance\rightskip by 0.5\parindent + \ninepoint\rm + } + +\def\endtext{% + \gdef\@next{}% + \ifcase\textlevel\or\or\@dosubtext\fi + \endgroup + \@next + } + +\def\@dosubtext{% + \endgraf + \vskip\belowdisplayskip + \gdef\@next{\@asifbelowdisplay}% + } + +\def\subtext{\text[\textlevel=2]} + +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% ***** lists ***** +% + +\newcount\listlevel \listlevel=1 +\newif\if@itemized +\newcount\itemnumber +\newtoks\@itemtag +\newcount\@cols % number of columns in list +\newdimen\colsepwidth +\newdimen\@listindent +\newdimen\@listhangindent +\newif\if@firstitem % when first item is handled differently +\newtoks\everylist + +\def\list{% + \begingroup + \def\CurrentTag{list}% + \let\@liststyle=\@displaystyle + \def\inline{\let\@liststyle=\@inlinestyle}% + \def\display{\let\@liststyle=\@displaystyle}% + \def\displaystyle##1{\def\@altdisplaystyle{##1}}% + \def\inlinestyle##1{\def\@altinlinestyle{##1}}% + \def\item{% + \begingroup + \def\CurrentTag{item}% + \@numarguments=0 + \@checkoptions}% + \@itemtag={$\bullet$}% + \def\tag##1{\@itemtag{##1}}% + \def\tagform##1{\llap{##1\strutt\enspace}}% + \@itemizedtrue + \def\unitemized{\@itemizedfalse}% + \itemnumber=0 + \def\numbered{\@itemtag={\number\itemnumber.}}% + \def\romannumeraled{\@itemtag={\romannumeral\itemnumber.}}% + \def\Romannumeraled{\@itemtag= + {\uppercase\expandafter{\romannumeral\itemnumber.}}}% + \def\lettered{\itemnumber="60 \@itemtag={\char\itemnumber.}}% + \def\Lettered{\itemnumber="40 \@itemtag={\char\itemnumber.}}% + \def\ruled{\@ruledtrue}% + \@ruledfalse + \@cols=1 + \def\cols{\@cols}% + \@firstitemtrue + \def\@itemseparator{, }% + \def\itemseparator##1{\def\@itemseparator{##1}}% + \@defaultoptions + \@savingargumentfalse + \the\everylist + \@checkoptions} + +\def\@beginlist{% + \ifx\@liststyle\@displaystyle + \endgraf + \ifnum\listlevel=1 + \if@ruled \if@removeprewhite\else\medskip\fi \hrule\kern5pt \nobreak + \else \if@removeprewhite\else\vskip\abovedisplayskip \fi\fi + \fi + \advance\leftskip\parindent + \@listindent=\parindent + \@listhangindent=\@listindent + \parindent\@listindent + \lineskip\z@ + \if@itemized + \else + \parskip\z@skip + \parindent\z@ + \raggedright + \everypar={\advance\itemnumber\@ne + \tagform{\the\@itemtag}}% + \makeCtrlMendgraf + \fi + \def\colsep{% + \global\count@\itemnumber + \egroup\kern\colsepwidth + \vtop\bgroup + \@altdisplaystyle + \itemnumber=\count@\ignoreendline}% + \ifnum\@cols>1 + \dimen@\colsepwidth + \multiply\dimen@\@cols + \advance\dimen@-\colsepwidth + \advance\hsize-\dimen@ + \divide\hsize by\@cols + \hbox\bgroup\vtop\bgroup + \fi + \@altdisplaystyle + \else + \def\tagform##1{##1\strutt\ }% + \if@itemized + \else + \makeCtrlMseparator + \advance\itemnumber by \@ne + \tagform{\the\@itemtag}% + \fi + \def\colsep{}% + \@altinlinestyle + \fi + } + + +\def\endlist{% + \ifx\@liststyle\@displaystyle + \if@itemized\endgraf\fi + \ifnum\@cols>1 + \egroup % vtop + \egroup % hbox + \fi + \ifnum\listlevel=1 + \if@ruled \kern5pt\hrule\nobreak\vskip2\medskipamount + \else %\nobreak + \if@removepostwhite\else\vskip\belowdisplayskip\fi + \fi + \gdef\@next{\@asifbelowdisplay}% + \fi + \else \gdef\@next{}% + \fi + \endgroup % list + \@next + } + +\def\sublist{\list[\listlevel=2]} + + +\newtoks\everyitem \everyitem{} + + +\def\@beginitem{% + \ifx\@liststyle\@displaystyle + \endgraf + \if@firstitem\@firstitemfalse\else\vskip\smallskipamount\fi + \advance\itemnumber by \@ne + \noindent\leavevmode + \the\everyitem + \tagform{\the\@itemtag}% + \else + \def\item{\if@firstitem\@firstitemfalse\else\unskip\@itemseparator\fi + \advance\itemnumber by \@ne\the\@itemtag\enspace}% + \fi + \global\count@\itemnumber + \global\dimen@\hangindent + \endgroup + \itemnumber\count@ + \hangindent\dimen@ + } + +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% ***** verbatim ***** +% + +% Operation here is very similar to that for the other tags. +% The opening tag sets up the situation and looks for optional +% commands and the short-form delimiters. Since initial setup +% involves changing the special characters to characters of +% type other, some juggling must be done when optional commands +% are read. In addition, to allow for implementation of the +% |...| style using the more verbose \verbatim...\endverbatim, +% we parameterize the ending-delimiter. + + % sets default to display style +\def\verbatim{\@verbatim[\display]} + +\def\@verbatim{% + \begingroup + \setupverbatim + \@checkoptions + } + +\def\setupverbatim{% + \def\CurrentTag{verbatim}% + \@defaultoptions + \def\inline{\let\@verbstyle\@inlinestyle}% + \def\display{\let\@verbstyle\@displaystyle}% + \def\displaystyle##1{\def\@altdisplaystyle{##1}}% + \def\inlinestyle##1{\def\@altinlinestyle{##1}}% + \def\numbered{\@numberedtrue}% + \def\ruled{\@ruledtrue}% + \def\smallcode{\ninepoint\tt\baselineskip=10pt}% + \let\@verbinputvar\relax + \let\@verbinputfile\relax + \@SpecialsGetOther + \enddelim=\expandafter{\endverbdelimiter}% + \normalspaces\frenchspacing + \obeylines + \@savingargumenttrue + \the\everyverbatim + } + +\def\@SpecialsGetOther{% + \catcode`\\=\other + \catcode`\{=\other \catcode`\}=\other \catcode`\$=\other + \catcode`\&=\other \catcode`\#=\other \catcode`\%=\other + \catcode`\~=\other \catcode`\_=\other \catcode`\^=\other + \the\@AdditionsToSpecialsGetOther} + +% The \@Additions... register above should be used whenever another +% character is declared to be special for some purpose. E.g., +% we will use the | for the short-form |...| verbatim notation. +% Since the | is generally active for this purpose, it's category +% won't get changed to \other for use in \verbatim...\endverbatim +% unless we add it via this mechanism. + +\newtoks\@AdditionsToSpecialsGetOther + +\def\AddToSpecialsGetOther#1{% + \@AdditionsToSpecialsGetOther= + \expandafter{\the\@AdditionsToSpecialsGetOther#1}} + +% Altering the verbatim setup. +% Users can alter the setup to their purpose by +% putting tokens in the register \everyverbatim. + +\newtoks\everyverbatim + +% Ordinarily the end-tag would be the single token `\endverbatim'. +% The following allows us to `see' the tag when `\' is of type `other'. +{\catcode`\|=0 \catcode`\\=\other +|gdef|endverbdelimiter{\endverbatim}} + +% Input from an external variable or file + +\def\inputfromvar#1{\def\@verbinputvar{#1}}% +\def\inputfromfile#1{\def\@verbinputfile{#1}}% +\let\@verbinputvar\relax +\let\@verbinputfile\relax + +% Outputs + +\newif\if@outputtotype \@outputtotypetrue +\def\notype{\@outputtotypefalse} +\def\outputtovar#1{\def\@verboutputvar{#1}} +\def\outputtofile#1{\def\@verboutputfile{#1}} +\let\@verboutputvar\relax +\let\@verboutputfile\relax +\newwrite\verboutfile + +\def\@beginverbatim{\obeyspaces}%\obeylines} + +\def\endverbatim{% + \ifx\@verboutputvar\relax\else % output to `variable' + \expandafter\xdef\csname\@verboutputvar\endcsname{\the\@argument}% + \fi + \ifx\@verboutputfile\relax\else % output to file + \immediate\openout\verboutfile=\@verboutputfile + \makeCtrlMnewlinechar + \iffalse{\fi\expandafter\@setupverbwrite\the\@argument}% use \@setupwrite to + \immediate\closeout\verboutfile % get rid of initial ^^M + \fi + \gdef\@next{}% % in case following clause is false + \if@outputtotype % output typeset on page + \tt + \ifx\@verbstyle\@inlinestyle + \@beforeverbinline + \@altinlinestyle + \else + \@beforeverbdisplay + \@altdisplaystyle + \fi + \ifx\@verbinputvar\relax\else % input from `variable' + \csname\@verbinputvar\endcsname + \fi + \ifx\@verbinputfile\relax\else % input from file + \fileinput{\@verbinputfile}% + \@endverbatim + \fi + \expandafter\@ignoreCtrlMverbendline\the\@argument\@endverbatim + \ifx\@verbstyle\@inlinestyle + \@afterverbinline + \else + \@afterverbdisplay\gdef\@next{\@asifbelowdisplay}% + \fi + \fi + \endgroup + \@next + } + + +\def\@beforeverbinline{% + \makeCtrlMverbspace + \let\@endverbatim=\empty + } + +\def\@beforeverbdisplay{% + \def\@endverbatim{\verbendline}% + \if@ruled \medskip \hrule\kern5pt \nobreak + \else \vskip\abovedisplayskip + \fi + \makespaceverbspace + \makeCtrlMverbendline + \parskip=\z@skip + \if@numbered \parindent=\z@ + \if@continuingnumbers + \else \global\globallinenumber = \z@ \fi + \linenumber=\z@ \fi + \everypar={\global\advance\globallinenumber by\@ne + \advance\linenumber by\@ne + \ifnum\linenumber<3 \vadjust{\nobreak}\fi + \if@numbered \leavevmode + \hbox to\normalparindent{\hss\sevenrm\the\globallinenumber.\ }% + \fi}% + \frenchspacing\rightskip=-\ttrightskip \hyphenpenalty\@M + } + +% \ttrightskip is the permissible overhang beyond right margin; +% in MANMAC, this is 5pc, which is fine for the TeXbook, but too much here. + +\newdimen\ttrightskip \ttrightskip=1pc + +\def\@afterverbinline{} + +\def\@afterverbdisplay{% + \if@ruled \kern5pt\hrule\fi + \ifnum\linenumber<3 \penalty\z@ \fi + \if@removepostwhite\else + \if@ruled \vskip2\medskipamount \else \vskip\belowdisplayskip\fi + \fi + } + +\def\@asifbelowdisplay{% + \toks@=\expandafter{\the\everypar}% + \noindent + \everypar=\expandafter{\the\toks@}% + \ignorespaces} + + +% Definitions of spaces and ^^M +% \@ignoreCtrlMverbendline is used to lop off an initial ^^M in +% verbatim text and to remove an \@endverbatim (the latter in case the +% verbatim text is actually empty) + +\def\@ignoreendverbatim{\@ignoreone{\@endverbatim}{}} +\def\verbendline{\leavevmode\null\endgraf} +\def\makeCtrlMactive{\catcode`\^^M=\active} +{\makeCtrlMactive +\gdef\makeCtrlMverbendline{\makeCtrlMactive% + \def^^M{\@ignoreone{\@endverbatim}{\verbendline}}}% +\makeCtrlMverbendline% +\gdef\@ignoreCtrlMverbendline{\@ignoreone{ +}{\@ignoreendverbatim}}% +\gdef\@setupverbwrite{\@ignoreone{ +}{\immediate\write\verboutfile\bgroup}}% +\gdef\makeCtrlMverbspace{\makeCtrlMactive\def^^M{\verbatimspace}}% +\gdef\makeCtrlMnewlinechar{\newlinechar=`\^^M}% +\gdef\makeCtrlMendgraf{\makeCtrlMactive\def^^M{\strutt\endgraf}}% +\gdef\makeCtrlMseparator{\makeCtrlMactive% + \def^^M{% + \@checknexttoken {\endlist}{}{% + \@itemseparator\advance\itemnumber by \@ne \tagform{\the\@itemtag}% + \ignorespaces}}}% +} + +% to read a variable or file name properly, we must interpret +% spaces and ^^M as nothing or as spaces + +{\makeCtrlMactive\obeyspaces% +\gdef\makeCtrlMempty{\def^^M{}}% +\gdef\makespaceempty{\def {}}% +} +{\makeCtrlMactive\obeyspaces% +\gdef\makeCtrlMspace{\def^^M{\space}}% +\gdef\makespacespace{\def {\space}}% +} + +{\makeCtrlMactive% +\gdef\@ignoreCtrlM#1{\@ignoreone{^^M}{#1}}% +\gdef\ignoreendline{\@ignoreCtrlM{}}% +} + +% From David Eppstein's ``Trees'' paper (6#1), preserve initial spaces. +\def\verbatimspace{\ifvmode\indent\fi\space} +{\obeyspaces\gdef\makespaceverbspace{\def {\verbatimspace}}} + + + +% Options and variants. + +\def\verbinline{\verbatim[\inline]} +\def\verbdisplay{\verbatim[\display]} +\def\verbfile#1{\verbatim[\inputfromfile{#1}]} + + +% Verbatim with the other characters (e.g. |...|). +% Procedures are parameterized so that it is easy to allow +% different characters to perform this function. Any character +% that's chosen could cause problems if it occurs unexpectedly +% in the middle of what is supposed to be verbatim text. We call +% the current special character for this purpose the "verbchar" +% and store it in active form in the token register \@verbchar. + +\newtoks\@verbchar + +% On hitting a "verbchar" in the middle of text, TeX must look ahead +% to see whether the verbchar occurs again. Since this +% look-ahead fixes the category of the token examined, we must change +% the categories of all characters appropriately before looking +% (and we read \everyverbatim in case it contains a category change). +% We must also "gobble" the second verbchar if we hit one. +% Depending upon whether 1 or 2 verbchars are found, we call +% \verbatim with the appropriate style command. We also use an +% optional command to change the delimiter which ends this \verbatim +% block. We naturally localize the changes to category codes made on +% startup. It's easier to end this group here at the beginning and to +% restart everything in a standard \verbatim than it is to add an extra +% \endgroup after the verbatim text. + +\def\@firstverbchar{% + \begingroup + \setupverbatim +% \@SpecialsGetOther + \makeverbcharactive + \expandafter\@checknexttoken\expandafter{\the\@verbchar}% + {\expandafter\@ignoreone\expandafter{\the\@verbchar}% + {\endgroup\verbatim[\longform\maketwoendverb]}}% + {\endgroup\verbatim[\inline\longform\makeoneendverb]}% + } + +\def\setupverbchar{% + \def\makeoneendverb{\catcode\expandafter`\csname\expandafter + \string\the\@verbchar\endcsname= + \active\edef\endverbdelimiter{\the\@verbchar}% + \enddelim=\expandafter{\endverbdelimiter}}% + \def\maketwoendverb{\catcode\expandafter`\csname\expandafter + \string\the\@verbchar\endcsname= + \active\edef\endverbdelimiter{\the\@verbchar\the\@verbchar}% + \enddelim=\expandafter{\endverbdelimiter}}% + \expandafter\let\the\@verbchar\@firstverbchar + \makeverbcharactive + \AddToSpecialsGetOther{% + \catcode\expandafter`\csname + \expandafter\string\the\@verbchar\endcsname=\other}% + } + +\def\makeverbcharactive{% + \catcode\expandafter`\csname + \expandafter\string\the\@verbchar\endcsname=\active} + +{\makeother\| \gdef\VertChar{|}} +{\makeactive\| +\gdef\makevertverbchar{% + \@verbchar={|}% + \setupverbchar + } +} + +{\makeother\! \gdef\WowChar{!}} +{\makeactive\! +\gdef\makewowverbchar{% + \@verbchar={!}% + \setupverbchar + } +} + + +\def\MTH{$} +\def\sb{_} +\def\sp{^} +\def\SP{{\tt\char"20 }} % "visible" space +\chardef\bs=`\\ +\def\vrt{{\tt\char`\|}} +\def\brokenvert{\hbox to 5.24998pt{\hfill + \lower 1.5pt\vbox to 8.5pt{\hrule width .9pt height 3.25pt + \vfill\hrule width .9pt height 3.25pt}\hfill}} + + + +\def\@lt{$<$} +\def\@gt{$>$} +{\makeactive\< +\gdef\enablemetacode{% + \AddToSpecialsGetOther{\catcode`\<=\other}% + \makeactive\<% + \def<##1>{$\langle${\it\makeCtrlMspace\makespacespace##1\/}$\rangle$}% + } +} + + +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% ***** figures ***** +% + + +\newif\if@@mid \@@midfalse +\newif\if@@bot \@@botfalse +\def\@caption{} +\newif\if@fixed \@fixedfalse + + % items for top and bottom ``banners'' on first page +\def\resetfirsthead{\global\toplgt=\z@ \gdef\firsthead{}} +\resetfirsthead +\newbox\firsth@@d \newbox\firsth@ad + +\def\resetfirstfoot{\global\botlgt=\z@ \gdef\firstfoot{}} +\resetfirstfoot +\newbox\firstf@@t \newbox\firstf@ot + +\newif\if@allowspanningfigs + +\newcount\@figurepage +\newcount\@figurescol +\newcount\@figureecol + + +\def\figure{% + \begingroup + \def\CurrentTag{figure}% + \@defaultoptions + \@savingargumentfalse + \def\top{}% + \def\bot{\@@bottrue}% + \def\mid{\@@midtrue}% + \def\caption##1{\def\@caption{\ulap{\bigskip##1\smallskip}}}% + \def\fixed{\@fixedtrue}% + \def\scol{\@figurescol}% + \def\ecol{\@figureecol}% + \@figurepage=\pageno + \@figurescol=1 + \@figureecol=\numcols + \def\page{% + \@ignoreall{\space}% + {\@ignoreone{=}% + {\@ignoreall{\space}% + {\@checknexttoken{+}{\@ignoreone{+}{\advance\@figurepage by}}% + {\@figurepage=}% + }% + }% + }% + }% + \@checkoptions} + +\def\@beginfigure{% + \if@fixed + \global\ThisIsFirstPagetrue + \setbox\T@stBox=\vbox\bgroup \hsize\pagewd + \else + \if@@mid\midinsert\else\if@@bot\botinsert\else\topinsert\fi\fi + \fi + } + +\def\endfigure{% + \@caption + \if@fixed + \egroup + \if@allowspanningfigs + \ifnum\@figurepage>\pageno + \immediate\write\sixt@@n{^^J + Setting multiple column figures currently not allowed on pages^^J + other than the first of each article. Check your source file.^^J}% + \else + \if@@bot + \ifdim \botlgt=\z@ \global\botlgt=\ht\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 }% + \else + \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 }% + \fi + \fi + \else + \immediate\write\sixt@@n{^^J + Setting multiple column figures currently not allowed after^^J + article has begun.^^J}% + \fi + \else \endinsert + \fi + \endgroup + } + +\def\twocolfigure{% + \figure[\fixed]} + + + +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% ***** utilities ***** +% + + + +\def\linebreak{\unskip\break} % conflicts with LaTeX definition + +% 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=\z@ \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 \z@ #1}% +} + +% Tags for special formatting of editor's notes (See also TUGBOAT.COM) + +\def\Editor{\noindent To the Editor:\par} +\def\EdNote #1{% + \if #1[% + \ifvmode \smallskip\noindent \else \unskip\hskip1em \fi + [\thinspace\xEdNote\ignorespaces + \else \ifFirstPar \else \medskip\noindent \fi + \xEdNote #1\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 } + +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% ***** initialization ***** +% + + +\def\initializearticle{% + \let\thetitle=\relax + \authornumber=0 + \def\@signature{\@defaultsignature}% + \def\@authorlist{\@defaultauthorlist}% + \@allowspanningfigstrue + } + + +\makeother\@ + +% @ is prohibited in AMS-TeX, but should not be in TUGboat + + +\twocol +\maxcols=2 +\OverlaysinTeXtrue +\Trimmarksfalse +\PrelimDrafttrue +\initializearticle +\pageno=1001 % number of title page + +\StretchyTenPointSpacing +\StretchyNinePointSpacing +\StretchyEightPointSpacing + +\makevertverbchar + +\endinput + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% History of changes + +Version Date Changes +------- --------- --------------------------------------------------- +1.16 2 Jan 06 updated TUG address and phone in header + +1.15 15 Aug 05 added switch \if@address to avoid skip in signature + +1.14c 14 Oct 96 lowered footnoterule by 3pt + +1.14b 14 Apr 94 added \interlinepenalty=10000 to avoid page breaks + in very long titles and author lists + +1.14a 8 Nov 93 removed extraneous " from header + +1.14 19 Feb 93 installed new TUG address and phone number in header + +1.13 13 Oct 92 Added \SMC in \ninepoint + +1.12 4 Jun 92 Added stretchability to \rightskip in ragged title + +1.11 8 Mar 92 Changed name of tugboat.com to tugboat.cmn to avoid + conflict with special meaning of .com with some + operating systems + Within verbatim, added \smallcode (from tugproc) + Added standard headers, prepared for archive installation + +1.10 21 Oct 91 Corrected font for \SMC in \tenpoint to \ninerm + (\ninesmc was used, but set to cmcsc10) + Changed \EdNote to detect \ifvmode when tag followed + by [ and to \smallskip and \noindent in that case + rather than performing \hskip1em + +1.09 11 Mar 91 Made \ an escape character in network addresses. + Added mechanism for saving \long arguments of + TUGboat macros (see uses of \@long). + +1.08 18 Oct 90 Incorporated redefinition of \sl within \bf + Changed an \input within \verbatim to \fileinput. + Added means of turning off punctuation after subheads. + Removed \nobreak after lists +1.07 8 Jun 90 Corrected definition of \newpage + +1.06 13 May 90 Added \@setupverbwrite to eliminate initial ^^M + as \verbatim writes to a file. + + Made strut on first line of footnote slightly taller + so as to separate footnotes. + + Reset \@verbinputfile and \@verbinputvar to \relax + to allow nesting + + Removed some \global assignments to \@argument and + 2 verbatim flags to allow nesting. + +1.05 23 Apr 90 Added "\setupverbatim" to \@firstverbchar so + that category switches are accomodated properly. + +1.04 7 Mar 90 Added \colsepwidth to allow for separation between + columns of lists + +1.03 1 Mar 90 Modified \@dosubhead and \@dosubsubhead to allow + stretchable space afterward + +1.02 25 Feb 90 Added \resetmaxcols to allow for automatic adjustment + of \maxcols; if overlays are done by the driver, + \maxcols needs to be set to an overall job maximum + at the start of the job. + + Added setting of \SecTitletrue to definition + of \sectitle. + + Added indicator of style file loaded (\tubstyle). + +1.01 17 Jan 90 Modified \@executetoend so that \@next would not + be clobbered by \csname @begin\CurrentTag\endcsname; + \@next changed to \@afterbegintag + + Added `\the' before \@otherSFD within definition of + \@shortparse + + added \@altdisplaystyle to definition of \colsep diff --git a/Master/texmf-dist/tex/plain/tugboat-plain/tugproc.sty b/Master/texmf-dist/tex/plain/tugboat-plain/tugproc.sty new file mode 100644 index 00000000000..56361b54664 --- /dev/null +++ b/Master/texmf-dist/tex/plain/tugboat-plain/tugproc.sty @@ -0,0 +1,366 @@ +%% @texfile{ +%% filename="tugproc.sty", +%% version="1.11", +%% date="26-Jan-1994", +%% filetype="TeX macros for TUG Proceedings", +%% copyright="Copyright (C) TeX Users Group. +%% Copying of this file is authorized only if either: +%% (1) you make absolutely no changes to your copy, OR +%% (2) if you do make changes, you first rename it to some +%% other name.", +%% author="TeX Users Group", +%% address="TeX Users Group", +%% P. O. Box 869, +%% Santa Barbara, CA 93102-0869, +%% USA", +%% telephone="805-963-8358", +%% email="Internet: tug@tug.org or TUGboat@Math.AMS.org", +%% codetable="ISO/ASCII", +%% checksumtype="line count", +%% checksum="366", +%% keywords="tex users group, tugboat, proceedings, plain tex", +%% abstract="This file contains the plain-based macros +%% for Proceedings issues of TUGboat, the +%% Communications of the TeX Users Group." +%% } +%% ********************************************************* +%% +%% Use of this file also requires the following files: +%% TUGBOAT.STY (version 1.09+) +%% TUGBOAT.CMN (version 1.08+) (loaded by TUGBOAT.STY) +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\def\fileversion{v1.11} +\def\filedate{26 Jan 94} + +\message{File `TUGPROC.STY' \fileversion \space\space <\filedate>} + +% initialize year/issue-specific elements for standalone use +\def\mtgyear{1994} +\def\volyr{1994} +\def\volno{15} +\def\issno{3} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\input tugboat.sty + +\savecat\@ \makeletter\@ +\ifx\tugprocloaded@\undefined \let\tugprocloaded@\end +\else \restorecat\@ \xdef\startingpage{\number\pageno}\endinput \fi + +\newdimen\tubpagelgt +\tubpagelgt=\pagelgt \advance\tubpagelgt 1pc % for running feet + +% fonts + +\font\twelverm=cmr10 scaled 1200 +\font\twelvebf=cmbx10 scaled 1200 +\font\fourteenrm=cmr10 scaled 1440 +\font\fourteenit=cmti10 scaled 1440 +\font\fourteensl=cmsl10 scaled 1440 + +\def\twelvepoint{% + \normalbaselineskip=14pt + \def\rm{\fam\z@\twelverm}% + \textfont\z@=\twelverm + \def\bf{\fam\bffam\twelvebf}% + \textfont\bffam=\twelvebf + \normalbaselines \rm} + +\def\fourteenpoint{% + \normalbaselineskip=18pt + \def\rm{\fam\z@\fourteenrm}% + \textfont\z@=\fourteenrm + \def\it{\fam\itfam\fourteenit}% + \textfont\itfam=\fourteenit + \def\sl{\fam\slfam\fourteensl}% + \textfont\slfam=\fourteensl + \normalbaselines \rm} + +\def\AUTHORfont{\twelvepoint\rm} +\def\HEADfont{\twelvepoint\bf} +\def\TITLEfont{\fourteenpoint\rm} +\def\addressfont{\ninepoint\rm} +\def\netaddrfont{\ninepoint\tt} + +\def\br{\unskip\hfil\break} % version for titles +\def\degrade{\def\br{\unskip\space\ignorespaces}% + \let\\\br} % in running heads. + +% running heads & feet +%\newcount\startingpage % Number of first page of article +\newif\ifpreprint \preprinttrue +\def\preprint{\preprinttrue + \ifExtrAbs\breaklines\fi} % (*) +\newif\ifproof \prooffalse \let\filename\relax +\def\Proof{\prooftrue\immediate\write16{File name?} + \immediate\read16 to\filename} +\def\stamp{\ifproof{\tt \filename}\quad\Now\else\space\fi} +\let\midrtitle=\null +\def\rtitlex{% + \ifodd\pageno\degrade\rhtitle\else\rhauthor\fi} +\def\rtitle{% + \hbox to \pagewd{% + \tenpoint + \makestrut[10pt;\z@]% + \ifnum\the\pageno=\startingpage\hfill\stamp\else + \ifodd\pageno + \stamp\hfill\rtitlex + \else + \rtitlex\hfill\stamp + \fi\fi + }% + } + +\ifx\startingpage\undefined \def\startingpage{1001}\fi +\pageno=\startingpage +\def\rfoot{% + \hbox to \pagewd{% + \tenpoint + \makestrut[\z@;0.5pc]% + \ifpreprint + \ifodd\pageno + \pfoottext\hfil\Now\hfil$^.$\number\pageno + \else + \number\pageno$^.$\hfil\Now\hfil\pfoottext + \fi + \else + \ifodd\pageno + \rfoottext\hfil\number\pageno + \else + \number\pageno\hfil\rfoottext + \fi + \fi + }% + } + +\v@lx % normalize publication info for footer +\def\pfoottext{{\smc Preprint}: \mtgyear{} \TUG{} Annual Meeting} +\def\rfoottext{\tenrm\TUB, \volx\Dash + {Proceedings of the \volyr{} Annual Meeting}} + +% midpage redone to align running feet. +\def\midpage#1{% + \vbox{ + \basezero + \hrule height\z@ depth\z@ width\p@ + \ifTrimmarks + \vskip-1in % default offset for laser printers + % this puts top trim at edge of paper + \vbox to \trimlgt \bgroup + \topregister + \vskip \headmargin + \else + \vskip-\rheadlgt % this puts runhead above default offset + \fi + \dlap{\vbox to\tubpagelgt{\vfil + \ifnum\xcol=\numcols \runfoot \else \vbox to \rfootlgt{}\fi}} + \vbox to \pagelgt{ + \ifnum\xcol=\numcols \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 +% \ifnum\xcol=\numcols \runfoot \else \vbox to \rfootlgt{}\fi + } + \ifTrimmarks \vfill \botregister \egroup \fi + }} + +% *************************************************** +% Bibliography +\def\Hang{1em} +\def\entry #1{\noindent\frenchspacing\hangindent\Hang #1} + +% Appendix +\def\appendix #1\endappendix{\newpage\onecol\centerline{\HEADfont #1}} + +% Box for deadlines: +\newbox\textbox % \twocolcolwd=18.75pc [cf. tugboat.sty] +\long\def\boxit #1{\vbox{\hrule\hbox{\vrule\kern3pt + \vbox{\kern3pt\vskip 4pt#1\vskip 4pt\kern3pt}\kern3pt\vrule}\hrule}} +\long\def\boxedlist #1{$$\boxit{\setbox\textbox=\vbox{\hsize 18pc + \strut{#1}\strut}\box\textbox}$$} % TeXbook, 94 & 223 (exer 21.3) + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% top matter +\def\endtitle{% + \global\toks@=\expandafter{\the\@argument}% + \endgroup + \edef\thetitle{\ignorespaces\the\toks@\unskip}% + \let\rhtitle\thetitle + } + % If your title is too long for the running head, + % use this to construct a shorter version: +\def\shorttitle{% + \begingroup + \def\CurrentTag{shorttitle}% + \@defaultoptions + \@savingargumenttrue + \@checkoptions} + +\def\endshorttitle{% + \global\toks@=\expandafter{\the\@argument}% + \endgroup + \edef\rhtitle{\ignorespaces\the\toks@\unskip}% + } + +\def\rhauthor{\@defaultauthorlist} + % Use the following for running heads if more than + % one author or author's name is too long to fit: +\def\shortauthor{% + \begingroup + \def\CurrentTag{shortauthor}% + \@defaultoptions + \@savingargumenttrue + \@checkoptions} + +\def\endshortauthor{% + \global\toks@=\expandafter{\the\@argument}% + \endgroup + \edef\rhauthor{\ignorespaces\the\toks@\unskip}% + } + +%\long\def\Abstract #1\endAbstract{\long\def\@abstract{#1}} +\def\abstract{\@abstract[\longargument]} +\def\@abstract{% + \begingroup + \def\CurrentTag{abstract}% + \@defaultoptions + \@savingargumenttrue + \@checkoptions} + +\def\endabstract{% + \global\toks@=\expandafter{\the\@argument}% + \endgroup + \edef\theabstract{\ignorespaces\the\toks@\unskip}% + } + +\newif\ifExtrAbs \ExtrAbsfalse % Extract abstract from paper +\def\breaklines{\begingroup\catcode`\^^M=\active\newlinechar=`\^^M} +\def\endbreaklines{\endgroup} + +\def\prefnote{\@prefnote[\longargument]} +\def\@prefnote{% + \begingroup + \def\CurrentTag{prefnote}% + \@defaultoptions + \@savingargumenttrue + \@checkoptions} + +\def\endprefnote{% + \global\toks@=\expandafter{\the\@argument}% + \endgroup + \edef\theprefnote{\ignorespaces\the\toks@\unskip}% + } + +\let\theprefnote\relax + +\def\@defaultsignature{% + \count@=0 + \loop + \ifnum\count@<\authornumber + \vskip20pt + \advance\count@ by \@ne + \noindent{\AUTHORfont\theauthor{\number\count@}}\endgraf + \noindent{\addressfont\theaddress{\number\count@}}\endgraf + \noindent{\netaddrfont\thenetaddress{\number\count@}}\endgraf + \repeat + } + +\newbox\startbox % \newdimen\startheight +\def\article{% \ifExtrAbs\endbreaklines\fi % (*) + \setbox\startbox=\hbox to\colwd + {\hbox to\pagewd{\vbox{ + \hsize\pagewd\raggedright\advance\rightskip0pt plus 1fil\tenpoint\rm + \let\\\break + \noindent{\TITLEfont\thetitle\endgraf}% + \@defaultsignature + \ifx\theprefnote\relax\else + \vskip 20pt + \hbox to \pagewd{\hfil\vbox{\hsize 0.6\pagewd + \rightskip\z@skip \parfillskip0pt plus 1fil \spaceskip\z@skip + \noindent{\bf Author's Note: }\ignorespaces\theprefnote\par}\hfil} + \fi + \vskip 20pt + \hbox to \pagewd{\hfil\vbox{\hsize 0.75\pagewd + \rightskip\z@skip \parfillskip0pt plus 1fil \spaceskip\z@skip + \centerline{\bf Abstract}\vskip 5pt + \noindent\theabstract\par}\hfil} + \vskip 1pc}}\hss} + \twocolfigure\box\startbox\endfigure + \ifExtrAbs % (*) + \immediate\write\titleabs{\string\TITLE\string\bf\space + \rhauthor:\ \string\rm \rhtitle;;} + \immediate\write\titleabs{\space} + \immediate\write\titleabs{\string\ABS\string\bf\space + Abstract.\ \theabstract;;} + \immediate\write\titleabs{\space} + \immediate\write\titleabs{\string\endinput} + \immediate\closeout\titleabs \endbreaklines + \fi % (*) +} + +% \head (This writes over a definition in tugboat.sty) +\def\@domainhead{% + \if@removeprewhite\else\vskip\baselineskip\fi + \noindent{\HEADfont\baselineskip15pt % larger type than usual + \raggedright\bf\ignorespaces\the\@argument\unskip\endgraf}% + \if@removepostwhite % usually we want the white space + \else\kern0.5\baselineskip\fi + \nobreak + \gdef\@next{% + \if@allowindent\def\@next{}% usually we don't want to indent here + \else\def\@next{\DeleteOptionalSpacesandPars{\noindent\ignorespaces}}\fi + \@next + }% + } + +\restorecat\@ + +% \Trimmarkstrue % for final copy +% \overfullrule=0pt + +\endinput + +%% ********************************************************* + +Change History +-------------- +1.11 changed TUG address in header to Santa Barbara + parameterized dates, etc., in running footers + initialized them at top of file instead of in footer text + +1.10 changed \tenrm to \tenpoint in definitions of \rtitle and \rfoot + so that \sl will be properly defined if used in that context + +1.09 removed \smallcode definition; it is now in tugboat.sty + increased width of abstract from 60-75% of text width + added standard headers, prepared for archive installation + +1.08 changed \start to \startingpage + added definition of \startingpage at top of file so running heads + will be empty on first page of article + +1.07 removed \Pageno + added check for previous input + altered \\ in running heads + +Previous: + +%%% TUGPROC.sty 11-mar-90 (*) 15-mar-90 30-mar-90 10-apr-90 +%%% 26-jun-90 [changed running feet, page numbers, \start] +%%% 28-jun-90 [added \stamp, \ifproof] 29-jun-90 [\Proof] +%%% TUGPROC.sty 03-feb-90 (renamed 13-feb-90) 20-feb-90 +%%% +%%% Supplementary header file for TUG Proceedings volume +%%% for use with plain.tex (under revision still) +%%% +%%% (*) This version writes the title and abstract into +%%% a file, for use in preparing the Title-Abstract-Bio +%%% section in the program. Author-Title and Abstract are +%%% written into a file as one-liners; if these lines are +%%% too long, they should be reformatted manually before +%%% the file is \input. |