home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Meeting Pearls 3
/
Meeting_Pearls_III.iso
/
Pearls
/
texmf
/
inputs
/
distribs
/
array
/
longtable.doc
< prev
next >
Wrap
Text File
|
1992-10-11
|
50KB
|
1,440 lines
% \iffalse
%
% This file is part of the array package.
% ---------------------------------------
%
% This file was contributed. In case of error please inform the
% original author.
%
% \fi
%\iffalse
%%% ====================================================================
%%% @LaTeX-style-file{
%%% filename = "longtable.sty",
%%% version = "3.04",
%%% date = "12 October 1992",
%%% time = "11:51:56 BST",
%%% author = "David Carlisle",
%%% address = "Computer Science Department
%%% Manchester University
%%% Oxford Road
%%% Manchester
%%% England
%%% M13 9PL",
%%% telephone = "+44 61 275 6139",
%%% FAX = "+44 61 275 6236",
%%% checksum = "08304 1428 6676 49483",
%%% email = "carlisle@cs.man.ac.uk (Internet)",
%%% codetable = "ISO/ASCII",
%%% keywords = "LaTeX, array, tabular, page",
%%% supported = "yes",
%%% docstring = "
%%%
%%% longtable.sty
%%%
%%% A LaTeX style option defining a multi-page version of tabular.
%%%
%%% The checksum field above was produced by
%%% Robert Solovay's checksum utility.",
%%% }
%%% ====================================================================
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Version 1 20-Dec-1990
%
% Version 2 17-June-1991
%
% * Works with the New Font Selection Scheme.
% * Works with Mittelbach's array.sty.
%
% Version 3 16-March-1992
%
% * New implementation. longtables may now start anywhere on the page.
% * The code is now self-documenting, using Mittelbach's doc.sty.
%
% Version 3.01 6-April-1992
%
% * (Michel Goossens) If a chunk ends on a line in which the first
% entry is empty, wierd errors occur. Added special begin and end
% groups, ({\ifnum0=`}\fi) stuff as explained in Appendix D.
%
% Version 3.02 9-April-1992
%
% * (Michel Goossens) Longtable fails if the table counter is reset
% during a document. Now use an internal counter, but still
% increment table so \caption and \label work out right.
%
% Version 3.03 25-June-1992
%
% * Add \@ifundefined{reset@font} so that the documentation may be
% processed with old versions of LaTeX.
% * Modify the treatment of \d@llar to match the new versions of
% Mittelbach's array.sty (array.sty v2.0h)
% * Added the standard file header proposed by Nelson Beebe
%
% Version 3.04 12-October-1992
%
% * (Jean-Pierre Drucbert) Longtable failed when used with
% \includeonly. Fixed by replacing the \newcount\LT@tables by
% \newcounter{LT@tables} as LaTeX counters are correctly preserved
% by \include. (This bug was introduced in V3.02, as previously the
% LaTeX counter `table' was used.)
% * Fix bug which stopped \kill working correctly in headings.
% * (Graham Gough) Made \setlongtables issue a warning message.
% * (Sebastian Rahtz) longtable ran out of memory on really long
% tables. Another bug introduced in V3! I had forgotten to call \par
% to force the page-breaker to consider page breaks after every
% chunk.
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\fi
%
\def\fileversion{v3.04}
\def\filedate{92/10/12}
\def\docdate {92/10/12}
%
% \CheckSum{863}
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
% Digits \0\1\2\3\4\5\6\7\8\9
% Exclamation \! Double quote \" Hash (number) \#
% Dollar \$ Percent \% Ampersand \&
% Acute accent \' Left paren \( Right paren \)
% Asterisk \* Plus \+ Comma \,
% Minus \- Point \. Solidus \/
% Colon \: Semicolon \; Less than \<
% Equals \= Greater than \> Question mark \?
% Commercial at \@ Left bracket \[ Backslash \\
% Right bracket \] Circumflex \^ Underscore \_
% Grave accent \` Left brace \{ Vertical bar \|
% Right brace \} Tilde \~}
%
%
%
% \makeatletter
% \@ifundefined{reset@font}{}{}
% \def\@oddfoot{\reset@font\rm\dotfill Page \thepage\dotfill}
% \def\@oddhead{\dotfill{\reset@font\tt longtable.sty}\dotfill}
% \def\ps@titlepage{\let\@oddhead\@empty}
% \makeatother
%
%
% \LTleft=\parindent
% \LTright=\fill
% \LTchunksize=10
%
% \title{longtable.sty\thanks
% {Version \fileversion, revised \filedate, documentation dated
% \docdate}}
% \author{D. P. Carlisle}
% \date{12 October 1992}
%
%
% \maketitle
%
% \begin{abstract}
% This style defines the {\tt longtable} environment, a multi-page
% version of {\tt tabular}.
% \end{abstract}
%
% ^^A \vbox to 100pt makes the page breaks the same on the first run.
% \vbox to 100pt{\listoftables\vss}
%
% \section{Introduction}
%
% {\tt longtable.sty} defines a new environment, \DescribeEnv{longtable}
% {\tt longtable}, which has most of the features of the {\tt tabular}
% environment, but produces tables which may be broken by \TeX's
% standard page-breaking algorithm. It also shares some features with
% the {\tt table} environment. In particular it uses the same counter,
% {\tt table}, and has a similar "\caption" command. Also, the standard
% "\listoftables" command lists tables produced by either the {\tt
% table} or {\tt longtable} environments.
%
% The following example uses most of the features of the {\tt longtable}
% environment. An edited listing of the input for this example appears
% in Section~\ref{listing}.
%
% \begin{longtable}{@{*}r||p{1in}@{*}}
% KILLED & LINE!!!! \kill
% \caption[An optional caption (for the list of tables)]{A long
% table\label{long}}\\
% \hline\hline
% \multicolumn{2}{@{*}c@{*}}%
% {This part appears at the top of the table}\\
% \sc First&\sc Second\\
% \hline\hline
% \endfirsthead
% \caption[]{(continued)}\\
% \hline\hline
% \multicolumn{2}{@{*}c@{*}}%
% {This part appears at the top of every other page}\\
% \bf First&\bf Second\\
% \hline\hline
% \endhead
% \hline
% This goes at the&bottom.\\
% \hline
% \endfoot
% \hline
% These lines will&appear\\
% in place of the & usual foot\\
% at the end& of the table\\
% \hline
% \endlastfoot
% {\tt longtable} columns are specified& in the \\
% same way as in the {\tt tabular}& environment.\\
% "@{*}r||p{1in}@{*}"& in this case.\\
% Each row ends with a& "\\" command.\\
% The "\\" command has an& optional\\
% argument, just as in& the\\
% {\tt tabular}&environment.\\[10pt]
% See the effect of "\\[10pt]"&?\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% Also "\hline" may be used,& as in {\tt tabular}.\\
% \hline
% That was a "\hline"&.\\
% \hline\hline
% That was "\hline\hline"&.\\
% \multicolumn{2}{||c||}%
% {This is a \tt\char`\\multicolumn\char`{2\char`}\char`{||c||\char`}}\\
% If a page break occurs at a "\hline" then& a line is drawn\\
% at the bottom of one page and at the& top of the next.\\
% \hline
% The "[t] [b] [c]" argument of {\tt tabular}& can not be used.\\
% The optional argument may be one of& "[l] [r] [c]"\\
% to specify whether the table should be& adjusted\\
% to the left, right& or centrally.\\
% \hline\hline
% Some lines may take up a lot of space, like this: &
% \begin{flushright} This last column is a ``p'' column so this
% ``row'' of the table can take up several lines. Note however that
% \TeX\ will never break a page within such a row. Page breaks only
% occur between rows of the table or at "\hline" commands.
% \end{flushright}\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% Lots of lines& like this.\\
% \hline
% Lots\footnote{This is a footnote.} of lines& like this.\\
% Lots of lines& like this\footnote{{\tt longtable} takes special
% precautions, so that footnotes may also be used in `p' columns.}\\
% \hline
% Lots of lines& like this.\\
% Lots of lines& like this.
% \end{longtable}
%
% \section{Chunk Size}
%
% \DescribeMacro{\LTchunksize}
% In order to \TeX\ multi-page tables, it is necessary to break up the
% table into smaller chunks, so that \TeX\ does not have to keep
% everything in memory at one time. By default {\tt longtable} uses 20
% rows per chunk, but this can be set by the user, with e.g.,
% "\LTchunksize=10". These chunks do not affect page breaking,
% thus if you are using a \TeX\ with a lot of memory, you can set
% "\LTchunksize" to be several pages of the table. \TeX\ will run
% faster with a large "\LTchunksize". However, if necessary, {\tt
% longtable} can work with "\LTchunksize=1", in which case the memory
% taken up is negligible.
% Note that if you use the commands for setting the table head or foot
% (see below), the "\LTchunksize" must be at least as large as the
% number of rows in each of the head or foot sections.
%
% This document specifies "\LTchunksize=10". If you look at the
% previous table, you will see that various parts of the table do not
% line up. Also \LaTeX\ will have printed a warning that the column
% widths had changed. {\tt longtable} writes information onto the {\tt
% .aux} file, so that it can line up the different chunks; however, it
% does not use this information unless a \DescribeMacro{\setlongtables}
% "\setlongtables" command is given before the table starts. It is best
% not to use this command until the document is nearly complete, as
% otherwise {\tt longtable} will leave enough room in each column for
% the widest entry {\it in all previous versions\/}. (At least since the
% {\tt .aux} file was last removed.)
%
% If you look at the preamble to this document, in the file {\tt
% longtable.drv}, you will see a line "%\setlongtables". If you delete
% the "%" and re-\LaTeX\ the document, all the tables will line up
% perfectly. (You may need to \LaTeX\ the document twice if the {\tt
% .aux} file has been destroyed.)
%
% \begin{table}
% \centering
% \begin{tabular}{||l|l|l||}
% \hline\hline
% A&\tt tabular& environment\\
% \hline
% within&a floating& \tt table\\
% \hline\hline
% \end{tabular}
% \caption{A floating table}
% \end{table}
%
% \section{Captions and Headings}
%
% At the start of the table one may specify lines which are to appear at
% the top of every page (under the headline, but before the other lines
% of the table).
% \DescribeMacro{\endhead}
% The lines are entered as normal, but the last "\\" command is
% replaced by a "\endhead" command.
% \DescribeMacro{\endfirsthead}
% If the first page should have a different heading, then this should be
% entered in the same way, and terminated with the "\endfirsthead"
% command. The "\LTchunksize" should be at least as large as the
% number of rows in the heading.
% \DescribeMacro{\endfoot}
% There are also "\endfoot" and "\endlastfoot"
%\DescribeMacro{\endlastfoot}
% commands which are used in the same way (at the {\em start\/} of the
% table) to specify rows (or an "\hline") to appear at the bottom of
% each page. In certain situations, you may want to place lines which
% logically belong in the table body at the end of the {\tt firsthead},
% or the beginning of the {\tt lastfoot}. This helps to control which
% lines appear on the first and last page of the table.
%
% \DescribeMacro{\caption}%
% The "\caption{...}" command is essentially equivalent to\\
% "\multicolumn{n}{c}{\parbox{\LTcapwidth}{...}}"\\
% where {\tt n} is the number of columns of the table. You may set the
% width of the caption with a command such as "\LTcapwidth=3in" in the
% preamble of your document. The default is 4in. "\caption" also
% writes the information to produce an entry in the list of tables. As
% with the "\caption" command in the {\tt figure} and {\tt table}
% environments, an optional argument specifies the text to appear in the
% list of tables if this is different from the text to appear in the
% caption. Thus the caption for table \ref{long} was specified as
% {\tt"\caption"[An optional caption (for the list of tables)]\{A long
% table"\label{long}"\}}.
%
% You may wish the caption on later pages to be different to that on the
% first page. In this case put the "\caption" command in the first
% heading, and put a subsidiary caption in a "\caption[]" command in
% the main heading. If the optional argument to "\caption" is empty,
% no entry is made in the list of tables. Alternatively, if you do not
% want the table number to be printed each time, use the "\caption*"
% command.
%
% You may use the "\label" command so that you can cross reference
% {\tt longtable}s with "\ref". Note however, that the "\label" command
% should not be used in a heading that may appear more than once. Place
% it either in the {\tt firsthead}, or in the body of the table. It
% should not be the {\em first\/} command in any entry.
%
% \section{Multicolumn entries}
%
% "\multicolumn" entries present a particular problem for {\tt
% longtable}.
% Suppose we were trying to typeset the following table,
% with"\LTchunksize=1".
%
% {\LTchunksize=1
%
% \begin{longtable}[c]{|l|l|}
% \caption{A good example\label{good}}\\
% \hline
% \multicolumn{2}{|c|}{A wide multicolumn entry}\\
% A wide column in a different chunk&narrow\\
% \hline
% \end{longtable}}
%
% If after the first chunk, {\tt longtable} had only seen the wide
% multicolumn entry, then it would think that the first column was very
% narrow (just containing the rules and glue specified by "|l|"). All
% the width of the multicolumn entry would be assumed to be in the
% second column. (This is a `feature' of \TeX's primitive "\halign"
% command.) {\tt longtable} would then pass the information that there
% is a wide second column to the second chunk, with the result that the
% final table would be much too wide, like this:
%
% {\LTchunksize=1
% \let\LTmulticolumn\multicolumn
%
% \begin{longtable}[c]{|l|l|}
% \caption{A bad example\label{bad}}\\
% \hline
%^^A
%^^A If you do not use the draft \multicolumn, you may have to use \kill
%^^A
%^^A A wide column in a different chunk&narrow\kill
%^^A
% \multicolumn{2}{|c|}{A wide multicolumn entry}\\
% A wide column in a different chunk&narrow\\
% \hline
% \end{longtable}}
%
% \DescribeMacro{\kill}%
% The solution to this problem used in Versions 1~and~2, was to use a
% "\kill" line. If a line is "\kill"ed, by using "\kill" rather than
% "\\" at the end of the line, it is used in calculating
% column widths, but removed from the final table. Thus entering a
% "\kill"ed copy of the second row before the multicolumn entry would
% mean that "\halign" `saw' the wide entry in the first column, and so
% did not widen the second column to make room for the multicolumn
% entry.
%
% In Version~3, a new solution has been introduced. If the saved row in
% the {\tt .aux} file is not being used, {\tt longtable} uses a special
% `draft' form of "\multicolumn", this modifies the definition, so the
% spanning entry is never considered to be wider than the columns it is
% spanning. So after the first pass, the {\tt .aux} file stores the
% widest normal entry for each column, no column has been widened due to
% "\span"ned columns. By default {\tt longtable} ignores the {\tt .aux}
% file, and so each run of \LaTeX\ is considered a first pass. Once the
% "\setlongtables" declaration is given, the saved row in the {\tt .aux}
% file, and the proper definition of "\multicolumn" are used. If any
% "\multicolumn" entry causes one of the columns to be widened, this
% information can not be passed back to earlier chunks, and so the table
% will not correctly line up until the third pass.
%
% This new system means that "\kill" is essentially redundant, however I
% think that some people will object to \LaTeX-ing a file three times,
% and so I have made it easy to revert to the Version~2 behaviour.
% Giving the declaration "\let\LTmulticolumn=\multicolumn" will stop
% multicolumn entries being set in draft mode, and so in order to avoid
% bad examples like Table~\ref{bad}, you will need to use "\kill" as
% discussed above.
%
% If you object even to \LaTeX-ing a file twice, you should
% disable "\LTmulticolumn" as above, and also make the first line of
% every {\tt longtable} a "\kill" line that contains the widest entry
% to be used in each column. All chunks will then line up on the first
% pass, and "\setlongtables" need not be used at all.
%
% \section{Adjustment}
%
% The last two tables also show the use of the optional argument. They
% are set with "\begin{longtable}[c] ..." specifying that the table
% should be centred. The other options are "[r]" "[l]", for right
% and left adjustment, respectively.
% \DescribeMacro{\LTleft}
% Normally centering is the default, but this document specifies
% \DescribeMacro{\LTright}
% \begin{verbatim}
% \LTleft=\parindent
% \LTright=\fill
% \end{verbatim}
% in the preamble, which means that the tables are set flush left, but
% indented by the usual paragraph indentation. Any lengths can be
% specified for these two parameters, but at least one of them should be
% a rubber length so that it fills up the width of the page, unless
% rubber lengths are added between the columns using the
% "\extracolumnsep" command.
%
% \section{Changes Since Version 2}
%
% There have been several changes made between versions 2 and 3.
% \begin{itemize}
% \item The mechanism for adding the head and foot of the table has been
% completely rewritten. With this new mechanism, {\tt longtable} does
% not need to issue a "\clearpage" at the start of the table, and so the
% table may start half way down a page. Also the "\endlastfoot" command
% which could not safely be implemented under the old scheme, has been
% added.
% \item {\tt longtable} now issues an error if started in the scope of
% "\twocolumn", or the {\tt multicols} environment.
% \item The separate documentation file {\tt longtable.tex} has been
% merged with the style file, {\tt longtable.sty} using Mittelbach's
% {\tt doc.sty}.
% \item Support for footnotes has been added.
% \item The treatment of "\multicolumn" has changed, making
% "\kill" lines unnecessary, at the price of sometimes requiring a
% third pass through \LaTeX.
% \item The "\newpage" command now works inside a {\tt longtable}.
% \end{itemize}
%
% In particular, the first of these changes means that Version~3 may not
% be able to exactly reproduce documents originally developed with
% Version~2, even if "\clearpage" commands are placed before and after
% the {\tt longtable} environment. For this reason, individual users,
% {\em not archives}, may want to retain Version~2 under a different
% name if they have documents using Version~2.
%
% \section{Summary}
%
% \small
% \begin{longtable}{@{}l@{\hspace{10pt}}l@{}}
% \caption[A summary of {\tt longtable} commands]%
% {\protect\normalsize A summary of {\tt longtable} commands}\\
% \multicolumn{2}{c}{\bf Parameters}\\
% \hline
% "\LTleft"&
% Glue to the left of the table. \hfill("\fill")\\
% "\LTright"&
% Glue to the right of the table. \hfill("\fill")\\
% "\LTpre"&
% Glue before the the table. \hfill("\bigskipamount")\\
% "\LTpost"&
% Glue after the the table. \hfill("\bigskipamount")\\
% "\LTchunksize"&
% The number of rows per chunk. \hfill(20)\\
% "\LTcapwidth"&
% The width of a parbox containing the caption.\hfill(4in)\\[5pt]
% \multicolumn{2}{c}{\bf Setlongtables}\\
% \hline
% "\setlongtables"& Use column widths from the previous run.\\[5pt]
% \multicolumn{2}{c}{{\bf
% Optional arguments to} \tt\char`\\begin\char`{longtable\char`}}\\
% \hline
% \it none& Position as specified by "\LTleft" and "\LTright",
% usually centre.\\
% \tt[c]& Centre the table.\\
% \tt[l]& Place the table flush left.\\
% \tt[r]& Place the table flush right.\\[5pt]
% \multicolumn{2}{c}{{\bf Commands available inside} \tt longtable}\\
% \hline
% "\endhead"&
% Specifies rows to appear at the top of every page.\\
% "\endfirsthead"&
% Specifies rows to appear at the top the first page.\\
% "\endfoot"&
% Specifies rows to appear at the bottom of every page.\\
% "\endlastfoot"&
% Specifies rows to appear at the bottom of the last page.\\
% "\kill"&
% Row is `killed', but is used in calculating widths.\\
% "\caption{foo}"&
% Caption `Table ?: foo', and a `foo' entry in the list of tables.\\
% "\caption[bar]{foo}"&
% Caption `Table ?: foo', and a `bar' entry in the list of tables.\\
% "\caption[]{foo}"&
% Caption `Table ?: foo', but no entry in the list of tables.\\
% "\caption*{foo}"&
% Caption `foo', but no entry in the list of tables.\\
% "\newpage"&
% Force a page break.
% \end{longtable}
%
% \clearpage
% \section{Verbatim highlights from Table \protect\ref{long}}
% \label{listing}
% \begingroup\catcode`\/=0
% \begin{verbatim}
% \begin{longtable}{@{*}r||p{1in}@{*}}
% KILLED & LINE!!!! \kill
% \caption[An optional caption /ldots]{A long table\label{long}}\\
% \hline\hline
% \multicolumn{2}{@{*}c@{*}}%
% {This part appears at the top of the table}\\
% \sc First&\sc Second\\
% \hline\hline
% \endfirsthead
% \caption[]{(continued)}\\
% \hline\hline
% \multicolumn{2}{@{*}c@{*}}%
% {This part appears at the top of every other page}\\
% \bf First&\bf Second\\
% \hline\hline
% \endhead
% \hline
% This goes at the&bottom.\\
% \hline
% \endfoot
% \hline
% These lines will&appear\\
% in place of the & usual foot\\
% at the end& of the table\\
% \hline
% \endlastfoot
% {\tt longtable} columns are specified& in the \\
% same way as in the {\tt tabular}& environment.\\
% /ldots
% \multicolumn{2}{||c||}{This is a /ldots}\\
% /ldots
% Lots of lines& like this.\\
% /ldots
% \hline
% Lots\footnote{/ldots} of lines& like this.\\
% Lots of lines& like this\footnote{/ldots}\\
% \hline
% Lots of lines& like this.\\
% /ldots
% \end{longtable}
% \end{verbatim}
% \endgroup
%
% \StopEventually{}
%
% \section{The Macros}
%
% Stop this file being read twice.
% \begin{macrocode}
%<*style>
\@ifundefined{LT@ignore@aux}{}{\endinput}
\wlog{Style-Option: `longtable' \fileversion
\space\space <\filedate> (D.P.C.)}
\wlog{English documentation dated \space <\docdate> (D.P.C.)}
% \end{macrocode}
%
% \subsection{User Setable Parameters}
%
% \begin{macro}{\LTleft}
% \begin{macro}{\LTright}
% Glue to the left and right of the table, default "\fill" (ie
% centred).
% \begin{macrocode}
\newskip\LTleft \LTleft=\fill
\newskip\LTright \LTright=\fill
% \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\LTpre}
% \begin{macro}{\LTpost}
% Glue before and after the {\tt longtable}. "\bigskip" by default.
% \begin{macrocode}
\newskip\LTpre \LTpre=\bigskipamount
\newskip\LTpost \LTpost=\bigskipamount
% \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\LTchunksize}
% Chunk size (The number of rows taken per "\halign"). Default 20.
% \begin{macrocode}
\newcount\LTchunksize \LTchunksize=20
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LTcapwidth}
% Width of the "\parbox" containing the caption. Default 4in.
% \begin{macrocode}
\newdimen\LTcapwidth \LTcapwidth=4in
% \end{macrocode}
% \end{macro}
%
% \subsection{Internal Parameters}
%
% \begin{macro}{\LT@head}
% \begin{macro}{\LT@firsthead}
% \begin{macro}{\LT@foot}
% \begin{macro}{\LT@lastfoot}
% Boxes for the table head and foot.
% \begin{macrocode}
\newbox\LT@head
\newbox\LT@firsthead
\newbox\LT@foot
\newbox\LT@lastfoot
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\LT@cols}
% Counter for number of columns.
% \begin{macrocode}
\newcount\LT@cols
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LT@rows}
% Counter for rows up to chunksize.
% \begin{macrocode}
\newcount\LT@rows
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\c@LT@tables}
% Counter for the tables, added in V3.02. Previous versions just used
% the \LaTeX\ counter {\tt table}, but this fails if {\tt table} is
% reset during a document, eg {\tt report} style resets it every
% chapter.
%
% This was changed from "\newcount\LT@tables" in V3.04. \LaTeX\ counters
% are preserved correctly when "\includeonly" is used. In the rest of
% the file "\LT@tables" has been replaced by "\c@LT@tables" without
% further comment. Don't ask what "\relax" is doing here!
% \begin{macrocode}
\newcounter{LT@tables}\relax
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LT@p@ftn}
% Temporary storage for footnote text in a `p' column.
% \begin{macrocode}
\newtoks\LT@p@ftn
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LT@end@pen}
% Special penalty for the end of the table. Done this way to save using
% up a count register.
% \begin{macrocode}
\mathchardef\LT@end@pen=30000
% \end{macrocode}
% \end{macro}
%
% \subsection{The {\tt longtable} environment}
%
% \begin{macro}{\longtable}
% Called by "\begin{longtable}". This implementation does not work in
% multiple column formats. "\par" added at V3.04.
% \begin{macrocode}
\def\longtable{%
\par
\ifx\multicols\@undefined\else
\ifnum\col@number>\@ne\@twocolumntrue\fi\fi
\if@twocolumn\@latexerr{longtable not in 1-column mode.}\@ehc\fi
\begingroup
% \end{macrocode}
% Check for an optional argument.
% \begin{macrocode}
\@ifnextchar[{\LT@array}{\LT@array[x]}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LT@array}
% Start setting the alignment. Based on "\@array" from {\tt latex.tex}
% and {\tt array.sty}.
%
% Since Version 3.02, {\tt longtable} has used the internal counter
% "\c@LT@tables". The \LaTeX\ counter {\tt table} is still incremented
% so that "\caption" works correctly.
% \begin{macrocode}
\def\LT@array[#1]#2{%
\refstepcounter{table}\global\advance\c@LT@tables\@ne
% \end{macrocode}
% Set up the glue around the table if an optional argument given.
% \begin{macrocode}
\if l#1\LTleft\z@ \LTright\fill
\else\if r#1\LTleft\fill \LTright\z@
\else\if c#1\LTleft\fill \LTright\fill \fi\fi\fi
% \end{macrocode}
% Set up these internal commands for {\tt longtable}.
% \begin{macrocode}
\global\let\LT@mcw@rn\relax\let\LT@mc\multicolumn
\let\\\LT@tabularcr\def\newpage{\noalign{\break}}%
\let\hline\LT@hline \let\kill\LT@kill\let\caption\LT@caption
\@tempdima\ht\strutbox
% \end{macrocode}
% Set up internal commands according to Lamport or Mittelbach.
% \begin{macrocode}
\ifx\extrarowheight\LT@undef
% \end{macrocode}
% Initialise these commands as in {\tt latex.tex}.
% \begin{macrocode}
\let\@acol\@tabacol
\let\@classz\@tabclassz \let\@classiv\@tabclassiv
\def\@startpbox{\vtop\LT@startpbox}\let\LT@LL@FM@cr\@tabularcr
\else
% \end{macrocode}
% Initialise these commands as in {\tt array.sty}. "\d@llar" was
% replaced by "\d@llarbegin" "\d@llarend" in V3.03 to match {\tt
% array.sty} V2.0h. We do not need to set "\d@llarbegin" and
% "\d@llarend" as array.sty gives them the correct values at the top
% level.
% \begin{macrocode}
\advance\@tempdima\extrarowheight
\col@sep\tabcolsep
\let\@startpbox\LT@startpbox\let\LT@LL@FM@cr\@arraycr
\fi
% \end{macrocode}
% The rest of this macro is mainly based on {\tt array.sty}, but should
% work for the standard {\tt tabular} too.
% \begin{macrocode}
\setbox\@arstrutbox\hbox{\vrule
\@height \arraystretch \@tempdima
\@depth \arraystretch \dp \strutbox
\@width \z@}%
\let\@sharp##\let\protect\relax
% \end{macrocode}
% Interpret the preamble argument.
% \begin{macrocode}
\begingroup
\@mkpream{#2}%
% \end{macrocode}
% We need to rename "\@preamble" here as F.M.'s scheme uses
% "\global", and we may need to nest "\@mkpream", eg for
% "\multicolumn"
% or an {\tt array}. We do not need to worry about nested longtables
% though!
% \begin{macrocode}
\xdef\LT@bchunk{\global\LT@rows\z@\setbox\z@\vbox\bgroup
\tabskip\LTleft\halign to \hsize\bgroup
\tabskip\z@ \@arstrut \@preamble \tabskip\LTright \cr}%
\endgroup
% \end{macrocode}
% Find out how many columns we have (store in "\LT@cols").
% \begin{macrocode}
\expandafter\LT@nofcols\LT@bchunk&\LT@nofcols
% \end{macrocode}
% Get the saved row from "\LT@i"\ldots"\LT@ix" (from the {\tt
% .aux} file), or make a new blank row.
% \begin{macrocode}
\LT@make@row
% \end{macrocode}
% A few more internal commands for {\tt longtable}.
% \begin{macrocode}
\let\@endpbox\LT@endpbox
\m@th\let\par\@empty
\everycr{}\lineskip\z@\baselineskip\z@
% \end{macrocode}
% Start the first chunk.
% \begin{macrocode}
\LT@bchunk}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LT@start}
% This macro starts the process of putting the table on the current
% page. It is not called until either a "\\" or "\endlongtable" command
% ends a chunk, as we do not know until that point which of the four
% possible head or foot sections have been specified.
%
% It begins by redefining itself, so that the table is only started
% once! Until V3.04, was redefined to "\relax", now use "\endgraf" to
% force the page-breaker to wake up.
% \begin{macrocode}
\def\LT@start{%
\let\LT@start\endgraf
\endgraf\penalty\z@\vskip\LTpre
% \end{macrocode}
% Start a new page if there is not enough room for the table head, foot,
% and one extra line.
% \begin{macrocode}
\dimen@\pagetotal
\advance\dimen@ \ht\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
\advance\dimen@ \dp\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
\advance\dimen@ \ht\LT@foot
\advance\dimen@ \ht\@arstrutbox
\advance\dimen@ \dp\@arstrutbox
\advance\dimen@ -\pagegoal
\ifdim \dimen@>\z@\vfil\break\fi
% \end{macrocode}
% If the foot is non empty, reduce the "\vsize" accordingly.
% \begin{macrocode}
\ifvoid\LT@foot\else
\advance\vsize-\ht\LT@foot
\dimen@\pagegoal\advance\dimen@-\ht\LT@foot\pagegoal\dimen@
\maxdepth=\z@
\fi
% \end{macrocode}
% Put the table head on the page, and then switch to the new output
% routine.
% \begin{macrocode}
\ifvoid\LT@firsthead\copy\LT@head\else\box\LT@firsthead\fi
\output{\LT@output}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\endlongtable}
% Called by "\end{longtable}".
% \begin{macrocode}
\def\endlongtable{%
% \end{macrocode}
% Essentially add a final "\\".
% \begin{macrocode}
\LT@echunk
\LT@start
\unvbox\z@
\LT@get@widths
% \end{macrocode}
% Write the dummy row to the {\tt .aux} file.
% \begin{macrocode}
\immediate\write\@auxout
% \end{macrocode}
% Since Version 3.02, {\tt longtable} has used the internal counter
% "\c@LT@tables" rather than the \LaTeX\ counter {\tt table}.
% \begin{macrocode}
{\gdef\string\LT@\romannumeral\c@LT@tables{\LT@save@row}}%
% \end{macrocode}
% Issue a warning if a "\multicolumn" has been set in draft mode.
% \begin{macrocode}
\LT@mcw@rn
% \end{macrocode}
% If the last chunk has different widths than the first, warn the user.
% \begin{macrocode}
\ifx\LT@save@row\LT@@save@row\else
\@warning{Column widths have changed in table \thetable}\fi
% \end{macrocode}
% Force one more go with the {\tt longtable} ouput routine.
% \begin{macrocode}
\endgraf\penalty -\LT@end@pen
% \end{macrocode}
% Now close the group to return to the standard routine.
% \begin{macrocode}
\endgroup
% \end{macrocode}
% Reset "\@mparbottom" to allow marginpars close to the end of the
% table.\footnote{This can not be the correct. However if it is omitted,
% there is a problem with marginpars, for example on page~3 of this
% document. Any Output Routine Gurus out there?}
% \begin{macrocode}
\global\@mparbottom\z@
\pagegoal\vsize
\endgraf\penalty\z@\addvspace\LTpost
% \end{macrocode}
% Footnotes. As done in {\tt multicol.sty}.
% \begin{macrocode}
\ifvoid\footins\else\insert\footins{}\fi}
% \end{macrocode}
% \end{macro}
%
% \subsection{Counting Columns}
%
% Columns are counted by examining "\@preamble", rather than simply
% getting "\@mkpream" to increment the counter as it builds the
% preamble so that this style works with many of the styles which add
% extra column specifiers to \LaTeX's standard ones.
%
% Version~1 counted "\@sharp"'s to calculate the number of columns,
% this was changed for Version~2 as it does not work with the NFSS. Now
% count "&"'s. ({\tt lfonts.new} defines "\@tabclassz" so that
% "\@sharp" is inside a group.)
%
% \begin{macro}{\LT@nofcols}
% Find the next "&", then look ahead to see what is next.
% \begin{macrocode}
\def\LT@nofcols#1&{\futurelet\LT@next\LT@n@fcols}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LT@n@fcols}
% Add one, then stop at an "\LT@nofcols" or look for the next
% "&". The "\expandafter" trick was added in Version~3, also the
% name changed from "\@LT@nofcols" to preserve the "\LT@" naming
% convention.
% \begin{macrocode}
\def\LT@n@fcols{\advance\LT@cols\@ne
\ifx\LT@next\LT@nofcols\expandafter\@gobble
\else\expandafter\LT@nofcols\fi}
% \end{macrocode}
% \end{macro}
%
% \subsection{The {\tt \bslash\bslash} and {\tt \bslash kill} Commands}
%
% \begin{macro}{\LT@tabularcr}
% The internal definition of "\\".
% \begin{macrocode}
\def\LT@tabularcr{%
% \end{macrocode}
% Increment the counter, and do {\tt tabular}'s "\\" or finish the
% chunk. The "\expandafter" trick was added in Version~3.
% \begin{macrocode}
\global\advance\LT@rows\@ne \ifnum\LT@rows=\LTchunksize
\expandafter\LT@t@bularcr\else\expandafter\LT@LL@FM@cr\fi}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LT@t@bularcr}
% This definition also accepts "\\*", which acts in the same way as
% "\\". {\tt tabular} does this, but {\tt longtable} probably ought to
% make "\\*" prevent page breaking.
% "{\ifnum0=`}\fi" added in version 3.01, required if the first entry
% is empty.
% \begin{macrocode}
\def\LT@t@bularcr{{\ifnum0=`}\fi
\@ifstar{\LT@xtabularcr}{\LT@xtabularcr}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LT@xtabularcr}
% This justs looks for an optional argument.
% \begin{macrocode}
\def\LT@xtabularcr{\@ifnextchar[{\LT@argtabularcr}{\LT@ntabularcr}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LT@ntabularcr}
% The version with no optional argument.
% "\ifnum0=`{\fi}" added in version 3.01.
% \begin{macrocode}
\def\LT@ntabularcr{%
\ifnum0=`{\fi}%
\LT@echunk
\LT@start
\unvbox\z@
\LT@get@widths
\LT@bchunk}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LT@argtabularcr}
% The version with an optional argument.
% "\ifnum0=`{\fi}" added in version 3.01.
% \begin{macrocode}
\def\LT@argtabularcr[#1]{%
\ifnum0=`{\fi}%
\ifdim #1>\z@
\unskip\@xargarraycr{#1}\else \@yargarraycr{#1}\fi
% \end{macrocode}
% Add the dummy row, and finish the "\halign".
% \begin{macrocode}
\LT@echunk
\LT@start
\unvbox\z@
\LT@get@widths
\LT@bchunk}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LT@echunk}
% This ends the current chunk, and removes the dummy row.
% \begin{macrocode}
\def\LT@echunk{%
\crcr\LT@save@row\cr\egroup
\global\setbox\@ne\lastbox
\egroup}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LT@kill}
% This ends the current chunk as above, but strips off two rows, the
% `dummy row' and the `killed row' before starting the next chunk.
% Since V3.04, the old chunk is reboxed at the start of the box
% containing the next chunk. This allows "\kill" to be used in headers,
% which must be processed in a single box.
% \begin{macrocode}
\def\LT@kill{%
\LT@echunk
\LT@get@widths
\expandafter\LT@rebox\LT@bchunk}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LT@rebox}
% Drop the old chunk (box0) back at the top of the new chunk, removing
% the killed row. This macro added at V3.04.
% \begin{macrocode}
\def\LT@rebox#1\bgroup{#1\bgroup\unvbox\z@\unskip\setbox\z@=\lastbox}%
% \end{macrocode}
% \begin{macrocode}
% \end{macrocode}
% \end{macro}
%
% \subsection{The Dummy Row}
%
% \begin{macro}{\LT@blank@row}
% Create a blank row if we are not using the info in the .aux file. Also
% use the draft form of "\multicolumn".
% \begin{macrocode}
\def\LT@blank@row{%
\let\multicolumn\LTmulticolumn
{\xdef\LT@save@row{\omit}%
\loop
\advance\LT@cols\m@ne
\ifnum\LT@cols>\z@
\xdef\LT@save@row{\LT@save@row&\omit}%
\repeat}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LT@make@row}
% By default do not use information in the {\tt .aux} file.
% \begin{macrocode}
\let\LT@make@row\LT@blank@row
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\setlongtables}
% Redefine "\LT@make@row" to use information in the {\tt .aux} file,
% if there is a saved row for this table.
%
% Since Version 3.02, {\tt longtable} has used the internal counter
% "\c@LT@tables" rather than the \LaTeX\ counter {\tt table}.
% The warning message was added at V3.04, as was the "\global", to stop
% save-stack overflow.
% \begin{macrocode}
\def\setlongtables{%
\typeout{***^^J%
\noexpand\setlongtables is in force.^^J%
If you have edited the file since the last LaTeX run^^J%
incorrect column widths, or even errors may be produced.^^J%
***}%
\def\LT@make@row{%
\global\expandafter\let\expandafter\LT@save@row
\csname LT@\romannumeral\c@LT@tables\endcsname
\ifx\LT@save@row\relax\LT@blank@row\fi}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LT@get@widths}
% This is the heart of {\tt longtable}. If it were not for the table
% head and foot, this macro together with the modified "\\" command
% would form the basis of quite a simple little style file for long
% tables. It is closely modelled on the "\endvrulealign" macro of
% appendix D of the \TeX{}Book.
% \begin{macrocode}
\def\LT@get@widths{%
% \end{macrocode}
% "\global" added at V3.04, to stop save-stack overflow.
% \begin{macrocode}
\global\let\LT@save@row\end
% \end{macrocode}
% Loop through the last row, discarding glue, and saving box widths. At
% V3.04 changed the scratch box to 2, as the new "\kill" requires that
% "\box0" be preserved.
% \begin{macrocode}
\setbox\tw@=\hbox{\unhbox\@ne
\loop
\unskip
\setbox\tw@=\lastbox
\ifhbox\tw@
\LT@def@row
\repeat}%
% \end{macrocode}
% Remember the widths if we are in the first chunk.
% \begin{macrocode}
\ifx\LT@@save@row\LT@undef\let\LT@@save@row\LT@save@row\fi}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LT@def@row}
% Add a column to the dummy row. Name changed from "\defLT@save@row"
% in Version~3, to preserve the "\LT@" naming convention.
% \begin{macrocode}
\def\LT@def@row{\ifx\LT@save@row\end
\xdef\LT@save@row{\omit\kern\the\wd\tw@}\else
\xdef\LT@save@row{\omit\kern\the\wd\tw@&\LT@save@row}\fi}
% \end{macrocode}
% \end{macro}
%
% \subsection{The {\tt\bslash hline} Command}
%
% \begin{macro}{\LT@hline}
% "\hline" and "\hline\hline" both produce {\em two\/} lines.
% The only difference being the glue and penalties between them.
% This is so that a page break at a "\hline" produces a line on both
% pages.\footnote
% {{\tt longtable} has always done this, but perhaps it would be
% better if hlines were {\em omitted\/} at a page break, as the head and
% foot usually put a hline here anyway.}
% Also this "\hline" is more like a "\cline[1-\LT@cols]".
% {\tt tabular}'s "\hline" would draw lines the full width of the page.
% \begin{macrocode}
\def\LT@hline{\noalign{\ifnum0=`}\fi
\penalty\@M
\futurelet\LT@next\LT@@hline}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LT@@hline}
% This code is based on "\cline". Two copies of the line are produced,
% as described above.
% \begin{macrocode}
\def\LT@@hline{%
\ifx\LT@next\hline
\global\let\LT@next\@gobble
\gdef\LT@sep{\penalty-\@medpenalty\vskip\doublerulesep}%
\else
\global\let\LT@next\empty
\gdef\LT@sep{\penalty-\@lowpenalty\vskip-\arrayrulewidth}%
\fi\ifnum0=`{\fi}%
\multispan\LT@cols
\unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr
\noalign{\LT@sep}%
\multispan\LT@cols
\unskip\leaders\hrule\@height\arrayrulewidth\hfill\cr
\noalign{\penalty\@M}%
\LT@next}
% \end{macrocode}
% \end{macro}
%
% \subsection{Captions}
%
% \begin{macro}{\LT@caption}
% The caption is "\multicolumn{\LT@cols}{c}{"\meta{a parbox with the
% table's caption}"}"
% \begin{macrocode}
\def\LT@caption{\noalign\bgroup
\@ifnextchar[{\egroup\LT@c@ption}{\LT@capti@n}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LT@c@ption}
% Caption command (with [optional argument]). "\protect" added in
% Version~3.
% \begin{macrocode}
\def\LT@c@ption[#1]#2{%
\LT@mkcaption{Table \thetable: #2}%
\def\@tempa{#1}\ifx\@tempa\empty\else
{\let\\\space
\addcontentsline{lot}{table}{\protect\numberline{\thetable}{#1}}}%
\fi}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LT@capti@n}
% Caption command (no [optional argument])
% \begin{macrocode}
\def\LT@capti@n{\@ifstar{\egroup\LT@mkcaption}{\egroup\LT@@c@ption}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LT@@c@ption}
% Caption command (no [optional argument] or *). "\protect" added in
% Version~3.
% \begin{macrocode}
\def\LT@@c@ption#1{%
\LT@mkcaption{Table \thetable: #1}%
{\let\\\space
\addcontentsline{lot}{table}{\protect\numberline{\thetable}{#1}}}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LT@mkcaption}
% Put the caption in a box of width 0pt, so that it never affects the
% column widths. Inside that is a "\parbox" of width
% "\LTcapwidth".
% \begin{macrocode}
\def\LT@mkcaption#1{%
\LT@mc{\LT@cols}{c}{\hbox to \z@{\hss\parbox[t]{\LTcapwidth}{%
% \end{macrocode}
% {\tt article.sty}'s "\@makecaption" (without the 10pt skip at the
% top).
% \begin{macrocode}
\setbox\@tempboxa\hbox{#1}%
\ifdim \wd\@tempboxa >\hsize #1
\else \hbox to\hsize{\hfil\box\@tempboxa\hfil}\fi
\endgraf\vskip\baselineskip}\hss}}}
% \end{macrocode}
% \end{macro}
%
% \subsection{The Output Routine}
%
% The method used here for interfacing a special purpose output routine
% to the standard \LaTeX\ routine is lifted straight out of
% F.~Mittelbach's {\tt multicol.sty}.
%
% \begin{macro}{\LT@output}
% Actually this is not so bad, with FM leading the way.
% \begin{macrocode}
\def\LT@output{%
\ifnum\outputpenalty <-\@Mi
\ifnum\outputpenalty > -\LT@end@pen
% \end{macrocode}
% If this was a float or a marginpar we complain.
% \begin{macrocode}
\@latexerr{floats and marginpars not allowed in a longtable}\@ehc
\else
% \end{macrocode}
% We have reached the end of the table, on the scroll at least,
% \begin{macrocode}
\setbox\z@\vbox{\unvbox\@cclv}%
\ifdim \ht\LT@lastfoot>\ht\LT@foot
% \end{macrocode}
% The last foot might not fit, so:\footnote{An alternative would be to
% vsplit off a bit of the last chunk, so that the last page did not just
% have head and foot sections, but it is hard to do this in a consistent
% manner.}
% \begin{macrocode}
\dimen@=\pagegoal
\advance\dimen@-\ht\LT@lastfoot
\ifdim\dimen@<\ht\z@
\setbox\@cclv=\vbox{\unvbox\z@\copy\LT@foot\vss}%
\@makecol
\@outputpage
\setbox\z@\vbox{\box\LT@head}%
% \end{macrocode}
% End of "\ifdim\dimen@<\ht\@cclc".
% \begin{macrocode}
\fi
% \end{macrocode}
% End of "\ifdim \ht\LT@lastfoot > \ht\LT@foot".
% \begin{macrocode}
\fi
\vbox
{\unvbox\z@\box\ifvoid\LT@lastfoot\LT@foot\else\LT@lastfoot\fi}%
% \end{macrocode}
% End of "\ifnum\outputpenalty > -\LT@end@pen".
% \begin{macrocode}
\fi
% \end{macrocode}
% Else "\outputpenalty > -\@Mi".
% \begin{macrocode}
\else
% \end{macrocode}
% If we have not reached the end of the table,
% \begin{macrocode}
\setbox\@cclv=\vbox{\unvbox\@cclv\copy\LT@foot\vss}%
\@makecol
\@outputpage
% \end{macrocode}
% Put the head at the top of the next page.
% \begin{macrocode}
\copy\LT@head
% \end{macrocode}
% End of "\ifnum\outputpenalty <-\@Mi".
% \begin{macrocode}
\fi}
% \end{macrocode}
% \end{macro}
%
% \subsection{Commands for the the table head and foot}
%
% \begin{macro}{\LT@end@hd@ft}
% The core of "\endhead" and friends. Store the current chunk in the
% box specified by "#1". Issue an error if the table has already
% started. Then start a new chunk.
% \begin{macrocode}
\def\LT@end@hd@ft#1{%
\LT@echunk
% \end{macrocode}
% Changed from "\relax" to "\endgraf" at V3.04, see "\LT@start".
% \begin{macrocode}
\ifx\LT@start\endgraf\@latexerr
{Longtable head or foot not at start of table}{Increase chunksize}\fi
\setbox#1\box\z@
\LT@get@widths
\LT@bchunk}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\endfirsthead}
% \begin{macro}{\endhead}
% \begin{macro}{\endfoot}
% \begin{macro}{\endlastfoot}
% Call "\LT@end@hd@ft" with the appropriate box.
% \begin{macrocode}
\def\endfirsthead{\LT@end@hd@ft\LT@firsthead}
\def\endhead{\LT@end@hd@ft\LT@head}
\def\endfoot{\LT@end@hd@ft\LT@foot}
\def\endlastfoot{\LT@end@hd@ft\LT@lastfoot}
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \subsection{The {\tt\bslash multicolumn} command}
%
% \begin{macro}{\LTmulticolumn}
% A temporary definition of "\multicolumn" to use if we are ignoring
% the saved row in the {\tt .aux} file.
% Hide the width of the entry with "\hidewidth\null", and warn the
% user at the end that this `draft' version of "\multicolumn" has been
% used.
% \begin{macrocode}
\def\LTmulticolumn#1#2#3{%
\LT@mc{#1}{#2}{#3}\hidewidth\null
\global\let\LT@mcw@rn\LT@mcwarn}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LT@mcwarn}
% Typeout a warning if "\LTmulticolumn" has been used.
% \begin{macrocode}
\def\LT@mcwarn{\@warning{%
\string\multicolumn\space set in draft mode in table \thetable}}
% \end{macrocode}
% \end{macro}
%
% \subsection{Footnotes}
%
% The standard "\footnote" command works in a {\tt c} column, but we
% need to modify the definition in a {\tt p} column to overcome the
% extra level of boxing. These macros are based on {\tt array.sty}, but
% should be OK for the standard {\tt tabular}.
%
% \begin{macro}{\LT@startpbox}
% Add extra code to switch the definition of "\@footnotetext".
% \begin{macrocode}
\def\LT@startpbox#1{\bgroup
\let\@footnotetext\LT@p@ftntext\hsize #1 \@arrayparboxrestore
\vrule \@height \ht\@arstrutbox \@width \z@}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LT@endpbox}
% After the parbox is closed, expand "\LT@p@ftn" which will execute a
% series of\\
% "\footnotetext["\meta{num}"]{"\meta{note}"}"\\
% commands. After being lifted out of the parbox, they can migrate on
% their own from here.
% \begin{macrocode}
\def\LT@endpbox{\unskip\vrule \@width\z@ \@depth \dp\@arstrutbox \egroup
\the\LT@p@ftn\global\LT@p@ftn{}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\LT@p@ftntext}
% Inside the `p' column, just save up the footnote text in a token
% register.
% \begin{macrocode}
\def\LT@p@ftntext#1{%
\edef\@tempa{\the\LT@p@ftn\noexpand\footnotetext[\the\c@footnote]}%
\global\LT@p@ftn\expandafter{\@tempa{#1}}}%
% \end{macrocode}
% \end{macro}
%
% \begin{macrocode}
%</style>
% \end{macrocode}
%
% \section{The documentation driver file}
%
% The next bit of code contains the documentation driver file for
% \TeX{}, i.e., the file that will produce the documentation you are
% currently reading. It will be extracted from this file by the {\tt
% docstrip} program.
% \begin{macrocode}
%<+driver>\documentstyle[longtable,doc]{article}
%<+driver>
%<+driver>% dimensions from ltugboat.sty:
%<+driver>
%<+driver>\setlength\textwidth{31pc} \setlength\textheight{54pc}
%<+driver>\parindent 0pt \parskip 2pt plus 1pt minus 1pt
%<+driver>\setlength{\oddsidemargin}{8pc}
%<+driver>\setlength{\marginparwidth}{8pc}
%<+driver>\setlength{\topmargin}{-2.5pc}
%<+driver>\setlength{\headsep}{20pt}
%<+driver>\setlength{\columnsep}{1.5pc}
%<+driver>\setlength{\columnwidth}{18.75pc}
%<+driver>
%<+driver>\MakeShortVerb{\"} % "\foo" acts like \verb+\foo+
%<+driver>
%<+driver>\DisableCrossrefs
%<+driver>
%<+driver>\CodelineIndex % Index code by line number
%<+driver>
%<+driver>%\OnlyDescription % comment out for implementation details
%<+driver>
%<+driver>%\setlongtables % Uncomment this line to cause longtables
%<+driver> % to line up correctly.
%<+driver>
%<+driver>\setcounter{StandardModuleDepth}{1}
%<+driver>
%<+driver>\begin{document}
%<+driver> \DocInput{longtable.doc}
%<+driver>\end{document}
% \end{macrocode}
%
%
% \Finale
\endinput