From bf7e5eda82d5177d838d28170dce0f539f5e1687 Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Wed, 11 Jan 2006 23:51:04 +0000
Subject: trunk/Master/texmf-dist/source/latex/base

git-svn-id: svn://tug.org/texlive/trunk@151 c570f23f-e606-0410-a88d-b1316a301751
---
 Master/texmf-dist/source/latex/base/ltfloat.dtx | 1314 +++++++++++++++++++++++
 1 file changed, 1314 insertions(+)
 create mode 100644 Master/texmf-dist/source/latex/base/ltfloat.dtx

(limited to 'Master/texmf-dist/source/latex/base/ltfloat.dtx')

diff --git a/Master/texmf-dist/source/latex/base/ltfloat.dtx b/Master/texmf-dist/source/latex/base/ltfloat.dtx
new file mode 100644
index 00000000000..d10264e56fd
--- /dev/null
+++ b/Master/texmf-dist/source/latex/base/ltfloat.dtx
@@ -0,0 +1,1314 @@
+% \iffalse meta-comment
+%
+% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004
+% The LaTeX3 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.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+%    http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX 
+% version 2003/12/01 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
+% \iffalse
+%%% From File: ltfloat.dtx
+%
+%<*driver>
+% \fi
+\ProvidesFile{ltfloat.dtx}[2002/10/01 v1.1v LaTeX Kernel (Floats)]
+% \iffalse
+\documentclass{ltxdoc}
+\GetFileInfo{ltfloat.dtx}
+\title{\filename}
+\date{\filedate}
+ \author{%
+  Johannes Braams\and
+  David Carlisle\and
+  Alan Jeffrey\and
+  Leslie Lamport\and
+  Frank Mittelbach\and
+  Chris Rowley\and
+  Rainer Sch\"opf}
+
+\begin{document}
+\maketitle
+ \DocInput{\filename}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{636}
+%
+% \section{Floats}
+%
+%  The different types of floats are identified by a \meta{type} name,
+%  which is the name of the counter for that kind of float.  For
+%  example, figures are of type `figure' and tables are of type `table'.
+%  Each \meta{type} has associated a positive \meta{type number}, which
+%  is a power of two.  E.g.,\\
+%  figures might be have type number~1, tables type number~2, programs
+%  type number~4, etc.
+%
+%  The locations where a float can go are specified by a
+%  \meta{placement specifier}, which is a list of the possible
+%  locations, each denoted by a letter as follows:
+%    \begin{center}
+%    \begin{tabular}{l@{ : }l@{ --- }l}
+%     h & here   & at the current location in the text.\\
+%     t & top    & at the top of a text page.\\
+%     b & bottom & at the bottom of a text page.\\
+%     p & page   & on a separate float page
+%    \end{tabular}
+%    \end{center}
+%  In addition, in conjunction with these, you can use `!' which means
+%  that the current values of the float positioning parameters are
+%  ignored for this float. (Has no effect on `p', float page
+%  positioning.)
+%  For example, `pht' specifies that the float can appear in any of
+%  three locations: page, here or top.
+%
+% \StopEventually{}
+%
+%
+% \changes{v1.0a}{1994/03/04}{Initial version, split from latex.dtx}
+% \changes{v1.0b}{1994/03/28}{Split further from ltherest.dtx}
+% \changes{v1.0e}{1994/04/25}{Changed warning messages}
+% \changes{v1.0e}{1994/04/25}{Removed obsolete tracing code}
+% \changes{v1.0f}{1994/05/03}
+%     {(CAR) Added \cs{@largefloatcheck}}
+% \changes{v1.0f}{1994/05/03}{Removed unnecessary braces from
+% arguments of \cs{@ifnextchar}}
+% \changes{v1.0i}{1994/05/22}{Use new warning commands}
+% \changes{v1.1e}{1994/11/17}
+%         {\cs{@tempa} to \cs{reserved@a}}
+% \changes{v1.1g}{1994/12/10}{Some temps reinserted temporarily}
+% \changes{v1.1n}{1995/11/28}{documentation fixes}
+% \changes{v1.1s}{1997/06/16}{documentation fixes}
+%
+% \subsection{Floating Environments}
+%    \begin{macrocode}
+%<*2ekernel>
+\message{floats,}
+%    \end{macrocode}
+% \begin{oldcomments}
+%
+% Where floats may appear on a page, and how many may appear there
+% are specified by the following float placement parameters.  The
+% numbers are named like counters so the user can set them with
+% the ordinary counter-setting commands.
+%
+%  \c@topnumber      : Number of floats allowed at the top of a column.
+%  \topfraction      : Fraction of column that can be devoted to floats.
+%  \c@dbltopnumber, \dbltopfraction 
+%                    : Same as above, but for double-column floats.
+%  \c@bottomnumber, \bottomfraction 
+%                    : Same as above for bottom of page.
+%  \c@totalnumber    : Number of floats allowed in a single column,
+%                          including in-text floats.
+%  \textfraction     :Minimum fraction of column that must contain text.
+%  \floatpagefraction: Minimum fraction of page that must be taken
+%                          up by float page.
+%  \dblfloatpagefraction 
+%                    : Same as above, for double-column floats.
+%
+% The document style must define the following.
+%
+%    \fps@TYPE   : The default placement specifier for floats of type
+%                  TYPE. 
+%
+%    \ftype@TYPE : The type number for floats of type TYPE.
+%
+%    \ext@TYPE   : The file extension indicating the file on which the
+%                  contents list for float type TYPE is stored.
+%                    For example,  \ext@figure = 'lof'.
+%
+%    \fnum@TYPE  : A macro to generate the figure number for a caption.
+%                  For example, \fnum@TYPE == Figure \thefigure.
+%
+%    \@makecaption{NUM}{TEXT} : 
+%              A macro to make a caption, with NUM the value
+%              produced by \fnum@... and TEXT the text of the caption.
+%              It can assume it's in a \parbox of the appropriate width.
+%
+% \@float{TYPE}[PLACEMENT] : This macro begins a float environment for a
+%     single-column float of type TYPE with PLACEMENT as the placement
+%     specifier.  The default value of PLACEMENT is defined by
+%     \fps@TYPE.  The environment is ended by \end@float.
+%     E.g., \figure == \@float{figure}, \endfigure == \end@float.
+%
+%  \@float{TYPE}[PLACEMENT] ==
+%   BEGIN
+%     if hmode then \@bsphack
+%                   \@floatpenalty := -10002
+%              else \@floatpenalty := -10003
+%     fi
+%     \@captype ==L TYPE
+%     \@dblflset
+%     \@fps     ==L PLACEMENT
+%     \@onelevel@sanitize \@fps 
+%     add default PLACEMENT if at most ! in PLACEMENT == \@fpsadddefault
+%     if inner
+%       then LaTeX Error: 'Not in outer paragraph mode.'
+%            \@floatpenalty := 0
+%       else if \@freelist nonempty
+%              then \@currbox  :=L head of \@freelist
+%                   \@freelist :=G tail of \@freelist
+%                   \count\@currbox :=G 32*\ftype@TYPE + 
+%                                          bits determined by PLACEMENT
+%              else \@floatpenalty := 0
+%                   LaTeX Error: 'Too many unprocessed floats'
+%            fi
+%     fi
+%     \@currbox :=G   \color@vbox
+%                       \normalcolor
+%                         \vbox{
+%                          %% 15 Dec 87 --
+%                          %% removed \boxmaxdepth :=L 0pt
+%                          %% that made box 0 depth because it screwed
+%                          %% things up. Instead, added \vskip0pt at end
+%                               \hsize = \columnwidth
+%                               \@parboxrestore
+%                               \@floatboxreset
+%   END
+%
+%  \caption ==
+%    BEGIN
+%     \refstepcounter{\@captype}
+%     \@dblarg{\@caption{\@captype}}
+%    END
+%
+% In following definition, \par moved from after \addcontentsline to
+% before \addcontentsline because the \write could cause
+% an extra blank line to be added to the paragraph above the
+% caption.  (Change made 12 Jun 87)
+%
+%  \@caption{TYPE}[STEXT]{TEXT} ==
+%   BEGIN
+%     \par
+%     \addcontentsline{\ext@TYPE}{TYPE}{\numberline{\theTYPE}{STEXT}}
+%     \begingroup
+%       \@parboxrestore
+%       \@normalsize
+%       \@makecaption{\fnum@TYPE}{TEXT}
+%       \par
+%     \endgroup
+%   END
+%
+%
+%  \@dblfloat{TYPE}[PLACEMENT] : Macro to begin a float environment for
+%     a double-column float of type TYPE with PLACEMENT as the placement
+%     specifier.  The default value of PLACEMENT is 'tp'
+%     The environment is ended by \end@dblfloat.
+%     E.g., \figure* == \@dblfloat{figure}, 
+%           \endfigure* == \end@dblfloat.
+%
+%  \@dblfloat{TYPE}[PLACEMENT] ==
+%     Identical to \@float{TYPE}[PLACEMENT] except \hsize and \linewidth
+%     are set to \textwidth.
+% \end{oldcomments}
+%
+% \begin{macro}{\@floatpenalty}
+%    \begin{macrocode}
+\newcount\@floatpenalty
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\caption}
+%
+%    This is set to be an error message outside a float since no
+%    captype is defined there; this may need to be changed by some 
+%    classes.
+% \changes{v1.1u}{1999/04/19}
+%    {Made caption an error oustside a float: latex/2815}
+%    \begin{macrocode}
+\def\caption{%
+   \ifx\@captype\@undefined
+     \@latex@error{\noexpand\caption outside float}\@ehd
+     \expandafter\@gobble
+   \else
+     \refstepcounter\@captype
+     \expandafter\@firstofone
+   \fi
+   {\@dblarg{\@caption\@captype}}%
+} 
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@caption}
+% \changes{v1.0b}{1994/03/28}
+%     {Use \cs{normalsize} not \cs{@normalsize}}
+% \changes{v1.1r}{1996/12/06}
+%     {Call \cs{@setminpage} if needed. latex/2318}
+%    \begin{macrocode}
+\long\def\@caption#1[#2]#3{%
+  \par
+  \addcontentsline{\csname ext@#1\endcsname}{#1}%
+    {\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}%
+  \begingroup
+%    \end{macrocode}
+%
+% The paragraph setting parameters are normalised at this point, however
+% |\@parboxrestore| resets |\everypar| which is not correct in this
+% context so |\@setminipage| is called if needed.
+%
+% The float mechanism, like minipage, sets the flag |@minipage| true
+% before executing the user-supplied text. Many \LaTeX\ constructs
+% test for this flag and do not add vertical space when it is true.
+% The intention is that this emulates \TeX's `top of page' behaviour.
+% The flag must be set false at the start of the first paragraph. This
+% is achieved by a redefinition of |\everypar|, but the call to
+% |\@parboxrestore| removes that redefinition, so it is re-inserted 
+% if needed. If the flag is already false then the |\caption| was not
+% the first entry in the float, and so some other paragraph has already
+% activated the special |\everypar|. In this case no further action is
+% needed.
+%    \begin{macrocode}
+    \@parboxrestore
+    \if@minipage
+      \@setminipage
+    \fi
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+    \normalsize
+    \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
+  \endgroup}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@float}
+% \begin{macro}{\@dblflset}
+% \changes{v1.1a}{1994/10/31}{Macro added}
+% \changes{v1.1g}{1994/12/10}{Macro removed temporarily}
+% \changes{v1.1a}{1994/10/31}
+%    {Major changes to parameter parsing, setting of local variables,
+%    etc; two-column and one-column cases merged; space hacks moved}
+% \changes{v1.1c}{1994/11/05}
+%         {Add compatibility with old version of \cs{@xfloat}.}
+% \changes{v1.1g}{1994/12/10}{Old version reinstated temporarily}
+%
+%    \begin{macrocode}
+\def\@float#1{%
+  \@ifnextchar[%
+    {\@xfloat{#1}}%
+    {\edef\reserved@a{\noexpand\@xfloat{#1}[\csname fps@#1\endcsname]}%
+     \reserved@a}}
+%    \end{macrocode}
+%    
+% \end{macro}
+% \end{macro}
+%
+%  \begin{macro}{\@dblfloat}
+% \changes{v1.1a}{1994/10/31}
+%     {Major changes since two-column and one-column cases merged}
+% \changes{v1.1g}{1994/12/10}{Old version reinstated temporarily}
+%
+%    \begin{macrocode}
+\def\@dblfloat{%
+  \if@twocolumn\let\reserved@a\@dbflt\else\let\reserved@a\@float\fi
+  \reserved@a}
+%    \end{macrocode}
+%  \end{macro}
+%
+%    
+%  \begin{macro}{\fps@dbl}
+% \changes{v1.1a}{1994/10/31}{Macro added}
+% \changes{v1.1g}{1994/12/10}{Macro removed temporarily}
+%  Note that all double floats have default fps `tp'.
+%  \end{macro}
+%  
+%  \begin{macro}{\@setfps}
+% \changes{v1.1a}{1994/10/31}{Macro added}
+% \changes{v1.1c}{1994/11/05}
+%         {Add compatibility with old version of \cs{@xfloat}.}
+% \changes{v1.1g}{1994/12/10}{Macro removed temporarily}
+%    This sets the fps, dealing with error conditions by adding
+%    the default.
+%    
+%  \end{macro}
+%
+%  \begin{macro}{\@xfloat}
+% \changes{LaTeX2e}{1993/12/05}{Command changed}
+% \changes{LaTeX2e}{1994/01/21}{Added missing percent characters.}
+% \changes{v1.1a}{1994/10/31}
+%     {Major changes, removing setting of local variables, space hacks
+%     etc; two-column and one-column cases merged}
+% \changes{v1.1c}{1994/11/05}
+%         {Add compatibility with old version of \cs{@xfloat}: but the
+%         arguments, provided at exorbitant cost, are now completely
+%         ignored}
+% \changes{v1.1f}{1994/11/21}
+%     {Missing percents reinserted after 4, 8: these are not numbers.}
+% \changes{v1.1g}{1994/12/10}{Old version reinstated temporarily}
+% \changes{v1.1g}{1994/12/10}{Sanitisation added temporarily}
+%     The first part of this sets the count register that stores all
+%     the information about the type and fps of the float.
+%
+%    We assume here that the default specifiers already contain no
+%    active characters.
+%
+%    It may be better to store the defaults as numbers, rather than
+%    symbol strings.
+%
+% \changes{v1.1p}{1996/10/24}{Added \cs{@nodocument} to trap
+%                  floats in the preamble}
+%    \begin{macrocode}
+\def\@xfloat #1[#2]{%
+  \@nodocument
+  \def \@captype {#1}%
+   \def \@fps {#2}%
+   \@onelevel@sanitize \@fps 
+   \def \reserved@b {!}%
+   \ifx \reserved@b \@fps
+     \@fpsadddefault
+   \else
+     \ifx \@fps \@empty
+       \@fpsadddefault
+     \fi
+   \fi
+   \ifhmode
+     \@bsphack
+     \@floatpenalty -\@Mii
+   \else
+     \@floatpenalty-\@Miii
+   \fi
+  \ifinner
+     \@parmoderr\@floatpenalty\z@
+  \else
+    \@next\@currbox\@freelist
+      {%
+       \@tempcnta \sixt@@n
+       \expandafter \@tfor \expandafter \reserved@a
+         \expandafter :\expandafter =\@fps 
+         \do
+          {%
+           \if \reserved@a h%
+             \ifodd \@tempcnta
+             \else
+               \advance \@tempcnta \@ne
+             \fi
+           \fi
+           \if \reserved@a t%
+             \@setfpsbit \tw@
+           \fi
+           \if \reserved@a b%
+             \@setfpsbit 4%
+           \fi
+           \if \reserved@a p%
+             \@setfpsbit 8%
+           \fi
+           \if \reserved@a !%
+             \ifnum \@tempcnta>15
+               \advance\@tempcnta -\sixt@@n\relax
+             \fi
+           \fi
+           }%
+       \@tempcntb \csname ftype@\@captype \endcsname
+       \multiply \@tempcntb \@xxxii
+       \advance \@tempcnta \@tempcntb
+       \global \count\@currbox \@tempcnta
+       }%
+    \@fltovf
+  \fi
+%    \end{macrocode}
+%    The remainder sets up the box in which the float is typeset, and
+%    the typesetting environment to be used.  It is essential to have
+%    the extra box to avoid the unwanted space that would otherwise
+%    often be put at the top of the float.
+%
+%    It ends with a hook; not sure how useful this is but it is needed
+%    at present to deal with double-column floats.
+% \task{CAR?}{Sort out hooks}
+% \changes{v1.0a}{1994/03/07}
+%     {(DPC) Extra group for colour}
+% \changes{v1.0c}{1994/03/14}
+%     {(DPC) Use \cs{color@begingroup}}
+% \changes{v1.0g}{1994/05/13}
+%     {(DPC) Use \cs{normalcolor}}
+% \changes{v1.1a}{1994/10/31}
+%     {(DPC/CAR) Extra box added to remove colour resetting from vmode}
+% \changes{v1.1a}{1994/10/31}{Reset hook added}
+% \changes{v1.1c}{1994/11/05}
+%         {Use new \cs{color@hbox} concept.}
+% \changes{v1.1f}{1994/11/21}
+%         {Changed to \cs{color@vbox} so that large floats overflow
+%          at the bottom}
+% \changes{v1.1f}{1994/11/21}{Use \cs{@setnobreak}}
+% \changes{v1.1f}{1994/11/21}{Added \cs{@setminipage}}
+% \changes{v1.1f}{1994/11/21}{Added resetting of size and font}
+% \changes{v1.1m}{1995/05/25}{(CAR) Resettings moved to hook}
+%    \begin{macrocode}
+  \global \setbox\@currbox
+    \color@vbox
+      \normalcolor
+      \vbox \bgroup
+        \hsize\columnwidth
+        \@parboxrestore
+        \@floatboxreset
+}
+%    \end{macrocode}
+%  \end{macro}
+%  
+%  \begin{macro}{\@floatboxreset}
+% \changes{v1.1a}{1994/10/31}{Macro added}
+%    
+% The rational for allowing these normally global flags to be set
+% locally here, via |\@parboxrestore|, was stated originally by
+% Donald Arseneau and extended by Chris Rowley.
+% It is because these flags are only set globally to
+% true by section commands, and these should never appear within
+% marginals or floats or, indeed, in any group; and they are only ever
+% set globally to false when they are definitely true.
+%
+% If anyone is unhappy with this argument then both flags should be
+% treated as in |\set@nobreak|; otherwise this command will be
+% redundant. 
+% \changes{v1.1p}{1996/10/24}
+%     {Added local settings of flags: dangerous!!}
+%    \begin{macrocode}
+\def \@floatboxreset {%
+        \reset@font
+        \normalsize
+        \@setminipage
+}
+%    \end{macrocode}
+%  \end{macro}
+%  
+%  \begin{macro}{\@setnobreak}
+% \changes{v1.1f}{1994/11/21}{Macro added}
+% \changes{v1.1n}{1996/07/26}{remove unecessary \cs{global} before
+%                 \cs{@nobreak...}}   
+%    \begin{macrocode}
+\def \@setnobreak{%
+  \if@nobreak
+    \let\outer@nobreak\@nobreaktrue
+    \@nobreakfalse
+  \fi
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%  \begin{macro}{\@setminipage}
+% \changes{v1.1f}{1994/11/21}{Macro added}
+% \changes{v1.1n}{1996/07/26}{remove unecessary \cs{global} before
+%                 \cs{@minipage...}}   
+%    \begin{macrocode}
+\def \@setminipage{%
+  \@minipagetrue
+  \everypar{\@minipagefalse\everypar{}}%
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+% \begin{macro}{\end@float}
+% \changes{v1.0f}{1994/05/03}
+%     {(CAR) Added \cs{@largefloatcheck}}
+% \changes{v1.1n}{1995/10/25}{(CAR) unify code for double and
+%    single versions}
+%    \begin{macrocode}
+\def\end@float{%
+  \@endfloatbox
+  \ifnum\@floatpenalty <\z@
+%    \end{macrocode}
+% We make sure that we never exceed |\textheight|, otherwise float
+% will never get typeset (91/03/15 FMi).
+%    \begin{macrocode}
+    \@largefloatcheck
+    \@cons\@currlist\@currbox
+    \ifnum\@floatpenalty <-\@Mii
+      \penalty -\@Miv
+%    \end{macrocode}
+% Saving and restoring |\prevdepth| added 26 May 87 to prevent extra
+% vertical space when used in vertical mode.
+%    \begin{macrocode}
+      \@tempdima\prevdepth
+      \vbox{}%
+      \prevdepth\@tempdima
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+      \penalty\@floatpenalty
+%    \end{macrocode}
+% \changes{LaTeX2.09}{1992/03/18}
+%         {(RmS) changed \cs{@esphack} to \cs{@Esphack}}
+%    \begin{macrocode}
+    \else
+      \vadjust{\penalty -\@Miv \vbox{}\penalty\@floatpenalty}\@Esphack
+    \fi
+  \fi
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\end@dblfloat}
+% \changes{v1.0f}{1994/05/03}{\cs{@largefloatcheck} added}
+% \changes{v1.1n}{1995/10/25}{(CAR) unify code for double and
+%    single versions}
+%    \begin{macrocode}
+\def\end@dblfloat{%
+\if@twocolumn
+  \@endfloatbox
+  \ifnum\@floatpenalty <\z@
+%    \end{macrocode}
+% We make sure that we never exceed |\textheight|, otherwise float
+% will never get typeset (91/03/15 FMi).
+%    \begin{macrocode}
+    \@largefloatcheck
+    \@cons\@dbldeferlist\@currbox
+  \fi
+%    \end{macrocode}
+% RmS 92/03/18 changed |\@esphack| to |\@Esphack|.
+%    \begin{macrocode}
+    \ifnum \@floatpenalty =-\@Mii \@Esphack\fi
+\else
+  \end@float
+\fi
+}
+%    \end{macrocode}
+% \end{macro}
+% 
+% \begin{macro}{\@endfloatbox}
+% \changes{v1.1n}{1995/10/25}{(CAR) macro added: to unify code for
+%    double and single versions}
+%    This macro is not intended to be a hook; it is designed to help
+%    maintain the integrity of this code, which is used twice and, as
+%    can be seen, is subject to frequent changes.
+%    \begin{macrocode}
+\def \@endfloatbox{%
+      \par\vskip\z@skip      %% \par\vskip\z@ added 15 Dec 87
+%    \end{macrocode}
+% \changes{v1.0a}
+%     {1994/03/07}{(DPC) Extra group for colour}
+% \changes{v1.0c}{1994/03/14}
+%     {(DPC) Use \cs{color@endgroup}}
+% \changes{v1.0h}{1994/05/20}{Restore outer value of @nobreak switch.}
+% \changes{v1.1a}{1994/10/31}
+%     {(DPC/CAR) Extra box added to remove colour resetting from vmode}
+% \changes{v1.1c}{1994/11/05}
+%         {Use new \cs{color@hbox} concept.}
+% \changes{v1.1f}{1994/11/21}{Corrected position of \cs{outer@nobreak}}
+% \changes{v1.1f}{1994/11/21}{Added reset of minipage flag}
+% \changes{v1.1n}{1996/07/26}{remove unecessary \cs{global} before
+%                 \cs{@minipage...}}   
+%    \begin{macrocode}
+      \@minipagefalse   
+      \outer@nobreak
+    \egroup                  %% end of vbox
+  \color@endbox
+}
+% 
+% \begin{macro}{\outer@nobreak}
+% \changes{v1.0h}{1994/05/20}{Macro added: default is to do nothing.}
+%    \begin{macrocode}
+\let\outer@nobreak\@empty
+%    \end{macrocode}
+% \end{macro}
+% 
+%
+%  \begin{macro}{\@largefloatcheck}
+% \changes{v1.0e}{1994/04/25}{Command added}
+% 
+%    This calculates by how much a float is oversize for the page and
+%    prints this in a warning message.
+%    
+%    \begin{macrocode}  
+\def \@largefloatcheck{%
+  \ifdim \ht\@currbox>\textheight
+    \@tempdima -\textheight
+    \advance \@tempdima \ht\@currbox
+%    \end{macrocode}
+% \changes{v1.0e}{1994/04/25}{Changed warning message to give more
+% info}
+%    \begin{macrocode}
+    \@latex@warning {Float too large for page by \the\@tempdima}%
+    \ht\@currbox \textheight
+  \fi
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%  \begin{macro}{\@dbflt}
+%  \begin{macro}{\@xdblfloat}
+% \changes{v1.1a}{1994/10/31}
+%     {Macros removed: \cs{@dbflt}, \cs{@xdblfloat}}
+% \changes{v1.1g}{1994/12/10}{Macros reinserted temporarily}
+%    
+%
+%    \begin{macrocode}
+\def\@dbflt#1{\@ifnextchar[{\@xdblfloat{#1}}{\@xdblfloat{#1}[tp]}}
+\def\@xdblfloat#1[#2]{%
+  \@xfloat{#1}[#2]\hsize\textwidth\linewidth\textwidth}
+%    \end{macrocode}
+%  \end{macro}
+%  \end{macro}
+%
+%
+% Moved to ltoutput 93/12/16
+%    \begin{macrocode}
+%\newcount\c@topnumber
+%\newcount\c@dbltopnumber
+%\newcount\c@bottomnumber
+%\newcount\c@totalnumber
+%    \end{macrocode}
+%
+% An analysis of |\@floatplacement|:
+%
+% This should be called whenever |\@colht| has been set.
+%    \begin{macrocode}
+\def\@floatplacement{\global\@topnum\c@topnumber
+    % Textpage bit, global:
+   \global\@toproom \topfraction\@colht
+   \global\@botnum  \c@bottomnumber
+   \global\@botroom \bottomfraction\@colht
+   \global\@colnum  \c@totalnumber
+    % Floatpage bit, local:
+   \@fpmin   \floatpagefraction\@colht}
+%    \end{macrocode}
+%
+%  \begin{macro}{\@dblfloatplacement}
+% \changes{LaTeX2e}{1993/12/05}{Command changed}
+% 
+%     This should be called only within a group.  Now changed to
+%     provide extra checks in |\@addtodblcol|, needed when processing a
+%     BANG float.
+%    
+%    \begin{macrocode}  
+\def \@dblfloatplacement {%
+%    \end{macrocode}
+%    Textpage bit: global, but need not be.
+%    \begin{macrocode}  
+  \global \@dbltopnum \c@dbltopnumber
+  \global \@dbltoproom \dbltopfraction\@colht
+%    \end{macrocode}
+%   This new bit uses |\@textmin| to locally store the amount of extra
+%   room in the column.   
+%    \begin{macrocode}
+  \@textmin \@colht
+  \advance \@textmin -\@dbltoproom
+%    \end{macrocode}
+%    Floatpage bit: must be local.
+%    \begin{macrocode}
+  \@fpmin \dblfloatpagefraction\textheight
+  \@fptop \@dblfptop
+  \@fpsep \@dblfpsep
+  \@fpbot \@dblfpbot
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+%
+% \begin{oldcomments}
+%   MARGINAL NOTES:
+%
+%   Marginal notes use the same mechanism as floats to communicate
+%   with the \output routine.  Marginal notes are distinguished from
+%   floats by having a negative placement specification.  The command
+%   \marginpar [LTEXT]{RTEXT} generates a marginal note in a parbox,
+%   using LTEXT if it's on the left and RTEXT if it's on the right.
+%   (Default is RTEXT = LTEXT.)  It uses the following parameters.
+%
+%   \marginparwidth : Width of marginal notes.
+%   \marginparsep   : Distance between marginal note and text.
+%        the page layout to determine how to move the marginal
+%        note into the margin.   E.g., \@leftmarginskip ==
+%        \hskip -\marginparwidth \hskip -\marginparsep .
+%   \marginparpush  :  Minimum vertical separation between \marginpar's
+%
+%  Marginal notes are normally put on the outside of the page
+%  if @mparswitch = true, and on the right if @mparswitch = false.
+%  The command \reversemarginpar reverses the side where they
+%  are put.  \normalmarginpar undoes \reversemarginpar.
+%  These commands have no effect for two-column output.
+%
+%  SURPRISE: if two marginal notes appear on the same line of
+%  text, then the second one could appear on the next page, in
+%  a funny position.
+%
+%
+%  \marginpar [LTEXT]{RTEXT} ==
+%   BEGIN
+%     if hmode then \@bsphack
+%                   \@floatpenalty := -10002
+%              else \@floatpenalty := -10003
+%     fi
+%     if inner
+%       then LaTeX Error: 'Not in outer paragraph mode.'
+%            \@floatpenalty := 0
+%       else if \@freelist has two elements:
+%              then get \@marbox, \@currbox  from \@freelist
+%                   \count\@marbox :=G -1
+%              else \@floatpenalty := 0
+%                   LaTeX Error: 'Too many unprocessed floats'
+%                   \@currbox, \@marbox := \@tempboxa    %%use \def
+%            fi
+%     fi
+%     if optional argument
+%       then %% \@xmpar ==
+%            \@savemarbox\@marbox{LTEXT}
+%            \@savemarbox\@currbox{RTEXT}
+%       else %% \@ympar ==
+%            \@savemarbox\@marbox{RTEXT}
+%            \box\@currbox :=G \box\@marbox
+%    fi
+%    \@xympar 
+%   END
+%
+% \reversemarginpar == BEGIN \@mparbottom   :=G 0
+%                            @reversemargin :=G true
+%                      END
+%
+% \normalmarginpar  == BEGIN \@mparbottom   :=G 0
+%                            @reversemargin :=G false
+%                      END
+%
+% \end{oldcomments}
+%
+% \begin{macro}{\marginpar}
+%    \begin{macrocode}
+\def\marginpar{%
+  \ifhmode
+    \@bsphack
+    \@floatpenalty -\@Mii
+  \else
+    \@floatpenalty-\@Miii
+  \fi
+  \ifinner
+    \@parmoderr
+    \@floatpenalty\z@
+  \else
+    \@next\@currbox\@freelist{}{}%
+    \@next\@marbox\@freelist{\global\count\@marbox\m@ne}%
+       {\@floatpenalty\z@
+        \@fltovf\def\@currbox{\@tempboxa}\def\@marbox{\@tempboxa}}%
+  \fi
+  \@ifnextchar [\@xmpar\@ympar}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@xmpar}
+%    \begin{macrocode}
+\long\def\@xmpar[#1]#2{%
+  \@savemarbox\@marbox{#1}%
+  \@savemarbox\@currbox{#2}%
+  \@xympar}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@ympar}
+%    \begin{macrocode}
+\long\def\@ympar#1{%
+  \@savemarbox\@marbox{#1}%
+  \global\setbox\@currbox\copy\@marbox
+  \@xympar}
+%    \end{macrocode}
+% \end{macro}
+% 
+% \begin{macro}{\@savemarbox}
+% \changes{v1.0b}{1994/03/12}
+%     {(DPC) Extra group for colour}
+% \changes{v1.0c}{1994/03/14}
+%     {(DPC) Use \cs{color@begingroup}}
+% \changes{v1.0d}{1994/04/18}
+%     {(DPC) Remove Colour support}
+% \changes{v1.1a}{1994/10/31}
+%     {(DPC/CAR) Extra box added for colour}
+% \changes{v1.1c}{1994/11/05}
+%         {Use new \cs{color@hbox} concept.}
+% \changes{v1.1f}{1994/11/21}{Changed to \cs{color@vbox} }
+% \changes{v1.1f}{1994/11/21}{Use \cs{@setnobreak} etc}
+% \changes{v1.1f}{1994/11/21}{Added \cs{@setminipage} etc}
+% \changes{v1.1f}{1994/11/21}{Added resetting of size and font}
+% \changes{v1.1m}{1995/05/25}{(CAR) Resettings moved to hook}
+% \changes{v1.1n}{1996/07/26}{remove unecessary \cs{global} before
+%                 \cs{@minipage...}}   
+%    \begin{macrocode}
+\long\def \@savemarbox #1#2{%
+  \global\setbox #1%
+    \color@vbox
+      \vtop{%
+        \hsize\marginparwidth
+        \@parboxrestore 
+        \@marginparreset
+        #2%
+        \@minipagefalse   
+        \outer@nobreak
+        }%
+    \color@endbox
+}
+%    \end{macrocode}
+% \end{macro}
+% 
+%  \begin{macro}{\@marginparreset}
+% \changes{v1.1f}{1994/11/21}{Macro added}
+%
+% The rational for allowing these normally global flags to be set
+% locally here, via |\@parboxrestore| was stated originally by
+% Donald Arsenau and extended by Chris Rowley.
+% It is because these flags are only set globally to
+% true by section commands, and these should never appear within
+% marginals or floats or, indeed, in any group; and they are only ever
+% set globally to false when they are definitely true.
+%
+% If anyone is unhappy with this argument then both flags should be
+% treated as in |\set@nobreak|; otherwise this command will be
+% redundant. 
+% \changes{v1.1p}{1996/10/24}
+%     {Added local settings of flags: dangerous!!}
+%    \begin{macrocode}
+\def \@marginparreset {%
+        \reset@font
+        \normalsize
+%        \let\if@nobreak\iffalse
+%        \let\if@noskipsec\iffalse
+%        \@setnobreak
+        \@setminipage
+}
+%    \end{macrocode}
+%  \end{macro}
+%
+% \begin{macro}{\@xympar}
+%    \begin{macrocode}
+%    \end{macrocode}
+% \changes{LaTeX2.09}{1992/03/18}
+%     {(RmS) added \cs{global}\cs{@ignorefalse}}
+% \changes{v1.0b}{1994/03/12}
+%     {(DPC) Extra bgroup for colour}
+% \changes{1.0c}{1994/03/14}
+%     {(DPC) Use \cs{color@begingroup}}
+% \changes{v1.1a}{1994/10/31}
+%     {(DPC/CAR) Extra box added since needed for floats}
+% \changes{v1.1c}{1994/11/05}
+%         {Use new \cs{color@hbox} concept.}
+% \changes{v1.1f}{1994/11/21}{Changed to \cs{color@vbox} }
+%     Setting the box here is done only because the code
+%     uses \cs{end@float}; it will be empty and gets discarded. 
+% \changes{v1.1o}{1996/08/02}{Remove \cs{global} before \cs{@ignore...}}
+%    \begin{macrocode}
+\def \@xympar{%
+  \ifnum\@floatpenalty <\z@\@cons\@currlist\@marbox\fi
+  \setbox\@tempboxa
+    \color@vbox
+      \vbox \bgroup
+  \end@float
+  \@ignorefalse
+  \@esphack
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\reversemarginpar}
+% \begin{macro}{\normalmarginpar}
+%    \begin{macrocode}
+\def\reversemarginpar{\global\@mparbottom\z@ \@reversemargintrue}
+\def\normalmarginpar{\global\@mparbottom\z@ \@reversemarginfalse}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%    \begin{macrocode}
+\message{footnotes,}
+%    \end{macrocode}
+%
+% \subsection{Footnotes}
+%
+% \begin{oldcomments}
+%
+%   \footnote{NOTE}       : User command to insert a footnote.
+%
+%   \footnote[NUM]{NOTE}: User command to insert a footnote numbered
+%                       NUM, where NUM is a number -- 1, 2,
+%                       etc.  For example, if footnotes are numbered
+%                       *, **, etc. within pages, then \footnote[2]{...}
+%                       produces footnote '**'.  This command does not
+%                       step the footnote counter.
+%
+%   \footnotemark[NUM] : Command to produce just the footnote mark in
+%                        the text, but no footnote.  With no argument,
+%                        it steps the footnote counter before generating
+%                        the mark.
+%
+%   \footnotetext[NUM]{TEXT} : Command to produce the footnote but
+%                              no mark.  \footnote is equivalent to
+%                              \footnotemark \footnotetext .
+%
+%   As in PLAIN, footnotes use \insert\footins, and the following
+%   parameters: 
+%
+%   \footnotesize   : Size-changing command for footnotes.
+%
+%   \footnotesep    : The height of a strut placed at the beginning of
+%                     every footnote.
+%   \skip\footins   : Space between main text and footnotes.  The rule
+%                     separating footnotes from text occurs in this
+%                     space. This space lies above the strut of height
+%                     \footnotesep which is at the beginning of the
+%                     first footnote.
+%   \footnoterule   : Macro to draw the rule separating footnotes from
+%                     text. It is executed right after a \vspace of
+%                     \skip\footins. It should take zero vertical
+%                     space--i.e., it should to a negative skip to
+%                     compensate for any positive space it occupies.
+%                     (See PLAIN.TEX.)
+%
+%   \interfootnotelinepenalty : Interline penalty for footnotes.
+%
+%   \thefootnote : In usual LaTeX style, produces the footnote number.
+%                  If footnotes are to be numbered within pages, then
+%                  the document style file must include an \@addtoreset
+%                  command to cause the footnote counter to be reset
+%                  when the page counter is stepped.  This is not a good
+%                  idea, though, because the counter will not always be
+%                  reset in time to ensure that the first footnote on a
+%                  page is footnote number one.
+%
+%   \@thefnmark : Holds the current footnote's mark--e.g., \dag or '1'
+%                 or 'a'. 
+%
+%   \@mpfnnumber  : A macro that generates the numbers for \footnote
+%                  and \footnotemark commands. It == \thefootnote
+%                  outside a minipage environment, but can be
+%                  changed inside to generate numbers for
+%                  \footnote's.
+%
+%   \@makefnmark : A macro to generate the footnote marker from
+%                 \@thefnmark The default definition was
+%                 \hbox{$^\@thefnmark$}.
+%
+%                 This is now replaced by
+%                 \textsuperscript{\@thefnmark}
+%
+%   \@makefntext{NOTE} :
+%        Must produce the actual footnote, using \@thefnmark as the mark
+%        of the footnote and NOTE as the text.  It is called when
+%        effectively  inside a \parbox, with \hsize = \columnwidth.
+%          For example, it might be as simple as
+%               $^{\@thefnmark}$  NOTE
+%
+% In a minipage environment, \footnote and \footnotetext are redefined
+% so that
+%    (a) they use the counter mpfootnote
+%    (b) the footnotes they produce go at the bottom of the minipage.
+% The switch is accomplished by letting \@mpfn == footnote or mpfootnote
+% and \thempfn == \thefootnote or \thempfootnote, and by redefining
+% \@footnotetext to be \@mpfootnotetext in the minipage.
+%
+% \footnote{NOTE}  ==
+%  BEGIN
+%    \stepcounter{\@mpfn}
+%    begingroup
+%       \protect == \noexpand
+%       \@thefnmark :=G eval (\thempfn)
+%    endgroup
+%    \@footnotemark
+%    \@footnotetext{NOTE}
+%  END
+%
+% \footnote[NUM]{NOTE} ==
+%  BEGIN
+%    begingroup
+%       \protect == \noexpand
+%       counter \@mpfn :=L NUM
+%       \@thefnmark :=G eval (\thempfn)
+%    endgroup
+%    \@footnotemark
+%    \@footnotetext{NOTE}
+%  END
+%
+% \footnotemark      ==
+%  BEGIN \stepcounter{footnote}
+%        begingroup
+%           \protect == \noexpand
+%           \@thefnmark :=G eval(\thefootnote)
+%        endgroup
+%        \@footnotemark
+%  END
+%
+% \footnotemark[NUM] ==
+%   BEGIN
+%       begingroup
+%         footnote counter :=L NUM
+%         \protect == \noexpand
+%        \@thefnmark :=G eval(\thefootnote)
+%       endgroup
+%       \@footnotemark
+%   END
+%
+% \@footnotemark ==
+%   BEGIN
+%    \leavevmode
+%    IF hmode THEN \@x@sf := \the\spacefactor FI
+%    \@makefnmark          % put number in main text
+%    IF hmode THEN \spacefactor := \@x@sf FI
+%   END
+%
+% \footnotetext      ==
+%    BEGIN begingroup \protect == \noexpand
+%                     \@thefnmark :=G eval (\thempfn)
+%          endgroup
+%          \@footnotetext
+%    END
+%
+% \footnotetext[NUM] ==
+%    BEGIN begingroup  counter \@mpfn :=L NUM
+%                      \protect == \noexpand
+%                      \@thefnmark :=G eval (\thempfn)
+%          endgroup
+%          \@footnotetext
+%    END
+%
+% \end{oldcomments}
+%
+%
+% \changes{v1.1l}{1995/05/24}{Moved definition of \cs{footins}
+%                   and \cs{footnoterule} from ltplain.}
+%
+% \begin{macro}{\footins}
+% \LaTeX\ does use the same insert for footnotes as PLAIN.
+%    \begin{macrocode}
+\newinsert\footins
+%    \end{macrocode}
+%
+% \LaTeX\ leaves these initializations for the |\footins| insert.
+%
+%    \begin{macrocode}
+\skip\footins=\bigskipamount % space added when footnote is present
+\count\footins=1000 % footnote magnification factor (1 to 1)
+\dimen\footins=8in % maximum footnotes per page
+%    \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\footnoterule}
+% \LaTeX\ keeps PLAIN \TeX's |\footnoterule| as the default.
+%
+%    \begin{macrocode}
+\def\footnoterule{\kern-3\p@
+  \hrule \@width 2in \kern 2.6\p@} % the \hrule is .4pt high
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\thefootnote}
+% \changes{v1.1i}{1995/05/16}{Streamlined parts of code.}
+%    \begin{macrocode}
+\@definecounter{footnote}
+\def\thefootnote{\@arabic\c@footnote}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\thempfootnote}
+% \changes{v1.1j}{1995/05/18}{Added \cs{itshape}.}
+% \changes{v1.1v}{2002/10/01}{Use braces around \cs{itshape} 
+%    to keep font change local (pr/3460).}
+%    The default display for the footnote counter in minipages is to
+%    use italic letters. We use |\itshape| not |\textit| as the latter
+%    would add an italic correction.
+%    \begin{macrocode}
+\@definecounter{mpfootnote}
+\def\thempfootnote{{\itshape\@alph\c@mpfootnote}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@makefnmark}
+% \changes{v1.1i}{1995/05/16}{Now use \cs{textsuperscript}.}
+% \changes{v1.1j}{1995/05/18}{Added \cs{normalfont}.}
+% \changes{v1.1k}{1995/05/20}{Moved \cs{normalfont} to
+%                             \cs{textsuperscript}}
+% \changes{v1.1k}{1995/05/20}{Moved \cs{normalfont} back
+%                        and use \cs{@textsuperscript}}
+%    Default definition.
+%    \begin{macrocode}
+%\def\@makefnmark{\hbox{$^{\@thefnmark}\m@th$}}
+\def\@makefnmark{\hbox{\@textsuperscript{\normalfont\@thefnmark}}}
+%    \end{macrocode}
+% \end{macro}
+%
+%  \begin{macro}{\textsuperscript}
+% \changes{v1.1i}{1995/05/16}{Command added./pr1503}
+% \changes{v1.1k}{1995/05/20}{Use \cs{normalfont}.}
+% \changes{v1.1l}{1995/05/24}{Use \cs{@textsuperscript}}
+%    This command provides superscript characters in the current text
+%    font. It's implementation might change!!!
+%    \begin{macrocode}
+\DeclareRobustCommand*\textsuperscript[1]{%
+  \@textsuperscript{\selectfont#1}}
+%    \end{macrocode}
+%  \end{macro}
+%
+%  \begin{macro}{\@textsuperscript}
+% \changes{v1.1l}{1995/05/24}{Command added.}
+% \changes{v1.1n}{1995/12/05}{Use \cs{ensuremath} for latex/1984.}
+% \changes{v1.1m}{1995/12/07}
+%      {Move \cs{m@th} out of the \cs{ensuremath} for latex/1984.}
+%    This command should not be used directly, but may be used to define
+%   other commands |\textsuperscript|, |\@makefnmark|. |#1| should
+%   always start with a font selection command, to activate the font
+%   size switch.
+%    \begin{macrocode}
+\def\@textsuperscript#1{%
+  {\m@th\ensuremath{^{\mbox{\fontsize\sf@size\z@#1}}}}}
+%    \end{macrocode}
+%  \end{macro}
+%
+% \begin{macro}{\footnotesep}
+%    \begin{macrocode}
+\newdimen\footnotesep
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\footnote}
+% \changes{LaTeX2.09}{1991/11/01}
+%         {(RmS) Added \cs{let}\cs{protect}\cs{noexpand} in
+%          \cs{footnote}, \cs{footnotemark},
+%               and \cs{footnotetext}, since \cs{xdef} is used}
+% \changes{LaTeX2.09}{1991/11/22}
+%         {(RmS) Added \cs{let}\cs{protect}\cs{noexpand} in
+%             \cs{@xfootnote}, \cs{@xfootnotemark},
+%               and \cs{@xfootnotetext}}
+% \changes{LaTeX2.09}{1992/11/26}
+%         {(RmS) Changed all to 
+%             `def`protect\string{`noexpand`protect`noexpand\string}}
+% \changes{v1.1b}{1994/11/26}
+%         {(ASAJ) Added \cs{protected@xdef}.}
+%
+%    \begin{macrocode}
+\def\footnote{\@ifnextchar[\@xfootnote{\stepcounter\@mpfn
+     \protected@xdef\@thefnmark{\thempfn}%
+     \@footnotemark\@footnotetext}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@xfootnote}
+%    \begin{macrocode}
+\def\@xfootnote[#1]{%
+   \begingroup 
+     \csname c@\@mpfn\endcsname #1\relax
+     \unrestored@protected@xdef\@thefnmark{\thempfn}%
+   \endgroup
+   \@footnotemark\@footnotetext}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@footnotetext}
+% \changes{LaTeX2.09}{1991/09/29}
+%     {(RmS) added \cs{reset@font}}
+% \changes{LaTeX2.09}{1992/11/26}
+%     {(RmS) added protection for \cs{edef}}
+% \changes{v1.0a}{1994/03/07}
+%     {(DPC) Extra group for colour}
+% \changes{v1.0c}{1994/03/14}
+%     {(DPC) Use \cs{color@begingroup}, add \cs{endgraf}}
+% \changes{v1.0d}{1994/04/18}
+%     {(DPC) Remove Colour support}
+% \changes{v1.0g}{1994/05/13}
+%     {(DPC) Add new style colour support: \cs{normalcolor}}
+% \changes{v1.0g}{1994/05/13}
+%     {(DPC) Use \cs{@finalstrut}}
+% \changes{v1.1a}{1994/10/31}
+%     {(DPC/CAR) Move colour setting to output routine}
+% \changes{v1.1b}{1994/11/04}
+%     {(ASAJ) Added \cs{protected@edef}.}
+% \changes{v1.1c}{1994/11/05}
+%         {Removed \cs{normalcolor} (again)}
+% \changes{v1.1t}{1997/11/19}
+%         {Missing percent, again}
+%    \begin{macrocode}
+\long\def\@footnotetext#1{\insert\footins{%
+    \reset@font\footnotesize
+    \interlinepenalty\interfootnotelinepenalty
+    \splittopskip\footnotesep
+    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+    \hsize\columnwidth \@parboxrestore
+    \protected@edef\@currentlabel{%
+       \csname p@footnote\endcsname\@thefnmark
+    }% 
+    \color@begingroup
+      \@makefntext{%
+        \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
+    \color@endgroup}}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\footnotemark}
+% \changes{v1.1b}{1994/11/04}{Added \cs{protected@xdef} to
+%    \cs{footnotemark}.} 
+%    \begin{macrocode}
+\def\footnotemark{%
+   \@ifnextchar[\@xfootnotemark
+     {\stepcounter{footnote}%
+      \protected@xdef\@thefnmark{\thefootnote}%
+      \@footnotemark}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@xfootnotemark}
+%    \begin{macrocode}
+\def\@xfootnotemark[#1]{%
+   \begingroup 
+      \c@footnote #1\relax
+      \unrestored@protected@xdef\@thefnmark{\thefootnote}%
+   \endgroup
+   \@footnotemark}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@footnotemark}
+% \changes{v1.1h}{1995/05/12}
+%         {Add \cs{nobreak} to allow hyphenation. latex/1605}
+%    \begin{macrocode}
+\def\@footnotemark{%
+  \leavevmode
+  \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi
+  \@makefnmark
+  \ifhmode\spacefactor\@x@sf\fi
+  \relax}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\footnotetext}
+%    \begin{macrocode}
+\def\footnotetext{%
+     \@ifnextchar [\@xfootnotenext
+       {\protected@xdef\@thefnmark{\thempfn}%
+    \@footnotetext}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@xfootnotenext}
+%    \begin{macrocode}
+\def\@xfootnotenext[#1]{%
+  \begingroup 
+     \csname c@\@mpfn\endcsname #1\relax
+     \unrestored@protected@xdef\@thefnmark{\thempfn}%
+  \endgroup
+  \@footnotetext}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\thempfn}
+% \begin{macro}{\@mpfn}
+%    \begin{macrocode}
+\def\@mpfn{footnote}
+\def\thempfn{\thefootnote}
+%</2ekernel>
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \Finale
+%
-- 
cgit v1.2.3

