summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/revtex/ltxfront.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/revtex/ltxfront.dtx')
-rw-r--r--macros/latex/contrib/revtex/ltxfront.dtx3763
1 files changed, 3763 insertions, 0 deletions
diff --git a/macros/latex/contrib/revtex/ltxfront.dtx b/macros/latex/contrib/revtex/ltxfront.dtx
new file mode 100644
index 0000000000..e1b3582184
--- /dev/null
+++ b/macros/latex/contrib/revtex/ltxfront.dtx
@@ -0,0 +1,3763 @@
+% \iffalse meta-comment balanced on line 108
+% ltxfront.dtx: package to change page grid, MVL.
+% Copyright (c) 2009 Arthur Ogawa
+%
+% Disclaimer
+% This file is distributed WITHOUT ANY WARRANTY;
+% without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+% License
+% You may distribute this file under the conditions of the
+% LaTeX Project Public License 1.3c or later
+% (http://www.latex-project.org/lppl.txt).
+% ReadMe
+% For the documentation and more detailed instructions for
+% installation, typeset this document with \LaTeX.
+% Maintenance Status
+% This work has the LPPL maintenance status "maintained";
+% Current Maintainer of this work is Arthur Ogawa.
+%
+% This work consists of the main source file ltxfront.dtx
+% and the derived files
+% ltxfront.sty, ltxfront.pdf
+% Distribution:
+% CTAN:macros/latex/contrib/revtex/
+%
+% Unpacking:
+% tex ltxfront.dtx
+%
+% Documentation:
+% latex ltxfront.dtx; ...
+%
+% Programm calls to get the documentation (example):
+% pdflatex ltxfront.dtx
+% makeindex -s gind.ist ltxfront.idx
+% makeindex -s gglo.ist -o ltxfront.gls ltxfront.glo
+% pdflatex ltxfront.dtx
+% makeindex -s gind.ist ltxfront.idx
+% pdflatex ltxfront.dtx
+%
+% Installation:
+% TDS:doc/latex/revtex/
+% TDS:source/latex/revtex/
+% TDS:tex/latex/revtex/
+%
+% Thanks, Heiko!
+% This method of letting a single .dtx file serve as both
+% documentation (via latex) and installer (via tex) follows
+% the example of Heiko Oberdiek. Thanks!
+%<*ignore>
+\begingroup
+ \def\x{LaTeX2e}%
+\expandafter\endgroup
+\ifcase
+ 0\expandafter\ifx\csname processbatchFile\endcsname\relax\else1\fi\ifx\fmtname\x\else 1\fi
+ \relax
+\else
+ \csname fi\endcsname
+%</ignore>
+%<*install>
+%% This file will generate documentation and runtime files
+%% from ltxfront.dtx when run through LaTeX or TeX.
+\input docstrip
+\preamble
+
+This is a generated file;
+altering it directly is inadvisable;
+instead, modify the original source file.
+See the URL in the file README-LTXFRONT.tex.
+
+License
+ You may distribute this file under the conditions of the
+ LaTeX Project Public License 1.3c or later
+ (http://www.latex-project.org/lppl.txt).
+
+ This file is distributed WITHOUT ANY WARRANTY;
+ without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE.
+
+\endpreamble
+\askforoverwritefalse
+\keepsilent
+ \generate{%
+ %{ignore}
+% \usedir{tex/latex/revtex}%
+ \file{ltxfront.sty}{%
+ \from{ltxfront.dtx}{package,options,kernel}%
+ }%
+ }%
+\ifToplevel{
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation, please move}
+\Msg{* ltxfront.sty}
+\Msg{* into a directory searched by TeX;}
+\Msg{* in a TDS-compliant installation:}
+\Msg{* texmf/tex/macros/latex/revtex/.}
+\Msg{*}
+\Msg{* To produce the documentation,
+ run ltxfront.dtx through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing}
+\Msg{***********************************************************}
+}
+\endbatchfile
+%</install>
+%<*ignore>
+\fi
+%</ignore>
+% \fi
+%
+% \GetFileInfo{ltxfront.dtx}
+%
+% \iffalse ltxdoc klootch
+%<*package>
+%%% @LaTeX-file{
+%%% filename = "ltxfront.dtx",
+%%% version = "4.2f",
+%%% date = "2022/06/05",
+%%% author = "Arthur Ogawa (mailto:arthur_ogawa at sbcglobal.net),
+%%% commissioned by the American Physical Society.
+%%% ",
+%%% copyright = "Copyright (C) 1999, 2009 Arthur Ogawa,
+%%% distributed under the terms of the
+%%% LaTeX Project Public License 1.3c, see
+%%% ftp://ctan.tug.org/macros/latex/base/lppl.txt
+%%% ",
+%%% address = "Arthur Ogawa,
+%%% USA",
+%%% telephone = "",
+%%% FAX = "",
+%%% email = "mailto colon arthur_ogawa at sbcglobal.net",
+%%% codetable = "ISO/ASCII",
+%%% keywords = "latex, page grid, main vertical list",
+%%% supported = "yes",
+%%% abstract = "package to change page grid, MVL",
+%%% }
+%</package>
+% \fi
+%
+% \iffalse ltxdoc klootch
+% The following references the \file{README-LTXFRONT} file,
+% which contains basic information about this package.
+% The contents of this file are generated when
+% you typeset the programmer's documentation.
+% Search on "{filecontents*}{README-LTXFRONT.tex}" to locate it.
+% \fi\input{README-LTXFRONT}%
+%
+% \subsection{Bill of Materials}
+%
+% Following is a list of the files in this distribution arranged
+% according to provenance.
+%
+% \subsubsection{Primary Source}%
+% One single file generates all.
+%\begin{verbatim}ltxfront.dtx\end{verbatim}
+%
+% \subsubsection{Generated by \texttt{latex ltxfront.dtx}}%
+% Typesetting the source file under \LaTeX\
+% generates the readme and the documentation.
+%\begin{verbatim}README-LTXFRONT\end{verbatim}
+%
+% \subsubsection{Generated by \texttt{tex ltxfront.dtx}}%
+% Typesetting the installer generates
+% the package files.
+%\begin{verbatim}ltxfront.sty\end{verbatim}
+%
+% \subsubsection{Documentation}%
+% The following are the online documentation:
+% \begin{verbatim}ltxfront.pdf\end{verbatim}
+%
+% \subsubsection{Auxiliary}%
+% The following are auxiliary files generated
+% in the course of running \LaTeX:
+% \begin{verbatim}ltxfront.aux ltxfront.idx ltxfront.ind ltxfront.log ltxfront.toc\end{verbatim}
+%
+% \section{Code common to all modules}%
+%
+% We want to require only one place in this file
+% where the version number is stated,
+% and we also want to ensure that the version
+% number is embedded into every generated file.
+%
+% Now we declare that
+% these files can only be used with \LaTeXe.
+% An appropriate message is displayed if
+% a different \TeX{} format is used.
+% \begin{macrocode}
+%<*doc|package>
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]%
+%</doc|package>
+% \end{macrocode}
+% As desired, the following modules all
+% take common version information:
+% \begin{macrocode}
+%<kernel&!package&!doc>\typeout{%
+%<*package|doc>
+\ProvidesFile{%
+%</package|doc>
+%<*kernel|package|doc>
+ltxfront%
+%</kernel|package|doc>
+%<*doc>
+.dtx%
+%</doc>
+%<package>.sty%
+%<*package|doc>
+}%
+%</package|doc>
+% \end{macrocode}
+%
+% The following line contains, for once and for all,
+% the version and date information.
+% By various means, this information is reproduced
+% consistently in all generated files and in the
+% typeset documentation.
+% \begin{macrocode}
+%<*doc|package|kernel>
+%<version>
+ [2022/06/05 4.2f frontmatter package (AO,DPC,MD)]% \fileversion
+%</doc|package|kernel>
+%<kernel&!package&!doc>}%
+% \end{macrocode}
+%
+%
+% \section{The doc module \texttt{doc}}
+%
+% This module, consisting of the present section,
+% typesets the programmer's documentation,
+% generating the \file{README-LTXFRONT} and sample document as needed.
+%
+% Because the only uncommented-out lines of code at the beginning of
+% this file constitute the \file{doc} module itself,
+% we can simply typeset the \file{.dtx} file directly,
+% and there is thus rarely any need to
+% generate the ``doc'' {\sc docstrip} module.
+% Module delimiters are nonetheless required so that
+% this code does not find its way into the other modules.
+%
+% The \enve{document} command concludes the typesetting run.
+%
+% \begin{macrocode}
+%<*doc>
+% \end{macrocode}
+%
+% \subsection{The Preamble}
+% The programmers documentation is formatted
+% with the \classname{ltxdoc} class with local customizations,
+% and with the usual code line indexing.
+% \begin{macrocode}
+\documentclass{ltxdoc}
+\RequirePackage{ltxdocext}%
+\let\url\undefined
+\RequirePackage[colorlinks=true,linkcolor=blue]{hyperref}%
+%\expandafter\ifx\csname package@font\endcsname\@undefined\else
+% \expandafter\RequirePackage\expandafter{\csname package@font\endcsname}%
+%\fi
+\CodelineIndex\EnableCrossrefs % makeindex -s gind.ist ltxfront
+\RecordChanges % makeindex -s gglo.ist -o ltxfront.gls ltxfront.glo
+% \end{macrocode}
+%
+% \subsubsection{Docstrip and info directives}
+% We use so many {\sc docstrip} modules that we set the
+% \texttt{StandardModuleDepth} counter to 1.
+% \begin{macrocode}
+\setcounter{StandardModuleDepth}{1}
+% \end{macrocode}
+% The following command retrieves the date and version information
+% from this file.
+% \begin{macrocode}
+\expandafter\GetFileInfo\expandafter{\jobname.dtx}%
+% \end{macrocode}
+%
+% \subsection{The ``Read Me'' File}
+% As promised above, here is the contents of the
+% ``Read Me'' file. That file serves a double purpose,
+% since it also constitutes the beginining of the
+% programmer's documentation. What better thing, after
+% all, to have appear at the beginning of the
+% typeset documentation?
+%
+% A good discussion of how to write a ReadMe file can be found in
+% Engst, Tonya, ``Writing a ReadMe File? Read This''
+% \emph{MacTech} October 1998, p. 58.
+%
+% Note the appearance of the
+% \cmd\StopEventually\ command, which marks the
+% dividing line between the user documentation
+% and the programmer documentation.
+%
+% The usual user will not be asked to
+% do a full build, not to speak
+% of the bootstrap.
+% Instructions for carrying these processes
+% begin the programmer's manual.
+%
+% \begin{macrocode}
+\begin{filecontents*}{README-LTXFRONT.tex}
+\title{%
+ A \LaTeX\ Package for\\the frontmatter and title page%
+ \thanks{%
+ This file has version number \fileversion,
+ last revised \filedate.%
+ }%
+ \thanks{%
+ Version \fileversion\ \copyright\ 2019 American Physical Society
+ }%
+}%
+
+\author{%
+ Arthur Ogawa%
+ \thanks{\texttt{mailto:arthur\_ogawa at sbcglobal.net}}%
+}%
+%\iffalse
+% For version number and date,
+% search on "\fileversion" in the .dtx file,
+% or see the end of the README-LTXFRONT file.
+%\fi
+\maketitle
+
+This file embodies the \classname{ltxfront} package,
+the implementation and its user documentation.
+
+The distribution point for this work is
+\url{https://journals.aps.org/revtex},
+which contains fully unpacked, prebuilt runtime files and documentation.
+
+The \classname{ltxfront} package was commissioned by the American Physical Society
+and is distributed under the terms of the \LaTeX\ Project Public License 1.3c,
+the same license under which all the portions of \LaTeX\ itself is distributed.
+Please see \url{http://ctan.tug.org/macros/latex/base/lppl.txt} for details.
+
+To use this document class, you must have a working
+\TeX\ installation equipped with \LaTeXe\
+and possibly pdftex and Adobe Acrobat Reader or equivalent.
+
+To install, retrieve the distribution,
+unpack it into a directory on the target computer,
+and move the file \file{ltxfront.sty}
+into a location in your filesystem where it will be found by \LaTeX.
+
+To use, read the user documentation \file{ltxfront.pdf}.
+
+\tableofcontents
+
+\section{Processing Instructions}
+
+The package file \file{ltxfront.sty}
+is generated from this file, \file{ltxfront.dtx},
+using the {\sc docstrip} facility of \LaTeX
+via |tex ltxfront.dtx|.
+The typeset documentation that you are now reading is generated from
+the same file by typesetting it with \LaTeX\ or pdftex
+via |latex ltxfront.dtx| or |pdflatex ltxfront.dtx|.
+
+\subsection{Build Instructions}
+
+You may bootstrap this suite of files solely from \file{ltxfront.dtx}.
+Prepare by installing \LaTeXe\ (and either tex or pdftex) on your computer,
+then carry out the following steps:
+\begin{enumerate}
+
+\item
+Within an otherwise empty directory,
+typeset \file{ltxfront.dtx} with \TeX\ or pdftex,
+thereby generating the package file \file{ltxfront.sty}.
+
+\item
+Next typeset \file{ltxfront.dtx} with \LaTeX\ or pdflatex;
+you will obtain the typeset documentation you are now reading,
+along with
+the sample document \file{ltxfront-test.tex}
+and the file \file{README-LTXFRONT}.
+
+Note: you will have to run \LaTeX, then
+\file{makeindex} \texttt{-s gind.ist ltxfront.idx}, then
+\file{makeindex} \texttt{-s gglo.ist -o ltxfront.gls ltxfront.glo}, then
+\LaTeX\ again in order to obtain a valid index and table of contents.
+\item
+Now typeset \file{ltxfront.dtx} with \TeX (not \LaTeX),
+thereby generating the package file \file{ltxfront.sty}.
+\item
+Install the following files into indicated locations within your
+TDS-compliant \texttt{texmf} tree (you may need root access):
+\begin{itemize}
+\item
+\file{$TEXMF/}\file{tex/}\file{latex/}\file{revtex/}\classname{ltxfront.sty}
+\item
+\file{$TEXMF/}\file{source/}\file{latex/}\file{revtex/}\classname{ltxfront.dtx}
+\item
+\file{$TEXMF/}\file{doc/}\file{latex/}\file{revtex/}\classname{ltxfront.pdf}
+\end{itemize}
+where \file{$TEXMF/} stands for \file{texmf-local/}, or some other \texttt{texmf} tree
+in your installation.
+\item
+Run \texttt{mktexlsr} on \file{$TEXMF/} (you may need root access).
+\item
+Build and installation are now complete;
+now put a \cmd\usepackage\texttt{\{ltxfront\}} in your document preamble!
+\end{enumerate}
+
+\subsection{Change Log}
+\changes{4.0b}{1999/06/20}{Change handling of \cs{@author} to prevent parsing problems. (Helps in error recovery when syntax errors exist)}
+\changes{4.0b}{1999/06/20}{Gathered all code for the abstract environment together and abstracted out the formatting details for journals to override.}
+\changes{4.0b}{1999/06/20}{Separate option now controls production}
+\changes{4.0b}{1999/06/20}{Set \cs{footnote} to \LaTeX\ standard version for this scope.}
+\changes{4.0c}{1999/11/13}{grid changes with ltxgrid}
+\changes{4.0d}{1998/01/31}{\cs{comma@space}}
+\changes{4.0d}{1998/01/31}{change name from \cs{tempaffiliation}}
+\changes{4.0d}{1998/01/31}{hookify}
+\changes{4.0d}{1998/01/31}{If empty \cs{abstractname} omit spacing}
+\changes{4.0d}{1998/01/31}{PACS boxed to width of abstract}
+\changes{4.0e}{2000/09/20}{Keywords on same footing as PACS}
+\changes{4.0e}{2000/09/20}{Warn if no production}
+\changes{4.0f}{2001/02/13}{Actually append \cs{AU@grp} to \cs{@AAClist}.}
+\changes{4.0g}{1998/06/10}{multiple preprint commands}
+\changes{4.0h}{1998/06/25}{Changes to support groups of affiliations}
+\changes{4.0h}{1998/06/25}{new hook}
+\changes{4.0l}{1998/09/01}{add optional argument handling back}
+\changes{4.0l}{1998/09/01}{Changes to add collaboration processing, which now means doing comma/and processing on each sublist}
+\changes{4.0l}{1998/09/01}{macro added}
+\changes{4.1a}{2008-06-30}{(AO, 443) create an entry in the PDF bookmarks for the abstract via the toc}
+\changes{4.1a}{2008-07-01}{(AO, 496) remove default prependation to \cs{email}.}
+\changes{4.1a}{2008-07-01}{(AO, 496) remove default prependation to \cs{homepage}.}
+\changes{4.1a}{2008/06/16}{removed code that had been commented out}
+\changes{4.1b}{2008/06/29}{(AO, 455) provide a \texttt{description} environment for the abstract}
+\changes{4.1b}{2008/08/02}{(AO, 486) \cs{collaboration} to work with \texttt{groupedaddress}}
+\changes{4.1b}{2008/08/02}{Change csname \cs{AFS@opr} to \cs{AFG@opr}}
+\changes{4.1b}{2008/08/02}{Make the syntax of this package switch optional}%
+\changes{4.1b}{2008/08/02}{Provide for diagnostics via \cs{frontmatterverbose@sw}}
+\changes{4.1b}{2008/08/02}{Use \cs{@affil@def} for all access to \cs{@affil}}
+\changes{4.1b}{2008/08/02}{Use \cs{frontmatter@init} as the vehicle for all initialization}
+\changes{4.1b}{2008/08/04}{(AO, 443) PDF Bookmark for title page}%
+\changes{4.1b}{2008/08/04}{Provide facility \cs{affil@cutoff}: if there is only one affiliation on the title page, no superscript}%
+\changes{4.1c}{2008/08/04}{Hyperref compatibility: take \cs{maketitle} back.}
+\changes{4.1c}{2008/08/04}{Parametrize the production after the address}%
+\changes{4.1c}{2008/08/04}{Produce PACS, keywords only if specified}%
+\changes{4.1d}{2008/10/17}{(AO, 410) compare \cs{@tempa} to \cs{blankaffiliation}.}%
+\changes{4.1f}{2009/07/07}{(AO, 515) Use \cs{set@footnotefont}, which is defined in ltxutil}
+\changes{4.1g}{2009/10/05}{(AO, 535) Robustify \cs{footnote} while \cs{class@warn} is expanding its argument}
+\changes{4.1g}{2009/10/05}{(AO, 539) Robustify \cs{class@warn} against TOC processing}%
+\changes{4.1i}{2009/10/18}{(AO, 540) More runtime diagnostics via \cs{frontmatterverbose@sw}}
+\changes{4.1i}{2009/10/23}{(AO, 540) Rationalize code that appends to \cs{AF@grp}}
+\changes{4.1i}{2009/10/23}{(AO, 540) Optimize boolean logic }
+\changes{4.1i}{2009/10/23}{(AO, 544) Class options runinaddress and unsortedaddress stopped working}
+\changes{4.1m}{2009/11/20}{(AO, 563) \cs{collaboration} to work with both \texttt{groupedaddress} and \texttt{superscriptaddress}}
+\changes{4.1m}{2009/11/20}{(AO, 563) More complete runtime diagnostics via \cs{frontmatterverbose@sw}}
+\changes{4.1m}{2009/11/20}{(AO, 563) Let \cs{@collaboration@gobble} parse all three arguments of \cs{CO@opr}}
+\changes{4.1n}{2009/11/30}{(AO, 567) Handle \cs{noaffiliation} case}
+\changes{4.1n}{2009/11/30}{(AO, 567) Handle punctuation for \classoption{superscriptaddress} style authors' extra information, such as \cs{email}}
+\changes{4.1n}{2009/12/03}{(AO) remove http:// from \cs{href} call}
+\changes{4.1n}{2010/01/02}{(AO, 571) Interface \cs{set@footnotewidth} for determining the set width of footnotes}%
+\changes{4.1n}{2010/01/02}{(AO, 571) allow split after last line of footnote}%
+\changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}%
+\changes{4.2a}{2018/12/12}{(MD) Updated name of README file and use standard fonts when typesetting}%
+
+\end{filecontents*}
+% \end{macrocode}
+%
+% \subsection{A Gnuly Created Sample Document}
+%
+% \begin{macrocode}
+\begin{filecontents*}{ltxfront-test.tex}
+\documentclass{article}% use any combination of titlepage, twocolumn
+\usepackage[]{ltxfront}% use inactive to turn off features
+\begin{document}
+
+\title{Gnu Veldt Cuisine}
+
+\author{G. Picking}
+\thanks{Supported by a grant from the GSF.}
+\affiliation{Acme Kitchen Products}
+
+\author{R. Dillo}
+\thanks{On leave during 1985.}
+\affiliation{Cordon Puce School}
+
+\date{24 July 1984}%
+\revised{5 January 1985}%
+
+\maketitle
+
+\section{Introduction}%
+We reproduce most features of \LaTeX\ manual, Figure C.4, p. 183.
+\end{document}
+\end{filecontents*}
+% \end{macrocode}
+%
+% \subsection{The Document Body}
+%
+% Here is the document body, containing only a
+% \cmd\DocInput\ directive---referring to this very file.
+% This very cute self-reference is a common \classname{ltxdoc} idiom.
+% \begin{macrocode}
+\begin{document}%
+\expandafter\DocInput\expandafter{\jobname.dtx}%
+% ^^A\PrintChanges
+\end{document}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</doc>
+% \end{macrocode}
+%
+% \section{Using this package}
+% Once this package is installed on your filesystem, you can employ it in
+% adding functionality to \LaTeX\ by invoking it in your document or document class.
+%
+% \subsection{Invoking the package}
+% In your document, you can simply call it up in your preamble:
+% \begin{verbatim}
+%\documentclass{book}%
+%\usepackage{ltxfront}%
+%\begin{document}
+%<your document here>
+%\end{document}\end{verbatim}
+% However, the preferred way is to invoke this package from within your
+% customized document class:
+% \begin{verbatim}
+%\NeedsTeXFormat{LaTeX2e}[1995/12/01]%
+%\ProvidesClass{myclass}%
+%\RequirePackage{ltxfront}%
+%\LoadClass{book}%
+%<class customization commands>
+%\endinput\end{verbatim}
+%
+% Once loaded, the package gives you acccess to certain procedures,
+% usually to be invoked by a \LaTeX\ command or environment.
+%
+% \section{Frontmatter commands}
+%
+% A document using this package will use commands like \cmd\title, \cmd\author, \cmd\thanks,
+% the \texttt{abstract} environment
+% and \cmd\maketitle.
+% These are part of \LaTeX's standard document classes.
+% But this package supplements \LaTeX\ syntax with additional commands, such as
+% \cmd\affiliation, \cmd\collaboration, \cmd\email, \cmd\homepage, and others.
+%
+% Furthermore, you can have multiple \cmd\author, \cmd\affiliation, and \cmd\collaboration\ commands,
+% each with their own set of \cmd\email, \cmd\homepage, etc. commands.
+%
+% \section{The Front Matter}\label{sec:front}
+%
+% This section describes the macros
+% this package provides for formatting the front matter of an
+% article. The behavior and usage of these macros can be quite
+% different from those provided in \LaTeXe.
+%
+% \subsection{Setting the title}
+%
+% The title of the manuscript is simply specified by using the
+% \cmd\title\arg{title} macro. A \verb+\\+ may be used to put a line
+% break in a long title.
+% The \cmd\title\ commnd takes an optional argument, which you will use to
+% give an abbreviated title for use in the running header.
+%
+% \subsection{Specifying a date}%
+%
+% The \cmd\date\marg{date} command outputs the date on the manuscript.
+% Using \cmd\today\ will cause \LaTeX{} to insert the
+% current date whenever the file is run:
+% \begin{verbatim}\date{\today}\end{verbatim}
+%
+% \subsection{Specifying authors and affiliations}
+%
+% Commands specifying author and affilliation have been improved to save
+% labor for authors and in production. Authors and affiliations are
+% arranged into groupings called, appropriately enough, \emph{author
+% groups}. Each author group is a set of authors who share the same set
+% of affiliations. Author names are specified with the \cmd\author\
+% macro while affiliations (or addresses) are specified with the
+% \cmd\affiliation\ macro. Author groups are specified by sequences of
+% \cmd\author\ macros followed by \cmd\affiliation\ macros. An
+% \cmd\affiliation\ macro applies to all previously specified
+% \cmd\author\ macros which don't already have an affiliation supplied.
+%
+% For example, if Bugs Bunny and Roger Rabbit are both at Looney Tune
+% Studios, while Mickey Mouse is at Disney World, the markup would be:
+% \begin{verbatim}
+% \author{Bugs Bunny}
+% \author{Roger Rabbit}
+% \affiliation{Looney Tune Studios}
+% \author{Mickey Mouse}
+% \affiliation{Disney World}\end{verbatim}
+% The default is to display this as
+% \begin{center}
+% Bugs Bunny and Roger Rabbit\\
+% \emph{Looney Tune Studios}\\
+% Mickey Mouse\\
+% \emph{Disney World}\\
+% \end{center}
+% This layout style for displaying authors and their affiliations is
+% chosen by selecting the class option
+% \classoption{groupedaddress}. This option is the default for all APS
+% journal styles, so it does not need to be specified explicitly.
+% The other major way of displaying this
+% information is to use superscripts on the authors and
+% affiliations. This can be accomplished by selecting the class option
+% \classoption{superscriptaddress}. To achieve the display
+% \begin{center}
+% Bugs Bunny,$^{1}$ Roger Rabbit,$^{1,2}$ and Mickey Mouse$^{2}$\\
+% \emph{$^{1}$Looney Tune Studios}\\
+% \emph{$^{2}$Disney World}\\
+% \end{center}
+% one would use the markup
+% \begin{verbatim}
+% \author{Bugs Bunny}
+% \affiliation{Looney Tune Studios}
+% \author{Roger Rabbit}
+% \affiliation{Looney Tune Studios}
+% \affiliation{Disney World}
+% \author{Mickey Mouse}
+% \affiliation{Disney World}\end{verbatim}
+%
+% Note that this package takes care of any commas and \emph{and}'s that join
+% the author names together and font selection, as well as any
+% superscript numbering. Only the author names and affiliations should
+% be given within their respective macros.
+%
+% There is a third class option, \classoption{unsortedaddress}, for
+% controlling author/affiliation display. The default
+% \classoption{groupedaddress} will actually sort authors into the
+% approriate author groups if one chooses to specify an affiliation for
+% each author. The markup:
+% \begin{verbatim}
+% \author{Bugs Bunny}
+% \affiliation{Looney Tune Studios}
+% \author{Mickey Mouse}
+% \affiliation{Disney World}
+% \author{Roger Rabbit}
+% \affiliation{Looney Tune Studios}\end{verbatim}
+% will result in the same display as for the first case given
+% above even though Roger Rabbit is specified after Mickey Mouse. To
+% avoid Roger Rabbit being moved into the same author group as Bugs
+% Bunny, use the
+% \classoption{unsortedaddress} option instead. In general, it is safest
+% to list authors in the order they should appear and specify
+% affiliations for multiple authors rather than one at a time. This will
+% afford the most independence for choosing the display option. Finally,
+% it should be mentioned that the affiliations for the
+% \classoption{superscriptaddress} are presented and numbered
+% in the order that they are encountered. This means that the order
+% will usually follow the order of the authors. An alternative ordering
+% can be forced by including a list of \cmd\affiliation\ commands before
+% the first \cmd{\author} in the desired order. Then use the exact same
+% text for each affilation when specifying them for each author.
+%
+% If an author doesn't have an affiliation, the \cmd\noaffiliation\
+% macro may be used in the place of an \cmd\affiliation\ macro.
+%
+%
+% \subsubsection{Collaborations}
+%
+% A collaboration name can be specified with the \cmd\collaboration\
+% command. This is very similar to the \cmd\author\ command.
+% It should appear at the end of an author group.
+% The collaboration name will appear centered in parentheses.
+% You may have multiple author groups, each with its own \cmd\collaboration.
+% Because collaborations don't normally have affiliations, one needs to follow the
+% \cmd\collaboration\ with \cmd\noaffiliation.
+%
+% \subsubsection{Footnotes for authors, collaborations, affiliations or title}\label{sec:footau}
+%
+% Often one wants to specify additional information associated with an
+% author, collaboration, or affiliation such an e-mail address, an
+% alternate affiliation, or some other ancillary information.
+% This package introduces several new macros just for this purpose. They
+% are:
+% \begin{itemize}
+% \item\cmd\email\oarg{optional text}\arg{e-mail address}
+% \item\cmd\homepage\oarg{optional text}\arg{URL}
+% \item\cmd\altaffiliation\oarg{optional text}\arg{affiliation}
+% \item\cmd\thanks\arg{miscellaneous text}
+% \end{itemize}
+% In the first three, the \emph{optional text} will be prepended before the
+% actual information specified in the required argument. \cmd\email\ and
+% \cmd\homepage\ each have a default text for their optional arguments
+% (`Electronic address:' and `URL:' respectively). The \cmd\thanks\
+% macro should only be used if one of the other three do not apply. Any
+% author name can have multiple instances of these four commands.
+% Note that unlike the
+% \cmd\affiliation\ macro, these macros only apply to the \cmd\author\
+% that directly precedes it. Any \cmd\affiliation\ \emph{must} follow
+% the other author-specific macros. A typical usage might be as follows:
+% \begin{verbatim}
+% \author{Bugs Bunny}
+% \email[E-mail me at: ]{bugs@looney.com}
+% \homepage[Visit: ]{http://looney.com/}
+% \altaffiliation[Permanent address: ]
+% {Warner Brothers}
+% \affiliation{Looney Tunes}\end{verbatim}
+% This would result in the footnote ``E-mail me at: \texttt{bugs@looney.com},
+% Visit: \texttt{http://looney.com/}, Permanent address: Warner
+% Brothers'' being attached to Bugs Bunny. Note that:
+% \begin{itemize}
+% \item Only an e-mail address, URL, or affiliation should go in the
+% required argument in the curly braces.
+% \item The font is automatically taken care of.
+% \item An explicit space is needed at the end of the optional text if one is
+% desired in the output.
+% \item Use the optional arguments to provide customized
+% text only if there is a good reason to.
+% \end{itemize}
+%
+% The \cmd\collaboration\ , \cmd\affiliation, or even \cmd\title\ can
+% also have footnotes attached via these commands. If any ancillary data
+% (\cmd\thanks, \cmd\email, \cmd\homepage, or
+% \cmd\altaffiliation) are given in the wrong context (e.g., before any
+% \cmd\title, \cmd\author, \cmd\collaboration, or \cmd\affiliation\
+% command has been given), then a warning is given in the \TeX\ log, and
+% the command is ignored.
+%
+% Duplicate sets of ancillary data are merged, giving rise to a single
+% shared footnote. However, this only applies if the ancillary data are
+% identical: even the order of the commands specifying the data must be
+% identical. Thus, for example, two authors can share a single footnote
+% indicating a group e-mail address.
+%
+% Duplicate \cmd\affiliation\ commands may be given in the course of the
+% front matter, without the danger of producing extraneous affiliations
+% on the title page. However, ancillary data should be specified for
+% only the first instance of any particular institution's
+% \cmd\affiliation\ command; a later instance with different ancillary
+% data will result in a warning in the \TeX\ log.
+%
+% It is preferable to arrange authors into
+% sets. Within each set all the authors share the same group of
+% affiliations. For each author, give the \cmd\author\ (and appropriate
+% ancillary data), then follow this author group with the needed group
+% of \cmd\affiliation\ commands.
+%
+% If affiliations have been listed before the first
+% \cmd\author\ macro to ensure a particular ordering, be sure
+% that any later \cmd\affiliation\ command for the given institution is
+% an exact copy of the first, and also ensure that no ancillary data is
+% given in these later instances.
+%
+%
+% A journal may determine the placement of these
+% ancillary information footnotes. One journal may put all
+% such footnotes at the start of the bibliography while another
+% journal may display them on the first page, as a footnote. One can override a
+% journal style's default behavior by specifying explicitly the class
+% option
+% \classoption{bibnotes} (puts the footnotes at the start of the
+% bibliography) or \classoption{nobibnotes} (puts them on the first page).
+%
+% \subsubsection{Specifying first names and surnames}
+%
+% Many authors have names in which either the surname appears first
+% or in which the surname is made up of more than one name. To ensure
+% that such names are accurately captured for indexing and other
+% purposes, the \cmd\surname\ macro should be used to indicate which portion
+% of a name is the surname. Similarly, there is a \cmd\firstname\ macro
+% as well, although usage of \cmd\surname\ should be sufficient. If an
+% author's surname is a single name and written last, it is not
+% necessary to use these macros. These macros do nothing but indicate
+% how a name should be indexed. Here are some examples;
+% \begin{verbatim}
+% \author{Andrew \surname{Lloyd Weber}}
+% \author{\surname{Mao} Tse-Tung}\end{verbatim}
+%
+% \subsection{The abstract}
+% An abstract for a paper is specified by using the \env{abstract}
+% environment:
+% \begin{verbatim}
+% \begin{abstract}
+% Text of abstract
+% \end{abstract}\end{verbatim}
+% Note that with this package, the abstract must be specified before the
+% \cmd\maketitle\ command, and there is no need to embed it in an explicit
+% minipage environment.
+%
+% \subsection{PACS codes}
+% Some authors are asked to supply suggested PACS codes with their
+% submissions. The \cmd\pacs\ macro is provided as a way to do this:
+% \begin{verbatim}\pacs{23.23.+x, 56.65.Dy}\end{verbatim}
+% The actual display of the PACS numbers below the abstract is
+% controlled by two class options: \classoption{showpacs} and
+% \classoption{noshowpacs}. In particular, this is now independent of
+% the \classoption{preprint} option. \classoption{showpacs} must be
+% explicitly included in the class options to display the PACS codes.
+%
+% \subsection{Keywords}
+% A \cmd\keywords\ macro may also be used to indicate keywords for the
+% article.
+% \begin{verbatim}\keywords{nuclear form; yrast level}\end{verbatim}
+% This will be displayed below the abstract and PACS (if supplied). Like
+% PACS codes, the actual display of the the keywords is controlled by
+% two classoptions: \classoption{showkeys} and
+% \classoption{noshowkeys}. An explicit \classoption{showkeys} must be
+% included in the \cmd\documentclass\ line to display the keywords.
+%
+% \subsection{Institutional report numbers}
+% Institutional report numbers can be specified using the \cmd\preprint\
+% macro. These will be displayed in the upper lefthand corner of the
+% first page. Multiple \cmd\preprint\ macros may be supplied (space is
+% limited though, so only three or less may actually fit).
+%
+% \subsection{maketitle}
+% After specifying the title, authors, affiliations, abstract, PACS
+% codes, and report numbers, the final step for formatting the front
+% matter of the manuscript is to issue the \cmd\maketitle\ command:
+% \begin{verbatim}\maketitle\end{verbatim}
+% This command must follow all of the macros listed above.
+% The macro will format the front matter in accordance with the various
+% class options that were specified in the
+% \cmd\documentclass\ line (either implicitly through defaults or
+% explicitly).
+%
+%
+% \section{Compatability with \LaTeX's Required Packages}
+% Certain packages, usually ones written by members of the
+% \LaTeX\ Project itself, have been designated ``required'' and
+% are distributed as part of standard \LaTeX.
+% These packages have been placed in a priviledged position
+% vis \'a vis the \LaTeX\ kernel in that they override the definitions of certain kernel macros.
+%
+% The \classname{ltxfront} package will be incompatible with any package that
+% redefines any of the kernel macros that \classname{ltxfront} patches---if that
+% package is loaded \emph{after} \classname{ltxfront}.
+%
+% Hereinafter follows some notes on specific \LaTeX\ packages.
+%
+%\StopEventually{}
+%
+% \section{Implementation of package}
+%
+% \subsection{Beginning of the \file{package} {\sc docstrip} module}
+% \begin{macrocode}
+%<*package>
+\def\package@name{ltxfront}%
+\expandafter\PackageInfo\expandafter{\package@name}{%
+ Title page macros for \protect\LaTeXe,
+ by A. Ogawa (arthur_ogawa at sbcglobal.net)%
+}%
+% \end{macrocode}
+%
+% \subsection{Prerequisites}%
+%
+% This package requires the use of the \classname{ltxutil} package.
+% \begin{macrocode}
+\let\class@name\package@name
+\RequirePackage{ltxutil}%
+%</package>
+% \end{macrocode}
+% End of the preliminary portion of the package code.
+% \begin{macrocode}
+% \end{macrocode}
+%
+% \subsection{Options}%
+% Package options are treated in this portion of the dtx file.
+% This portion is guarded by the \texttt{options} \classname{docstrip} code so that it can be
+% merged into a larger package gracefully.
+% \begin{macrocode}
+%<*options>
+% \end{macrocode}
+%
+% Package option turns on diagnostics that trace its operation.
+% \cmd\frontmatterverbose@sw\ is set false by default: we do not elect to monitor
+% the workings of these procedures.
+% \begin{macrocode}
+\DeclareOption{frontmatterverbose}{\@booleantrue\frontmatterverbose@sw}%
+\@booleanfalse\frontmatterverbose@sw
+% \end{macrocode}
+%
+% Package option inactivates its syntax, for testing purposes.
+% \begin{macrocode}
+\DeclareOption{inactive}{\@booleanfalse\frontmatter@syntax@sw}%
+\@booleantrue\frontmatter@syntax@sw
+% \end{macrocode}
+%
+% \begin{macro}{\runinaddress@sw}
+% The flag \cmd\runinaddress@sw\ signifies that author addresses are to be set on the same
+% line with the author.
+%
+% The \classoption{runinaddress} option is the only one that sets \cmd\runinaddress@sw\ to true.
+%
+% FIXME: this option pertains to cases where \cmd\groupauthors@sw\ is true, but is independant of \cmd\@affils@sw.
+% So, it should be possible to assert both \classoption{runinaddress} and \classoption{unsortedaddress} as well as
+% each separately.
+% \begin{macrocode}
+\@booleanfalse\runinaddress@sw
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@affils@sw}
+% If \cmd\@affils@sw\ is false, an address is never recognised as ``new''
+% and is therefore always entered into the affiliation list,
+% stopping groups of authors at the same address being consolidated
+% into the same list:
+% the address will be printed the same number of times it is entered.
+%
+% The \classoption{unsortedaddress} option is the only one that sets \cmd\@affils@sw\ to false.
+% \begin{macrocode}
+\@booleantrue\@affils@sw
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\groupauthors@sw}
+% The flag \cmd\groupauthors@sw\ signifies that authors are to be grouped,
+% affecting the meaning of \cmd\@author@present.
+%
+% Clients will want to set \cmd\groupauthors@sw\ true if they want grouped addresses
+% or either of the following variants:
+% for unsorted addresses: set \cmd\@affils@sw\ false;
+% for run-in addresses, set \cmd\runinaddress@sw\ true.
+% \begin{macrocode}
+\@booleanfalse\groupauthors@sw
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{groupedaddress}
+% If we take the \classoption{groupedaddress} option as the default, then we can look upon
+% the \classoption{superscriptaddress} option as simply turning \cmd\groupauthors@sw\ to \cmd\false@sw.
+%
+% \classoption{groupedaddress}, the default in APS journals, groups authors above a common address.
+% \begin{macrocode}
+\DeclareOption{groupedaddress}{\clo@groupedaddress}%
+\def\clo@groupedaddress{%
+ \@booleantrue\groupauthors@sw
+ \@booleantrue\@affils@sw
+ \@booleanfalse\runinaddress@sw
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{unsortedaddress}
+% \classoption{unsortedaddress} is similar to \classoption{groupedaddress},
+% but turns off \cmd\@affils@sw,
+% with the result that each address that is entered will be printed.
+% \begin{macrocode}
+\DeclareOption{unsortedaddress}{\clo@unsortedaddress}%
+\def\clo@unsortedaddress{%
+ \@booleantrue\groupauthors@sw
+ \@booleanfalse\@affils@sw
+ \@booleanfalse\runinaddress@sw
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{runinaddress}
+%
+% \classoption{runinaddress} is similar to \classoption{groupedaddress},
+% with the addition of the Boolean \cmd\runinaddress@sw,
+% which causes the authors associated with a particular address group
+% to be formatted in a paragraph instead of on separate lines.
+% \begin{macrocode}
+\DeclareOption{runinaddress}{\clo@runinaddress}%
+\def\clo@runinaddress{%
+ \@booleantrue\groupauthors@sw
+ \@booleantrue\@affils@sw
+ \@booleantrue\runinaddress@sw
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{superscriptaddress}
+% \classoption{superscriptaddress} presents author affiliations
+% as superscripts. Authors with like affiliations share the same
+% superscript.
+%
+% FIXME: if \cmd\groupauthors@sw\ is false, would not \cmd\@affils@sw\ be a don't care?
+% \begin{macrocode}
+\DeclareOption{superscriptaddress}{\clo@superscriptaddress}%
+\def\clo@superscriptaddress{%
+ \@booleanfalse\groupauthors@sw
+ \@booleantrue\@affils@sw
+ \@booleanfalse\runinaddress@sw
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</options>
+% \end{macrocode}
+%
+% \subsection{Process package options}%
+% \begin{macrocode}
+%<*package>
+\DeclareOption*{\OptionNotUsed}%
+\ProcessOptions*
+%</package>
+% \end{macrocode}
+%
+% \section{Kernel of Front Matter}
+% Here begins the kernel of the \classname{frontmatter} package.
+% \begin{macrocode}
+%<*kernel>
+% \end{macrocode}
+%
+% This package implements a new syntax for the title page of an article.
+%
+% Special acknowledgment: this package uses concepts pioneered
+% and first realized by William Baxter (mailto:web at superscript.com)
+% in his SuperScript line of commercial typesetting tools, and
+% which are used here with his permission.
+%
+% These macros were first coded by David P. Carlisle for the American Physical
+% society in the late 1990s as part of the development of REV\TeX4.
+% That development work was taken over by Arthur Ogawa, who is the author of
+% this package.
+%
+% \subsection{Initialization}%
+%
+% \begin{macro}{\frontmatter@init}
+% The \cmd\frontmatter@init\ procedure sets up all the registers for
+% processing the title page.
+% At present, this is done once, at \cmd\class@documenthook\ time.
+% If multiple title pages are to be processed within a job,
+% the initialization must be done for each.
+% \begin{macrocode}
+\appdef\class@documenthook{\frontmatter@init}%
+\let\frontmatter@init\@empty
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{The title command}%
+%
+% \begin{macro}{\title}
+% \begin{macro}{\do@title}
+% The author uses \cmd\title\ to specify the title. As in the AMS
+% classes, \cmd\title\ has an optional argument specifying a short form
+% for use in running heads.
+%
+% Once the \cmd\title\ is given, you can specify any combination of
+% \cmd\thanks, \cmd\email, \cmd\homepage, and \cmd\altaffiliation\ commands,
+% applying to the title of the document.
+%
+% Compatibility note: as with all of the standard \LaTeX\ commands that we override,
+% we make here a private definition and later switch it in if so required.
+% \changes{4.1b}{2008/08/02}{Make the syntax of this package switch optional}%
+% \begin{macrocode}
+\newcommand\frontmatter@title[2][]{%
+ \def\@title{#2}%
+ \def\@shorttitle{#1}%
+ \let\@AF@join\@title@join
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@title}
+% \begin{macro}{\@shorttitle}
+% The arguments to \cmd\title\ are saved in these internal
+% macros, which are set up to produce a warning if \cmd\title\ has not
+% been used before \cmd\maketitle.
+% \changes{4.1b}{2008/08/02}{Use \cs{frontmatter@init} as the vehicle for all initialization}
+%
+% Extensibility note: by using \cmd\frontmatter@init\ as the initialization procedure,
+% we open the possibility of more than one title page per document.
+% \begin{macrocode}
+\appdef\frontmatter@init{%
+ \def\@title{\class@warn{No title}}%
+ \let\@shorttitle\@empty
+ \let\@title@aux\@title@aux@cleared
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@title@join}
+% \begin{macro}{\@title@join@}
+% \begin{macro}{\@title@aux@cleared}
+%
+% \begin{macrocode}
+\def\@title@join{\expandafter\@title@join@\@title@aux}%
+\def\@title@join@#1#2{%
+ \def\@title@aux{{\@join{\@separator}{#1}{#2}}}%
+}%
+\def\@title@aux@cleared{{}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{The author, affiliation, and related commands}%
+%
+% \begin{macro}{\c@affil}
+% \begin{macro}{\c@collab}
+% \changes{4.1b}{2008/08/02}{(AO, 486) \cs{collaboration} to work with \texttt{groupedaddress}}
+%
+% \cmd\c@affil\ stores the affiliation numbers used for the superscript marks.
+% The \cmd\newcounter\ command defines \cmd\theaffil, which we never use:
+% this counter is evaluated solely via \cmd\the.
+%
+% \cmd\c@collab\ stores the collaboration numbers.
+% The \cmd\newcounter\ command defines \cmd\thecollab.
+% As with \cmd\c@affil, we never use \cmd\thecollab; only \cmd\the\ \cmd\c@collab.
+%
+% Each counter must be cleared before frontmatter can be processed.
+% \begin{macrocode}
+\newcounter{affil}%
+\newcounter{collab}%
+\appdef\frontmatter@init{%
+ \c@affil\z@
+ \c@collab\z@
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Commands for author or collaboration}%
+%
+% \begin{macro}{\author}
+% Each author is given in a \emph{separate} \cmd\author\ command.
+% This is similar to the AMS classes, but the AMS also try to support
+% the \classname{article} class's \cmd\and\ command for putting multiple
+% authors in one \cmd\author\ command.
+% This package, however, does not support the \cmd\and\ command.
+%
+% When the \cmd\author\ command is encountered,
+% the previous author, author group, affiliation, and affiliation group are at an end.
+% This procedure moves the previous author to the author group (\cmd\move@AU),
+% moves the previous affiliation to the affiliation group (\cmd\move@AF),
+% and terminates the previous author/affiliation group (\cmd\move@AUAF) as the case may require.
+%
+% Compatibility note: as with all of the standard \LaTeX\ commands that we override,
+% we make here a private definition and later switch it in if so required.
+% \changes{4.1b}{2008/08/02}{Make the syntax of this package switch optional}%
+% \begin{macrocode}
+\newcommand\frontmatter@author{% implicit #1
+ \@author@def{}% implicit #2
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\collaboration}
+% Specify the collaboration (given after a group of authors).
+%
+% This procedure does exactly what \cmd\author\ does, and sets
+% a flag signifying that the \cmd\collaboration\ command was given.
+%
+% Note: earlier versions attempted to ignore the collaboration command if it was considered inappropriate.
+% We must not do this, however, because it throws the state machine out of kilter.
+% \changes{4.1b}{2008/08/02}{(AO, 486) \cs{collaboration} to work with \texttt{groupedaddress}}
+% \begin{macrocode}
+\def\collaboration{% implicit #1
+ \@author@def{\@booleantrue\collaboration@sw}% implicit #2
+}%
+\appdef\frontmatter@init{%
+ \@booleanfalse\collaboration@sw
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@author@init}
+% \begin{macro}{\@author@cleared}
+% \begin{macro}{\@authorclear@sw}
+% \begin{macro}{\@author@def}
+% \begin{macro}{\@author@join@}
+% \begin{macro}{\@author@join}
+% \changes{4.0b}{1999/06/20}{Change handling of \cs{@author} to prevent parsing problems. (Helps in error recovery when syntax errors exist)}
+% \changes{4.1b}{2008/08/02}{(AO, 486) \cs{collaboration} to work with \texttt{groupedaddress}}
+% \changes{4.1b}{2008/08/02}{Use \cs{frontmatter@init} as the vehicle for all initialization}
+%
+% Here are all the access procedures for the author data structure.
+%
+% We define a flag value for \cmd\@author (private),
+% a procedure \cmd\@author@gobble\ to read author data without any effect,
+% a procedure for setting \cmd\@author\ to the flag value (\cmd\@author@init),
+% a Boolean to test against the flag value (\cmd\@authorclear@sw),
+% and a procedure to add new ancillary data to the author.
+%
+% Note that expanding the functionality of the \cmd\collaboration\ command entailed changing
+% the data structures, because now all authors must remember the collaboration they belong to.
+% This change affects procedures \cmd\@author@cleared\ and \cmd\@author@gobble.
+% \begin{macrocode}
+\def\@author@cleared{{}{}{}}%
+\def\@author@gobble#1#2#3{}%
+\def\@author@init{%
+ \let\@author\@author@cleared
+ \@booleanfalse\collaboration@sw
+}%
+\def\@authorclear@sw{\@ifx{\@author\@author@cleared}}%
+\appdef\frontmatter@init{%
+ \@author@init
+}%
+% \end{macrocode}
+% \changes{4.1i}{2009/10/18}{(AO, 540) More runtime diagnostics via \cs{frontmatterverbose@sw}}
+% \begin{macrocode}
+\def\@author@def#1#2{%
+ \frontmatterverbose@sw{\typeout{\string\author\space\string\collaboration}}{}%
+ \move@AU\move@AF\move@AUAF
+ \let\@AF@join\@author@join
+ #1%
+ \def\@author{{#2}{}}%
+}%
+\def\@author@join@#1#2#3{%
+ \def\@author{{#1}{\@join{\@separator}{#2}{#3}}}%
+}%
+\def\@author@join{\expandafter\@author@join@\@author}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\move@AU}
+% \begin{macro}{\add@AUCO@grp}
+% \changes{4.1b}{2008/08/02}{(AO, 486) \cs{collaboration} to work with \texttt{groupedaddress}}
+% The \cmd\move@AU\ procedure moves the most recent author to the current author group \cmd\AU@grp,
+% or the most recent collaboration to the collaboration group \cmd\CO@grp.
+% If we recently did a \cmd\@author@init, this is a no-op.
+%
+% To accommodate the expanded syntax of \cmd\collaboration, we add a new field to
+% those associated with an author (collaborator), namely the value of the
+% collaboration counter.
+% \begin{macrocode}
+\def\move@AU{%
+ \@authorclear@sw{}{%
+ \collaboration@sw{%
+ \advance\c@collab\@ne
+ \@argswap{\CO@grp\CO@opr}%
+ }{%
+ \@argswap{\AU@grp\AU@opr}%
+ }%
+ {%
+ \expandafter\@argswap@val
+ \expandafter{\@author}%
+ {\expandafter\@argswap@val\expandafter{\the\c@collab}{\add@AUCO@grp}}%
+ }%
+ }%
+ \@author@init
+}%
+% \end{macrocode}
+% \changes{4.1b}{2008/08/02}{Provide for diagnostics via \cs{frontmatterverbose@sw}}
+% The procedure \cmd\add@AUCO@grp\ adds to the specified group \#3 using the
+% given intercollated operator \#4, with arguments \{\#1\} and \#2,
+% where the first argument is the collaboration number,
+% the second is the author name, and the third the joined attributes of the author.
+% For example, \cmd\move@AU\ could finally execute:
+% \cmd\appdef\ \cmd\AU@grp\ \{\cmd\AU@opr\{1\}\{A. Author\}\{\}\}.
+% \begin{macrocode}
+\def\add@AUCO@grp#1#2#3#4{%
+ \appdef#3{#4{#1}#2}%
+ \frontmatterverbose@sw{\say#3}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@author@finish}
+% We define a procedure to terminate author/affiliation parsing just before the title block is formatted.
+% We detect the case where an author group is not followed by an affiliation group.
+% \changes{4.0f}{2001/02/13}{Actually append \cs{AU@grp} to \cs{@AAClist}.}
+% \changes{4.1b}{2008/08/02}{(AO, 486) \cs{collaboration} to work with \texttt{groupedaddress}}
+% \changes{4.1b}{2008/08/02}{Use \cs{@affil@def} for all access to \cs{@affil}}
+% \changes{4.1b}{2008/08/02}{Provide for diagnostics via \cs{frontmatterverbose@sw}}
+% \changes{4.1g}{2009/10/05}{(AO, 535) Robustify \cs{footnote} while \cs{class@warn} is expanding its argument}
+% \changes{4.1i}{2009/10/18}{(AO, 540) More runtime diagnostics via \cs{frontmatterverbose@sw}}
+% \changes{4.1m}{2009/11/20}{(AO, 563) \cs{collaboration} to work with both \texttt{groupedaddress} and \texttt{superscriptaddress}}
+% \changes{4.1n}{2009/11/30}{(AO, 567) Handle \cs{noaffiliation} case}
+%
+% We first finish off any author- or affiliation groups in progress.
+% Next, we detect the case where there is an author group or a collaboration group in progress, but no affiliation group.
+% If so, we emit a diagnositic message and act as if a \cmd\noaffiliation\ command had been given.
+% In any case, we finish off any author/affiliation pair that may remain.
+% Formatting of the title block may now proceed.
+% \begin{macrocode}
+\def\@author@finish{%
+ \frontmatterverbose@sw{\typeout{\string\@author@finish}}{}%
+ \move@AU\move@AF
+ \@ifx{\AU@grp\@empty}{%
+ \@ifx{\CO@grp\@empty}%
+ }{%
+ \false@sw
+ }%
+ {}{%
+ \@ifx{\AF@grp\@empty}{%
+ \begingroup
+ \let\href\@secondoftwo
+ \let\AU@opr\@secondofthree
+ \let\CO@opr\@secondofthree
+ \let\footnote\@gobble
+ \@ifx{\CO@grp\@empty}{%
+ \class@warn{Assuming \string\noaffiliation\space for authors}%
+ \frontmatterverbose@sw{\say\AU@grp}%
+ }{%
+ \class@warn{Assuming \string\noaffiliation\space for collaboration}%
+ \frontmatterverbose@sw{\say\CO@grp}{}%
+ }%
+ \endgroup
+ \@affil@none\move@AF
+ }{}%
+ }%
+ \move@AUAF
+}%
+\def\@secondofthree#1#2#3{#2}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@join}
+% The procedure \cmd\@join\ inserts
+% a separator between two tokens, or, if the first token is
+% nil, elides both that token and the separator.
+% \begin{macrocode}
+\def\@join#1#2#3{%
+ \@if@empty{#2}{#3}{#2#1#3}%
+}%
+\def\@separator{;\space}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\surname}
+% \begin{macro}{\firstname}
+% No-op to allow better post-processing of the file.
+% \begin{macrocode}
+\let\surname\@firstofone
+\let\firstname\@firstofone
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\and}
+% The original \LaTeX\ idea of using one \cmd\author\ command to capture
+% all authors and their address just doesn't work with multiple authors
+% possibly sharing addresses, so in this class disable \cmd\and.
+% \begin{macrocode}
+\newcommand\frontmatter@and{\class@err{\protect\and\space is not supported}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Commands for affiliation}%
+%
+% \begin{macro}{\affiliation}
+% \changes{4.1b}{2008/08/02}{Use \cs{@affil@def} for all access to \cs{@affil}}
+% After each group of authors with the same address,
+% give that address in \cmd\affiliation.
+% If later in the list you have an author
+% with the address of an earlier author, repeat the \cmd\affiliation\
+% command: the system will detect the equivalence and (if using the \classoption{superscriptaddress} option)
+% only print the affiliation once, reusing the superscript marker.
+%
+% When the \cmd\affiliation\ command is encountered, the current author and author group (if any) are at an end.
+% Also, the current affiliation is at an end.
+%
+% \changes{4.1i}{2009/10/18}{(AO, 540) More runtime diagnostics via \cs{frontmatterverbose@sw}}
+% FIXME: changes to catcode required elsewhere now?
+% \begin{macrocode}
+\def\cat@comma@active{\catcode`\,\active}%
+{\cat@comma@active\gdef,{\active@comma}}%
+\def\active@comma{,\penalty-300\relax}%
+\newcommand\affiliation{%
+ \frontmatterverbose@sw{\typeout{\string\affiliation}}{}%
+ \move@AU\move@AF
+ \begingroup
+ \cat@comma@active
+ \@affiliation
+}%
+\def\@affiliation#1{%
+ \endgroup
+ \let\@AF@join\@affil@join
+ \@affil@def{#1}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\noaffiliation}
+% \changes{4.1b}{2008/08/02}{Use \cs{@affil@def} for all access to \cs{@affil}}
+% \changes{4.1i}{2009/10/18}{(AO, 540) More runtime diagnostics via \cs{frontmatterverbose@sw}}
+% \changes{4.1n}{2009/11/30}{(AO, 567) Handle \cs{noaffiliation} case}
+% User-level command \cmd\noaffiliation\ signifies that the current group of authors, or the current collaboration, has \emph{no} affiliation.
+%
+% This is implemented by acting as if the \cmd\affiliation\ command has been given, and using a
+% flag value of \{\cmd\relax\}, which adds an element to the affiliation group of this author,
+% albeit a nil one (\cmd\AFF@opr\ \{\cmd\relax\} \{\}).
+%
+% Note that this procedure does substantially the same as \cmd\@author@finish. (the latter, If it does not bail out altogether, differs chiefly in providing diagnostics).
+% \begin{macrocode}
+\newcommand\frontmatter@noaffiliation{%
+ \frontmatterverbose@sw{\typeout{\string\noaffiliation}}{}%
+ \move@AU\move@AF
+% \end{macrocode}
+% In \cmd\@author@finish, there is code testing if an effective
+% \cmd\noaffiliation\ should be executed now. Here, we do so in any case.
+% \begin{macrocode}
+ \@affil@none\move@AF
+ \move@AUAF
+}%
+\def\blankaffiliation{{}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@affil@cleared}
+% \begin{macro}{\@affil@nil}
+% \begin{macro}{\@affil@init}
+% \begin{macro}{\@affil@none}
+% \begin{macro}{\@affilclear@sw}
+% \begin{macro}{\@affil@def}
+% \begin{macro}{\@affil@join@}
+% \begin{macro}{\@affil@join}
+% \changes{4.1b}{2008/08/02}{Use \cs{@affil@def} for all access to \cs{@affil}}
+% \changes{4.1n}{2009/11/30}{(AO, 567) Handle \cs{noaffiliation} case}
+%
+% Here are all the access procedures for the affiliation data structure.
+% Note the similarity to those of the \cmd\@author\ data structure.
+%
+% We define a flag value for \cmd\@affil\ (private),
+% a procedure for setting \cmd\@affil\ to the flag value (\cmd\@affil@init),
+% a Boolean to test against the flag value (\cmd\@affilclear@sw),
+% a procedure \cmd\@affil@def\ to load a value into the structure,
+% and a procedure to add new ancillary data to the affiliation.
+% \begin{macrocode}
+\def\@affil@cleared{{{}}{}}%
+\def\@affil@nil{{\relax}{}}%
+\appdef\frontmatter@init{%
+ \@affil@init
+}%
+\def\@affil@none{%
+ \let\@affil\@affil@nil
+}%
+\def\@affil@init{%
+ \let\@affil\@affil@cleared
+}%
+\def\@affilclear@sw{\@ifx{\@affil\@affil@cleared}}%
+\def\@affil@def#1{%
+ \def\@affil{{#1}{}}%
+}%
+\def\@affil@join@#1#2#3{%
+ \def\@affil{{#1}{\@join{\@separator}{#2}{#3}}}%
+}%
+\def\@affil@join{\expandafter\@affil@join@\@affil}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\move@AF}
+% \changes{4.1b}{2008/08/02}{(AO, 486) \cs{collaboration} to work with \texttt{groupedaddress}}
+% \changes{4.1i}{2009/10/23}{(AO, 540) Rationalize code that appends to \cs{AF@grp}}
+% \changes{4.1n}{2009/11/30}{(AO, 567) Handle \cs{noaffiliation} case}
+% Move the most recent affiliation to the affiliation group.
+% If we recently did a \cmd\@affil@init, this is a no-op.
+%
+% Set the \cmd\temp@sw\ to false, then execute the affiliation list (\cmd\@AFF@list)
+% with the intercollated operator set to \cmd\@affil@match\
+% and with \cmd\@tempa\ holding the first component of \cmd\@affil, the current affiliation, which is to be matched.
+%
+% If the current affiliation has been seen before, then by side effect
+% \cmd\temp@sw\ will be set to true,
+% \cmd\@tempc\ will be set to the matching affiliation number,
+% and \cmd\@tempd\ will be set to the affiliation's ancillary data.
+% The Boolean \cmd\@affils@sw\ being false prevents this test from ever returning a ``true'' result.
+%
+% This procedure uses \cmd\@tempa\ and sets \cmd\@tempc, \cmd\@tempd, and \cmd\temp@sw.
+% \begin{macrocode}
+\def\move@AF{%
+ \@affilclear@sw{}{%
+ \@booleanfalse\temp@sw
+ \let\@tempd\@empty
+ \@affils@sw{%
+ \expandafter\@affil@addr@def\expandafter\@tempa\@affil
+ \def\AFF@opr{\@affil@match\@tempa}%
+ \@AFF@list
+ }{}\temp@sw
+% \end{macrocode}
+% True clause: This affiliation has been seen before.
+% If ancillary data for the affiliation have been given, but are not identical to those seen before, give a warning.
+% \begin{macrocode}
+ {%
+ \expandafter\@affil@aux@def\expandafter\@tempb\@affil
+ \@ifx{\@tempb\@empty}{}{%
+ \@ifx{\@tempb\@tempd}{}{%
+ \class@warn{%
+ Ancillary information for \@tempa\space must not be different!
+ Please put all of it on the first instance%
+ }%
+ }%
+ }%
+ }%
+% \end{macrocode}
+% False clause: This affiliation is a new one:
+% increment the affiliation counter to get a unique affiliation ID
+% and append the new ID, collaboration number, address, and auxiliary information
+% to the list \cmd\@AFF@list.
+%
+% Note that, with the expanded syntax of \cmd\collaboration, we need to label each address with
+% its associated collaboration.
+%
+% Note also that the \cmd\noaffiliation\ case is handled by recognizing the flag value \cmd\@affil@nil.
+% \begin{macrocode}
+ {%
+ \@ifx{\@affil\@affil@nil}{%
+ \def\@tempc{0}%
+ \@argswap@val{0}%
+ }{%
+ \advance\c@affil\@ne
+ \expandafter\def\expandafter\@tempc\expandafter{\the\c@affil}%
+ \expandafter\@argswap@val\expandafter{\the\c@affil}%
+ }%
+ {%
+ \expandafter\@argswap@val\expandafter{\the\c@collab}{%
+ \expandafter\@argswap@val\expandafter{\@affil}{%
+ \add@list@val@val@val\@AFF@list\AFF@opr
+ }%
+ }%
+ }%
+ }%
+% \end{macrocode}
+% In either case, append this affiliation number to the \cmd\AF@grp, the affiliation group of the current author group.
+% (It will later be considered for the \cmd\@AFG@list.)
+% Then assign the flag value to \cmd\@affil\ that signifies it has been cleared.
+% \changes{4.1i}{2009/10/18}{(AO, 540) Rationalize code that appends to \cs{AF@grp}}
+% \begin{macrocode}
+ \appdef@eval\AF@grp\@tempc
+ \frontmatterverbose@sw{\say\AF@grp}{}%
+ \@affil@init
+ }%
+}%
+\def\@affil@addr@def#1#2#3{%
+ \def#1{#2}%
+}%
+\def\@affil@aux@def#1#2#3{%
+ \def#1{#3}%
+}%
+% \end{macrocode}
+% \changes{4.1b}{2008/08/02}{Provide for diagnostics via \cs{frontmatterverbose@sw}}
+% Procedure \cmd\add@list@val@val@val\ appends to the given list \#1 using the given intercollated operator \#2,
+% with arguments \#5 (affiliation ID) and \#4 (collaboration ID) delimited by braces, and \#3 bare.
+% In the end, \cmd\move@AF\ may execute something like
+% \cmd\appdef\ \cmd\@AFF@list\ \cmd\AFF@opr\ \{1\} \{3\} \{My Institution\} \{thanks\}.
+% \begin{macrocode}
+\def\add@list@val@val@val#1#2#3#4#5{%
+ \appdef#1{#2{#5}{#4}#3}%
+ \frontmatterverbose@sw{\say#1}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@affil@match}
+% \changes{4.1b}{2008/08/02}{(AO, 486) \cs{collaboration} to work with \texttt{groupedaddress}}
+% The procedure \cmd\@affil@match\ is the definition for \cmd\AFF@opr,
+% the intercollated operator for \cmd\@AFF@list,
+% when adding a new affiliation: it seeks a match with any earlier affiliation.
+% When the affiliation list is executed, this procedure tests each entry against
+% the `new' affiliation (which has been stored in \cmd\@tempa) and its associated
+% collaboration number (in \cmd\@tempb).
+%
+% If \cmd\groupauthors@sw\ is true, then we require the collaboration ID to match,
+% otherwise there is no such requirement,
+% as is appropriate for the \classoption{superscriptaddress} class option.
+%
+% Uses \cmd\temp@sw, \cmd\@tempc, and \cmd\@tempd\ to communicate back:
+% if it returns \cmd\temp@sw\ true, a match was found.
+% Then
+% \cmd\@tempc\ will be the affiliation ID of the matching entry
+% and \cmd\@tempd\ will be the auxiliary information of the matching entry.
+% \begin{macrocode}
+\def\@affil@match#1#2#3#4#5{%
+ \temp@sw{}{%
+ \def\@tempifx{#4}%
+ \@ifx{\@tempifx#1}{%
+ \groupauthors@sw{%
+ \@ifnum{#3=\c@collab}{%
+ \true@sw
+ }{%
+ \false@sw
+ }%
+ }{%
+ \true@sw
+ }%
+ }{%
+ \false@sw
+ }%
+ {%
+ \@booleantrue\temp@sw
+ \def\@tempc{#2}%
+ \def\@tempd{#5}%
+ }{%
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\move@AUAF}
+% \changes{4.0h}{1998/06/25}{Changes to support groups of affiliations}
+% \changes{4.1b}{2008/08/02}{(AO, 486) \cs{collaboration} to work with \texttt{groupedaddress}}
+% \changes{4.1b}{2008/08/02}{Change csname \cs{AFS@opr} to \cs{AFG@opr}}
+% \changes{4.1b}{2008/08/02}{Provide for diagnostics via \cs{frontmatterverbose@sw}}
+% Append \cmd\AF@grp, \cmd\AU@grp, and \cmd\CO@grp\ to \cmd\@AAC@list,
+% append \cmd\CO@grp\ to \cmd\@AFG@list,
+% and merge any new \cmd\AF@grp\ to \cmd\@AFG@list.
+%
+% The entire procedure is predicated on something non-trivial to move.
+%
+% If both author group \cmd\AU@grp\ and affiliation group \cmd\AF@grp\ are nil, bail out.
+%
+% No, try that again:
+%
+% If we have seen any affiliations (\cmd\AF@grp\ is not nil),
+% then it is time to move the current affiliation group and author group to \cmd\@AAC@list.
+% If not, we are picking up authors into an author group, and we should bail out.
+%
+% To extend this scheme to the new \cmd\collaboration\ abilities, we must append an affiliation \cmd\AF@opr\ to \cmd\@AAC@list\
+% also in the case where there was no affiliation specified (e.g., \cmd\noaffiliation). This affiliation will be a nil affiliation:
+% \cmd\AF@opr\verb+{{0}}+.
+%
+%FIXME: only one of \cmd\CO@grp\ or \cmd\AU@grp\ is non-empty at this point,
+% but this code does not appear to recognize this fact!
+% \changes{4.1i}{2009/10/18}{(AO, 540) More runtime diagnostics via \cs{frontmatterverbose@sw}}
+% \begin{macrocode}
+\def\move@AUAF{%
+ \frontmatterverbose@sw{\say\AU@grp\say\AF@grp\say\CO@grp}{}%
+ \@ifx{\AF@grp\@empty}{%
+ \@ifx{\@empty\CO@grp}{%
+% \end{macrocode}
+% Both \cmd\AF@grp\ and \cmd\CO@grp\ are empty: nothing to do. But what if \cmd\AU@grp\ is not empty?
+% \begin{macrocode}
+ }{%
+% \end{macrocode}
+% Append the nil \cmd\AF@opr\ to \cmd\@AAC@list.
+% \begin{macrocode}
+ \appdef \@AAC@list{\AF@opr{{0}}}%
+% \end{macrocode}
+% Append the collaboration group to the \cmd\@AAC@list; no intercollated operator need be added,
+% because we already have \cmd\CO@opr.
+% \begin{macrocode}
+ \appdef@e \@AAC@list{\CO@grp}%
+ \appdef@e \@AFG@list{\CO@grp}%
+ \let\CO@grp\@empty
+ }%
+ }{%
+% \end{macrocode}
+% Append current affiliation group (expansion of \cmd\AF@grp)
+% to the author/affiliation list (\cmd\@AAC@list),
+% using \cmd\AF@opr\ as the intercollated operator;
+% also append the current authors (\cmd\AU@grp).
+% \begin{macrocode}
+ \appdef \@AAC@list{\AF@opr}%
+ \appdef@eval\@AAC@list{\AF@grp}%
+ \appdef@e \@AAC@list{\AU@grp}%
+% \end{macrocode}
+% Determine if either \cmd\AU@grp\ or \cmd\CO@grp\ is non-empty.
+% \begin{macrocode}
+ \@ifx{\@empty\AU@grp}{%
+ \@ifx{\@empty\CO@grp}%
+ }{%
+ \false@sw
+ }%
+% \end{macrocode}
+% At this point, there is a Boolean in \TeX's scanner;
+% it will parse the following two brace-delimited sequences and select one of them.
+% \begin{macrocode}
+ {%
+% \end{macrocode}
+% This branch is executed if and only if both \cmd\AU@grp\ and \cmd\CO@grp\ are empty.
+% \begin{macrocode}
+ }{%
+% \end{macrocode}
+% There was either a \cmd\author\ or a \cmd\collaboration\ command.
+% Append the current affiliation group to \cmd\@AFG@list,
+% (only if it is not already there)
+% using \cmd\AFG@opr\ as the intercollated operator.
+%
+% Note that \cmd\@AFG@list\ is a list of \emph{unique} affiliation \emph{groups},
+% and building it entails an \(N^2\) computation.
+% \begin{macrocode}
+ \@booleanfalse\temp@sw
+ \def\AFG@opr{\x@match\AF@grp}%
+ \let\CO@opr\@author@gobble
+ \@AFG@list
+ \temp@sw{}{%
+ \appdef \@AFG@list{\AFG@opr}%
+ \appdef@eval\@AFG@list{\AF@grp}%
+ }%
+% \end{macrocode}
+% If the collaboration \cmd\CO@grp\ is not empty, we append it to the \cmd\@AFG@list\ and to the \cmd\@AAC@list.
+% \changes{4.1m}{2009/11/20}{(AO, 563) \cs{collaboration} to work with both \texttt{groupedaddress} and \texttt{superscriptaddress}}
+% \begin{macrocode}
+ \@ifx{\@empty\CO@grp}{}{%
+ \appdef@e \@AAC@list{\CO@grp}%
+ \appdef@e \@AFG@list{\CO@grp}%
+ \let\CO@grp\@empty
+ }%
+ }%
+% \end{macrocode}
+% Finally, null out the macros holding the author group \cmd\AU@grp, affiliation group \cmd\AF@grp, and collaboration group \cmd\CO@grp.
+% \begin{macrocode}
+ \let\CO@grp\@empty
+ \let\AU@grp\@empty
+ \let\AF@grp\@empty
+ }%
+ \frontmatterverbose@sw{\say\@AAC@list\say\@AFG@list}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\AU@grp}
+% \begin{macro}{\AF@grp}
+% \begin{macro}{\@AAC@list}
+% \begin{macro}{\@AFG@list}
+% \begin{macro}{\@AFF@list}
+%
+% The control sequence name \cmd\AU@grp\ accumulates
+% consecutive \cmd\author\ entries (with \cmd\AU@opr\ as the intercollated operator)
+% and \cmd\collaboration\ entries (with \cmd\CO@opr\ as the intercollated operator).
+% Ultimately, its contents are appended to the author/affiliation list \cmd\@AAC@list\
+% and to the list of affiliation groups, \cmd\@AFG@list.
+% It must be initialized to \cmd\@empty.
+%
+% Note on \cmd\AU@opr\ and \cmd\CO@opr: it is essential to treat these two operators to the greatest extent possible on an equal footing.
+% Therefore we invariably assign values to the pair of them within the same procedure.
+%
+% The macro \cmd\AF@grp\ accumulates affiliation IDs into an affiliation group.
+% It must be empty at the beginning of the frontmatter.
+%
+% The \cmd\@AAC@list\ macro accumulates
+% authors (using \cmd\AU@opr\ as the intercollated operator),
+% collaborations (using \cmd\CO@opr\ as the intercollated operator),
+% and
+% affiliations (using \cmd\AF@opr\ as the intercollated operator).
+%
+% It must be empty at the beginning of the frontmatter.
+%
+% The macro \cmd\@AFG@list\ accumulates
+% affiliation groups, with \cmd\AFG@opr\ as the intercollated operator,
+% and collaborations, with no intercollated operator.
+% This token list is employed when and only when \classoption{groupedaddress} is in effect.
+%
+% The macro \cmd\@AFF@list\ accumulates the list of affiliations
+% with \cmd\AFF@opr\ as the intercollated operator.
+% It must be empty at the beginning of the frontmatter.
+%
+% Each \cmd\affiliation\ command in the document contributes
+% to this list, as long as the argument of that instance of the command
+% is ``new''.
+%
+% Each entry in this list consists of the \cmd\AFF@opr\ intercollated operator
+% followed by three brace-delimited tokens, representing, in order:
+% \begin{enumerate}
+% \item
+% the affiliation's unique ID, a number increasing monotonically for
+% each new entry,
+% \item
+% the optional argument of the \cmd\affiliation\ command,
+% the footnote to the affiliation, and
+% \item
+% the text of the affiliation.
+% \end{enumerate}
+%
+% At various junctures in the code, the control sequence name
+% \cmd\AFF@opr\ assumes the meaning of
+% \cmd\@affil@group, \cmd\affil@script,
+% or is defined to expand to \cmd\@affil@match\cmd\@tempa,
+% and the list \cmd\@AFF@list\ is expanded.
+%
+% For each of these lists, here is the syntax of an element and the usage of the associated operator:
+% \begin{verbatim}
+%\@AFF@list \AFF@opr{<affiliation ID>}{<collaboration ID>}{<address>}{<auxiliary info>} \frontmatter@author@produce@script \affils@present@group
+%\@AFG@list \AFG@opr{{<affiliation ID>}..{<affiliation ID>}} \frontmatter@author@produce@group
+%\@AAC@list \AF@opr{{<affiliation ID>}..{<affiliation ID>}} (\AU@opr|\CO@opr){<collaboration ID>}{<author>}{<auxilliary info>} \frontmatter@author@produce@script \frontmatter@author@produce@group \affils@present@group
+%
+%\AFF@opr \@affil@match\@tempa \@affil@script \@affil@group
+%\AFG@opr \affils@present@group \x@match\AF@grp
+%\AF@opr \@gobble \@affilID@def \@affilID@count\AF@temp\@tempcnta \@affilID@match\AF@temp
+%\AU@opr \@secondofthree \@author@count\@tempcnta \@author@present \@author@gobble \@author@count#2 \@author@present
+%\CO@opr \@secondofthree \@collaboration@count\AU@temp\@tempcnta \@collaboration@present\AU@temp \@collaboration@present\AU@temp \@collaboration@gobble
+%
+%\CO@opr\@author@cleared
+% \end{verbatim}
+% \begin{macrocode}
+\appdef\frontmatter@init{%
+ \let\AU@grp\@empty
+ \let\CO@grp\@empty
+ \let\AF@grp\@empty
+ \let\@AAC@list\@empty
+ \let\@AFG@list\@empty
+ \let\@AFF@list\@empty
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@AF@join}
+% The \cmd\csname\ \cmd\@AF@join\ is a procedure used within
+% \cmd\email, \cmd\homepage, \cmd\thanks, and \cmd\altaffiliation.
+% When such a command appears after an \cmd\author, \cmd\collaboration, or \cmd\affiliation
+% command, the \cmd\@AF@join\ procedure appends the argument given to the appropriate
+% macro.
+% Its default is to give an error message, since these commands are legal only within
+% the particular context mentioned.
+% \begin{macrocode}
+\appdef\frontmatter@init{%
+ \let\@AF@join\@AF@join@error
+}%
+\def\@AF@join@error#1{%
+ \class@warn{%
+ \string\email, \string\homepage, \string\thanks, or \string\altaffiliation\space
+ appears in wrong context.
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Commands for auxiliary information}%
+%
+% \begin{macro}{\email}
+% Just tacks the email address on to the current author or affiliation.
+% \changes{4.1a}{2008-07-01}{(AO, 496) remove default prependation to \cs{email}.}
+% \begin{macrocode}
+\def\sanitize@url{%
+ \@makeother\%%
+ \@makeother\~%
+ \@makeother\_%
+}%
+\newcommand*\email[1][]{\begingroup\sanitize@url\@email{#1}}%
+\def\@email#1#2{%
+ \endgroup
+ \@AF@join{#1\href{mailto:#2}{#2}}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\homepage}
+% Just tacks the URL on to the current author or affiliation.
+% Note: group opened in \cmd\homepage\ is closed in \cmd\@homepage.
+% \changes{4.1a}{2008-07-01}{(AO, 496) remove default prependation to \cs{homepage}.}
+% \changes{4.1n}{2009/12/03}{(AO) remove http:// from \cs{href} call}
+% \begin{macrocode}
+\newcommand*\homepage[1][]{\begingroup\sanitize@url\@homepage{#1}}%
+\def\@homepage#1#2{%
+ \endgroup
+ \@AF@join{#1\href{#2}{#2}}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\href}
+% The document may load a package that defines either of these commands;
+% if not, we give a default meaning.
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \providecommand\href[1]{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\thanks}
+% \changes{4.1b}{2008/08/02}{Make the syntax of this package switch optional}%
+%
+% The operative version of \cmd\thanks\ appends an item to \cmd\@author, or \cmd\@affil's auxiliary data.
+% \begin{macrocode}
+\def\frontmatter@thanks{% implicit #1
+ \@AF@join
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\altaffiliation}
+% \changes{4.0d}{1998/01/31}{change name from \cs{tempaffiliation}}
+% \changes{4.0l}{1998/09/01}{add optional argument handling back}
+% Implemented more or less like \cmd\thanks\ but shares the affiliation
+% counter.
+% Optional argument may be used to give explanatory text eg
+% `currently staying at'
+% This will be placed before the address, if used in a footnote.
+% \begin{macrocode}
+\newcommand*\altaffiliation[2][]{%
+ \@AF@join{#1#2}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Procedures for author, collaboration, and affiliation}%
+%
+% Macros that list off, say, authors, and which require punctuation, like ``A, B, and C'', will use
+% \cmd\set@listcomma@list, \cmd\set@listcomma@count, \cmd\@listand, and \cmd\@listcomma.
+% These macros use the \cmd\@tempcnta\ register to keep track of how many items remain to be listed off.
+%
+% At present, \cmd\@author@present\ will decrement that counter.
+%
+% \begin{macro}{\set@listcomma@list}
+% \begin{macro}{\set@listcomma@count}
+% \changes{4.0l}{1998/09/01}{macro added}
+% Pop the author count for this collaboration.
+%
+% Note: by side effect, it assigns \cmd\@listcomma:
+% for a list of length two, suppress comma addition.
+% \begin{macrocode}
+\def\set@listcomma@list#1{%
+ \expandafter\@reset@ac\expandafter#1#1{0}\@reset@ac{%
+ \let\@listcomma\relax
+ }{%
+ \let\@listcomma\@listcomma@comma
+ }%
+}%
+\def\set@listcomma@count#1{%
+ \@ifnum{#1=\tw@}{%
+ \let\@listcomma\relax
+ }{%
+ \let\@listcomma\@listcomma@comma
+ }%
+}%
+% \end{macrocode}
+% Does the actual pop operation, then generates a Boolean which selects one of the two assignments for \cmd\@listcomma.
+%
+% Note: this procedure sets \cmd\@tempcnta\ to reflect the number of items to list off.
+% \begin{macrocode}
+\def\@reset@ac#1#2#3\@reset@ac{%
+ \def#1{#3}%
+ \@tempcnta#2\relax
+ \@ifnum{#2=\tw@}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\listand}
+% Might need extending with penalties etc.
+%
+% Note: this procedure expects \cmd\@tempcnta\ to reflect the current number of items remaining to list off.
+% \begin{macrocode}
+\def\@listand{\@ifnum{\@tempcnta=\tw@}{\andname\space}{}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@listcomma}
+% This definition, with \cmd\@ne\ puts a comma before and.
+%
+% David Carlisle says: In UK English (at least) would have \cmd\tw@\ here,
+% which would then implement the convention of indicating conjunction with comma or ``and'', but not both.
+%
+% Note: this procedure expects \cmd\@tempcnta\ to reflect the current number of items remaining to list off.
+% \begin{macrocode}
+\def\@listcomma@comma{\@ifnum{\@tempcnta>\@ne}{,}{}}%
+\def\@listcomma@comma@UK{\@ifnum{\@tempcnta>\tw@}{,}{}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@collaboration@gobble}
+% This command will be the synonym of \cmd\CO@grp\ during the expansion of \cmd\@AAC@list,
+% within \cmd\affils@present@group execution (in a \classoption{groupedaddress} situation).
+%
+% \changes{4.1m}{2009/11/20}{(AO, 563) Let \cs{@collaboration@gobble} parse all three arguments of \cs{CO@opr}}
+% \begin{macrocode}
+\def\@collaboration@gobble#1#2#3{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\doauthor}
+% \changes{4.1b}{2008/08/04}{Provide facility \cs{affil@cutoff}: if there is only one affiliation on the title page, no superscript}%
+% \changes{4.1n}{2009/11/30}{(AO, 567) Handle punctuation for \classoption{superscriptaddress} style authors' extra information, such as \cs{email}}
+% Main control over how authors are typeset.
+%
+% |#1| is loaded by \cmd\author
+%
+% |#2| is loaded by \cmd\email, \cmd\homepage, \cmd\altaffiliation, or \cmd\thanks
+%
+% |#3| is the superscript affiliation, if at all used.
+%
+% First, the author name is formatted, followed by a comma,
+% then come any marks relating to affiliation (if present),
+% then come the homepage URL and email address, if any, with
+% appropriate punctuation.
+%
+% Here, as in \cmd\@affil@script, the parameter \cmd\affil@cutoff\
+% controls whether the argument \#3 is produced as a superscript label
+% connecting this author with its affiliation. (If there is only one
+% affiliation on the title page, it makes sense to remove the superscript.)
+%
+% Note that argument \#3 must effectively execute either
+% \cmd\aftergroup\cmd\true@sw\ or \cmd\aftergroup\cmd\false@sw\ (exactly once!).
+% In the case of \classoption{superscriptaddress}, this is done when
+% \cmd\@author@present@script\ invokes \cmd\doauthor\ with its third argument containing
+% \cmd\@affil@present@script.
+% Otherwise (e.g., \classoption{groupedaddress}), \cmd\doauthor\ is invoked by
+% \cmd\@author@present@group\ with its third argument containing \cmd\@affil@present@group.
+% \begin{macrocode}
+\def\doauthor#1#2#3{%
+ \ignorespaces#1\unskip\@listcomma
+ \begingroup
+ #3%
+% \end{macrocode}
+% At this point, we must have queued up a Boolean (either \cmd\true@sw\ or \cmd\false@sw).
+% \begin{macrocode}
+ \@if@empty{#2}{\endgroup{}{}}{\endgroup{\comma@space}{}\frontmatter@footnote{#2}}%
+ \space \@listand
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\x@match}
+% Procedure \cmd\x@match\ is used as an alias \cmd\AFG@opr,
+% probing the list of affiliation groups
+% and setting a Boolean if a match is found to \#1 (usually the current affiliation group).
+%
+% Procedure \cmd\y@match\ is used as an alias to \cmd\@TBN@opr,
+% probing the list of unique title block footnotes for a match to the footnote text:
+% when the first match is found it sets a Boolean,
+% defining \cmd\@tempb\ to the number of that footnote.
+% \begin{macrocode}
+\def\x@match#1#2{%
+ \temp@sw{}{%
+ \def\@tempifx{#2}%
+ \@ifx{\@tempifx#1}{%
+ \@booleantrue\temp@sw
+ }{%
+ }%
+ }%
+}%
+\def\y@match#1#2#3{%
+ \temp@sw{}{%
+ \def\@tempifx{#3}%
+ \@ifx{\@tempifx#1}{%
+ \@booleantrue\temp@sw
+ \def\@tempb{#2}%
+ }{%
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@footnote}
+% Used when typesetting a title block footnote.
+% (Item 290: merge duplicates.)
+%
+% Maintains a list of frontmatter footnotes along with associated device.
+% Uniquifies each footnote by traversing the list and looking for a match to the footnote text.
+% If found, define \cmd\@tempb\ to the corresponding footnote device, and typeset it with \cmd\@footnotemark.
+% If never found, manually increment footnote counter,
+% determine the corresponding footnote device, and
+% add footnote text and device to the list of frontmatter footnotes.
+%
+% The list \cmd\@FMN@list\ is processed later in the title block production.
+%
+% Note that this method of making footnotes runs afoul of \classname{hyperref}'s patches of the \LaTeX\ kernel.
+% Therefore, we avoid trouble by refraining from using \cmd\@footnotemark\ and by creating our own hypertext links.
+% \begin{macrocode}
+\def\frontmatter@footnote#1{%
+ \begingroup
+ \@booleanfalse\temp@sw
+ \def\@tempa{#1}%
+ \let\@tempb\@empty
+ \def\@TBN@opr{\y@match\@tempa}%
+ \@FMN@list
+% \end{macrocode}
+% By side effect, \cmd\@tempb\ holds the value of the footnote counter if
+% This note has been seen before. Otherwise \cmd\temp@sw\ is false.
+% \begin{macrocode}
+ \temp@sw{%
+ \expandafter\frontmatter@footnotemark
+ \expandafter{\@tempb}%
+ }{%
+% \end{macrocode}
+% Execute \cmd\frontmatter@foot@mark, feeding it the value of the current footnote counter.
+% This call requires two levels of pre-expansion to accomplish, the first to expand \cmd\csname, the second to evaluate \cmd\the.
+% \begin{macrocode}
+ \stepcounter\@mpfn
+ \expandafter\expandafter
+ \expandafter\frontmatter@foot@mark
+ \expandafter\expandafter
+ \expandafter{%
+ \expandafter \the\csname c@\@mpfn\endcsname
+ }{#1}%
+ }%
+ \endgroup
+}%
+% \end{macrocode}
+% Procedure \cmd\frontmatter@foot@mark\ lays down the footnote device (mark) and takes care of the footnote text.
+% The latter merely involves queueing that text (along with its associated device) into \cmd\@FMN@list.
+% \begin{macrocode}
+\def\frontmatter@foot@mark#1#2{%
+ \frontmatter@footnotemark{#1}%
+ \g@addto@macro\@FMN@list{\@TBN@opr{#1}{#2}}%
+}%
+\appdef\frontmatter@init{%
+ \global\let\@FMN@list\@empty
+}%
+% \end{macrocode}
+% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}%
+% \begin{macrocode}
+\def\frontmatter@footnotemark#1{%
+ \leavevmode
+ \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi
+ \begingroup
+ \hyper@linkstart {link}{frontmatter.#1}%
+ \csname c@\@mpfn\endcsname#1\relax
+ \def\@thefnmark{\frontmatter@thefootnote}%
+ \@makefnmark
+ \hyper@linkend
+ \endgroup
+ \ifhmode\spacefactor\@x@sf\fi
+ \relax
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsection{The keywords command}%
+% \begin{macro}{\keywords}
+% \begin{macro}{\@keywords}
+% Usual game, save text in a macro for processing by \cmd\maketitle.
+% \begin{macrocode}
+\def\keywords#1{%
+ \aftermaketitle@chk{\keywords}%
+ \gdef\@keywords{#1}%
+}%
+\appdef\frontmatter@init{%
+ \let\@keywords\@empty
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{The \cs{date} command and related commands}%
+% \begin{macro}{\date}
+% \begin{macro}{\received}
+% \begin{macro}{\revised}
+% \begin{macro}{\accepted}
+% \begin{macro}{\published}
+% \begin{macro}{\@date}
+% \begin{macro}{\@received}
+% \begin{macro}{\@revised}
+% \begin{macro}{\@accepted}
+% \begin{macro}{\@published}
+% \changes{4.1b}{2008/08/02}{Make the syntax of this package switch optional}%
+% Use the \cmd\date\ command to specify the document date,
+% the \cmd\received\ command to specify the date received,
+% \cmd\revised\ for date revised,
+% \cmd\accepted\ for date accepted, and
+% \cmd\published\ for date published.
+% Normally only \cmd\date\ to be used by author,
+% the remainder used only by editors.
+%
+% DPC: As for \cmd\keywords, but this time don't flag a warning if there is no
+% revision date specified.
+%
+% In each case the user-level command defines the value of a
+% macro which buffers the data entered by the user.
+% For instance, \cmd\received\ causes \cmd\@received\ to
+% acquire a value.
+% The optional argument allows the user to override the
+% text that will be typeset along with the date;
+% the default value of that text is itself
+% a localized macro.
+% \begin{macrocode}
+\newcommand*\frontmatter@date[2][\Dated@name]{\def\@date{#1#2}}%
+\def\@date{}%
+\newcommand*\received[2][\Received@name]{\def\@received{#1#2}}%
+\def\@received{}%
+\newcommand*\revised[2][\Revised@name]{\def\@revised{#1#2}}%
+\def\@revised{}%
+\newcommand*\accepted[2][\Accepted@name]{\def\@accepted{#1#2}}%
+\def\@accepted{}%
+\newcommand*\published[2][\Published@name]{\def\@published{#1#2}}%
+\def\@published{}%
+% \end{macrocode}
+%
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{The pacs command}%
+% PACS, the Physics and Astronomy Classification Scheme.
+% \begin{macro}{\pacs}
+% \begin{macro}{\@pacs}
+% As for \cmd\keywords\
+% \begin{macrocode}
+\def\pacs#1{%
+ \aftermaketitle@chk{\pacs}%
+ \gdef\@pacs{#1}%
+}%
+\appdef\frontmatter@init{%
+ \let\@pacs\@empty
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{The \cs{preprint} command}
+%
+% \changes{4.0g}{1998/06/10}{multiple preprint commands}
+% \begin{macrocode}
+\def\preprint#1{\gappdef\@preprint{\preprint{#1}}}%
+\appdef\frontmatter@init{%
+ \let\@preprint\@empty
+}%
+% \end{macrocode}
+%
+% \subsection{The \env{abstract} environment}%
+%
+% \changes{4.0b}{1999/06/20}{Gathered all code for the abstract environment together and abstracted out the formatting details for journals to override.}
+%
+% \begin{macro}{\absbox}
+%
+% \begin{macrocode}
+\newbox\absbox
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{abstract}
+% Abstract, as in AMS classes, must be specified \emph{before}
+% \cmd\maketitle. It just saves everything up in \cmd\absbox.
+% \changes{4.0d}{1998/01/31}{If empty \cs{abstractname} omit spacing}
+% \changes{4.0d}{1998/01/31}{hookify}
+% Note that the specifics of how the abstract is to be
+% formatted are set by \cmd\frontmatter@abstractwidth,
+% \cmd\frontmatter@abstractheading, and \cmd\frontmatter@abstractfont.
+%
+% Here we wish to set the abstract into type but save it away in a box, much like
+% the \cmd\minipage\ command does.
+%
+% Note that the \cmd\endabstract\ portion of the environment
+% begins with code that mostly duplicates \cmd\endminipage, but without the \cmd\@iiiparbox.
+% At the end, we simply transfer the contents of the \cmd\minipage\
+% into a box of our own.
+%
+% However, we also have to end the gratuitous
+% paragraph begun by \cmd\minipage.
+% We ensure that no trace of that paragraph is left,
+% by absorbing the \cmd\parindent\ box.
+% Doing so destroys the paragraph entirely, except
+% for the \cmd\parskip\ glue, and that morsel is pruned, because we are at the top
+% of a page.
+%
+% This mechanism is vulnerable, however, because anything placed into the horizontal list
+% after the \cmd\parindent\ box will confound it.
+% And that is exactly what happens under Mik\TeX:
+% There seems to be an extension to the \TeX\ standard operating here which inserts a \cmd\special \ at the beginning of every paragraph.
+% (The mechnism is \emph{not} based on \cmd\everypar.)
+%
+% To accomodate this state of affairs,
+% we have a new mechanism that offers an even more complete rewrite of \env{minipage}.
+%
+% Note that an entry is made in the toc for the abstract; this has the side effect
+% of creating a PDF bookmark for this element if the \classname{hyperref} package is in effect.
+% \changes{4.1a}{2008-06-30}{(AO, 443) create an entry in the PDF bookmarks for the abstract via the toc}
+% \begin{macrocode}
+\def\toclevel@abstract{1}%
+\def\addcontents@abstract{%
+ \phantomsection
+ \expandafter\def\csname Parent0\endcsname{section*.2}%
+ \expandafter\@argswap@val\expandafter{\abstractname}{\addcontentsline{toc}{abstract}}%
+}%
+\newenvironment{frontmatter@abstract}{%
+ \aftermaketitle@chk{\begin{abstract}}%
+ \global\setbox\absbox\vbox\bgroup
+ \color@begingroup
+ \columnwidth\textwidth
+ \hsize\columnwidth
+ \@parboxrestore
+% \end{macrocode}
+% The following line switches footnotes to the \texttt{mpfoootnote} series.
+% This action should rather be taken by \cmd\frontmatter@abstractfont, which can be customized.
+% There is also an interaction with \cmd\mini@note.
+% \begin{macrocode}
+ \def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}\c@mpfootnote\z@
+ \let\@footnotetext\frontmatter@footnotetext
+ \minipagefootnote@init
+ \let\set@listindent\set@listindent@
+ \let\@listdepth\@mplistdepth \@mplistdepth\z@
+ \let@environment{description}{frontmatter@description}%
+ \@minipagerestore
+ \@setminipage
+ \frontmatter@abstractheading
+ \frontmatter@abstractfont
+ \let\footnote\mini@note
+ \expandafter\everypar\expandafter{\the\everypar\addcontents@abstract\everypar{}}%
+}{%
+ \par
+ \unskip
+ \minipagefootnote@here
+ \@minipagefalse %% added 24 May 89
+ \color@endgroup
+ \egroup
+}%
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\frontmatter@footnotetext}
+% We reimplement \cmd\@mpfootnotetext\ under a new name (so as not to be overridden by the \classname{hyperref} package)
+% and extend it to accomodate hyperrefs.
+%
+% Note that this procedure is very like \classname{ltxutil}'s \cmd\mp@footnotetext, except that it
+% uses \cmd\frontmatter@makefntext\ instead of \cmd\@makefntext.
+%
+% \changes{4.1f}{2009/07/07}{(AO, 515) Use \cs{set@footnotefont}, which is defined in ltxutil}
+% \changes{4.1n}{2010/01/02}{(AO, 571) allow split after last line of footnote}%
+% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}%
+% \begin{macrocode}
+\long\def\frontmatter@footnotetext#1{%
+ \minipagefootnote@pick
+ \set@footnotefont
+ \set@footnotewidth
+ \@parboxrestore
+ \protected@edef\@currentlabel{\csname p@\@mpfn\endcsname\@thefnmark}%
+ \color@begingroup
+ \frontmatter@makefntext{%
+ \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox\vadjust{\vskip\z@skip}%
+ }%
+ \color@endgroup
+ \minipagefootnote@drop
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ltx@no@footwarn}
+%
+% \begin{macrocode}
+\def\ltx@no@footnote{%
+ \let\ltx@xfootnote\ltx@no@xfootnote\let\ltx@yfootnote\ltx@no@yfootnote
+ \let\ltx@xfootmark\ltx@no@xfootmark\let\ltx@yfootmark\ltx@no@yfootmark
+ \let\ltx@xfoottext\ltx@no@xfoottext\let\ltx@yfoottext\ltx@no@yfoottext
+}%
+\def\ltx@no@xfootnote[#1]#2{\ltx@no@footwarn\footnote}%
+\def\ltx@no@yfootnote#1{\ltx@no@footwarn\footnote}%
+\def\ltx@no@xfootmark[#1]{\ltx@no@footwarn\footnotemark}%
+\def\ltx@no@yfootmark{\ltx@no@footwarn\footnotemark}%
+\def\ltx@no@xfoottext[#1]#2{\ltx@no@footwarn\footnotetext}%
+\def\ltx@no@yfoottext#1{\ltx@no@footwarn\footnotetext}%
+\def\ltx@no@footwarn#1{%
+ \class@warn{%
+ The \string#1\space command is not legal on the title page;
+ using \string\thanks\space instead might suit you: consult the manual for details%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@abstractheading}
+% The default abstract head; journals will override this procedure.
+% \begin{macrocode}
+\def\frontmatter@abstractheading{%
+ \begingroup
+ \centering\large
+ \abstractname
+ \par
+ \endgroup
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@abstractfont}
+% The default type specification for the body of the abstract.
+% Journals will override this setting.
+% \begin{macrocode}
+\def\frontmatter@abstractfont{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{frontmatter@description}
+% \changes{4.1b}{2008/06/29}{(AO, 455) provide a \texttt{description} environment for the abstract}
+% Within the abstract, the description environment is defined as follows:
+% \begin{macrocode}
+\newenvironment{frontmatter@description}{%
+ \list{}{%
+ \leftmargin\z@
+ \labelwidth\z@
+% \end{macrocode}
+% \begin{verbatim}
+% \itemindent-\leftmargin
+% \end{verbatim}
+% \begin{macrocode}
+ \itemindent\z@
+ \let\makelabel\frontmatter@descriptionlabel
+ }%
+}{%
+ \endlist
+}%
+\def\frontmatter@descriptionlabel#1{%
+ \hspace\labelsep
+ \normalfont\bfseries
+ #1:%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@abstractwidth}
+% The default setting is the full text width;
+% journals can override this setting.
+% \begin{macrocode}
+\def\frontmatter@abstractwidth{\textwidth}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@abstract@produce}
+% This procedure determines how the abstract is incorporated
+% into the title block. We split this out in anticipation
+% of the need to lift the limitation that the abstract not break over pages.
+%
+% If we are in preprint style, we provide an easy pagebreak point immediately above the abstract.
+% This means that the abstract will either fit entirely on the same page as the title block,
+% or it will start a page of its own (which may itself break onto a subsequent page if necessary).
+% \begin{macrocode}
+\def\frontmatter@abstract@produce{%
+ \par
+ \preprintsty@sw{%
+ \do@output@MVL{%
+ \vskip\frontmatter@preabstractspace
+ \vskip200\p@\@plus1fil
+ \penalty-200\relax
+ \vskip-200\p@\@plus-1fil
+ }%
+ }{%
+ \addvspace{\frontmatter@preabstractspace}%
+ }%
+ \begingroup
+ \dimen@\baselineskip
+ \setbox\z@\vtop{\unvcopy\absbox}%
+ \advance\dimen@-\ht\z@\advance\dimen@-\prevdepth
+ \@ifdim{\dimen@>\z@}{\vskip\dimen@}{}%
+ \endgroup
+ \begingroup
+ \prep@absbox
+ \unvbox\absbox
+ \post@absbox
+ \endgroup
+ \@ifx{\@empty\mini@notes}{}{\mini@notes\par}%
+ \addvspace\frontmatter@postabstractspace
+}%
+\appdef\frontmatter@init{\let\mini@notes\@empty}%
+\let\prep@absbox\@empty
+\let\post@absbox\@empty
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@preabstractspace}
+% \begin{macro}{\frontmatter@postabstractspace}
+% Space above and space below abstract in title block
+% \begin{macrocode}
+\def\frontmatter@preabstractspace{.5\baselineskip}
+\def\frontmatter@postabstractspace{.5\baselineskip}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \subsection{Formatting the title block}%
+%
+% \begin{environment}{titlepage}
+% This is \LaTeXe's \classname{article} class version,
+% with modifications.
+% \changes{4.0c}{1999/11/13}{grid changes with ltxgrid}
+% \changes{4.1b}{2008/08/02}{Make the syntax of this package switch optional}%
+% \begin{macrocode}
+\newenvironment{frontmatter@titlepage}{%
+ \twocolumn@sw{\onecolumngrid}{\newpage}%
+ \thispagestyle{titlepage}%
+ \setcounter{page}\@ne
+}{%
+ \twocolumn@sw{\twocolumngrid}{\newpage}%
+ \twoside@sw{}{%
+ \setcounter{page}\@ne
+ }%
+}%
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\maketitle}
+% \changes{4.0d}{1998/01/31}{hookify}
+% Put it all together to format the title block.
+%
+% Gotcha!
+% If you expand \cmd\csname undefined\cmd\endcsname, you change the meaning of \cmd\undefined\ from
+% ``Undefined'' to \cmd\relax.
+% Watchout!
+% \begin{macrocode}
+\def\frontmatter@maketitle{%
+ \@author@finish
+ \title@column\titleblock@produce
+ \suppressfloats[t]%
+% \end{macrocode}
+% Now save some memory.
+% \begin{macrocode}
+ \let\and\relax
+ \let\affiliation\@gobble
+ \let\author\@gobble
+ \let\@AAC@list\@empty
+ \let\@AFF@list\@empty
+ \let\@AFG@list\@empty
+ \let\@AF@join\@AF@join@error
+ \let\email\@gobble
+ \let\@address\@empty
+ \let\maketitle\relax
+ \let\thanks\@gobble
+ \let\abstract\@undefined\let\endabstract\@undefined
+ \titlepage@sw{%
+ \vfil
+ \clearpage
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\maketitle@Hy}
+% \changes{4.1c}{2008/08/04}{Hyperref compatibility: take \cs{maketitle} back.}
+% We provide the means to take back the definition of \cmd\maketitle\ from \classname{hyperref}:
+% we do not need its help in providing hypertext services in the title page.
+% \begin{macrocode}
+\def\maketitle@Hy{%
+ \let\Hy@saved@footnotemark\@footnotemark
+ \let\Hy@saved@footnotetext\@footnotetext
+ \let\@footnotemark\H@@footnotemark
+ \let\@footnotetext\H@@footnotetext
+ \@ifnextchar[%]
+ \Hy@maketitle@optarg
+ {%
+ \HyOrg@maketitle
+ \Hy@maketitle@end
+ }%
+}%
+\appdef\class@documenthook{%
+ \@ifx{\maketitle\maketitle@Hy}{%
+ \class@info{Taking \string\maketitle\space back from hyperref}%
+ \let\maketitle\frontmatter@maketitle
+ }{%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\titleblock@produce}
+% This procedure produces the title block.
+%
+% It effectively executes inside a group
+% and always returns us to vertical mode.
+%
+% Note: we assume that it is OK to set the footnote counter to zero at this point.
+% Is this a safe assumption?
+% \begin{macrocode}
+\def\titleblock@produce{%
+ \begingroup
+% \end{macrocode}
+% \changes{4.0b}{1999/06/20}{Set \cs{footnote} to \LaTeX\ standard version for this scope.}
+% First, we restore the footnote mechanism to its default state,
+% then we customize the way the footnote mark is produced and how it is formatted.
+% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}%
+% \begin{macrocode}
+ \ltx@footnote@pop
+% \end{macrocode}
+% The following three lines establish an independent footnote counter for use in the title block.
+% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}%
+% \begin{macrocode}
+ \def\@mpfn{mpfootnote}%
+ \def\thempfn{\thempfootnote}%
+ \c@mpfootnote\z@
+ \let\@makefnmark\frontmatter@makefnmark
+ \frontmatter@setup
+ \thispagestyle{titlepage}\label{FirstPage}%
+% \end{macrocode}
+% Produce the title:
+% \begin{macrocode}
+ \frontmatter@title@produce
+% \end{macrocode}
+% Produce the author list:
+% \begin{macrocode}
+ \groupauthors@sw{%
+ \frontmatter@author@produce@group
+ }{%
+ \frontmatter@author@produce@script
+ }%
+% \end{macrocode}
+% Produce the dates:
+% \begin{macrocode}
+ \frontmatter@RRAPformat{%
+ \expandafter\produce@RRAP\expandafter{\@date}%
+ \expandafter\produce@RRAP\expandafter{\@received}%
+ \expandafter\produce@RRAP\expandafter{\@revised}%
+ \expandafter\produce@RRAP\expandafter{\@accepted}%
+ \expandafter\produce@RRAP\expandafter{\@published}%
+ }%
+% \end{macrocode}
+% Produce the abstract, PACS, and keywords, and end any paragraph.
+% \changes{4.1c}{2008/08/04}{Produce PACS, keywords only if specified}%
+% \begin{macrocode}
+ \frontmatter@abstract@produce
+ \@ifx@empty\@pacs{}{%
+ \@pacs@produce\@pacs
+ }%
+ \@ifx@empty\@keywords{}{%
+ \@keywords@produce\@keywords
+ }%
+ \par
+ \frontmatter@finalspace
+ \endgroup
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@title@produce}
+% The default formatting procedure for the article title.
+% This procedure should take care of the vertical space below the title.
+%
+% Clients may override this procedure, but it is more likely that they will
+% use the hooks \cmd\frontmatter@title@above, \cmd\frontmatter@title@format, and \cmd\frontmatter@title@below.
+% \changes{4.1b}{2008/08/04}{(AO, 443) PDF Bookmark for title page}%
+% \begin{macrocode}
+\def\toclevel@title{0}%
+\def\frontmatter@title@produce{%
+ \begingroup
+ \frontmatter@title@above
+ \frontmatter@title@format
+ \@title
+ \unskip
+ \phantomsection\expandafter\@argswap@val\expandafter{\@title}{\addcontentsline{toc}{title}}%
+ \@ifx{\@title@aux\@title@aux@cleared}{}{%
+ \expandafter\frontmatter@footnote\expandafter{\@title@aux}%
+ }%
+ \par
+ \frontmatter@title@below
+ \endgroup
+}%
+\appdef\let@mark{\let\\\relax}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@title@above}
+% \begin{macro}{\frontmatter@title@format}
+% \begin{macro}{\frontmatter@title@below}
+% The default values for formatting specifications for the article title.
+%
+% The procedure \cmd\frontmatter@title@above\ should take care of the vertical space above the title;
+% \cmd\frontmatter@title@below\ below.
+% The procedure \cmd\frontmatter@title@format\ should invoke any font switches, etc.
+% that may apply to the title.
+%
+% Journals will override this procedure.
+% \begin{macrocode}
+\def\frontmatter@title@above{}%
+\def\frontmatter@title@format{}%
+\def\frontmatter@title@below{\addvspace{\baselineskip}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Authors and affiliations in superscriptaddress style}
+%
+% \begin{macro}{\frontmatter@author@produce@script}
+% \changes{4.1b}{2008/08/02}{Provide for diagnostics via \cs{frontmatterverbose@sw}}
+% \cmd\frontmatter@author@produce@script\ is an alias for \cmd\frontmatter@author@produce,
+% the procedure that formats the author/affiliation list.
+%
+% In this case, the authors affiliations are being superscripted
+% (class option \classoption{superscriptaddress}).
+%
+% This procedure must ensure that any paragraph that it starts gets ended finally.
+% \changes{4.1i}{2009/10/18}{(AO, 540) More runtime diagnostics via \cs{frontmatterverbose@sw}}
+% \changes{4.1m}{2009/11/20}{(AO, 563) More complete runtime diagnostics via \cs{frontmatterverbose@sw}}
+% \begin{macrocode}
+\def\frontmatter@author@produce@script{%
+ \begingroup
+ \let\@author@present\@author@present@script
+ \frontmatterverbose@sw{\typeout{\string\frontmatter@author@produce@script:}\say\@AAC@list\say\@AFF@list\say\@AFG@list}{}%
+% \end{macrocode}
+% \changes{4.0l}{1998/09/01}{Changes to add collaboration processing, which now means doing comma/and processing on each sublist}
+% When the author/affiliation list \cmd\@AAC@list\ is executed,
+% \cmd\@tempcnt\ counts each author,
+% and
+% \cmd\@tempa\ stores a list of author indices for the current collaboration.
+%
+% Note: this procedure uses \cmd\AU@temp\ to hold a list of author counts for each collaboration.
+% Note: also uses \cmd\@tempcnta\ to communicate between procedures.
+% This usage ot \cmd\@tempcnta\ is OK, because the expansion of \cmd\@AAC@list\ will trigger only the execution of
+% our own procedures.
+% \begin{macrocode}
+ \let\AU@temp\@empty
+ \@tempcnta\z@
+% \end{macrocode}
+%
+% We wish to know how many authors are in each collaboration, for the purposes of \cmd\listcomma\ and \cmd\listand.
+%
+% Here we assign values for the intercollated operators appearing within \cmd\@AAC@list,
+% then execute that macro, registering the authors in each collaboration.
+% Afterwards, clean up by emulating an empty collaboration.
+%
+% The result, stored in \cmd\AU@temp, is a list of brace-delmited tokens, each a number
+% representing the number of authors in that collaboration.
+% \begin{macrocode}
+ \let\AF@opr \@gobble
+ \def\AU@opr{\@author@count\@tempcnta}%
+ \def\CO@opr{\@collaboration@count\AU@temp\@tempcnta}%
+ \@AAC@list
+ \expandafter\CO@opr\@author@cleared
+% \end{macrocode}
+% Next, present the authors and their affiliations, with the collaborations interleaved.
+%
+% We assign values for the intercollated operators appearing within \cmd\@AAC@list.
+% Next, assign \cmd\@listcomma\ based on the number of authors in the first collaboration.
+% Then expand \cmd\@AAC@list.
+%
+% Upon completion, there will be two space tokens following the last author because of \cmd\listand\ processing;
+% remove them, then end the last paragraph.
+%
+% FIXME: this juncture would be a good time to effectively eliminate
+% the unused affiliations in \cmd\@AFF@list.
+% \begin{macrocode}
+ \begingroup
+ \frontmatter@authorformat
+ \let\AF@opr \@affilID@def
+ \let\AU@opr \@author@present
+ \def\CO@opr{\@collaboration@present\AU@temp}%
+ \set@listcomma@list\AU@temp
+ \@AAC@list
+ \unskip\unskip
+ \par
+ \endgroup
+% \end{macrocode}
+% We now list out the affiliations in the order they appeared.
+% \begin{macrocode}
+ \begingroup
+ \frontmatter@above@affiliation@script
+ \let\AFF@opr \@affil@script
+ \@AFF@list
+ \frontmatter@footnote@produce
+ \par
+ \endgroup
+ \endgroup
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@author@count}
+% This version of \cmd\AU@opr\ counts the number of authors it processes.
+% \begin{macrocode}
+\def\@author@count#1{%
+ \advance#1\@ne
+ \@author@gobble
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@collaboration@present}
+% Format a collaboration.
+% Note that we immediately end the paragraph thus begun, because we only support
+% \classoption{superscriptaddress}-style processing.
+%
+% Note also that the execution of the production procedures takes place inside of a group;
+% for reasons of protective programming.
+%
+% Bug note: originally, the number of authors in each collaboration was stored in \cmd\@tempa,
+% but this exposed us to procedures in our production that modified the meaning of \cmd\@tempa.
+%
+% The last action done in this procedure is to assign \cmd\@listcomma\ based on the number of authors in the next collaboration.
+% \begin{macrocode}
+\def\@collaboration@present#1#2#3#4{%
+ \par
+ \begingroup
+ \frontmatter@collaboration@above
+ \@affilID@def{}%
+ \@tempcnta\z@
+ \@author@present{}{(\ignorespaces#3\unskip)}{#4}%
+ \par
+ \endgroup
+ \set@listcomma@list#1%
+}%
+\def\frontmatter@collaboration@above{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@collaboration@count}
+% Simply register each author in this collaboration.
+% Note: \#1 is a \cmd\csname\ to hold the value, \#2 is the \cmd\count\ register holding the count of interest.
+% \begin{macrocode}
+\def\@collaboration@count#1#2{%
+ \appdef@eval#1{\the#2}#2\z@
+ \@author@gobble
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@affilID@def}
+%
+% The \cmd\@affilID@def\ procedure, an alias of \cmd\AF@opr\ used during \cmd\frontmatter@author@produce@script\ processing,
+% memorizes the affiliation in \cmd\@affilID@temp.
+% \begin{macrocode}
+\def\@affilID@def{\def\@affilID@temp}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@affilID@temp}
+%
+% The macro \cmd\@affilID@temp\ is used to communicate between
+% \cmd\doauthor\ and instances of \cmd\AF@opr\ within the author list.
+% \begin{macrocode}
+\let\@affilID@temp\@empty
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\affils@present@script}
+% An alias of \cmd\AFG@opr, this procedure is applied to elements in \cmd\@AFG@list.
+% It builds \cmd\@AFU@list, a list of unique affiliations found within affiliation groups.
+%
+% \changes{4.1a}{2008/06/16}{removed code that had been commented out}
+% \begin{verbatim}
+%\def\affils@present@script#1{%
+% \get@affil#1{}%
+%}%
+%\def\get@affil#1{%
+% \def\@tempa{#1}%
+% \@ifx{\@empty\@tempa}{}{%
+% \@booleanfalse\temp@sw
+% \def\AF@opr{\x@match\@tempa}%
+% \@AFU@list
+% \temp@sw{}{%
+% \appdef\@AFU@list{\AF@opr{#1}}%
+% }%
+% \get@affil
+% }%
+%}%
+% \end{verbatim}
+% \end{macro}
+%
+% \begin{macro}{\affil@present@script}
+% An alias of \cmd\AF@opr, this procedure is applied to \cmd\@AFU@list\ when formatting the affiliations
+% under \classoption{superscriptaddress}.
+% It in turn applies \cmd\affil@script\ to \cmd\@AFF@list, thereby formatting the affiliation
+% associated with this affiliation index.
+%
+% Note: it traverses the \cmd\@AFF@list\ for each entry in the \cmd\@AFU@list, thereby making this
+% portion of code execute in $N^{2}$ time.
+% \changes{4.1a}{2008/06/16}{removed code that had been commented out}
+% \begin{verbatim}
+%\def\affil@present@script#1{%
+% \def\@tempa{#1}%
+% \begingroup
+% \frontmatter@affiliationfont
+% \let\AFF@opr \affil@script
+% \@AFF@list
+% \endgroup
+%}%
+% \end{verbatim}
+% \end{macro}
+%
+% \begin{macro}{\affil@script}
+% Alias of \cmd\AFF@opr, this procedure is applied to \cmd\@AFF@list\ when formatting the affiliations
+% under \classoption{superscriptaddress}.
+% It rejects all entries not matching the affiliation index held in \cmd\@tempa.
+% \begin{macrocode}
+\def\affil@script#1#2#3{%
+ \def\@tempifx{#1}\@ifx{\@tempifx\@tempa}{%
+ \@if@empty{#2}{}{%
+ \par
+ \begingroup
+ \def\@thefnmark{#1}\@makefnmark\ignorespaces
+ #2%
+ \@if@empty{#3}{}{\frontmatter@footnote{#3}}%
+ \par
+ \endgroup
+ }%
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@affil@script}
+% Alias of \cmd\AFF@opr:
+% The affiliations are being formatted in the case
+% where affiliations are being superscripted:
+% make a list out of the affiliations with the numbers printed.
+% Society-specific code can change the formatting
+% by overriding the definition of \cmd\frontmatter@affiliationfont.
+%
+% A client may choose to set \cmd\affil@cutoff\ to either \cmd\@ne\ (the default)
+% or \cmd\tw@. The latter setting will enforce a rule to the effect that
+% if a single affiliation appears on the title page,
+% then no affiliation superscript at all is produced.
+%
+% |#1|---Affiliation ID: a number; zero signifies a \cmd\noaffiliation.
+%
+% |#2|---Collaboration ID
+%
+% |#3|---Affiliation address
+%
+% |#4|---Auxiliary info
+% \begin{macrocode}
+\def\@affil@script#1#2#3#4{%
+% \end{macrocode}
+% If the affiliation is the \cmd\noaffiliation, then we do nothing.
+% \begin{macrocode}
+ \@ifnum{#1=\z@}{}{%
+ \par
+ \begingroup
+ \frontmatter@affiliationfont
+ \@ifnum{\c@affil<\affil@cutoff}{}{%
+ \def\@thefnmark{#1}\@makefnmark
+ }%
+ \ignorespaces#3%
+ \@if@empty{#4}{}{\frontmatter@footnote{#4}}%
+ \par
+ \endgroup
+ }%
+}%
+\let\affil@cutoff\@ne
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@author@present@script}
+% \changes{4.0h}{1998/06/25}{Changes to support groups of affiliations}
+% \changes{4.1n}{2009/11/30}{(AO, 567) Handle \cs{noaffiliation} case}
+% This version of \cmd\AU@opr\ applies to the \classoption{superscriptaddress} class option.
+% Need to add commas between groups
+% of address numbers, which are passed in the macro \cmd\@affilID@temp\ in the form
+% |{3}{4}{7}| if this set of authors is related to addresses, 3, 4 and 7.
+% \begin{macrocode}
+\def\@author@present@script#1#2#3{%
+ \begingroup
+ \gdef\comma@space{\textsuperscript{,\,}}%
+ \doauthor{#2}{#3}{\@affil@present@script}%
+ \endgroup
+ \advance\@tempcnta\m@ne
+}%
+\def\@affilcomma#1#2{%
+ \@ifx{\z@#1}{%
+ \@ifx{\relax#2}{}{%
+ \@affilcomma{#2}%
+ }%
+ }{%
+ #1%
+ \@ifx{\relax#2}{}{%
+ \@ifx{\z@#2}{%
+ \@affilcomma
+ }{%
+ ,\,\@affilcomma{#2}%
+ }%
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@affil@present@script}
+% \begin{macro}{\@affil@present@script@}
+% \changes{4.1n}{2009/11/30}{(AO, 567) Handle punctuation for \classoption{superscriptaddress} style authors' extra information, such as \cs{email}}
+% The \cmd\@affil@present@script\ procedure presents the reference to the affiliations in the case of superscript addresses.
+%
+% The affiliations are presented to \cmd\@affil@present@script@ as a list of brace-delimited tokens, each containing the affiliation ID (a number).
+% The list is terminated by the token \cmd\relax.
+% The macro recurses (via tail recursion) until the terminating token is encountered.
+% Note that an affiliation ID of zero signifies a \cmd\noaffiliation:
+% references to the \cmd\noaffiliation\ are passed over.
+%
+% Upon termination, the affiliations, if any, are produced via \cmd\textsuperscript\ and the appropriate boolean is queued via \cmd\aftergroup.
+% The boolean signifies that a non-trivial affiliation was produced, so that the proper punctuation can be produced.
+% The group in question is that opened and closed by the \cmd\doauthor\ procedure.
+%
+% This procedure uses \cmd\@tempa\ as a scratch register.
+% \begin{macrocode}
+\def\@affil@present@script{%
+ \let\@tempa\@empty
+ \expandafter\@affil@present@script@\@affilID@temp\relax
+}%
+\def\@affil@present@script@#1{%
+ \@ifx{\relax#1}{%
+ \@ifx{\@tempa\@empty}{%
+ \aftergroup\false@sw
+ }{%
+ \textsuperscript{\expandafter\@affilcomma\@tempa\relax\relax}%
+ \aftergroup\true@sw
+ }%
+ }{%
+ \@ifnum{#1=\z@}{}{\appdef\@tempa{{#1}}}%
+ \@affil@present@script@
+ }%
+}%
+\@provide\@author@parskip{\z@skip}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{Authors and affiliations in groupedaddress style}
+%
+% \begin{macro}{\frontmatter@author@produce@group}
+% \changes{4.1b}{2008/08/02}{Provide for diagnostics via \cs{frontmatterverbose@sw}}
+% Alias for \cmd\frontmatter@author@produce when \classoption{groupedaddress} is in effect,
+% the procedure that formats the author/affiliation list.
+%
+% In this case, the authors are being grouped above their shared addresses.
+% How it works: the \cmd\@AFG@list, a list of all unique affiliation groups, is expanded.
+% For each such group, all authors belonging to that group are formatted above the affiliation group.
+% Collaborations are silently passed over.
+%
+% This procedure must ensure that any paragraph that it starts gets ended finally.
+% \changes{4.1i}{2009/10/18}{(AO, 540) More runtime diagnostics via \cs{frontmatterverbose@sw}}
+% \changes{4.1m}{2009/11/20}{(AO, 563) More complete runtime diagnostics via \cs{frontmatterverbose@sw}}
+% \begin{macrocode}
+\def\frontmatter@author@produce@group{%
+ \begingroup
+ \let\@author@present\@author@present@group
+ \frontmatter@authorformat
+ \frontmatterverbose@sw{\typeout{\string\frontmatter@author@produce@group:}\say\@AAC@list\say\@AFF@list\say\@AFG@list}{}%
+ \let\AU@temp\@empty
+ \set@listcomma@list\AU@temp
+ \def\CO@opr{\@collaboration@present\AU@temp}%
+ \let\AFG@opr \affils@present@group
+ \let\@listcomma\relax
+ \@AFG@list
+ \frontmatter@footnote@produce
+ \par
+ \endgroup
+ \frontmatter@authorbelow
+}%
+\@provide\frontmatter@authorbelow{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\affils@present@group}
+% \changes{4.1b}{2008/08/02}{Provide for diagnostics via \cs{frontmatterverbose@sw}}
+% Alias of \cmd\AFG@opr, this procedure is used on every element of
+% \cmd\@AFG@list, the list of unique affiliation groups,
+% when formatting the author/affiliation block:
+% It presents all authors sharing this affiliation group.
+%
+% This procedure is called via the procedure
+% \cmd\frontmatter@author@produce@group, an alias for \cmd\frontmatter@author@produce,
+%
+% Its use pertains to the class options
+% \classoption{groupedaddress}, \classoption{unsortedaddress}, and \classoption{runinaddress}
+% (that is, \cmd\groupauthors@sw\ is true).
+%
+% For each invocation, the entire \cmd\@AAC@list\ is run through (twice),
+% making this process execute in $N^{2}$ time. (Is this really true?)
+% \begin{macrocode}
+\def\affils@present@group#1{%
+% \end{macrocode}
+% Count (using \cmd\@tempcnta) the authors in the author list whose affiliation group
+% matches the argument |#1|.
+%
+% Note that \cmd\AF@temp\ is used as a storage register for the argument
+% of the procedure, for purposes of comparison using \cmd\ifx.
+%
+% Note: here we use \cmd\@tempcnta\ to accumulate the number of authors in the current affiliation set.
+%
+% QUERY: do the value of \cmd\AF@temp\ and \cmd\AF@opr\ need to persist?
+%
+% QUERY: what value does \cmd\AU@opr\ have at this point?
+% ANSWER: the \cmd\@affilID@count\ and \cmd\@affilID@match\ procedures
+% assign meanings to \cmd\AU@opr\ and \cmd\CO@opr\ dynamically.
+% We initialize the two operators to \cmd\@undefined\ so as to catch the
+% pathological cases.
+% \begin{macrocode}
+ \begingroup
+ \def\AF@temp{#1}%
+ \@tempcnta\z@
+ \let\AU@opr \@undefined
+ \let\CO@opr \@undefined
+ \def\AF@opr{\@affilID@count\AF@temp\@tempcnta}%
+ \@AAC@list
+% \end{macrocode}
+%
+% If there are no authors using this affiliation group, skip it.
+% \begin{macrocode}
+ \@ifnum{\@tempcnta=\z@}{}{%
+% \end{macrocode}
+%
+% DPC: If we have a list of length two, need to locally zap a comma.
+% \begin{macrocode}
+ \begingroup
+ \frontmatter@above@affilgroup
+ \set@listcomma@count\@tempcnta
+% \end{macrocode}
+% Run through the author list, presenting (with \cmd\@author@present)
+% those authors whose affiliation matched the given one.
+% \begin{macrocode}
+ \let\AU@opr \@undefined
+ \let\CO@opr \@undefined
+ \def\AF@opr{\@affilID@match\AF@temp}%
+ \@AAC@list
+ \endgroup
+% \end{macrocode}
+% Now that the authors have all been presented, present the affiliations, grouped.
+%
+% Note: \cmd\@tempcnta\ is the number of affiliations for this set of authors.
+% \begin{macrocode}
+ \begingroup
+ \par
+ \frontmatter@above@affiliation
+ \frontmatter@affiliationfont
+ \let\\\frontmatter@addressnewline
+ \@tempcnta\z@
+ \@tfor\AF@temp:=#1\do{%
+ \expandafter\@ifx\expandafter{\expandafter\z@\AF@temp}{}{%
+ \advance\@tempcnta\@ne
+ }%
+ }%
+ \@ifnum{\@tempcnta=\tw@}{%
+ \let\@listcomma\relax
+ }{}%
+ \def@after@address
+ \runinaddress@sw{%
+ }{%
+ \tightenlines@sw{}{%
+% \end{macrocode}
+% The following line determines the space between affilations in grouped mode
+% \begin{macrocode}
+ \parskip\z@
+ }%
+ \appdef\after@address\par
+ }%
+ \let\AFF@opr \@affil@group
+ \do@affil@fromgroup\@AFF@list#1\relax
+ \endgroup
+% \end{macrocode}
+% End of branch handling authors.
+% \begin{macrocode}
+ }%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \par
+ \endgroup
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\def@after@address}
+% \begin{macro}{\def@after@address@empty}
+% \changes{4.1c}{2008/08/04}{Parametrize the production after the address}%
+%
+% Each of these procedures assigns a meaning to \cmd\after@address, the first
+% a useful default, the second a nil.
+% A society or journal substyle may define it according to its own requirements.
+% \begin{macrocode}
+\def\def@after@address{\def\after@address{\@listcomma\ \@listand}}%
+\def\def@after@address@empty{\let\after@address\@empty}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@affilID@count}
+% \begin{macro}{\@affilID@match}
+%
+% The control sequence name \cmd\AF@opr\ is placed in the
+% author/affiliation list (\cmd\@AAC@list) for each (new) affiliation, with that affiliation as its argument.
+%
+% The control sequence name \cmd\AF@opr\ is an alias of a procedure
+% to count the number of authors at a given affiliation (\cmd\@affilID@count)
+% or to present the given authors (\cmd\@affilID@match).
+% These two procedures are executed when formatting under the \classoption{groupedaddress} class option.
+% \begin{macrocode}
+\def\@affilID@count#1#2#3{%
+ \def\@tempifx{#3}%
+ \@ifx{\@tempifx#1}{%
+ \def\AU@opr{\@author@count#2}%
+ }{%
+ \let\AU@opr \@author@gobble
+ }%
+ \let\CO@opr \@collaboration@gobble
+}%
+\def\@affilID@match#1#2{%
+ \def\@tempifx{#2}%
+ \@ifx{\@tempifx#1}{%
+ \let\AU@opr \@author@present
+ }{%
+ \let\AU@opr \@author@gobble
+ }%
+ \let\CO@opr \@collaboration@gobble
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\do@affil@fromgroup}
+% Executes iteratively:
+% selects the next address ID to print,
+% and then re-execute the list of addresses to print the text of that address.
+%
+% Note: an argument of \cmd\relax\ breaks out of this iteration,
+% while an argument of \cmd\z@\ (\cmd\noaffiliation) is a no-op.
+%
+% Note: we have created an $N^{2}$ computing process.
+% FIXME: can use hashing instead, you know.
+% \begin{macrocode}
+\def\do@affil@fromgroup#1#2{%
+ \@ifx{\relax#2}{}{%
+ \count@#2\relax
+ \@ifnum{\z@=\count@}{}{#1}%
+ \do@affil@fromgroup#1%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@affil@group}
+% The alias of \cmd\AFF@opr\ when the list \cmd\@AFF@list\
+% is executed by \cmd\do@affil@fromgroup\ (\classoption{groupedaddress}):
+% Print the address if its number matches \cmd\count@\ (value set by \cmd\do@affil@fromgroup).
+%
+% Note that we detect a \cmd\noaffiliation\ here by the affiliation address being
+% the same as the expansion of \cmd\blankaffiliation.
+%
+% \changes{4.1d}{2008/10/17}{(AO, 410) compare \cs{@tempa} to \cs{blankaffiliation}.}%
+%
+% I made a mistake when coding the comparison to \cmd\blankaffiliation:
+% it originally read \cmd\@ifx\{\#3\cmd\blankaffiliation\}.
+% This is obviously wrong once you think twice.
+% \begin{macrocode}
+\def\@affil@group#1#2#3#4{%
+ \@ifnum{#1=\count@}{%
+ \def\@tempa{#3}%
+ \@ifx{\@tempa\blankaffiliation}{}{%
+ #3%
+ \@if@empty{#4}{}{%
+ \frontmatter@footnote{#4}%
+ }%
+ \after@address
+ }%
+ \advance\@tempcnta\m@ne
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@author@present@group}
+% \begin{macro}{\@affil@present@group}
+% \changes{4.0d}{1998/01/31}{\cs{comma@space}}
+% This version of \cmd\AU@opr\ applies to the \classoption{groupedaddress} class option and its ilk.
+% Traverse the list calling the \cmd\doauthor\ hook on each author.
+%
+% The third argument of \cmd\doauthor\ fulfills the requirement that it
+% queue up a boolean via \cmd\aftergroup.
+% \begin{macrocode}
+\def\@author@present@group#1#2#3{%
+ \gdef\comma@space{\gdef\comma@space{\textsuperscript{,\,}}}%
+ \doauthor{#2}{#3}{\@affil@present@group}%
+ \advance\@tempcnta\m@ne
+}%
+\def\@affil@present@group{%
+ \aftergroup\false@sw
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macro}{\@pacs@produce}
+% PACS, keywords and dates.
+% \changes{4.0d}{1998/01/31}{PACS boxed to width of abstract}
+% \changes{4.0b}{1999/06/20}{Separate option now controls production}
+% \changes{4.0e}{2000/09/20}{Warn if no production}
+% \begin{macrocode}
+\def\@pacs@produce#1{%
+ \showPACS@sw{%
+ \begingroup
+ \frontmatter@PACS@format
+ \@pacs@name#1\par
+ \endgroup
+ }{%
+ \@if@empty{#1}{}{%
+ \class@warn{\PACS@warn}%
+ }%
+ }%
+}%
+\def\PACS@warn{If you want your PACS to appear in your output, use document class option showpacs}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@keywords@produce}
+% \changes{4.0e}{2000/09/20}{Keywords on same footing as PACS}
+% \begin{macrocode}
+\def\@keywords@produce#1{%
+ \showKEYS@sw{%
+ \begingroup
+ \frontmatter@keys@format
+ \@keys@name#1\par
+ \endgroup
+ }{%
+ \@if@empty{#1}{}{%
+ \class@warn{If you want your keywords to appear in your output, use document class option showkeys}%
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@footnote@produce@footnote}
+% \begin{macro}{\frontmatter@footnote@produce@endnote}
+% Produce any footnotes to appear at the bottom of the title page.
+%
+% If frontmatter footnotes have been redirected to the bibliography, this will be a no-op.
+% ref.: \cmd\present@bibnote.
+% \begin{macrocode}
+\def\frontmatter@footnote@produce@footnote{%
+ \let\@TBN@opr\present@FM@footnote
+ \@FMN@list
+ \global\let\@FMN@list\@empty
+}%
+% \end{macrocode}
+% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}%
+% \begin{macrocode}
+\def\present@FM@footnote#1#2{%
+ \begingroup
+ \csname c@\@mpfn\endcsname#1\relax
+ \def\@thefnmark{\frontmatter@thefootnote}%
+ \frontmatter@footnotetext{#2}%
+ \endgroup
+}%
+\def\frontmatter@footnote@produce@endnote{%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \section{Package defaults}
+%
+% \begin{macro}{\title@column}
+% \begin{macro}{\preprintsty@sw}
+% \begin{macro}{\collaboration@sw}
+% \begin{macro}{\frontmatter@footnote@produce}
+% \begin{macro}{\do@output@MVL}
+% \begin{macro}{\comma@space}
+% We give meanings to the Booleans and other macros that a client document class would
+% set on our behalf.
+% \begin{macrocode}
+\appdef\frontmatter@init{%
+ \@ifxundefined\title@column {\let\title@column\@empty}{}%
+ \@ifxundefined\preprintsty@sw {\@booleanfalse\preprintsty@sw}{}%
+ \@ifxundefined\frontmatter@footnote@produce{\let\frontmatter@footnote@produce\frontmatter@footnote@produce@footnote}{}%
+ \@ifxundefined\do@output@MVL {\let\do@output@MVL\@firstofone}{}%
+ \@ifxundefined\comma@space {\let\comma@space\@empty}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@thefootnote}
+% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}%
+% In the title block, the footnote symbol (used for alternate affiliation and sundry)
+% is a \cmd\@fnsymbol\ or a lowercase letter, as selected by a boolean.
+% The society or journal may override this definition.
+% \begin{macrocode}
+\def\frontmatter@thefootnote{%
+ \altaffilletter@sw{\@alph}{\@fnsymbol}{\csname c@\@mpfn\endcsname}%
+}%
+\@ifx{\altaffilletter@sw\@undefined}{\@booleantrue\altaffilletter@sw}{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@makefnmark}
+% The default procedure for setting the footnote mark within the frontmatter.
+% A client may override this procedure.
+% \begin{macrocode}
+\def\frontmatter@makefnmark{%
+ \@textsuperscript{%
+ \normalfont\@thefnmark
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@makefntext}
+% This procedure is used when setting footnotes within the title block.
+%
+% Note that we are \classname{hyperref} friendly: we invoke \cmd\Hy@raisedlink\
+% so that this footnote becomes a hypertext anchor. If \classname{hyperref} is
+% not loaded, then \classname{ltxutil} has our act covered via some stubs.
+%
+% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}%
+% \begin{macrocode}
+\long\def\frontmatter@makefntext#1{%
+ \parindent 1em
+ \noindent
+ \Hy@raisedlink{\hyper@anchorstart{frontmatter.\expandafter\the\csname c@\@mpfn\endcsname}\hyper@anchorend}%
+ \@makefnmark
+ #1%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@setup}
+% The default type specification for the title page.
+% Clients will override this definition.
+% \begin{macrocode}
+\def\frontmatter@setup{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@RRAPformat}
+% \begin{macro}{\punct@RRAP}
+% \begin{macro}{\produce@RRAP}
+% The procedure \cmd\frontmatter@RRAPformat\ is the formatting procedure
+% for the ``Received, Revised, etc.'' block on the title page.
+% The macro \cmd\punct@RRAP\ produces the punctuation between the entries.
+% Clients will override these two definitions.
+%
+% The procedure \cmd\produce@RRAP\ is fairly general, and should be used by most
+% journal substyles.
+%
+% The procedure \cmd\frontmatter@RRAP@format\ will be overridden by the journal.
+% \begin{macrocode}
+\def\frontmatter@RRAPformat#1{%
+ \removelastskip
+ \begingroup
+ \frontmatter@RRAP@format
+ #1\par
+ \endgroup
+}%
+\def\punct@RRAP{; }%
+\def\produce@RRAP#1{%
+ \@if@empty{#1}{}{%
+ \@ifvmode{\leavevmode}{\unskip\punct@RRAP\ignorespaces}%
+ #1%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@authorformat}
+% The default type specification for the author list.
+% Clients will override this definition.
+% For one alternative, see the \classname{revtex4} document class.
+% \begin{macrocode}
+\def\frontmatter@authorformat{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@above@affilgroup}
+% The default amount of space above an affiliation group
+% (in a \cmd\affils@present@group\ production).
+% Clients will override this definition.
+% \begin{macrocode}
+\def\frontmatter@above@affilgroup{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@above@affiliation}
+% \begin{macro}{\frontmatter@above@affiliation@script}
+% The \cmd\frontmatter@above@affiliation\ is the amount of space above affiliations in the \classoption{groupedaddress}
+% style, and \cmd\frontmatter@above@affiliation@script\ is that for \classoption{superscriptaddress}.
+% Clients will override this definition.
+% For one alternative, see the \classname{revtex4} document class.
+% \begin{macrocode}
+\def\frontmatter@above@affiliation{}%
+\def\frontmatter@above@affiliation@script{}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@affiliationfont}
+% The default type specification for the affiliation.
+% Clients will override this definition.
+% For one alternative, see the \classname{revtex4} document class, where
+% several alternative definitions are made.
+% \begin{macrocode}
+\def\frontmatter@affiliationfont{\itshape\selectfont}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@RRAP@format}
+% The default type specification for the dates.
+% Clients will override this definition.
+% \begin{macrocode}
+\def\frontmatter@RRAP@format{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@PACS@format}
+% Specify the formatting of the title page PACS statement.
+%
+% Journals will override.
+% \begin{macrocode}
+\def\frontmatter@PACS@format{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@keys@format}
+% Specify the formatting of the title page keywords statement.
+%
+% Journals will override.
+% \begin{macrocode}
+\def\frontmatter@keys@format{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@finalspace}
+%
+% \begin{macrocode}
+\def\frontmatter@finalspace{\addvspace{18\p@}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@addressnewline}
+% \changes{4.0h}{1998/06/25}{new hook}
+% The definition of \cmd\\\ for address handling. Default puts all the `lines'
+% on a run-in line, separated by comma and space.
+% DPC: was \newline space between lines of addresss.
+% \begin{macrocode}
+\def\frontmatter@addressnewline{%
+ \@ifhmode{\skip@\lastskip\unskip\unpenalty\break\hskip\skip@}{}%
+ % was: \vskip-.5ex
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\frontmatter@preabstractspace}
+% \begin{macro}{\frontmatter@postabstractspace}
+% Space above and space below abstract in title block
+% \begin{macrocode}
+\def\frontmatter@preabstractspace{5.5\p@}
+\def\frontmatter@postabstractspace{6.5\p@}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\aftermaketitle@chk}
+% Error-checking code.
+% \begin{macrocode}
+\def\aftermaketitle@chk#1{%
+ \@ifx{\maketitle\relax}{%
+ \class@err{\protect#1 must be used before \protect\maketitle}%
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ps@titlepage}
+% Default page style for title page.
+% Journals will override this procedure.
+% \begin{macrocode}
+\def\ps@titlepage{\ps@empty}%
+% \end{macrocode}
+% \end{macro}
+%
+%FIXME: there is a limitation to the default meaning of
+% \cmd\@startpage: the label ``FirstPage'' is only
+% defined if the document has a \cmd\maketitle\ command.
+%
+% \begin{macrocode}
+\def\volumeyear#1{\gdef\@volumeyear{#1}}%
+\def\@volumeyear{}%
+\def\volumenumber#1{\gdef\@volumenumber{#1}}%
+\def\@volumenumber{}%
+\def\issuenumber#1{\gdef\@issuenumber{#1}}%
+\def\@issuenumber{}%
+\def\eid#1{\gdef\@eid{#1}}%
+\def\@eid{}%
+%
+\def\startpage#1{\gdef\@startpage{#1}\c@page#1\relax}%
+\def\@startpage{\pageref{FirstPage}}%
+\def\endpage#1{\gdef\@endpage{#1}}%
+\def\@endpage{\pageref{LastPage}}%
+% \end{macrocode}
+%
+%
+% \subsection{Printing out the ``list-of'' elements}%
+%
+% FIXME: The \cmd\appendix@toc\ procedure should change the meaning
+% of \cmd\l@section\ so that the \cmd\section s can be appropriately formatted,
+% reflecting their status as appendices.
+%
+% \begin{macrocode}
+\def\print@toc#1{%
+ \begingroup
+ \expandafter\section
+ \expandafter*%
+ \expandafter{%
+ \csname#1name\endcsname
+ }%
+ \let\appendix\appendix@toc
+ \@starttoc{#1}%
+ \endgroup
+}%
+\def\appendix@toc{}%
+% \end{macrocode}
+%
+% \begin{macro}{\Dated@name}
+% \begin{macro}{\Received@name}
+% \begin{macro}{\Revised@name}
+% \begin{macro}{\Accepted@name}
+% \begin{macro}{\Published@name}
+% These strings are used in the \cmd\date, et al. commands.
+% \begin{macrocode}
+\def\Dated@name{Dated }%
+\def\Received@name{Received }%
+\def\Revised@name{Revised }%
+\def\Accepted@name{Accepted }%
+\def\Published@name{Published }%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \changes{4.1g}{2009/10/05}{(AO, 539) Robustify \cs{class@warn} against TOC processing}%
+% Two commands require robustifying against harsh treatment when TOC entries are written out.
+% Note that \cmd\class@warn\ is not user-level markup, but crops up when
+% the \cmd\title\ command is missing from the document.
+% \begin{macrocode}
+\appdef\robustify@contents{%
+ \let\thanks\@gobble\let\class@warn\@gobble
+ \def\begin{\string\begin}\def\end{\string\end}%
+}%
+% \end{macrocode}
+%
+% \subsection{Syntax switch}%
+% \changes{4.1b}{2008/08/02}{Make the syntax of this package switch optional}%
+%
+% Shall we take over the syntax of \LaTeX?
+% By default, Yes, unless the Boolean below has already been defined.
+% In the package version, this is controlled by an option;
+% in the kernel version, the Boolean remains undefined.
+%
+% \cmd\maketitle\ presents a complication. If this code will execute under
+% \classname{ltxgrid}, then its version of the procedure will do fine.
+%
+% As a package, under \classname{article}, things are different.
+% In this case, what should be done depends upon \cmd\if@titlepage.
+% If true, then just execute \cmd\maketitle\ as it stands.
+% If false, then the \classname{article} class has defined its wrapper
+% procedure, and we should take over the meaning of \cmd\@maketitle\ instead.
+%
+% Here is a list of the commands defined by this package that potentially override
+% those of standard \LaTeX:
+% \cmd\frontmatter@title,
+% \cmd\frontmatter@author,
+% \cmd\frontmatter@and,
+% \cmd\frontmatter@thanks,
+% \cmd\frontmatter@date,
+% \env{frontmatter@abstract},
+% \env{frontmatter@titlepage},
+% \cmd\frontmatter@maketitle.
+%
+% The following code will perform that override, given the appropriate state of the Boolean.
+% \begin{macrocode}
+\@ifxundefined\frontmatter@syntax@sw{\@booleantrue\frontmatter@syntax@sw}{}%
+\frontmatter@syntax@sw{%
+ \let\title \frontmatter@title
+ \let\author \frontmatter@author
+ \let\date \frontmatter@date
+ \@ifxundefined\@maketitle{%
+ \let\maketitle \frontmatter@maketitle
+ \@booleantrue \titlepage@sw
+ }{%
+ \let\@maketitle \frontmatter@maketitle
+ \prepdef\maketitle\@author@finish
+ }%
+ \let\noaffiliation \frontmatter@noaffiliation
+ \let\thanks@latex \thanks
+ \let\thanks \frontmatter@thanks
+ \let\and@latex \and
+ \let\and \frontmatter@and
+ \let@environment{titlepage}{frontmatter@titlepage}%
+ \let@environment{abstract}{frontmatter@abstract}%
+}{%
+ \let\noaffiliation\@empty
+}%
+% \end{macrocode}
+%
+% \subsection{End of the \file{ltxfront} kernel}
+% The kernel portion of the \classname{ltxfront} package is complete.
+% \begin{macrocode}
+%</kernel>
+% \end{macrocode}
+%
+% \subsection{Remainder of the \classname{ltxfront} package}
+%
+% Include any code here that ought to be incorporated into the package,
+% but should not be part of the kernel.
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \begin{macrocode}
+% \end{macrocode}
+% Define formatting as like as possible to the article class.
+% Comands that prepare for \cmd\maketitle: \cmd\author, \cmd\title, \cmd\date.
+%
+% Argument of the above three may contain \cmd\\ and \cmd\thanks; argument of \cmd\author may contain \cmd\and.
+% The \cmd\\ may still work fine; \cmd\and\ will be ignored (warning);
+% \cmd\thanks\ even though it should not reside in the argument, will work.
+%
+% An explicit \cmd\footnote should be treated as if it were \cmd\thanks.
+%
+% \begin{verbatim}
+% \@maketitle: \frontmatter@footnote@produce
+% \end{verbatim}
+% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}%
+%
+% \begin{macrocode}
+\def\thanks@latex#1{%
+ \footnotemark
+ \expandafter\expandafter
+ \expandafter\gappdef
+ \expandafter\expandafter
+ \expandafter\@thanks
+ \expandafter\expandafter
+ \expandafter{%
+ \expandafter\expandafter
+ \expandafter\footnotetext
+ \expandafter\expandafter
+ \expandafter[%
+ \expandafter\the\csname c@\@mpfn\endcsname]{#1}}%
+}%
+\@booleanfalse\altaffilletter@sw
+\@if@sw\if@titlepage\fi{\@booleantrue}{\@booleanfalse}\titlepage@sw
+\def\frontmatter@title@above{\newpage\null\vskip2em\relax}%
+\def\frontmatter@title@format{\centering\LARGE\let\thanks\thanks@latex}%
+\def\frontmatter@title@below{\vskip1.5em\relax}%
+\def\frontmatter@authorformat{\centering\large\advance\baselineskip\p@\parskip11.5\p@\let\thanks\thanks@latex\let\and\and@space}%
+\def\frontmatter@authorbelow{\vskip 1em\relax}%
+\def\frontmatter@above@affiliation{}%
+\def\frontmatter@above@affiliation@script{}%
+\def\frontmatter@affiliationfont{\centering\itshape}%
+\def\frontmatter@RRAP@format{\centering\large}%
+\def\frontmatter@preabstractspace{1.5em}%
+% \end{macrocode}
+% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}%
+% \begin{macrocode}
+\long\def\frontmatter@footnotetext{%
+ \expandafter\expandafter
+ \expandafter\footnotetext
+ \expandafter\expandafter
+ \expandafter[%
+ \expandafter\the\csname c@\@mpfn\endcsname]%
+}%
+\def\and@space{\\}%
+\def\andname{and}%
+% \end{macrocode}
+% Implement the feature of the article class whereby there is a default \cmd\@date, left over
+% from the \LaTeX\ kernel.
+% This package does not have a default date. The user must put in an explicit command, like
+% \cmd\date\arg{\cmd\today}, which will retore \LaTeX's default behavior.
+%
+% What if the abstract environment falls after the \cmd\maketitle\ command?
+% The environment will be undefined; the user will have to deal with this.
+% \begin{macrocode}
+% \end{macrocode}
+% End of the package.
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+% \Finale
+% %Here ends the programmer's documentation.
+% \endinput
+%
+\endinput
+%%EOF