Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
The tugboat package∗
The TUGboat team(Distributed by Robin Fairbairns)
2009/09/29
Contents
1 Document preambles 2
2 Introduction 22.1 Summary of control sequences . . . . . . . . . . . . . . . . . . . . . 2
3 LATEX 2ε TUGboat class file 63.1 Setup and options . . . . . . . . . . . . . . . . . . . . . . . . . . . 63.2 Resetting at start of paper . . . . . . . . . . . . . . . . . . . . . . . 93.3 Helpful shorthand (common code with Plain styles) . . . . . . . . . 103.4 Abbreviations and logos . . . . . . . . . . . . . . . . . . . . . . . . 113.5 General typesetting rules . . . . . . . . . . . . . . . . . . . . . . . 153.6 Utility registers and definitions . . . . . . . . . . . . . . . . . . . . 163.7 Ragged right and friends . . . . . . . . . . . . . . . . . . . . . . . . 173.8 Reviews . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203.9 Dates, volume and issue numbers, etc. . . . . . . . . . . . . . . . . 213.10 Page dimensions, glue, penalties etc . . . . . . . . . . . . . . . . . 253.11 Messing about with the LATEX logo . . . . . . . . . . . . . . . . . . 253.12 Authors, contributors, addresses, signatures . . . . . . . . . . . . . 263.13 Article title . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323.14 Section titles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343.15 Section headings . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373.16 Appendices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403.17 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413.18 Title references . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413.19 Float captions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423.20 Size changing commands . . . . . . . . . . . . . . . . . . . . . . . . 433.21 Lists and other text inclusions . . . . . . . . . . . . . . . . . . . . . 433.22 Some fun with verbatim . . . . . . . . . . . . . . . . . . . . . . . . 443.23 Bibliography . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
∗This file has version number v2.7, last revised 2009/09/29
1
3.24 Registration marks . . . . . . . . . . . . . . . . . . . . . . . . . . . 503.25 Running heads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503.26 Output routine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513.27 Font-related definitions and machinery . . . . . . . . . . . . . . . . 513.28 Miscellaneous definitions . . . . . . . . . . . . . . . . . . . . . . . . 523.29 Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4 LATEX 2ε Proceedings class 544.1 Proceedings titles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564.2 Section divisions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5 Plain TEX styles 62
6 The LATEX 2ε compatibility-mode style files 62
1 Document preambles
1 〈ltugboatcls | ltugproccls | ltugcomn〉\NeedsTeXFormatLaTeX2e[1994/12/01]2 〈∗dtx〉3 \ProvidesFile tugboat.dtx
4 〈/dtx〉5 〈ltugboatcls〉\ProvidesClass ltugboat
6 〈ltugproccls〉\ProvidesClass ltugproc
7 〈ltugboatsty〉\ProvidesPackageltugboat8 〈ltugprocsty〉\ProvidesPackageltugproc9 〈ltugcomn〉 \ProvidesPackageltugcomn
10 [2009/09/29 v2.7
11 〈ltugboatcls〉 TUGboat journal class%
12 〈ltugproccls〉 TUG conference proceedings class%
13 〈ltugboatsty | ltugprocsty〉 TUG compatibility package%
14 〈ltugcomn〉 TUGboat ‘common macros’ package%
15 〈∗dtx〉16 TUG macros source file%
17 〈/dtx〉18 ]
19 〈∗dtx〉20 \newif\ifoldlongtable
21 〈/dtx〉
2 Introduction
This file contains all the macros for typesetting TUGboat with both plain TEXand LATEX 2ε.
2.1 Summary of control sequences
Abbreviations. Just a listing with indications of expansion where that may notbe obvious. For full definitions, see real code below (Section 3.4).
2
\AllTeX (LA)TEX\AMS American Mathematical Society\AmSTeX
\aw A-W (abbreviation for Addison-Wesley)\API
\AW Addison-Wesley\BibTeX
\CandT Computers & Typesetting\ConTeXt ConTEXt\Cplusplus C++\DTD
\DVI
\DVD
\DVIPDFMx DVIPDFMx\DVItoVDU DVItoVDU\ECMA
\EPS
\eTeX ε-TEX\ExTeX εXTEX\Ghostscript
\Hawaii Hawai‘i\HTML
\ISBN ISBN\ISO
\ISSN ISSN\JTeX
\JoT The Joy of TEX\LaTeX
\LyX
\MacOSX Mac OS X\MathML
\Mc M with raised c\MF METAFONT
\mf Metafont\MFB The Metafont book\MP METAPOST
\mp MetaPost (in text only: remains ‘∓’ in maths)\OMEGA Omega ‘logo’ (Ω)\OCP Omega compiled process\OOXML
\OTP Omega translation process\mtex multilingual TEX\NTS New Typesetting System\pcMF pcMF\PCTeX
\pcTeX
3
\Pas Pascal\PiCTeX
\plain plain (in typewriter font)\POBox P. O. Box\PS PostScript (with hyphenation)\SC Steering Committee\SGML SGML\SliTeX
\slMF Metafont (slanted) — deprecated: use \textsl in-stead
\stTeX TEX for the Atari ST\SVG
\TANGLE
\TB The TEXbook\TeX (Although nearly every package defines this,
most — including plain — are missing the space-factor adjustment)
\TeXhax
\TeXMaG (defunct)\TeXtures
\TeXXeT
\Thanh
\TFM TFM
\TUB TUGboat\TUG TEX Users Group\UNIX
\UTF
\VAX
\VnTeX
\VorTeX
\XeT
\XeTeX reflected and lowered first ‘E’\XeLaTeX with extra space before ‘L’\XML
\WEB
\WEAVE
\WYSIWYG
Macros for things that are slightly more significant.
\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)
4
\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 cen-
ter\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 (arguments optionally
separated by a slash)\cs control seqence name
\csname→\name
\env environment name\envname→\beginname
5
\meta meta-argument name\metaname→〈name〉
\dash en-dash surrounded by thinspaces; only breakableAFTER
\Dash em-dash, as above\hyph permit automatic hyphenation after an actual hy-
phen\slash ‘breakable’ slash\nth for obtaining ‘1st’, ‘2nd’, 3rd, 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 re-
viewed\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\TBEnableRemarks enable \TBremarks (normally suppressed)\pagexref used to write out page numbers to screen and\pagexrefON external files\pagexrefOFF
\xrefto used for symbolic cross-reference to other pages\xreftoON in TUGboat\xreftoOFF
\TBdriver marks code which only takes effect when articlesare run together in a driver file
\signaturemark items for signatures\signaturewidth
3 LATEX 2ε TUGboat class file
3.1 Setup and options
Check for reloading. Hmmm. . . Does this happen with LATEX 2ε classes? Probably,in fact, as well that it doesn’t, since the \tugstyinit referenced here doesn’t exist;however, it’s possible that we might need a similar mechanism in the future, sowe retain its skeleton, without fleshing out the \tugstyinit bones.
22 〈∗ltugboatcls〉23 \csname tugstyloaded@\endcsname
24 \def\tugstyloaded@\tugstyinit\endinput
6
Acquire a name for this class if we don’t already have one (by virtue of havingbeen loaded by tugproc.cls). This name will be used in error messages and thelike.
25 \providecommand\@tugclassltugboat
Warnings/error messages/information messages — if we’re using LATEX 2ε wecan use the \Class* commands:
26 \def\TBInfo\ClassInfo\@tugclass
27 \def\TBError\ClassError\@tugclass
28 \def\TBWarning\ClassWarning\@tugclass
29 \def\TBWarningNL\ClassWarningNoLine\@tugclass
Some trivial options, just flicking switches, etc.
30 \newif\ifpreprint
31 \def\preprint\preprinttrue
32 \DeclareOptiondraft%
33 \AtEndOfClass%
34 \setcounterpage1001%
35 \BlackBoxes
36 \def\MakeRegistrationMarks%
37 \PrelimDrafttrue
38 %
39
40 \DeclareOptionpreprint%
41 \preprinttrue
42
43 \DeclareOptionfinal%
44 \AtEndOfClass%
45 \NoBlackBoxes
46 \PrelimDraftfalse
47 %
48
The rules dictate that the output should be set using a 10pt base font.
49 \DeclareOption11pt%
50 \TBWarningThe \@tugclass\space class only supports 10pt fonts:
51 \MessageBreak option \CurrentOption\space ignored%
52
53 \DeclareOption12pt\csname ds@11pt\endcsname
Similarly, ignore one/two-side/column
54 \DeclareOptiononeside\TBWarningOption \CurrentOption\space ignored
55 \DeclareOptiontwoside\ds@oneside
56 \DeclareOptiononecolumn\ds@oneside
57 \DeclareOptiontwocolumn\ds@oneside
There are these people who seem to think tugproc is an option rather than aclass. . . (Note that it’s already been filtered out if we were calling from ltugproc.)
58 \DeclareOptiontugproc%
7
59 \TBWarningOption \CurrentOption\space ignored: use class ltugproc
60 instead of \@tugclass%
61
Option rawcite (the default) specifies the default citation mechanism (asbuilt-in to LATEX); option harvardcite specifies the author-date citation mecha-nism defined in section 3.23 below.
62 \DeclareOptionrawcite\let\if@Harvardcite\iffalse
63 \DeclareOptionharvardcite\let\if@Harvardcite\iftrue
Option extralabel (the default) specifies that the publication years of twosuccessive references with otherwise identical labels will be tagged with distin-guishing letters; option noextralabel causes those letters to be suppressed. Notethat (a) no two references will in any case have the same labels in the default(plain) rawcite setup, and that (b) the distinguishing letters appear in the labelsthemselves — the even remotely intelligent reader should be able to work out thecorrespondence one with the other. . .
64 \DeclareOptionextralabel\let\UseExtraLabel\@firstofone
65 \DeclareOptionnoextralabel\let\UseExtraLabel\@gobble
The section-numbering style, so that we can allow the same heading layoutas in the plain macros.
66 \DeclareOptionnumbersec\let\if@numbersec\iftrue
67 \DeclareOptionnonumber\let\if@numbersec\iffalse
Minimal running headers/footers contain just the TUGboat volume/issueidentification and page number. ‘runningfull’ is the default, and includes titleand author.
68 \DeclareOptionrunningminimal\AtEndOfClass\@tubrunningminimal
69 \DeclareOptionrunningfull\AtEndOfClass\@tubrunningfull
Any other options, we pass on to article.cls before we load it:
70 \DeclareOption*\PassOptionsToClass\CurrentOptionarticle
Request default options (draft mode, standard citation, double-sided printing,etc.), process all options, and then get the base document class on top of whichwe reside.
71 \ExecuteOptionsdraft,extralabel,numbersec,rawcite,runningfull
72 \ProcessOptions
73 \LoadClass[twoside]article
Various fonts used throughout. Some effort has been made to suppress thesethings with explicit sizes in the macro name (\tensl is an example below), butkeeping in step with the documentation is one thing that restricts such a move.
74 \def\sectitlefont\fontfamily\sfdefault\fontseriesbx\fontshapen%
75 \fontsize\@xviipt\stbaselineskip\selectfont
76 \def\tensl\fontseriesm\fontshapesl\fontsize\@xpt\@xiipt
77 \selectfont
8
This font selection command is used only for the ‘Editor’s Note’ introductionto notes; sadly it makes explicit reference to cmr, and Barbara Beeton has agreedthat the reference may be constructed to use the current family such that, if noupright italic is defined, ordinary italics are used. A project for later. . .
78 \def\EdNoteFont\fontfamilycmr\fontseriesm\fontshapeui%
79 \selectfont
80 〈/ltugboatcls〉
If Ulrik Vieth’s mflogo.sty is around, we’ll use it. Otherwise (pro tem, atleast) we’ll warn the user and define the absolute minimum of machinery thatTUGboat requires (that which was used prior to the invention of LATEX 2ε).
81 〈∗common〉82 \IfFileExistsmflogo.sty%
83 \RequirePackagemflogo%
84 〈!ltugcomn〉 \TBWarning
85 〈ltugcomn〉 \PackageWarningltugcomn
86 Package mflogo.sty not available --\MessageBreak
87 Proceeding to emulate mflogo.sty
88 \DeclareRobustCommand\logofamily%
89 \not@math@alphabet\logofamily\relax
90 \fontencodingU\fontfamilylogo\selectfont
91 \DeclareTextFontCommand\textlogo\logofamily
92 \def\MF\textlogoMETA\-\textlogoFONT\@
93 \def\MP\textlogoMETA\-\textlogoPOST\@
94 \DeclareFontFamilyUlogo
95 \DeclareFontShapeUlogomn%
96 <8><9>gen*logo%
97 <10><10.95><12><14.4><17.28><20.74><24.88>logo10%
98
99 \DeclareFontShapeUlogomsl%
100 <8><9>gen*logosl%
101 <10><10.95><12><14.4><17.28><20.74><24.88>logosl10%
102
103 \DeclareFontShapeUlogomit%
104 <->ssub*logo/m/sl%
105 %
106
3.2 Resetting at start of paper
\ResetCommands
\AddToResetCommands
\StartNewPaper
We store a set of commands that should be executed at the start of each paper,before any paper-specific customisation. These commands (stored in the tokenregister \ResetCommands) include things suc as resetting section and footnotenumbers, re-establishing default settings of typesetting parameters, and so on.The user (or more typically, editor) may execute the commands by using thecommand \StartNewPaper. Things I’ve not yet thought of may be added to thelist of commands, by
107 \newtoks\ResetCommands
9
108 \ResetCommands%
109 \setcounterpart0%
110 \setcountersection0%
111 \setcounterfootnote0%
112 \authornumber\z@
113
114 \newcommand\AddToResetCommands[1]%
115 \AddToResetCommands\expandafter\AddToResetCommands#1%
116
3.3 Helpful shorthand (common code with Plain styles)
\makeescape, . . . , \makecomment allow users to change the category code of asingle character a little more easily. These require that the character be addressedas a control sequence: e.g., \makeescape\/ will make ‘/’ an escape character.
117 〈∗!latex〉118 \def\makeescape#1\catcode‘#1=0
119 \def\makebgroup#1\catcode‘#1=1
120 \def\makeegroup#1\catcode‘#1=2
121 \def\makemath #1\catcode‘#1=3
122 〈/!latex〉123 〈∗latex〉124 \def\makeescape#1\catcode‘#1=\z@
125 \def\makebgroup#1\catcode‘#1=\@ne
126 \def\makeegroup#1\catcode‘#1=\tw@
127 \def\makemath #1\catcode‘#1=\thr@@
128 〈/latex〉129 \def\makealign #1\catcode‘#1=4
130 \def\makeeol #1\catcode‘#1=5
131 \def\makeparm #1\catcode‘#1=6
132 \def\makesup #1\catcode‘#1=7
133 \def\makesub #1\catcode‘#1=8
134 \def\makeignore#1\catcode‘#1=9
135 \def\makespace #1\catcode‘#1=10
136 \def\makeletter#1\catcode‘#1=11
137 \chardef\other=12
138 \let\makeother\@makeother
139 \def\makeactive#1\catcode‘#1=13
140 \def\makecomment#1\catcode‘#1=14
\savecat#1 and \restorecat#1 will save and restore the category of a givencharacter. These are useful in cases where one doesn’t wish to localize the settingsand therefore be required to globally define or set things.
141 \def\savecat#1%
142 \expandafter\xdef\csname\string#1savedcat\endcsname\the\catcode‘#1
143 \def\restorecat#1\catcode‘#1=\csname\string#1savedcat\endcsname
144 〈!latex〉\savecat\@145 〈!latex〉\makeletter\@
10
\SaveCS#1 and \RestoreCS#1 save and restore ‘meanings’ of control se-quences. Again this is useful in cases where one doesn’t want to localize or whereglobal definitions clobber a control sequence which is needed later with its ‘old’definition.
146 \def\SaveCS#1\expandafter\let\csname saved@@#1\expandafter\endcsname
147 \csname#1\endcsname
148 \def\RestoreCS#1\expandafter\let\csname#1\expandafter\endcsname
149 \csname saved@@#1\endcsname
To distinguish between macro files loaded
150 \def\plaintubstyleplain
151 \def\latextubstylelatex
Control sequences that were first defined in LATEX 2ε of 1995/06/01 (or later),but which we merrily use. Only define if necessary:
152 \providecommand\hb@xt@\hbox to
153 \providecommand\textsuperscript[1]\ensuremath\m@th
154 ^\mbox\fontsize\sf@size\z@
155 \selectfont #1
(Note that that definition of \textsuperscript isn’t robust, but probably doesn’tneed to be. . . What’s more, it doesn’t appear in the mythical 2.09 version of thepackage.)
3.4 Abbreviations and logos
Font used for the METAFONT logo, etc.
156 \def\AllTeX(\La\kern-.075em)\kern-.075em\TeX
157 \def\AMSAmerican Mathematical Society
158 \def\AmS$\mathcalA$\kern-.1667em\lower.5ex\hbox
159 $\mathcalM$\kern-.125em$\mathcalS$
160 \def\AmSLaTeX\AmS-\LaTeX
161 \def\AmSTeX\AmS-\TeX
162 \def\ANSI\acroANSI
163 \def\API\acroAPI
164 \def\ASCII\acroASCII
165 \def\awA\kern.1em-W
166 \def\AWAddison\kern.1em-\penalty\z@\hskip\z@skip Wesley
167 %
168 % make \BibTeX work in slanted contexts too; it’s common in titles, and
169 % especially burdensome to hack in .bib files.
170 \def\Bib%
171 \ifdim \fontdimen1\font>0pt
172 B\SMC\SMC IB%
173 \else
174 \textscBib%
175 \fi
176
177 \def\BibTeX\Bib\kern-.08em \TeX
11
178 %
179 \def\CandT\textslComputers \& Typesetting
180 \def\CJK\acroCJK
We place our \kern after \- so that it disappears if the hyphenation is taken:
181 \newcommand\ConTeXtC\kern-.0333emon\-\kern-.0667em\TeX\kern-.0333emt
182 \newcommand\CplusplusC\plusplus
183 \newcommand\plusplus\raisebox.7ex$_++$
184 \def\CSS\acroCSS
185 \def\CTAN\acroCTAN
186 \def\DTD\acroDTD
187 \def\DVD\acroDVD
188 \def\DVI\acroDVI
189 \def\DVIPDFMx\acroDVIPDFM$x$
190 \def\DVItoVDUDVIto\kern-.12em VDU
191 \def\ECMA\acroECMA
192 \def\EPS\acroEPS
193 \DeclareRobustCommand\eTeX\ensuremath\varepsilon-\kern-.125em\TeX
194 \DeclareRobustCommand\ExTeX%
195 \ensuremath\textstyle\varepsilon_\kern-0.15em\calX\kern-.2em\TeX
196 \def\FAQ\acroFAQ
197 \def\FTP\acroFTP
198 \def\GhostscriptGhost\-script
199 \def\GNU\acroGNU
200 \def\GUI\acroGUI
201 \def\HawaiiHawai‘i
202 \def\HTML\acroHTML
203 \def\HTTP\acroHTTP
204 \def\IEEE\acroIEEE
205 \def\ISBN\acroISBN
206 \def\ISO\acroISO
207 \def\ISSN\acroISSN
208 \def\JPEG\acroJPEG
209 \def\JTeX\leavevmode\hbox\lower.5ex\hboxJ\kern-.18em\TeX
210 \def\JoT\textslThe Joy of \TeX
211 \def\LAMSTeXL\raise.42ex\hbox\kern-.3em
212 $\m@th$\fontsize\sf@size\z@\selectfont
213 $\m@th\mathcalA$%
214 \kern-.2em\lower.376ex\hbox$\m@th\mathcalM$\kern-.125em
215 $\m@th\mathcalS$-\TeX
216 % This code
217 % is hacked from its definition of \csLaTeX; it allows slants (for
218 % example) to propagate into the raised (small) ‘A’:
219 % \beginmacrocode
220 \newcommand\La%
221 L\kern-.36em
222 \setbox0\hboxT%
223 \vbox to\ht0\hbox$\m@th$%
224 \csname S@\f@size\endcsname
225 \fontsize\sf@size\z@
12
226 \math@fontsfalse\selectfont
227 A%
228 \vss%
229
We started with the intention that we wouldn’t redefine \LaTeX when we’rerunning under it, so as not to trample on an existing definition. However, thisproves less than satisfactory; a single logo may be OK for the run of documents, butfor TUGboat, we find that something noticeably better is necessary; see section3.11.
230 〈!latex〉\def\LaTeX\La\kern-.15em\TeX231 \def\LyXL\kern-.1667em\lower.25em\hboxY\kern-.125emX
232 \def\MacOSXMac\,\acroOS\,X
233 \def\MathMLMath\acroML
234 \def\Mc\setbox\TestBox=\hboxMM\vbox
235 to\ht\TestBox\hboxc\vfil % for Robert McGaffey
If we’re running under LATEX 2ε, we’re using (at least pro tem) Ulrik Vieth’smflogo.sty if it’s present. Otherwise, we’re using a short extract of Vieth’s stuff.Either way, we don’t need to specify \MF or \MP
236 \def\mf\textscMetafont
237 \def\MFB\textslThe \MF book
238 \let\TB@@mp\mp
239 \DeclareRobustCommand\mp\ifmmode\TB@@mp\else MetaPost\fi
240 %
241 % In order that the \csOMEGA command will switch to using the TS1
242 % variant of the capital Omega character if \texttttextcomp.sty is
243 % loaded, we define it in terms of the \cstextohm command. Note
244 % that this requires us to interpose a level of indirection, rather
245 % than to use \cslet\dots
246 %
247 % \beginmacrocode
248 \DeclareTextSymbol\textohmOT1’012
249 \DeclareTextSymbolDefault\textohmOT1
250 \newcommand\OMEGA\textohm
251 \DeclareRobustCommand\OCP\OMEGA\acroCP
252 \def\OOXML\acroOOXML
253 \DeclareRobustCommand\OTP\OMEGA\acroTP
254 \def\mtexT\kern-.1667em\lower.424ex\hbox\^E\kern-.125emX\@
Revised definition of \NTS based on that used by Phil Taylor.
255 \DeclareRobustCommand\NTS\ensuremath\mathcalN\mkern-4mu
256 \raisebox-0.5ex$\mathcalT$\mkern-2mu \mathcalS
257 \def\PasPascal
258 \def\pcMF\leavevmode\raise.5ex\hboxp\kern-.3\p@ cMF\@
259 \def\PCTeXPC\thinspace\TeX
260 \def\pcTeX\leavevmode\raise.5ex\hboxp\kern-.3\p@ c\TeX
261 \def\PDF\acroPDF
262 \def\PiCP\kern-.12em\lower.5ex\hboxI\kern-.075emC\@
263 \def\PiCTeX\PiC\kern-.11em\TeX
13
264 \def\PGF\acroPGF
265 \def\PHP\acroPHP
266 \def\plain\textttplain
267 \def\PNG\acroPNG
268 \def\POBoxP.\thinspace O.~Box
269 \def\PSPost\-Script
270 \def\PSTricks\acroPSTricks
271 \def\RTF\acroRTF
272 \def\SCSteering Committee
273 \def\SGML\acroSGML
274 \def\SliTeX\textrmS\kern-.06em\textscl\kern-.035emi%
275 \kern-.06em\TeX
276 \def\slMF\textsl\MF % should never be used
277 \def\SQL\acroSQL
278 \def\stTeX\textscst\kern-0.13em\TeX
279 \def\STIX\acroSTIX
280 \def\SVG\acroSVG
281 \def\TANGLE\textttTANGLE\@
282 \def\TB\textslThe \TeX book
283 \def\TIFF\acroTIFF
284 \def\TP\textsl\TeX: \textslThe Program
285 \DeclareRobustCommand\TeXT\kern-.1667em\lower.424ex\hboxE\kern-.125emX\@
286 \def\TeXhax\TeX hax
287 \def\TeXMaG\TeX M\kern-.1667em\lower.5ex\hboxA%
288 \kern-.2267emG\@
289 \def\TeXtures\textitTextures
290 \let\Textures=\TeXtures
291 \def\TeXXeT\TeX--\XeT
292 \def\TFM\acroTFM
293 \def\ThanhH\‘an~Th\^e\llap\raise 0.5ex\hbox\’~Th\‘anh
294 \def\TikZTi\em kZ
295 \def\ttn\textslTTN\@
296 \def\TTN\textsl\TeX and TUG News
297 \let\texttub\textsl % redefined in other situations
298 \def\TUB\texttubTUGboat
299 \def\TUG\TeX\ \UG
300 \def\tug\acroTUG
301 \def\UGUsers Group
302 \def\UNIX\acroUNIX
303 \def\UTF\acroUTF
304 \def\VAXV\kern-.12em A\kern-.1em X\@
305 \def\VnTeXV\kern-.03em n\kern-.02em \TeX
306 \def\VorTeXV\kern-2.7\p@\lower.5ex\hboxO\kern-1.4\p@ R\kern-2.6\p@\TeX
307 \def\XeTX\kern-.125em\lower.424ex\hboxE\kern-.1667emT\@
308 \def\XML\acroXML
309 \def\WEB\textttWEB\@
310 \def\WEAVE\textttWEAVE\@
311 \def\WYSIWYG\acroWYSIWYG
14
XeTEX requires reflecting the first E, hence we complain if the graphics pack-age is not present. (For plain documents, this can be loaded via Eplain.) Also,at Barbara’s suggestion, if the current font is slanted, we rotate by 180 instead ofreflecting so there is at least a chance to look ok. (The magic values here seemmore or less ok for cmsl and cmti.)
312 \def\tubreflect#1%
313 \@ifundefinedreflectbox%
314 \TBerrorA graphics package must be loaded for \string\XeTeX%
315 %
316 \ifdim \fontdimen1\font>0pt
317 \raise 1.75ex \hbox\kern.1em\rotatebox180#1\kern-.1em
318 \else
319 \reflectbox#1%
320 \fi
321 %
322
323 \def\tubhideheight#1\setbox0=\hbox#1\ht0=0pt \dp0=0pt \box0
324 \DeclareRobustCommand\Xe[1]\leavevmode
325 \tubhideheight\hboxX%
326 \setbox0=\hbox\TeX\setbox1=\hboxE%
327 \lower\dp0\hbox\raise\dp1\hbox\kern-.125em\tubreflectE%
328 \kern-.1667em #1
329 \def\XeTeX\Xe\TeX
330 \def\XeLaTeX\Xe\,\LaTeX
331 %
332 \def\XHTML\acroXHTML
333 \def\XSLT\acroXSLT
3.5 General typesetting rules
334 \newlinechar=‘\^^J
335 \normallineskiplimit=\p@
336 \clubpenalty=10000
337 \widowpenalty=10000
338 \def\NoParIndent\parindent=\z@
339 \newdimen\normalparindent
340 \normalparindent=20\p@
341 \def\NormalParIndent\global\parindent=\normalparindent
342 \NormalParIndent
343 \def\BlackBoxes\overfullrule=5\p@
344 \def\NoBlackBoxes\overfullrule=\z@
345 \def\newline\hskip\z@\@plus\pagewd\break
Hyphen control: first, we save the hyphenpenalties in \allowhyphens. Thisallows us to permit hyphens temporarily in things like \netaddresses, whichtypically occur when \raggedright is set, but which need to be allowed to breakat their artificial discretionaries.
346 \edef\allowhyphens\noexpand\hyphenpenalty\the\hyphenpenalty\relax
347 \noexpand\exhyphenpenalty\the\exhyphenpenalty\relax
15
348 \def\nohyphens\hyphenpenalty\@M\exhyphenpenalty\@M
3.6 Utility registers and definitions
We define a few scratch registers (and the like) for transient use; they’re all paired:an internal one (\T@st*) and an external one (\Test*).
Comment: Exercise for an idle day: find whether all these are necessary, orwhether we can use the LATEX temporaries for some (or all) of the \T@st*
ones.
Comment: (bb) All these registers are used in the plain version, tugboat.sty.
349 \newbox\T@stBox \newbox\TestBox
350 \newcount\T@stCount \newcount\TestCount
351 \newdimen\T@stDimen \newdimen\TestDimen
352 \newif\ifT@stIf \newif\ifTestIf
Control sequence existence test, stolen from TEXbook exercise 7.7 (note thatthis provides functionality that in some sense duplicates something within LATEX).
353 \def\ifundefined#1\expandafter\ifx\csname#1\endcsname\relax
LATEX conventions which are also useful here.
354 〈∗!latex〉355 \let\@@input\input
356 \def\iinput#1\@@input#1
357 \def\@inputcheck\if\@nextchar\bgroup
358 \expandafter\iinput\else\expandafter\@@input\fi
359 \def\input\futurelet\@nextchar\@inputcheck
360 〈/!latex〉
Smashes repeated from AMS-TEX; plain TEX implements only full \smash.
361 \newif\iftop@ \newif\ifbot@
362 \def\topsmash\top@true\bot@false\smash@
363 \def\botsmash\top@false\bot@true\smash@
364 \def\smash\top@true\bot@true\smash@
365 \def\smash@\relax\ifmmode\def\next\mathpalette\mathsm@sh%
366 \else\let\next\makesm@sh\fi \next
367 \def\finsm@sh\iftop@\ht\z@\z@\fi\ifbot@\dp\z@\z@\fi\box\z@
Vertical ‘laps’; cf. \llap and \rlap
368 \long\def\ulap#1\vbox to \z@\vss#1
369 \long\def\dlap#1\vbox to \z@#1\vss
And centered horizontal and vertical ‘laps’
370 \def\xlap#1\hb@xt@\z@\hss#1\hss
371 \long\def\ylap#1\vbox to \z@\vss#1\vss
372 \long\def\zlap#1\ylap\xlap#1
Avoid unwanted vertical glue when making up pages.
373 \def\basezero\baselineskip\z@skip \lineskip\z@skip
16
Empty rules for special occasions
374 \def\nullhrule\hrule \@height\z@ \@depth\z@ \@width\z@
375 \def\nullvrule\vrule \@height\z@ \@depth\z@ \@width\z@
Support ad-hoc strut construction.
376 \def\makestrut[#1;#2]\vrule \@height#1 \@depth#2 \@width\z@
Construct box for figure pasteup, etc.; height = #1, width = #2, rule thickness= #3
377 \def\drawoutlinebox[#1;#2;#3]\T@stDimen=#3
378 \vbox to#1\hrule \@height\T@stDimen \@depth\z@
379 \vss\hb@xt@#2\vrule \@width\T@stDimen
380 \hfil\makestrut[#1;\z@]%
381 \vrule \@width\T@stDimen\vss
382 \hrule \@height\T@stDimen \@depth\z@
Today’s date, to be printed on drafts. Based on TEXbook, p.406.
383 〈∗!latex〉384 \def\today\number\day\space \ifcase\month\or
385 Jan \or Feb \or Mar \or Apr \or May \or Jun \or
386 Jul \or Aug \or Sep \or Oct \or Nov \or Dec \fi
387 \number\year
388 〈/!latex〉Current time; this may be system dependent!
389 \newcount\hours
390 \newcount\minutes
391 \def\SetTime\hours=\time
392 \global\divide\hours by 60
393 \minutes=\hours
394 \multiply\minutes by 60
395 \advance\minutes by-\time
396 \global\multiply\minutes by-1
397 \SetTime
398 \def\now\number\hours:\ifnum\minutes<10 0\fi\number\minutes
399 \def\Now\today\ \now
400 \newif\ifPrelimDraft
401 \def\midrtitle\ifPrelimDraft \textslpreliminary draft, \Now\fi
3.7 Ragged right and friends
\raggedskip
\raggedstretch
\raggedparfill
\raggedspaces
Plain TEX’s definition of \raggedright doesn’t permit any stretch, and results intoo many overfull boxes. We also turn off hyphenation. This code lies somewherebetween that of Plain TEX and of LATEX.
402 \newdimen\raggedskip \raggedskip=\z@
403 \newdimen\raggedstretch \raggedstretch=5em % ems of font set now (10pt)
404 \newskip\raggedparfill \raggedparfill=\z@\@plus 1fil
405 \def\raggedspaces\spaceskip=.3333em \relax \xspaceskip=.5em \relax
17
\raggedright
\raggedleft
\raggedcenter
\normalspaces
Some applications may have to add stretch, in order to avoid all overfull boxes.We define the following uses of the above skips, etc.
406 \def\raggedright%
407 \nohyphens
408 \rightskip=\raggedskip\@plus\raggedstretch \raggedspaces
409 \parfillskip=\raggedparfill
410
411 \def\raggedleft%
412 \nohyphens
413 \leftskip=\raggedskip\@plus\raggedstretch \raggedspaces
414 \parfillskip=\z@skip
415
416 \def\raggedcenter%
417 \nohyphens
418 \leftskip=\raggedskip\@plus\raggedstretch
419 \rightskip=\leftskip \raggedspaces
420 \parindent=\z@ \parfillskip=\z@skip
421
422 \def\normalspaces\spaceskip\z@skip \xspaceskip\z@skip
Miscellaneous useful stuff. Note that LATEX 2ε defines a robust \,, but thatwe provide a new definition of ~ by redefining its robust underpinnings1 (basedon the version in AMS-TEX — the LATEX 2ε version has \leavevmode and doesn’tcare about surrounding space).
423 \DeclareRobustCommand\nobreakspace%
424 \unskip\nobreak\ \ignorespaces
Plain TEX defines \newbox as \outer. We solemnly preserve the following,which removes the \outerness; of course, we carefully exclude it from what wegenerate. . . (\outerness is a spawn of the devil, is it not? Barbara Beeton re-sponded to the previous sentence “\outerness has its place: it avoids registerbuildup, hence running out of memory”. In another context, David Carlisle re-marked that an error control mechanism that causes more confusing errors than itprevents is rather a poor one. This is perhaps not the place to conduct a seriousdebate. . . )
425 \def\boxcs#1\box\csname#1\endcsname
426 \def\setboxcs#1\setbox\csname#1\endcsname
427 \def\newboxcs#1\expandafter\newbox\csname#1\endcsname
428 \let\gobble\@gobble
429 \def\vellipsis%
430 \leavevmode\kern0.5em
431 \raise\p@\vbox\baselineskip6\p@\vskip7\p@\hbox.\hbox.\hbox.
432
433 \def\bull\vrule \@height 1ex \@width .8ex \@depth -.2ex
434 \def\cents\rm\raise.2ex\rlap\kern.05em$\scriptstyle/$c
435 \def\careof\leavevmode\hbox\raise.75ex\hboxc\kern-.15em
436 /\kern-.125em\smash\lower.3ex\hboxo \ignorespaces
1\DeclareRobustCommand doesn’t mind redefinition, fortunately
18
437 \def\Dag\raise .6ex\hbox$\scriptstyle\dagger$
438 %
439 \DeclareRobustCommand\sfrac[1]\@ifnextchar/\@sfrac#1%
440 \@sfrac#1/
441 \def\@sfrac#1/#2\leavevmode\kern.1em\raise.5ex
442 \hbox$\m@th\mbox\fontsize\sf@size\z@
443 \selectfont#1$\kern-.1em
444 /\kern-.15em\lower.25ex
445 \hbox$\m@th\mbox\fontsize\sf@size\z@
446 \selectfont#2$
447 %
448 % don’t stay bold in description items, bold italic is too weird.
449 \DeclareRobustCommand\meta[1]%
450 \ensuremath\langle%
451 \ifmmode \mbox\bgroup \fi % if in math
452 \it #1\/% no typewriter italics, please
453 \ifmmode \egroup \fi
454 \ensuremath\rangle%
455
456 %
457 \DeclareRobustCommand\cs[1]\texttt\char‘\\#1
458 %
459 \DeclareRobustCommand\env[1]%
460 \csbegin\texttt\char‘\#1\char‘\
461 %
462 \def\thinskip\hskip 0.16667em\relax
We play a merry game with dashes, providing all conceivable options of break-ability before and after.
463 \def\endash--
464 \def\emdash\endash-
465 \def\d@sh#1#2\unskip#1\thinskip#2\thinskip\ignorespaces
466 \def\dash\d@sh\nobreak\endash
467 \def\Dash\d@sh\nobreak\emdash
468 \def\ldash\d@sh\empty\hbox\endash\nobreak
469 \def\rdash\d@sh\nobreak\endash
470 \def\Ldash\d@sh\empty\hbox\emdash\nobreak
471 \def\Rdash\d@sh\nobreak\emdash
Hacks to permit automatic hyphenation after an actual hyphen, or after aslash.
472 \def\hyph-\penalty\z@\hskip\z@skip
473 \def\slash/\penalty\z@\hskip\z@skip
Adapted from comp.text.tex posting by Donald Arseneau, 26 May 93.LATEX 2ε-isation added by Robin Fairbairns. Destroys both the TestCounts.
474 \def\nth#1%
475 \def\reserved@a##1##2\@nil\ifcat##1n%
476 0%
477 \let\reserved@b\ensuremath
19
478 \else##1##2%
479 \let\reserved@b\relax
480 \fi%
481 \TestCount=\reserved@a#1\@nil\relax
482 \ifnum\TestCount <0 \multiply\TestCount by\m@ne \fi % subdue negatives
483 \T@stCount=\TestCount
484 \divide\T@stCount by 100 \multiply\T@stCount by 100
485 \advance\TestCount by-\T@stCount % n mod 100
486 \ifnum\TestCount >20 \T@stCount=\TestCount
487 \divide\T@stCount by 10 \multiply\T@stCount by 10
488 \advance\TestCount by-\T@stCount % n mod 10
489 \fi
490 \reserved@b#1%
491 \textsuperscript\ifcase\TestCount th% 0th
492 \or st% 1st
493 \or nd% 2nd
494 \or rd% 3rd
495 \else th% nth
496 \fi%
497
One more accent.
498 \def\r#1\accent"17 #1
3.8 Reviews
Format information on reviewed items for book review articles. For the LATEX 2εversion, we follow Fairbairns’ maxim, and define something that can even look likea LATEX macro. . .
499 \def\Review\@ifnextchar:\@Review\@Review:
500 \def\@Review:\@ifnextchar[%]
501 \@Rev%
502 \@Rev[Book review]
503 \def\@Rev[#1]#2\ignorespaces#1\unskip:\enspace\ignorespaces
504 \slshape\mdseries#2
505 \def\reviewitem\addvspace\BelowTitleSkip%
506 \def\revauth##1\def\therevauth##1, \ignorespaces%
507 \def\revtitle##1\def\therevtitle\slshape##1. \ignorespaces%
508 \def\revpubinfo##1\def\therevpubinfo##1.\ignorespaces%
509
510 \def\endreviewitem\noindent\interlinepenalty=10000
511 \therevauth\therevtitle\therevpubinfo\endgraf%
512 \vskip\medskipamount
513
514 \def\booktitle#1\slshape#1\/
20
3.9 Dates, volume and issue numbers, etc.
Dates and other items which identify the volume and issue. \issueseqno is asequential issue number starting from the first issue published; volume 15,4 has\issueseqno=45.
To use:\vol 19, 1.
\issdate March 1998.
\issueseqno=58
Starting with volume 23 (nominal 2002), we have \issyear instead of\issdate, because issues don’t have months any more.
For production, these are set in a separate file, tugboat.dates, which isissue-specific.
Comment: I would like to make the code read a file tugboat.dates in the cur-rent directory or its parent. This is easy except under ‘odd’ operating sys-tems (VMS is an example that springs to mind, RISCos may be even worse)whose syntax is out of the ordinary.
515 \newcount\issueseqno \issueseqno=-1
516 \def\v@lx\gdef\volxVolume~\volno~(\volyr), No.~\issno
517 \def\volyr
518 \def\volno
519 \def\vol #1,#2.\gdef\volno#1\unskip%
520 \gdef\issno\ignorespaces#2\unskip%
521 \setbox\TestBox=\hbox\volyr%
522 \ifdim \wd\TestBox > .2em \v@lx \fi
523 \def\issyear #1.\gdef\issdt#1\gdef\volyr#1%
524 \gdef\bigissdt#1%
525 \setbox\TestBox=\hbox\volno%
526 \ifdim \wd\TestBox > .2em \v@lx \fi
527 \def\issdate #1#2 #3.\gdef\issdt#1#2 #3\gdef\volyr#3%
528 \gdef\bigissdt#1\smc\uppercase#2 #3%
529 \setbox\TestBox=\hbox\volno%
530 \ifdim \wd\TestBox > .2em \v@lx \fi
531 \vol 0, 0.
532 \issdate Thermidor, 2060.
(The curious should know that Thermidor was one of the French revolutionarymonth names. . . )
For LATEX use, define a version of the issue declaration that can take or leavethe old plain syntax
533 〈!latex〉\def\tubissue#1(#2)%534 〈∗latex〉535 \def\tubissue#1\@ifnextchar(%)
536 \@tubissue@b#1
537 \@tubissue@a#1
538 \def\@tubissue@b#1(#2)\@tubissue@a#1#2
539 \def\@tubissue@a#1#2%
540 〈/latex〉541 \TUB~#1, no.~#2
21
TUGboat conventions include the sequential 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
542 \def\infil@\jobname
543 \def\Input #1 \ifnum\issueseqno<0
544 \def\infil@#1%
545 \else
546 \def\infil@tb\number\issueseqno#1
547 \fi
548 \edef\jobname\infil@\@readFLN
549 \@@input \infil@\relax
550 \if@RMKopen
551 \immediate\closeout\@TBremarkfile\@RMKopenfalse
552 \fi
553
\TBremarks are things that need to be drawn to the attention of the ed-itors; the conscientious author will include such things in the article file. Bydefault, remarks are suppressed, but their appearance may be enabled by the\TBEnableRemarks command, which can be included in the configuration fileltugboat.cfg (or ltugproc.cfg, if that’s what we’re at).
554 \newif\if@RMKopen \@RMKopenfalse
555 \newwrite\@TBremarkfile
556 \def\@TBremark#1%
557 \if@RMKopen
558 \else
559 \@RMKopentrue\immediate\openout\@TBremarkfile=\[email protected]
560 \fi
561 \toks@=#1%
562 \immediate\write\@TBremarkfile^^J\the\toks@%
563 \immediate\write16^^JTBremark:: \the\toks@^^J%
564
We initialise \TBremark to ignore its argument (this used to involve a\TBremarkOFF which was cunningly defined exactly the same as \gobble)
565 \let\TBremark=\gobble
\TBEnableRemarks simply involves setting \TBremark to use the functional\@TBremark defined above.
566 \def\TBEnableRemarks\let\TBremark\@TBremark
For marking locations in articles that pertain to remarks in another file ofeditorial comments
567 \def\TUBedit#1
For using different filenames in the production process than those suppliedby authors
568 \def\TUBfilename#1#2\expandafter\def\csname file@@#1\endcsname#2
569 \newread\@altfilenames
22
570 \def\@readFLN\immediate\openin\@altfilenames=\jobname.fln
571 \ifeof\@altfilenames\let\@result\relax\else
572 \def\@result\@@input\jobname.fln \fi
573 \immediate\closein\@altfilenames
574 \@result
575 \@readFLN
576 \everyjob=\expandafter\the\everyjob\@readFLN
577 \InputIfFileExists\jobname.fln%
578 \TBInfoReading alternative file file \jobname.fln
The following needs to work entirely in TEX’s mouth
579 \def\@tubfilename#1\expandafter\ifx\csname file@@#1\endcsname\relax
580 #1\else\csname file@@#1\endcsname\fi
581 \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 fullyprocessed in the TUGboat run. \PageXref is used for ‘extra’ pages, where anitem is submitted as camera copy, and only running heads (at most) are run.
582 〈∗!latex〉583 \def\pagexrefON#1%
584 \write-1\def\expandafter\noexpand\csname#1\endcsname\number\pageno%
585 \write\ppoutfile%
586 \def\expandafter\noexpand\csname#1\endcsname\number\pageno%
587
588 \def\PageXrefON#1%
589 \immediate\write-1\def\expandafter
590 \noexpand\csname#1\endcsname\number\pageno%
591 \immediate\write\ppoutfile\def\expandafter
592 \noexpand\csname#1\endcsname\number\pageno
593 〈/!latex〉594 〈∗latex〉595 \def\pagexrefON#1%
596 \write-1\def\expandafter\noexpand\csname#1\endcsname\number\c@page%
597 \write\ppoutfile%
598 \def\expandafter\noexpand\csname#1\endcsname\number\c@page%
599
600 \def\PageXrefON#1%
601 \immediate\write-1\def\expandafter
602 \noexpand\csname#1\endcsname\number\c@page%
603 \immediate\write\ppoutfile\def\expandafter
604 \noexpand\csname#1\endcsname\number\c@page
605 〈/latex〉606 \def\pagexrefOFF#1
607 \let\pagexref=\pagexrefOFF
608 \def\PageXrefOFF#1
609 \let\PageXref=\PageXrefOFF
610 \def\xreftoON#1%
611 \ifundefined#1%
612 ???\TBremarkNeed cross reference for #1.%
23
613 \else\csname#1\endcsname\fi
614 \def\xreftoOFF#1???
615 \let\xrefto=\xreftoOFF
\TBdriver ‘marks code for use when articles are run together in a driverfile’. Since we don’t yet have a definition of that arrangement, we don’t have adefinition of \TBdriver. Its argument (which one presumes was intended as thecode for this unusual state) is just gobbled.
616 \let\TBdriver\gobble
Some hyphenation exceptions:
617 \hyphenationDel-a-ware Dijk-stra Duane Eijk-hout
618 Flor-i-da Free-BSD Ghost-script Ghost-view
619 Hara-lam-bous Jac-kow-ski Karls-ruhe
620 Mac-OS Ma-la-ya-lam Math-Sci-Net
621 Net-BSD Open-BSD Open-Office
622 Pfa-Edit Post-Script Rich-ard Skoup South-all
623 Vieth VM-ware Win-Edt
624 acro-nym ap-pen-dix asyn-chro-nous
625 bit-map bit-mapped bit-maps buf-fer buf-fers bool-ean
626 col-umns com-put-able com-put-abil-ity cus-tom-iz-able
627 data-base data-bases
628 de-allo-cate de-allo-cates de-allo-cated de-allo-ca-tion
629 de-riv-a-tive de-riv-a-tives de-riv-a-ble der-i-va-tion
630 es-sence
631 fall-ing
632 half-way
633 in-fra-struc-ture input-enc
634 key-note
635 long-est
636 ma-gyar man-u-script man-u-scripts mne-mon-ic mne-mon-ics
637 mono-space mono-spaced
638 name-space name-spaces
639 off-line over-view
640 pal-ettes par-a-digm par-a-dig-mat-ic par-a-digms
641 pipe-line pipe-lines
642 plug-in plug-ins pres-ent-ly pro-gram-mable
643 re-allo-cate re-allo-cates re-allo-cated
644 set-ups se-vere-ly spell-ing spell-ings stand-alone strong-est
645 sub-ex-pres-sion syn-chro-ni-city syn-chro-nous
646 text-height text-length text-width
647 time-stamp time-stamped
648 vis-ual vis-ual-ly
649 which-ever white-space white-spaces wide-spread widget wrap-around
650
651 〈!latex〉\restorecat\@652 〈/common〉653 〈∗classtail〉654 \PrelimDrafttrue
24
3.10 Page dimensions, glue, penalties etc
655 \textheight 54pc
656 \textwidth 39pc
657 \columnsep 1.5pc
658 \columnwidth 18.75pc
659 \parindent \normalparindent
660 \parskip \z@ % \@plus\p@
661 \leftmargini 2em
662 \leftmarginv .5em
663 \leftmarginvi .5em
664 \oddsidemargin \z@
665 \evensidemargin \z@
666 \topmargin -2.5pc
667 \headheight 12\p@
668 \headsep 20\p@
669 \marginparwidth 48\p@
670 \marginparsep 10\p@
671 \partopsep=\z@
672 \topsep=3\p@\@plus\p@\@minus\p@
673 \parsep=3\p@\@plus\p@\@minus\p@
674 \itemsep=\parsep
675 \twocolumn
676 \newdimen\pagewd \pagewd=39pc
677 \newdimen\trimwd \trimwd=\pagewd
678 \newdimen\trimlgt \trimlgt=11in
679 \newdimen\headmargin \headmargin=3.5pc
In LATEX 2ε, twoside option is forced on when article.cls is loaded.
3.11 Messing about with the LATEX logo
Barbara Beeton’s pleas for LATEX logos that look right in any font shape provokedme to generate the following stuff that is configurable.
Here’s the command for the user to define hir own new version. The argu-ments are font family, series and shape, and then the two kern values used inplacing the raised ‘A’ of LATEX.
680 \newcommand\DeclareLaTeXLogo[5]\expandafter\def
681 \csname @LaTeX@#1/#2/#3\endcsname#4#5
The default values are as used in the source of LATEX itself:
682 \def\@[email protected]
More are defined in the initial version, for bold CM sans (which is used as\SecTitleFont), and CM italic medium and bold, and Bitstream Charter (whichNelson Beebe likes to use):
683 \DeclareLaTeXLogocmssbxn.3.15
684 \DeclareLaTeXLogocmrmit.3.27
685 \DeclareLaTeXLogocmrbxit.3.27
686 \DeclareLaTeXLogobchmn.2.08
687 \DeclareLaTeXLogobchmit.2.08
25
Redefine \LaTeX to choose the parameters for the current font, or to use thedefault value otherwise:
688 \DeclareRobustCommand\LaTeX\expandafter\let\expandafter\reserved@a
689 \csname @LaTeX@\f@family/\f@series/\f@shape\endcsname
690 \ifx\reserved@a\relax\let\reserved@a\@LaTeX@default\fi
691 \expandafter\@LaTeX\reserved@a
Here’s the body of what was originally \LaTeX, pulled out with its rootsdripping onto the smoking ruin of original LATEX, and then bits stuck in on theside.
\@LaTeX@default provides parameters as one finds in the original; other ver-sions are added as needed.
692 \newcommand\@LaTeX[2]L\kern-#1em
693 \sbox\z@ T%
694 \vbox to\ht0\hbox$\m@th$%
695 \csname S@\f@size\endcsname
696 \fontsize\sf@size\z@
697 \math@fontsfalse\selectfont
698 A%
699 \vss%
700 %
701 \kern-#2em%
702 \TeX
3.12 Authors, contributors, addresses, signatures
An article may have several authors (of course), so we permit an \author commandfor each of them. The names are then stored in a set of \csnames called \author1,\author2, . . . Similarly, there are several \address<n> and \netaddress<n> and\PersonalURL<n> commands set up for each article.
Comment: I would like to make provision for several authors at the same address,but (short of preempting the * marker, which it would be nice to retain so asto preserve compatibility with the plain style) I’m not sure how one wouldsignal it.
703 \def\theauthor#1\csname theauthor#1\endcsname
704 \def\theaddress#1\csname theaddress#1\endcsname
705 \def\thenetaddress#1\csname thenetaddress#1\endcsname
706 \def\thePersonalURL#1\csname thePersonalURL#1\endcsname
The standard way of listing authors is to iterate from 1 to \count@ and topick the author names as we go.
707 〈!latex〉\newcount\@tempcnta708 \def\@defaultauthorlist%
709 \@getauthorlist\@firstofone
710
26
\@getauthorlist processes the author list, passing every bit of stuff thatneeds to be typeset to the macro specified as its argument.
711 \def\@getauthorlist#1%
712 \count@\authornumber
713 \advance\count@ by -2
714 \@tempcnta0
Loop to output the first n−2 of the n authors (the loop does nothing if thereare two or fewer authors)
715 \loop
716 \ifnum\count@>0
717 \advance\@tempcnta by \@ne
718 #1\ignorespaces\theauthor\number\@tempcnta\unskip, %
719 \advance\count@ by \m@ne
720 \repeat
721 \count@\authornumber
722 \advance\count@ by -\@tempcnta
723 \ifnum\authornumber>0
If there are two or more authors, we output the penultimate author’s namehere, followed by ‘and’
724 \ifnum\count@>1
725 \count@\authornumber
726 \advance\count@ by \m@ne
727 #1\ignorespaces\theauthor\number\count@\unskip\ and %
728 \fi
Finally (if there were any authors at all) output the last author’s name:
729 #1\ignorespaces\theauthor\number\authornumber\unskip
730 \fi
731
Signature blocks. The author can (in principle) define a different sort ofsignature block using \signature, though this could well cause the editorial groupto have collective kittens (unless it had been discussed in advance. . . )
732 \def\signature#1\def\@signature#1
733 \def\@signature\@defaultsignature
\@defaultsignature loops through all the authors, outputting the detailswe have about that author, or (if we’re in a sub-article) outputs the contributor’sname and closes the group opened by \contributor. It is (as its name implies)the default body for \makesignature
734 \def\@defaultsignature%
735 \let\thanks\@gobble
736 \ifnum\authornumber<0
if \authornumber< 0, we are in a contributor’s section
737 \medskip
738 \frenchspacing
27
739 \signaturemark
740 \theauthor\number\authornumber\\
741 \theaddress\number\authornumber\\
742 \allowhyphens
743 \thenetaddress\number\authornumber\\
744 \thePersonalURL\number\authornumber\\
745 \else
\authornumber≥ 0, so we are in the body of an ordinary article
746 \count@=0
747 \loop
748 \ifnum\count@<\authornumber
749 \medskip
750 \advance\count@ by \@ne
751 \signaturemark
752 \theauthor\number\count@\\
753 \theaddress\number\count@\\
754 %
755 \allowhyphens
756 \thenetaddress\number\count@\\
757 \thePersonalURL\number\count@\\
758 %
759 \repeat
760 \fi
761 %
762
763 \newdimen\signaturewidth \signaturewidth=12pc
The optional argument to \makesignature is useful in some circumstances (e.g.,multi-contributor articles)
764 \newcommand\makesignature[1][\medskipamount]%
check the value the user has put in \signaturewidth: it may be at most1.5pc short of \columnwidth
765 \@tempdima\signaturewidth
766 \advance\@tempdima 1.5pc
767 \ifdim \@tempdima>\columnwidth
768 \signaturewidth \columnwidth
769 \advance\signaturewidth -1.5pc
770 \fi
771 \par
772 \penalty9000
773 \vspace#1%
774 \rightline%
775 \vbox\hsize\signaturewidth \ninepoint \raggedright
776 \parindent \z@ \everypar=\hangindent 1pc
777 \parskip \z@skip
778 \def\|\unskip\hfil\break%
779 \def\\\endgraf%
780 \def\phone\rm Phone:
781 \rm\@signature%
28
782 %
783 \ifnum\authornumber<0 \endgroup\fi
784
785 \def\signaturemark\leavevmode\llap$\diamond$\enspace
The code previously defined the following:
\makeactive\@
\gdef\signatureat\makeactive\@\def@\char"40\discretionary
\makeactive\%
\gdef\signaturepercent\makeactive\%\def%\char"25\discretionary
However, they were never used within the class (or within ltugproc.cls).They have therefore been deleted; the identically defined \netaddrat and\netaddrpercent may be used in the unlikely event that they’re needed else-where.
Now all the awful machinery of author definitions. \authornumber recordsthe number of authors we have recorded to date.
786 \newcount\authornumber
787 \authornumber=0
\author ‘allocates’ another author name (by bumping \authornumber) andalso sets up the address and netaddress for this author to produce a warning andto prevent oddities if they’re invoked. This last assumes that invocation will bein the context of \signature (ltugboat.cls) or \maketitle (ltugproc.cls);in both cases, invocation is followed by a line break (tabular line break \\ inltugproc, \endgraf in \makesignature in ltugboat).
788 \def\author%
789 \global\advance\authornumber\@ne
790 \TB@author
791
\contributor is for a small part of a multiple-part article; it begins a group thatwill be ended in \makesignature
792 \def\contributor%
793 \begingroup
794 \authornumber\m@ne
795 \TB@author
796
Both ‘types’ of author fall through here to set up the author name and toinitialise author-related things. \EDITORno* commands allow the editor to recordthat there’s good reason for an address or netaddress not to be there (the person-alURL is optional anyway).
797 \def\TB@author#1%
798 \expandafter\def\csname theauthor\number\authornumber\endcsname
799 \ignorespaces#1\unskip%
800 \expandafter\def\csname theaddress\number\authornumber\endcsname
29
801 \TBWarningNLAddress for #1\space missing\@gobble%
802 \expandafter\def\csname thenetaddress\number\authornumber\endcsname
803 \TBWarningNLNet address for #1\space missing\@gobble%
804 \expandafter\let\csname thePersonalURL\number\authornumber\endcsname
805 \@gobble
806
807 \def\EDITORnoaddress%
808 \expandafter\let\csname theaddress\number\authornumber\endcsname
809 \@gobble
810
811 \def\EDITORnonetaddress%
812 \expandafter\let\csname thenetaddress\number\authornumber\endcsname
813 \@gobble
814
\address simply copies its argument into the \theaddress<n> for this au-thor.
815 \def\address#1%
816 \expandafter\def\csname theaddress\number\authornumber\endcsname
817 \leavevmode\ignorespaces#1\unskip
\network is for use within the optional argument of \netaddress; it definesthe name of the network the user is on.
Comment: I think this is a fantasy, since everyone (in practice, nowadays) quotesan internet address. In principle, there are people who will quote X.400
addresses (but they’re few and far between) and I have (during 1995!) seen anaddress with an UUCP bang-path component on comp.text.tex, but really !
818 \def\network#1\def\@network#1:
\netaddress begins a group, executes an optional argument (which shouldnot, presumably, contain global commands) and then relays to \@relay@netaddresswith both @ and % made active (so that they can be discretionary points in the ad-dress). If we’re using LATEX 2ε, we use the default-argument form of \newcommand;otherwise we write it out in all its horribleness.
819 \newcommand\netaddress[1][\relax]%
820 \begingroup
821 \def\@network%
Unfortunately, because of the catcode hackery, we have still to do one stageof relaying within our own code, even if we’re using LATEX 2ε.
822 #1\@sanitize\makespace\ \makeactive\@
823 \makeactive\.\makeactive\%\@relay@netaddress%
\@relay@netaddress finishes the job. It sets \thenetaddress for this authorto contain the network name followed by the address. As a result of our kerfuffleabove, @ and % are active at the point we’re entered. We ensure they’re activewhen \thenetaddress gets expanded, too. (WOT?!)
824 \def\@relay@netaddress#1%
30
825 \ProtectNetChars
826 \expandafter\protected@xdef
827 \csname thenetaddress\number\authornumber\endcsname
828 \protect\leavevmode\textrm\@network%
829 \protect\NetAddrChars\net
830 \ignorespaces#1\unskip%
831 \endgroup
832
\personalURL is in essence the same as \netaddress, apart from (1) the lackof the eccentric optional argument, and (2) the activation of ‘/’.
For general URLs, url.sty (with or without hyperref) suffices and is recom-mended.
833 \def\personalURL\begingroup
834 \@sanitize\makespace\ \makeactive\@
835 \makeactive\.\makeactive\%\makeactive\/\@personalURL%
836 \def\@personalURL#1%
837 \ProtectNetChars
838 \expandafter\protected@xdef
839 \csname thePersonalURL\number\authornumber\endcsname%
840 \protect\leavevmode
841 %
842 \protect\URLchars\net
843 \ignorespaces#1\unskip
844 %
845 %
846 \endgroup
847
Define the activation mechanism for ‘@’, ‘%’, ‘.’ and ‘/’, for use in the above.Note that, since the code has ‘%’ active, we have ‘*’ as a comment character, whichhas a tendency to make things look peculiar. . .
848 %
849 \makecomment\*
850 \makeactive\@
851 \gdef\netaddrat\makeactive\@*
852 \def@\discretionary\char"40\char"40
853 \makeactive\%
854 \gdef\netaddrpercent\makeactive\%*
855 \def%\discretionary\char"25\char"25
856 \makeactive\.
857 \gdef\netaddrdot\makeactive\.*
858 \def.\discretionary\char"2E\char"2E
\NetAddrChars is what we use (we’re constrained to retain the old interfaceto this stuff, but it is clunky. . . ). Since URLs are a new idea, we are at libertynot to define a separate \netaddrslash command, and we only have \URLchars.
859 \gdef\NetAddrChars\netaddrat \netaddrpercent \netaddrdot
860 \makeactive\/
31
861 \gdef\URLchars*
862 \NetAddrChars
863 \makeactive\/*
864 \def/\discretionary\char"2F\char"2F
\ProtectNetChars includes protecting ‘/’, since this does no harm in thecase of net addresses (where it’s not going to be active) and we thereby gain bynot having yet another csname.
865 \gdef\ProtectNetChars*
866 \def@\protect@*
867 \def%\protect%*
868 \def.\protect.*
869 \def/\protect/*
870
871
LATEX 2ε (in its wisdom) suppresses \DeclareOldFontCommand when in com-patibility mode, so that in that circumstance we need to use a declaration copiedfrom latex209.def rather than the way we would normally do the thing (usingthe command LATEX 2ε defines for the job).
872 \if@compatibility
873 \DeclareRobustCommand\net\normalfont\ttfamily\mathgroup\symtypewriter
874 \else
875 \DeclareOldFontCommand\net\ttfamily\upshape\mdseries\mathtt
876 \fi
877 \def\authorlist#1\def\@author#1
878 \def\@author\@defaultauthorlist
For the online re-publication (as of 2009) by Mathematical Sciences Publishershttp://mathscipub.org), lots and lots of metadata is needed, much of it redun-dant with things we already do. They are flexible enough to allow us to specify itin any reasonable way, so let’s make one command \mspmetavar which takes twoarguments. Example: \mspmetavarvolumenumber30. For our purposes, it isjust a no-op.
\mspmetavar
879 \def\mspmetavar#1#2
3.13 Article title
\if@articletitle
\maketitle
\@r@maketitle
\maketitle takes an optional “*”; if present, the operation is not defining thetitle of a paper, merely that of a “business” section (such as the participants ata meeting) that has no credited author or other title. In this case, the commandflushes out the latest \sectitle (or whatever) but does nothing else.
Provide machinery to skip extra space, even one or more full columns, abovethe top of an article to leave space to paste up a previous article that has finishedon the same page. This is a fall back to accommodate the fact that multiplearticles cannot yet be run together easily with LATEX 2ε.
32
880 \newif\if@articletitle
881 \def\maketitle\@ifstar
882 \@articletitlefalse\@r@maketitle%
883 \@articletitletrue\@r@maketitle%
884
885 \def\@r@maketitle\par
886 \ifdim\PreTitleDrop > \z@
887 \loop
888 \ifdim \PreTitleDrop > \textheight
889 \vbox\vfil\eject
890 \advance\PreTitleDrop by -\textheight
891 \repeat
892 \vbox to \PreTitleDrop
893 \global\PreTitleDrop=\z@
894 \fi
895 \begingroup
896 \setcounterfootnote0
897 \def\thefootnote\fnsymbolfootnote
898 \@maketitle
899 \@thanks
900 \endgroup
901 \setcounterfootnote0
902 \gdef\@thanks
903
\title
\TB@title
We redefine the \title command, so as to set the \rhTitle command at the sametime. While we’re at it, we redefine it to have optional arguments for use as ‘short’versions, thus obviating the need for users to use the \shortTitle command.
904 \def\rhTitle% avoid error if no author or title
905 \renewcommand\title\@dblarg\TB@title
906 \def\TB@title[#1]#2\gdef\@title#2%
907 \bgroup
908 \let\thanks\@gobble
909 \def\\\unskip\space\ignorespaces%
910 \protected@xdef\rhTitle#1%
911 \egroup
912
\shortTitle
\ifshortAuthor
\shortAuthor
The \rh* commands are versions to be used in the running head of the article.Normally, they are the same things as the author and title of the article, but in thecase that there are confusions therein, the text should provide substitutes, usingthe \short* commands.
913 \def\shortTitle #1\def\rhTitle#1
914 \newif\ifshortAuthor
915 \def\shortAuthor #1\def\rhAuthor#1\shortAuthortrue
33
3.14 Section titles
The following macros are used to set the large TUGboat section heads (e.g. “Gen-eral Delivery”, “Fonts”, etc.)
Define the distance between articles which are run together:
916 \def\secsep\vskip 5\baselineskip
Note that \stbaselineskip is used in the definition of \sectitlefont, inLATEX 2ε, so that it has (at least) to be defined before \sectitlefont is used (wedo the whole job).
917 \newdimen\stbaselineskip \stbaselineskip=18\p@
918 \newdimen\stfontheight
919 \settoheight\stfontheight\sectitlefont O
Declaring section titles; the conditional \ifSecTitle records the occurenceof a \sectitle command. If (when) a subsequent \maketitle occurs, the sectiontitle box will get flushed out; as a result of this, one could in principle have a set of\sectitle commands in a semi-fixed steering file, and inclusions of files insertedonly as and when papers have appeared. Only the last \sectitle will actuallybe executed.
920 \newif\ifSecTitle
921 \SecTitlefalse
922 \newif\ifWideSecTitle
923 \newcommand\sectitle%
924 \SecTitletrue
925 \@ifstar
926 \WideSecTitletrue\def\s@ctitle%
927 \WideSecTitlefalse\def\s@ctitle%
928
\PreTitleDrop records the amount of column-space we need to eject beforewe start any given paper. It gets zeroed after that ejection has happened.
929 \newdimen\PreTitleDrop \PreTitleDrop=\z@
The other parameters used in \@sectitle; I don’t think there’s the slightestrequirement for them to be registers (since they’re constant values, AFAIK), butconverting them to macros would remove the essentially useless functionality ofbeing able to change them using assignment, which I’m not about to struggle withjust now...
\AboveTitleSkip and \BelowTitleSkip are what you’ld expect; \strulethicknessis the value to use for \fboxrule when setting the title.
930 \newskip\AboveTitleSkip \AboveTitleSkip=12\p@
931 \newskip\BelowTitleSkip \BelowTitleSkip=8\p@
932 \newdimen\strulethickness \strulethickness=.6\p@
\@sectitle actually generates the section title (in a rather generous box).It gets called from \maketitle under conditional \ifSecTitle; by the time
34
\@sectitle takes control, we already have \SecTitlefalse. This implemen-tation uses LATEX’s \framebox command, on the grounds that one doesn’t keep adog and bark for oneself. . .
933 \def\@sectitle #1%
934 \par
935 \penalty-1000
If we’re setting a wide title, the stuff will be at the top of a page (let alonea column) but inside a box, so that the separator won’t be discardable: so don’tcreate the separator in this case.
936 \ifWideSecTitle\else\secsep\fi
937 %
938 \fboxrule\strulethickness
939 \fboxsep\z@
940 \noindent\framebox[\hsize]%
941 \vbox%
942 \raggedcenter
943 \let\\\@sectitle@newline
944 \sectitlefont
945 \makestrut[2\stfontheight;\z@]%
946 #1%
947 \makestrut[\z@;\stfontheight]\endgraf
948 %
949 %
950 %
951 \nobreak
952 \vskip\baselineskip
953
\@sectitle@newline For use inside \sectitle as \\. Works similarly to \\ in the “real world” — usesan optional argument
954 \newcommand\@sectitle@newline[1][\z@]%
955 \ifdim#1>\z@
956 \makestrut[\z@;#1]%
957 \fi
958 \unskip\break
959
We need to trigger the making of a section title in some cases where we don’thave a section title proper (for example, in material taken over from TTN).
960 \def\@makesectitle\ifSecTitle
961 \global\SecTitlefalse
962 \ifWideSecTitle
963 \twocolumn[\@sectitle\s@ctitle]%
964 \global\WideSecTitlefalse
965 \else
966 \@sectitle\s@ctitle%
967 \fi
968 \else
35
969 \vskip\AboveTitleSkip
970 \kern\topskip
971 \hrule \@height\z@ \@depth\z@ \@width 10\p@
972 \kern-\topskip
973 \kern-\strulethickness
974 \hrule \@height\strulethickness \@depth\z@
975 \kern\medskipamount
976 \nobreak
977 \fi
978
\@maketitle Finally, the body of \maketitle itself.
979 \def\@maketitle%
980 \@makesectitle
981 \if@articletitle%
982 \nohyphens \interlinepenalty\@M
983 \setbox0=\hbox%
984 \let\thanks\@gobble
985 \let\\=\quad
986 \let\and=\quad
987 \ignorespaces\@author%
988 %
989 \noindent\bf\raggedright\ignorespaces\@title\endgraf
990 %
991 \ifdim \wd0 < 5\p@ % omit if author is null
992 \else
Since we have \BelowTitleSkip + 4pt = \baselineskip, we say:
993 \nobreak \vskip 4\p@
994 %
995 \leftskip=\normalparindent
996 \raggedright
997 \def\and\unskip\\%
998 \noindent\@author\endgraf
999 %
1000 \fi
1001 \nobreak
1002 \vskip\BelowTitleSkip
1003 \fi%
1004 \global\@afterindentfalse
1005 \aftergroup\@afterheading
1006
Dedications are ragged right, in italics.
1007 \newenvironmentdedication%
1008 \raggedright\noindent\itshape\ignorespaces%
1009 \endgraf\medskip
The abstract and longabstract environments both use \section*.
1010 \renewenvironmentabstract%
36
1011 %
1012 \beginSafeSection%
1013 \section*Abstract%
1014 %
1015 \endSafeSection
1016 \newenvironmentlongabstract%
1017 %
1018 \beginSafeSection%
1019 \section*Abstract%
1020 \bgroup\small
1021 %
1022 %
1023 \endgraf\egroup
1024 \endSafeSection%
1025 \vspace.25\baselineskip
1026 \begincenter
1027 $--*--$
1028 \endcenter
1029 \vspace.5\baselineskip
3.15 Section headings
Redefine style of section headings to match plain TUGboat. Negative beforeskipsuppresses following parindent. (So negate the stretch and shrink too).
These macros are called \*head in the plain styles.Relaying via \TB@startsection detects inappropriate use of \section*. Of
course, if (when) we use it, we need to avoid that relaying; this can be done by\letting \TB@startsection to \TB@safe@startsection, within a group.
First the version for use in the default case, when class option numbersec isin effect.
1030 \if@numbersec
1031 \def\section\TB@startsectionsection%
1032 1%
1033 \z@
1034 -8\p@ \@plus-2\p@ \@minus-2\p@%
1035 4\p@%
1036 \normalsize\bf\raggedright\hyphenpenalty=\@M
1037 \def\subsection\TB@startsectionsubsection%
1038 2%
1039 \z@
1040 -8\p@ \@plus-2\p@ \@minus-2\p@%
1041 4\p@%
1042 \normalsize\bf\raggedright\hyphenpenalty=\@M
1043 \def\subsubsection\TB@startsectionsubsubsection%
1044 3%
1045 \z@
1046 -8\p@ \@plus-2\p@ \@minus-2\p@%
1047 4\p@%
37
1048 \normalsize\bf\raggedright\hyphenpenalty=\@M
1049 \def\paragraph\TB@startsectionparagraph%
1050 4%
1051 \z@
1052 4\p@ \@plus1\p@ \@minus1\p@%
1053 -1em%
1054 \normalsize\bf
Now the version if class option nonumber is in effect, i.e., if \if@numbersecis false.
1055 \else
1056 \setcountersecnumdepth0
1057 \def\section\TB@nolimelabel
1058 \TB@startsectionsection%
1059 1%
1060 \z@
1061 -8\p@ \@plus-2\p@ \@minus-2\p@%
1062 4\p@%
1063 \normalsize\bf\raggedright\hyphenpenalty=\@M
1064 \def\subsection\TB@nolimelabel
1065 \TB@startsectionsubsection%
1066 2%
1067 \z@
1068 -8\p@ \@plus-2\p@ \@minus-2\p@%
1069 -0.5em\@plus-\fontdimen3\font%
1070 \normalsize\bf\raggedright\hyphenpenalty=\@M
1071 \def\subsubsection\TB@nolimelabel
1072 \TB@startsectionsubsubsection%
1073 3%
1074 \parindent
1075 -8\p@ \@plus-2\p@ \@minus-2\p@%
1076 -0.5em\@plus-\fontdimen3\font%
1077 \normalsize\bf\raggedright\hyphenpenalty=\@M
1078 \fi
\TB@startsection traps * versions of sectioning commands, if numberingisn’t in effect. Its argument is the complete set of \@startsection arguments.
1079 \if@numbersec
1080 \def\TB@startsection#1\@startsection#1%
1081 \else
1082 \def\TB@startsection#1%
1083 \@ifstar
1084 \TBWarning*-form of \expandafter\string\csname\@firstofsix#1%
1085 \endcsname\space
1086 \MessageBreak
1087 conflicts with nonumber class option%
1088 \@startsection#1%
1089 \@startsection#1%
1090
1091 \fi
38
1092 \def\@firstofsix#1#2#3#4#5#6#1
\TB@safe@startsection is to be used where \section* (etc.) appear inplaces where the request is OK (because it’s built in to some macro we don’tfiddle with).
1093 \def\TB@safe@startsection#1\@startsection#1
The SafeSection environment allows use of *-forms of sectioning environ-ments. It’s not documented for the general public: it’s intended as an editor’sfacility.
1094 \newenvironmentSafeSection%
1095 \let\TB@startsection\TB@safe@startsection%
1096
And now for the exciting sectioning commands that LATEX defines but wedon’t have a definition for (whatever else, we don’t want Lamport’s originals,which come out ‘like the blare of a bugle in a lullaby’2).
The three inappropriate ones are subparagraph (indistinguishable from para-graph), and chapter and part. The last seemed almost to be defined in an earlyversion of these macros, since there was a definition of \l@part. I’ve not got downto where that came from (or why). If class option nonumber is in effect, we alsosuppress \paragraph, since it has no parallel in the plain style.
1097 \if@numbersec
1098 \def\subparagraph\TB@nosection\subparagraph\paragraph
1099 \else
1100 \def\paragraph\TB@nosection\paragraph\subsubsection
1101 \def\subparagraph\TB@nosection\subparagraph\subsubsection
1102 \fi
1103 \def\chapter\TB@nosection\chapter\section
1104 \def\part\TB@nosection\part\section
1105 \def\TB@nosection#1#2\TBWarningclass does not support \string#1,
1106 \string#2\space used instead#2
\l@<sectioning-name> is for table of contents (of an article).We define new macros to allow easily changing the font used for toc entries
(for TUGboat, we usually want roman, not bold), and the space between entries.Nelson Beebe’s articles are almost the only ones that ever have toc’s.
1107 \def\TBtocsectionfont\normalfont
1108 \newskip\TBtocsectionspace \TBtocsectionspace=1.0em\@plus\p@
Don’t ask me (RF) why \l@part is there; I commented it out because Icouldn’t understand why it had been left there for me. To be finally deleted in afuture release of these macros. . .
1109 %\def\l@part#1#2\addpenalty\@secpenalty%
1110 % \addvspace2.25em\@plus\p@%
1111 % \begingroup
1112 % \@tempdima 3em \parindent\z@ \rightskip\z@ \parfillskip\z@
2Thurber, The Wonderful O
39
1113 % \large \bf \leavevmode #1\hfil \hbox to\@pnumwidth\hss #2\par
1114 % \nobreak
1115 % \endgroup
1116 %
1117 \def\l@section#1#2\addpenalty\@secpenalty%
1118 \addvspace\TBtocsectionspace%
1119 \@tempdima 1.5em
1120 \begingroup
1121 \parindent\z@ \rightskip\z@ % article style makes \rightskip > 0
1122 \parfillskip\z@
1123 \TBtocsectionfont
1124 \leavevmode\advance\leftskip\@tempdima\hskip-\leftskip#1\nobreak\hfil
1125 \nobreak\hb@xt@\@pnumwidth\hss #2\par
1126 \endgroup
3.16 Appendices
Appendices (which are really just another sort of section heading) raise a problem:if the sections are unnumbered, we plainly need to restore the section numbering,which in turn allows labelling of section numbers again (\TBnolimelabel happensbefore the \refstepcounter, so its effects get lost . . . what a clever piece of designthat was). So here we go:
1127 \renewcommand\appendix\par
1128 \renewcommand\thesection\@Alph\c@section%
1129 \setcountersection0%
1130 \if@numbersec
1131 \else
1132 \setcountersecnumdepth1%
1133 \fi
Now: is this the start of an appendix environment? This can be detected bylooking at \@currenvir; if we are, we need to relay to \@appendix@env to pickup the optional argument.
1134 \def\@tempaappendix
1135 \ifx\@tempa\@currenvir
1136 \expandafter\@appendix@env
1137 \fi
1138
Here we deal with \beginappendix[〈app-name〉]1139 \newcommand\app@prefix@section
1140 \newcommand\@appendix@env[1][Appendix]%
1141 \renewcommand\@seccntformat[1]\csname app@prefix@##1\endcsname
1142 \csname the##1\endcsname\quad%
1143 \renewcommand\app@prefix@section#1 %
1144
Ending an appendix environment is pretty trivial. . .
1145 \let\endappendix\relax
40
3.17 References
If the sections aren’t numbered, the natural tendency of the author to cross-reference (which, after all, is one of the things LATEX is for ever being advertisedas being good at) can cause headaches for the editor. (Yes it can; believe me . . .there’s always one.)
The following command is used by each of the sectioning commands to makea following \ref command bloop at the author. Even if the author then ignoresthe complaint, the poor old editor may find the offending \label rather moreeasily.
(Note that macro name is to be read as “noli me label” (I don’t know themediæval Latin for ‘label’).
Comment To come (perhaps): detection of the act of labelling, and an analogueof \ifG@refundefined for this sort of label
1146 \def\TB@nolimelabel%
1147 \def\@currentlabel%
1148 \protect\TBWarning%
1149 Invalid reference to numbered label on page \thepage
1150 \MessageBreak made%
1151 %
1152 \textbf?!?%
1153 %
1154
3.18 Title references
This is a first cut at a mecahnism for referencing by the title of a section; itemploys the delightfully simple idea Sebastian Rahtz has in the nameref package(which is part of hyperref). As it stands, it lacks some of the bells and whistlesof the original, but they could be added; this is merely proof-of-concept.
The name label comes from the moveable bit of the section argument; wesubvert the \@sect and \@ssect commands (the latter deals with starred sectioncommands) to grab the relevant argument.
1155 \let\TB@@sect\@sect
1156 \let\TB@@ssect\@ssect
1157 \def\@sect#1#2#3#4#5#6[#7]#8%
1158 \def\@currentlabelname#7%
1159 \TB@@sect#1#2#3#4#5#6[#7]#8%
1160
1161 \def\@ssect#1#2#3#4#5%
1162 \def\@currentlabelname#5%
1163 \TB@@ssect#1#2#3#4#5%
1164
The \newlabel command that gets written to the .aux file needs to be rede-fined to have three components to its argument:
1165 \def\label#1%
41
1166 \@bsphack
1167 \let\label\@gobble
1168 \let\index\@gobble
1169 \if@filesw
1170 \protected@write\@auxout%
1171 \string\newlabel#1%
1172 \@currentlabel\thepage\@currentlabelname%
1173 %
1174 \fi
1175 \@esphack
1176 %
1177
Of course, in the case of a sufficiently mad author, there will be no sectioningcommands, so we need to
1178 \let\@currentlabelname\@empty
References are pretty straightforward, but need three extra utility commands(analagous to the \@firstof..., etc., defined in the kernel).
1179 \DeclareRobustCommand\ref[1]\expandafter\@setref
1180 \csname r@#1\endcsname\@firstofthree#1
1181 \DeclareRobustCommand\pageref[1]\expandafter\@setref
1182 \csname r@#1\endcsname\@secondofthree#1
1183 \DeclareRobustCommand\nameref[1]\expandafter\@setref
1184 \csname r@#1\endcsname\@thirdofthree#1
1185 \long\def\@firstofthree#1#2#3#1
1186 \long\def\@secondofthree#1#2#3#2
1187 \long\def\@thirdofthree#1#2#3#3
3.19 Float captions
By analogy with what we’ve just done to section titles and the like, we now do ourbest to discourage hyphenation within captions. We also typeset them in \small.
First, let’s define a dimension by which we will indent full-page captions.We’ll also use this to indent abstracts in proceedings style.
\tubfullpageindent
1188 \newdimen\tubfullpageindent \tubfullpageindent=4.875pc
Ok, here is the \@makecaption.
1189 \long\def\@makecaption#1#2%
1190 \vskip\abovecaptionskip
1191 \sbox\@tempboxa\small #1: #2% try in an hbox
1192 \ifdim \wd\@tempboxa > \hsize
1193 % caption doesn’t fit on one line; set as a paragraph.
1194 \small \raggedright \hyphenpenalty=\@M \parindent=1em
1195 % indent full-width captions figure*, but not single-column figure.
1196 \ifdim\hsize = \textwidth
1197 \leftskip=\tubfullpageindent \rightskip=\leftskip
1198 \advance\rightskip by 0pt plus2em % increase acceptable raggedness
42
1199 \fi
1200 \noindent #1: #2\par%
1201 \else
1202 % fits on one line; use the hbox, centered. Do not reset its glue.
1203 \global\@minipagefalse
1204 \hb@xt@\hsize\hfil\box\@tempboxa\hfil%
1205 \fi
1206 \vskip\belowcaptionskip
Also use \small for the caption labels, and put the label itself (e.g., “Figure1”) in bold.
1207 \def\fnum@figure\small \bf \figurename\nobreakspace\thefigure
1208 \def\fnum@table\small \bf \tablename\nobreakspace\thetable
Let’s reduce the default space above captions a bit, and give it some flexibility.The default is 10pt, which seems too much.
1209 \setlength\abovecaptionskip6pt plus1pt minus1pt
3.20 Size changing commands
Apart from their ‘normal’ effects, these commands change the glue around dis-plays.
1210 \renewcommand\normalsize%
1211 \@setfontsize\normalsize\@xpt\@xiipt
1212 \abovedisplayskip=3\p@\@plus 3\p@\@minus\p@
1213 \belowdisplayskip=\abovedisplayskip
1214 \abovedisplayshortskip=\z@\@plus 3\p@
1215 \belowdisplayshortskip=\p@\@plus 3\p@\@minus\p@
1216
1217
1218 \renewcommand\small%
1219 \@setfontsize\small\@ixpt11%
1220 \abovedisplayskip=2.5\p@\@plus 2.5\p@\@minus\p@
1221 \belowdisplayskip=\abovedisplayskip
1222 \abovedisplayshortskip=\z@\@plus 2\p@
1223 \belowdisplayshortskip=\p@\@plus 2\p@\@minus\p@
1224
1225 \renewcommand\footnotesize%
1226 \@setfontsize\footnotesize\@viiipt9.5%
1227 \abovedisplayskip=3\p@\@plus 3\p@\@minus\p@
1228 \belowdisplayskip=\abovedisplayskip
1229 \abovedisplayshortskip=\z@\@plus 3\p@
1230 \belowdisplayshortskip=\p@\@plus 3\p@\@minus\p@
1231
3.21 Lists and other text inclusions
1232 \def\@listi%
1233 \leftmargin\leftmargini\parsep=\p@\@plus\p@\@minus\p@
43
1234 \itemsep=\parsep
1235 \listparindent=1em
1236
1237
1238 \def\@listii%
1239 \leftmargin\leftmarginii
1240 \labelwidth=\leftmarginii \advance\labelwidth-\labelsep
1241 \topsep=2\p@\@plus\p@\@minus\p@
1242 \parsep=\p@\@plus\p@\@minus\p@
1243 \itemsep=\parsep
1244 \listparindent=1em
1245
1246
1247 \def\@listiii%
1248 \leftmargin=\leftmarginiii
1249 \labelwidth=\leftmarginiii \advance\labelwidth-\labelsep
1250 \topsep=\p@\@plus\p@\@minus\p@
1251 \parsep=\z@
1252 \itemsep=\topsep
1253 \listparindent=1em
1254
1255 \def\quote\list\rightmargin.5\leftmargin\item[]
From Dominik Wujastyk’s font article. First paragraph of a quotation willnot be indented, and right margin is decreased for narrow columns.
1256 \renewcommand\quotation\list\listparindent 1.5em
1257 \rightmargin.5\leftmargin\parsep \z@\@plus\p@\item[]
The compactitemize environment, without space between the items.1258 \newenvironmentcompactitemize%
1259 \beginitemize%
1260 \setlength\itemsep0pt%
1261 \setlength\parskip0pt%
1262 \setlength\parsep 0pt%
1263 %
1264 \enditemize
3.22 Some fun with verbatim
The plain TUGboat style allows [optional] arguments to its \verbatim com-mand. This will allow the author (or editor) to specify a range of exciting features;we would definitely like the numbered verbatim style for code (that facility is re-served for a future version of this package), and the present little bit of codeimposes the \ruled option on the built-in verbatim environment. (Note that wedon’t yet deal with verbatim∗, which is in itself an option to the plain original.)
We start by saving various bits and bobs whose operation we’re going tosubvert.
1265 %\let\@TB@verbatim\@verbatim
1266 \let\@TBverbatim\verbatim
1267 \let\@TBendverbatim\endverbatim
44
Impose an optional argument on the environment.We start the macro with \par to avoid a common error: if the optional
argument is \small, and the document has no blank line before the verbatim block,we don’t want that preceding paragraph to be set with \small’s line spacing.
(\obeylines added to prevent the \futurelet from propagating into thebody of the verbatim, thus causing lines that start with odd characters (like # oreven \) to behave peculiarly.)
1268 \def\verbatim\par\obeylines
1269 \futurelet\reserved@a\@switch@sqbverbatim
1270 \def\@switch@sqbverbatim\ifx\reserved@a[%]
1271 \expandafter\@sqbverbatim\else
1272 \def\reserved@b\@sqbverbatim[]\expandafter\reserved@b\fi
1273 \def\@sqbverbatim[#1]%
The optional argument consists entirely of functions that modify the appear-ance of the environment. Following the plain style, we define the functions wecan execute in the optional argument here.
The command \ruled tells us that there should be rules above and below theverbatim block.
1274 \def\ruled\let\if@ruled\iftrue%
Then we just execute the ones we’ve got, and relay to a (hacked) copy of thebuilt-in environment.
1275 #1\@TBverbatim
The built-in environment itself relays to \@verbatim, which we’ve subvertedto impose our views on appearance.
1276 \def\@verbatim%
First, we deal with \ruled:
1277 \if@ruled\trivlist\item\hrule\kern5\p@\nobreak\fi
Now, the code out of the original verbatim environment:
1278 \trivlist \item\relax
1279 \if@minipage\else\vskip\parskip\fi
1280 \leftskip\@totalleftmargin\rightskip\z@skip
1281 \parindent\z@\parfillskip\@flushglue\parskip\z@skip
1282 \@@par
1283 \@tempswafalse
1284 \def\par%
1285 \if@tempswa
1286 \leavevmode \null \@@par\penalty\interlinepenalty
1287 \else
1288 \@tempswatrue
1289 \ifhmode\@@par\penalty\interlinepenalty\fi
1290 \fi%
1291 \obeylines \verbatim@font \@noligs
1292 \let\do\@makeother \dospecials
1293 \everypar \expandafter\the\everypar \unpenalty%
1294 %
45
To end the environment, we do everything in reverse order: relay via the copywe made of \endverbatim, and then finish off the option changes (again \ruled
only, so far).
1295 \def\endverbatim\@TBendverbatim
1296 \if@ruled\kern5\p@\hrule\endtrivlist\fi
\enablemetacode simply typesets3 something that looks (verbatim) like:<meta-text>
as:〈meta-text〉
1297 \makeactive<
1298 \gdef<#1>\reset@font\ensuremath\langle%
1299 \textit#1%
1300 \ensuremath\rangle
1301
Define the \if used by the \ruled option:
1302 \let\if@ruled\iffalse
Finally, if microtype is loaded, we want it to be deactivated in verbatimblocks. It often manipulates a leading \ rather too much.
1303 \AtBeginDocument%
1304 \@ifpackageloadedmicrotype
1305 \g@addto@macro\@verbatim\microtypesetupactivate=false
1306
3.23 Bibliography
This is more or less copied verbatim from Glenn Paulley’s chicago.sty ([email protected]). It produces an author-year citation style bibliography,using output from the BibTEX style file based on that by Patrick Daly. It needsextra macros beyond those in standard LATEX to function properly. The form ofthe bibitem entries is:
\bibitem[\protect\citeauthoryearJones, Baker, and Smith
Jones et al.1990key...
The available citation commands are:\citekey → (Jones, Baker, and Smith 1990)\citeAkey → (Jones, Baker, and Smith)\citeNPkey → Jones, Baker, and Smith 1990\citeANPkey → Jones, Baker, and Smith\citeNkey → Jones, Baker, and Smith (1990)\shortcite → (Jones et al. 1990)\citeyear → (1990)\citeyearNP → 1990
3Or will simply typeset, when we get around to implementation proper
46
First of all (after checking that we’re to use Harvard citation at all), make acopy of LATEX’s default citation mechanism.
1307 \if@Harvardcite
1308 \let\@internalcite\cite
Normal forms.
1309 \def\cite\def\@citeseppen-1000%
1310 \def\@cite##1##2(##1\if@tempswa , ##2\fi)%
1311 \def\citeauthoryear##1##2##3##1, ##3\@internalcite
1312 \def\citeNP\def\@citeseppen-1000%
1313 \def\@cite##1##2##1\if@tempswa , ##2\fi%
1314 \def\citeauthoryear##1##2##3##1, ##3\@internalcite
1315 \def\citeN\def\@citeseppen-1000%
1316 \def\@cite##1##2##1\if@tempswa , ##2)\else)\fi%
1317 \def\citeauthoryear##1##2##3##1 (##3\@citedata
1318 \def\citeA\def\@citeseppen-1000%
1319 \def\@cite##1##2(##1\if@tempswa , ##2\fi)%
1320 \def\citeauthoryear##1##2##3##1\@internalcite
1321 \def\citeANP\def\@citeseppen-1000%
1322 \def\@cite##1##2##1\if@tempswa , ##2\fi%
1323 \def\citeauthoryear##1##2##3##1\@internalcite
Abbreviated forms (using et al.)
1324 \def\shortcite\def\@citeseppen-1000%
1325 \def\@cite##1##2(##1\if@tempswa , ##2\fi)%
1326 \def\citeauthoryear##1##2##3##2, ##3\@internalcite
1327 \def\shortciteNP\def\@citeseppen-1000%
1328 \def\@cite##1##2##1\if@tempswa , ##2\fi%
1329 \def\citeauthoryear##1##2##3##2, ##3\@internalcite
1330 \def\shortciteN\def\@citeseppen-1000%
1331 \def\@cite##1##2##1\if@tempswa , ##2)\else)\fi%
1332 \def\citeauthoryear##1##2##3##2 (##3\@citedata
1333 \def\shortciteA\def\@citeseppen-1000%
1334 \def\@cite##1##2(##1\if@tempswa , ##2\fi)%
1335 \def\citeauthoryear##1##2##3##2\@internalcite
1336 \def\shortciteANP\def\@citeseppen-1000%
1337 \def\@cite##1##2##1\if@tempswa , ##2\fi%
1338 \def\citeauthoryear##1##2##3##2\@internalcite
When just the year is needed:
1339 \def\citeyear\def\@citeseppen-1000%
1340 \def\@cite##1##2(##1\if@tempswa , ##2\fi)%
1341 \def\citeauthoryear##1##2##3##3\@citedata
1342 \def\citeyearNP\def\@citeseppen-1000%
1343 \def\@cite##1##2##1\if@tempswa , ##2\fi%
1344 \def\citeauthoryear##1##2##3##3\@citedata
Place commas in-between citations in the same \citeyear, \citeyearNP, \citeN,or \shortciteN command. Use something like \citeNref1,ref2,ref3 and\citeNref4 for a list.
47
1345 \def\@citedata%
1346 \@ifnextchar [\@tempswatrue\@citedatax%
1347 \@tempswafalse\@citedatax[]%
1348
1349
1350 \def\@citedatax[#1]#2%
1351 \if@filesw\immediate\write\@auxout\string\citation#2\fi%
1352 \def\@citea\@cite\@for\@citeb:=#2\do%
1353 \@citea\def\@citea, \@ifundefined% by Young
1354 b@\@citeb\bf ?%
1355 \@warningCitation ‘\@citeb’ on page \thepage \space undefined%
1356 \csname b@\@citeb\endcsname#1%
Don’t box citations, separate with ; and a space; Make the penalty between cita-tions negative: a good place to break.
1357 \def\@citex[#1]#2%
1358 \if@filesw\immediate\write\@auxout\string\citation#2\fi%
1359 \def\@citea\@cite\@for\@citeb:=#2\do%
1360 \@citea\def\@citea; \@ifundefined% by Young
1361 b@\@citeb\bf ?%
1362 \@warningCitation ‘\@citeb’ on page \thepage \space undefined%
1363 \csname b@\@citeb\endcsname#1%
No labels in the bibliography.
1364 \def\@biblabel#1
Set length of hanging indentation for bibliography entries.
1365 \newlength\bibhang
1366 \setlength\bibhang2em
Indent second and subsequent lines of bibliographic entries. Stolen from open-bib.sty: \newblock is set to .
1367 \newdimen\bibindent
1368 \bibindent=1.5em
1369 \@ifundefinedrefname%
1370 \newcommand\refnameReferences%
1371 %
For safety’s sake, suppress the \TB@startsection warnings here. . .
1372 \def\thebibliography#1%
1373 \let\TB@startsection\TB@safe@startsection
1374 \section*\refname
1375 \@mkboth\uppercase\refname\uppercase\refname%
1376 \list[\arabicenumi]%
1377 \labelwidth\z@ \labelsep\z@
1378 \leftmargin\bibindent
1379 \itemindent -\bibindent
1380 \listparindent \itemindent
1381 \parsep \z@
1382 \usecounterenumi
1383 \def\newblock
48
1384 \BibJustification
1385 \sfcode‘\.=1000\relax
1386
etal
\bibentry
Other bibliography odds and ends.
1387 \def\etalet\,al.\@
1388 \def\bibentry%
1389 \smallskip
1390 \hangindent=\parindent
1391 \hangafter=1
1392 \noindent
1393 \sloppy
1394 \clubpenalty500 \widowpenalty500
1395 \frenchspacing
1396
\bibliography
\bibliographystyle
Changes made to accommodate TUB file naming conventions
1397 \def\bibliography#1%
1398 \if@filesw
1399 \immediate\write\@auxout\string\bibdata\@tubfilename#1%
1400 \fi
1401 \@input\jobname.bbl%
1402
1403 \def\bibliographystyle#1%
1404 \if@filesw
1405 \immediate\write\@auxout\string\bibstyle\@tubfilename#1%
1406 \fi
1407
\thebibliography
\TB@@thebibliography
If the user’s asked to use LATEX’s default citation mechanism (using the rawcite
option), we still need to play with \TB@startsection: this is a boring fact oflife. . .
We also patch \sloppy in case there’s a need for alternative justification ofthe body of the bibliography.
1408 \else
1409 \let\TB@@thebibliography\thebibliography
1410 \def\thebibliography%
1411 \let\TB@startsection\TB@safe@startsection
1412 \let\sloppy\BibJustification
1413 \TB@@thebibliography
1414 \fi
\BibJustification
\SetBibJustification
\TB@@sloppy
\BibJustification defines how the bibliography is to be justified. The Lamportdefault is simply “\sloppy”, but we regularly find some sort of ragged right settingis appropriate. (\BibJustification is nevertheless reset to its default value atthe start of a paper.)
1415 \let\TB@@sloppy\sloppy
1416 \let\BibJustification\TB@@sloppy
1417 \newcommand\SetBibJustification[1]%
49
1418 \renewcommand\BibJustification#1%
1419
1420 \ResetCommands\expandafter\the\ResetCommands
1421 \let\BibJustification\TB@@sloppy
1422
3.24 Registration marks
We no longer use these since Cadmus does not want them.
1423 \def\HorzR@gisterRule\vrule \@height 0.2\p@ \@depth\z@ \@width 0.5in
1424 \def\DownShortR@gisterRule\vrule \@height 0.2\p@ \@depth 1pc \@width 0.2\p@
1425 \def\UpShortR@gisterRule\vrule \@height 1pc \@depth\z@ \@width 0.2\p@
“T” marks centered on top and bottom edges of paper
1426 \def\ttopregister\dlap%
1427 \hb@xt@\trimwd\HorzR@gisterRule \hfil \HorzR@gisterRule
1428 \HorzR@gisterRule \hfil \HorzR@gisterRule%
1429 \hb@xt@\trimwd\hfil \DownShortR@gisterRule \hfil
1430 \def\tbotregister\ulap%
1431 \hb@xt@\trimwd\hfil \UpShortR@gisterRule \hfil%
1432 \hb@xt@\trimwd\HorzR@gisterRule \hfil \HorzR@gisterRule
1433 \HorzR@gisterRule \hfil \HorzR@gisterRule
1434 \def\topregister\ttopregister
1435 \def\botregister\tbotregister
3.25 Running heads
1436 \def \rtitlex\def\texttub##1\normalsize\textrm##1\TUB, \volx
1437 \def\PrelimDraftfooter%
1438 \dlap\kern\textheight\kern3pc
1439 \rlap\hb@xt@\pagewd\midrtitle\hfil\midrtitle
1440
registration marks; these are temporarily inserted in the running head1441 \def\MakeRegistrationMarks
1442 \def\UseTrimMarks%
1443 \def\MakeRegistrationMarks%
1444 \ulap\rlap%
1445 \vbox\dlap\vbox to\trimlgt\vfil\botregister%
1446 \topregister\vskip \headmargin \vskip 10\p@%
1447
1448 % put issue identification and page number in header.
1449 \def\@oddhead\MakeRegistrationMarks\PrelimDraftfooter
1450 \normalsize\csname normalshape\endcsname\rm
1451 \rtitlex\qquad\midrtitle \hfil \thepage
1452 \def\@evenhead\MakeRegistrationMarks\PrelimDraftfooter
1453 \normalsize\csname normalshape\endcsname\rm
1454 \thepage\hfil\midrtitle\qquad\rtitlex
1455
1456 % put title and author in footer.
50
1457 \def\@tubrunningfull%
1458 \def\@oddfoot\hfil\rhTitle
1459 \def\@evenfoot\@author\hfil
1460
1461
1462 \def\@tubrunninggetauthor#1#1
1463 \begingroup
1464 \let\thanks\@gobble
1465 \protected@xdef\rhAuthor\the\toks@##1%
1466 \endgroup
1467 %
1468
1469 % empty footer.
1470 \def\@tubrunningminimal%
1471 \def\@oddfoot\hfil
1472 \def\@evenfoot\hfil
1473
1474
1475 \def\ps@headings
1476 \pagestyleheadings
3.26 Output routine
Modified to alter \brokenpenalty across columns
Comment We’re playing with fire here: for example, \@outputdblcol haschanged in LATEX 2ε for 1995/06/01 (with the use of \hb@xt@). This timethere’s no semantic change, but. . .
1477 \def\@outputdblcol\if@firstcolumn \global\@firstcolumnfalse
1478 \global\setbox\@leftcolumn\box\@outputbox
1479 \global\brokenpenalty10000
1480 \else \global\@firstcolumntrue
1481 \global\brokenpenalty100
1482 \setbox\@outputbox\vbox\hb@xt@\textwidth\hb@xt@\columnwidth
1483 \box\@leftcolumn \hss\hfil \vrule \@width\columnseprule\hfil
1484 \hb@xt@\columnwidth\box\@outputbox \hss\@combinedblfloats
1485 \@outputpage \begingroup \@dblfloatplacement \@startdblcolumn
1486 \@whilesw\if@fcolmade \fi\@outputpage\@startdblcolumn\endgroup
1487 \fi
3.27 Font-related definitions and machinery
These are mostly for compatibility with plain tugboat.sty
1488 \newif\ifFirstPar \FirstParfalse
1489 \def\smc\sc
1490 \def\ninepoint\small
1491 〈/classtail〉\SMC isn’t small caps — Barbara Beeton says she thinks of it as “big small
caps”. She says (modulo capitalisation of things. . . ):
51
For the things it’s used for, regular small caps are not appropriate —they’re too small. Real small caps are appropriate for author names(and are so used in continental bibliographies), section headings, run-ning heads, and, on occasion, words to which some emphasis is to begiven. \SMC was designed to be used for acronyms and all-caps abbre-viations, which look terrible in small caps, but nearly as bad in all capsin the regular text size. The principle of using “one size smaller” thanthe text size is similar to the design of caps in German — where theyare smaller relative to lowercase than are caps in fonts intended forEnglish, to improve the appearance of regular text in which caps areused at the heads of all nouns, not just at the beginnings of sentences.
We define this in terms of the memory of the size currently selected that’smaintained in \@currsize: if the user does something silly re. selecting fonts,we’ll get the wrong results. The following code is adapted from an old version ofrelsize.sty by Donald Arseneau and Matt Swift. (The order of examination of\@currsize is to get the commonest cases out of the way first.)
1492 〈∗common〉1493 \DeclareRobustCommand\SMC%
1494 \ifx\@currsize\normalsize\small\else
1495 \ifx\@currsize\small\footnotesize\else
1496 \ifx\@currsize\footnotesize\scriptsize\else
1497 \ifx\@currsize\large\normalsize\else
1498 \ifx\@currsize\Large\large\else
1499 \ifx\@currsize\LARGE\Large\else
1500 \ifx\@currsize\scriptsize\tiny\else
1501 \ifx\@currsize\tiny\tiny\else
1502 \ifx\@currsize\huge\LARGE\else
1503 \ifx\@currsize\Huge\huge\else
1504 \small\SMC@unknown@warning
1505 \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
1506
1507 \newcommand\SMC@unknown@warning\TBWarning\string\SMC: nonstandard
1508 text font size command -- using \string\small
1509 \newcommand\textSMC[1]\SMC #1
The \acro command uses \SMC as it was originally intended. Note that, sincemost of these things are uppercase-only names, it fiddles with the spacefactor afterinserting its text.
1510 \newcommand\acro[1]\textSMC#1\@
1511 〈/common〉
3.28 Miscellaneous definitions
\EdNote allows the editor to enter notes in the text of a paper. If the commandis given something that appears like an optional argument, the entire text of thenote is placed in square brackets. (Yes, it really is!)
1512 〈∗classtail〉
52
1513 \def\xEdNote\EdNoteFont Editor’s note:\enspace
1514 \def \EdNote\@ifnextchar[%]
1515 %
1516 \ifvmode
1517 \smallskip\noindent\let\@EdNote@\@EdNote@v
1518 \else
1519 \unskip\quad\def\@EdNote@\unskip\quad%
1520 \fi
1521 \@EdNote
1522 %
1523 \xEdNote
1524
1525 \long\def\@EdNote[#1]%
1526 [\thinspace\xEdNote\ignorespaces
1527 #1%
1528 \unskip\thinspace]%
1529 \@EdNote@
1530
1531 \def\@EdNote@v\par\smallskip
Macros for Mittelbach’s self-documenting style
1532 \def\SelfDocumenting%
1533 \setlength\textwidth31pc
1534 \onecolumn
1535 \parindent \z@
1536 \parskip 2\p@\@plus\p@\@minus\p@
1537 \oddsidemargin 8pc
1538 \evensidemargin 8pc
1539 \marginparwidth 8pc
1540 \toks@\expandafter\@oddhead%
1541 \xdef\@oddhead\hss\hb@xt@\pagewd\the\toks@%
1542 \toks@\expandafter\@evenhead%
1543 \xdef\@evenhead\hss\hb@xt@\pagewd\the\toks@%
1544 \def\ps@titlepage%
1545
1546 \def\ps@titlepage
1547
1548 \long\def\@makefntext#1\parindent 1em\noindent\hb@xt@2em%
1549 \llap\@makefnmark\null$\mskip5mu$#1
1550
1551 %% \long\def\@makefntext#1\parindent 1em
1552 %% \noindent
1553 %% \hb@xt@2em\hss\@makefnmark%
1554 %% \hskip0.27778\fontdimen6\textfont\z@\relax
1555 %% #1%
1556 %%
\creditfootnote
\supportfootnote
Sometimes we want the label “Editor’s Note:”, sometimes not.
1557 \def\creditfootnote\nomarkfootnote\xEdNote
1558 \def\supportfootnote\nomarkfootnote\relax
53
General macro \nomarkfootnote to make a footnote without a referencemark, etc. #1 is an extra command to insert, #2 the user’s text.
1559 \gdef\nomarkfootnote#1#2\begingroup
1560 \def\thefootnote%
1561 % no period, please, also no fnmark.
1562 \def\@makefntext##1##1%
1563 \footnotetext\noindent #1#2%
1564 \endgroup
1565
3.29 Initialization
If we’re going to use Harvard-style bibliographies, we set up the bibliography style:the user doesn’t get any choice.
1566 \if@Harvardcite
1567 \AtBeginDocument%
1568 \bibliographystyleltugbib%
1569
1570 \fi
1571 \authornumber\z@
1572 \let\@signature\@defaultsignature
1573 \InputIfFileExistsltugboat.cfg\TBInfoLoading ltugboat
1574 configuration information
1575 〈/classtail〉
4 LATEX 2ε Proceedings class
\@tugclass Make the code of ltugboat.cls (when we load it) say it’s really us:
1576 〈∗ltugproccls〉1577 \def\@tugclassltugproc
\if@proctw@column For the case where we’re preparing the preprints, we may not have been able toprepare submissions for typesetting in two columns. In this case, therefore, wemay need the option onecolumn, that will suppress the use of twocolumn settingwithin the article.
1578 \newif\if@proctw@column \@proctw@columntrue
1579 \DeclareOptiononecolumn\@proctw@columnfalse
\if@proc@sober
\if@proc@numerable
TUG’96 proceedings switched to more sober headings still; so the tug95 optionestablishes the original state. In the absence of any other guidance, we use the ’96for TUG’97 proceedings, but also allow numbering of sections.
1580 \newif\if@proc@sober
1581 \newif\if@proc@numerable
1582 \DeclareOptiontug95%
1583 \@proc@soberfalse
1584 \@proc@numerablefalse
54
1585
1586 \DeclareOptiontug96%
1587 \@proc@sobertrue
1588 \@proc@numerablefalse
1589
1590 \DeclareOptiontug97%
1591 \@proc@sobertrue
1592 \@proc@numerabletrue
1593
1594 \DeclareOptiontug2002%
1595 \@proc@sobertrue
1596 \@proc@numerabletrue
1597 \let\if@proc@numbersec\iftrue
1598 \PassOptionsToClassnumbersecltugboat%
1599
\if@proc@numbersec If we’re in a class that allows section numbering (the actual check occurs after\ProcessOptions, we can have the following:
1600 \DeclareOptionnumbersec\let\if@proc@numbersec\iftrue
1601 \PassOptionsToClassnumbersecltugboat%
1602
1603 \DeclareOptionnonumber\let\if@proc@numbersec\iffalse
1604 \PassOptionsToClassnonumberltugboat%
1605
\ifTB@title If we have a paper for which we want to create a detached title, with an editor’snote, and then set the paper separately, we use option notitle.
1606 \newif\ifTB@title
1607 \DeclareOptiontitle\TB@titletrue
1608 \DeclareOptionnotitle\TB@titlefalse
1609 \AtBeginDocument\stepcounterpage
There are these people who seem to think tugproc is an option as well as aclass. . .
1610 \DeclareOptiontugproc%
1611 \ClassWarning\@tugclassOption \CurrentOption\space ignored%
1612
All other options are simply passed to ltugboat. . .
1613 \DeclareOption*\PassOptionsToClass\CurrentOptionltugboat
If there’s a tugproc defaults file, input it now: it may tell us which year we’reto perform for. . . (Note: this code is millenium-proof. It’s not terribly classy foryears beyond 2069, but then I’m not going to be around then—this will be aninteresting task for a future TEXie. . . )
1614 \InputIfFileExists\@tugclass.cfg\ClassInfoltugproc%
1615 Loading ltugproc configuration information
1616 \@ifundefinedTUGprocExtraOptions%
1617 \let\TUGprocExtraOptions\@empty%
1618 \edef\TUGprocExtraOptions,\TUGprocExtraOptions
55
\tugProcYear Now work out what year it is
1619 \@tempcnta\year
1620 \ifnum\@tempcnta<2000
1621 \divide\@tempcnta by100
1622 \multiply\@tempcnta by100
1623 \advance\@tempcnta-\year
1624 \@tempcnta-\@tempcnta
1625 \fi
And use that for calculating a year for us to use.
1626 \edef\@tempa\noexpand\providecommand\noexpand\tugProcYear
1627 \ifnum10>\@tempcnta0\fi\the\@tempcnta
1628 \@tempa
1629 \ClassInfoltugprocClass believes year is
1630 \expandafter\ifnum\tugProcYear<2000 19\fi\tugProcYear
1631 \@gobble
Check that this is a “sensible year” (one for which we have a class optiondefined). If not, make it a ‘suitable’ year, in particular, one that allows numberingsections.
1632 \expandafter\ifx\csname ds@tug\tugProcYear\endcsname\relax
1633 \def\tugProcYear2002\fi
Now execute the default ‘year’ option and get on with processing. Note thatthis command gets ignored if the configuration file specifies a silly year.
1634 \ExecuteOptionstug\tugProcYear,title\TUGprocExtraOptions
1635 \ProcessOptions
1636 \if@proc@numbersec
1637 \if@proc@numerable
1638 \else
1639 \ClassWarning\@tugclassThis year’s proceedings may not have
1640 numbered sections%
1641 \fi
1642 \fi
Call ltugboat, adding whichever section numbering option is appropriate
1643 \LoadClass[\if@proc@numbersec numbersec\else nonumber\fi]ltugboat
4.1 Proceedings titles
\maketitle
\ifTB@madetitle
There’s no provision for ‘section titles’ in proceedings issues, as there are in TUG-boat proper. Note the tedious LATEX bug-avoidance in the \@TB@test@document
macro.
1644 \def\maketitle%
1645 \begingroup
first, a bit of flim-flam to generate an initial value for \rhAuthor (unless theuser’s already given one with a \shortAuthor comand).
1646 \ifshortAuthor\else
56
1647 \global\let\rhAuthor\@empty
1648 \def\g@addto@rhAuthor##1%
1649 \begingroup
1650 \toks@\expandafter\rhAuthor%
1651 \let\thanks\@gobble
1652 \protected@xdef\rhAuthor\the\toks@##1%
1653 \endgroup
1654 %
1655 \@getauthorlist\g@addto@rhAuthor
1656 \fi
now, the real business of setting the title
1657 \ifTB@title
1658 \setcounterfootnote0%
1659 \renewcommand\thefootnote\@fnsymbol\c@footnote%
1660 \if@proctw@column
1661 \twocolumn[\@maketitle]%
1662 \else
1663 \onecolumn
1664 \global\@topnum\z@
1665 \@maketitle
1666 \fi
1667 \@thanks
1668 \thispagestyleTBproctitle
1669 \fi
1670 \endgroup
1671 \TB@madetitletrue
1672
1673 \newif\ifTB@madetitle \TB@madetitlefalse
\@TB@test@document \@TB@test@document checks to see, at entry to \maketitle, if we’ve had\begindocument. See LATEX bug report latex/2212, submitted by Robin Fair-bairns, for details.
1674 \def\@TB@test@document%
1675 \edef\@tempa\the\everypar
1676 \def \@tempb\@nodocument
1677 \ifx \@tempa\@tempb
1678 \@nodocument
1679 \fi
1680
\AUTHORfont
\TITLEfont
\addressfont
\netaddrfont
Define the fonts for titles and things
1681 \def\AUTHORfont \large\rmfamily\mdseries\upshape
1682 \def\TITLEfont \Large\rmfamily\mdseries\upshape
1683 \def\addressfont\small\rmfamily\mdseries\upshape
1684 \def\netaddrfont\small\ttfamily\mdseries\upshape
\aboveauthorskip
\belowauthorskip
\belowabstractskip
Some changeable skips to permit variability in page layout depending on the par-ticular paper’s page breaks.
57
1685 \newskip\aboveauthorskip \aboveauthorskip=18\p@ \@plus4\p@
1686 \newskip\belowauthorskip \belowauthorskip=\aboveauthorskip
1687 \newskip\belowabstractskip \belowabstractskip=14\p@ \@plus3\p@ \@minus2\p@
\@maketitle The body of \maketitle
1688 \def\@maketitle%
1689 \parskip\z@
1690 \frenchspacing
1691 \TITLEfont\raggedright\noindent\@title\par
1692 \count@=0
1693 \loop
1694 \ifnum\count@<\authornumber
1695 \vskip\aboveauthorskip
1696 \advance\count@\@ne
1697 \AUTHORfont\theauthor\number\count@\endgraf%
1698 \addressfont\theaddress\number\count@\endgraf
1699 %
1700 \allowhyphens
1701 \hangindent1.5pc
1702 \netaddrfont\thenetaddress\number\count@\endgraf
1703 \hangindent1.5pc
1704 \thePersonalURL\number\count@\endgraf
1705 %
1706 \repeat
1707 \vskip\belowauthorskip%
1708 \if@abstract
1709 \centerline\bfseries Abstract%
1710 \vskip.5\baselineskip\rmfamily
1711 \list\listparindent20\p@
1712 \itemindent\z@ \leftmargin\tubfullpageindent
1713 \rightmargin\leftmargin \parsep \z@\item[]\ignorespaces
1714 \the\abstract@toks
1715 \endlist\global\@ignoretrue
1716 \fi
1717 \vskip\belowabstractskip
1718 \global\@afterindentfalse\aftergroup\@afterheading
1719
abstract
\if@abstract
\abstract@toks
Save the contents of the abstract environment in the token register \[email protected] need to do this, as otherwise it may get ‘typeset’ (previously, it got put in abox) before \begindocument, and experiments prove that this means our shinynew \SMC doesn’t work in this situation.
If you need to understand the ins and outs of this code, look at the place Ilifted it from: tabularx.dtx (in the tools bundle). The whole thing pivots onhaving stored the name of the ‘abstract’ environment in \@abstract@
1720 \newtoks\abstract@toks \abstract@toks
1721 \let\if@abstract\iffalse
1722 \def\abstract%
58
we now warn unsuspecting users who provide an abstract environment afterthe \maketitle that would typeset it. . .
1723 \ifTB@madetitle
1724 \TBWarningabstract environment after \string\maketitle
1725 \fi
1726 \def\@abstract@abstract%
1727 \ifx\@currenvir\@abstract@
1728 \else
1729 \TBError\string\abstract\space is illegal:%
1730 \MessageBreak
1731 use \string\begin\@abstract@ instead%
1732 \@abstract@\space may only be used as an environment
1733 \fi
1734 \global\let\if@abstract\iftrue
1735 \ifnum0=‘\fi
1736 \@abstract@getbody
1737 \let\endabstract\relax
\@abstract@getbody gets chunks of the body (up to the next occurrence of\end) and appends them to \abstract@toks. It then uses \@abstract@findend
to detect whether this \end is followed by abstract
1738 \long\def\@abstract@getbody#1\end%
1739 \global\abstract@toks\expandafter\the\abstract@toks#1%
1740 \@abstract@findend
Here we’ve got to \end in the body of the abstract. \@abstract@findend
takes the ‘argument’ of the \end do its argument.
1741 \def\@abstract@findend#1%
1742 \def\@tempa#1%
If we’ve found an ‘end’ to match the ‘begin’ that we started with, we’re donewith gathering the abstract up; otherwise we stuff the end itself into the tokenregister and carry on.
1743 \ifx\@tempa\@abstract@
1744 \expandafter\@abstract@end
1745 \else
It’s not \endabstract — check that it’s not \enddocument either (whichsignifies that the author’s forgotten about ending the abstract)
1746 \def\@tempbdocument%
1747 \ifx\@tempa\@tempb
1748 \TBError\string\begin\@abstract@
1749 ended by \string\end\@tempb%
1750 You’ve forgotten \string\end\@abstract@
1751 \else
1752 \global\abstract@toks\expandafter\the\abstract@toks\end#1%
1753 \expandafter\expandafter\expandafter\@abstract@getbody
1754 \fi
1755 \fi
59
In our case, the action at the ‘proper’ \end is a lot simpler than what appearsin tabularx.dtx . . . don’t be surprised!
1756 \def\@abstract@end\ifnum0=‘\fi%
1757 \expandafter\end\expandafter\@abstract@
\makesignature \makesignature is improper in proceedings, so we replace it with a warning (anda no-op otherwise)
1758 \renewcommand\makesignature\TBWarning
1759 \string\makesignature\space is invalid in proceedings issues
\ps@TBproctitle
\ps@TBproc
\dopagecommands
\setpagecommands
\TB@definefeet
\pfoottext
\rfoottext
Now we define the running heads in terms of the \rh* commands.
1760 \def\ps@TBproctitle\let\@oddhead\MakeRegistrationMarks
1761 \let\@evenhead\MakeRegistrationMarks
1762 \TB@definefeet
1763
1764 \def\ps@TBproc%
1765 \def\@oddhead\MakeRegistrationMarks
1766 %
1767 \hfil
1768 \def\\\unskip\ \ignorespaces%
1769 \rmfamily\rhTitle
1770 %
1771 %
1772 \def\@evenhead\MakeRegistrationMarks
1773 %
1774 \def\\\unskip\ \ignorespaces%
1775 \rmfamily\rhAuthor
1776 \hfil
1777 %
1778 %
1779 \TB@definefeet
1780
1781
1782 \advance\footskip8\p@ % for deeper running feet
1783
1784 \def\dopagecommands\csname @@pagecommands\number\c@page\endcsname
1785 \def\setpagecommands#1#2\expandafter\def\csname @@pagecommands#1\endcsname
1786 #2
1787 \def\TB@definefeet%
1788 \def\@oddfoot\ifpreprint\pfoottext\hfil\Now\hfil\thepage
1789 \else\rfoottext\hfil\thepage\fi\dopagecommands%
1790 \def\@evenfoot\ifpreprint\thepage\hfil\Now\hfil\pfoottext
1791 \else\thepage\hfil\rfoottext\fi\dopagecommands%
1792
1793
1794 \def\pfoottext\smc Preprint:
1795 Proceedings of the \volyr Annual Meeting
1796 \def\rfoottext\normalfont\TUB, \volx\Dash
1797 Proceedings of the \volyr Annual Meeting
60
1798
1799 \pagestyleTBproc
4.2 Section divisions
Neither sections nor subsections are numbered by default in the proceedings style:note that this puts a degree of stress on authors’ natural tendency to referencesections, which is a matter that needs attention. The class option numberseconce again numbers the sections (and noticeably changes the layout).
1800 \if@proc@numbersec
1801 \else
1802 \setcountersecnumdepth0
1803 \fi
Otherwise, the \section command is pretty straightforward. However, the\subsection and \subsubsection are run-in, and we have to remember to havenegative stretch (and shrink if we should in future choose to have one) on the〈afterskip〉 parameter of \@startsection, since the whole skip is going to end upgetting negated. We use \TB@startsection to detect inappropriate forms.
1804 \if@proc@numbersec
1805 \else
1806 \if@proc@sober
1807 \def\section
1808 \TB@nolimelabel
1809 \TB@startsectionsection%
1810 1%
1811 \z@%
1812 -8\p@\@plus-2\p@\@minus-2\p@%
1813 6\p@%
1814 \normalsize\bfseries\raggedright
1815 \else
1816 \def\section
1817 \TB@nolimelabel
1818 \TB@startsectionsection%
1819 1%
1820 \z@%
1821 -8\p@\@plus-2\p@\@minus-2\p@%
1822 6\p@%
1823 \large\bfseries\raggedright
1824 \fi
1825 \def\subsection
1826 \TB@nolimelabel
1827 \TB@startsectionsubsection%
1828 2%
1829 \z@%
1830 6\p@\@plus 2\p@\@minus2\p@%
1831 -5\p@\@plus -\fontdimen3\the\font%
1832 \normalsize\bfseries
1833 \def\subsubsection
61
1834 \TB@nolimelabel
1835 \TB@startsectionsubsubsection%
1836 3%
1837 \parindent%
1838 \z@%
1839 -5\p@\@plus -\fontdimen3\the\font%
1840 \normalsize\bfseries
1841 \fi
1842 〈/ltugproccls〉
5 Plain TEX styles
1843 〈∗tugboatsty〉1844 % err...
1845 〈/tugboatsty〉1846 〈∗tugprocsty〉1847 % err...
1848 〈/tugprocsty〉
6 The LATEX 2ε compatibility-mode style files
1849 〈∗ltugboatsty〉1850 \@obsoletefileltugboat.clsltugboat.sty
1851 \LoadClassltugboat
1852 〈/ltugboatsty〉1853 〈∗ltugprocsty〉1854 \@obsoletefileltugproc.clsltugproc.sty
1855 \LoadClassltugproc
1856 〈/ltugprocsty〉
62