% \iffalse meta-comment
%
% Copyright (C) 1993-2025
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
% This file is part of the LaTeX base system.
% -------------------------------------------
%
% It may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
% of this license or (at your option) any later version.
% The latest version of this license is in
%    https://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions of LaTeX
% version 2008 or later.
%
% This file has the LPPL maintenance status "maintained".
%
% The list of all files belonging to the LaTeX base distribution is
% given in the file `manifest.txt'. See also `legal.txt' for additional
% information.
%
% The list of derived (unpacked) files belonging to the distribution
% and covered by LPPL is defined by the unpacking scripts (with
% extension .ins) which are part of the distribution.
%
% \fi
%
% \title{Compatibility mode for \LaTeXe{} emulating \LaTeX~2.09}
% \author{Alan Jeffrey and Frank Mittelbach}
% \date{1995/12/27}
%
%
%
% \changes{v0.01}{1993/12/11}{Created the file, including:
%   setting the compatibility flag,
%   inputting oldlfont.sty,
%   setting the default encoding to be OT1, and
%   inputting the latex209.rc file}
% \changes{v0.02}{1993/12/12}{Changed the package filename to
%   latex209.sty, and added the provides-package command.}
% \changes{v0.03}{1993/12/16}{Added an empty mark, replaced
%   provides-package with provides-file, added the compatibility hook.}
% \changes{v0.04}{1993/12/16}{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.}
% \changes{v0.05}{1993/12/17}
%    {Removed the \cs{mark}, since it is now in the kernel.}
% \changes{v0.06}{1993/12/18}{Replaced the redefinition of
%    \cs{@newfontswitch} to a redefinition of \cs{@renewfontswitch}.
%    Added \cs{sloppy.}}
% \changes{v0.07}{1993/12/18}{Fixed a bug with \cs{@missingfileerror}.}
% \changes{v0.08}{1993/12/18}{Added the obsolete .sty files.}
% \changes{v0.09}{1993/12/20}{Removed art10.sty and friends.}
% \changes{v0.10}{1994/01/14}{Replaced latex209.rc by latex209.cfg.}
% \changes{v0.11}{1994/01/21}{Replaced latex209.cmp by latex209.def.
%    Moved half of oldlfont.dtx to here.  Split the package dst option
%    into head and tail.}
% \changes{v0.12}{1994/01/24}
%   {Added \cs{normalshape} and \cs{mediumseries}, and
%    declared the `oldlfont' option to stop oldlfont.sty from being
%    loaded.}
% \changes{v0.13}{1994/01/31}{removed setting of \cs{normalsize}. FMi}
% \changes{v0.14}{1994/02/07}{Added it back again.}
% \changes{v0.15}{1994/02/10}{Renamed \cs{@compatibility} to
%    \cs{@documentclasshook}.  Added the check for whether
%     \cs{normalsize} or \cs{@normalsize} needs defined.}
% \changes{v0.16}{1994/02/11}{Replaced the allocation of temporary
%    dimens for \cs{footheight}, \cs{@maxsep} and \cs{@dblmaxsep}
%     by real dimen variables.}
% \changes{v0.17}{1994/03/02}{Moved the documentation to the front, so
%     this file can be processed directly without a driver file.
%     Added \cs{@ptscale}, \cs{@halfmag}, \cs{@magscale}, and set the
%     default font to be CMR at 10pt.}
% \changes{v0.18}{1994/03/11}{Restored the old definition of \cs{verb}.
%     Set the catcodes of the non-alphanumerics.}
% \changes{v0.19}{1994/04/05}{Switched off more 2e features: \cs{lrbox},
%     \cs{width}, \cs{height}, \cs{depth} in box dimensions, and the new
%     optional arguments to \cs{parbox}, \cs{minipage} and
%     \cs{newcommand}.  The code was provided by DPC.  Fixed a misplaced
%     </head!>.  Made the \cs{ProvidesPackage} and \cs{ProvidesClass}
%     warnings log messages. Removed \cs{filedate}.}
% \changes{v0.20}{1994/04/20}
%      {Restored the 2.09 definition of \cs{@noligs}.}
% \changes{v0.21}{1994/04/24}
%      {Restored the 2.09 definition of \cs{@lquote}.}
% \changes{v0.22}{1994/05/02}{Added \cs{@latex@e@command}.}
% \changes{v0.23}{1994/05/11}{Added bezier.sty.}
% \changes{v0.24}{1994/05/14}{Removed \cs{@@@} and switched the box
%    commands back on, for use in packages.}
% \changes{v0.24}{1994/05/14}{Changed the 2e command error help.}
% \changes{v0.24}{1994/05/14}{Removed date from announcement of
%    2.09 mode.}
% \changes{v0.25}{1994/05/14}{Added the newlfont option, and rewrote the
%    oldlfont option.}
% \changes{v0.26}{1994/05/15}{Added the margid and nomargid options.}
% \changes{v0.27}{1994/05/16}{Fixed a bug with the margid option.}
% \changes{v0.28}{1994/05/16}{Fixed a bug with \cs{mediumseries}.}
% \changes{v0.29}{1994/05/17}{Fixed a bug with \cs{newlfont}.}
% \changes{v0.29}{1994/05/17}{Removed extra spaces from the missing
%    file error.}
% \changes{v0.29}{1994/05/17}{Made the bezier package use \cs{iffalse}
%    to comment itself out, rather than \%\%, which caused it to
%    appear in every 2.09 file.}
% \changes{v0.30}{1994/05/18}{Added \cs{@finalstrut}.}
% \changes{v0.31}{1994/05/20}{New definition of \cs{@finalstrut}.}
% \changes{v0.31}{1994/05/20}{Added the t1enc package.}
% \changes{v0.32}{1994/05/20}{Added SLiTeX.}
% \changes{v0.33}{1994/06/01}{Fixed bug with SLiTeX.}
% \changes{v0.34}{1994/08/22}{Replaced l2euser by usrguide.}
% \changes{v0.34}{1994/08/22}{Added a default definition for \cs{+}.}
% \changes{v0.35}{1994/09/23}
%                {Added spaces to the old font scale commands.}
% \changes{v0.36}{1994/10/17}{Added an empty \cs{mark} back again.}
% \changes{v0.37}{1994/10/20}{Corrected a typo.}
% \changes{v0.38}{1994/11/16}{Removed \cs{LaTeXe} from this list}
% \changes{v0.39}{1994/11/28}{Added old behaviour of floats and space.}
% \changes{v0.40}{1995/05/05}{Make \cs{verb} use \cs{tt} font in
%                             math mode.}
% \changes{v0.49}{1995/10/26}{Added code for fleqn.sty, leqno.sty,
%                             openbib.sty.}
% \changes{v0.50}{1995/12/08}{Switched of \cs{@inmathwarn}.}
% \changes{v0.53}{2015/02/22}{Dropped \cs{@no@font@optfalse} in various places
%                              - no longer provided by ltfsscmp.dtx.}
%
% \MaintainedByLaTeXTeam{latex}
% \maketitle
%
% \section{Introduction}
%
% The file |latex209.def| is read in by \LaTeXe{} whenever it finds a
% |\documentstyle| rather than |\documentclass| command at the
% beginning of the file.  This indicates a \LaTeX~2.09 document, which
% should be processed in {\em compatibility mode}.
%
% Any document which compiled under \LaTeX~2.09 should compile under
% compatibility mode, unless it uses low-level commands such as
% |\tenrm|.
%
% \section{The docstrip modules}
%
% The following modules are used in the implementation to direct
% docstrip in generating the external files:
% \begin{center}
% \begin{tabular}{ll}
%   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|
% \end{tabular}
% \end{center}
% Between the |head| and |tail| of |latex209.def|, the code for
% |oldlfont.sty| is included, so \LaTeX~2.09 documents will
% automatically be run simulating the OFSS.
% \changes{v0.09}{1993/12/20}{Removed artN.sty, bkN.sty and repN.sty.}
% \changes{v0.11}{1994/01/21}{Split package into head and tail.}
% \changes{v0.23}{1994/05/11}{Added bezier option.}
%
% \MaybeStop{}
%
% \section{Driver}
%
% This section contains the driver for this documentation.
%    \begin{macrocode}
%<*driver>
\documentclass{ltxdoc}
\DisableCrossrefs
% \OnlyDescription
\begin{document}
   \DocInput{latex209.dtx}
\end{document}
%</driver>
%    \end{macrocode}
%
% \section{Beginning of latex209.def}
%
% \changes{v0.11}{1994/01/21}{oldlfont.dtx is now also used to generate
%    latex209.dtx.}
%
% This section describes the beginning of the file |latex209.def|.
%    \begin{macrocode}
%<*head>
%    \end{macrocode}
%
% \subsection{Identification}
%
% This file needs to be run with \LaTeXe.
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
%    \end{macrocode}
% Describe the file.
%    \begin{macrocode}
\ProvidesFile{latex209.def}[2020/11/26 v0.55 Standard LaTeX file]
%    \end{macrocode}
% \changes{v0.24}{1994/05/14}{Removed date.}
% \changes{v0.40}{1995/03/21}
%         {(DPC) Do not execute this file twice latex/1460}
% Announce compatibility mode to the user.
% \changes{v0.52}{1998/05/13}{Added experimental
%    long typeout to possibly avoid prs like 2807}
%    \begin{macrocode}
\if@compatibility
  \expandafter\endinput
\else
  \typeout{^^J\space
\@spaces\@spaces\space  Entering LaTeX 2.09 COMPATIBILITY MODE^^J\space
 *************************************************************^^J\space
 \space\space\space!!WARNING!!\space
 \space\space\space!!WARNING!!\space
 \space\space\space!!WARNING!!\space
 \space\space\space!!WARNING!!\space\space\space   ^^J\space
 ^^J\space
 This mode attempts to provide an emulation of the LaTeX 2.09^^J\space
 author environment so that OLD documents can be successfully^^J\space
 processed. It should NOT be used for NEW documents!^^J\space
 ^^J\space
 New documents should use Standard LaTeX conventions and start^^J\space
 with the \string\documentclass\space command.^^J\space
 ^^J\space
 Compatibility mode is UNLIKELY TO WORK with LaTeX 2.09 style^^J\space
 files that change any internal macros, especially not with^^J\space
 those that change the FONT SELECTION or OUTPUT ROUTINES.^^J\space
^^J\space
 Therefore such style files   MUST BE UPDATED to use^^J\space
\@spaces\@spaces\space        Current Standard LaTeX: LaTeX2e.^^J\space
 If you suspect that you may be using such a style file, which^^J\space
 is probably very, very old by now, then you should attempt to^^J\space
 get it updated by sending a copy of this error message to the^^J\space
 author of that file.^^J\space
 *************************************************************^^J}
 \fi
%    \end{macrocode}
%
% \subsection{Compatibility flag}
%
% \begin{macro}{\@compatibilitytrue}
%    \LaTeXe{} 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.
%    \begin{macrocode}
\@compatibilitytrue
%    \end{macrocode}
% \end{macro}
%
% \subsection{Removing features}
%
% \changes{v0.22}{1994/05/02}{Added \cs{@latex@e@command}.}
% \changes{v0.36}{1994/10/17}{Redid switching off commands.}
% \changes{v0.38}{1994/11/16}{Removed \cs{LaTeXe} from this list}
%
% \begin{macro}{\usepackage}
% \begin{macro}{\listfiles}
% \begin{macro}{\ensuremath}
% \begin{macro}{\lrbox}
% \begin{macro}{\newcommand}
%    These \LaTeXe{} 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.
%    \begin{macrocode}
\def\@tempa#1#2{%
   \expandafter\let\csname @@\string#1\endcsname#1%
   \edef#1{%
      \noexpand\@latex@e@error{\noexpand#2}%
      \expandafter\noexpand\csname @@\string#1\endcsname
   }%
}
\@tempa\usepackage\usepackage
\@tempa\listfiles\listfiles
\@tempa\ensuremath\ensuremath
\@tempa\lrbox{\begin{lrbox}}%
\@tempa\@xargdef{\newcommand{cmd}[args][def]}%
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \changes{v0.22}{1994/05/02}
%         {Added \cs{if@latex@e@errors} and \cs{@@@}.}
% \changes{v0.24}
%         {1994/05/14}{Removed \cs{if@latex@e@errors} and \cs{@@@}.}
% \changes{v0.24}{1994/05/14}{Changed the error help.}
% \changes{v0.36}{1994/10/17}{Initialized \cs{@latex@e@error} to do
%    nothing, and switched it on at the begin document.}
%
% \begin{macro}{\@latex@e@error}
% \begin{macro}{\@latex@e@error@}
%   This error is produced if a user uses a \LaTeXe{} 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 \LaTeXe{} commands)
%   but it is redefined to be an error message at |\begin{document}|.
%    \begin{macrocode}
\let\@latex@e@error\@gobble
\def\@latex@e@error@#1{%
      \@latexerr{%
         LaTeX2e command \string#1\space in LaTeX 2.09 document%
      }{%
         This is a LaTeX 2.09 document, but it contains
         \string#1.^^J%
         If you want to use the new features of LaTeX2e,
         your document^^J%
         should begin with \string\documentclass\space
         rather than \string\documentstyle
      }%
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \changes{v0.36}{1994/10/17}
%         {Allow 2e commands to be redefined once with \cs{newcommand}.}
% \changes{v0.40}{1995/03/21}{
%         (DPC) Add \cs{r} to the list of 2e commands latex/1424}
%
% \begin{macro}{\@ifdefinable}
% \begin{macro}{\@old@ifdefinable}
% \begin{macro}{\@@ifdefinable}
% \begin{macro}{\@latex@e@commands}
%    We trap the |\@notdefinable| error message to check to see if the
%    command is a \LaTeXe{} 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.
%    \begin{macrocode}
\let\@old@ifdefinable\@ifdefinable
\long\def\@ifdefinable#1{%
   \def\@tempa##1#1##2#1##3#1##4\@tempa{%
      \def\@latex@e@commands{##1##2}%
      ##3% ##3 will either be \iftrue or \iffalse
         \expandafter\@firstofone
      \else
         \expandafter\@old@ifdefinable\expandafter#1%
      \fi
   }%
   \expandafter\@tempa\@latex@e@commands#1\iftrue#1\iffalse#1\@tempa%
}
\let\@@ifdefinable\@ifdefinable
\def\@latex@e@commands{%
   \usepackage\listfiles\ensuremath\LaTeXe\lrbox
   \th\dh\ng\dj\TH\DH\NG\DJ\k\r\SS
   \guillemetleft\guillemetright
   \guillemotleft\guillemotright\guilsinglleft
   \guilsinglright\quotedblbase\quotesinglbase
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\@begin@tempboxa}
%    \changes{v0.22}{1994/05/02}{Commented out the redefinition of
%       \cs{@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.
%    \begin{verbatim}
%\long\def\@begin@tempboxa#1#2{%
%  \begingroup
%    \setbox\@tempboxa#1{{#2}}}
%    \end{verbatim}
% \end{macro}
%
% \subsection{Document class hook}
%
% \begin{macro}{\@documentclasshook}
% \changes{v0.15}{1994/02/10}{Renamed from \cs{@compatibility} to
%    \cs{@documentclasshook}.  Added the check for \cs{@normalsize} and
%    \cs{normalsize} being defined.}
% \changes{v0.22}{1994/05/02}{Moved switching off commands into the
%    document class hook.}
% \changes{v0.24}{1994/05/14}{Switched the box commands back on, for use
%    in packages.}
% \changes{v0.36}{1994/10/17}{Changed the way the 2e command error is
%    activated.}
% \changes{v0.51}{1996/05/24}{(DPC) Reimplemented for /2153.}
%    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
%    \LaTeXe{} 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 are that after
% the |\documentstyle| command has completed, then
% if neither of the commands |\normalsize|
% nor |\@normalsize|  were 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.
%    \begin{macrocode}
\def\@documentclasshook{%
  \RequirePackage\@unusedoptionlist
  \let\@unusedoptionlist\@empty
  \def\@tempa{\@normalsize}%
  \ifx\normalsize\@tempa
    \let\normalsize\@normalsize
  \fi
  \ifx\@normalsize\@undefined
    \let\@normalsize\normalsize
  \fi
  \ifx\normalsize\@undefined
    \let\normalsize\original@normalsize
  \fi
  \let\@latex@e@error\@latex@e@error@}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\original@normalsize}
% \changes{v0.51}{1996/05/24}{(DPC) Macro added /2153.}
% Save the original definition of |\normalsize| (which generates an
% error)
%    \begin{macrocode}
\let\original@normalsize\normalsize
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\normalsize}
% \changes{v0.14}{1994/02/07}{Added \cs{normalsize}.}
%    Some styles don't define |\normalsize|, just |\@normalsize|.
%    \begin{macrocode}
\def\normalsize{\@normalsize}
%    \end{macrocode}
% \end{macro}
%
% \subsection{Compatibility with \LaTeX~2.09 document styles}
%
% \begin{macro}{\@missingfileerror}
%    If a |.cls| file is missing, we look to see if there is
%    a file of the same name with a |.sty| extension.
% \changes{v0.06}{1993/12/18}{Corrected a typo
%  \cs{@saved@missingfileerror}
%    should have been \cs{saved@missingfileerror}.}
% \changes{v0.07}{1993/12/18}{Corrected a typo, I'd forgotten to pass
%    the arguments of \cs{@missingfileerror} on to
%    \cs{saved@missingfileerror}.}
% \changes{v0.29}{1994/05/17}{Removed extraneous spaces.}
%    \begin{macrocode}
\@ifundefined{saved@missingfileerror}{
   \let\saved@missingfileerror=\@missingfileerror
}{}
\def\@missingfileerror#1#2{%
   \ifx#2\@clsextension
      \InputIfFileExists{#1.\@pkgextension}{%
         \wlog{Compatibility mode: loading #1.\@pkgextension
            \space rather than #1.#2.}%
      }{%
         \saved@missingfileerror{#1}{#2}%
      }%
   \else
      \saved@missingfileerror{#1}{#2}%
   \fi
}
\@ifundefined{@missing@onefilewithoptions}{}{%
  \def\@missing@onefilewithoptions#1{%
    \@pass@ptions\@currext{#1}{\@currname}%
    \@missingfileerror\@currname\@currext
    \let\@currname\@empty}%
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@obsoletefile}
%    For compatibility with the document styles which |\input| the
%    standard \LaTeX~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 \LaTeXe{} 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.
%    \changes{v0.08}{1993/12/19}{Added this command.}
%    \changes{v0.10}{1994/01/14}{Added the option-passing.}
%    \begin{macrocode}
\def\@obsoletefile#1#2{%
   \expandafter\let\csname opt@#1\expandafter\endcsname
      \csname opt@\@currname.\@currext\endcsname
   \wlog{Compatibility mode: inputting `#1'
      instead of obsolete `#2'.}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\footheight}
% \begin{macro}{\@maxsep}
% \begin{macro}{\@dblmaxsep}
%    \LaTeX~2.09 supported these parameters, so for compatibility with
%    old document styles we allocate them.
% \changes{v0.16}{1994/02/11}{Replaced the allocation of temporary
%    dimens for \cs{footheight}, \cs{@maxsep} and \cs{@dblmaxsep} by
%     real dimen variables.}
%    \begin{macrocode}
\newdimen\footheight
\newdimen\@maxsep
\newdimen\@dblmaxsep
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \changes{v0.36}{1994/10/17}{Added an empty \cs{mark}.}
% \changes{v0.37}
%         {1994/10/20}{Corrected a type with the empty \cs{mark}.}
%
% \begin{macro}{\mark}
%    \LaTeX~2.09 initialized an empty mark.  Who knows, someone may have
%    relied on it:
%    \begin{macrocode}
\mark{{}{}}
%    \end{macrocode}
% \end{macro}
%
% \subsection{Layout}
%
% \begin{macro}{\sloppy}
% \changes{v0.06}{1993/12/18}{Added \cs{sloppy}}
%    There is a new version of |\sloppy| in \LaTeXe, so we restore the
%    old one.
%    \begin{macrocode}
\def\sloppy{\tolerance \@M \hfuzz .5\p@ \vfuzz .5\p@}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@finalstrut}
% \changes{v0.30}{1994/05/18}{Added \cs{@finalstrut}.}
% \changes{v0.31}{1994/05/20}{New definition of \cs{@finalstrut}.}
%    The strut which is used in a footnote has changed.  This restores
%    the old definition.
%    \begin{macrocode}
\def\@finalstrut#1{\unskip\strut}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@marginparreset}
% \begin{macro}{\@floatboxreset}
% \changes{v0.39}{1994/11/28}{Added old behaviour of floats and space.}
% \changes{v0.45}{1995/05/25}{(CAR) Changed method of restoring
%    old behaviour of floats and space.}
%    Restore the old spacing around floats.
%    \begin{macrocode}
\let \@marginparreset \@empty
\let \@floatboxreset \@empty
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\proclaim}
% \changes{v0.41}{1995/04/24}
%         {Move here from ltplain.dtx}
% From plain \TeX.
%    \begin{macrocode}
\outer\def\proclaim #1. #2\par{%
  \medbreak
  \noindent{\bfseries#1.\enspace}{\slshape#2\par}%
  \ifdim\lastskip<\medskipamount
    \removelastskip\penalty55\medskip
  \fi}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\hang}
% \begin{macro}{\textindent}
% \changes{v0.42}{1995/04/27}
%         {Move here from ltplain.dtx}
% From plain \TeX.
%    \begin{macrocode}
\def\hang{\hangindent\parindent}
\def\textindent#1{\indent\llap{#1\enspace}\ignorespaces}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\ttraggedright}
% \changes{v0.41}{1995/04/24}
%         {Move here from ltplain.dtx}
%    \begin{macrocode}
\def\ttraggedright{\reset@font\ttfamily\rightskip\z@ plus2em\relax}
%    \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\@footnotemark}
% \changes{v0.43}{1995/05/12}
%         {macro added}
% \LaTeXe\ version has |\nobreak| to allow hyphenation.
%    \begin{macrocode}
\def\@footnotemark{%
  \leavevmode
  \ifhmode\edef\@x@sf{\the\spacefactor}\fi
  \@makefnmark
  \ifhmode\spacefactor\@x@sf\fi
  \relax}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@textsuperscript}
% \changes{v0.48}{1995/07/07}
%         {macro added for latex/1722}
% 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|.
%    \begin{macrocode}
\def\@textsuperscript#1{$\m@th^{\@gobble#1}$}
%    \end{macrocode}
% \end{macro}
%
%
%
%  \begin{macro}{\@makefnmark}
% \changes{v0.44}{1995/05/20}{macro added}
%    \LaTeXe\ version uses |\textsuperscript| rather than
%    math mode.
%    \begin{macrocode}
\def\@makefnmark{\hbox{$^{\@thefnmark}\m@th$}}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\thempfootnote}
% \changes{v0.44}{1995/05/20}{macro added}
%    \LaTeXe\ version has an additional |\itshape| which would not
%    work (and would not make sense) in math mode.
%    \begin{macrocode}
\def\thempfootnote{\@alph\c@mpfootnote}
%    \end{macrocode}
%  \end{macro}
%
%  \begin{macro}{\@fnsymbol}
% \changes{v0.46}{1995/06/30}{macro added}
% \LaTeX\ version uses |\ensuremath| which does not work in
% compatibility mode.
%    \begin{macrocode}
\def\@fnsymbol#1{\ifcase#1\or *\or \dagger\or \ddagger\or
    \mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger
    \or \ddagger\ddagger \else\@ctrerr\fi}
%    \end{macrocode}
%  \end{macro}
%
% \begin{macro}{\@inmathwarn}
% \changes{v0.50}{1995/12/08}{Switched off \cs{@inmathwarn}}
% \LaTeX\ (1995/12/01) checks for text commands being used in math
% mode.  We switch this off in compatibility mode.
%    \begin{macrocode}
\let\@inmathwarn\@gobble
%    \end{macrocode}
% \end{macro}
%
% \subsection{Verbatim}
%
% \changes{v0.18}{1994/03/11}{Added the changes to \cs{verb}}
% \changes{v0.40}{1995/05/05}{Make \cs{verb} use \cs{tt} font in
%                             math mode.}
% \begin{macro}{\verb}
% \begin{macro}{\@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.
%    \begin{macrocode}
\def\verb{%
   \relax\ifmmode\hbox\fi\bgroup
      \@noligs
      \verbatim@font
      \let\do\@makeother \dospecials
      \@ifstar{\@sverb}{\@verb}%
}
\def\@sverb#1{%
   \def\@tempa ##1#1{\leavevmode\null##1\egroup}%
   \@tempa
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\verbatim@nolig@list}
% \changes{v0.20}{1994/04/20}{Added the redefinition of
%    \cs{verbatim@nolig@list}.}
%    The only ligatures which should be switched off in 2.09 mode are
%    the Spanish punctuation.
%    \begin{macrocode}
\def\verbatim@nolig@list{\do\`}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@lquote}
% \changes{v0.21}{1994/04/24}{Added the definition of \cs{@lquote}.}
%    We restore the old definition of |\@lquote| in case any packages
%    use it.
%    \begin{macrocode}
\def\@lquote{\leavevmode{\kern\z@}`}
%    \end{macrocode}
% \end{macro}
%
%
% \subsection{Character codes}
%
% \changes{v0.18}{1994/03/11}{Added the catcode changes}
%
% By default, \LaTeXe{} makes the input characters 0--8, 11, 14--31 and
% 128--255 illegal.  In compatibility mode, we restore their old
% meanings.
%    \begin{macrocode}
\catcode0=9
\@tempcnta=1
\loop\ifnum\@tempcnta<32
   \catcode\@tempcnta=12
   \advance\@tempcnta by 1
\repeat%
\catcode`\^^I=10\relax%
\catcode`\^^L=13\relax%
\catcode`\^^M=5\relax%
\catcode127=15
\@tempcnta=128
\loop\ifnum\@tempcnta<256
   \catcode\@tempcnta=12
   \advance\@tempcnta by 1
\repeat
%    \end{macrocode}
%
% \subsection{Miscellaneous commands}
%
% \begin{macro}{\SLiTeX}
%    The \textsc{Sli\TeX} logo.
%    \begin{macrocode}
\DeclareRobustCommand{\SLiTeX}{{%
   \normalfont S\kern -.06em
   {\scshape l\kern -.035emi}\kern -.06em
   \TeX}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\+}
%    The |\+| command should be defined, so that it can be used in
%    |\renewcommand|.
%    \begin{macrocode}
\let\+\@empty
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@cla}
% \begin{macro}{\@clb}
% \changes{v0.47}{1995/09/25}
%         {(DPC) Declare old \cs{cline} registers}
% \begin{macro}{\mscount}
% \LaTeX2.09 (and early versions of \LaTeXe) used these count registers
% in the definition of |\cline| and |\multispan|.
% Declare them here in case they were used for any other purposes.
%    \begin{macrocode}
\newcount\@cla
\newcount\@clb
\newcount\mscount
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\@imakepicbox}
% \changes{v0.48}{1995/10/16}
%         {(DPC) emulate old behaviour of picture mode makebox}
% picture mode version
%    \begin{macrocode}
\long\def\@imakepicbox(#1,#2)[#3]#4{%
  \vbox to#2\unitlength
   {\let\mb@b\vss \let\mb@l\hss\let\mb@r\hss
    \let\mb@t\vss
    \@tfor\reserved@a :=#3\do{%
      \if s\reserved@a
        \let\mb@l\relax\let\mb@r\relax
      \else
        \expandafter\let\csname mb@\reserved@a\endcsname\relax
      \fi}%
    \mb@t
    \hb@xt@ #1\unitlength{\mb@l #4\mb@r}%
    \mb@b
%    \end{macrocode}
% 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 \LaTeX Book. The kern is removed in compatibility mode.
%
% Remove kern for bug compatibility with 2.09.
%    \begin{macrocode}
%    \kern\z@
     }}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\supereject}
%    \begin{macrocode}
\def\supereject{\par\penalty-\@MM}
%    \end{macrocode}
%  \end{macro}
%
% \begin{macro}{\nofiles}
% \changes{v0.51}{1996/05/24}{(DPC) Old definition, without \cs{write}
% added to \cs{protected@write}, for latex/2146}
% This old version might change the vertical spacing when it is used.
% Some old document might depend on that changed spacing so\ldots
%    \begin{macrocode}
\def\nofiles{%
  \@fileswfalse
  \typeout{No auxiliary output files.^^J}%
  \long\def\protected@write##1##2##3{}%
  \let\makeindex\relax
  \let\makeglossary\relax}
%    \end{macrocode}
% \end{macro}
%
% \subsection{Packages and classes}
%
% \begin{macro}{\ProvidesPackage}
% \begin{macro}{\ProvidesClass}
%    We redefine |\ProvidesPackage| and |\ProvidesClass| to produce a
%    log message rather than a warning if they find an unexpected
%    file.
%    \begin{macrocode}
\def\ProvidesPackage#1{%
  \xdef\@gtempa{#1}%
  \ifx\@gtempa\@currname\else
    \wlog{Compatibility mode: \@cls@pkg\space`\@currname' requested,
       but `#1' provided.}%
  \fi
  \@ifnextchar[\@pr@videpackage{\@pr@videpackage[]}}%]
\let\ProvidesClass=\ProvidesPackage
%    \end{macrocode}
% \end{macro}
% \end{macro}
% That ends the head of |latex209.def|.
%    \begin{macrocode}
%</head>
%    \end{macrocode}
%
% \section{Middle of latex209.def}
%
% At this point, the code for |oldlfont.sty| is read in by the
% installation script.
%
% \section{End of latex209.def}
%
% This section describes the end of |latex209.def|.
%    \begin{macrocode}
%<*tail>
%    \end{macrocode}
%
% \subsection{Font commands}
%
% \changes{v0.12}{1994/01/24}{Added the oldlfont option.}
% \changes{v0.25}{1994/05/14}{Added the newlfont option, rewrote the
%    oldlfont option to change math grouping.}
% \changes{v0.26}{1994/05/15}{Added the margid and nomargid options.}
% \changes{v0.27}{1994/05/16}{Replaced \# by \#\# in margid.}
% \changes{v0.28}{1994/05/17}{Replaced \cs{input} newlfont.sty by
%    \cs{OptionNotUsed} in \cs{ds@newlfont}.}
%
% \begin{macro}{\ds@oldlfont}
% \begin{macro}{\ds@newlfont}
% \begin{macro}{\ds@margid}
% \begin{macro}{\ds@nomargid}
%    We declare |oldlfont|, |newlfont|, |margid| and |nomargid|
%    options to mimic the \LaTeX~2.09 NFSS1 options.
%    \begin{macrocode}
\def\ds@oldlfont{%
%FM   \@no@font@optfalse
   \let\math@bgroup\@empty
   \let\math@egroup\@empty
   \let\@@math@bgroup\math@bgroup
   \let\@@math@egroup\math@egroup
}
\def\ds@newlfont{%
%FM    \@no@font@optfalse
   \OptionNotUsed
}
\def\ds@margid{%
%FM   \@no@font@optfalse
  \let\math@bgroup\bgroup
  \def\math@egroup##1{##1\egroup}%
  \let \@@math@bgroup \math@bgroup
  \let \@@math@egroup \math@egroup
}
\let\ds@nomargid\ds@oldlfont
\@onlypreamble\ds@oldfont
\@onlypreamble\ds@newfont
\@onlypreamble\ds@margid
\@onlypreamble\ds@nomargid
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\encodingdefault}
%    The default encoding for old documents is OT1 rather than T1.
%    \begin{macrocode}
\renewcommand{\encodingdefault}{OT1}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\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.
%    \begin{macrocode}
\expandafter\font\csname cmex/m/n/10\endcsname=cmex10
%    \end{macrocode}
% \end{macro}
%
%
% \changes{v0.12}{1994/01/24}
%    {Added \cs{normalshape} and \cs{mediumseries}.}
% \changes{v0.28}{1994/05/16}{\cs{mediumseries} was using
%    \cs{fontshape} rather than \cs{fontseries}.}
%
% \begin{macro}{\normalshape}
% \begin{macro}{\mediumseries}
%    These commands were used in older versions of NFSS.
%    \begin{macrocode}
\def\normalshape{\fontshape\shapedefault\selectfont}
\def\mediumseries{\fontseries\seriesdefault\selectfont}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \begin{macro}{\DeclareOldFontCommand}
%    We redefine |\DeclareOldFontCommand| to do nothing.  This means
%    that any new document classes will have their redefinitions of
%    |\rm|, |\bf| etc.~ignored.
% \changes{v0.06}{1993/12/18}{Replaced \cs{@newfontswitch} by
%    \cs{@renewfontswitch}.}
% \changes{v0.11}{1994/01/21}{Removed \cs{RequirePackage}{oldlfont}.}
% \changes{v0.19}{1994/04/05}{Replaced \cs{@renewfontswitch} by
%    \cs{DeclareOldFontCommand}.}
%    \begin{macrocode}
\def \DeclareOldFontCommand #1#2#3{%
  \wlog{Compatibility mode: definition
        of \string#1\space ignored.}%
}
%    \end{macrocode}
% \end{macro}
%
% \changes{v0.17}
%    {1994/03/02}{Added \cs{@halfmag}, \cs{@magscale} and \cs{@ptscale}}
% \changes{v0.35}
%         {1994/09/23}{Added spaces to the old font scale commands.}
%
% \begin{macro}{\@halfmag}
% \begin{macro}{\@magscale}
% \begin{macro}{\@ptscale}
%    Some font-specifying commands from \LaTeX~2.09.
%    \begin{macrocode}
\def\@halfmag{ scaled \magstephalf}
\def\@magscale#1{ scaled \magstep#1 }
\def\@ptscale#1{ scaled #100 }
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\font}
%    The current font is set to be CMR 10pt, to match \LaTeX~2.09.
%    \begin{macrocode}
\fontencoding{OT1} \fontfamily{cmr}
\fontsize{10}{12} \fontseries{m} \fontshape{n}
\selectfont
%    \end{macrocode}
% \end{macro}
%
% \changes{v0.11}{1994/01/21}{Added the rest of this subsection, which
%    used to be in oldlfont.dtx.}
%
% \begin{macro}{\load}
%    The |\load| command is no longer needed, it is therefore
%    defined to do nothing.
%    \begin{macrocode}
\let\load\@gobbletwo
%    \end{macrocode}
% \end{macro}
%
%    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.
%    \begin{macrocode}
\DeclareMathDelimiter{\lgroup} % extensible ( with sharper tips
     {\mathopen}{bold}{"28}{largesymbols}{"3A}
\DeclareMathDelimiter{\rgroup} % extensible ) with sharper tips
     {\mathclose}{bold}{"29}{largesymbols}{"3B}
\DeclareMathDelimiter{\bracevert} % the vertical bar that extends braces
     {\mathord}{typewriter}{"7C}{largesymbols}{"3E}
%    \end{macrocode}
%
%    In old documents we might find some usages of |\bffam| etc. Thus
%    we add the following code:
%    \begin{macrocode}
\let\bffam\symbold
\let\sffam\symsans
\let\itfam\symitalic
\let\ttfam\symtypewriter
\let\scfam\symsmallcaps
\let\slfam\symslanted
\let\rmfam\symoperators
%    \end{macrocode}
%
%    Below are the |\..pt| commands with hopefully the same
%    functionality as in the old \texttt{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.
%    \begin{macrocode}
\newcommand\vpt   {\edef\f@size{\@vpt}\rm}
\newcommand\vipt  {\edef\f@size{\@vipt}\rm}
\newcommand\viipt {\edef\f@size{\@viipt}\rm}
\newcommand\viiipt{\edef\f@size{\@viiipt}\rm}
\newcommand\ixpt  {\edef\f@size{\@ixpt}\rm}
\newcommand\xpt   {\edef\f@size{\@xpt}\rm}
\newcommand\xipt  {\edef\f@size{\@xipt}\rm}
\newcommand\xiipt {\edef\f@size{\@xiipt}\rm}
\newcommand\xivpt {\edef\f@size{\@xivpt}\rm}
\newcommand\xviipt{\edef\f@size{\@xviipt}\rm}
\newcommand\xxpt  {\edef\f@size{\@xxpt}\rm}
\newcommand\xxvpt {\edef\f@size{\@xxvpt}\rm}
%    \end{macrocode}
%
% \subsection{User customization}
%
% For sites which customized their version of \LaTeX~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.
%    \begin{macrocode}
\InputIfFileExists{latex209.cfg}{}{}
%    \end{macrocode}
% That ends the file |latex209.def|.
%    \begin{macrocode}
%</tail>
%    \end{macrocode}
%
% \section{Obsolete style files}
%
% \changes{v0.08}{1993/12/19}{Added this section.}
% \changes{v0.09}{1993/12/20}{Removed artN.sty, bkN.sty and repN.sty.}
% \changes{v0.23}{1994/05/11}{Added bezier.sty.}
% \changes{v0.31}{1994/05/20}{Added t1enc.sty.}
%
% For each of the standard \LaTeX~2.09 document styles, we produce a
% file which points to the appropriate \LaTeXe{} document class file.
% This means that any styles which say |\input article.sty| should
% still work.
%
%    \begin{macrocode}
%<*article|book|report|letter|slides>
\NeedsTeXFormat{LaTeX2e}
%</article|book|report|letter|slides>
%<*article>
\@obsoletefile{article.cls}{article.sty}
\LoadClass{article}
%</article>
%<*book>
\@obsoletefile{book.cls}{book.sty}
\LoadClass{book}
%</book>
%<*report>
\@obsoletefile{report.cls}{report.sty}
\LoadClass{report}
%</report>
%<*letter>
\@obsoletefile{letter.cls}{letter.sty}
\LoadClass{letter}
%</letter>
%<*slides>
\@obsoletefile{slides.cls}{slides.sty}
\LoadClass{slides}
%</slides>
%    \end{macrocode}
% We also produce empty |fleqn.sty| and |leqno.sty| files in case
% anyone has |\input| one of them.
%    \begin{macrocode}
%<*fleqn>
\@obsoletefile{fleqn.clo}{fleqn.sty}
\input{fleqn.clo}
%</fleqn>
%<*leqno>
\@obsoletefile{leqno.clo}{leqno.sty}
\input{leqno.clo}
%</leqno>
%    \end{macrocode}
% We also produce an empty |openbib.sty| in case anyone has |\input|
% |openbib.sty|.  The |openbib| class option is now part of the kernel.
%    \begin{macrocode}
%<*openbib>
\iffalse

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

\fi
%</openbib>
%    \end{macrocode}
% We also produce an empty |bezier.sty| in case anyone has |\input|
% |bezier.sty|.  The |\bezier| command is now part of the kernel.
%    \begin{macrocode}
%<*bezier>
\iffalse

The \bezier command is now part of LaTeX thus this package is no
longer necessary.  It is only retained for upward compatibility.
Also, please note that LaTeX now offers an extended bezier command
which automatically calculates the number of points needed for the
plot.  See the 2nd edition of the LaTeX book, or the file
usrguide.tex which comes with the LaTeX distribution, for more
details.

\fi
%</bezier>
%    \end{macrocode}
% We also produce a |t1enc| package, for compatibility with the
% Companion.  This has been replaced by the |fontenc| package.
%    \begin{macrocode}
%<*t1enc>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{t1enc}[1994/06/01 Standard LaTeX package]
\renewcommand{\encodingdefault}{T1}
\fontencoding{T1}\selectfont
%</t1enc>
%    \end{macrocode}
% \DeleteShortVerb{\|}
% \Finale
\endinput
