Compatibility mode for L^{A}TEX 2ε emulating L^{A}TEX 2.09

Alan Jeffrey and Frank Mittelbach

1995/12/27

1 Introduction

The file latex209.def is read in by L^{A}TEX 2ε whenever it finds a \documentstyle rather than \documentclass command at the beginning of the file. This indicates a L^{A}TEX 2.09 document, which should be processed in compatibility mode.

Any document which compiled under L^{A}TEX 2.09 should compile under compatibility mode, unless it uses low-level commands such as \tenrm.

2 The docstrip modules

The following modules are used in the implementation to direct docstrip in generating the external files:

driver  produce a documentation driver file
head  produce the beginning of latex209.def
tail  produce the end of latex209.def
article produce article.sty
book  produce book.sty
report produce report.sty
slides  produce slides.sty
letter  produce letter.sty
bezier  produce bezier.sty
fleqn  produce fleqn.sty
leqno  produce leqno.sty
openbib produce openbib.sty

Between the head and tail of latex209.def, the code for oldlfont.sty is in-

cluded, so L^{A}TEX 2.09 documents will automatically be run simulating the OFSS.

3 Driver

This section contains the driver for this documentation.

1 ⟨∗driver⟩

 2 \documentclass{ltxdoc}
 3 \DisableCrossrefs
 4 % \OnlyDescription
 5 \begin{document}
 6 \DocInput{latex209.dtx}
 7 \end{document}

8 ⟨/driver⟩

4 Beginning of latex209.def

This section describes the beginning of the file latex209.def.

9 ⟨∗head⟩

4.1 Identification

This file needs to be run with L^{A}TEX 2ε.

10 \NeedsTeXFormat{LaTeX2e}

Describe the file.

11 \ProvidesFile{latex209.def}[1996/05/21 v0.51 Standard LaTeX file]

Announce compatibility mode to the user.

12 \if@compatibility
13 \expandafter\endinput
14 \else
15 \typeout{Entering LaTeX 2.09 compatibility mode.}
16 \fi

4.2 Compatibility flag

\@compatibilitytrue L^{A}TEX 2ε has a flag \if@compatibility which can be used by document classes or packages to determine whether they are running in compatibility mode or not. This flag is set true by this file.

17 \@compatibilitytrue

4.3 Removing features

\usepackage \listfiles \ensuremath \lrbox \newcommand These L^{A}TEX 2ε commands are switched off in compatibility mode. This is done by saving the old definition, and redefining the command to call \@latex@e@error before executing the old version.

18 \def\@tempa#1#2{%
19 \expandafter\let\csname @@\string#1\endcsname#1%
20 \edef#1{%
21  \noexpand\@latex@e@error{\noexpand#2}%
22  \expandafter\noexpand\csname @@\string#1\endcsname
23 }%

25 \@tempa\usepackage\usepackage
26 \@tempa\listfiles\listfiles
27 \@tempa\ensuremath\ensuremath
28 \@tempa\lrbox{\begin{lrbox}}%
29 \@tempa\@xargdef{\newcommand{cmd}[args][def]}%

\@latex@e@error \@latex@e@error@ This error is produced if a user uses a L^{A}TEX 2ε command in compatibility mode. This is to encourage users to move over to using \documentclass as quickly as possible. During the preamble the error does nothing (so that packages can use L^{A}TEX 2ε commands) but it is redefined to be an error message at

\begin{document}.
30 \let\@latex@e@error\@gobble
31 \def\@latex@e@error@#1{%
32  \@latexerr{%
33  LaTeX2e command \string#1\space in LaTeX 2.09 document%
34  }{%
35  This is a LaTeX 2.09 document, but it contains
36  \string#1.^^J%
37  If you want to use the new features of LaTeX2e,
38  your document^^J%
39  should begin with \string\documentclass\space
40  rather than \string\documentstyle
41  }%

42 }

\@ifdefinable \@old@ifdefinable \@@ifdefinable \@latex@e@commands We trap the \@notdefinable error message to check to see if the command is a

L^{A}TEX 2ε command, in which case we allow the definition to happen. We keep a list of commands which are allowed to be redefined this way in \@latex@e@commands, and remove an entry each time it is defined.

43 \let\@old@ifdefinable\@ifdefinable
44 \long\def\@ifdefinable#1{%
45 \def\@tempa##1#1##2#1##3#1##4\@tempa{%
46  \def\@latex@e@commands{##1##2}%
47  ##3% ##3 will either be \iftrue or \iffalse
48  \expandafter\@firstofone
49  \else
50  \expandafter\@old@ifdefinable\expandafter#1%
51  \fi
52 }%
53 \expandafter\@tempa\@latex@e@commands#1\iftrue#1\iffalse#1\@tempa%

54 }

55 \let\@@ifdefinable\@ifdefinable
56 \def\@latex@e@commands{%
57 \usepackage\listfiles\ensuremath\LaTeXe\lrbox
58 \th\dh\ng\dj\TH\DH\NG\DJ\k\r\SS
59 \guillemotleft\guillemotright\guilsinglleft

60 \guilsinglright\quotedblbase\quotesinglbase

61 }

\@begin@tempboxa If we were to switch off the new \width, \height and \depth commands, this is how to do it. This isn’t done, since these commands may be used in packages.

\long\def\@begin@tempboxa#1#2{%
  \begingroup
    \setbox\@tempboxa#1{{#2}}}

4.4 Document class hook

\@documentclasshook This macro is called by each use of \documentclass. We define it to define \@normalsize and \normalsize if necessary, to input each unused option as a package, and to switch off the new L^{A}TEX 2ε commands. However, we leave on the commands \settoheight, \settowidth and the new options to \parbox and \minipage, since these are likely to be used in packages.

The intention of the strange \normalsize tests below is that after the

\documentstyle command has completed, if neither \normalsize nor \@normalsize

was defined by the main style or one of its ‘substyles’ or ‘options’, then \@normalsize will be undefined and \normalsize will generate an error saying it hasn’t been defined.

If the style defined either \normalsize or normalsize then these two commands will be \let equal to each other, with the definition given by the style file.

If the style defines both \normalsize and \@normalsize then those two definitions are kept.

62 \def\@documentclasshook{%
63 \RequirePackage\@unusedoptionlist
64 \let\@unusedoptionlist\@empty
65 \def\@tempa{\@normalsize}%
66 \ifx\normalsize\@tempa
67  \let\normalsize\@normalsize
68 \fi
69 \ifx\@normalsize\@undefined
70  \let\@normalsize\normalsize
71 \fi
72 \ifx\normalsize\@undefined
73  \let\normalsize\original@normalsize
74 \fi
75 \let\@latex@e@error\@latex@e@error@}

\original@normalsize Save the original definition of \normalsize (which generates an error)

76 \let\original@normalsize\normalsize
\normalsize Some styles don’t define \normalsize, just \@normalsize.
77 \def\normalsize{\@normalsize}

4.5 Compatibility with L^{A}TEX 2.09 document styles

\@missingfileerror If a .cls file is missing, we look to see if there is a file of the same name with a .sty extension.

78 \@ifundefined{saved@missingfileerror}{
79 \let\saved@missingfileerror=\@missingfileerror
80 }{}
81 \def\@missingfileerror#1#2{%
82 \ifx#2\@clsextension
83  \InputIfFileExists{#1.\@pkgextension}{%
84  \wlog{Compatibility mode: loading #1.\@pkgextension
85  \space rather than #1.#2.}%
86  }{%
87  \saved@missingfileerror{#1}{#2}%
88  }%
89 \else
90  \saved@missingfileerror{#1}{#2}%
91 \fi

92 }

\@obsoletefile For compatibility with the document styles which \input the standard L^{A}TEX 2.09 document styles, we distribute files called article.sty, book.sty, report.sty,

slides.sty and letter.sty. These use the command \@obsoletefile, which

the L^{A}TEX 2ε kernel defines to produce a warning message. We redefine it to just produce a message in the log file, and to pass any options from the old filename to the new filename.

93 \def\@obsoletefile#1#2{%
94 \expandafter\let\csname opt@#1\expandafter\endcsname
95  \csname opt@\@currname.\@currext\endcsname
96 \wlog{Compatibility mode: inputting `#1'
97  instead of obsolete `#2'.}}

\footheight \@maxsep \@dblmaxsep L^{A}TEX 2.09 supported these parameters, so for compatibility with old document styles we allocate them.

98 \newdimen\footheight
99 \newdimen\@maxsep
100 \newdimen\@dblmaxsep

\mark L^{A}TEX 2.09 initialized an empty mark. Who knows, someone may have relied on it:

101 \mark{{}{}}

4.6 Layout

\sloppy There is a new version of \sloppy in L^{A}TEX 2ε, so we restore the old one.

102 \def\sloppy{\tolerance \@M \hfuzz .5\p@ \vfuzz .5\p@}

\@finalstrut The strut which is used in a footnote has changed. This restores the old definition.

103 \def\@finalstrut#1{\unskip\strut}

\@marginparreset \@floatboxreset Restore the old spacing around floats.

104 \let \@marginparreset \@empty
105 \let \@floatboxreset \@empty

\proclaim From plain TEX.

106 \outer\def\proclaim #1. #2\par{%
107 \medbreak
108 \noindent{\bfseries#1.\enspace}{\slshape#2\par}%
109 \ifdim\lastskip<\medskipamount
110  \removelastskip\penalty55\medskip
111 \fi}
\hang \textindent From plain TEX.
112 \def\hang{\hangindent\parindent}
113 \def\textindent#1{\indent\llap{#1\enspace}\ignorespaces}
\ttraggedright
114 \def\ttraggedright{\reset@font\ttfamily\rightskip\z@ plus2em\relax}

\@footnotemark L^{A}TEX 2ε version has \nobreak to allow hyphenation.

115 \def\@footnotemark{%
116 \leavevmode
117 \ifhmode\edef\@x@sf{\the\spacefactor}\fi
118 \@makefnmark
119 \ifhmode\spacefactor\@x@sf\fi
120 \relax}

\@textsuperscript Fudge this command to remove the text font command which is always the first thing in the argument. This is needed as in compatibility mode footnotes are processed in math mode, but the standard classes call \@textsuperscript in the definition of \thanks.

121 \def\@textsuperscript#1{$\m@th^{\@gobble#1}$}

\@makefnmark L^{A}TEX 2ε version uses \textsuperscript rather than math mode.

122 \def\@makefnmark{\hbox{$^{\@thefnmark}\m@th$}}

\thempfootnote L^{A}TEX 2ε version has an additional \itshape which would not work (and would not make sense) in math mode.

123 \def\thempfootnote{\@alph\c@mpfootnote}

\@fnsymbol L^{A}TEX version uses \ensuremath wich does not work in compatibility mode.

124 \def\@fnsymbol#1{\ifcase#1\or *\or \dagger\or \ddagger\or
125  \mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger
126  \or \ddagger\ddagger \else\@ctrerr\fi}

\@inmathwarn L^{A}TEX (1995/12/01) checks for text commands being used in math mode. We switch this off in compatibility mode.

127 \let\@inmathwarn\@gobble

4.7 Verbatim

\verb \@sverb We restore the old definition of \verb, but using \verbatim@font rather than \tt. The use of \bgroup and \egroup allows us to prefix it with \hbox in math mode.

128 \def\verb{%
129 \relax\ifmmode\hbox\fi\bgroup
130  \@noligs
131  \verbatim@font
132  \let\do\@makeother \dospecials
133  \@ifstar{\@sverb}{\@verb}%

134 }

135 \def\@sverb#1{%
136 \def\@tempa ##1#1{\leavevmode\null##1\egroup}%
137 \@tempa

138 }

\verbatim@nolig@list The only ligatures which should be switched off in 2.09 mode are the Spanish punctuation.

139 \def\verbatim@nolig@list{\do\`}

\@lquote We restore the old definition of \@lquote in case any packages use it.

140 \def\@lquote{\leavevmode{\kern\z@}`}

4.8 Character codes

By default, L^{A}TEX 2ε makes the input charactes 0–8, 11, 14–31 and 128–255 illegal. In compatibility mode, we restore their old meanings.

141 \catcode0=9
142 \@tempcnta=1
143 \loop\ifnum\@tempcnta<32
144 \catcode\@tempcnta=12
145 \advance\@tempcnta by 1
146 \repeat%
147 \catcode`\^^I=10\relax%
148 \catcode`\^^L=13\relax%
149 \catcode`\^^M=5\relax%
150 \catcode127=15
151 \@tempcnta=128
152 \loop\ifnum\@tempcnta<256
153 \catcode\@tempcnta=12
154 \advance\@tempcnta by 1
155 \repeat

4.9 Miscellaneous commands

\SLiTeX The SliTEX logo.

156 \DeclareRobustCommand{\SLiTeX}{{%

157 \normalfont S\kern -.06em
158 {\scshape l\kern -.035emi}\kern -.06em
159 \TeX}}

\+ The \+ command should be defined, so that it can be used in \renewcommand.

160 \let\+\@empty

\@cla \@clb \mscount L^{A}TEX2.09 (and early versions of L^{A}TEX 2ε) used these count registers in the definition of \cline and \multispan. Declare them here in case they were used for any other purposes.

161 \newcount\@cla
162 \newcount\@clb
163 \newcount\mscount

\@imakepicbox picture mode version

164 \long\def\@imakepicbox(#1,#2)[#3]#4{%
165 \vbox to#2\unitlength
166 {\let\mb@b\vss \let\mb@l\hss\let\mb@r\hss
167  \let\mb@t\vss
168  \@tfor\reserved@a :=#3\do{%
169  \if s\reserved@a
170  \let\mb@l\relax\let\mb@r\relax
171  \else
172  \expandafter\let\csname mb@\reserved@a\endcsname\relax
173  \fi}%
174  \mb@t
175  \hb@xt@ #1\unitlength{\mb@l #4\mb@r}%
176  \mb@b

This kern ensures that a b option aligns on the bottom of the text rather than the baseline. this is the documented behaviour in the L^{A}TEXBook. The kern is removed in compatibility mode.

Remove kern for bug compatibility with 2.09.

177 %    \kern\z@

178 }}

\supereject
179 \def\supereject{\par\penalty-\@MM}

\nofiles This old version might change the vertical spacing when it is used. Some old document might depend on that changed spacing so…

180 \def\nofiles{%
181 \@fileswfalse
182 \typeout{No auxiliary output files.^^J}%
183 \long\def\protected@write##1##2##3{}%
184 \let\makeindex\relax
185 \let\makeglossary\relax}

4.10 Packages and classes

\ProvidesPackage \ProvidesClass We redefine \ProvidesPackage and \ProvidesClass to produce a log message

rather than a warning if they find an unexpected file.

186 \def\ProvidesPackage#1{%
187 \xdef\@gtempa{#1}%
188 \ifx\@gtempa\@currname\else
189  \wlog{Compatibility mode: \@cls@pkg\space`\@currname' requested,
190  but `#1' provided.}%
191 \fi
192 \@ifnextchar[\@pr@videpackage{\@pr@videpackage[]}}%]
193 \let\ProvidesClass=\ProvidesPackage

That ends the head of latex209.def.

194 ⟨/head⟩

5 Middle of latex209.def

At this point, the code for oldlfont.sty is read in by the installation script.

6 End of latex209.def

This section describes the end of latex209.def.

195 ⟨∗tail⟩

6.1 Font commands

\ds@oldlfont \ds@newlfont \ds@margid \ds@nomargid We declare oldlfont, newlfont, margid and nomargid options to mimic the

L^{A}TEX 2.09 NFSS1 options.

196 \def\ds@oldlfont{%
197 \@no@font@optfalse
198 \let\math@bgroup\@empty
199 \let\math@egroup\@empty
200 \let\@@math@bgroup\math@bgroup
201 \let\@@math@egroup\math@egroup

202 }

203 \def\ds@newlfont{%
204 \@no@font@optfalse
205 \OptionNotUsed

206 }

207 \def\ds@margid{%
208 \@no@font@optfalse
209 \let\math@bgroup\bgroup
210 \def\math@egroup##1{##1\egroup}%
211 \let \@@math@bgroup \math@bgroup
212 \let \@@math@egroup \math@egroup

213 }

214 \let\ds@nomargid\ds@oldlfont
215 \@onlypreamble\ds@oldfont
216 \@onlypreamble\ds@newfont
217 \@onlypreamble\ds@margid
218 \@onlypreamble\ds@nomargid

\encodingdefault The default encoding for old documents is OT1 rather than T1.

219 \renewcommand{\encodingdefault}{OT1}

\cmex/m/n/10 Just in case a document style relies on \cmex/m/n/10 to exist (which may have been hard-wired to \fam3) we load the font.

220 \expandafter\font\csname cmex/m/n/10\endcsname=cmex10

\normalshape \mediumseries These commands were used in older versions of NFSS.

221 \def\normalshape{\fontshape\shapedefault\selectfont}
222 \def\mediumseries{\fontseries\seriesdefault\selectfont}
\DeclareOldFontCommand We redefine \DeclareOldFontCommand to do nothing. This means that any new

document classes will have their redefinitions of \rm, \bf etc. ignored.

223 \def \DeclareOldFontCommand #1#2#3{%
224 \wlog{Compatibility mode: definition
225  of \string#1\space ignored.}%

226 }

\@halfmag \@magscale \@ptscale Some font-specifying commands from L^{A}TEX 2.09.

227 \def\@halfmag{ scaled \magstephalf}
228 \def\@magscale#1{ scaled \magstep#1 }
229 \def\@ptscale#1{ scaled #100 }

\font The current font is set to be CMR 10pt, to match L^{A}TEX 2.09.

230 \fontencoding{OT1} \fontfamily{cmr}
231 \fontsize{10}{12} \fontseries{m} \fontshape{n}
232 \selectfont

\load The \load command is no longer needed, it is therefore defined to do nothing.

233 \let\load\@gobbletwo

Here are three delimiters which have be partly disabled by NFSS2 (the small variants) since the corresponding fonts are normally not preloaded as math symbol fonts.

234 \DeclareMathDelimiter{\lgroup} % extensible ( with sharper tips
235  {\mathopen}{bold}{"28}{largesymbols}{"3A}
236 \DeclareMathDelimiter{\rgroup} % extensible ) with sharper tips
237  {\mathclose}{bold}{"29}{largesymbols}{"3B}
238 \DeclareMathDelimiter{\bracevert} % the vertical bar that extends braces
239  {\mathord}{typewriter}{"7C}{largesymbols}{"3E}

In old documents we might find some usages of \bffam etc. Thus we add the following code:

240 \let\bffam\symbold
241 \let\sffam\symsans
242 \let\itfam\symitalic
243 \let\ttfam\symtypewriter
244 \let\scfam\symsmallcaps
245 \let\slfam\symslanted
246 \let\rmfam\symoperators

Below are the \..pt commands with hopefully the same functionality as in the old lfonts.tex. Notice that the \baselineskip parameter wasn’t set by these commands so that using them now shouldn’t set this either. Thus we go low-level. This means that the commands are now fragile but I think they have been fragile before.

247 \newcommand\vpt   {\edef\f@size{\@vpt}\rm}
248 \newcommand\vipt  {\edef\f@size{\@vipt}\rm}
249 \newcommand\viipt {\edef\f@size{\@viipt}\rm}
250 \newcommand\viiipt{\edef\f@size{\@viiipt}\rm}
251 \newcommand\ixpt  {\edef\f@size{\@ixpt}\rm}
252 \newcommand\xpt   {\edef\f@size{\@xpt}\rm}
253 \newcommand\xipt  {\edef\f@size{\@xipt}\rm}
254 \newcommand\xiipt {\edef\f@size{\@xiipt}\rm}
255 \newcommand\xivpt {\edef\f@size{\@xivpt}\rm}
256 \newcommand\xviipt{\edef\f@size{\@xviipt}\rm}
257 \newcommand\xxpt  {\edef\f@size{\@xxpt}\rm}
258 \newcommand\xxvpt {\edef\f@size{\@xxvpt}\rm}

6.2 User customization

For sites which customized their version of L^{A}TEX 2.09, we provide a file latex209.cfg, which is loaded every time we enter compatibility mode. If the file doesn’t exist, we don’t do anything.

259 \InputIfFileExists{latex209.cfg}{}{}

That ends the file latex209.def.

260 ⟨/tail⟩

7 Obsolete style files

For each of the standard L^{A}TEX 2.09 document styles, we produce a file which points to the appropriate L^{A}TEX 2ε document class file. This means that any styles which say \input article.sty should still work.

261 ⟨∗article | book | report | letter | slides⟩

262 \NeedsTeXFormat{LaTeX2e}

263 ⟨/article | book | report | letter | slides⟩ 264 ⟨∗article⟩

265 \@obsoletefile{article.cls}{article.sty}

266 \LoadClass{article}

267 ⟨/article⟩ 268 ⟨∗book⟩

269 \@obsoletefile{book.cls}{book.sty}
270 \LoadClass{book}

271 ⟨/book⟩ 272 ⟨∗report⟩

273 \@obsoletefile{report.cls}{report.sty}
274 \LoadClass{report}

275 ⟨/report⟩ 276 ⟨∗letter⟩

277 \@obsoletefile{letter.cls}{letter.sty}
278 \LoadClass{letter}

279 ⟨/letter⟩ 280 ⟨∗slides⟩

281 \@obsoletefile{slides.cls}{slides.sty}
282 \LoadClass{slides}

283 ⟨/slides⟩

We also produce empty fleqn.sty and leqno.sty files in case anyone has \input one of them.

284 ⟨∗fleqn⟩

285 \@obsoletefile{fleqn.clo}{fleqn.sty}
286 \input{fleqn.clo}

287 ⟨/fleqn⟩ 288 ⟨∗leqno⟩

289 \@obsoletefile{leqno.clo}{leqno.sty}
290 \input{leqno.clo}

291 ⟨/leqno⟩

We also produce an empty openbib.sty in case anyone has \inputopenbib.sty. The openbib class option is now part of the kernel.

292 ⟨∗openbib⟩

293 \iffalse

294

295 The openbib option is now part of LaTeX thus this package is no
296 longer necessary.  It is only retained for upward compatibility.
297 See the 2nd edition of the LaTeX book, or the file usrguide.tex
298 which comes with the LaTeX distribution, for more details.

299

300 \fi

301 ⟨/openbib⟩

We also produce an empty bezier.sty in case anyone has \input bezier.sty. The \bezier command is now part of the kernel.

302 ⟨∗bezier⟩

303 \iffalse

304

305 The \bezier command is now part of LaTeX thus this package is no
306 longer necessary.  It is only retained for upward compatibility.
307 Also, please note that LaTeX now offers an extended bezier command

308 which automatically calculates the number of points needed for the
309 plot.  See the 2nd edition of the LaTeX book, or the file
310 usrguide.tex which comes with the LaTeX distribution, for more
311 details.

312

313 \fi

314 ⟨/bezier⟩

We also produce a t1enc package, for compatibility with the Companion. This has been replaced by the fontenc package.

315 ⟨∗t1enc⟩

316 \NeedsTeXFormat{LaTeX2e}
317 \ProvidesPackage{t1enc}[1994/06/01 Standard LaTeX package]
318 \renewcommand{\encodingdefault}{T1}
319 \fontencoding{T1}\selectfont

320 ⟨/t1enc⟩

Change History

v0.01

General: Created the file, including: setting the compatibility flag, inputting oldlfont.sty, setting the default encoding to be OT1, and inputting the latex209.rc file . . . . . . . . . . . . . . 1

v0.02

General: Changed the package filename to latex209.sty, and added the provides-package command. . . . . . . . . . . . . . . . 1

v0.03

General: Added an empty mark, replaced provides-package with provides-file, added the compatibility hook. . . . . . . . . . . . . . . 1

v0.04

General: Moved oldlfont.sty out of the compatibility hook and back into latex209.cmp. Redefined newfontswitch to ignore redefinitions. Set the LaTeX 2e commands to be errors. . . . . . . . . . 1

v0.05

General: Removed the \mark, since it is now in the kernel. . . . . . . 1 v0.06

                                   \@missingfileerror: Corrected a
                                       typo \@saved@missingfileerror
                                       should have been \saved@missingfileerror.

. . . . . . . . . . . . . . . . . . . . . . . . 5 General: Replaced the redefinition

                                       of \@newfontswitch to a redef-
                                       inition of \@renewfontswitch.

Added \sloppy. . . . . . . . . . . . 1

                                   \DeclareOldFontCommand:  Re-
                                       placed \@newfontswitch by
                                       \@renewfontswitch. . . . . . . . 10
                                   \sloppy: Added \sloppy . . . . . . . 5

v0.07

                                   \@missingfileerror: Corrected

a typo, I’d forgotten to pass the arguments of

                                       \@missingfileerror on to
                                       \saved@missingfileerror. . . . 5

General: Fixed a bug with

                                       \@missingfileerror. . . . . . . . 1

v0.08

                                   \@obsoletefile: Added this com-

mand. . . . . . . . . . . . . . . . . . . 5 General: Added the obsolete .sty

files. . . . . . . . . . . . . . . . . . . . . 1 Added this section. . . . . . . . . 11 v0.09

General: Removed art10.sty and friends. . . . . . . . . . . . . . . . . . . 1 Removed artN.sty, bkN.sty and repN.sty. . . . . . . . . . . . . . 1, 11

v0.10

\@obsoletefile: Added the

option-passing. . . . . . . . . . . . . 5 General: Replaced latex209.rc by

latex209.cfg. . . . . . . . . . . . . . . 1 v0.11

General: Added the rest of this subsection, which used to be in oldlfont.dtx. . . . . . . . . . . . . . 10 oldlfont.dtx is now also used to generate latex209.dtx. . . . . . . . 2 Replaced latex209.cmp by latex209.def. Moved half of oldlfont.dtx to here. Split the package dst option into head and tail. . . . . . . . . . . . . . . . . . . . . 1 Split package into head and tail. 1

\DeclareOldFontCommand:  Re-
moved \RequirePackageoldlfont.

. . . . . . . . . . . . . . . . . . . . . . . 10 v0.12

General: Added \normalshape and

\mediumseries, and declared

the ‘oldlfont’ option to stop oldlfont.sty from being loaded. . 1

Added \normalshape and
\mediumseries. . . . . . . . . . . 10

Added the oldlfont option. . . . . 9 v0.13

General: removed setting of

\normalsize. FMi . . . . . . . . . 1 v0.14

General: Added it back again. … 1

\normalsize: Added \normalsize. 4

v0.15

\@documentclasshook: Renamed
from \@compatibility to
\@documentclasshook. Added

the check for \@normalsize and \normalsize being defined. … 4

General: Renamed \@compatibility
to  \@documentclasshook.

Added the check for whether

\normalsize or \@normalsize

needs defined. . . . . . . . . . . . . . 1 v0.16

\@dblmaxsep: Replaced the allocation of temporary dimens

for \footheight, \@maxsep and
\@dblmaxsep by real dimen

variables. . . . . . . . . . . . . . . . . 5 General: Replaced the alloca-

tion of temporary dimens for

\footheight, \@maxsep and
\@dblmaxsep by real dimen

variables. . . . . . . . . . . . . . . . . 1 v0.17

General:  Added  \@halfmag,

\@magscale and \@ptscale . . 10

Moved the documentation to the front, so this file can be processed directly without a driver file. Added \@ptscale,

\@halfmag, \@magscale, and

set the default font to be CMR at 10pt. . . . . . . . . . . . . . . . . . 1

v0.18

General: Added the catcode changes . . . . . . . . . . . . . . . . . 7 Added the changes to \verb … 7 Restored the old definition of \verb. Set the catcodes of the non-alphanumerics. . . . . . . . . . 1

v0.19

General: Switched off more 2e

features:  \lrbox, \width,
\height, \depth in box di-

mensions, and the new optional arguments to \parbox,

\minipage and \newcommand.

The code was provided by DPC. Fixed a misplaced ¡/head¿.

Made the \ProvidesPackage
and \ProvidesClass warn-

ings log messages. Removed \filedate. . . . . . . . . . . . . . . . 1

\DeclareOldFontCommand:  Re-
placed \@renewfontswitch by
\DeclareOldFontCommand. . . . 10

v0.20

General: Restored the 2.09 defini-

tion of \@noligs. . . . . . . . . . . 1

\verbatim@nolig@list: Added the
redefinition of \verbatim@nolig@list.

. . . . . . . . . . . . . . . . . . . . . . . . 7 v0.21

\@lquote: Added the definition of

\@lquote. . . . . . . . . . . . . . . . . 7 General: Restored the 2.09 defini-

tion of \@lquote. . . . . . . . . . . 1 v0.22

\@begin@tempboxa: Commented

out the redefinition of

\@begin@tempboxa. . . . . . . . . . 4
\@documentclasshook:  Moved

switching off commands into the document class hook. . . . . 4

General: Added \@latex@e@command.

. . . . . . . . . . . . . . . . . . . . . . . . 1

Added \if@latex@e@errors and

\@@@. . . . . . . . . . . . . . . . . . . . 3

Added \latex@e@command. . . . . 2

v0.23

General: Added bezier option. … 1

Added bezier.sty. . . . . . . . . . 1, 11 v0.24

\@documentclasshook: Switched

the box commands back on, for use in packages. . . . . . . . . . . . 4

General: Changed the 2e command error help. . . . . . . . . . . . . . . . 1 Changed the error help. . . . . . . 3 Removed \@@@ and switched the box commands back on, for use in packages. . . . . . . . . . . . . . . 1

Removed \if@latex@e@errors

and \@@@. . . . . . . . . . . . . . . . . 3 Removed date from announcement of 2.09 mode. . . . . . . . . . 1 Removed date. . . . . . . . . . . . . . 2

v0.25

General: Added the newlfont option, and rewrote the oldlfont option. . . . . . . . . . . . . . . . . . . 1 Added the newlfont option, rewrote the oldlfont option to change math grouping. . . . . . . 9

v0.26

General: Added the margid and no-

margid options. . . . . . . . . . . 1, 9 v0.27

General: Fixed a bug with the margid option. . . . . . . . . . . . . 1 Replaced # by ## in margid. . 9 v0.28

General: \mediumseries was using \fontshape rather than \fontseries. . . . . . . . . . . . . 10 Fixed a bug with \mediumseries. . . . . . . . . . . . . . . . . . . . . . . . . 1 Replaced \input newlfont.sty

                                       by  \OptionNotUsed  in

\ds@newlfont. . . . . . . . . . . . . 9 v0.29

                                   \@missingfileerror: Removed ex-

traneous spaces. . . . . . . . . . . . 5 General: Fixed a bug with

\newlfont. . . . . . . . . . . . . . . . 1 Made the bezier package use \iffalse to comment itself out, rather than %%, which caused it to appear in every 2.09 file. . 1 Removed extra spaces from the missing file error. . . . . . . . . . . 1

v0.30

                                   \@finalstrut: Added \@finalstrut.

. . . . . . . . . . . . . . . . . . . . . . . . 6 General: Added \@finalstrut. … 1

v0.31

\@finalstrut: New definition of

\@finalstrut. . . . . . . . . . . . . 6 General: Added t1enc.sty. . . . . . 11 Added the t1enc package. . . . . . 1 New definition of \@finalstrut. 1

v0.32

General: Added SLiTeX. . . . . . . . 1 v0.33

General: Fixed bug with SLiTeX. . 1 v0.34

General: Added a default definition for \+. . . . . . . . . . . . . . . . . . . 1 Replaced l2euser by usrguide… 1

v0.35

General: Added spaces to the old

font scale commands. . . . . 1, 10 v0.36

                                   \@documentclasshook: Changed

the way the 2e command error is activated. . . . . . . . . . . . . . . 4

General: Added an empty \mark back again. . . . . . . . . . . . . . . . 1 Added an empty \mark. . . . . . . 5 Allow 2e commands to be redefined once with \newcommand. . 3

     Initialized \@latex@e@error to

do nothing, and switched it on at the begin document. . . . . . . 3 Redid switching off commands. . 2

v0.37

General: Corrected a type with the empty \mark. . . . . . . . . . . . . . 5 Corrected a typo. . . . . . . . . . . . 1

v0.38

General: Removed \LaTeXe from

this list . . . . . . . . . . . . . . . 1, 2 v0.39

   \@floatboxreset: Added old be-

haviour of floats and space. … 6 General: Added old behaviour of

floats and space. . . . . . . . . . . . 1 v0.40

General: (DPC) Do not execute this file twice latex/1460 . . . . . . . . 2 (DPC) Add \r to the list of 2e commands latex/1424 . . . . . . . 3 Make \verb use \tt font in math mode. . . . . . . . . . . . . . . . . . 1, 7

v0.41

\proclaim: Move here from lt-

plain.dtx . . . . . . . . . . . . . . . . 6

   \ttraggedright: Move here from

ltplain.dtx . . . . . . . . . . . . . . . 6 v0.42

\textindent: Move here from lt-

plain.dtx . . . . . . . . . . . . . . . . 6 v0.43

\@footnotemark: macro added … 6 v0.44

\@makefnmark: macro added . . . . . 6

\thempfootnote: macro added … 6 v0.45

                                          \@floatboxreset: (CAR) Changed

method of restoring old behaviour of floats and space. … 6

v0.46

\@fnsymbol: macro added . . . . . . 6 v0.47

\@clb: (DPC) Declare old \cline

registers . . . . . . . . . . . . . . . . . 8 v0.48

                                          \@imakepicbox: (DPC) emulate

old behaviour of picture mode makebox . . . . . . . . . . . . . . . . . 8

                                          \@textsuperscript: macro added

for latex/1722 . . . . . . . . . . . . . 6 v0.49

General: Added code for fleqn.sty,

leqno.sty, openbib.sty. . . . . . . . 1 v0.50

                                          \@inmathwarn:  Switched  off

\@inmathwarn . . . . . . . . . . . . . 6 General: Switched of \@inmathwarn.

. . . . . . . . . . . . . . . . . . . . . . . . 1 v0.51

                                          \@documentclasshook:  (DPC)

Reimplemented for /2153. . . . . 4 \nofiles: (DPC) Old definition, without \write added

                                             to \protected@write, for la-

tex/2146 . . . . . . . . . . . . . . . . . 8

                                          \original@normalsize:  (DPC)

Macro added /2153. . . . . . . . . 4

Index

Numbers written in italic refer to the page where the corresponding entry is described, the ones underlined to the code line of the definition, the rest to the code lines where the entry is used.

Symbols

\+ . . . . . . . . . . 160, \underline{160}

\@@ifdefinable . . . . \underline{43}
\@@math@bgroup 200, 211
\@@math@egroup 201, 212

\@M . . . . . . . . . . . . . 102 \@MM . . . . . . . . . . . . . 179 \@alph . . . . . . . . . . . 123

                          \@begin@tempboxa . . \underline{62}

\@cla . . . . . . . . . . . . \underline{161} \@clb . . . . . . . . . . . . \underline{161} \@cls@pkg . . . . . . . . 189

                                                   \@clsextension . . . . 82
                                                   \@compatibilitytrue   \underline{17}

\@ctrerr . . . . . . . . . 126 \@currext . . . . . . . . 95

                                                   \@currname 95, 188, 189
                                                   \@dblmaxsep . . . . . . . \underline{98}

\@documentclasshook   \underline{62}

\@empty …. 64, 104,

105, 160, 198, 199

\@fileswfalse . . . . . 181
\@finalstrut . . . . . . \underline{103}
\@firstofone . . . . . . 48
\@floatboxreset . . . \underline{104}
\@fnsymbol . . . . . . . \underline{124}
\@footnotemark . . . . \underline{115}

\@gobble . . 30, 121, 127

\@gobbletwo . . . . . . . 233

\@gtempa . . . . . 187, 188 \@halfmag . . . . . . . . \underline{227}

\@ifdefinable . . . . . \underline{43}
\@ifnextchar . . . . . . 192

\@ifstar . . . . . . . . . 133

\@ifundefined . . . . . 78
\@imakepicbox . . . . . \underline{164}
\@inmathwarn . . . . . . \underline{127}

\@ixpt . . . . . . . . . . . 251

\@latex@e@commands . \underline{43}
\@latex@e@error . . .

. . . . . . . 21, \underline{30}, 75

\@latex@e@error@   \underline{30}, 75
\@latexerr . . . . . . . 32

\@lquote . . . . . . . . . \underline{140}

\@magscale . . . . . . . \underline{227}
\@makefnmark . . 118, \underline{122}
\@makeother . . . . . . . 132
\@marginparreset . . \underline{104}

\@maxsep . . . . . . . . . \underline{98}

\@missingfileerror . \underline{78}
\@no@font@optfalse .

…. 197, 204, 208 \@noligs . . . . . . . . . 130

\@normalsize . . . . . .

. 65, 67, 69, 70, 77

\@obsoletefile . \underline{93},

265, 269, 273, 277, 281, 285, 289

\@old@ifdefinable . \underline{43}
\@onlypreamble 215–218
\@pkgextension . . 83, 84
\@pr@videpackage . . 192

\@ptscale . . . . . . . . \underline{227} \@sverb . . . . . . . . . . \underline{128} \@tempa 18, 25–29, 45,

53, 65, 66, 136, 137

\@tempcnta . . . . . . .

. 142–145, 151–154

                          \@textsuperscript . \underline{121}

\@tfor . . . . . . . . . . . 168

                          \@thefnmark . . . . . . . 122
                          \@undefined . . . . . 69, 72
                          \@unusedoptionlist .

. . . . . . . . . 63, 64 \@verb . . . . . . . . . . . 133 \@viiipt . . . . . . . . . 250 \@viipt . . . . . . . . . . 249 \@vipt . . . . . . . . . . . 248 \@vpt . . . . . . . . . . . . 247 \@x@sf . . . . . . . 117, 119 \@xargdef . . . . . . . . 29 \@xiipt . . . . . . . . . . 254 \@xipt . . . . . . . . . . . 253 \@xivpt . . . . . . . . . . 255 \@xpt . . . . . . . . . . . . 252 \@xviipt . . . . . . . . . 256 \@xxpt . . . . . . . . . . . 257 \@xxvpt . . . . . . . . . . 258 \^. . . . . . . . . . 147–149 \` . . . . . . . . . . . . . . 139 \| . . . . . . . . . . . . . . 125

A \advance . . . . . 145, 154

B \begin . . . . . . . . . . 5, 28 \bezier . . . . . . . . . . 305 \bffam . . . . . . . . . . . 240 \bfseries . . . . . . . . 108 \bgroup . . . . . . 129, 209

                          \bracevert . . . . . . . 238

C

                          \c@mpfootnote . . . . . 123

\catcode . . . . . 141,

144, 147–150, 153

                          \cmex/m/n/10 . . . . . . \underline{220}

\csname . . . . . . . 19, 22, 94, 95, 172, 220

D \dagger . . . . . . 124, 125 \ddagger . . . . . 124, 126

                          \DeclareMathDelimiter

…. 234, 236, 238

                          \DeclareOldFontCommand

. . . . . . . . . . . \underline{223}

                                                   \DeclareRobustCommand

. . . . . . . . . . . 156 \def . . . . . . . . 18, 31,

44–46, 56, 62, 65, 77, 81, 93, 102, 103, 106, 112–115, 121– 124, 128, 135, 136, 139, 140, 164, 179, 180, 183, 186, 196, 203, 207, 210, 221–223, 227–229

\DH . . . . . . . . . . . . . 58 \dh . . . . . . . . . . . . . 58

                                                   \DisableCrossrefs . . 3

\DJ . . . . . . . . . . . . . 58 \dj . . . . . . . . . . . . . 58 \do . . . . . . 132, 139, 168 \DocInput . . . . . . . . . 6

                                                   \documentclass . . . 2, 39
                                                   \documentstyle . . . . 40
                                                   \dospecials . . . . . . . 132
                                                   \ds@margid . . . . . . . \underline{196}
                                                   \ds@newfont . . . . . . . 216
                                                   \ds@newlfont . . . . . . \underline{196}
                                                   \ds@nomargid . . . . . . \underline{196}
                                                   \ds@oldfont . . . . . . . 215
                                                   \ds@oldlfont . . . . . . \underline{196}

E \edef . . 20, 117, 247–258 \egroup . . . . . . 136, 210 \else . . . . . . . . . 14,

49, 89, 126, 171, 188

                                                   \encodingdefault . .

. . . . . . . . \underline{219}, 318 \end . . . . . . . . . . . . . . 7

                                                   \endcsname . . . . 19,

22, 94, 95, 172, 220 \endinput . . . . . . . . 13 \enspace . . . . . 108, 113

                                                   \ensuremath . . . . . \underline{18}, 57
                                                   \expandafter . . . . . .

. 13, 19, 22, 48, 50, 53, 94, 172, 220

F \f@size . . . . . . 247–258 \fi . . 16, 51, 68, 71,

74, 91, 111, 117, 119, 126, 129, 173, 191, 300, 313

\font . . . . . . . . 220, \underline{230}

\fontencoding . 230, 319
\fontfamily . . . . . . . 230
\fontseries . . . 222, 231
\fontshape . . . 221, 231

\fontsize . . . . . . . . 231

\footheight . . . . . . . \underline{98}

G

\guillemotleft . . . . 59
\guillemotright . . . 59
\guilsinglleft . . . . 59
\guilsinglright . . . 60

H

\hang . . . . . . . . . . . . \underline{112}

\hangindent . . . . . . . 112

\hb@xt@ . . . . . . . . . . 175 \hbox . . . . . . . . 122, 129 \hfuzz . . . . . . . . . . . 102 \hss . . . . . . . . . . . . . 166

I

\if . . . . . . . . . . . . . 169

\if@compatibility . 12

\ifcase . . . . . . . . . . 124 \ifdim . . . . . . . . . . . 109 \iffalse 47, 53, 293, 303 \ifhmode . . . . . 117, 119 \ifmmode . . . . . . . . . 129 \ifnum . . . . . . . 143, 152 \iftrue . . . . . . . . 47, 53 \ifx . . 66, 69, 72, 82, 188

\ignorespaces . . . . . 113

\indent . . . . . . . . . . 113 \input . . . . . . . 286, 290

\InputIfFileExists .

. . . . . . . . 83, 259 \itfam . . . . . . . . . . . 242 \ixpt . . . . . . . . . . . . 251

K

\k . . . . . . . . . . . . . . 58 \kern . 140, 157, 158, 177

L

\lastskip . . . . . . . . 109 \LaTeXe . . . . . . . . . . 57

                          \leavevmode 116, 136, 140

\let . . . . . . . . 19, 30, 43, 55, 64, 67, 70, 73, 75, 76, 79, 94, 104, 105, 127, 132, 160, 166, 167, 170, 172, 184, 185, 193, 198–201, 209, 211, 212, 214, 233, 240–246

\lgroup . . . . . . . . . . 234

                          \listfiles . . . . . \underline{18}, 57

\llap . . . . . . . . . . . . 113 \load . . . . . . . . . . . . \underline{233}

                          \LoadClass . . . 266,

270, 274, 278, 282 \long . . . . . 44, 164, 183 \loop . . . . . . . . 143, 152 \lrbox . . . . . . . . . \underline{18}, 57

M \m@th . . . . . . . . 121, 122 \magstep . . . . . . . . . 228

                          \magstephalf . . . . . . 227
                          \makeglossary . . . . . 185
                          \makeindex . . . . . . . 184

\mark . . . . . . . . . . . . \underline{101}

                          \math@bgroup . . . . . .

. 198, 200, 209, 211

                          \math@egroup . . . . . .

. 199, 201, 210, 212 \mathchar . . . . . . . . 125

                          \mathclose . . . . . . . 237

\mathopen . . . . . . . . 235 \mathord . . . . . . . . . 239 \mb@b . . . . . . . . 166, 176 \mb@l . . . . . 166, 170, 175 \mb@r . . . . . 166, 170, 175 \mb@t . . . . . . . . 167, 174 \medbreak . . . . . . . . 107

                          \mediumseries . . . . . \underline{221}

\medskip . . . . . . . . . 110

                          \medskipamount . . . . 109

\mscount . . . . . . . . . \underline{161}

N

                          \NeedsTeXFormat . . .

. . . . . 10, 262, 316

                                                   \newcommand . \underline{18}, 247–258

\newcount …. 161–163 \newdimen . . . . . 98–100 \NG . . . . . . . . . . . . . 58 \ng . . . . . . . . . . . . . 58 \noexpand . . . . . . 21, 22 \nofiles . . . . . . . . . \underline{180} \noindent . . . . . . . . 108

                                                   \normalfont . . . . . . . 157
                                                   \normalshape . . . . . . \underline{221}
                                                   \normalsize . . 66, 67,

70, 72, 73, 76, \underline{77} \null . . . . . . . . . . . . 136

O

                                                   \OnlyDescription . . . 4
                                                   \OptionNotUsed . . . . 205

\or . . . . . . . . . 124–126

                                                   \original@normalsize

. . . . . . . . . 73, \underline{76} \outer . . . . . . . . . . . 106

P \p@ . . . . . . . . . . . . . 102 \par . . . . . . 106, 108, 179

                                                   \parindent . . . . . . . 112

\penalty . . . . . 110, 179 \proclaim . . . . . . . . \underline{106}

                                                   \protected@write . . 183
                                                   \ProvidesClass . . . . \underline{186}
                                                   \ProvidesFile . . . . . 11
                                                   \ProvidesPackage . .

. . . . . . . . \underline{186}, 317

Q

                                                   \quotedblbase . . . . . 60
                                                   \quotesinglbase . . . 60

R \r . . . . . . . . . . . . . . 58 \relax …. 114, 120,

129, 147–149, 170, 172, 184, 185

                                                   \removelastskip . . . 110
                                                   \renewcommand . 219, 318

\repeat . . . . . . 146, 155

                                                   \RequirePackage . . . 63
                                                   \reserved@a 168, 169, 172
                                                   \reset@font . . . . . . . 114

\rgroup . . . . . . . . . . 236

\rightskip . . . . . . . 114

\rm . . . . . . . . . 247–258 \rmfam . . . . . . . . . . . 246

S

\saved@missingfileerror

. . . . . . . 79, 87, 90 \scfam . . . . . . . . . . . 244 \scshape . . . . . . . . . 158

\selectfont . . . . . . .

. 221, 222, 232, 319

\seriesdefault . . . . 222

\sffam . . . . . . . . . . . 241

\shapedefault . . . . . 221

\slfam . . . . . . . . . . . 245 \SLiTeX . . . . . . . . . . \underline{156} \sloppy . . . . . . . . . . \underline{102} \slshape . . . . . . . . . 108 \space 33, 39, 85, 189, 225

\spacefactor . . 117, 119

\SS . . . . . . . . . . . . . 58 \string . . . . . 19, 22,

33, 36, 39, 40, 225 \strut . . . . . . . . . . . 103

\supereject . . . . . . . \underline{179}

\symbold . . . . . . . . . 240

                          \symitalic . . . . . . . 242
                          \symoperators . . . . . 246

\symsans . . . . . . . . . 241

                          \symslanted . . . . . . . 245
                          \symsmallcaps . . . . . 244
                          \symtypewriter . . . . 243

T \TeX . . . . . . . . . . . . . 159

                          \textindent . . . . . . . \underline{112}

\TH . . . . . . . . . . . . . 58 \th . . . . . . . . . . . . . 58 \the . . . . . . . . . . . . . 117

                          \thempfootnote . . . . \underline{123}
                          \tolerance . . . . . . . 102

\ttfam . . . . . . . . . . . 243 \ttfamily . . . . . . . . 114

                          \ttraggedright . . . . \underline{114}

\typeout . . . . . . 15, 182

U

                          \unitlength . . . 165, 175

\unskip . . . . . . . . . . 103

                          \usepackage . . . . . \underline{18}, 57

V \vbox . . . . . . . . . . . . 165 \verb . . . . . . . . . . . . \underline{128}

                                                   \verbatim@font . . . . 131
                                                   \verbatim@nolig@list

. . . . . . . . . . . \underline{139}

\vfuzz . . . . . . . . . . . 102 \viiipt . . . . . . . . . . 250 \viipt . . . . . . . . . . . 249 \vipt . . . . . . . . . . . . 248 \vpt . . . . . . . . . . . . . 247 \vss . . . . . . . . . 166, 167

W \wlog … 84, 96, 189, 224

X \xdef . . . . . . . . . . . . 187 \xiipt . . . . . . . . . . . 254 \xipt . . . . . . . . . . . . 253 \xivpt . . . . . . . . . . . 255 \xpt . . . . . . . . . . . . . 252 \xviipt . . . . . . . . . . 256 \xxpt . . . . . . . . . . . . 257 \xxvpt . . . . . . . . . . . 258

Z \z@ . . . . . . 114, 140, 177