summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/preprint/authblk.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/preprint/authblk.dtx')
-rw-r--r--macros/latex/contrib/preprint/authblk.dtx969
1 files changed, 969 insertions, 0 deletions
diff --git a/macros/latex/contrib/preprint/authblk.dtx b/macros/latex/contrib/preprint/authblk.dtx
new file mode 100644
index 0000000000..6c7e168c36
--- /dev/null
+++ b/macros/latex/contrib/preprint/authblk.dtx
@@ -0,0 +1,969 @@
+% \iffalse THIS IS A META-COMMENT
+%<*dtx>
+\ProvidesFile
+%========================================================================
+ {AUTHBLK.DTX}
+%========================================================================
+%</dtx>
+%% Copyright 1997-1999 Patrick W Daly
+%% Max-Planck-Institut f\"ur Aeronomie
+%% Max-Planck-Str. 2
+%% D-37191 Katlenburg-Lindau
+%% Germany
+%% E-mail: daly@linmpi.mpg.de
+%
+% This program can be redistributed and/or modified under the terms
+% of the LaTeX Project Public License Distributed from CTAN
+% archives in directory macros/latex/base/lppl.txt; either
+% version 1 of the License, or any later version.
+%
+% This is a contributed file to the LaTeX2e system.
+% -------------------------------------------------
+% This is a LaTeX package to prepare author/affiliation blocks
+% Installation:
+% LaTeX this file: creates docstrip installation file authblk.ins
+% AND the (LaTeX2e) documentation
+% (La)TeX authblk.ins: creates package files authblk.sty, and optionally
+% documentation driver authblk.drv
+% (authblk.ins may be edited as needed)
+% Docstrip options available:
+% package - to produce a .sty file with the uncommented coding
+% driver - to produce a driver file to print the documentation
+% 209 - (with package) for package that runs under LaTeX 2.09
+% subpack - (with package) for coding included in other packages
+% LaTeX the unstripped version to obtain the documentation
+% (Documentation can be produced with LaTeX2e only)
+%--------------------------------------------------------------------------
+%<*!subpack>
+%<package&209>\def\ProvidesPackage#1#2]
+%<package&209> {\typeout{Style option `#1'#2]}}
+%
+% *** Identify the package file:-
+%<package&!209>\NeedsTeXFormat{LaTeX2e}[1995/06/01]
+%<package>\ProvidesPackage{authblk}
+%</!subpack>
+%
+% *** Provide command to dislay module version
+%<package&subpack>\def\ModuleVersion#1[#2]{}
+%<package&subpack> \ModuleVersion{authblk}
+%
+% *** Identify the driver file:-
+%<driver>\NeedsTeXFormat{LaTeX2e}
+%<driver>\ProvidesFile{authblk.drv}
+%
+% *** The DATE, VERSION, and other INFO
+%\fi
+%\ProvidesFile{authblk}
+ [2001/02/27 1.3 (PWD)]
+%\iffalse
+%<*package>
+%<*!subpack>
+ %-------------------------------------------------------------------
+ % NOTICE:
+ % This file may be used for non-profit purposes.
+ % It may not be distributed in exchange for money,
+ % other than distribution costs.
+ %
+ % The author provides it `as is' and does not guarantee it in any way.
+ %
+%</!subpack>
+%</package>
+%% authblk coding copyright (C) 1997 Patrick W. Daly
+%<*package>
+%<*!subpack>
+ % Max-Planck-Institut f\"ur Aeronomie
+ % Max-Planck-Str. 2
+ % D-37191 Katlenburg-Lindau
+ % Germany
+ %
+ % E-mail: daly@linmpi.mpg.de
+ %-----------------------------------------------------------
+%</!subpack>
+%</package>
+% END META-COMMENT \fi
+% \changes{1.0}{1997 Apr 22}{First version}
+% \changes{1.1}{1997 Aug 28}{Allow standard \cs{author} to come before package
+% loaded}
+% \changes{1.1a}{1998 Jul 14}{A 2.09 fixup}
+% \changes{1.2}{1999 Feb 23}{Update copyright notice}
+% \changes{1.3}{2001 Feb 27}{Make stand-alone by changing \cs{maketitle} to center}
+%
+% \CheckSum{404}
+% \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 \~}
+%
+% \iffalse
+%<*install>
+%^^A =============================================
+%^^A Here is the docstrip installation file
+%^^A It is written on first LaTeX run if it
+%^^A does not already exist
+%^^A =============================================
+\begin{filecontents*}{authblk.ins}
+% File: authblk.ins
+% Copyright 1999 Patrick W. Daly
+%
+% This file can be redistributed and/or modified under the terms
+% of the LaTeX Project Public License Distributed from CTAN
+% archives in directory macros/latex/base/lppl.txt; either
+% version 1 of the License, or any later version.
+%
+% It is an installation file for extracting package and driver
+% files from the original source file. Simply process it under
+% TeX or LaTeX.
+
+\input docstrip
+
+\preamble
+=============================================
+IMPORTANT NOTICE:
+
+This program can be redistributed and/or modified under the terms
+of the LaTeX Project Public License Distributed from CTAN
+archives in directory macros/latex/base/lppl.txt; either
+version 1 of the License, or any later version.
+
+This is a generated file.
+It may not be distributed without the original source file \inFileName.
+
+Full documentation can be obtained by LaTeXing that original file.
+Only a few abbreviated comments remain here to describe the usage.
+=============================================
+\endpreamble
+\postamble
+
+<<<<< End of generated file <<<<<<
+\endpostamble
+
+\declarepreamble\driver
+============================================
+This is the driver file to produce the LaTeX documentation
+from the original source file \inFileName.
+
+Make changes to it as needed. (Never change the file \inFileName!)
+============================================
+\endpreamble
+
+\declarepostamble\driverq
+
+End of documentation driver file.
+\endpostamble
+
+\keepsilent
+\askforoverwritefalse
+
+\generate{\file{authblk.sty}{\from{authblk.dtx}{package}}
+ \file{authblk.drv}{\usepreamble\driver\usepostamble\driverq
+ \from{authblk.dtx}{driver}}
+ }
+
+\obeyspaces
+\Msg{******************************************}%
+\Msg{* For documentation, process authblk.dtx *}%
+\Msg{* or the driver file authblk.drv *}%
+\Msg{******************************************}
+
+\endbatchfile
+\end{filecontents*}
+%</install>
+%<*driver>
+\documentclass{ltxdoc}
+%<driver>%\documentclass[twoside]{ltxdoc}
+%<driver>%\documentclass[a4paper]{ltxdoc}
+%<driver>%\documentclass[twoside,a4paper]{ltxdoc}
+\raggedbottom
+
+ %** To include the detailed explanation of the coding, comment out
+ %** the next line
+\OnlyDescription
+
+ %** To produce a command index: add the following line for one run,
+ %** then run makeindex -s gind.ist authblk
+ %** and reprocess, with or without this line (much faster without)
+%<driver>% \EnableCrossrefs\CodelineIndex
+
+ %** To produce a change history: add the following line for one run,
+ %** then run makeindex -s gglo.ist -o authblk.gls authblk.glo
+ %** and reprocess, with or without this line (faster without)
+%<driver>% \RecordChanges
+
+\DisableCrossrefs %May stay; zapped by \EnableCrossrefs
+\CodelineNumbered %May stay
+
+\begin{document}
+ \DocInput{authblk.dtx}
+\end{document}
+%</driver>
+%\fi
+%
+% \DoNotIndex{\begin,\CodelineIndex,\CodelineNumbered,\def,\DisableCrossrefs}
+% \DoNotIndex{\DocInput,\documentclass,\EnableCrossrefs,\end,\GetFileInfo}
+% \DoNotIndex{\NeedsTeXFormat,\OnlyDescription,\RecordChanges,\usepackage}
+% \DoNotIndex{\ProvidesClass,\ProvidesPackage,\ProvidesFile,\RequirePackage}
+% \DoNotIndex{\LoadClass,\PassOptionsToClass,\PassOptionsToPackage}
+% \DoNotIndex{\DeclareOption,\CurrentOption,\ProcessOptions,\ExecuteOptions}
+% \DoNotIndex{\AtEndOfClass,\AtEndOfPackage,\AtBeginDocument,\AtEndDocument}
+% \DoNotIndex{\InputIfFileExists,\IfFileExists,\ClassError,\PackageError}
+% \DoNotIndex{\ClassWarning,\PackageWarning,\ClassWarningNoLine}
+% \DoNotIndex{\PackageWarningNoLine,\ClassInfo,\PackageInfo,\MessageBreak}
+% \DoNotIndex{\space,\protect,\DeclareRobustCommand,\CheckCommand}
+% \DoNotIndex{\newcommand,\renewcommand,\providecommand,\newenvironment}
+% \DoNotIndex{\renewenvironment,\newif,\newlength,\newcounter,\setlength}
+% \DoNotIndex{\setcounter,\if,\ifx,\ifcase,\ifnum,\ifdim,\else,\fi}
+% \DoNotIndex{\texttt,\textbf,\textrm,\textsl,\textsc}
+% \DoNotIndex{\textup,\textit,\textmd,\textsf,\emph}
+% \DoNotIndex{\ttfamily,\rmfamily,\sffamily,\mdseries,\bfseries,\upshape}
+% \DoNotIndex{\slshape,\scshape,\itshape,\em,\LaTeX,\LaTeXe}
+% \DoNotIndex{\filename,\fileversion,\filedate,\let}
+% \DoNotIndex{\\,\@empty,\@namedef,\@nameuse,\@tempa,\@temptokena}
+% \DoNotIndex{\@unexpandable@protect,\addtocounter,\and,\arabic}
+% \DoNotIndex{\begingroup,\c@authors,\edef,\endgroup,\expandafter}
+% \DoNotIndex{\ignorespaces,\large,\maxdimen,\noexpand,\normalfont,\number}
+% \DoNotIndex{\relax,\textsuperscript,\the,\value,\xdef,\z@}
+% \DoNotIndex{\@ifundefined,\@ifnextchar,\document,\gdef,\global,\rm}
+% \DoNotIndex{\rlap,\footnote,\thanks}
+%
+% \setcounter{IndexColumns}{2}
+% \setlength{\IndexMin}{10cm}
+% \setcounter{StandardModuleDepth}{1}
+%
+% \GetFileInfo{authblk}
+%
+% \title{\bfseries A \LaTeX\ Package to Prepare Author and Affiliation Blocks}
+%
+% \author{Patrick W. Daly}
+%
+% \date{This paper describes \LaTeXe\ package \texttt{\filename}\\
+% version \fileversion{} from \filedate\\[1ex]
+% \textsl{It is part of the \texttt{preprint} collection of packages}
+% }
+%
+% \maketitle
+%
+% \pagestyle{myheadings}
+% \markboth{P. W. Daly}{Author/Affiliation Blocks}
+%
+%^^A In order to keep all marginal notes on the one (left) side:
+%^^A (otherwise they switch sides disasterously with twoside option)
+% \makeatletter \@mparswitchfalse \makeatother
+%
+%\begin{small}\begin{center}\textbf{Summary}\end{center}
+% The stripped version of this file contains the following brief description:
+%\iffalse
+%<*package&!subpack>
+ % Author/Affiliation Blocks
+%\fi
+% \begin{verbatim}
+ % A LaTeX2e package to redefine the \author command to work as normal or
+ % to allow a footnote style of author/affiliation input.
+ %
+ % Three methods of input:
+ % 1. Standard LaTeX
+ % \author{Name1\\Affil1 /and Name2 and Name3\\Affil2 . . .}
+ % (use \authorcr, not \\, to force new line within the author text)
+ % 2. Automatic mode (selects modes 1 or 3 depending on number of affiliations)
+ % \author{Name1}
+ % \affil{Affil1}
+ % \author{Name2}
+ % \author{Name3}
+ % \affil{Affil2}
+ % . . .
+ % 3. Footnotes explicitly
+ % \author[*]{Name1}
+ % \author[**]{Name2}
+ % \author[**]{Name3}
+ % \affil[*]{Affil1}
+ % \affil[**]{Affil2}
+ % . . .
+% \end{verbatim}
+%\iffalse
+ % See documentation in authblk.dtx for further configuration possibilities.
+ %-----------------------------------------------------------
+%</package&!subpack>
+%\fi
+%\end{small}
+% \newcommand\brsl{/\discretionary{}{}{}}
+%
+% \section{Introduction}
+% The standard \LaTeX\ syntax for entering author names and their
+% affiliations is rather limited. The standard is to have \emph{author
+% blocks} consisting of all authors from one institute grouped together.
+% However, if there are many institutes, or if the authors are ordered in
+% some other way (e.g.\ alphabetically) it is more appropriate to use a
+% footnote system. Both methods should be available for any paper since the
+% style depends more on the number of authors and affiliations and their
+% mixture.
+%
+% This package offers a syntax for entering author names and their
+% affiliations that permits both styles, and is also compatible with the
+% standard \LaTeX\ syntax. It places its results in the control sequence
+% |\@author|, which is the standard container for the author\brsl{}affiliation
+% names; in this way it can be used immediately with standard \LaTeX\
+% classes, or with packages that modify the title\brsl{}author block.
+%
+% \section{Invoking the Package}
+% The macros in this package are included in the main document
+% with the |\usepackage| command of \LaTeXe,
+% \begin{quote}
+% |\documentclass[..]{...}|\\
+% |\usepackage[|\emph{options}|]{|\texttt{\filename}|}|
+% \end{quote}
+% where the possible \emph{options} are described below in Section~\ref{opts}.
+%
+% \section{Usage}
+%
+% Authors and affiliations can be printed in author blocks, as
+% \begin{center}
+% \begin{tabular}[t]{c}
+% J. B. Smith\\Institute for Research\\Hamilton, Ontario
+% \end{tabular}\\[1ex]
+% \begin{tabular}[t]{c}
+% C. T. Appleton and P. R. Bailey\\NASA, Greenbelt, MD
+% \end{tabular}
+% \end{center}
+% or in a line with footnote markers for the affiliations, as
+% \begin{center}
+% J. B. Smith\textsuperscript{1}, C. T. Appleton\textsuperscript{2}, and
+% P. R. Bailey\textsuperscript{2}\\[1ex]
+% \textsuperscript{1}Institute for Research, Hamilton, Ontario\\
+% \textsuperscript{2}NASA, Greenbelt, MD
+% \end{center}
+%
+% \DescribeMacro{\author}
+% \DescribeMacro{\affil}
+% The user can enter the author and affiliation information in a number of
+% different manners.
+% \begin{enumerate}
+% \item \label{ab}Standard \LaTeX, with syntax
+% \begin{quote}
+% |\author{|\dots|\and|\dots|\and|\dots|}|
+% \end{quote}
+% where each block of author(s)\brsl{}affiliation comes between the
+% |\and| commands, containing possibly |\\| for new lines;
+%
+% \item \label{abfn} Automatic switching between author block or footnote
+% style, information input with a series of |\author|, |\affil|
+% commands as
+% \begin{quote}
+% |\author{|\emph{author1}|}|\\
+% |\author{|\emph{author2}|}|\\
+% |\affil{|\emph{affil1}|}|\\
+% |\author{|\emph{author3}|}|\\
+% |\author{|\emph{author4}|}|\\
+% |\affil{|\emph{affil2}|}|\\
+% $\cdots$
+% \end{quote}
+% where the authors will appear all in one (possibly continued) line
+% with automatic footnotes, and the affiliations appear in separate lines
+% below;
+%
+% \item \label{fn}Footnote style with manual footnote markers given as
+% optional arguments; in this case, the |\author| and |\affil| commands
+% can be fully separated:
+% \begin{quote}
+% |\author[1]{|\emph{author1}|}|\\
+% |\author[1]{|\emph{author2}|}|\\
+% |\author[2]{|\emph{author3}|}|\\
+% |\author[2]{|\emph{author4}|}|\\
+% |\affil[1]{|\emph{affil1}|}|\\
+% |\affil[2]{|\emph{affil2}|}|\\
+% $\cdots$
+% \end{quote}
+% \end{enumerate}
+% Method \ref{ab} can only produce author blocks; method \ref{fn} only
+% footnotes, while \ref{abfn} can produce both. If the number of affiliations
+% is greater than \texttt{Maxaffil}, footnotes are used, otherwise author
+% blocks.
+%
+% \DescribeMacro{\authorcr}
+% With method \ref{ab}, the |\\| command is used to switch to affiliation
+% text, possibly changing the font; if the author text is to be forced to a
+% new line, use |\authorcr| instead.
+%
+% \noindent\textbf{Warning:}
+% methods \ref{abfn} and \ref{fn} can only be used \emph{after}
+% \texttt{\filename} has been loaded, since |\affil| is otherwise
+% not defined. However, a single |\author| command (method \ref{ab})
+% can appear before |\usepackage|, or even before |\documentclass|,
+% as is allowed in standard \LaTeX.
+%
+% \section{Configuration}
+%
+% Certain aspects of the author\brsl{}affiliation blocks can be controlled by
+% the user through redefinitions.
+%
+% As already \marginpar{\raggedleft\texttt{Maxaffil}}
+% mentioned, the maximum number of affiliations before automatically
+% switching from author block to footnote mode is set in the counter
+% |Maxaffil|. Redefine this with
+% \begin{quote}|\setcounter{Maxaffil}{2}|\end{quote}
+% The default is 2.
+%
+% \DescribeMacro{\Authfont}
+% \DescribeMacro{\Affilfont}
+% The author and affiliation lines can be set in different fonts, determined
+% by these macros. By default they are |\normalfont|. Redefine them with
+% |\renewcommand|, for example:
+% \begin{quote}\begin{verbatim}
+% \renewcommand\Authfont{\scshape}
+% \renewcommand\Affilfont{\itshape\small}
+% \end{verbatim}
+% \end{quote}
+%
+% \DescribeMacro{\affilsep}
+% The interline spacing between the author and affiliation lines is set by
+% the length |\affilsep|. Change this with |\setlength|, as
+% \begin{quote}|\setlength{\affilsep}{1em}|\end{quote}
+% This spacing applies to both footnote and author block modes.
+%
+% \DescribeMacro{\Authsep}
+% \DescribeMacro{\Authand}
+% \DescribeMacro{\Authands}
+% In footnote mode, one can change the texts that comes between the
+% authors' names, between two authors, and before the last author when there
+% are more than two. For example,
+% \begin{quote}\begin{verbatim}
+% \renewcommand\Authsep{, }
+% \renewcommand\Authand{ and }
+% \renewcommand\Authands{, and }
+% \end{verbatim}
+% \end{quote}
+% This example actually shows the defaults.
+%
+% \section{Options during Loading}\label{opts}
+% Some reconfigurations are provided for by means of options to the
+% |\usepackage| command. These are:
+% \begin{description}
+% \item[\ttfamily blocks]
+% sets |Maxaffil| to $\infty$ so that the automatic selection will always be
+% author\brsl{}affiliation blocks;
+%
+% \item[\ttfamily noblocks]
+% sets |Maxaffil| to 0 so that the automatic selection will always be
+% footnote mode;
+%
+% \item[\ttfamily max$n$] ($n=2,6$) sets |Maxaffil| to $n$;
+%
+% \item[\ttfamily auth-sc] sets author font to small caps;
+%
+% \item[\ttfamily auth-sc-lg] sets author font to small caps, but with size
+% |\large|;
+%
+% \item[\ttfamily auth-lg] sets author font to normal, but in size |\large|;
+%
+% \item[\ttfamily affil-sl] sets affiliation font to slanted;
+%
+% \item[\ttfamily affil-it] sets affiliation font to italic;
+%
+% \item[\ttfamily german] changes `and' to `und' in author lists.
+% \end{description}
+%
+% \StopEventually{\PrintIndex\PrintChanges}
+%
+% \section{Options with \texttt{docstrip}}
+% The source \texttt{.dtx} file is meant to be processed with
+% \texttt{docstrip}, for which a number of options are available:
+% \begin{description}
+% \item[\ttfamily package] to produce a \texttt{.sty} package file with most
+% comments removed;
+%
+% \item[\ttfamily subpack] (together with \texttt{package}) for coding that
+% is to be included inside a larger package; even more comments are
+% removed, as well as \LaTeXe{} option handling and identification;
+%
+% \item[\ttfamily 209] (together with \texttt{package}) for a style option
+% file that will run under the older \LaTeX~2.09;
+%
+% \item[\ttfamily driver] to produce a driver \texttt{.drv} file that will
+% print out the documentation under \LaTeXe. The documentation cannot
+% be printed under \LaTeX~2.09.
+%
+% \end{description}
+% The source file \texttt{\filename.dtx} is itself a driver file and can
+% be processed directly by \LaTeXe.
+%
+% \section{The Coding}
+% This section presents and explains the actual coding of the macros.
+% It is nested between |%<*package>| and |%</package>|, which
+% are indicators to \texttt{docstrip} that this coding belongs to the package
+% file.
+%
+% The \texttt{docstrip} option |<subpack>| should only be called if the
+% coding is to be included as part of another package, in which case the
+% announcement text and \LaTeXe{} options are suppressed.
+%
+% An alternative version of this coding is provided for running as a
+% style file under \LaTeX~2.09. Code lines belonging to this are
+% indicated with guard |<209>|; those for LaTeXe{} only with |<!209>|.
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \subsection{Basic Idea}
+%
+% In the standard \LaTeX\ classes, the authors and their affiliations are
+% input through the |\author| command, which simply stores the argument in
+% |\@author|. The text is then output by the |\maketitle| macro within a
+% |tabular| environment, as
+% \begin{quote}\begin{verbatim}
+% \begin{tabular}[t]{c}%
+% \@author
+% \end{tabular}
+% \end{verbatim}
+% \end{quote}
+% Different blocks within the |\author| text are separated by the |\and|
+% command, defined as
+% \begin{quote}\begin{verbatim}
+% \def\and{%
+% \end{tabular}%
+% \hskip 1em \@plus.17fil%
+% \begin{tabular}[t]{c}}%
+% \end{verbatim}
+% \end{quote}
+% Clearly, the definition of |\and| must be compatible with the environment
+% in which |\@author| is output.
+%
+% The \texttt{\filename} package provides a new way to enter the author and
+% affiliation data, but puts the results into |\@author|, which means it can
+% be used with the standard classes or with any class that has the author
+% information in |\@author|. Since \texttt{\filename} controls all the font
+% formatting for author and affiliation lines, |\maketitle| should not do
+% this.
+%
+% \subsection{Configurable Commands}
+%
+% All internal commands are designated with |\AB@..| to avoid name conflicts
+% with other packages. Commands that may be redefined for local configuration
+% contain no |@| and begin with an uppercase letter, like |\Authfont|.
+%
+% The following allow the author and affiliation blocks to be formatted.
+% These may be changed in the document or in packages that input (include)
+% \texttt{\filename}.
+%
+% \begin{macro}{\Authfont}
+% \begin{macro}{\Affilfont}
+% Declarations that are to be issued for the authors and affiliations are
+% defined here. Redefine these, for example, as
+% \begin{quote}\begin{verbatim}
+% \renewcommand\Authfont{\scshape}
+% \renewcommand\Affilfont{\itshape\small}
+% \end{verbatim}
+% \end{quote}
+% By default, they are the |\normalfont|.
+% \begin{macrocode}
+\newcommand\Authfont{\normalfont}
+\newcommand\Affilfont{\normalfont}
+%<209>\@ifundefined{normalfont}{\let\normalfont\rm}{}
+% \end{macrocode}
+% \end{macro}\end{macro}
+%
+% \begin{macro}{\Authsep}
+% \begin{macro}{\Authand}
+% \begin{macro}{\Authands}
+% Three macros determine what comes between author names,
+% \begin{macrocode}
+\newcommand\Authsep{, }
+% \end{macrocode}
+% what comes between the last and second last names for more than two authors,
+% \begin{macrocode}
+\newcommand\Authands{, and }
+% \end{macrocode}
+% and for exactly two authors.
+% \begin{macrocode}
+\newcommand\Authand{ and }
+% \end{macrocode}
+% These could be language dependent.
+% \end{macro}\end{macro}\end{macro}
+%
+% \begin{macro}{\affilsep}
+% The vertical spacing between an author and affiliation line. The length
+% |\@affilsep| comes between affiliation lines and switches between
+% |\affilsep| and 0~pt as needed.
+% \begin{macrocode}
+\newlength{\affilsep}\setlength{\affilsep}{1em}
+\newlength{\@affilsep}
+% \end{macrocode}
+% \end{macro}
+% Also part of the local configuration is the maximum number of affiliations
+% before switching to footnote mode. Redefine this with |\setcounter|.
+% \begin{macrocode}
+\newcounter{Maxaffil}
+\setcounter{Maxaffil}{2}
+% \end{macrocode}
+%
+% \subsection{Package Options}
+%
+% Options are provided to select some author and affiliation fonts, and
+% certain values of |Maxaffil|, including 0 (always footnote mode) and
+% infinity (always block mode).
+% \begin{macrocode}
+%<*!subpack&!209>
+\DeclareOption{blocks}{\setcounter{Maxaffil}{\maxdimen}}
+\DeclareOption{noblocks}{\setcounter{Maxaffil}{0}}
+\DeclareOption{max2}{\setcounter{Maxaffil}{2}}
+\DeclareOption{max3}{\setcounter{Maxaffil}{3}}
+\DeclareOption{max4}{\setcounter{Maxaffil}{4}}
+\DeclareOption{max5}{\setcounter{Maxaffil}{5}}
+\DeclareOption{max6}{\setcounter{Maxaffil}{6}}
+\DeclareOption{auth-sc}{\renewcommand\Authfont{\scshape}}
+\DeclareOption{auth-sc-lg}{\renewcommand\Authfont{\large\scshape}}
+\DeclareOption{auth-lg}{\renewcommand\Authfont{\large}}
+\DeclareOption{affil-sl}{\renewcommand\Affilfont{\slshape}}
+\DeclareOption{affil-it}{\renewcommand\Affilfont{\itshape}}
+\DeclareOption{german}{\renewcommand\Authand{, und }%
+ \renewcommand\Authands{, und }}
+\ProcessOptions
+%</!subpack&!209>
+% \end{macrocode}
+%
+% \subsection{Supporting Macros}
+%
+% First declare some counters and flags. The number of authors, affiliations,
+% and a flag to mark a new affiliation.
+% \begin{macrocode}
+\newcounter{authors}
+\newcounter{affil}
+\newif\ifnewaffil \newaffiltrue
+% \end{macrocode}
+%
+% \begin{macro}{\AB@authnote}
+% \begin{macro}{\AB@affilnote}
+% The formatting of the footnote markers in the author and affiliation lines.
+% The |\textsuperscript| command must be defined for 2.09 and provided for
+% earlier version of \LaTeXe\ (before 1995/06/01).
+% \begin{macrocode}
+\newcommand\AB@authnote[1]{\textsuperscript{\normalfont#1}}
+\newcommand\AB@affilnote[1]{\textsuperscript{\normalfont#1}}
+%<209>\@ifundefined{textsuperscript}{\newcommand\textsuperscript[1]{$^{#1}$}}{}
+%<!209>\providecommand\textsuperscript[1]{$^{#1}$}
+% \end{macrocode}
+% \end{macro}\end{macro}
+%
+% \begin{macro}{\AB@blk@and}
+% The macro that comes between author blocks. Initially this is nothing other
+% than setting the author font, but will be set to |\and| after the first
+% invocation. Again, everything in this definition must be robust, either
+% intrinsically or with |\protect| commands. The macro |\AB@setsep|
+% sets |\@affilsep| to the author-affiliation separation.
+% \begin{macrocode}
+\newcommand\AB@blk@and{\protect\Authfont\protect\AB@setsep}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\AB@pand}
+% The `protected' version of |\and| that is inserted in |\AB@authors| between
+% authors and affiliations; since it begins a new author block, it sets the
+% font to the author font, and the interline spacing to the
+% author\brsl{}affiliation spacing.
+% \begin{macrocode}
+\newcommand\AB@pand{\protect\and \protect\Authfont \protect\AB@setsep}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@sep1}\begin{macro}{\@sep2}
+% The $n$th author in |\AB@authlist| is preceeded by
+% |\@sep|$n$; this is defined as empty for $n$=1 and the as the
+% two-author separation for $n$=2, to be altered later.
+% \begin{macrocode}
+\@namedef{@sep1}{}
+\@namedef{@sep2}{\Authand}
+% \end{macrocode}
+% \end{macro}\end{macro}
+%
+% \begin{macro}{\AB@affilsep}
+% \begin{macro}{\AB@affilsepx}
+% What comes before the very first footnote affiliation, and before all
+% successive affiliations. These should be separate lines within some
+% tabular environment, so reset the font every time to the affiliation one.
+% (Note: |\\| is robust in \LaTeXe, but not in 2.09; adding the |\protect|
+% before |\\| does not hurt, though.)
+% \begin{macrocode}
+\newcommand\AB@affilsep{\protect\Affilfont}
+\newcommand\AB@affilsepx{\protect\\\protect\Affilfont}
+% \end{macrocode}
+% \end{macro}\end{macro}
+%
+% \begin{macro}{\AB@setsep}
+% \begin{macro}{\AB@resetsep}
+% The current interline spacing within affiliations is |\@affilsep|; the
+% initial spacing (between authors and first affiliation line) is
+% |\affilsep|; switching |\@affilsep| between 0~pt and |\affilsep| is done
+% with these macros.
+% \begin{macrocode}
+\newcommand\AB@setsep{\setlength{\@affilsep}{\affilsep}}
+\newcommand\AB@resetsep{\setlength{\@affilsep}{\z@}}
+% \end{macrocode}
+% \end{macro}\end{macro}
+%
+% \begin{macro}{\AB@authlist}
+% \begin{macro}{\AB@affillist}
+% \begin{macro}{\AB@authors}
+% There are three `lists' that are filled up with various commands:
+% \begin{itemize}
+% \item |\AB@authlist| containing all the authors;
+%
+% \item |\AB@affillist| containing all the affiliations;
+%
+% \item |\AB@authors| ($\equiv$|\@author|) containing the input of the
+% standard \LaTeX\ |\author| command, a mixture of authors and
+% affiliations, with blocks separated by |\and| commands.
+% \end{itemize}
+% |\AB@empty| is provided for testing the emptiness of |\AB@affillist|
+% later. (Do not use |\@empty|, because that is not a `long' macro.)
+%
+% Here these lists are initialized.
+% \begin{macrocode}
+\newcommand\AB@authlist{}
+\newcommand\AB@affillist{}
+\newcommand\AB@authors{}
+\newcommand\AB@empty{}
+% \end{macrocode}
+% \end{macro}\end{macro}\end{macro}
+%
+% \begin{macro}{\AB@author}
+% \changes{1.1}{1997 Aug 28}{Initialize to existing \cs{@author}}
+% \changes{1.1a}{1998 Jul 14}{Define \cs{@author} for 2.09}
+% The |\AB@author| macro holds the argument of the last issued |\author|
+% command, normally stored in |\@author|. Equate these now in case
+% |\author| was issued before the class and/or packages were loaded,
+% something that is allowed in standard \LaTeX. Of course, the new
+% features with |\affil| and multiple |\author| commands will not
+% function before this package is loaded.
+%
+% For \LaTeX~2.09, must provisionally define |\@author|.
+% \begin{macrocode}
+%<209>\@ifundefined{@author}{\def\@author}{}
+\xdef\AB@author{\noexpand\AB@blk@and\@author}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{User Interfacing Commands}
+%
+% \begin{macro}{\author}
+% Three lists are maintained for authors and affiliations. In |\AB@authors|,
+% the text for the author block is stored; both |\author| and |\affil| add
+% their arguments to this list, with |\\| between author and affiliation, and
+% |\and| between the affiliation and the next author text. If one only uses
+% the |\author| command (standard \LaTeX) one must add these separators
+% explicitly in the argument.
+%
+% In addition, both |\author| and |\affil| store their arguments in
+% |\AB@authlist| and |\AB@affillist|, adding footnote marks determined either
+% automatically, or by the optional arguments.
+%
+% Finally, |\@author| will be made up either by |AB@author|, |\AB@authors|, or
+% |\AB@authlist| plus |\AB@affillist|.
+%
+% Consequently, |\author| and |\affil| are fairly complex.
+% \begin{macrocode}
+%<209>\renewcommand\author{\@ifnextchar[%]
+%<209> {\@Xauthor}{\@Xauthor[]}}
+%<209>\def\@Xauthor[#1]#2%
+%<!209>\renewcommand\author[2][]%
+% \end{macrocode}
+% The flag |\ifnewaffil| is set by |\affil| to tell |\author| that a new
+% author block is beginning. This flag is set to \meta{false} at the end
+% if this macro.
+% \begin{macrocode}
+ {\ifnewaffil\addtocounter{affil}{1}%
+ \edef\AB@thenote{\arabic{affil}}\fi
+% \end{macrocode}
+% Argument |#1| is the optional footnote marker; if it is present, force the
+% footnote mode by setting |Maxaffil| counter to zero.
+% \begin{macrocode}
+ \if\relax#1\relax\def\AB@note{\AB@thenote}\else\def\AB@note{#1}%
+ \setcounter{Maxaffil}{0}\fi
+% \end{macrocode}
+% The author list in |\AB@authlist| is to have commas (|\Authsep|) between
+% the names, nothing before the first one, and `and' (|\Authands|) before the
+% last one. If only two names are present, they are separated by |\Authand|.
+% To accomplish this, place |@sep|$n$ before author $n$ which
+% is defined to be |\Authands|; at the same time, define the previous one to
+% be |\Authsep|, taking care that |\@sep1| (empty) is never redefined, and
+% that |\@sep2| (|\Authand|) is only redefined after the third author. Note
+% that at this point in the coding, the |authors| counter is not yet
+% incremented, so its value is $n-1$.
+% \begin{macrocode}
+ \ifnum\value{authors}>1\relax
+ \@namedef{@sep\number\c@authors}{\Authsep}\fi
+ \addtocounter{authors}{1}%
+% \end{macrocode}
+% Put the new author text in |#2| into the lists |\AB@authors| and
+% |\AB@authlist|. Because of the expansion method of getting the existing
+% contents of these lists, all commands in the arguments must be robust. For
+% this reason, make |\thanks| and |\footnote| robust (they normally are
+% fragile).
+%
+% Note that every new line inserted into |\AB@authors| must contain
+% formatting declarations, like |\Authfont| and |\Affilfont|.
+% The newline command |\\| switches to affiliation, with extra interline
+% spacing and a different font. The extra spacing is in |\@affilsep| which is
+% either zero or |\affilsep|, as set by commands |\AB@resetsep| and
+% |\AB@setsep|. The extra spacing is meant only to come between author and
+% first affiliation lines.
+%
+% The newline command should behave differently in |\AB@authlist|; the
+% |\authorcr| macro is adequate for this (new line and |\Authfont|).
+%
+% Reminder: the font declarations must be made on each new line since
+% |\@author| is normally placed within a |tabular| environment where each
+% line has local scope so all declarations and definitions apply only within
+% it.
+% \begin{macrocode}
+ \begingroup
+ \let\protect\@unexpandable@protect \let\and\AB@pand
+ \def\thanks{\protect\thanks}\def\footnote{\protect\footnote}%
+ \@temptokena=\expandafter{\AB@authors}%
+ {\def\\{\protect\\[\@affilsep]\protect\Affilfont
+ \protect\AB@resetsep}%
+% \end{macrocode}
+% To allow for the standard \LaTeX\ syntax with only one |\author| command
+% for everything, put the argument |#2| into |\AB@author| with the
+% appropriate preamble |\AB@blk@and|. If |\affil| is never called, this
+% will be the final content of |\@author|. Otherwise it will become
+% |\AB@authors|. Here the previous author is |\AB@au@str| is put into
+% |\AB@authors|, and then |#2| is stored for the next |\author| or |\affil|
+% call. |\AB@as| is the separator between authors in one sub-block; |\AB@las|
+% is the separator before the last author in a sub-block; this is entered by
+% |\affil| which signals the end of a sub-block of authors.
+% (This delayed entry method cannot be used for |\AB@authlist| because there
+% one needs to know the very last author, but one never knows if another
+% |\affil| command might come along.)
+% \begin{macrocode}
+ \xdef\AB@author{\AB@blk@and#2}%
+ \ifnewaffil\gdef\AB@las{}\gdef\AB@lasx{\protect\Authand}\gdef\AB@as{}%
+ \xdef\AB@authors{\the\@temptokena\AB@blk@and}%
+ \else
+ \xdef\AB@authors{\the\@temptokena\AB@as\AB@au@str}%
+ \global\let\AB@las\AB@lasx\gdef\AB@lasx{\protect\Authands}%
+ \gdef\AB@as{\Authsep}%
+ \fi
+ \gdef\AB@au@str{#2}}%
+ \@temptokena=\expandafter{\AB@authlist}%
+ \let\\=\authorcr
+ \xdef\AB@authlist{\the\@temptokena
+ \protect\@nameuse{@sep\number\c@authors}%
+ \protect\Authfont#2\AB@authnote{\AB@note}}%
+ \endgroup
+% \end{macrocode}
+% Define |\@sep|$n$ preceeding the current author to be |\Authands|, in case
+% this should turn out to be the last author. If another author comes, he
+% will redefine this (see above).
+% \begin{macrocode}
+ \ifnum\value{authors}>2\relax
+ \@namedef{@sep\number\c@authors}{\Authands}\fi
+ \newaffilfalse
+}
+% \end{macrocode}
+%
+% For \LaTeX~2.09, we must define this \LaTeXe\ macro.
+% \begin{macrocode}
+%<209>\def\@unexpandable@protect{\noexpand \protect \noexpand}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\authorcr}
+% In the author blocks made up with the |\author| command alone, the |\\|
+% command is used to start a new line and to switch to affiliation formatting.
+% In order to force a new line within the author line, use |\authorcr|.
+% \begin{macrocode}
+\newcommand\authorcr{\protect\\ \protect\Authfont \protect\AB@setsep}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\affil}
+% The affiliation information is also written into |\AB@authors| and
+% |\AB@affillist|. The |\ifnewaffil| flag is set to inform |\author|, the
+% `blank-or-and' macro |\AB@blk@and| is set to (protected) `and', and if
+% there is an optional argument, the counter |Maxaffil| is set to zero to
+% force footnote mode.
+% \begin{macrocode}
+%<209>\newcommand\affil{\@ifnextchar[%]
+%<209> {\@Xaffil}{\@Xaffil[]}}
+%<209>\def\@Xaffil[#1]#2%
+%<!209>\newcommand\affil[2][]%
+ {\newaffiltrue\let\AB@blk@and\AB@pand
+ \if\relax#1\relax\def\AB@note{\AB@thenote}\else\def\AB@note{#1}%
+ \setcounter{Maxaffil}{0}\fi
+% \end{macrocode}
+% As for |\author|, the newline command must be highjacked and altered. For
+% |\AB@authors|, it issues a new line and declares the affiliation font. For
+% |\AB@authlist|, where each affiliation is to appear on a single line, it is
+% converted into a comma.
+% \begin{macrocode}
+ \begingroup
+ \let\protect\@unexpandable@protect
+ \def\thanks{\protect\thanks}\def\footnote{\protect\footnote}%
+ \@temptokena=\expandafter{\AB@authors}%
+ {\def\\{\protect\\\protect\Affilfont}\xdef\AB@temp{#2}}%
+ \xdef\AB@authors{\the\@temptokena\AB@las\AB@au@str
+ \protect\\[\affilsep]\protect\Affilfont\AB@temp}%
+ \gdef\AB@las{}\gdef\AB@au@str{}%
+ {\def\\{, \ignorespaces}\xdef\AB@temp{#2}}%
+ \@temptokena=\expandafter{\AB@affillist}%
+ \xdef\AB@affillist{\the\@temptokena \AB@affilsep
+ \AB@affilnote{\AB@note}\protect\Affilfont\AB@temp}%
+ \endgroup
+% \end{macrocode}
+% The item before each affiliation is |\AB@affilsep|, which changes from its
+% initial definition to |\AB@affilsepx| after the first call.
+% \begin{macrocode}
+ \let\AB@affilsep\AB@affilsepx
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@author}
+% Define |\@author| to be the last |\author| call if |\affil| was
+% never used (standard \LaTeX), or define it to be either |\AB@authors| or a
+% combination of |\AB@authlist| and |\AB@authlist| depending on number of
+% affiliations.
+%
+% The standard classes put any footnote markers (with |\thanks| or
+% |\footnote|) into |\rlap| so they overlap with punctuation. Unfortunately,
+% they also overlap any other affiliation footnote markers. Thus turn off
+% |\rlap| for footnote style. Since |\@author| is normally called within
+% some environment, this change is local.
+% \begin{macrocode}
+\def\@author{}
+\renewcommand\@author{\ifx\AB@affillist\AB@empty\AB@author\else
+ \ifnum\value{affil}>\value{Maxaffil}\def\rlap##1{##1}%
+ \AB@authlist\\[\affilsep]\AB@affillist
+ \else \AB@authors\fi\fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\maketitle}
+% \changes{1.3}{2001 Feb 27}{Modify standard macro}
+% The standard definitions of |\maketitle| place the |\@author| text in a
+% |tabular| environment, which is not appropriate for the long author list
+% possible with \texttt{\filename}. Instead, use the |center| environment.
+% Other packages that call \texttt{\filename} such as \texttt{mpaehead} redefine
+% |\maketitle| accordingly. But if \texttt{\filename} is used on its own, this
+% will not be done. Thus highjack the |\maketitle| command and redefine
+% |tabular| to be |center|.
+% \begin{macrocode}
+\let\AB@maketitle=\maketitle
+\def\maketitle
+ {{\renewenvironment{tabular}[2][]{\begin{center}}
+ {\end{center}}
+ \AB@maketitle}}
+%</package>
+% \end{macrocode}
+% \end{macro}
+%
+% \Finale