summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/combine/combine.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/combine/combine.dtx')
-rw-r--r--Master/texmf-dist/source/latex/combine/combine.dtx3972
1 files changed, 3972 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/combine/combine.dtx b/Master/texmf-dist/source/latex/combine/combine.dtx
new file mode 100644
index 00000000000..080791c6b8b
--- /dev/null
+++ b/Master/texmf-dist/source/latex/combine/combine.dtx
@@ -0,0 +1,3972 @@
+% \iffalse meta-comment
+%
+% combine.dtx
+% Copyright 2000 Peter R. Wilson
+%
+% This program is provided under the terms of the
+% LaTeX Project Public License distributed from CTAN
+% archives in directory macros/latex/base/lppl.txt.
+%
+% Author: Peter Wilson (CUA) (now at: peter.r.wilson@boeing.com)
+%
+%<*driver>
+\documentclass{ltxdoc}
+\EnableCrossrefs
+\CodelineIndex
+%%\OnlyDescription
+\pagestyle{headings}
+\renewcommand{\MakeUppercase}[1]{#1}
+\setcounter{StandardModuleDepth}{1}
+\begin{document}
+ \DocInput{combine.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+%
+% \CheckSum{3664}
+%
+% \DoNotIndex{\',\.,\@M,\@@input,\@addtoreset,\@arabic,\@badmath}
+% \DoNotIndex{\@centercr,\@cite}
+% \DoNotIndex{\@dotsep,\@empty,\@float,\@gobble,\@gobbletwo,\@ignoretrue}
+% \DoNotIndex{\@input,\@ixpt,\@m}
+% \DoNotIndex{\@minus,\@mkboth,\@ne,\@nil,\@nomath,\@plus,\@set@topoint}
+% \DoNotIndex{\@tempboxa,\@tempcnta,\@tempdima,\@tempdimb}
+% \DoNotIndex{\@tempswafalse,\@tempswatrue,\@viipt,\@viiipt,\@vipt}
+% \DoNotIndex{\@vpt,\@warning,\@xiipt,\@xipt,\@xivpt,\@xpt,\@xviipt}
+% \DoNotIndex{\@xxpt,\@xxvpt,\\,\ ,\addpenalty,\addtolength,\addvspace}
+% \DoNotIndex{\advance,\Alph,\alph}
+% \DoNotIndex{\arabic,\ast,\begin,\begingroup,\bfseries,\bgroup,\box}
+% \DoNotIndex{\bullet}
+% \DoNotIndex{\cdot,\cite,\CodelineIndex,\cr,\day,\DeclareOption}
+% \DoNotIndex{\def,\DisableCrossrefs,\divide,\DocInput,\documentclass}
+% \DoNotIndex{\DoNotIndex,\egroup,\ifdim,\else,\fi,\em,\endtrivlist}
+% \DoNotIndex{\EnableCrossrefs,\end,\end@dblfloat,\end@float,\endgroup}
+% \DoNotIndex{\endlist,\everycr,\everypar,\ExecuteOptions,\expandafter}
+% \DoNotIndex{\fbox}
+% \DoNotIndex{\filedate,\filename,\fileversion,\fontsize,\framebox,\gdef}
+% \DoNotIndex{\global,\halign,\hangindent,\hbox,\hfil,\hfill,\hrule}
+% \DoNotIndex{\hsize,\hskip,\hspace,\hss,\if@tempswa,\ifcase,\or,\fi,\fi}
+% \DoNotIndex{\ifhmode,\ifvmode,\ifnum,\iftrue,\ifx,\fi,\fi,\fi,\fi,\fi}
+% \DoNotIndex{\input}
+% \DoNotIndex{\jobname,\kern,\leavevmode,\let,\leftmark}
+% \DoNotIndex{\list,\llap,\long,\m@ne,\m@th,\mark,\markboth,\markright}
+% \DoNotIndex{\month,\newcommand,\newcounter,\newenvironment}
+% \DoNotIndex{\NeedsTeXFormat,\newdimen}
+% \DoNotIndex{\newlength,\newpage,\nobreak,\noindent,\null,\number}
+% \DoNotIndex{\numberline,\OldMakeindex,\OnlyDescription,\p@}
+% \DoNotIndex{\pagestyle,\par,\paragraph,\paragraphmark,\parfillskip}
+% \DoNotIndex{\penalty,\PrintChanges,\PrintIndex,\ProcessOptions}
+% \DoNotIndex{\protect,\ProvidesClass,\raggedbottom,\raggedright}
+% \DoNotIndex{\refstepcounter,\relax,\renewcommand,\reset@font}
+% \DoNotIndex{\rightmargin,\rightmark,\rightskip,\rlap,\rmfamily,\roman}
+% \DoNotIndex{\roman,\secdef,\selectfont,\setbox,\setcounter,\setlength}
+% \DoNotIndex{\settowidth,\sfcode,\skip,\sloppy,\slshape,\space}
+% \DoNotIndex{\symbol,\the,\trivlist,\typeout,\tw@,\undefined,\uppercase}
+% \DoNotIndex{\usecounter,\usefont,\usepackage,\vfil,\vfill,\viiipt}
+% \DoNotIndex{\viipt,\vipt,\vskip,\vspace}
+% \DoNotIndex{\wd,\xiipt,\year,\z@}
+%
+% \changes{v0.1}{2000/04/29}{First public release as `collection' class}
+% \changes{v0.2}{2000/05/07}{First public release with class changed to `combine'}
+% \changes{v0.3}{2000/05/20}{Fix newtheorem and letter class}
+% \changes{v0.3}{2000/05/20}{Add title formatting}
+% \changes{v0.4}{2000/05/27}{Reset counters, ToC formatting}
+% \changes{v0.41}{2000/06/18}{Added and used \cs{appendiargdef}}
+% \changes{v0.42}{2001/04/04}{Fixed(?) problem with fancyhdr package}
+% \changes{v0.5}{2001/07/03}{Added the combnat package}
+% \changes{v0.51}{2001/07/09}{Fixed problem with \cs{appendix} in imports}
+% \changes{v0.51}{2001/07/09}{Fixed problem with ordering of
+% \cs{coltocauthor} and \cs{coltoctitle}}
+% \changes{v0.52}{2001/08/25}{Fixed problem with `wrapped class' imports}
+% \changes{v0.53}{2001/09/05}{Fixed problem with spaces in ToC entries}
+% \changes{v0.54}{2001/12/19}{Added text about exam class}
+% \changes{v0.6}{2002/08/24}{Added option for single bibliography}
+%
+% ^^A \def\fileversion{v0.3}
+% ^^A \def\filedate{2000/05/20}
+% ^^A \def\fileversion{v0.4}
+% ^^A \def\filedate{2000/05/27}
+% ^^A \def\fileversion{v0.41}
+% ^^A \def\filedate{2000/06/18}
+% ^^A \def\fileversion{v0.42}
+% ^^A \def\filedate{2001/04/04}
+% ^^A \def\fileversion{v0.51}
+% ^^A \def\filedate{2001/07/09}
+% ^^A \def\fileversion{v0.52}
+% ^^A \def\filedate{2001/08/25}
+% \def\fileversion{v0.53}
+% \def\filedate{2001/09/05}
+% \def\fileversion{v0.6}
+% \def\filedate{2002/08/24}
+% \newcommand*{\Lpack}[1]{\textsf {#1}} ^^A typeset a package
+% \newcommand*{\Lopt}[1]{\textsf {#1}} ^^A typeset an option
+% \newcommand*{\file}[1]{\texttt {#1}} ^^A typeset a file
+% \newcommand*{\Lcount}[1]{\textsl {\small#1}} ^^A typeset a counter
+% \newcommand*{\pstyle}[1]{\textsl {#1}} ^^A typeset a pagestyle
+% \newcommand*{\Lenv}[1]{\texttt {#1}} ^^A typeset an environment
+%
+% \title{The \Lpack{combine} class and the \Lpack{combinet}
+% and \Lpack{combnat} packages\thanks{This
+% file has version number \fileversion, last revised
+% \filedate.}}
+%
+% \author{%
+% Peter Wilson\thanks{Dick Nickalls (\texttt{dicknickalls@compuserve.com})
+% provided several requirements and suggestions.
+% He also very helpfully tested earlier experimental versions.}\\
+% Catholic University of America \\
+% Now at \texttt{peter.r.wilson@boeing.com}
+% }
+% \date{\filedate}
+% \maketitle
+% \begin{abstract}
+% The \Lpack{combine} class can be used to assemble a group
+% of individual \LaTeX{} documents into a single document,
+% such as required for a conference proceedings. All the
+% documents should be of the same class
+% (e.g., all \Lpack{article}s or all \Lpack{report}s).
+% The class requires the \Lpack{keyval} package.
+%
+% The accompanying \Lpack{combinet} and \Lpack{combnat} packages
+% respectively let
+% the titles of imported documents be added to the main ToC, and
+% enable the \Lpack{combine} class and the \Lpack{natbib} package
+% to cooperate.
+% \end{abstract}
+% \tableofcontents
+%
+%
+%
+% \section{Introduction}
+%
+% Questions about making a collection of different articles into a single
+% document
+% seem to pop up fairly regularly on the
+% \texttt{comp.text.tex} newsgroup.
+% The \Lpack{combine} class provides a solution for this problem.
+%
+% This manual is typeset according to the conventions of the
+% \LaTeX{} \textsc{docstrip} utility which enables the automatic
+% extraction of the \LaTeX{} macro source files~\cite{GOOSSENS94}.
+%
+% Section~\ref{sec:usc} describes the usage of the \Lpack{combine} class and
+% Sections~\ref{pack} and~\ref{natpack} describe the \Lpack{combinet}
+% and \Lpack{combnat} packages.
+% Commented source code for the class is in Section~\ref{sec:code}.
+% The class requires the \Lpack{keyval} package to be available.
+% Commented source code for the \Lpack{combinet} package is in
+% Section~\ref{packcode}, and for \Lpack{combnat} is in
+% Section~\ref{natpackcode}.
+%
+% Note that the version number and date given for this file does not
+% necessarily match version numbers or dates for the class and packages.
+%
+% \section{The \Lpack{combine} class} \label{sec:usc}
+%
+% The \Lpack{combine} class enables a group of individual
+% \LaTeX{} documents to be imported and assembled into a single document. All
+% the individual documents should be of the same class (e.g., all
+% \Lpack{article} or all \Lpack{report}).
+%
+% Sectioning, cross-referencing, bibliographies, etc., are local within
+% each imported document. Various means are provided for controlling local
+% Table of Contents, the format of |\maketitle|, and so on, without having
+% to make any changes to the original of an imported document.
+%
+% Here is a simple example file which might be the skeleton for a
+% conference proceedings.
+% \begin{verbatim}
+% \documentclass[11pt]{combine}
+%
+% \title{Proceedings of the ...}
+% \author{A. N. Editor\thanks{Support ...}}
+% \date{29 February, 2000}
+%
+% \begin{document}
+% \pagestyle{combine} % use the combine page style
+% \maketitle % main title
+% \tableofcontents % main ToC
+% \clearpage
+%
+% \section{Editor's introduction} \label{intro} % into main ToC (section 1)
+%
+% In the article by A.~N.~Author on page~\pageref{art1} ...
+%
+% \begin{papers} % start of individual articles/papers
+% \coltoctitle{An article} % first article title into main ToC
+% \coltocauthor{A.~N.~Author} % first authors into main ToC
+% \label{art1}
+% \import{art1} % first article, may have own ToC,
+% % bibliography, etc.
+% \coltoctitle{Another article}
+% \coltocauthor{A.~N.~Other}
+% \label{art2}
+% \import{art2}
+% \end{papers} % end of individual articles/papers
+%
+% \clearpage
+% \section{Acknowledgements} % into main ToC (section 2)
+%
+% Among the many ...
+%
+% \end{document}
+% \end{verbatim}
+%
+% \subsection{Class options}
+%
+% As well as providing all the class options appropriate for
+% the class of the individual documents, the \Lpack{combine}
+% class provides the following additional options:
+% \begin{itemize}
+% \item \Lopt{book}, \Lopt{report} and \Lopt{letter}.
+% By default the \Lpack{article}
+% class is assumed for both the main and the imported documents.
+% These options change the class to \Lpack{book}, \Lpack{report} or
+% \Lpack{letter}, respectively.
+% \item \Lopt{colclass=\meta{class}}. This option changes
+% the `classes' to \meta{class}. For example, specifying
+% |colclass=phdthesis| will use the \Lpack{phdthesis}
+% class\footnote{Whatever that is.} definitions
+% throughout the entire document.
+%
+% Note that if you use this option there are likely to be \LaTeX{}
+% warnings about \texttt{Unused global option(s): [colclass=\ldots]}.
+%
+% \item \Lopt{classes}. This option enables the imported documents
+% to be of different classes. For example, embedding a letter
+% into a compendium of articles. Using this option may
+% induce a plethora of \LaTeX{} errors and the printed results
+% may be unpredictable. If this happens, try hitting `q' to
+% put \LaTeX{} into
+% its `quiet batch' processing mode and then examine the typeset result
+% for usability.
+%
+% Different classes of imported documents should not be mixed
+% within a single |papers| environment. Also, imported documents
+% whose class is the same but which differs from the main class
+% should be within a single |papers| environment. For example,
+% if several letters are to be imported into a collection
+% of articles, the letters must not be scattered between different
+% |papers| environments, although the imported articles can be
+% scattered.
+%
+% \item \Lopt{packages}. By default all |\usepackage| commands in
+% imported documents are ignored. If this is not desired,
+% then the \Lopt{packages} option will enable the imported
+% |\usepackage| commands(s). If this option is used, then only
+% the first occurrence of a package is actually used and is not
+% available to any later imported documents.
+%
+% Generally speaking, it is advisable to put all |\usepackage|
+% commands into the preamble of the main document.
+%
+% \item \Lopt{layouts}. By default, a single setting of the
+% page layout is used throughout the document. The \Lopt{layouts}
+% option takes account of any changes to the |\textwidth|,
+% |\textheight|, etc., in the imported documents.
+%
+% \item \Lopt{folios}. The page numbers are sequential throughout
+% the document. When the |plain| page style is used, the
+% \Lopt{folios} option will display the
+% local page numbers of imported documents as well as the
+% the main page number. This may have unfortunate consequences
+% on the page numbers in ToC, etc., entries as they may well
+% refer to local rather than global page numbers.
+%
+% \item \Lopt{notoc}. Disables the inclusion of a Table of Contents
+% in any imported document.
+% \item \Lopt{nolof}. Disables the inclusion of a List of Figures
+% in any imported document.
+% \item \Lopt{nolot}. Disables the inclusion of a List of Tables
+% in any imported document.
+% \item \Lopt{maintoc}. Adds all imported documents ToC, LoF, LoT, etc.,
+% entries to the main document ToC, LoF, \ldots
+% \item \Lopt{notitle}. Disables title printing by any |\maketitle|
+% in any imported document.
+% \item \Lopt{noauthor}. Disables author printing by any |\maketitle|
+% in any imported document.
+% \item \Lopt{date}. By default, date printing by any |\maketitle|
+% in any imported document is disabled. This option causes
+% the date(s) to be printed.
+% \item \Lopt{nomaketitle}. Disables all printing by any |\maketitle|
+% in any imported document.
+% \item \Lopt{nopubindoc}. Disables the printing of the |\published|
+% information within an imported document.
+% \item \Lopt{nopubintoc}. Disables the printing of the |\published|
+% information within the main ToC.
+% \item \Lopt{onebib}. Disables imported bibliographies and puts all
+% citations in the main document's bibliography.
+% \item \Lopt{combinedbib}. Individual imported bibliographies and
+% also all citations put into the main document's bibliography.
+% \end{itemize}
+%
+% The \Lpack{combine}
+% class may be able to incorporate any class of imported documents by
+% setting an appropriate value for the \Lopt{colclass} option and perhaps
+% doing some additional work.
+%
+% For example, if you want to have a collection of examination papers
+% which were each is originally produced using the \Lpack{exam} class,
+% then start off with: \\
+% |\documentclass[...,colclass=exam]{combine} | \\
+% The \Lpack{exam} class, though, does a couple of things that prevent
+% \Lpack{combine} and \Lpack{exam} from working well together:
+% \begin{itemize}
+% \item \Lpack{exam} has its own version of |\section| which is totally at
+% odds with the normal \Lpack{article} definition, and |\section*| is
+% used by the |\tableofcontents| command.
+% \item \Lpack{exam} does wonderful things at the end of a document. This
+% is alright for imported documents in a |papers| environment but is an
+% abject failure at the final end of the main document.
+% \end{itemize}
+%
+% To get round these problems, put the following in the preamble to
+% the main document:
+% \begin{verbatim}
+% \makeatletter
+% \let\oldsection\section % keep exam's definition of \section
+% \renewcommand{\section}{% % article's definition of \section
+% \@startsection{section}{1]{\z@}%
+% {-3.5ex \@plus -1ex \@minus -.2ex}%
+% {2.3ex \@plus .2ex}%
+% {\normalfont\Large\bfseries}}
+% \makeatletter
+% \end{verbatim}
+% and in the document put: \\
+% |\let\section\oldsection| \\
+% immediately before the first |papers| environment.
+%
+% For the end document problem, put:
+% \begin{verbatim}
+% \makeatletter
+% \let\@enddocumenthook\@oldenddocumenthook
+% \makeatother
+% \end{verbatim}
+% immediately before the main document's |\end{document}|.
+%
+%
+% \subsection{Class commands and environments}
+%
+% Within a \Lpack{combine} class document you can use any commands
+% that are supported by the selected class.
+% The following additional commands and environments are also
+% provided.
+%
+% \DescribeEnv{papers}
+% The environment |\begin{papers}[|\meta{text/code}|]...\end{papers}|
+% provides a wrapper around imported file(s). Effectively, it modifies
+% any |\documentclass| command or |document| environment within an
+% imported file so that \LaTeX{} does not stop with an error at meeting
+% these, or preamble-only commands like |\usepackage|, in the middle
+% of a document.
+%
+% The optional argument is executed immediately at the start of
+% the environment and its default value is |\cleardoublepage|.
+% To avoid any forced page breaking you can call the environment with
+% an empty optional argument (e.g., |\begin{papers}[]|).
+%
+%
+% \DescribeMacro{\import}
+% The command |\import{|\meta{texfile}|}| is a cross between the |\input|
+% and |\include| commands, and should only be used within a |papers|
+% environment. \meta{texfile} is the name of a \LaTeX{} file \emph{without}
+% the |.tex| extension. For example, |\import{fred}| will attempt to
+% read in a file called |fred.tex|. The \meta{texfile} should be a
+% complete \LaTeX{} document file, from |\documentclass...| to
+% |\end{document}|. The contents of \meta{texfile} will be typeset in
+% the document at the point where it is imported, including any document
+% title (via a |\maketitle|), Table of Contents, \ldots, Bibliography, etc.
+%
+% \DescribeMacro{\maketitle}
+% The \Lpack{combine} class provides a |\maketitle| command, together with
+% |\title|, |\author| and |\date| commands like those in the
+% \Lpack{book/report/article} classes. A \Lopt{titlepage} option is only
+% supported if the main class has a \Lopt{titlepage} option. For example,
+% if the main class is \Lpack{article} then both |\maketitle| and the
+% \Lopt{titlepage} option are supported, but if the main class is
+% \Lpack{letter} then only the |\maketitle| command is provided.
+%
+% \DescribeMacro{\maintitlefont}
+% \DescribeMacro{\postmaintitle}
+% \DescribeMacro{\mainauthorfont}
+% \DescribeMacro{\postmainauthor}
+% \DescribeMacro{\maindatefont}
+% \DescribeMacro{\postmaindate}
+% These commands control the typesetting of the main document's |\maketitle|
+% command. The |\title| is processed between the |\maintitlefont| and
+% |\postmaintitle| commands; that is, like: \\
+% |{\maintitlefont \title \postmaintitle}| \\
+% and similarly for the |\author| and |\date| commands. The |\...main...|
+% commands are initialised to mimic the normal result of |\maketitle|
+% typesetting in the \Lpack{article/report} classes.
+% For example, the default definitions of the |\...maintitle...|
+% and |\...mainauthor...| commands are:\par
+% \begin{small}
+% \begin{verbatim}
+% \newcommand{\maintitlefont}{\begin{center}\LARGE}
+% \newcommand{\postmaintitle}{\par\end{center}\vskip 0.5em}
+% \newcommand{\mainauthorfont}{\begin{center}
+% \large \lineskip 0.5em%
+% \begin{tabular}[t]{c}}
+% \newcommand{\postmainauthor}{\end{tabular}\par\end{center}}
+% \end{verbatim}
+% \end{small}\par
+% They can be renewed to obtain different effects, for instance removing
+% the |center| environment from |\...title...| will result in the title
+% being typeset as a normal paragraph.
+%
+% \DescribeMacro{\importtitlefont}
+% \DescribeMacro{\postimporttitle}
+% \DescribeMacro{\importauthorfont}
+% \DescribeMacro{\postimportauthor}
+% \DescribeMacro{\importdatefont}
+% \DescribeMacro{\postimportdate}
+% Without any options, the |\title| and |\author| commands
+% are typeset by |\maketitle| commands in imported documents.
+% Like the main document's |\maketitle|, the typesetting is controlled
+% by these |\...import...| commands. The default definition for
+% the title and author differ a little from the main document style,
+% and are:\par
+% \begin{small}
+% \begin{verbatim}
+% \newcommand{\importtitlefont}{\begin{center}\LARGE\bfseries}
+% \newcommand{\postimporttitle}{\par\end{center}}
+% \newcommand{\importauthorfont}{\begin{center}
+% \large\itshape \lineskip 0.5em%
+% \begin{tabular}[t]{c}}
+% \newcommand{\postimportauthor}{\end{tabular}\par\end{center}}
+% \end{verbatim}
+% \end{small}\par
+% The commands can be renewed to obtain different formatting.
+%
+% Note that if the \Lpack{titling} package is used with the \Lpack{combine}
+% class, the \Lpack{titling} maketitle typesetting commands are unavailable,
+% being replaced by the corresponding \Lpack{combine} commands above. Other
+% aspects of \Lpack{titling}, like the |\thetitle| command, are still
+% available for use.
+%
+% \DescribeMacro{\bodytitle}
+% The |\bodytitle[|\meta{short title}|]{|\meta{long title}|}| command
+% is similar
+% to a |\chapter| or |\section| command, depending on the \meta{class}
+% of document. It may be used for adding a numbered title heading into
+% the main
+% document and ToC for the following |\import{|\meta{texfile}|}|. There
+% is also a starred version of the command, which produces an unnumbered
+% title heading and makes no entry in the ToC. The numbering used for
+% |\bodytitle| is independent from any other numbering sequence.
+%
+% \DescribeMacro{\coltoctitle}
+% \DescribeMacro{\coltocauthor}
+% The two commands |\coltoctitle{|\meta{title}|}| and
+% |\coltocauthor{|\meta{author}|}| are for adding \meta{title} and
+% \meta{author} to the main ToC, where \meta{title} is the compiler's
+% choice for the title of the following |\import{|\meta{texfile}|}|
+% and \meta{author} is for the names of the authors.
+%
+% \DescribeMacro{\published}
+% The command |\published[|\meta{short}|]{|\meta{long}|}| can be used
+% for putting the \meta{long} text into the body of the main document.
+% If the optional argument is not used, then \meta{long} is also added
+% to the main ToC. If the optional argument is used, then \meta{short}
+% instead of \meta{long} is added to the ToC. The expectation is that this
+% will be used for noting the original publication information for an
+% imported document.
+%
+% \DescribeMacro{\pubfont}
+% In the document body the text of the |\published| command is typeset
+% using |\pubfont|. By default this is defined as |{\normalfont\centering}| to
+% give centered text in the normal font. If, for example, you wanted
+% it to be typeset ragged right in an italic font you would do: \\
+% |\renewcommand{\pubfont}{\itshape\raggedright}|
+%
+% \DescribeMacro{\toctitleindent}
+% \DescribeMacro{\tocauthorindent}
+% \DescribeMacro{\tocpubindent}
+% \DescribeMacro{\toctocindent}
+% These are all lengths, and their values can be changed using
+% |\setlength|. They control the extra indentation of an imported
+% document's title, authors, publication information and section
+% headings within the main ToC. The default value of |\toctitleindent|
+% is 0em and the default for the other four is 1.5em. If any values
+% are changed, this must be
+% done before the |\tableofcontents| command in the main document.
+% For example, the title texts are aligned at the left margin;
+% to align them with the default position of authors do: \\
+% |\setlength{\toctitleindent}{1.5em}|
+%
+% \DescribeMacro{\toctitlefont}
+% \DescribeMacro{\tocauthorfont}
+% \DescribeMacro{\tocpubfont}
+% These macros specify the fonts to be used for typesetting the
+% imported titles, authors and publishing information within the main ToC.
+% Their default definitions are: \\
+% |\newcommand{\toctitlefont}{\bfseries}| % bold titles \\
+% |\newcommand{\tocauthorfont}{\itshape}| % italic authors \\
+% |\newcommand{\tocpubfont}{\normalfont}| % normal font for published
+%
+% The class tries to keep any group of title/author/published entries
+% in the ToC on one page, but sometimes TeX will insert a pagebreak anyway.
+% The way of combating this is to make sure that the ToC page is broken
+% \emph{before} the group. You can do this like: \\
+% |\addtocontents{toc}{\protect\pagebreak}| \\
+% |\coltoctitle{...} \coltocauthor{...}| etc.
+%
+% \DescribeMacro{\erasetitling}
+% This macro `undefines' any previous |\coltoctitle|, |\coltocauthor|
+% and/or |\published| commands; it is principally provided for use with the
+% \Lpack{combinet} package.
+%
+%
+% \DescribeMacro{combine}
+% A new |combine| pagestyle is provided. This is like the |plain|
+% pagestyle except that page numbers are put at the bottom outside corner
+% of the page. This is the default pagestyle for the \Lpack{combine}
+% class.
+%
+% Provided a |plain| (or |combine|) page style is used the pages
+% are numbered in sequence throughout the document. If an imported document
+% has any |empty| page style pages these will not be numbered.
+%
+% Unless the \Lopt{folios} option is used, all references to page
+% numbers will be to the global page number. With the \Lopt{folios}
+% options some references will be to global page numbers and some to
+% local page numbers.
+%
+% You can, of course, define your own heading styles; I recommend
+% the \Lpack{fancyhdr} package~\cite{FANCYHDR} if you do this. For example,
+% if you had a collection of papers and you wanted to have the
+% headers on the lefthand pages to have the title of the collection
+% and the righthand pages to have the name of the current author(s), you
+% can do this along the following lines.
+% \begin{verbatim}
+% \documentclass[report,twoside]{combine}
+% \usepackage{fancyhdr}
+% \title{The collection}
+% \author{A. N. Editor}
+% \pagestyle{fancy}
+% \fancyhead[RO]{A. N. Editor}
+% \fancyhead[LE]{The collection}
+% \fancyfoot{}
+% \fancyfoot[LE,RO]{\thepage}
+% \newcommand{\authortochead}[1]{%
+% \coltocauthor{#1}
+% \fancyhead[RO]{#1}
+% }
+% ...
+% \begin{document}
+% \maketitle
+% %% Editors introduction, ToC, etc
+% \begin{papers}
+% \coltoctitle{Paper 1}
+% \authortochead{A. N. Author}
+% \import{paper1}
+% \cleardoublepage
+% \coltoctitle{Paper 2}
+% \authortochead{A. N. Other}
+% \import{paper2}
+% ...
+% \end{verbatim}
+%
+%
+% In order to ensure that all the material in an imported document
+% is typeset, there is an inbuilt |\clearpage| command within the
+% imported document's |\end{document}|. Thus, any material after an
+% |\import| command will start on a new page.
+%
+% Here is another example file which might be the skeleton for a
+% thesis that includes a copy of a published paper.
+% \begin{verbatim}
+% %%\documentclass{thesis} % replace this by
+% \documentclass[colclass=thesis,classes,layouts]{combine}
+% ... packages etc.,
+%
+% \title{Observations on the ...}
+% \author{A. Candidate}
+% \date{1 April, 2000}
+% \addtolength{\toctitleindent}{2.3em} % extra main ToC indentation
+% \addtolength{\tocauthorindent}{2.3em}
+% \addtolength{\tocpubindent}{2.3em}
+%
+% \begin{document}
+% \pagestyle{combine} % use the combine page style
+% \maketitle % main title
+% \tableofcontents % main ToC
+% \clearpage
+% ...
+% lots of remarkable research results
+% ...
+% \appendix
+% ...
+% \section{Publication}
+% \begin{papers}[]
+% \coltoctitle{...}
+% \published{Originally published in the
+% \textit{Journal of Irreproducible Results}, 1987}
+% \import{mypaper}
+% \end{papers}
+% ...
+%
+% \bibliography{refs} % main bibliography
+% \end{document}
+% \end{verbatim}
+%
+% Each imported file generates its own \file{.aux}, \file{.toc}, etc.,
+% files. If a BibTeX database is used for the literature references
+% in an imported document, then BibTeX must be run against the imported
+% document, \emph{not} the main document, to resolve the citations.
+% Citations are local to each imported document. There can, of course,
+% also be a bibliography for citations made in the main document, as shown
+% in the example file above.
+%
+% \DescribeMacro{\provideenvironment}
+% This macro is like the |\providecommand| macro except that it applies
+% to an environment instead of a command. It is required internally
+% by the \Lpack{combine} class.
+%
+% \DescribeMacro{\providelength}
+% \DescribeMacro{\providecounter}
+% These macros are used internally. They are |\provide...|
+% versions of the |\newlength| and |\newcounter| commands.
+%
+% \DescribeMacro{\zeroextracounters}
+% The class attempts to initialise the counters used by each imported
+% document. For example, the figure, equation, etc., counters are zeroed
+% for each document. The |\zeroextracounters| command can be redefined so
+% that it includes the zeroing of any additional counters that might have
+% been introduced in a package or defined by the author. For example,
+% if two different imports both define a (new) counter called, say,
+% |mycounter|, then redefine the command like:
+% \begin{verbatim}
+% \renewcommand{\zeroextracounters}{%
+% \@ifundefined{c@mycounter}{}{\setcounter{mycounter}{0}}
+% }
+% \end{verbatim}
+%
+% \DescribeMacro{\appendiargdef}
+% The (internal) command |\appendiargdef{|\meta{macro}|}{|\meta{stuff}|}|
+% appends \meta{stuff} at the end of the current definition of \meta{macro},
+% where \meta{macro} is the name of a macro (including the backslash)
+% which takes one argument. For example the following are two equivalent
+% definitions of |\mymacro|:
+% \par\begin{small}\begin{verbatim}
+% \newcommand{\mymacro}[1]{#1 is a bagpiper}
+% \appendiargdef{\mymacro}{ and of course is tone deaf}
+% % or
+% \newcommand{\mymacro}[1]{#1 is a bagpiper and of course is tone deaf}
+% \end{verbatim}
+% \end{small}\par
+%
+% \subsection{Imports in subdirectories}
+%
+% Authors may find it convenient to put the LaTeX source files for imported
+% documents into subdirectories of the directory for the main document.
+% Perhaps the easiest way to make this work is to set an environment
+% variable so that LaTeX will look in the subdirectories of the current
+% working directory for files it can't find.
+%
+% I use a teTeX system and can only talk about that distribution.
+% The relevant environment variable, at least for document files, is
+% |TEXINPUTS|. An example setting for this is: \\
+% |TEXINPUTS=.//:${LOCALTEX}//:| \\
+% The fragment |.//| tells LaTeX to look for files in the current directory,
+% and recursively in its subdirectories. The fragment |:${LOCALTEX}//| tells
+% LaTeX to look for files in the place defined by the environment variable
+% |LOCALTEX|, and recursively in its subdirectories. The final |:| tells
+% LaTeX to look in the standard teTeX defined places.
+%
+% \section{The \Lpack{combinet} package} \label{pack}
+%
+% The \Lpack{combinet} (COMBINE Title) package,
+% which should only be used in conjunction
+% with the \Lpack{combine} class, modifies the |\maketitle| command of
+% all imported documents so that the imported document's title and/or
+% author, if
+% defined, are automatically added to the main document's ToC.
+%
+% This is presented as a package rather than as part of the
+% \Lpack{combine} class as some unfortunate side effects may become
+% apparent.
+%
+% If a |\coltoctitle| or |\coltocauthor| command has been given
+% immediately prior to the import, then these will be put into the main
+% ToC instead of the |\maketitle| texts. The |\erasetitling| command can
+% be used to disable any prior |\coltoctitle|, |\coltocauthor| and
+% |\published| commands.
+%
+% The package takes the following options.
+% \begin{itemize}
+% \item \Lopt{nomtitle}. Disable the |\maketitle| title
+% from being added to the main ToC.
+% \item \Lopt{nomauthor}. Disable the |\maketitle| author
+% from being added to the main ToC.
+% \item \Lopt{nothanks}. By default, the contents of a |\thanks| command
+% will be added to the main ToC. This option prevents that, but
+% may have unfortunate side effects if any |\title| or |\author|
+% command has any embedded commands within the text.
+% \item \Lopt{pub}. Put the text of an immediately prior |\published|
+% command after the |\maketitle| typesetting, and add the text to the
+% main ToC after any title or author. Remember that the \Lpack{combine}
+% class options \Lopt{nopubindoc} and \Lopt{nopubindoc} can be used
+% to inhibit printing of |\published| information.
+% \item \Lopt{pubtop}. Put the text of an immediately prior |\published|
+% command at the top of the |\maketitle| typesetting, and add the
+% text to the
+% main ToC after any title or author.
+% \end{itemize}
+%
+% As noted above, embedded commands within a |\title| or |\author| may
+% not transform well if they appear in the main ToC. In such cases you can
+% use |\coltoctitle| or |\coltocauthor| for adding appropriate text to
+% the main ToC, not forgetting to disable these after the import via
+% |\erasetitling|.
+%
+% \section{The \Lpack{combnat} package} \label{natpack}
+%
+% The \Lpack{combine} class and Patrick Daly's \Lpack{natbib}
+% package~\cite{NATBIB}
+% both redefine some of the same basic LaTeX macros, and naturally
+% the redefinitions are incompatible\footnote{Discovered by
+% Thomas Hertweck (\texttt{Thomas.Hertweck@gpi.uni-karlsruhe.de}) in
+% June 2001.}.
+%
+% The \Lpack{combnat} (COMBine NATbib) package hopefully resolves this
+% problem. With the \Lpack{combine} class you use \Lpack{combnat} instead
+% of \Lpack{natbib}. That is, instead of: \\
+% |\usepackage[|\meta{natbib-options}|]{natbib}|, simply do \\
+% |\usepackage[|\meta{natbib-options}|]{combnat}| \\
+% in the preamble of the main document. The package automatically calls
+% the \Lpack{natbib} package with the given \meta{natbib-options} and
+% then redefines some of the \Lpack{natbib} redefinitions to ensure
+% \Lpack{combine/natbib} compatibility.
+%
+% For details on the \meta{natbib-options} and the other facilities,
+% read the \Lpack{natbib} documentation~\cite{NATBIB}.
+%
+%
+% \section{Caveats}
+%
+% \LaTeX{} was designed to typeset a single document, where the document
+% has one and only one |\documentclass| command and one and only one
+% |document| environment. The \Lpack{combine} class attempts to handle
+% a document that has multiple |\documentclass| commands and multiple
+% |document| environments. In order to do this certain parts of the
+% \LaTeX{} kernel code has had to be modified. Unfortunately, to make
+% the usage of \Lpack{combine} completely transparent to the user would
+% require very major surgery, with a high probability that with my skills
+% the patient would die; being able to remove a hangnail does not imply
+% the ability to perform a heart transplant.
+%
+% It is, of course, assumed that each imported document processes without
+% error as an individual document.
+%
+% Essentially, be prepared for the unexpected, usually indicated
+% by a rash of \LaTeX{} error messages about undefined commands or about
+% defining an already defined command. These are usually caused by incorrect
+% grouping.
+%
+% Commands, etc., defined in the main document are available to
+% all imported
+% documents. The |papers| environment forms a group. Commands
+% defined within a group are local to the group and are not visible outside
+% it. Another point is that \LaTeX{} will read the code for any given
+% class or package only once. These facts have some consequences.
+%
+% \begin{itemize}
+% \item The facilities provided by any package that is used by an imported
+% file are only available within the first |papers| environment
+% in which the package is called for. This is why it is recommended
+% that all packages should be called for in the main document.
+%
+% \item Similarly for a class that is not the main class. For example,
+% if the main class is \Lpack{article} and some letters are to be
+% imported, then they must all be in the same |papers| environment.
+% If they are in multiple |papers| environments, then only the first
+% of these will have access to commands like |\address| which are
+% defined by the \Lpack{letter} class (which is only read once and
+% whose facilities are then local to the first of the |papers|).
+%
+% \item An imported document does not form a group (if it did, then only
+% a single letter could be imported into an article class collection).
+% If two imports in a single |papers| seperately use |\new...|
+% commands
+% with the same \meta{name}, then these \meta{name}s will be
+% visible throughout
+% the environment. \LaTeX{} will then normally report trying to define a
+% pre-existing \meta{name}. The solution to this is either: (a) put
+% the imports into different |papers|, or (b) enclose each import
+% within a |\begingroup| \ldots |\endgroup| pair.
+%
+% \end{itemize}
+%
+% Not all problems can be solved by the above methods. For example, consider
+% the case again of importing letters into an article collection. If two
+% letters both define the same \meta{name}, then adding additional grouping
+% will only change the `defining a pre-existing \meta{name}' problem into
+% the `undefined |\address|' problem. A potential solution in this
+% particular case
+% would be to define all the \Lpack{letter} class specific \meta{name}s in the
+% main document.
+%
+% Within a |papers| environment all |\newcommand| and |\newenvironment|
+% commands are replaced by |\providecommand| and |\provideenvironment|
+% respectively. This should stop \LaTeX{} from reporting the pre-existing
+% \meta{name} error from these commands, but one and only one of the
+% definitions will be available. |\newlength| and |\newcounter| commands
+% are handled in the same manner. There is no equivalent for |\newtheorem|,
+% but instead the |\newtheorem| command has been made local instead
+% of global, so cunning use of grouping should be able to circumvent the
+% problem of two seperate authors creating identically named
+% theorems.
+%
+%
+%
+% \StopEventually{
+% \bibliographystyle{alpha}
+% \begin{thebibliography}{GMS94}
+%
+% \bibitem[Dal99]{NATBIB}
+% Patrick W. Daly.
+% \newblock \emph{Natural Sciences Citations and References}.
+% \newblock May 1999.
+% \newblock (Available from CTAN in directory
+% \texttt{macros/latex/contrib/supported/natbib})
+%
+% \bibitem[GMS94]{GOOSSENS94}
+% Michel Goossens, Frank Mittelbach, and Alexander Samarin.
+% \newblock \emph{The LaTeX Companion}.
+% \newblock Addison-Wesley Publishing Company, 1994.
+%
+% \bibitem[Oos96]{FANCYHDR}
+% Piet van Oostrum.
+% \newblock \emph{Page layout in LaTeX}.
+% \newblock June 1996.
+% \newblock (Available from CTAN in directory
+% \texttt{macros/latex/contrib/supported/fancyhdr})
+%
+%
+% \end{thebibliography}
+% }
+%
+%
+% \section{The \Lpack{combine} class code} \label{sec:code}
+%
+% There are various difficulties to be overcome by the
+% \Lpack{combine} code, some seemingly inherent in \TeX{} itself and
+% others by the \LaTeX{} kernel code. These include, but are not limited to:
+% \begin{itemize}
+% \item TeX{} was not designed for processing multiple documents.
+% \item There can only be one |\documentclass| command within
+% a document.
+% \item There are many \LaTeX{} commands that can only be used in
+% the preamble, and the preamble is closed by the (first) |\begin{document}|.
+% \item There is a single global page number, which may be reset to one
+% at any point in any document. If this occurs in an imported document
+% then the page numbering for the main document is similarly reset.
+% \item |\label|s are global in nature, and with multiple imported
+% documents there are likely to be labels with the same name in two
+% or more of these.
+% \item Many of the kernel (and standard classes) commands use
+% the page number; sometimes the use is buried at the end of a chain
+% of macros.
+% \end{itemize}
+%
+% A design goal for \Lpack{combine} is that virtually any kind
+% of document should be importable and should be processible without
+% have to make any changes to it. To completely satisfy this would
+% require a rewrite of much of the \LaTeX{} kernel, which is out
+% of the question. Of necessity some changes have had to be made but
+% these have been limited as far as possible. I think that a collection
+% that consists of documents that are all of the same class should
+% process without interruption.
+%
+% When there are mixed classes, \LaTeX{}
+% reads in the code for each class. An example is importing a \Lpack{letter}
+% class document into an \Lpack{article} class collection.
+% If the same command is defined
+% by |\newcommand| in two or more of these classes, then \LaTeX{}
+% complains and I see no way of getting around this without rewriting
+% all the classes and kernel to use |\def| instead of |\newcommand|.
+% In any event, if this happens, try responding to the errors by hitting
+% `q' to put \LaTeX{} into a batch mode. The typeset result may be useable.
+%
+% To try and avoid name clashes, all the internal commands include
+% the string |c@l|.
+%
+% \section{Preliminaries}
+%
+% Announce the name and version of the class, which requires
+% \LaTeXe{} and the \Lpack{keyval} package.
+% \changes{v0.53}{2001/09/05}{Class is now v0.45}
+% \changes{v0.6}{2002/08/24}{Class is now v0.5}
+% \begin{macrocode}
+%<*usc>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{combine}[2002/08/24 v0.5 collection of documents]
+\RequirePackage{keyval}
+
+% \end{macrocode}
+%
+% \begin{macro}{\c@lclass}
+% |\c@lclass| stores the class name, which by default is |article|.
+% \begin{macrocode}
+\newcommand{\c@lclass}{article}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@l@tempa}
+% \begin{macro}{\c@l@getoptionname}
+% The next code chunk is based on code posted to the \texttt{ctt} newsgroup
+% by Heiko Oberdiek (\texttt{oberdiek@ruf.uni-freiburg.de}) on 18~April 2000.
+% The code, by some miraculous means, sets up a keyed class option.
+% \begin{macrocode}
+\define@key{COLCLASS}{colclass}[article]%
+ {\renewcommand{\c@lclass}{#1}
+ \ClassWarningNoLine{combine}
+ {Expect warnings like:\MessageBreak
+ \space\space LaTeX Warning: Unused global option(s):\MessageBreak
+ \space\space\space\space [colclass=#1]}}
+\let\c@l@tempa\@empty
+\def\c@l@getoptionname#1=#2\@nil{#1}
+\@for\CurrentOption:=\@classoptionslist\do{%
+ \@ifundefined{%
+ KV@COLCLASS@\expandafter\c@l@getoptionname\CurrentOption=\@nil
+ }%
+ {% other options
+ }{%
+ \edef\c@l@tempa{\c@l@tempa,\CurrentOption,}%
+ }%
+}%
+\edef\c@l@tempa{%
+ \noexpand\setkeys{COLCLASS}{\c@l@tempa}%
+}
+\c@l@tempa
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% The following |\if...| commands are for implementing various options.
+% \changes{v0.4}{2000/05/27}{Unnested some macro environments to save save stack space}
+% \begin{macro}{\ifc@lclasses}
+% \begin{macrocode}
+\newif\ifc@lclasses
+ \c@lclassesfalse
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifc@lpackages}
+% \begin{macrocode}
+\newif\ifc@lpackages
+ \c@lpackagesfalse
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifc@llayouts}
+% \begin{macrocode}
+\newif\ifc@llayouts
+ \c@llayoutsfalse
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifc@lfolios}
+% \begin{macrocode}
+\newif\ifc@lfolios
+ \c@lfoliosfalse
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifc@lnotoc}
+% \begin{macrocode}
+\newif\ifc@lnotoc
+ \c@lnotocfalse
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifc@lnolof}
+% \begin{macrocode}
+\newif\ifc@lnolof
+ \c@lnoloffalse
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifc@lnolot}
+% \begin{macrocode}
+\newif\ifc@lnolot
+ \c@lnolotfalse
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifc@lmaintoc}
+% \begin{macrocode}
+\newif\ifc@lmaintoc
+ \c@lmaintocfalse
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifc@lnodate}
+% \begin{macrocode}
+\newif\ifc@lnodate
+ \c@lnodatetrue
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifc@lnoauthor}
+% \begin{macrocode}
+\newif\ifc@lnoauthor
+ \c@lnoauthorfalse
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifc@lnotitle}
+% \begin{macrocode}
+\newif\ifc@lnotitle
+ \c@lnotitlefalse
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifc@lnomaketitle}
+% \begin{macrocode}
+\newif\ifc@lnomaketitle
+ \c@lnomaketitlefalse
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifc@lnopubindoc}
+% \changes{v0.4}{2000/05/27}{Added nopubindoc and nopubintoc options}
+% \begin{macrocode}
+\newif\ifc@lnopubindoc
+ \c@lnopubindocfalse
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifc@lnopubintoc}
+% \begin{macrocode}
+\newif\ifc@lnopubintoc
+ \c@lnopubintocfalse
+% \end{macrocode}
+% \end{macro}
+% \changes{v0.5}{2002/08/24}{Added onebib and combinedbib options}
+% \begin{macro}{\ifc@lonebib}
+% \begin{macrocode}
+\newif\ifc@lonebib
+ \c@lonebibfalse
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ifc@lcombib}
+% \begin{macrocode}
+\newif\ifc@lcombib
+ \c@lcombibfalse
+% \end{macrocode}
+% \end{macro}
+%
+%
+% Now declare and process the options.
+% \changes{v0.4}{2000/05/27}{Added book option}
+% \changes{v0.6}{2002/08/24}{Added onebib option}
+% \begin{macrocode}
+
+\DeclareOption{book}{\def\c@lclass{book}}
+\DeclareOption{report}{\def\c@lclass{report}}
+\DeclareOption{letter}{\def\c@lclass{letter}}
+\DeclareOption{classes}{\c@lclassestrue}
+\DeclareOption{packages}{\c@lpackagestrue}
+\DeclareOption{layouts}{\c@llayoutstrue}
+\DeclareOption{folios}{\c@lfoliostrue}
+\DeclareOption{notoc}{\c@lnotoctrue}
+\DeclareOption{nolof}{\c@lnoloftrue}
+\DeclareOption{nolot}{\c@lnolottrue}
+\DeclareOption{maintoc}{\c@lmaintoctrue}
+\DeclareOption{date}{\c@lnodatefalse}
+\DeclareOption{noauthor}{\c@lnoauthortrue}
+\DeclareOption{notitle}{\c@lnotitletrue}
+\DeclareOption{nomaketitle}{\c@lnomaketitletrue}
+\DeclareOption{nopubindoc}{\c@lnopubindoctrue}
+\DeclareOption{nopubintoc}{\c@lnopubintoctrue}
+\DeclareOption{onebib}{\c@lonebibtrue}
+\DeclareOption{combinedbib}{\c@lcombibtrue}
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{\c@lclass}}
+\ProcessOptions\relax
+\ifc@lcombib
+ \c@lonebibtrue
+\fi
+
+% \end{macrocode}
+%
+%
+% At this point, load the actual class (as specified by |\c@lclass|).
+% \begin{macrocode}
+\LoadClass{\c@lclass}
+
+% \end{macrocode}
+%
+% \begin{macro}{\ifc@lhaschapter}
+% |\ifc@lhaschapter| is TRUE if the loaded class has chapters.
+% \begin{macrocode}
+\newif\ifc@lhaschapter
+ \c@lhaschapterfalse
+\@ifundefined{chapter}{}{\c@lhaschaptertrue}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@titlepage}
+% The \Lpack{letter} class (and perhaps others) does not have a
+% |\maketitle| command, and therefor neither has a \Lopt{titlepage} option.
+% In this case we need a new |\if@titlepage| for later use when dealing
+% with |\maketitle|. A side effect of this implementation is that |\maketitle|
+% is available for any main document class.
+% \changes{v0.3}{2000/05/20}{Ensured \cs{if@titlepage} is defined}
+% \begin{macrocode}
+\@ifundefined{if@titlepage}{\newif\if@titlepage\@titlepagefalse}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ifc@ltoctitle}
+% \begin{macro}{\ifc@ltoctitle}
+% \begin{macro}{\ifc@lpub}
+% Boolean hooks for testing if |\coltoctitle|, |\coltocauthor| and
+% |\published| have been set.
+% \begin{macrocode}
+\newif\ifc@ltoctitle
+ \c@ltoctitlefalse
+\newif\ifc@ltocauthor
+ \c@ltocauthorfalse
+\newif\ifc@lpub
+ \c@lpubfalse
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{colpage}
+% \begin{macro}{c@lctr}
+% \begin{macro}{\c@section}
+% |colpage| is a counter for storing the (current) page number for the
+% main document.
+% |c@lctr| is a counter for storing the current main document sectioning
+% number. A section counter (|\c@section|) is provided when the class
+% does not have sections.
+% \begin{macrocode}
+\newcounter{colpage} \setcounter{colpage}{1}
+ \renewcommand{\thecolpage}{\arabic{colpage}}
+\newcounter{c@lctr}
+\@ifundefined{c@section}{\newcounter{section}}{}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\c@ltocfnum}
+% \begin{macro}{\c@lloffnum}
+% \begin{macro}{\c@llotfnum}
+% These are output stream numbers for local ToC, LoF and LoT files.
+% Allocating new streams for each imported file may cause \TeX{} to
+% run out of streams (there is a limit of 16).
+% \begin{macrocode}
+\newwrite\c@ltocfnum
+\newwrite\c@lloffnum
+\newwrite\c@llotfnum
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \section{Kernel modifications (and potential additions)}
+%
+% Much of the class code consists of new versions of \LaTeX{} kernel commands.
+% Redefinitions starting with |\c@la...| are for commands in the main
+% document. Modifications starting |\c@lb...| are for commands within
+% imported documents.
+%
+%
+% \begin{macro}{\provideenvironment}
+% \begin{macro}{\c@lprovide@environment}
+% \begin{macro}{\c@lenvironment}
+% \begin{macro}{\c@lenva}
+% \begin{macro}{\c@lenvb}
+% \begin{macro}{\c@lthrowenv}
+% To stop \LaTeX{} whining when multiple classes are read which happen
+% to define commands (via |\newcommand|) or environments
+% (via |\newenvironment|) that have the same names, we need to be able
+% to make \LaTeX{} use |\providecommand| and |\provideenvironment|
+% instead. Unfortunately the kernel does not provide a |\provideenvironment|
+% command, so here is one based on the code in the \Lpack{makecmds} package.
+% \begin{macrocode}
+\def\provideenvironment{%
+ \@star@or@long\c@lprovide@environment}
+\def\c@lprovide@environment#1{%
+ \@ifundefined{#1}{%
+ \expandafter\let\csname#1\endcsname\relax
+ \expandafter\let\csname end#1\endcsname\relax
+ \new@environment{#1}}{\c@lenvironment{#1}}
+}
+\def\c@lenvironment#1{%
+ \@testopt{\c@lenva#1}0}
+\def\c@lenva#1[#2]{%
+ \@ifnextchar [{\c@lenvb#1[#2]}{\c@lthrowenv{#1}{[#2]}}}
+\def\c@lenvb#1[#2][#3]{\c@lthrowenv{#1}{[#2][#3]}}
+\def\c@lthrowenv#1#2#3#4{}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\c@lnamethm}
+% \begin{macro}{\@xnthm}
+% \begin{macro}{\@ynthm}
+% \begin{macro}{\@othm}
+% As pointed out by Hendri Hondrop\footnote{Email
+% from \texttt{hendri@cs.utwente.nl} on 16~May, 2000.}
+% |\newtheorem| commands in imported documents can interfere with each other.
+% My solution to this is to make the command local instead of global.
+% |\c@lnamethm| is a helper macro (removes the |\global| from the
+% |\@namedef|s in the original code), and the others are modifications
+% of the originals in \file{ltthm.dtx} (just removing any |\global| commands).
+% \changes{v0.3}{2000/05/20}{Added a local version of \cs{newtheorem}.}
+% \begin{macrocode}
+\@ifundefined{newtheorem}{}{%
+ \newcommand{\c@lnamethm}[3]{%
+ \@namedef{#1}{\@thm{#2}{#3}}%
+ \@namedef{end#1}{\@endtheorem}}
+ \def\@xnthm#1#2[#3]{%
+ \expandafter\@ifdefinable\csname #1\endcsname
+ {\@definecounter{#1}\@newctr{#1}[#3]%
+ \expandafter\xdef\csname the#1\endcsname{%
+ \expandafter\noexpand\csname the#3\endcsname \@thmcountersep
+ \@thmcounter{#1}}%
+ \c@lnamethm{#1}{#1}{#2}}}
+ \def\@ynthm#1#2{%
+ \expandafter\@ifdefinable\csname #1\endcsname
+ {\@definecounter{#1}%
+ \expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}%
+ \c@lnamethm{#1}{#1}{#2}}}
+ \def\@othm#1[#2]#3{%
+ \@ifundefined{c@#2}{\@nocounterr{#2}}%
+ {\expandafter\@ifdefinable\csname #1\endcsname
+ {\@namedef{the#1}{\@nameuse{the#2}}
+ \c@lnamethm{#1}{#2}{#3}}}}
+}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\providelength}
+% This is a |\provide...| version of |\newlength| (from \file{ltlength.dtx}).
+% \changes{v0.4}{2000/05/27}{Added \cs{providelength} and \cs{providecounter}
+% commands}
+% \begin{macrocode}
+\newcommand{\providelength}[1]{%
+ \ifx #1\undefined
+ \newlength{#1}
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\providecounter}
+% This is a |\provide...| version of |\newcounter| (from \file{ltcounts.dtx}).
+% \begin{macrocode}
+\newcommand{\providecounter}[1]{%
+ \expandafter\ifx \csname c@#1\endcsname \undefined
+ {\@definecounter{#1}}%
+ \@ifnextchar[{\@newctr{#1}}{}
+ \else
+ \@ifnextchar[{\c@l@gobbleoptarg}{}
+ \fi
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@l@gobbleoptarg}
+% A macro that discards an optional argument (i.e., the tokens |[optarg]|).
+% \changes{v0.4}{2000/05/27}{Added \cs{c@l@gobbleoptarg} command}
+% \begin{macrocode}
+\def\c@l@gobbleoptarg[#1]{}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\appendiargdef}
+% The code for this is copied from the \Lpack{abstract} package, hence
+% the use of |@bs| instead of |c@l| as a distinguishing substring.
+% \changes{v0.41}{2000/06/18}{Added \cs{appendiargdef} from the abstract package}
+% \begin{macrocode}
+\providecommand{\appendiargdef}[2]{\begingroup
+ \toks@\expandafter{#1{##1}#2}%
+ \edef\@bsx{\endgroup \def\noexpand#1####1{\the\toks@}}%
+ \@bsx}
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Document commands and environments}
+%
+% \begin{macro}{\c@lbdocumentclass}
+% The |\documentclass| in imported documents has to be changed so that
+% commands including the |@| sign are legal in the preamble. By default
+% the declared options and class are discarded. When the \Lopt{classes}
+% option is used, any potential new class file must be read.
+% |\documentclass|
+% is originally defined in \file{ltclass.dtx}.
+% \begin{macrocode}
+\ifc@lclasses
+ \newcommand\c@lbdocumentclass{%
+ \makeatletter %% added
+ \let\newcommand\providecommand %% added
+ \let\newenvironment\provideenvironment %% added
+%% \let\documentclass\@twoclasseserror
+%% \if@compatability\else\let\usepackage\RequirePackage\fi
+ \@fileswithoptions\@clsextension
+ }
+\else
+ \newcommand{\c@lbdocumentclass}[2][\@empty]{%
+ \makeatletter
+ }
+\fi
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@lbusepackage}
+% The |\usepackage| command (from \file{ltclass.dtx})
+% in imported documents is normally disabled.
+% This is the disabled version.
+% \begin{macrocode}
+\ifc@lpackages\else
+ \newcommand{\c@lbusepackage}[2][\@empty]{}
+\fi
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@lbLoadClass}
+% This is a copy of the |\LoadClass| from \file{ltclass.dtx}. I found it was
+% needed if an imported document used a class that in its turn used
+% |\LoadClass|.\footnote{Problem reported by Hans Fredrik Nordhaug
+% \texttt{hansfn@mi.uib.no} on 2001/08/24.}
+% \changes{v0.52}{2001/08/25}{Added \cs{c@lbLoadClass}}
+% \begin{macrocode}
+\newcommand{\c@lbLoadClass}{%
+ \ifx\@currext\@pkgextension
+ \@latex@error{\noexpand\LoadClass in package file}%
+ {You may only use \noexpand\LoadClass in a class file.}%
+ \fi
+ \@fileswithoptions\@clsextension}
+
+% \end{macrocode}
+% \end{macro}
+%
+% The |\document| command (defined in \file{ltfiles.dtx}) has to be modified,
+% both for the main document (to allow later preamble commands and to
+% store the jobname of the main document), and similarly but not identically,
+% for the imported documents (output here is to the |\@partaux| file instead
+% of the |\@mainaux| file).
+%
+% \begin{macro}{\c@ltextblock}
+% |\c@ltextblock| is a macro holding some code that is common to both
+% |\c@ladocument| and |\c@lbdocument|.
+% \changes{v0.3}{2000/05/20}{Added \cs{c@ltextblock} command}
+% \begin{macrocode}
+\newcommand{\c@ltextblock}{%
+ \@colht\textheight
+ \@colroom\textheight \vsize\textheight
+ \columnwidth\textwidth
+ \@clubpenalty\clubpenalty
+ \if@twocolumn
+ \advance\columnwidth -\columnsep
+ \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue
+ \fi
+ \hsize\columnwidth \linewidth\hsize
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@ladocument}
+% \begin{macro}{\c@lbdocument}
+% \begin{macrocode}
+\newcommand{\c@ladocument}{%
+ \endgroup
+ \let\mainjobname\jobname %% added
+ \def\c@lmainauxfile{\jobname.aux} %% added
+ \ifx\@unusedoptionlist\@empty\else
+ \@latex@warning@no@line{Unused global option(s):^^J%
+ \@spaces[\@unusedoptionlist]}%
+ \fi
+ \c@ltextblock %% a replacement
+ \begingroup\@floatplacement\@dblfloatplacement
+ \makeatletter\let\@writefile\@gobbletwo
+ \global \let \@multiplelabels \relax
+ \@input{\c@lmainauxfile}% %% changed
+ \endgroup
+ \if@filesw
+ \immediate\openout\@mainaux\c@lmainauxfile %% changed
+ \immediate\write\@mainaux{\relax}%
+ \fi
+ \process@table
+ \let\glb@currsize\@empty
+ \normalsize
+ \everypar{}%
+ \ifx\normalsfcodes\@empty
+ \ifnum\sfcode`\.=\@m
+ \let\normalsfcodes\frenchspacing
+ \else
+ \let\normalsfcodes\nonfrenchspacing
+ \fi
+ \fi
+ \@noskipsecfalse
+% \end{macrocode}
+% \begin{macro}{\@outputpage}
+% Imported documents may change the page number, which can then mess
+% up the numbering of later pages. The |colpage| counter is used
+% to synchronize the main document page numbering after any import.
+% To do this, it has to be incremented for each typeset page, so
+% this is added to the output routine (described in \file{ltoutput.dtx}).
+% This is done here in case any package in the main document has modified
+% |\@outputpage|, as the \Lpack{showframe} package does.
+% \changes{v0.4}{2000/05/27}{Moved the modification to \cs{@outputpage}
+% to within \cs{c@ladocument}}
+%
+% Similarly, the |\maketitle| command is made to be |\@clamaketitle| in case
+% some other package (e.g., \Lpack{titling}) has modified |\maketitle| after
+% the \Lpack{combine} class has done its thing.
+% \changes{v0.41}{2000/06/18}{Moved \cs{maketitle} letting to
+% \cs{c@lamaketitle} to inside \cs{c@ladocument}}
+% \begin{macrocode}
+ \g@addto@macro{\@outputpage}{\stepcounter{colpage}} %% added
+ \let\maketitle\c@lamaketitle %% added
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\c@lthechap}
+% \begin{macro}{\c@lthesec}
+% Store the initial forms of |\thechapter| or |\thesection| for later
+% restoration after a possible |\appendix|.
+% \changes{v0.51}{2001/07/05}{Added \cs{c@lthechap} and \cs{c@lthesec}}
+% \begin{macrocode}
+ \@ifundefined{c@chapter}% %% added
+ {\@ifundefined{c@section}{}{\let\c@lthesec\thesection}}%
+ {\let\c@lthechap\thechapter}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+ \let \@refundefined \relax
+ \let\AtBeginDocument\@firstofone
+ \@begindocumenthook
+ \ifdim\topskip<1sp\global\topskip 1sp\relax\fi
+ \global\@maxdepth\maxdepth
+%% \global\let\@begindocumenthook\@undefined
+ \ifx\@listfiles\@undefined
+ \global\let\@filelist\relax
+ \global\let\@addtofilelist\@gobble
+ \fi
+%% \gdef\do##1{\global\let ##1\@notprerr}%
+%% \@preamblecmds
+ \global\let \@nodocument \relax
+ \global\let\do\noexpand
+ \ignorespaces}
+
+% \end{macrocode}
+% For an imported document the \Lopt{layouts} option is implemented
+% in the |\document| command. The \Lpack{article},
+% \Lpack{report} and \Lpack{letter} classes all start of with the |plain|
+% page style, which is specified within the class file. When mixed classes
+% of imported documents are used the page style definitions can get
+% overwritten by the extra class(es). So, the revised |\document| command
+% resets the |plain| page style to the \Lpack{combine} class definition
+% and sets the initial page style to be |plain|.
+% \begin{macrocode}
+\newcommand{\c@lbdocument}{%
+%% \endgroup
+%% \ifx\@unusedoptionlist\@empty\else
+%% \@latex@warning@no@line{Unused global option(s):^^J%
+%% \@spaces[\@unusedoptionlist]}%
+%% \fi
+ \ifc@llayouts %% layouts option
+ \c@ltextblock
+ \fi
+ \begingroup\@floatplacement\@dblfloatplacement
+ \makeatletter \let\@writefile\@gobbletwo
+%% \global \let \@multiplelabels \relax
+ \@input{\c@lauxfile}%
+ \endgroup
+ \if@filesw
+ \immediate\openout\@partaux\c@lauxfile
+ \immediate\write\@partaux{\relax}%
+ \fi
+ \process@table
+ \let\glb@currsize\@empty
+ \normalsize
+ \everypar{}%
+ \@noskipsecfalse
+%% \let \@refundefined \relax
+ \let\AtBeginDocument\@firstofone
+ \@begindocumenthook
+ \ifdim\topskip<1sp\global\topskip 1sp\relax\fi
+ \global\@maxdepth\maxdepth
+%% \global\let\@begindocumenthook\@undefined
+ \ifx\@listfiles\@undefined
+ \global\let\@filelist\relax
+ \global\let\@addtofilelist\@gobble
+ \fi
+%% \gdef\do##1{\global\let ##1\@notprerr}%
+%% \@preamblecmds
+ \global\let \@nodocument \relax
+ \global\let\do\noexpand
+ \let\ps@plain\c@lbps@plain %% set pagestyle
+% \end{macrocode}
+% Setting |\pagestyle| here kills the use of any other style (e.g.,
+% a fancy style) in the imports\footnote{Problem discovered by Rumen
+% Bogdanovski (\texttt{rgb@libra.astro.bas.bg}) on 2001/04/03.}.
+% \changes{v0.41}{2001/04/04}{Eliminated page style setting for imports.}
+% \begin{macrocode}
+%% \pagestyle{plain}
+ \ifc@lfolios %% folios option initialises page number
+ \setcounter{page}{1}
+ \fi
+ \ifc@lhaschapter %% set chapter/section number
+ \setcounter{c@lctr}{\value{chapter}}
+ \setcounter{chapter}{0}
+ \else
+ \setcounter{c@lctr}{\value{section}}
+ \setcounter{section}{0}
+ \fi
+ \c@lresetcounters %% added
+ \makeatother %% added
+ \ignorespaces}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\c@lresetcounters}
+% This sets various counters to zero, and is called at the beginning of
+% an imported document.
+% \changes{v0.4}{2000/05/27}{Added \cs{c@lresetcounters} and
+% \cs{zeroextracounters} commands}
+% \changes{v0.51}{2001/07/05}{Reset chapter/section format after possible \cs{appendix}}
+% \begin{macrocode}
+\newcommand{\c@lresetcounters}{%
+ \@ifundefined{c@figure}{}{\setcounter{figure}{0}}
+ \@ifundefined{c@table}{}{\setcounter{table}{0}}
+ \@ifundefined{c@equation}{}{\setcounter{equation}{0}}
+ \@ifundefined{c@footnote}{}{\setcounter{footnote}{0}}
+ \@ifundefined{c@chapter}%
+ {\@ifundefined{c@section}{}{\renewcommand{\thesection}{\c@lthesec}}}%
+ {\renewcommand{\thechapter}{\c@lthechap}}
+ \zeroextracounters
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\zeroextracounters}
+% This is a user-level macro that can be renewed to reset addtional
+% counters to zero at the beginning of an imported document.
+% \begin{macrocode}
+\newcommand{\zeroextracounters}{}
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% The |\enddocument| command (defined in \file{ltmiscen.dtx}) has
+% to be modified for both the main and imported documents. The modifications
+% are minor, mainly concerned with handling the proper files.
+%
+% \begin{macro}{\c@lenddoca}
+% |\c@lenddoca| holds some code that is common to both |\c@laenddocument|
+% and |\c@lbenddocument|.
+% \changes{v0.3}{2000/05/20}{Added \cs{c@lenddoca} command}
+% \begin{macrocode}
+\newcommand{\c@lenddoca}{%
+ \@dofilelist
+ \ifdim \font@submax >\fontsubfuzz\relax
+ \@font@warning{Size substitutions with differences\MessageBreak
+ up to \font@submax\space have occured.\@gobbletwo}%
+ \fi
+ \@defaultsubs
+%% \@refundefined
+ \if@filesw
+ \ifx \@multiplelabels \relax
+ \if@tempswa
+ \@latex@warning@no@line{Label(s) may have changed.
+ Rerun to get cross-references right}%
+ \fi
+ \else
+ \@multiplelabels
+ \fi
+ \fi
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@laenddocument}
+% \begin{macro}{\c@lbenddocument}
+% \begin{macrocode}
+\newcommand{\c@laenddocument}{%
+ \@enddocumenthook
+ \@checkend{document}%
+ \clearpage
+ \begingroup
+ \if@filesw
+ \immediate\closeout\@mainaux
+ \immediate\closeout\@partaux
+ \let\@setckpt\@gobbletwo
+ \let\@newl@bel\@testdef
+ \@tempswafalse
+ \makeatletter \input\c@lmainauxfile %% change here
+ \fi
+ \c@lenddoca %% a replacement
+ \@refundefined
+ \endgroup
+ \deadcycles\z@\@@end}
+
+\newcommand{\c@lbenddocument}{%
+ \@enddocumenthook
+ \@checkend{document}%
+ \clearpage
+ \begingroup
+ \if@filesw
+ \immediate\closeout\@partaux %% change here
+ \let\@setckpt\@gobbletwo
+ \let\@newl@bel\@testdef
+ \@tempswafalse
+ \makeatletter \input\c@lauxfile %% change here
+ \fi
+ \c@lenddoca %% a replacement
+%% \@refundefined
+ \endgroup
+ \deadcycles\z@ %%\@@end %% \@@end will close *all* files
+ \c@lclosetocs %% close local files
+% \end{macrocode}
+% Reset sectional and page numbering. Also reset stuff to take account
+% of the possibily that |\appendix| was called.
+% \changes{v0.51}{2001/05/09}{Added reset of chapter name after appendix}
+% \begin{macrocode}
+ \ifc@lhaschapter %% reset chap/sec and page numbering
+ \setcounter{chapter}{\value{c@lctr}}
+ \gdef\thechapter{\c@lthechap}
+ \gdef\@chapapp{\chaptername}
+ \else
+ \setcounter{section}{\value{c@lctr}}
+ \gdef\thesection{\c@lthesec}
+ \fi
+ \setcounter{page}{\value{colpage}}
+ \pagestyle{\c@lastyle}
+ \erasetitling %% no \coltoc... or \published commands defined
+%% \let\@auxout\@mainaux
+ \gdef\jobname{\mainjobname} %% swap back to main document file name
+ \endinput %% ignore any text after \end{document}
+}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Titling commands}
+%
+% Changes to |\maketitle| and friends are defined here.
+%
+% \begin{macro}{\maintitlefont}
+% \begin{macro}{\postmaintitle}
+% \begin{macro}{\mainauthorfont}
+% \begin{macro}{\postmainauthor}
+% \begin{macro}{\maindatefont}
+% \begin{macro}{\postmaindate}
+% To provide some flexibilty in the titling style of the main document,
+% user level commands are provided that can be changed to reconfigure
+% the appearance resulting from |\maketitle|. These are defined initially
+% to approximately mimic the normal \LaTeX{} style.
+% \changes{v0.3}{2000/05/20}{Added \cs{...main...} commands.}
+% \begin{macrocode}
+\newcommand{\maintitlefont}{\begin{center}\LARGE}
+\newcommand{\postmaintitle}{\par\end{center}\vskip 0.5em}
+\newcommand{\mainauthorfont}{\begin{center}
+ \large \lineskip .5em%
+ \begin{tabular}[t]{c}}
+\newcommand{\postmainauthor}{\end{tabular}\par\end{center}}
+\newcommand{\maindatefont}{\begin{center}\large}
+\newcommand{\postmaindate}{\par\end{center}}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\c@lamaketitle}
+% The |\maketitle| command (defined by each class) must not incapacitate
+% several commands that it normally does (e.g., |\thanks|, |\maketitle|,
+% |\title|, |\author|, |\date|, and |\and|). The following is a
+% modification of |\maketitle| as in the \Lpack{article}, \Lpack{report},
+% and \Lpack{book} classes.
+% \changes{v0.3}{2000/05/20}{Revised maketitle-related commands.}
+% \begin{macrocode}
+\if@titlepage
+ \newcommand{\c@lamaketitle}{\begin{titlepage}%
+ \let\footnotesize\small
+ \let\footnoterule\relax
+ \let \footnote \thanks
+ \null\vfil
+ \vskip 60\p@
+ {\maintitlefont \@title \postmaintitle}
+ {\mainauthorfont \@author \postmainauthor}
+ {\maindatefont \@date \postmaindate}
+ \par
+ \@thanks
+ \vfil\null
+ \end{titlepage}%
+ \setcounter{footnote}{0}%
+ \c@lmtitlempty %% change here
+ } % end titlepage defs
+\else
+ \newcommand{\c@lamaketitle}{\par
+ \begingroup
+ \c@lmtitle %% change here
+ \endgroup
+ \setcounter{footnote}{0}%
+ \c@lmtitlempty %% change here
+ } % end non-titlepage
+
+% \end{macrocode}
+% I use |\def\@maketitle| to account for the cases where the main class
+% does not have titling commands, and to ensure an existing |\@maketitle|
+% gets overridden.
+% \begin{macrocode}
+
+ \def\@maketitle{%
+ \newpage
+ \null
+ \vskip 2em%
+ {\maintitlefont \@title \postmaintitle}
+ {\mainauthorfont \@author \postmainauthor}
+ {\maindatefont \@date \postmaindate}
+ \par
+ \vskip 1.5em}
+\fi % end mod A of titling
+
+% \end{macrocode}
+%
+% \begin{macro}{\c@lmtitle}
+% This macro contains much of the code that is common between
+% |\c@l@maketitle| and |\c@lbmaketitle|.
+% \begin{macrocode}
+\newcommand{\c@lmtitle}{%
+ \renewcommand\thefootnote{\@fnsymbol\c@footnote}%
+ \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}%
+ \long\def\@makefntext##1{\parindent 1em\noindent
+ \hb@xt@1.8em{%
+ \hss\@textsuperscript{\normalfont\@thefnmark}}##1}%
+ \if@twocolumn
+ \ifnum \col@number=\@ne
+ \@maketitle
+ \else
+ \twocolumn[\@maketitle]%
+ \fi
+ \else
+ \newpage
+ \global\@topnum\z@
+ \@maketitle
+ \fi
+ \thispagestyle{plain}\@thanks
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% The modification for imported documents is simpler as there seems no
+% point in allowing for a \Lopt{titlepage} option. Also, don't start
+% a new page for the title and use a local typesetting style.
+% \begin{macrocode}
+ \newcommand{\c@lbmaketitle}{\par
+ \begingroup
+ \let\newpage\relax
+ \let\@maketitle\c@lb@maketitle
+ \c@lmtitle
+ \endgroup
+ \setcounter{footnote}{0}%
+ \c@lmtitlempty
+ }
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@lmtitlempty}
+% A helper macro to save some macro space.
+% It empties elements of |\maketitle|.
+% \begin{macrocode}
+\newcommand{\c@lmtitlempty}{%
+ \global\let\@thanks\@empty
+ \global\let\@author\@empty
+ \global\let\@date\@empty
+ \global\let\@title\@empty
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\importtitlefont}
+% \begin{macro}{\postimporttitle}
+% \begin{macro}{\importauthorfont}
+% \begin{macro}{\postimportauthor}
+% \begin{macro}{\importdatefont}
+% \begin{macro}{\postimportdate}
+% The fonts and layouts for use within |\maketitle| in imported documents.
+% \changes{v0.3}{2000/05/20}{Added \cs{...import...} commands.}
+% \begin{macrocode}
+\newcommand{\importtitlefont}{\begin{center}\LARGE\bfseries}
+\newcommand{\postimporttitle}{\par\end{center}}
+\newcommand{\importauthorfont}{\begin{center}
+ \large\itshape \lineskip .5em%
+ \begin{tabular}[t]{c}}
+\newcommand{\postimportauthor}{\end{tabular}\par\end{center}}
+\newcommand{\importdatefont}{\begin{center}\large}
+\newcommand{\postimportdate}{\par\end{center}}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\c@lb@maketitle}
+% This typesets the title in an imported document. It also includes the
+% code for implementing the \Lopt{nodate}, \Lopt{notitle} and \Lopt{noauthor}
+% options. The vertical spacing is reduced slightly from normal.
+% The title and author texts are set with |\importtitlefont| and
+% |\importauthorfont| respectiveley. The date is set with |\importdatefont|.
+% \begin{macrocode}
+\newcommand{\c@lb@maketitle}{%
+%% \newpage
+ \begingroup
+ \let\footnote\thanks
+ \null
+ \vskip 2em%
+ \ifc@lnotitle\else
+ {\importtitlefont \@title \postimporttitle}
+ \fi
+ \ifc@lnoauthor\else
+ {\importauthorfont \@author \postimportauthor}
+ \fi
+ \ifc@lnodate\else
+ {\importdatefont \@date \postimportdate}%
+ \fi
+ \par
+ \endgroup
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Cross referencing}
+%
+% This section deals with |\tableofcontents| and friends, together
+% with labeling, referencing and citations.
+%
+% \begin{macro}{\c@lbstarttoc}
+% The |\@starttoc| command (from \file{ltsect.dtx}) has to be modified
+% for imported documents so that a local ToC (LoF, LoT) file is used
+% instead of the one for the main document. I use a file identifier
+% of |c@l#1fnum| instead of the normal |tf@#1|.
+% \begin{macrocode}
+\newcommand{\c@lb@starttoc}[1]{%
+ \begingroup
+ \makeatletter
+ \def\tocfname{\jobname.#1}
+ \@input{\tocfname}%
+ \if@filesw
+% \end{macrocode}
+% The following tests are to check if we can use a predefined output stream
+% or have to allocate a new one (e.g., if a new list of floats hase been
+% defined).
+% \begin{macrocode}
+ \def\c@ltempa{#1} \def\c@ltempb{toc}
+ \ifx \c@ltempa \c@ltempb
+ \immediate\openout\c@ltocfnum \tocfname\relax
+ \else
+ \def\c@ltempb{lof}
+ \ifx \c@tempa \c@ltempb
+ \immediate\openout\c@lloffnum \tocfname\relax
+ \else
+ \def\c@ltempb{lot}
+ \ifx \c@tempa \c@ltempb
+ \immediate\openout\c@llotfnum \tocfname\relax
+ \else
+ \expandafter\newwrite\csname c@l#1fnum\endcsname
+ \immediate\openout\csname c@l#1fnum\endcsname \tocfname\relax
+ \fi
+ \fi
+ \fi
+ \fi
+ \@nobreakfalse
+ \endgroup}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@lbwritefile}
+% To go along with local ToC files, |\@writefile| (in \file{ltmiscen.dtx})
+% has to be modified to match. We also check if a local file exists before
+% writing to it.
+% \begin{macrocode}
+\newcommand{\c@lb@writefile}[2]{%
+ \def\tocfname{\jobname.#1}
+ \IfFileExists{\tocfname}
+ {\@temptokena{#2}%
+ \immediate\write\csname c@l#1fnum\endcsname{\the\@temptokena}}
+ {}
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@lclosetocs}
+% At the end of each imported document, any local ToC, etc., files
+% must be closed.
+% \begin{macrocode}
+\newcommand{\c@lclosetocs}{%
+ \immediate\closeout\c@ltocfnum
+ \immediate\closeout\c@lloffnum
+ \immediate\closeout\c@llotfnum
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\c@ltocgobble}
+% A macro containing some common code for |\...addtocontents| commands.
+% \begin{macrocode}
+\newcommand{\c@ltocgobble}{%
+ \let\label\@gobble \let\index\@gobble \let\glossary\@gobble}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@laaddtocontents}
+% \begin{macro}{\c@laaddcontentsline}
+% It turns out to be useful to have versions of ToC addition commands
+% that go towards the main document.
+% \begin{macrocode}
+\newcommand{\c@laaddtocontents}[2]{%
+ \protected@write\@mainaux
+ {\c@ltocgobble}%
+ {\string\@writefile{#1}{#2}}
+}
+\newcommand{\c@laaddcontentsline}[3]{%
+ \c@laaddtocontents{#1}{\protect\contentsline{#2}{#3}{\thecolpage}}
+}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\c@lbaddtocontents}
+% To implement the \Lopt{maintoc} option, we need a modification of
+% |\addtocontents| (in \file{ltsect.dtx}) so that it will write to
+% both the local and the main \file{.aux} files.
+% \begin{macrocode}
+\ifc@lmaintoc
+ \newcommand{\c@lbaddtocontents}[2]{%
+ \protected@write\@auxout
+ {\c@ltocgobble}%
+ {\string\@writefile{#1}{#2}}
+ \ifx\@mainaux\@auxout\else %% prevent writing twice to mainaux
+ \protected@write\@mainaux
+ {\c@ltocgobble}%
+ {\string\@writefile{#1}{\protect\begin{tocindent}{\toctocindent}}}
+ \protected@write\@mainaux
+ {\c@ltocgobble}%
+ {\string\@writefile{#1}{#2}}
+ \protected@write\@mainaux
+ {\c@ltocgobble}%
+ {\string\@writefile{#1}{\protect\end{tocindent}}}
+ \fi
+ }
+\fi
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@lblabel}
+% \begin{macro}{\c@lb@setref}
+% To get the `correct' page number for labels in an imported
+% document, we have to use the global and not the local page number.
+% \begin{macrocode}
+\newcommand{\c@lblabel}[1]{\@bsphack
+ \protected@write\@auxout{}%
+ {\string\newlabel{#1}{{\@currentlabel}{\thecolpage}}}%
+ \@esphack}
+\newcommand{\c@lb@setref}[3]{%
+ \ifx#1\relax
+ \protect\G@refundefinedtrue
+ \nfss@text{\reset@font\bfseries ??}%
+ \@latex@warning{Reference `#3' on page \thecolpage \space
+ undefined}%
+ \else
+ \expandafter#2#1\null
+ \fi}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\c@lbnewlabel}
+% \begin{macro}{\c@lbref}
+% \begin{macro}{\c@lpagebref}
+% For local labels and cross-references in an imported document,
+% special versions of
+% |\newlabel|, |\ref| and |\pageref| (in \file{ltxref.dtx}) are needed.
+% I use |\jobname| to distinguish identical labels in different imported
+% files.
+% \begin{macrocode}
+\newcommand{\c@lbnewlabel}{\@newl@bel{R?\jobname?}}
+\newcommand{\c@lbref}[1]{\expandafter\@setref\csname R?\jobname?@#1\endcsname
+ \@firstoftwo{#1}}
+\newcommand{\c@lbpageref}[1]{\expandafter\@setref\csname R?\jobname?@#1\endcsname
+ \@secondoftwo{#1}}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\c@lwritemainbib}
+% \begin{macro}{\c@lwritelocalbib}
+% For citatations we may be writing to either the main bibliography
+% or to a local bibliography. For local bibliographies I use the
+% |\jobname| as a distinguishing characteristic.
+% \changes{v0.6}{2002/08/24}{Added \cs{c@lwritemainbib} and \cs{c@lwritelocalbib}}
+% \begin{macrocode}
+\newcommand{\c@lwritemainbib}{%
+ \if@filesw\immediate\write\@mainaux{\string\citation{\@citeb}}\fi
+ \@ifundefined{b@\@citeb}{\mbox{\reset@font\bfseries ?}%
+ \G@refundefinedtrue
+ \@latex@warning
+ {Citation `\@citeb' on page \thecolpage \space undefined}}%
+ {\hbox{\csname b@\@citeb\endcsname}}}
+\newcommand{\c@lwritelocalbib}{%
+ \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
+ \@ifundefined{B?\jobname?@\@citeb}{\mbox{\reset@font\bfseries ?}%
+ \G@refundefinedtrue
+ \@latex@warning
+ {Citation `\@citeb' on page \thecolpage \space undefined}}%
+ {\hbox{\csname B?\jobname?@\@citeb\endcsname}}}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\c@lanocite}
+% Slight mod to the kernel |\nocite| macro.
+% \changes{v0.6}{2002/08/24}{Added \cs{c@lanocite}}
+% \begin{macrocode}
+\newcommand{\c@lanocite}[1]{\@bsphack
+ \@for\@citeb:=#1\do{%
+ \edef\@citeb{\expandafter\@firstofone\@citeb}%
+ \if@filesw\immediate\write\@mainaux{\string\citation{\@citeb}}\fi
+ \@ifundefined{b@\@citeb}{\G@refundefinedtrue
+ \@latex@warning{Citation `\@citeb' undefined}}{}}%
+ \@esphack}
+\let\nocite\c@lanocite
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@lbnocite}
+% Need another version of |\nocite| for imports.
+% \changes{v0.6}{2002/08/24}{Added \cs{c@lbnocite}}
+% \begin{macrocode}
+\newcommand{\c@lbnocite}[1]{\@bsphack
+ \@for\@citeb:=#1\do{%
+ \edef\@citeb{\expandafter\@firstofone\@citeb}%
+ \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
+ \@ifundefined{B?\jobname?@\@citeb}{\G@refundefinedtrue
+ \@latex@warning{Citation `\@citeb' undefined}}{}}%
+ \@esphack}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@lb@citex}
+% \begin{macro}{\c@lbbibcite}
+% For local citations in an imported document, special versions of
+% |\@citex| and |\bibcite| (in \file{ltbibl.dtx}) are needed. I use
+% the |\jobname| as a means of distinguishing between identical citation
+% labels in different imported files.
+% \changes{v0.6}{2002/08/24}{Added code for bib options to \cs{c@lbbibcite}}
+% \begin{macrocode}
+\def\c@lb@citex[#1]#2{%
+ \ifc@lcombib
+ \c@lanocite{#2}%
+ \fi
+ \let\@citea\@empty
+ \@cite{\@for\@citeb:=#2\do
+ {\@citea\def\@citea{,\penalty\@m\ }%
+ \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
+ \ifc@lcombib
+ \c@lwritelocalbib
+ \else
+ \ifc@lonebib
+ \c@lwritemainbib
+ \else
+ \c@lwritelocalbib
+ \fi
+ \fi}}{#1}}
+
+\ifc@lonebib
+ \newcommand{\c@lbbibcite}{\@newl@bel b}
+ \ifc@lcombib
+ \renewcommand{\c@lbbibcite}{\@newl@bel{B?\jobname?}}
+ \fi
+\else
+ \newcommand{\c@lbbibcite}{\@newl@bel{B?\jobname?}}
+\fi
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Page styles and numbering}
+%
+% \begin{macro}{\c@lapagestyle}
+% \begin{macro}{\c@lastyle}
+% \begin{macro}{\c@lbpagestyle}
+% I want to be able to restore the main document pagestyle after an
+% import. The current main pagestyle is kept in |\c@lastyle| which is
+% defined by |\c@lapagestyle| (original in \file{ltpage.dtx}).
+% \changes{v0.41}{2001/04/04}{Changed c@lstyle to \cs{c@lastyle} (two places)}
+% \begin{macrocode}
+\newcommand{\c@lapagestyle}[1]{%
+ \gdef\c@lastyle{#1}
+ \@ifundefined{ps@#1}{}{\@nameuse{ps@#1}}
+}
+% \end{macrocode}
+% |\c@lbpagestyle| is the same as the kernel |\pagestyle|, except for some
+% reason \LaTeX{} complains that the original command |\undefinedpagestyle|
+% is undefined!
+% \begin{macrocode}
+\newcommand{\c@lbpagestyle}[1]{%
+ \@ifundefined{ps@#1}{}{\@nameuse{ps@#1}}
+}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\c@lbpagenumbering}
+% Need to do something about changing the page numbering in imported
+% documents, as it can have an unfortunate impact on later numbering.
+% The original command is in \file{ltpageno.dtx}. Disable changing
+% the style of the page number unless the \Lopt{folios} option is in effect.
+% \begin{macrocode}
+\ifc@lfolios
+ \newcommand{\c@lbpagenumbering}[1]{%
+ \global\c@page \@ne \gdef\thepage{\csname @#1\endcsname
+ \c@page}}
+\else
+ \newcommand{\c@lbpagenumbering}[1]{}
+\fi
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@laps@plain}
+% \begin{macro}{\c@lbps@plain}
+% Alternative definitions for the |plain| pagestyle.
+% \begin{macrocode}
+\if@twoside
+ \newcommand{\c@laps@plain}{%
+ \let\@mkboth\@gobbletwo
+ \let\@oddhead\@empty \let\@evenhead\@empty
+ \def\@oddfoot{\reset@font\hfil\thepage}%
+ \def\@evenfoot{\reset@font\thepage\hfil}%
+ }
+ \ifc@lfolios
+ \newcommand{\c@lbps@plain}{%
+ \let\@mkboth\@gobbletwo
+ \let\@oddhead\@empty \let\@evenhead\@empty
+ \def\@oddfoot{\reset@font(\thepage)\hfil\thecolpage}%
+ \def\@evenfoot{\reset@font\thecolpage\hfil(\thepage)}%
+ }
+ \else
+ \newcommand{\c@lbps@plain}{%
+ \let\@mkboth\@gobbletwo
+ \let\@oddhead\@empty \let\@evenhead\@empty
+ \def\@oddfoot{\reset@font\hfil\thecolpage}%
+ \def\@evenfoot{\reset@font\thecolpage\hfil}%
+ }
+ \fi
+\else
+ \newcommand{\c@laps@plain}{%
+ \let\@mkboth\@gobbletwo
+ \let\@oddhead\@empty \let\@evenhead\@empty
+ \def\@oddfoot{\reset@font\hfil\thepage}%
+ \let\@evenfoot\@oddfoot
+ }
+ \ifc@lfolios
+ \newcommand{\c@lbps@plain}{%
+ \let\@mkboth\@gobbletwo
+ \let\@oddhead\@empty \let\@evenhead\@empty
+ \def\@oddfoot{\reset@font(\thepage)\hfil\thecolpage}%
+ \let\@evenfoot\@oddfoot
+ }
+ \else
+ \newcommand{\c@lbps@plain}{%
+ \let\@mkboth\@gobbletwo
+ \let\@oddhead\@empty \let\@evenhead\@empty
+ \def\@oddfoot{\reset@font\hfil\thecolpage}%
+ \let\@evenfoot\@oddfoot
+ }
+ \fi
+\fi
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \section{New class commands}
+%
+% That completes the preliminaries. We can now move on and define the
+% new commands and environment implemented by the \Lpack{combine} class.
+%
+% \begin{macro}{\ps@combine}
+% A new pagestyle. Like |plain| but the page numbers are put at
+% a bottom corner instead of being centered. It also changes the
+% the |plain| style to match.
+% \begin{macrocode}
+\if@twoside
+ \newcommand{\ps@combine}{%
+ \let\@mkboth\@gobbletwo
+ \let\@oddhead\@empty \let\@evenhead\@empty
+ \def\@oddfoot{\reset@font\hfil\thepage}%
+ \def\@evenfoot{\reset@font\thepage\hfil}%
+ \let\ps@plain\c@laps@plain
+ }
+\else
+ \newcommand{\ps@combine}{%
+ \let\@mkboth\@gobbletwo
+ \let\@oddhead\@empty \let\@evenhead\@empty
+ \def\@oddfoot{\reset@font\hfil\thepage}%
+ \let\@evenfoot\@oddfoot
+ \let\ps@plain\c@laps@plain
+ }
+\fi
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\import}
+% |\import{|\meta{texfile}|}| attempts to find and input the file
+% \meta{texfile}\texttt{.tex}. It is very loosely based on |\include|.
+% It also adds the |\coltoctitle|, etc., to the ToC in a useful
+% order\footnote{This need pointed out by Stefan Becuwe
+% (\texttt{Stefan.Becuwe@ua.ac.be}) by Email on 2001/07/09.}.
+% \changes{v0.51}{2001/07/09}{\cs{import} adds coltoctitle, etc., to the ToC}
+% \changes{v0.53}{2001/09/05}{Added empty \cs{numberline} to title in ToC}
+% \begin{macrocode}
+\newcommand{\import}[1]{%
+ \ifc@ltoctitle
+ \addtocontents{toc}{\protect\contentsline{coltoctitle}%
+ {\protect\numberline{}\savec@ltoctitle}{\thecolpage}}
+ \c@ltoctitlefalse
+ \fi
+ \ifc@ltocauthor
+ \addcontentsline{toc}{coltocauthor}{\protect\numberline{}\savec@ltocauthor}
+ \c@ltocauthorfalse
+ \fi
+ \ifc@lpub
+ \addcontentsline{toc}{published}{\protect\numberline{}\savec@lpublished}
+ \c@lpubfalse
+ \fi
+ \gdef\jobname{#1}
+% \end{macrocode}
+% \changes{v0.6}{2002/08/24}{Added empty definition for nocite{*}
+% handling to \cs{import}}
+% \begin{macrocode}
+ \expandafter\let\csname B?\jobname?@*\endcsname\@empty
+ \gdef\c@lauxfile{#1.aux}
+ \@tempswatrue
+ \let\@auxout\@partaux
+ \@input@{#1.tex}%
+%% \@writeckpt{#1}%
+ \let\@auxout\@mainaux
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bodytitlemark}
+% \begin{macro}{\bodytitle}
+% |\bodytitle[|\meta{short}|]{|\meta{long}|}| is for putting a sectional
+% title into the main document for the following imported document. It is
+% like a |\section| (or |\chapter|) command and has its own numbering scheme.
+% \begin{macrocode}
+\newcommand*\bodytitlemark[1]{}
+\newcounter{bodytitle}
+\renewcommand{\thebodytitle}{\@arabic\c@bodytitle}
+\ifc@lhaschapter
+ \newcommand{\bodytitle}{\@startsection{bodytitle}{0}{\z@}%
+ {-3.5ex \@plus -1ex \@minus -.2ex}%
+ {2.3ex \@plus.2ex}%
+ {\normalfont\Huge\bfseries}}
+\else
+ \newcommand{\bodytitle}{\@startsection{bodytitle}{1}{\z@}%
+ {-3.5ex \@plus -1ex \@minus -.2ex}%
+ {2.3ex \@plus.2ex}%
+ {\normalfont\Large\bfseries}}
+\fi
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\c@ll@chapseci}
+% \begin{macro}{\c@ll@chapsecii}
+% These are two helper macros that contain common code used for
+% some of the ToC typesetting commands that will be defined. Essentially
+% they hold the first and second quarter of the code for ToC typesetting
+% of chapters and sections.
+% \begin{macrocode}
+\newcommand{\c@ll@chapseci}{%
+% \setlength\@tempdima{1.5em}%
+ \setlength\@tempdima{0em}%
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \leavevmode
+}
+\newcommand{\c@ll@chapsecii}[2]{%
+ \advance\leftskip\@tempdima
+ \hskip -\leftskip
+ #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
+}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\l@bodytitle}
+% |\l@bodytitle| typesets the ToC entry for |\bodytitle|.
+% \begin{macrocode}
+\ifc@lhaschapter
+ \newcommand*\l@bodytitle[2]{% % as per chapter
+ \ifnum \c@tocdepth >\m@ne
+ \addpenalty{-\@highpenalty}%
+ \addvspace{1.0em \@plus\p@}%
+ \c@ll@chapseci
+ \bfseries %% bold ToC entry
+ \c@ll@chapsecii{#1}{#2}
+ \penalty\@highpenalty
+ \endgroup
+ \fi}
+\else
+ \newcommand*\l@bodytitle[2]{% % as per section
+ \ifnum \c@tocdepth >\z@
+ \addpenalty\@secpenalty
+ \addvspace{1.0em \@plus\p@}%
+ \c@ll@chapseci
+ \bfseries %% bold ToC entry
+ \c@ll@chapsecii{#1}{#2}
+ \endgroup
+ \fi}
+\fi
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\toctitleindent}
+% \begin{macro}{\tocauthorindent}
+% \begin{macro}{\tocpubindent}
+% \begin{macro}{\toctocindent}
+% These lengths control the indentations of the imported title, author,
+% published, and sectional headings in the main ToC.
+% \begin{macrocode}
+\newlength{\toctitleindent}\setlength{\toctitleindent}{0pt}
+\newlength{\tocauthorindent}\setlength{\tocauthorindent}{1.5em}
+\newlength{\tocpubindent}\setlength{\tocpubindent}{1.5em}
+\newlength{\toctocindent}\setlength{\toctocindent}{1.5em}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{environment}{tocindent}
+% The |tocindent| environment is used to set the various main ToC indents.
+% \begin{macrocode}
+\newenvironment{tocindent}[1]{%
+ \hangindent #1 \hangafter -100\relax}{}
+
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\toctitlefont}
+% \begin{macro}{\tocauthorfont}
+% \begin{macro}{\tocpubfont}
+% These macros define the fonts to be used for typesetting the title,
+% author and publication entries in the main ToC.
+% \begin{macrocode}
+\newcommand{\toctitlefont}{\bfseries}
+\newcommand{\tocauthorfont}{\itshape}
+\newcommand{\tocpubfont}{\normalfont}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\coltoctitle}
+% \begin{macro}{\l@coltoctitle}
+% |\coltoctitle{|\meta{title}|}| adds \meta{title} to the ToC for the
+% following imported document. The ToC entry is typeset by |\l@coltoctitle|.
+% \changes{v0.51}{2001/07/09}{Save the value of \cs{coltoctitle}}
+% \begin{macrocode}
+\newcommand*{\coltoctitle}[1]{%
+ \c@ltoctitletrue%
+ \gdef\savec@ltoctitle{#1}
+}
+
+% \end{macrocode}
+%
+% We want to arrange it so that if the title is near the bottom of a
+% page in the ToC, have the pagebreak before rather than after the title.
+% \changes{v0.42}{2001/04/04}{Changed pagebreak penalties in \cs{l@coltoctitle}}
+% \changes{v0.53}{2001/09/05}{Fixed extraneous space in \cs{l@coltoctitle}}
+% \begin{macrocode}
+\ifc@lhaschapter
+ \newcommand*\l@coltoctitle[2]{% % as per chapter
+ \ifnum \c@tocdepth >\m@ne
+ \addpenalty{-\@highpenalty}% encourage page break
+ \addvspace{1.0em \@plus\p@}%
+ \c@ll@chapseci
+ \setlength{\@tempdima}{\toctitleindent}% eliminate any spaces here
+ \toctitlefont %% bold ToC entry
+ \c@ll@chapsecii{#1}{#2}
+ \penalty\@highpenalty % discourage page break
+ \endgroup
+ \fi}
+\else
+ \newcommand*\l@coltoctitle[2]{% % as per section
+ \ifnum \c@tocdepth >\z@
+ \addpenalty\@secpenalty
+ \addvspace{1.0em \@plus\p@}%
+ \c@ll@chapseci
+ \setlength{\@tempdima}{\toctitleindent}% eliminate any spaces here
+ \toctitlefont %% bold ToC entry
+ \c@ll@chapsecii{#1}{#2}
+ \penalty\@highpenalty % discourage page break
+ \endgroup
+ \fi}
+\fi
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\coltocauthor}
+% \begin{macro}{\l@coltocauthor}
+% |\coltocauthor{|\meta{authors}|}| adds \meta{authors} to the ToC for the
+% following imported document. The ToC entry is typeset by |\l@coltocauthor|.
+% Note that a page number is not printed.
+% \changes{v0.51}{2001/07/09}{Save value of \cs{coltocauthor}}
+% \begin{macrocode}
+\newcommand*{\coltocauthor}[1]{%
+ \c@ltocauthortrue%
+ \gdef\savec@ltocauthor{#1}
+}
+
+% \end{macrocode}
+% As it is unlikely that the author will be in the ToC without the title,
+% don't encourage a page break beforehand.
+% \changes{v0.42}{2001/04/04}{Changed pagebreak penalties in \cs{l@coltocauthor}}
+% \changes{v0.53}{2001/09/05}{Fixed extraneous space in \cs{l@coltocauthor}}
+%
+% \begin{macrocode}
+\ifc@lhaschapter
+ \newcommand*\l@coltocauthor[2]{% % similar to chapter
+ \ifnum \c@tocdepth >\m@ne
+ \c@ll@chapseci
+ \setlength{\@tempdima}{\tocauthorindent}% eliminate any spaces here
+ \tocauthorfont %% italic ToC entry
+ \c@ll@chapsecii{#1}{}
+ \penalty\@highpenalty % discourage page break
+ \endgroup
+ \fi}
+\else
+ \newcommand*\l@coltocauthor[2]{% % similar to section
+ \ifnum \c@tocdepth >\z@
+ \c@ll@chapseci
+ \setlength{\@tempdima}{\tocauthorindent}% eliminate any spaces here
+ \tocauthorfont %% italic ToC entry
+ \c@ll@chapsecii{#1}{}
+ \penalty\@highpenalty % discourage page break
+ \endgroup
+ \fi}
+\fi
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\published}
+% \begin{macro}{\pubfont}
+% \begin{macro}{\l@published}
+% |\published[|\meta{short}|]{|\meta{long}|}| adds \meta{long} to the
+% body of the document. It also adds \meta{long} to the ToC, unless the
+% optional argument is present, in which case \meta{short} is added
+% to the ToC.
+%
+% In the body of the document \meta{long} is typeset using |\pubfont|.
+% The ToC entry is typeset by |\l@published|.
+% Note that a page number is not printed.
+% \changes{v0.51}{2001/07/09}{Save value of \cs{published}}
+% \begin{macrocode}
+\newcommand{\published}[2][\@empty]{%
+ \c@lpubtrue
+ \ifc@lnopubintoc\else
+ \ifx #1\@empty
+ \gdef\savec@lpublished{#2}
+ \else
+ \gdef\savec@lpublished{#1}
+ \fi
+ \fi
+ \ifc@lnopubindoc\else
+ {\parindent \z@ \pubfont #2\par\nobreak}
+ \fi
+}
+\newcommand{\pubfont}{\normalfont\centering}
+
+% \end{macrocode}
+% As the published information is unlikely to be in the ToC without
+% prior title or author information, don't encourage a prior break,
+% but also don't try and prevent one afterwards either.
+% \changes{v0.42}{2001/04/04}{Changed pagebreak penalties in \cs{l@published}}
+% \changes{v0.53}{2001/09/05}{Fixed extraneous space in \cs{l@published}}
+%
+% \begin{macrocode}
+\ifc@lhaschapter
+ \newcommand*\l@published[2]{% % similar to chapter
+ \ifnum \c@tocdepth >\m@ne
+ \c@ll@chapseci
+ \setlength{\@tempdima}{\tocpubindent}% eliminate any spaces here
+ \tocpubfont %% normal font ToC entry
+ \c@ll@chapsecii{#1}{}
+ \endgroup
+ \fi}
+\else
+ \newcommand*\l@published[2]{% % similar to section
+ \ifnum \c@tocdepth >\z@
+ \c@ll@chapseci
+ \setlength{\@tempdima}{\tocpubindent}% eliminate any spaces here
+ \tocpubfont %% normal font ToC entry
+ \c@ll@chapsecii{#1}{}
+ \endgroup
+ \fi}
+\fi
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\erasetitling}
+% This macro sets the |\coltoctitle|, |\coltocauthor| and |\published|
+% flags to FALSE.
+% \begin{macrocode}
+\newcommand{\erasetitling}{\c@ltoctitlefalse\c@ltocauthorfalse\c@lpubfalse}
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{environment}{papers}
+% The |papers| environment has one optional argument,
+% default |\cleardoublepage| which gets executed at the start of the
+% environment. Then the appropriate changes to the kernel commands are
+% executed.
+% \begin{macrocode}
+\newenvironment{papers}[1][\cleardoublepage]{%
+#1
+\setuppapers
+}{%
+\takedownpapers
+}
+
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\setuppapers}
+% This macro executes the kernel modifications within the |papers|
+% environment. Various options are also checked and implemented if required.
+% Sectional numbering is reset to zero. Imported files can't |\include|
+% other files, so |\include| is replaced by |\input|. If |\chapter| is
+% defined, then the chapter typesetting is redefined to look more like
+% a |\section| heading.
+% \changes{v0.41}{2000/06/18}{\cs{def}ed \cs{maketitle} instead of \cs{let}ing
+% inside \cs{setuppapers} to ignore any titling package redefinitions}
+% \changes{v0.52}{2001/08/25}{Added \cs{c@lbLoadClass} to \cs{setuppapers}}
+% \changes{v0.6}{2002/08/24}{Added onebib and combinedbib options code to \cs{setuppapers}}
+% \begin{macrocode}
+\newcommand{\setuppapers}{%
+\let\documentclass\c@lbdocumentclass
+\ifc@lpackages\else \let\usepackage\c@lbusepackage \fi
+\let\document\c@lbdocument
+\let\enddocument\c@lbenddocument
+\let\LoadClass\c@lbLoadClass
+%% \let\maketitle\c@lbmaketitle
+\def\maketitle{\c@lbmaketitle}
+\let\@writefile\c@lb@writefile
+\let\@starttoc\c@lb@starttoc
+\ifc@lnomaketitle \let\maketitle\relax \fi
+\ifc@lnotoc \let\tableofcontents\relax \fi
+\ifc@lnolof \let\listoffigures\relax \fi
+\ifc@lnolot \let\listoftables\relax \fi
+\ifc@lmaintoc \let\addtocontents\c@lbaddtocontents \fi
+\let\label\c@lblabel
+\let\@setref\c@lb@setref
+\let\newlabel\c@lbnewlabel
+\let\ref\c@lbref
+\let\pageref\c@lbpageref
+\renewcommand{\bibliographystyle}[1]{}
+\ifc@lcombib
+\else
+ \ifc@lonebib
+ \renewcommand{\bibliography}[1]{}
+ \fi
+\fi
+\let\@citex\c@lb@citex
+\let\bibcite\c@lbbibcite
+\let\nocite\c@lbnocite
+\ifc@lhaschapter
+ \renewcommand{\chapter}{\@startsection{chapter}{0}{\z@}%
+ {-3.5ex \@plus -1ex \@minus -.2ex}%
+ {2.3ex \@plus.2ex}%
+ {\normalfont\Large\bfseries}}
+\fi
+\c@ltoctitlefalse
+\c@ltocauthorfalse
+\c@lpubfalse
+\let\pagenumbering\c@lbpagenumbering
+\setcounter{colpage}{\value{page}}
+\let\pagestyle\c@lbpagestyle
+\pagestyle{\c@lastyle}
+\let\include\input
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\takedownpapers}
+% This macro executes the actions, if any, at the end of the |papers|
+% environment.
+% \begin{macrocode}
+\newcommand{\takedownpapers}{%
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% Finally, use the appropriate revised kernel commands for the main document.
+% \changes{v0.41}{2000/06/18}{Moved main document \cs{maketitle} letting to
+% its begin document}
+% \begin{macrocode}
+\let\document\c@ladocument
+\let\enddocument\c@laenddocument
+%%\let\maketitle\c@lamaketitle
+\let\pagestyle\c@lapagestyle
+\pagestyle{combine}
+
+% \end{macrocode}
+%
+%
+%
+%
+% The end of this class.
+% \begin{macrocode}
+%</usc>
+% \end{macrocode}
+%
+% \section{The \Lpack{combinet} package code} \label{packcode}
+%
+%
+% \begin{macrocode}
+%<*pck>
+% \end{macrocode}
+% The usual preliminaries. The \Lpack{combine} class is expected.
+% \changes{v0.53}{2001/09/05}{combinet package now version 0.2}
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{combinet}[2001/09/05 v0.2 document titles in ToC]
+\@ifclassloaded{combine}{}{%
+ \PackageError{combinet}{The `combine' class is expected}{\@ehc}%
+}
+
+% \end{macrocode}
+%
+% \begin{macro}{\ifc@lnomtitle}
+% \begin{macro}{\ifc@lnomauthor}
+% \begin{macro}{\ifc@lnothanks}
+% \begin{macro}{\ifc@lpubopt}
+% \begin{macro}{\ifc@lpubtop}
+% \begin{macro}{\ifc@lpubs}
+% Booleans for implementing the options.
+% \begin{macrocode}
+\newif\ifc@lnomtitle
+ \c@lnomtitlefalse
+\newif\ifc@lnomauthor
+ \c@lnomauthorfalse
+\newif\ifc@lnothanks
+ \c@lnothanksfalse
+\newif\ifc@lpubopt
+ \c@lpuboptfalse
+\newif\ifc@lpubtop
+ \c@lpubtopfalse
+\newif\ifc@lpubs
+ \c@lpubsfalse
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% Declare and execute the options.
+% \begin{macrocode}
+\DeclareOption{nomtitle}{\c@lnomtitletrue}
+\DeclareOption{nomauthor}{\c@lnomauthortrue}
+\DeclareOption{nothanks}{\c@lnothankstrue}
+\DeclareOption{pub}{\c@lpubopttrue\c@lpubtopfalse\c@lpubstrue}
+\DeclareOption{pubtop}{\c@lpubtoptrue\c@lpuboptfalse\c@lpubstrue}
+\ProcessOptions\relax
+
+% \end{macrocode}
+%
+% \begin{macro}{\published}
+% \begin{macro}{\c@lpubtoc}
+% \begin{macro}{\c@lpubbody}
+% In order to implement either of the \Lopt{pub} options, the |\published|
+% command must be modified to delay printing.
+% \begin{macrocode}
+\ifc@lpubs
+ \renewcommand{\published}[2][\@empty]{%
+ \c@lpubtrue
+ \ifx #1\@empty
+ \gdef\c@lpubtoc{#2}
+ \else
+ \gdef\c@lpubtoc{#1}
+ \fi
+ \gdef\c@lpubbody{#2}
+ }
+\fi
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\title}
+% \begin{macro}{\author}
+% To implement the \Lopt{nothanks} option, the |\title| and |\author|
+% kernel commands must be extended to save their values.
+%
+% Originally I used |\xdef| below which worked unless there was some
+% command other than |\thanks| in the title or author text.
+% David Kastrup\footnote{At \texttt{dak@neuroinformatik.ruhr-uni-bochum.de}.}
+% and Donald Arseneau\footnote{At \texttt{asnd@triumf.ca}.}
+% both pointed out the use of |\protected@xdef|.
+% Barbara Beeton\footnote{\texttt{bnb@ams.org}} suggested adding the |\unskip|
+% to the redefinition of |\and| in order to remove any preceeding spaces when
+% it gets printed in the ToC.
+% \changes{v0.4}{2000/06/09}{Added \cs{unskip} to \cs{and} redefinition}
+% \changes{v0.41}{2000/06/18}{Appended to \cs{title} and \cs{author} definitions}
+% \begin{macrocode}
+\appendiargdef{\title}{%
+ \begingroup
+ \renewcommand{\thanks}[1]{}
+ \protected@xdef\c@l@title{#1}
+ \endgroup
+}
+\appendiargdef{\author}{%
+ \begingroup
+ \renewcommand{\thanks}[1]{}
+ \renewcommand{\and}{\unskip, }
+ \protected@xdef\c@l@author{#1}
+ \endgroup
+}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\c@lbmaketitle}
+% The |\c@lbmaketitle| command is (re)defined so that it adds the title
+% and author (if given) to the main ToC. If |\coltoctitle| and/or
+% |\coltocauthor| have been used then nothing is done with the title
+% and/or author respectively.
+% \changes{v0.53}{2001/09/05}{Added empty \cs{numberline} in \cs{c@lbmaketitle}}
+% \begin{macrocode}
+\def\c@lbmaketitle{\par
+ \begingroup
+ \let\newpage\relax
+ \let\@maketitle\c@lb@maketitle
+ \ifc@lpub
+ \ifc@lpubtop
+ \ifc@lnopubindoc\else
+ {\parindent\z@ \pubfont \c@lpubbody\par\nobreak}
+ \fi
+ \fi
+ \fi
+ \c@lmtitle %% typeset the title block
+ \endgroup
+ \setcounter{footnote}{0}
+ \begingroup
+ \let\thanks\@empty
+ \ifc@ltoctitle\else
+ \ifc@lnomtitle\else
+ \ifx\@title\@empty\else
+ \ifc@lnothanks
+ \c@laaddtocontents{toc}%
+ {\protect\contentsline{coltoctitle}%
+ {\protect\numberline{}\c@l@title}{\thecolpage}}
+ \else
+ \c@laaddtocontents{toc}%
+ {\protect\contentsline{coltoctitle}%
+ {\protect\numberline{}\@title}{\thecolpage}}
+ \fi
+ \fi
+ \fi
+ \fi
+ \ifc@ltocauthor\else
+ \ifc@lnomauthor\else
+ \ifx\@author\@empty\else
+ \ifc@lnothanks
+ \c@laaddcontentsline{toc}%
+ {coltocauthor}{\protect\numberline{}\c@l@author}
+ \else
+ \c@laaddcontentsline{toc}%
+ {coltocauthor}{\protect\numberline{}\@author}
+ \fi
+ \fi
+ \fi
+ \fi
+ \endgroup
+ \ifc@lpub
+ \ifc@lpubopt
+ \ifc@lnopubindoc\else
+ {\parindent\z@ \pubfont \c@lpubbody\par\nobreak}
+ \fi
+ \fi
+ \ifc@lpubs
+ \ifc@lnopubintoc\else
+ \c@laaddcontentsline{toc}{published}{\protect\numberline{}\c@lpubtoc}
+ \fi
+ \fi
+ \fi
+ \c@lmtitlempty
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+% The end of this package
+% \begin{macrocode}
+%</pck>
+% \end{macrocode}
+%
+%
+% \section{The \Lpack{combnat} package code} \label{natpackcode}
+%
+% This package calls the \Lpack{natbib} package~\cite{NATBIB}
+% and then makes some minor changes to some of its macro definitions.
+% \changes{v0.6}{2002/08/24}{Added onebib option processing to combnat package}
+%
+% \begin{macrocode}
+%<*natpack>
+% \end{macrocode}
+% The usual preliminaries. The \Lpack{natbib} package is required
+% and all options are passed to it to deal with.
+% \changes{v0.5}{2001/07/03}{Added the combnat package}
+% \changes{v0.6}{2002/08/24}{Added combine class check to the combnat package}
+% \changes{v0.6}{2002/08/24}{combnat package is now version 0.2}
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{combnat}[2002/08/24 v0.2 combined natbib package]
+\@ifclassloaded{combine}{}{%
+ \PackageError{combnat}{The `combine' class is expected}{\@ehc}}
+\RequirePackageWithOptions{natbib}
+
+% \end{macrocode}
+%
+% For multiple bibliographies (|\c@lonebibfalse|)
+% the change consists of replacing
+% \Lpack{natbib}'s
+% naming of citation labels in the \file{.aux} files by the form
+% used by the \Lpack{combine} class. That is, the |b@| in each
+% code fragment like |b@#...| or |b@\...| is replaced by
+% |B?\jobname?@...|.
+%
+% For a single main bibliography |\c@lonebibtrue|, implementation is much
+% easier, merely ensuring that the stuff gets written to the main
+% *.aux file.
+%
+%
+% \begin{macro}{\c@lNATwritemainbib}
+% \begin{macro}{\c@lNATwritemainbibdate}
+% We have to write different biblabels to different files. These write
+% to the main *.aux file.
+% \begin{macrocode}
+\newcommand{\c@lNATwritemainbib}{%
+ \if@filesw\immediate\write\@mainaux{\string\citation{\@citeb}}\fi
+ \@ifundefined{b@\@citeb\@extra@b@citeb}{%
+ {\reset@font\bfseries?}
+ \NAT@citeundefined\PackageWarning{natbib}%
+ {Citation `\@citeb' on page \thepage \space undefined}}}
+
+\newcommand{\c@lNATwritemainbibdate}{%
+ \if@filesw\immediate\write\@mainaux{\string\citation{\@citeb}}\fi
+ \@ifundefined{b@\@citeb\@extra@b@citeb}{\@citea%
+ {\reset@font\bfseries ?}\NAT@citeundefined
+ \PackageWarning{natbib}%
+ {Citation `\@citeb' on page \thepage \space undefined}
+ \def\NAT@date{}}}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\c@lNATwritelocalbib}
+% \begin{macro}{\c@lNATwritelocalbibdate}
+% We have to write different biblabels to different files. These write
+% to the local *.aux files.
+% \begin{macrocode}
+\newcommand{\c@lNATwritelocalbib}{%
+ \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
+ \@ifundefined{B?\jobname?@\@citeb\@extra@b@citeb}{%
+ {\reset@font\bfseries?}
+ \NAT@citeundefined\PackageWarning{natbib}%
+ {Citation `\@citeb' on page \thepage \space undefined}}}
+
+\newcommand{\c@lNATwritelocalbibdate}{%
+ \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
+ \@ifundefined{B?\jobname?@\@citeb\@extra@b@citeb}{\@citea%
+ {\reset@font\bfseries ?}\NAT@citeundefined
+ \PackageWarning{natbib}%
+ {Citation `\@citeb' on page \thepage \space undefined}
+ \def\NAT@date{}}}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\c@lNAT@citexnum@swatrue}
+% Holds some of the internals of the original |\NAT@citexnum|.
+% \begin{macrocode}
+\newcommand{\c@lNAT@citexnum@swatrue}{%
+ \ifnum\NAT@ctype>1\relax
+ \@citea
+ \hyper@natlinkstart{\@citeb\@extra@b@citeb}%
+ \ifnum\NAT@ctype=2\relax
+ \NAT@test{\NAT@ctype}%
+ \else
+ \NAT@alias
+ \fi
+ \hyper@natlinkend
+ \else
+ \ifnum\NAT@sort>1\relax
+ \begingroup\catcode`\_=8
+ \ifcat _\ifnum\z@<0\NAT@num _\else A\fi
+ \global\let\NAT@nm=\NAT@num \else \gdef\NAT@nm{-2}\fi
+ \ifcat _\ifnum\z@<0\NAT@last@num _\else A\fi
+ \global\@tempcnta=\NAT@last@num \global\advance\@tempcnta by\@ne
+ \else \global\@tempcnta\m@ne\fi
+ \endgroup
+ \ifnum\NAT@nm=\@tempcnta
+ \ifx\NAT@last@yr\relax
+ \edef\NAT@last@yr{\@citea \mbox{\noexpand\citenumfont\NAT@num}}%
+ \else
+ \edef\NAT@last@yr{--\penalty\@m\mbox{\noexpand\citenumfont\NAT@num}}%
+ \fi
+ \else
+ \NAT@last@yr \@citea \mbox{\citenumfont\NAT@num}%
+ \let\NAT@last@yr\relax
+ \fi
+ \else
+ \@citea \mbox{\hyper@natlinkstart{\@citeb\@extra@b@citeb}%
+ {\citenumfont\NAT@num}\hyper@natlinkend}%
+ \fi
+ \fi
+ \def\@citea{\NAT@sep\penalty\@m\NAT@space}%
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NAT@citexnum}
+% We redefine the original |\NAT@citexnum| to write for the main file.
+% \begin{macrocode}
+\def\NAT@citexnum[#1][#2]#3{%
+ \NAT@sort@cites{#3}%
+ \let\@citea\@empty
+ \@cite{\def\NAT@num{-1}\let\NAT@last@yr\relax\let\NAT@nm\@empty
+ \@for\@citeb:=\NAT@cite@list\do
+ {\edef\@citeb{\expandafter\@firstofone\@citeb}%
+ \c@lNATwritemainbib %%% change here
+ {\let\NAT@last@num\NAT@num\let\NAT@last@nm\NAT@nm
+ \NAT@parse{\@citeb}%
+ \ifNAT@longnames
+ \@ifundefined{bv@\@citeb\@extra@b@citeb}{%
+ \let\NAT@name=\NAT@all@names
+ \global\@namedef{bv@\@citeb\@extra@b@citeb}{}}{}%
+ \fi
+ \ifNAT@full
+ \let\NAT@nm\NAT@all@names
+ \else
+ \let\NAT@nm\NAT@name
+ \fi
+ \ifNAT@swa
+ \c@lNAT@citexnum@swatrue
+ \else
+ \ifcase\NAT@ctype\relax
+ \ifx\NAT@last@nm\NAT@nm
+ \NAT@yrsep\penalty\@m\NAT@space
+ \else
+ \@citea \NAT@test{1}\ \NAT@@open
+ \if*#1*\else#1\ \fi
+ \fi
+ \NAT@mbox{%
+ \hyper@natlinkstart{\@citeb\@extra@b@citeb}%
+ {\citenumfont\NAT@num}\hyper@natlinkend}%
+ \def\@citea{\NAT@@close\NAT@sep\penalty\@m\ }%
+ \or\@citea
+ \hyper@natlinkstart{\@citeb\@extra@b@citeb}%
+ \NAT@test{\NAT@ctype}\hyper@natlinkend
+ \def\@citea{\NAT@sep\penalty\@m\ }%
+ \or\@citea
+ \hyper@natlinkstart{\@citeb\@extra@b@citeb}%
+ \NAT@test{\NAT@ctype}\hyper@natlinkend
+ \def\@citea{\NAT@sep\penalty\@m\ }%
+ \or\@citea
+ \hyper@natlinkstart{\@citeb\@extra@b@citeb}%
+ \NAT@alias\hyper@natlinkend
+ \def\@citea{\NAT@sep\penalty\@m\ }%
+ \fi
+ \fi
+ }}%
+ \ifnum\NAT@sort>1\relax
+ \NAT@last@yr
+ \fi
+ \ifNAT@swa\else\ifnum\NAT@ctype=0\if*#2*\else
+ \NAT@cmt#2\fi \NAT@@close\fi\fi}{#1}{#2}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@lbNAT@citexnum}
+% A local version of |\NAT@citexnum|.
+% \begin{macrocode}
+\def\c@lbNAT@citexnum[#1][#2]#3{%
+ \ifc@lcombib \c@laNATnocite{#3} \fi %%% change here
+ \NAT@sort@cites{#3}%
+ \let\@citea\@empty
+ \@cite{\def\NAT@num{-1}\let\NAT@last@yr\relax\let\NAT@nm\@empty
+ \@for\@citeb:=\NAT@cite@list\do
+ {\edef\@citeb{\expandafter\@firstofone\@citeb}%
+ \c@lNATwritelocalbib %%% change here
+ {\let\NAT@last@num\NAT@num\let\NAT@last@nm\NAT@nm
+ \NAT@parse{\@citeb}%
+ \ifNAT@longnames
+ \@ifundefined{bv@\@citeb\@extra@b@citeb}{%
+ \let\NAT@name=\NAT@all@names
+ \global\@namedef{bv@\@citeb\@extra@b@citeb}{}}{}%
+ \fi
+ \ifNAT@full
+ \let\NAT@nm\NAT@all@names
+ \else
+ \let\NAT@nm\NAT@name
+ \fi
+ \ifNAT@swa
+ \c@lNAT@citexnum@swatrue
+ \else
+ \ifcase\NAT@ctype\relax
+ \ifx\NAT@last@nm\NAT@nm
+ \NAT@yrsep\penalty\@m\NAT@space
+ \else
+ \@citea \NAT@test{1}\ \NAT@@open
+ \if*#1*\else#1\ \fi
+ \fi
+ \NAT@mbox{%
+ \hyper@natlinkstart{\@citeb\@extra@b@citeb}%
+ {\citenumfont\NAT@num}\hyper@natlinkend}%
+ \def\@citea{\NAT@@close\NAT@sep\penalty\@m\ }%
+ \or\@citea
+ \hyper@natlinkstart{\@citeb\@extra@b@citeb}%
+ \NAT@test{\NAT@ctype}\hyper@natlinkend
+ \def\@citea{\NAT@sep\penalty\@m\ }%
+ \or\@citea
+ \hyper@natlinkstart{\@citeb\@extra@b@citeb}%
+ \NAT@test{\NAT@ctype}\hyper@natlinkend
+ \def\@citea{\NAT@sep\penalty\@m\ }%
+ \or\@citea
+ \hyper@natlinkstart{\@citeb\@extra@b@citeb}%
+ \NAT@alias\hyper@natlinkend
+ \def\@citea{\NAT@sep\penalty\@m\ }%
+ \fi
+ \fi
+ }}%
+ \ifnum\NAT@sort>1\relax\NAT@last@yr\fi
+ \ifNAT@swa\else\ifnum\NAT@ctype=0\if*#2*\else
+ \NAT@cmt#2\fi \NAT@@close\fi\fi}{#1}{#2}}
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\c@lNAT@citex@swatrue}
+% Holds some of the internals of the original |\NAT@citex|.
+% \begin{macrocode}
+\newcommand{\c@lNAT@citex@swatrue}{%
+ \ifcase\NAT@ctype
+ \if\relax\NAT@date\relax
+ \@citea\hyper@natlinkstart{\@citeb\@extra@b@citeb}%
+ \NAT@nmfmt{\NAT@nm}\NAT@date\hyper@natlinkend
+ \else
+ \ifx\NAT@last@nm\NAT@nm\NAT@yrsep
+ \ifx\NAT@last@yr\NAT@year
+ \hyper@natlinkstart{\@citeb\@extra@b@citeb}\NAT@exlab
+ \hyper@natlinkend
+ \else
+ \unskip\
+ \hyper@natlinkstart{\@citeb\@extra@b@citeb}\NAT@date
+ \hyper@natlinkend
+ \fi
+ \else
+ \@citea\hyper@natlinkstart{\@citeb\@extra@b@citeb}%
+ \NAT@nmfmt{\NAT@nm}%
+ \hyper@natlinkbreak{\NAT@aysep\ }{\@citeb\@extra@b@citeb}%
+ \NAT@date\hyper@natlinkend
+ \fi
+ \fi
+ \or\@citea\hyper@natlinkstart{\@citeb\@extra@b@citeb}%
+ \NAT@nmfmt{\NAT@nm}\hyper@natlinkend
+ \or\@citea\hyper@natlinkstart{\@citeb\@extra@b@citeb}%
+ \NAT@date\hyper@natlinkend
+ \or\@citea\hyper@natlinkstart{\@citeb\@extra@b@citeb}%
+ \NAT@alias\hyper@natlinkend
+ \fi
+ \def\@citea{\NAT@sep\ }%
+}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@laNAT@citex}
+% We redefine the original |\NAT@citex| macro for the main document.
+% \begin{macrocode}
+\def\NAT@citex[#1][#2]#3{%
+ \NAT@sort@cites{#3}%
+ \let\@citea\@empty
+ \@cite{\let\NAT@nm\@empty\let\NAT@year\@empty
+ \@for\@citeb:=\NAT@cite@list\do
+ {\edef\@citeb{\expandafter\@firstofone\@citeb}%
+ \c@lNATwritemainbibdate %%%% change here
+ {\let\NAT@last@nm=\NAT@nm\let\NAT@last@yr=\NAT@year
+ \NAT@parse{\@citeb}%
+ \ifNAT@longnames
+ \@ifundefined{bv@\@citeb\@extra@b@citeb}{%
+ \let\NAT@name=\NAT@all@names
+ \global\@namedef{bv@\@citeb\@extra@b@citeb}{}}{}%
+ \fi
+ \ifNAT@full
+ \let\NAT@nm\NAT@all@names
+ \else
+ \let\NAT@nm\NAT@name
+ \fi
+ \ifNAT@swa
+ \c@lNAT@citex@swatrue
+ \else
+ \ifcase\NAT@ctype
+ \if\relax\NAT@date\relax
+ \@citea\hyper@natlinkstart{\@citeb\@extra@b@citeb}%
+ \NAT@nmfmt{\NAT@nm}\hyper@natlinkend
+ \else
+ \ifx\NAT@last@nm\NAT@nm\NAT@yrsep
+ \ifx\NAT@last@yr\NAT@year
+ \hyper@natlinkstart{\@citeb\@extra@b@citeb}\NAT@exlab
+ \hyper@natlinkend
+ \else\unskip\
+ \hyper@natlinkstart{\@citeb\@extra@b@citeb}\NAT@date
+ \hyper@natlinkend
+ \fi
+ \else\@citea\hyper@natlinkstart{\@citeb\@extra@b@citeb}%
+ \NAT@nmfmt{\NAT@nm}%
+ \hyper@natlinkbreak{\ \NAT@@open\if*#1*\else#1\ \fi}%
+ {\@citeb\@extra@b@citeb}%
+ \NAT@date\hyper@natlinkend
+ \fi
+ \fi
+ \or\@citea\hyper@natlinkstart{\@citeb\@extra@b@citeb}%
+ \NAT@nmfmt{\NAT@nm}\hyper@natlinkend
+ \or\@citea\hyper@natlinkstart{\@citeb\@extra@b@citeb}%
+ \NAT@date\hyper@natlinkend
+ \or\@citea\hyper@natlinkstart{\@citeb\@extra@b@citeb}%
+ \NAT@alias\hyper@natlinkend
+ \fi
+ \if\relax\NAT@date\relax\def\@citea{\NAT@sep\ }%
+ \else
+ \def\@citea{\NAT@@close\NAT@sep\ }
+ \fi
+ \fi
+ }%
+ }%
+ \ifNAT@swa\else\if*#2*\else\NAT@cmt#2\fi
+ \if\relax\NAT@date\relax\else\NAT@@close\fi\fi}{#1}{#2}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@lbNAT@citex}
+% The local version of |\NAT@citex|.
+% \begin{macrocode}
+\def\c@lbNAT@citex[#1][#2]#3{%
+ \ifc@lcombib \c@laNATnocite{#3} \fi %%%% change here
+ \NAT@sort@cites{#3}%
+ \let\@citea\@empty
+ \@cite{\let\NAT@nm\@empty\let\NAT@year\@empty
+ \@for\@citeb:=\NAT@cite@list\do
+ {\edef\@citeb{\expandafter\@firstofone\@citeb}%
+ \c@lNATwritelocalbibdate %%%% change here
+ {\let\NAT@last@nm=\NAT@nm\let\NAT@last@yr=\NAT@year
+ \NAT@parse{\@citeb}%
+ \ifNAT@longnames
+ \@ifundefined{bv@\@citeb\@extra@b@citeb}{%
+ \let\NAT@name=\NAT@all@names
+ \global\@namedef{bv@\@citeb\@extra@b@citeb}{}}{}%
+ \fi
+ \ifNAT@full
+ \let\NAT@nm\NAT@all@names
+ \else
+ \let\NAT@nm\NAT@name
+ \fi
+ \ifNAT@swa
+ \c@lNAT@citex@swatrue
+ \else
+ \ifcase\NAT@ctype
+ \if\relax\NAT@date\relax
+ \@citea\hyper@natlinkstart{\@citeb\@extra@b@citeb}%
+ \NAT@nmfmt{\NAT@nm}\hyper@natlinkend
+ \else
+ \ifx\NAT@last@nm\NAT@nm\NAT@yrsep
+ \ifx\NAT@last@yr\NAT@year
+ \hyper@natlinkstart{\@citeb\@extra@b@citeb}\NAT@exlab
+ \hyper@natlinkend
+ \else\unskip\
+ \hyper@natlinkstart{\@citeb\@extra@b@citeb}\NAT@date
+ \hyper@natlinkend
+ \fi
+ \else\@citea\hyper@natlinkstart{\@citeb\@extra@b@citeb}%
+ \NAT@nmfmt{\NAT@nm}%
+ \hyper@natlinkbreak{\ \NAT@@open\if*#1*\else#1\ \fi}%
+ {\@citeb\@extra@b@citeb}%
+ \NAT@date\hyper@natlinkend
+ \fi
+ \fi
+ \or\@citea\hyper@natlinkstart{\@citeb\@extra@b@citeb}%
+ \NAT@nmfmt{\NAT@nm}\hyper@natlinkend
+ \or\@citea\hyper@natlinkstart{\@citeb\@extra@b@citeb}%
+ \NAT@date\hyper@natlinkend
+ \or\@citea\hyper@natlinkstart{\@citeb\@extra@b@citeb}%
+ \NAT@alias\hyper@natlinkend
+ \fi
+ \if\relax\NAT@date\relax\def\@citea{\NAT@sep\ }%
+ \else
+ \def\@citea{\NAT@@close\NAT@sep\ }
+ \fi
+ \fi
+ }%
+ }%
+ \ifNAT@swa\else\if*#2*\else\NAT@cmt#2\fi
+ \if\relax\NAT@date\relax\else\NAT@@close\fi\fi}{#1}{#2}}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@laNATnocite}
+% \begin{macro}{\nocite}
+% A main document version of the natbib |\nocite|.
+% \begin{macrocode}
+\newcommand\c@laNATnocite[1]{\@bsphack
+ \@for\@citeb:=#1\do{%
+ \edef\@citeb{\expandafter\@firstofone\@citeb}%
+ \if@filesw\immediate\write\@mainaux{\string\citation{\@citeb}}\fi
+ \if*\@citeb\else
+ \@ifundefined{b@\@citeb\@extra@b@citeb}{%
+ \NAT@citeundefined \PackageWarning{natbib}%
+ {Citation `\@citeb' undefined}}{}\fi}%
+ \@esphack}
+\renewcommand{\nocite}[1]{\c@laNATnocite{#1}}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\c@lbNATnocite}
+% The local version pf |\nocite|.
+% \begin{macrocode}
+\newcommand\c@lbNATnocite[1]{\@bsphack
+ \@for\@citeb:=#1\do{%
+ \edef\@citeb{\expandafter\@firstofone\@citeb}%
+ \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
+ \if*\@citeb\else
+ \@ifundefined{B?\jobname?@\@citeb\@extra@b@citeb}{%
+ \NAT@citeundefined \PackageWarning{natbib}%
+ {Citation `\@citeb' undefined}}{}\fi}%
+ \@esphack}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NAT@wrout}
+% Main version of the original |\NAT@wrout|.
+% \begin{macrocode}
+\renewcommand{\NAT@wrout}[5]{%
+ \if@filesw
+ {\let\protect\noexpand\let~\relax
+ \immediate
+ \write\@mainaux{\string\bibcite{#5}{{#1}{#2}{{#3}}{{#4}}}}}\fi
+\ignorespaces}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@lbNAT@wrout}
+% Local version of the original |\NAT@wrout|.
+% \begin{macrocode}
+\newcommand{\c@lbNAT@wrout}[5]{%
+ \if@filesw
+ {\let\protect\noexpand\let~\relax
+ \immediate
+ \write\@auxout{\string\bibcite{#5}{{#1}{#2}{{#3}}{{#4}}}}}\fi
+\ignorespaces}
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\c@laNAT@parse}
+% \begin{macro}{\c@lbNAT@parse}
+% Main and local versions of |\NAT@parse|.
+% \begin{macrocode}
+\newcommand\c@laNAT@parse[1]{{%
+ \let\protect=\@unexpandable@protect\let~\relax
+ \let\active@prefix=\@gobble
+ \xdef\NAT@temp{\csname b@#1\@extra@b@citeb\endcsname}}%
+ \expandafter\NAT@split\NAT@temp
+ \expandafter\NAT@parse@date\NAT@date??????@@%
+ \ifciteindex\NAT@index\fi}
+
+\newcommand\c@lbNAT@parse[1]{{%
+ \let\protect=\@unexpandable@protect\let~\relax
+ \let\active@prefix=\@gobble
+ \xdef\NAT@temp{\csname B?\jobname?@#1\@extra@b@citeb\endcsname}}%
+ \expandafter\NAT@split\NAT@temp
+ \expandafter\NAT@parse@date\NAT@date??????@@%
+ \ifciteindex\NAT@index\fi}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\c@laNAT@lbibitem}
+% \begin{macro}{\c@lbNAT@lbibitem}
+% Main and local version of |\@lbibitem|.
+% \begin{macrocode}
+\def\c@laNAT@lbibitem[#1]#2{%
+ \if\relax\@extra@b@citeb\relax\else
+ \@ifundefined{br@#2\@extra@b@citeb}{}{%
+ \@namedef{br@#2}{\@nameuse{br@#2\@extra@b@citeb}}}\fi
+ \@ifundefined{b@#2\@extra@b@citeb}{\def\NAT@num{}}{\NAT@parse{#2}}%
+ \item[\hfil\hyper@natanchorstart{#2\@extra@b@citeb}\@biblabel{\NAT@num}%
+ \hyper@natanchorend]%
+ \NAT@ifcmd#1(@)(@)\@nil{#2}}
+
+\def\c@lbNAT@lbibitem[#1]#2{%
+ \if\relax\@extra@b@citeb\relax\else
+ \@ifundefined{br@#2\@extra@b@citeb}{}{%
+ \@namedef{br@#2}{\@nameuse{br@#2\@extra@b@citeb}}}\fi
+ \@ifundefined{B?\jobname?@#2\@extra@b@citeb}{\def\NAT@num{}}{\NAT@parse{#2}}%
+ \item[\hfil\hyper@natanchorstart{#2\@extra@b@citeb}\@biblabel{\NAT@num}%
+ \hyper@natanchorend]%
+ \NAT@ifcmd#1(@)(@)\@nil{#2}}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\c@laNATbibcite}
+% \begin{macro}{\c@lbNATbibcite}
+% Main and local versions of |\NATbibcite|.
+% \begin{macrocode}
+\newcommand\c@laNATbibcite[2]{\@ifundefined{b@#1\@extra@binfo}\relax
+ {\NAT@citemultiple
+ \PackageWarningNoLine{natbib}{Citation `#1' multiply defined}}%
+ \global\@namedef{b@#1\@extra@binfo}{#2}}
+
+\newcommand\c@lbNATbibcite[2]{\@ifundefined{B?\jobname?@#1\@extra@binfo}\relax
+ {\NAT@citemultiple
+ \PackageWarningNoLine{natbib}{Citation `#1' multiply defined}}%
+ \global\@namedef{B?\jobname?@#1\@extra@binfo}{#2}}
+
+\ifc@lonebib
+ \ifc@lcombib
+ \else
+ \renewcommand\c@lbNATbibcite[2]{\@ifundefined{b@#1\@extra@binfo}\relax
+ {\NAT@citemultiple
+ \PackageWarningNoLine{natbib}{Citation `#1' multiply defined}}%
+ \global\@namedef{B?\jobname?@#1\@extra@binfo}{#2}}
+ \fi
+\fi
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\c@laNAT@testdef}
+% \begin{macro}{\c@lbNAT@testdef}
+% Main and local versions of |\NAT@testdef|.
+% \begin{macrocode}
+\newcommand\c@laNAT@testdef[2]{%
+ \def\NAT@temp{#2}\expandafter \ifx \csname b@#1\@extra@binfo\endcsname
+ \NAT@temp \else \ifNAT@swa \NAT@swafalse
+ \PackageWarningNoLine{natbib}{Citation(s) may have
+ changed.\MessageBreak
+ Rerun to get citations correct}\fi\fi}
+
+\newcommand\c@lbNAT@testdef[2]{%
+ \def\NAT@temp{#2}\expandafter \ifx \csname B?\jobname?@#1\@extra@binfo\endcsname
+ \NAT@temp \else \ifNAT@swa \NAT@swafalse
+ \PackageWarningNoLine{natbib}{Citation(s) may have
+ changed.\MessageBreak
+ Rerun to get citations correct}\fi\fi}
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\c@laNAT@make@cite@list}
+% \begin{macro}{\c@lbNAT@make@cite@list}
+% Main and local versions of |\NAT@make@cite@list|.
+% \begin{macrocode}
+\ifnum\NAT@sort>0
+ \begingroup \catcode`\_=8
+ \gdef\c@laNAT@make@cite@list{%
+ \edef\@citeb{\expandafter\@firstofone\@citeb}%
+ \@ifundefined{b@\@citeb\@extra@b@citeb}{\def\NAT@num{A}}%
+ {\NAT@parse{\@citeb}}%
+ \ifcat _\ifnum\z@<0\NAT@num _\else A\fi
+ \@tempcnta\NAT@num \relax
+ \ifnum \@tempcnta>\@tempcntb
+ \edef\NAT@num@list{\NAT@num@list \@celt{\NAT@num}}%
+ \edef\NAT@cite@list{\NAT@cite@list\@citeb,}%
+ \@tempcntb\@tempcnta
+ \else
+ \let\NAT@@cite@list=\NAT@cite@list \def\NAT@cite@list{}%
+ \edef\NAT@num@list{\expandafter\NAT@num@celt \NAT@num@list \@gobble @}%
+ {\let\@celt=\NAT@celt\NAT@num@list}%
+ \fi
+ \else
+ \edef\NAT@nonsort@list{\NAT@nonsort@list\@citeb,}%
+ \fi}
+ \endgroup
+
+ \begingroup \catcode`\_=8
+ \gdef\c@lbNAT@make@cite@list{%
+ \edef\@citeb{\expandafter\@firstofone\@citeb}%
+ \@ifundefined{B?\jobname?@\@citeb\@extra@b@citeb}{\def\NAT@num{A}}%
+ {\NAT@parse{\@citeb}}%
+ \ifcat _\ifnum\z@<0\NAT@num _\else A\fi
+ \@tempcnta\NAT@num \relax
+ \ifnum \@tempcnta>\@tempcntb
+ \edef\NAT@num@list{\NAT@num@list \@celt{\NAT@num}}%
+ \edef\NAT@cite@list{\NAT@cite@list\@citeb,}%
+ \@tempcntb\@tempcnta
+ \else
+ \let\NAT@@cite@list=\NAT@cite@list \def\NAT@cite@list{}%
+ \edef\NAT@num@list{\expandafter\NAT@num@celt \NAT@num@list \@gobble @}%
+ {\let\@celt=\NAT@celt\NAT@num@list}%
+ \fi
+ \else
+ \edef\NAT@nonsort@list{\NAT@nonsort@list\@citeb,}%
+ \fi}
+ \endgroup
+\fi
+
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% Some things are done at the end of a document.
+%
+% \begin{macrocode}
+\AtEndDocument{%
+ \ifNAT@stdbst\if@filesw\immediate\write
+ \@mainaux{\string\global\string\NAT@numberstrue}\fi\fi
+ }
+
+\AtEndDocument{\NAT@swatrue\let\bibcite\NAT@testdef}
+
+% \end{macrocode}
+%
+% \begin{macro}{\c@laNAT@set@cites}
+% Main version of |\NAT@set@cites|.
+% \begin{macrocode}
+\newcommand{\c@laNAT@set@cites}{%
+ \ifNAT@numbers
+ \ifNAT@super
+ \let\@cite\NAT@citesuper
+ \def\NAT@mbox##1{\unskip\nobreak\hspace{1\p@}\textsuperscript{##1}}%
+ \let\citeyearpar=\citeyear
+ \let\NAT@space\relax
+ \else
+ \let\NAT@mbox=\mbox
+ \let\@cite\NAT@citenum
+ \def\NAT@space{ }%
+ \fi
+ \let\@citex\NAT@citexnum
+ \ifx\@biblabel\@empty
+ \let\@biblabel\NAT@biblabelnum
+ \fi
+ \let\@bibsetup\NAT@bibsetnum
+ \def\natexlab##1{}%
+ \else
+ \let\@cite\NAT@cite
+ \let\@citex\NAT@citex
+ \let\@biblabel\NAT@biblabel
+ \let\@bibsetup\NAT@bibsetup
+ \def\natexlab##1{##1}%
+ \fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@lbNAT@set@cites}
+% Local version of |\NAT@set@cites|.
+% \begin{macrocode}
+\newcommand{\c@lbNAT@set@cites}{%
+ \ifNAT@numbers
+ \ifNAT@super
+ \let\@cite\NAT@citesuper
+ \def\NAT@mbox##1{\unskip\nobreak\hspace{1\p@}\textsuperscript{##1}}%
+ \let\citeyearpar=\citeyear
+ \let\NAT@space\relax
+ \else
+ \let\NAT@mbox=\mbox
+ \let\@cite\NAT@citenum
+ \def\NAT@space{ }%
+ \fi
+ \let\@citex\NAT@citexnum
+ \ifx\@biblabel\@empty
+ \let\@biblabel\NAT@biblabelnum
+ \fi
+ \let\@bibsetup\NAT@bibsetnum
+ \def\natexlab##1{}%
+ \else
+ \let\@cite\NAT@cite
+ \let\@citex\NAT@citex
+ \let\@biblabel\NAT@biblabel
+ \let\@bibsetup\NAT@bibsetup
+ \def\natexlab##1{##1}%
+ \fi}
+
+% \end{macrocode}
+% \end{macro}
+%
+% For the main document, use |\c@la...| to replace the |\NAT...| definitions.
+% \begin{macrocode}
+\let\NAT@parse\c@laNAT@parse
+%%\let\nocite\c@laNATnocite
+%%\let\NAT@wrout\c@laNAT@wrout
+\let\@lbibitem\c@laNAT@lbibitem
+\let\bibcite\c@laNATbibcite
+\let\NAT@testdef\c@laNAT@testdef
+%%\let\NAT@make@cite@list\c@laNAT@make@cite@list
+%%\let\NAT@citexnum\c@laNAT@citexnum
+%%\let\NAT@citex\c@laNAT@citex
+
+% \end{macrocode}
+%
+% And similarly for imported documents
+% \begin{macrocode}
+\let\c@loldsetuppapers\setuppapers
+\newcommand{\c@lNATsetuplocal}{%
+ \let\NAT@parse\c@lbNAT@parse
+ \let\nocite\c@lbNATnocite
+ \let\NAT@wrout\c@lbNAT@wrout
+ \let\@lbibitem\c@lbNAT@lbibitem
+ \let\bibcite\c@lbNATbibcite
+ \let\NAT@testdef\c@lbNAT@testdef
+ \let\NAT@make@cite@list\c@lbNAT@make@cite@list
+ \let\NAT@citexnum\c@lbNAT@citexnum
+ \let\NAT@citex\c@lbNAT@citex
+ \let\NAT@set@cites\c@lbNAT@set@cites
+ \c@lbNAT@set@cites
+}
+\renewcommand{\setuppapers}{%
+ \c@loldsetuppapers
+ \ifc@lcombib
+ \c@lNATsetuplocal
+ \else
+ \ifc@lonebib
+ \else
+ \c@lNATsetuplocal
+ \fi
+ \fi
+}
+
+% \end{macrocode}
+%
+%
+% The end of this package
+% \begin{macrocode}
+%</natpack>
+% \end{macrocode}
+%
+%
+% \appendix
+% \section{Original code}
+%
+% This section presents the original kernel code before modification.
+%
+% The |\documentclass| macro is specified in \file{ltclass.dtx}.
+% \par\begin{small}\begin{verbatim}
+% \def\documentclass{%
+% \let\documentclass\@twoclasseserror
+% \if@compatability\else\let\usepackage\RequirePackage\fi
+% \@fileswithoptions\@clsextension}
+% \@onlypreamble\documentclass
+% \end{verbatim}
+% \end{small}\par
+%
+% The |document| environment is specified between \file{ltfiles.dtx} and
+% \file{ltmiscen.dtx}. The |\document| command is given in \file{ltfiles.dtx}.
+% \par\begin{small}\begin{verbatim}
+% \def\document{\endgroup
+% \ifx\@unusedoptionlist\@empty\else
+% \@latex@warning@no@line{Unused global option(s):^^J%
+% \@spaces[\@unusedoptionlist]}%
+% \fi
+% \@colht\textheight
+% \@colroom\textheight \vsize\textheight
+% \columnwidth\textwidth
+% \@clubpenalty\clubpenalty
+% \if@twocolumn
+% \advance\columnwidth -\columnsep
+% \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue
+% \fi
+% \hsize\columnwidth \linewidth\hsize
+% \begingroup\@floatplacement\@dblfloatplacement
+% \makeatletter\let\@writefile\@gobbletwo
+% \global \let \@multiplelabels \relax
+% \@input{\jobname.aux}%
+% \endgroup
+% \if@filesw
+% \immediate\openout\@mainaux\jobname.aux
+% \immediate\write\@mainaux{\relax}%
+% \fi
+% \process@table
+% \let\glb@currsize\@empty
+% \normalsize
+% \everypar{}%
+% \ifx\normalsfcodes\@empty
+% \ifnum\sfcode`\.=\@m
+% \let\normalsfcodes\frenchspacing
+% \else
+% \let\normalsfcodes\nonfrenchspacing
+% \fi
+% \fi
+% \@noskipsecfalse
+% \let \@refundefined \relax
+% \let\AtBeginDocument\@firstofone
+% \@begindocumenthook
+% \ifdim\topskip<1sp\global\topskip 1sp\relax\fi
+% \global\@maxdepth\maxdepth
+% \global\let\@begindocumenthook\@undefined
+% \ifx\@listfiles\@undefined
+% \global\let\@filelist\relax
+% \global\let\@addtofilelist\@gobble
+% \fi
+% \gdef\do##1{\global\let ##1\@notprerr}%
+% \@preamblecmds
+% \global\let \@nodocument \relax
+% \global\let\do\noexpand
+% \ignorespaces}
+% \@onlypreamble\document
+% \end{verbatim}
+% \end{small}\par
+% The |\enddocument| macro is specified in \file{ltmiscen.dtx}.
+% \par\begin{small}\begin{verbatim}
+% \def\enddocument{%
+% \@enddocumenthook
+% \@checkend{document}%
+% \clearpage
+% \begingroup
+% \if@filesw
+% \immediate\closeout\@mainaux
+% \let\@setckpt\@gobbletwo
+% \let\@newl@bel\@testdef
+% \@tempswafalse
+% \makeatletter \input\jobname.aux
+% \fi
+% \@dofilelist
+% \ifdim \font@submax >\fontsubfuzz\relax
+% \@font@warning{Size substitutions with differences\MessageBreak
+% up to \font@submax\space have occured.\@gobbletwo}%
+% \fi
+% \@defaultsubs
+% \@refundefined
+% \if@filesw
+% \ifx \@multiplelabels \relax
+% \if@tempswa
+% \@latex@warning@no@line{Label(s) may have changed.
+% Rerun to get cross-references right}%
+% \fi
+% \else
+% \@multiplelabels
+% \fi
+% \fi
+% \endgroup
+% \deadcycles\z@\@@end}
+% \end{verbatim}
+% \end{small}\par
+%
+% |\maketitle| is defined by each class. The following is from
+% \file{classes.dtx} for the \Lpack{book}, \Lpack{report} and \Lpack{article}
+% classes.
+% \par\begin{small}\begin{verbatim}
+% \if@titlepage
+% \newcommand{\maketitle}{\begin{titlepage}%
+% \let\footnotesize\small
+% \let\footnoterule\relax
+% \let \footnote \thanks
+% \null\vfil
+% \vskip 60\p@
+% \begin{center}%
+% {\LARGE \@title \par}%
+% \vskip 3em%
+% {\large
+% \lineskip .75em%
+% \begin{tabular}[t]{c}%
+% \@author
+% \end{tabular}\par}%
+% \vskip 1.5em%
+% {\large \@date \par}%
+% \end{center}\par
+% \@thanks
+% \vfil\null
+% \end{titlepage}%
+% \setcounter{footnote}{0}%
+% \global\let\thanks\relax
+% \global\let\maketitle\relax
+% \global\let\@thanks\@empty
+% \global\let\@author\@empty
+% \global\let\@date\@empty
+% \global\let\@title\@empty
+% \global\let\title\relax
+% \global\let\author\relax
+% \global\let\date\relax
+% \global\let\and\relax
+% } % end titlepage \maketitle
+% \else
+% \newcommand{\maketitle}{\par
+% \begingroup
+% \renewcommand\thefootnote{\@fnsymbol\c@footnote}%
+% \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}%
+% \long\def\@makefntext##1{\parindent 1em\noindent
+% \hb@xt@1.8em{%
+% \hss\@textsuperscript{\normalfont\@thefnmark}}##1}%
+% \if@twocolumn
+% \ifnum \col@number=\@ne
+% \@maketitle
+% \else
+% \twocolumn[\@maketitle]%
+% \fi
+% \else
+% \newpage
+% \global\@topnum\z@
+% \@maketitle
+% \fi
+% \thispagestyle{plain}\@thanks
+% \endgroup
+% \setcounter{footnote}{0}%
+% \global\let\thanks\relax
+% \global\let\maketitle\relax
+% \global\let\@maketitle\relax
+% \global\let\@thanks\@empty
+% \global\let\@author\@empty
+% \global\let\@date\@empty
+% \global\let\@title\@empty
+% \global\let\title\relax
+% \global\let\author\relax
+% \global\let\date\relax
+% \global\let\and\relax
+% } % end non-titlepage \maketitle
+%
+% \def\@maketitle{%
+% \newpage
+% \null
+% \vskip 2em%
+% \begin{center}%
+% \let \footnote \thanks
+% {\LARGE \@title \par}%
+% \vskip 1.5em%
+% {\large
+% \lineskip .5em%
+% \begin{tabular}[t]{c}%
+% \@author
+% \end{tabular}\par}%
+% \vskip 1em%
+% {\large \@date}%
+% \end{center}\par
+% \vskip 1.5em}
+% \fi
+% \end{verbatim}
+% \end{small}\par
+%
+% The definitions of |\title| and friends are in \file{ltsect.dtx}.
+% \par\begin{small}\begin{verbatim}
+% \def\title#1{\gdef\@title{#1}}
+% \def\@title{\@latex@error{No \noexpand\title given}\@ehc}
+% \def\author#1{\gdef\@author{#1}}
+% \def\@author{\@latex@warning@no@line{No \noexpand\author given}}
+% \def\date#1{\gdef\@date{#1}}
+% \gdef\@date{\today}
+% \def\thanks#1{\footnotemark
+% \protected@xdef\@thanks{\@thanks
+% \protect\footnotetext[\the\c@footnote]{#1}}}
+% \let\@thanks\@empty
+% \def\and{% % \begin{tabular}
+% \end{tabular}%
+% \hskip 1em \@plus.17fil%
+% \begin{tabular}[t]{c}}% % \end{tabular}
+% \end{verbatim}
+% \end{small}\par
+%
+% The definition of |\@starttoc| from \file{ltsect.dtx}.
+% \par\begin{small}\begin{verbatim}
+% \def\@starttoc#1{%
+% \begingroup
+% \makeatletter
+% \@input{\jobname.#1}%
+% \if@filesw
+% \expandafter\newwrite\csname tf@#1\endcsname
+% \immediate\openout \csname tf@#1\endcsname \jobname.#1\relax
+% \fi
+% \@nobreakfalse
+% \endgroup}
+% \end{verbatim}
+% \end{small}\par
+%
+% The definition of |\@writefile| from \file{ltmiscen.dtx}.
+% \par\begin{small}\begin{verbatim}
+% \long\def@writefile#1#2{%
+% \@ifundefined{tf@#1}\relax
+% {\@temptokena{#2}%
+% \immediate\write\csname tf@#1\endcsname{\the\@temptokena}%
+% }}
+% \end{verbatim}
+% \end{small}\par
+%
+% The definitions of |\addtocontents| and |addcontentsline|
+% from \file{ltsect.dtx}.
+% \par\begin{small}\begin{verbatim}
+% \long\def\addtocontents#1#2{%
+% \protected@write\@auxout
+% {\let\label\@gobble \let\index\@gobble \let\glossary\@gobble}%
+% {\string\@writefile{#1}{#2}}}
+% \def\addcontentsline#1#2#3{%
+% \addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}}}
+% \end{verbatim}
+% \end{small}\par
+%
+% The definitions of |\label|, |\@setref|, |\newlabel|, |\ref| and |\pageref|
+% from \file{ltxref.dtx}.
+% \par\begin{small}\begin{verbatim}
+% \def\label#1{\@bsphack
+% \protected@write\@auxout{}%
+% {\string\newlabel{#1}{{\@currentlabel}{\thepage}}}%
+% \@esphack}
+% \def\@setref#1#2#3{%
+% \ifx#1\relax
+% \protect\G@refundefinedtrue
+% \nfss@text{\reset@font\bfseries ??}%
+% \@latex@warning{Reference `#3' on page \thepage \space
+% undefined}%
+% \else
+% \expandafter#2#1\null
+% \fi}
+% \def\newlabel{\@newl@bel r}
+% \def\ref#1{\expandafter\@setref\csname r@#1\endcsname
+% \@firstoftwo{#1}}
+% \def\pageref#1{\expandafter\@setref\csname r@#1\endcsname
+% \@secondoftwo{#1}}
+% \end{verbatim}
+% \end{small}\par
+%
+% The definitions of |\bibcite| and |\@citex| from \file{ltbibl.dtx}.
+% \par\begin{small}\begin{verbatim}
+% \def\bibcite{\@newl@bel b}
+% \def\@citex[#1]#2{%
+% \let\@citea\@empty
+% \@cite{\@for\@citeb:=#2\do
+% {\@citea\def\@citea{,\penalty\@m\ }%
+% \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
+% \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
+% \@ifundefined{b\@citeb}{\mbox{\reset@font\bfseries ?}%
+% \G@refundefinedtrue
+% \@latex@warning
+% {Citation `\@citeb' on page \thepage \space undefined}}%
+% {\hbox{\csname b\@citeb\endcsname}}}}{#1}}
+% \end{verbatim}
+% \end{small}\par
+%
+%
+%
+%
+% \Finale
+% \PrintIndex
+%
+\endinput
+
+%% \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 \~}
+
+