diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/combine/combine.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/combine/combine.dtx | 3972 |
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 \~} + + |