summaryrefslogtreecommitdiff
path: root/obsolete/macros/latex/contrib/revtex4-0/revtex4.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'obsolete/macros/latex/contrib/revtex4-0/revtex4.dtx')
-rw-r--r--obsolete/macros/latex/contrib/revtex4-0/revtex4.dtx8728
1 files changed, 8728 insertions, 0 deletions
diff --git a/obsolete/macros/latex/contrib/revtex4-0/revtex4.dtx b/obsolete/macros/latex/contrib/revtex4-0/revtex4.dtx
new file mode 100644
index 0000000000..417e2e2d8b
--- /dev/null
+++ b/obsolete/macros/latex/contrib/revtex4-0/revtex4.dtx
@@ -0,0 +1,8728 @@
+% \iffalse
+% ****** Start of file revtex4.dtx ****** %
+%
+% This file is part of the APS files in the REVTeX 4 distribution.
+% For version number, search on the string "%FileInfo"
+%
+% First revision by David Carlisle,
+% later versions by Arthur Ogawa.
+%
+% Copyright (c) 2000 The American Physical Society.
+% http://publish.aps.org/revtex4/
+% mailto:revtex@aps.org
+%
+%
+% See the REVTeX 4 README file for restrictions and more information.
+% \fi
+% \iffalse
+%<*driver>
+ \ProvidesFile{revtex4.dtx}
+%</driver>
+%<class-pre|aps|rmp>\NeedsTeXFormat{LaTeX2e}[1996/12/01]
+%<class-pre>\ProvidesClass{revtex4}
+%<aps>\ProvidesFile{aps.rtx}
+%<rmp>\ProvidesFile{rmp.rtx}
+%<10pt>\ProvidesFile{10pt.rtx}
+%<11pt>\ProvidesFile{11pt.rtx}
+%<12pt>\ProvidesFile{12pt.rtx}
+%<revsymb&!class-pre>\ProvidesPackage{revsymb}
+%<driver>\ProvidesFile{revtex.drv}
+%<*!class-pst>
+ [2020/09/30 v4.0a (http://publish.aps.org/revtex4/ for documentation)]%FileInfo
+%</!class-pst>
+%<*driver>
+\listfiles
+\documentclass{ltxdoc}
+\RequirePackage{ltxdocext}%
+\let\url\undefined
+\RequirePackage[colorlinks=true,linkcolor=blue]{hyperref}%
+\expandafter\ifx\csname package@font\endcsname\relax\else
+ \expandafter\expandafter
+ \expandafter\RequirePackage
+ \expandafter\expandafter
+ \expandafter{\csname package@font\endcsname}%
+\fi
+\CodelineIndex\EnableCrossrefs
+\begin{document}
+\gdef\lquote{`}\gdef\rquote{'}%
+%{\tracingall\showlists}
+\DocInput{revtex4.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \GetFileInfo{revtex4.dtx}
+%
+% \title{The \classname{revtex4} document class of the American Physical Society}
+% \author{Arthur Ogawa%
+% \thanks{First revision by David Carlisle}%
+% }%
+% \date{Version \fileversion, dated \filedate}%
+% \newcommand\revtex{REV\TeX}
+%
+% \maketitle
+%
+% This file embodies the implementation of the APS \revtex\ 4 document class
+% for electronic submissions to journals.
+%
+% The distribution point for this work is
+% \url{http://publish.aps.org/revtex4/},
+% which contains fully unpacked, prebuilt runtime files and documentation.
+%
+% \tableofcontents
+%
+% \section{Using \protect\revtex}
+%
+% The file \file{README} has retrieval and installation information.
+%
+% User documentation is presented separately in \file{revguide.tex}.
+%
+% The file \file{template.aps} is a boilerplate file.
+%
+% \StopEventually{}
+%
+% \changes{v4.a}{1998/01/16}
+% {Initial version}
+% \changes{v4.0beta 2}{1999/06/20}
+% {First modifications by Arthur Ogawa (mailto:ogawa@teleport.com)}
+% \changes{v4.0beta 3}{1999/11/13}
+% {New ltxgrid-based code, other bug fixes}
+% \changes{v4.0beta 4}{2000/05/10}
+% {More features and bug fixes: compatability with longtable and array packages.
+% Now certainly incompatible with multicol.}
+% \changes{v4.0beta 5}{2000/11/14}
+% {Bug fixes and minor new features: title block affiliations can have ancillary data, just like authors;
+% clearpage processing revamped, with floats staying in order; widetext ornaments.}
+% \changes{v4.0beta 6}{2001/02/13}
+% {Last bug fixes before release.}
+%
+% \section{Overview}%
+% \revtex\ is a \LaTeXe\ document class, aomewhat like a hybrid of
+% the standard \LaTeX\ \classname{book} and \classname{article} classes.
+%
+% Certain packages are (should be) loaded by this class in any case:
+% \classname{amssymb}, \classname{amsmath}, \classname{bm}, \classname{natbib}.
+%
+% Certain packages are automatically loaded by this class
+% when a corresponding class option has been invoked:
+%
+% \begin{tabular}{ll}
+% \textbf{\revtex\ option}&\textbf{package}\\
+% \classoption{amsfonts}&\classname{amsfonts}\\
+% \classoption{amssymb}&\classname{amssymb}\\
+% \classoption{aps}&\classname{overcite}\\
+% \end{tabular}
+%
+% Certain other packages are to be loaded by the
+% document through explicit use of \cmd\usepackage.
+% Some mentioned in the user documentation are
+% \classname{graphicx}, \classname{longtable},
+% and \classname{bm}.
+%
+% Certain commonly used packages are known to be incompatible with
+% \revtex, among them \classname{multicol} and \classname{cite}.
+% If such a package is found to be loaded, \revtex\ issues an error message
+% and halts the job.
+% Halting might be considered severe punishment for loading an incompatible
+% package, but if we were to proceed, an even weirder error might be encountered
+% further down the road.
+%
+% This document class implements the substyle: a set of mutually
+% exclusive class options that, in this case, allow the
+% document class to address multiple societies.
+% It also implements a sub-substyle, giving the
+% journal of the given society.
+% The only society currently implemented is \classoption{aps},
+% however, code is in place for another society, the \classoption{osa}.
+%
+% FIXME: should always load the \classname{graphicx} package.
+%
+% QUERY: since \classname{amsfonts} and \classname{amssymb} extend
+% syntax, why not load them in any case?
+%
+% QUERY: if you say \cmd\documentclass|[prb,osa]{revtex4}|, then
+% the value of \cmd\@society\ will be wrong, or? Fixed.
+%
+% Certain events occur at \cmd\AtEndOfClass\ time:
+% \begin{enumerate}
+% \item
+% Optionally read in packages
+% \classname{amsfonts}, \classname{amssymb}.
+% \item
+% Read in society substyle \file{.rtx} file.
+% \item
+% Read in type size \file{.rtx} file.
+% \item
+% Read in the job's style file, the \file{.rty} file.
+% \item
+% Define things based on \cmd\secnumarabic@sw.
+% \item
+% Install procedures to execute at the very end of the class's
+% \cmd\AtBeginDocument\ processing, such as
+% \begin{enumerate}
+% \item
+% closing out the page grid
+% \item
+% putting out the LastPage label.
+% \item
+% issuing a \cmd\bibliographystyle\ command, based on the value set
+% by the society substyle.
+% \item
+% setting default values for parameters used in the document.
+%FIXME: differentiate between class's parameters that can wait until
+% they are used in the document, and parameters that are used at \cmd\AtBeginDocument\ time.
+% \end{enumerate}
+% \item
+% Install procedures to execute the very last at \cmd\AtEndDocument\ time,
+% such as the \cmd\clearpage\ processing.
+% \end{enumerate}
+%
+% Certain events are optionally scheduled for \cmd\AtBeginDocument\ time:
+% \begin{enumerate}
+% \item
+% Setting default values for the Booleans and for other procedures used in formatting.
+% \item
+% In response to class options options, adjusting parameters and procedures used in formatting.
+% \item
+% Implementing the \classoption{eqsecnum} option, if required.
+% \item
+% Setting the state engine for data commands.
+% \item
+% Memorizing procedures for later use.
+% \item
+% Setting type size and area, for use by later calculations.
+% \end{enumerate}
+%
+% Certain events are scheduled for \cmd\class@enddocumenthook\ time:
+% \begin{enumerate}
+% \item
+% Print out the migrated floats or the end notes, if needed.
+% \item
+% Close out the page grid.
+% \item
+% Label the last page of the document
+% \item
+% (\classname{natbib}) prepare to read in the \file{.aux} file.
+% \end{enumerate}
+%
+%
+% \section{The installer file}
+% We include here a reference copy of the installer file, \file{revtex4.ins}.
+% It is not intended that one actually generate that file using \file{docstrip}
+% via the revtex4 installer file, because that would involve overwriting the
+% file that \TeX\ is typesetting. Instead, the installer file is provided
+% pre-generated.
+%
+% For the most part, the installer is simple: it generates \file{revtex4.cls} and
+% a collection of \file{.rtx} files from \file{revtex4.dtx}.
+%
+% However, the process of generating \file{revtex4.cls} involves the incorporation
+% of portions of two of the \file{ltx} series of files, \file{ltxutil.dtx},
+% and \file{ltxgrid.dtx}. The former is a collection of macro definitions that
+% serve as the lowest level of extensions to \LaTeX, the latter implements
+% an alternative output routine and page gridding mechanism that provides for
+% multicolumn page layouts, but without the sorry limitations of the
+% \LaTeX\ required package, \classname{multicol}, and is also compatible with
+% the \classname{longtable} package (which \classname{multicol} is not).
+% \begin{macrocode}
+%<*ins>
+% This file requires docstrip version 2.4 or higher available from
+% ftp://ctan.tug.org/tex-archive/macros/latex/unpacked/docstrip.tex
+\input docstrip
+\preamble
+
+This file is part of the APS files in the REVTeX 4 distribution.
+For the version number, search on the string %FileInfo
+
+Copyright (c) 2000 The American Physical Society.
+http://publish.aps.org/revtex4/
+mailto:revtex@aps.org
+
+Maintained by Arthur Ogawa (mailto:ogawa@teleport.com)
+under contract to the American Physical Society.
+
+See the REVTeX 4 README file for restrictions and more information.
+
+\endpreamble
+\keepsilent
+\askforoverwritefalse
+\generate{%
+ \file{revtex4.cls}{%
+ \from{revtex4.dtx}{class-pre}%
+ \from{ltxutil.dtx}{ltxutil-krn}%
+ \from{ltxgrid.dtx}{ltxgrid-krn}%
+ \from{textcase.dtx}{package}%
+ \from{revtex4.dtx}{class-pst}%
+ }%
+ \file{aps.rtx}{\from{revtex4.dtx}{aps}}%
+ \file{rmp.rtx}{\from{revtex4.dtx}{rmp}}%
+ \file{10pt.rtx}{\from{revtex4.dtx}{10pt}}%
+ \file{11pt.rtx}{\from{revtex4.dtx}{11pt}}%
+ \file{12pt.rtx}{\from{revtex4.dtx}{12pt}}%
+ \file{revsymb.sty}{\from{revtex4.dtx}{revsymb}}%
+}%
+\endbatchfile
+%</ins>
+% \end{macrocode}
+%
+%
+% \section{Writing journal-specifc extensions to \revtex}
+%
+% With this version of \revtex, we introduce a somewhat different
+% scheme for adapting \revtex\ to the needs of a specific journal.
+%
+% To create a journal substyle, you create new class options in
+% \revtex\ for the society, say \classoption{osa}, and any of that society's journals,
+% one of which is, say, \classoption{josaa},
+% using the code for the APS as a guide.
+% In particular, each of your new options should separately define \cmd\@society\
+% and \cmd\@journal. That for the former will be the same for
+% all options relating to a particular society.
+%
+% Then, for the society, you create a corresponding \file{.rtx}
+% file, in our case \file{osa.rtx}.
+% Within that file, you override procedures and parameter assignments as you see fit.
+% Ideally they will be generally applicable to all of that society's
+% journals (see the file \file{aps.rtx} for a realization of this scheme).
+% Also within that file, you include a
+% section of code for each journal, that for josaa looks like:
+% \begin{verbatim}
+% \@ifx{\@journal\journal@josaa}{%
+% <code specific to the josaa>
+% }{}%
+% \end{verbatim}
+%
+% Thus far, the scheme is similar to that used in \revtex\ 3.1.
+% However, the new scheme does differ from the old in that
+% the \file{.rtx} file should define no syntactical extensions
+% to \revtex.
+%
+% \section{The \classname{revtex4} Document Class}
+%
+% \begin{macrocode}
+%<*class-pre>
+\def\class@name{revtex4}%
+% \end{macrocode}
+%
+% Print a banner in the log:
+% \begin{macrocode}
+\GenericInfo{}{\space
+ Copyright (c) 2001 The American Physical Society.^^J
+ mailto:revtex@aps.org^^J
+ Licensed under the LPPL:^^Jhttp://www.ctan.org/tex-archive/macros/latex/base/lppl.txt^^J
+ Arthur Ogawa <ogawa@teleport.com>^^J
+ Based on work by David Carlisle <david@dcarlisle.demon.co.uk>%
+ \@gobble
+}%
+% \end{macrocode}
+%
+% \subsection{Compatability Processing}
+%
+% If the document has \cmd\documentstyle|{revtex4}|,
+% then, instead of attempting to run in compatability mode,
+% just complain and exit.
+% \changes{v4.0beta 3}{1999/11/13}
+% {Lose compatability mode.}
+% \begin{macrocode}
+\if@compatibility
+ \edef\reserved@a{\errhelp{%
+ Change your \string\documentstyle\space statement to
+ \string\documentclass\space and rerun.
+ }}\reserved@a
+ \errmessage{You cannot run \class@name\space in compatability mode}%
+ \expandafter\@@end
+\fi
+% \end{macrocode}
+%
+%
+% \section{Extensions to the \LaTeX\ Kernel}
+% I am introducing
+% some portions of the \classname{ltxkrnext} package
+% (\url{ftp://ftp.teleport.com/users/ogawa/macros/latex/contrib/supported/ltxkrnext/}).
+%
+% First, de-fang unwanted commands and turn \cmd\ProvidesPackage\ into an informative message.
+% \begin{macrocode}
+\let\DeclareOption@latex\DeclareOption
+\let\DeclareOption\@gobbletwo
+\let\ProcessOptions@latex\ProcessOptions
+\let\ProcessOptions\@empty
+\let\ProvidesPackage@latex\ProvidesPackage
+\def\ProvidesPackage#1[#2]{%
+ \class@info{Incorporating package #1 [#2].}%
+}%
+%</class-pre>
+% \end{macrocode}
+% Now load the utility and page grid packages.
+% The \classname{ltxutil} and \classname{ltxgrid} packages are distributed with
+% \revtex.
+% \begin{macrocode}
+%\RequirePackage{ltxutil}%
+%\RequirePackage{ltxgrid}%
+% \end{macrocode}
+%
+% The \classname{textcase} package is available from
+% \url{CTAN:/macros/latex/contrib/supported/carlisle/textcase.dtx} and is
+% used at the suggestion, and by permission, of David~P. Carlisle.
+% \begin{quotation}
+% \cmd\ProvidesFile{textcase.dtx}
+% [1998/11/12 v0.06 Text only upper/lower case changing (DPC)]
+% \end{quotation}
+%
+% David, in turn, suggests that Donald Arseneau be credited for some of the ideas in
+% the \classname{textcase} package, so let it hereby be so understood.
+%
+% Note that David's package has a bug, which is fixed as follows:
+% Change:
+%\begin{verbatim}
+% \def\NoCaseChange##1{\noexpand\NoCaseChange{\noexpand##1}}
+%\end{verbatim}
+% To:
+%\begin{verbatim}
+% \def\NoCaseChange##1{\noexpand\NoCaseChange{\noexpand##1}}%
+%\end{verbatim}
+%
+% \begin{macrocode}
+%\RequirePackage{textcase}%
+% \end{macrocode}
+%
+% Next, restore those cammands we de-fanged:
+% \begin{macrocode}
+%<*class-pst>
+\let\ProvidesPackage\ProvidesPackage@latex
+\let\ProcessOptions\ProcessOptions@latex
+\let\DeclareOption\DeclareOption@latex
+% \end{macrocode}
+% And let the \classname{textcase} commands override those of \LaTeX:
+% \begin{macrocode}
+\expandafter
+\let\csname MakeUppercase \expandafter\endcsname
+ \csname MakeTextUppercase \endcsname
+\expandafter
+\let\csname MakeLowercase \expandafter\endcsname
+ \csname MakeTextLowercase \endcsname
+% \end{macrocode}
+%
+% Try to patch \classname{longtable}.
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \switch@longtable
+}%
+% \end{macrocode}
+%
+% Try to provide a more robust version of \cmd\boldmath.
+% If Team \LaTeX\ ever gets around to fixing this problem, we will bow out.
+% (This relates to bug \#394.)
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \expandafter\@ifnotrelax\csname boldmath \endcsname{}{%
+ \expandafter\let\csname boldmath \endcsname\boldmath
+ \expandafter\def\expandafter\boldmath\expandafter{\expandafter\protect\csname boldmath \endcsname}%
+ }%
+}%
+% \end{macrocode}
+%
+%
+%
+% \section{Options}\label{sec:options}%
+%
+% \subsection{Define Booleans Used in Options}%
+% The following Booleans are used within the document class to
+% allow the document or the substyle to make selections
+% of formatting.
+% Because an explicit document class option always overrides a substyle,
+% any substyle wishing to assign a value to a flag must first test the flag to
+% confirm that it is still undefined.
+% This further means that the default value of the flag must be
+% assigned late, at the end of \cmd\AtBeginDocument\ time, and that
+% the flag may be queried no earlier than that time.
+%
+% \begin{macro}{\class@inithook}
+% The hook \cmd\class@inithook\ is installed into \cmd\class@documenthook,
+% and thereafter serves as the focal point for all code that
+% gives default values to the class's parameters.
+%
+% A typical code might be:
+% \begin{verbatim}
+%\appdef\class@inithook{%
+% \@ifxundefined\twocolumn@sw{\@booleanfalse\twocolumn@sw}{}%
+%}%
+% \end{verbatim}
+% which ensures that the switch \cmd\twocolumn@sw\ is never left undefined.
+%
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \class@inithook
+}%
+\def\class@inithook{}%
+%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\twocolumn@sw}
+% The boolean \cmd\twocolumn@sw\ signifies that we are to use a two-column grid.
+%
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\twocolumn@sw{\@booleanfalse\twocolumn@sw}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\footinbib@sw}
+% The boolean \cmd\footinbib@sw\ signifies that
+% footnotes are to be set in the bibliography, as endnotes.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\footinbib@sw{\@booleanfalse\footinbib@sw}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\preprintsty@sw}
+% The boolean \cmd\preprintsty@sw\ signifies that
+% the document is to be formatted in preprint style.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\preprintsty@sw{\@booleanfalse\preprintsty@sw}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\preprint@sw}
+% The boolean \cmd\preprint@sw\ signifies that
+% the preprints (cf. \cmd\preprint) are to be formatted (usually on the title page).
+% The default is to do so; the option \classoption{nopreprintnumbers}
+% declares not to.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\preprint@sw{\@booleanfalse\preprint@sw}{}%
+ \preprintsty@sw{\@booleantrue\preprint@sw}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\galley@sw}
+% The boolean \cmd\galley@sw\ signifies that
+% the document is to be formatted in galley style.
+%
+% Asserting both \cmd\galley@sw\ and \cmd\preprintsty@sw\
+% may produce strange formatting results, but it is not illegal.
+% However, it \emph{is} illegal to assert galley and any
+% twocolumn option.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\galley@sw{\@booleanfalse\galley@sw}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\groupauthors@sw}
+% The flag \cmd\groupauthors@sw\ signifies that authors are to be grouped.
+% This affects the meaning of \cmd\@author@present\ and \cmd\@tempaffil.
+%
+% FIXME: apparently \cmd\@tempaffil\ and its aliases are never used.
+% \end{macro}
+%
+% \begin{macro}{\runinaddress@sw}
+% The flag \cmd\runinaddress@sw\ signifies that author addresses are to be
+% run in.
+% \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 amalgamated
+% into the same list:
+% the address will be printed the same number of times it is entered.
+% \end{macro}
+%
+% \begin{macro}{\showPACS@sw}
+% \begin{macro}{\showKEYS@sw}
+% If \cmd\showPACS@sw\ is true, print the PACS information in the title block,
+% otherwise not.
+% Similarly for \cmd\showKEYS@sw\ and the keywords.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\showPACS@sw{\@booleanfalse\showPACS@sw}{}%
+ \@ifxundefined\showKEYS@sw{\@booleanfalse\showKEYS@sw}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\floats@sw}
+% The Boolean \cmd\floats@sw\ signifies that floats are to be floated;
+% if false, that floats are to be deferred to the end of the document.
+% By default, the former.
+% Note that the state of this Boolean is to be changed by
+% the document class in response to user-selected options.
+%
+% This boolean and the assignment of its default value is done by
+% the \classname{ltxutil} package.
+% \end{macro}
+%
+% \begin{macro}{\floatp@sw}
+% The Boolean \cmd\floatp@sw\ signifies that endfloats are to be set one per page;
+% if false, that endfloats are to be set with multiple floats per page permitted.
+% By default, the latter.
+% Note that the state of this Boolean is to be changed by
+% the document class in response to user-selected options.
+% The default is established here.
+% \end{macro}
+%
+% \begin{macro}{\twoside@sw}
+% The flag \cmd\twoside@sw\ signifies that the document is to be
+% formatted for duplex printing.
+% At \cmd\AtBeginDocument\ time, we must align the value
+% of the kernel \cmd\newif\ switch \cmd\if@twoside\
+% to that of \cmd\twoside@sw.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\twoside@sw{\@booleanfalse\twoside@sw}{}%
+ \twoside@sw{\@twosidetrue}{\@twosidefalse}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\draft@sw}
+% The flag \cmd\draft@sw\ signifies that the document is to be
+% formatted in draft mode.
+% Certain packages may pay attention to the
+% class option \classoption{draft} that sets this Boolean.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\draft@sw{\@booleanfalse\draft@sw}{}%
+ \draft@sw{\overfullrule 5\p@}{\overfullrule\z@}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tightenlines@sw}
+% The boolean \cmd\tightenlines@sw\ signifies that
+% the leading is to be made standard amount.
+% If false, it means that the leading is to be set extra open.
+% Has no effect on 10pt size option.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\tightenlines@sw{\@booleanfalse\tightenlines@sw}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\lengthcheck@sw}
+% The flag \cmd\lengthcheck@sw\ signifies that
+% the length checking is in effect.
+% It is up to the individual journal substyle
+% to alter its formatting accordingly.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\lengthcheck@sw{\@booleanfalse\lengthcheck@sw}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\eqsecnum@sw}
+% The flag \cmd\eqsecnum@sw\ signifies that equations are to be
+% numbered with the section, e.g., ``Eq. (2.13)''.
+% This flag is neither set nor queried.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\eqsecnum@sw{\@booleanfalse\eqsecnum@sw}{}%
+ \eqsecnum@sw{%
+ \@addtoreset{equation}{section}%
+ \def\theequation@prefix{\arabic{section}.}%
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\byrevtex@sw}
+% The flag \cmd\byrevtex@sw\ signifies that the document should
+% bear an imprint to the effect that it was formatted by this document class.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\byrevtex@sw{\@booleanfalse\byrevtex@sw}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Declare Options}%
+%
+% \subsubsection{Checkin: for Editorial Use}%
+% A document class option declaring that the document is being processed by the
+% editorial staff.
+%
+% This option should:
+% \begin{itemize}
+% \item
+% put date in footer along with folio
+% \item
+% Have the effect of selecting the \classoption{preprint} class option.
+% \item
+% Have the effect of selecting the \classoption{showpacs} class option.
+% \item
+% specify that when a float is placed h or H, it will be allowed to break over pages.
+% (Note: be sure that if the enclosed \env{tabular} has an optional argument, you change it to [v], or remove it entirely.)
+% \end{itemize}
+% \changes{v4.0beta 3}{1999/11/13}
+% {New option ``checkin''}
+% \begin{macrocode}
+\DeclareOption{checkin}{%
+ \@booleantrue\dateinRH@sw
+ \@booleantrue\preprintsty@sw
+ \def\@pointsize{12}%
+ \@booleantrue\showPACS@sw
+ \@booleantrue\showKEYS@sw
+ \def\fp@proc@h{\allow@breaking@tables}%
+ \def\fp@proc@H{\allow@breaking@tables}%
+}%
+\@booleanfalse\dateinRH@sw
+\def\checkindate{\dateinRH@sw{{\tiny(\today)}}{}}%
+\def\allow@breaking@tables{%
+ \def\array@default{v}% tabular can break over pages
+ \@booleanfalse\floats@sw % table can break over pages
+}%
+% \end{macrocode}
+%
+% \subsubsection{Preprint Style}%
+% \changes{v4.d}{1998/01/31}
+% {Rearrange the ordering so numerical ones come first. AO: David, what does this mean?}
+%
+% \changes{v4.g}{1998/06/10}
+% {comma not space between email and homepage}
+%
+% \changes{v4.0beta 2}{1999/06/20}
+% {Move this ``complex'' option to the front, where it can be overridden by ``simple'' options.}
+% \begin{macrocode}
+\DeclareOption{preprint}{%
+ \@booleantrue\preprintsty@sw
+ \def\@pointsize{12}%
+}%
+\DeclareOption{manuscript}{%
+ \class@warn{Document class option manuscript is obsolete; use preprint instead}%
+ \ExecuteOptions{preprint}%
+}%
+% \end{macrocode}
+%
+% \subsubsection{Showing PACS and keywords}%
+% \changes{v4.0beta 2}{1999/06/20}
+% {New option}
+% \changes{v4.0beta 5}{2000/09/20}
+% {New option showkeys}
+% \begin{macrocode}
+\DeclareOption{showpacs}{%
+ \@booleantrue\showPACS@sw
+}%
+\DeclareOption{noshowpacs}{%
+ \@booleanfalse\showPACS@sw
+}%
+\DeclareOption{showkeys}{%
+ \@booleantrue\showKEYS@sw
+}%
+\DeclareOption{noshowkeys}{%
+ \@booleanfalse\showKEYS@sw
+}%
+% \end{macrocode}
+%
+% \subsubsection{Balance the last page when in two-column page grid}%
+% If we are in a two-column page grid, we may wish to balance the columns
+% of the last page. This will be done automatically if the
+% \classoption{twocolumn} document class option is chosen.
+% This action will be turned off by the \classoption{nobalancelastpage}.
+% A complementary class option, \classoption{balancelastpage} is also provided.
+% \begin{macrocode}
+\DeclareOption{balancelastpage}{%
+ \@booleantrue\balancelastpage@sw
+}%
+\DeclareOption{nobalancelastpage}{%
+ \@booleanfalse\balancelastpage@sw
+}%
+\appdef\class@inithook{%
+ \@ifxundefined\balancelastpage@sw{%
+ \@booleantrue\balancelastpage@sw
+ }{}%
+}%
+% \end{macrocode}
+%
+% \subsubsection{Showing preprint numbers}%
+% \changes{v4.0beta 4}{2000/04/10}
+% {New option}
+% \begin{macrocode}
+\DeclareOption{nopreprintnumbers}{\@booleanfalse\preprint@sw}%
+\DeclareOption{preprintnumbers}{\@booleantrue\preprint@sw}%
+% \end{macrocode}
+%
+% \subsubsection{Hypertext Option}%
+%
+% \changes{v4.e}{1998/01/31}
+% {protect against hyperref revtex kludges which are not needed now}
+% \changes{v4.0beta 2}{1999/06/20}
+% {Move this ``complex'' option to the front, where it can be overridden by ``simple'' options.}
+% \changes{v4.0rc4}{2001/07/23}
+% {hyperref is no longer loaded via class option: use a usepackage statement instead}
+% \begin{macrocode}
+\DeclareOption{hyperref}{%
+%\AtEndOfClass{%
+% \begingroup
+% \edef\@tempa{%
+% \let
+% \noexpand\@clsextension
+% \noexpand\@empty
+% \noexpand\RequirePackage{hyperref}%
+% \def\noexpand
+% \@clsextension{\@clsextension}%
+% }%
+% \expandafter
+% \endgroup
+% \@tempa
+%}%
+% \end{macrocode}
+%
+% If you have a hyper-foo enabled browser you may prefer this format
+% which does not print the URL for the home page, but just makes the
+% name a link, but by default print it so it works on paper.
+% \changes{v4.e}{1998/01/31}
+% {print homepage}
+%
+% \begin{macrocode}
+% \def\@pointsize{10}%
+ \class@warn{Class option "hyperref" is no longer supported.^^JEmploy \string\usepackage{hyperref} instead}%
+}%
+% \end{macrocode}
+%
+% \subsubsection{Type Size}%
+% Use \cmd\@pointsize|=10| rather than \cmd\@ptsize|=0| to allow easy extensions
+% to 9pt or whatever.
+% Note: the three alternatives are mutually exclusive. Furthermore
+% if \cmd\@pointsize\ is still undefined at \cmd\AtEndOfClass\ time,
+% then the substyle can conclude that the user accepts the default.
+% \begin{macrocode}
+\DeclareOption{10pt}{\def\@pointsize{10}}
+\DeclareOption{11pt}{\def\@pointsize{11}}
+\DeclareOption{12pt}{\def\@pointsize{12}}
+% \end{macrocode}
+%
+% \subsubsection{Media Size}%
+% \changes{v4.0beta 2}{1999/06/20}
+% {Restore all media size class option of \protect\file{classes.dtx}}
+% \begin{macrocode}
+\DeclareOption{a4paper}
+ {\setlength\paperheight {297mm}%
+ \setlength\paperwidth {210mm}}
+\DeclareOption{a5paper}
+ {\setlength\paperheight {210mm}%
+ \setlength\paperwidth {148mm}}
+\DeclareOption{b5paper}
+ {\setlength\paperheight {250mm}%
+ \setlength\paperwidth {176mm}}
+\DeclareOption{letterpaper}
+ {\setlength\paperheight {11in}%
+ \setlength\paperwidth {8.5in}}
+\DeclareOption{legalpaper}
+ {\setlength\paperheight {14in}%
+ \setlength\paperwidth {8.5in}}
+\DeclareOption{executivepaper}
+ {\setlength\paperheight {10.5in}%
+ \setlength\paperwidth {7.25in}}
+\DeclareOption{landscape}
+ {\setlength\@tempdima {\paperheight}%
+ \setlength\paperheight {\paperwidth}%
+ \setlength\paperwidth {\@tempdima}}
+% \end{macrocode}
+%
+% \subsubsection{Bibnotes}%
+% Frontmatter footnotes result from frontmatter commands like
+% \cmd\email, \cmd\homepage, \cmd\altaffiliation, and \cmd\thanks.
+% The default for \cmd\frontmatter@footnote@produce\ is
+% \cmd\frontmatter@footnote@produce@footnote, which formats the frontmatter footnotes
+% at the foot of the title page. The \classoption{bibnotes} class option
+% defers them to the bibliography.
+% \begin{macrocode}
+\DeclareOption{bibnotes}{\@booleantrue\bibnotes@sw}%
+\DeclareOption{nobibnotes}{\@booleanfalse\bibnotes@sw}%
+\appdef\class@enddocumenthook{\auto@bib}%
+\appdef\class@inithook{%
+ \@ifxundefined\bibnotes@sw{\@booleanfalse\bibnotes@sw}{}%
+ \bibnotes@sw{%
+ \let\frontmatter@footnote@produce\frontmatter@footnote@produce@endnote
+ }{%
+ \let\frontmatter@footnote@produce\frontmatter@footnote@produce@footnote
+ }%
+}%
+% \end{macrocode}
+%
+% \subsubsection{Footinbib}%
+% \begin{macrocode}
+\DeclareOption{footinbib}{\@booleantrue\footinbib@sw}
+\DeclareOption{nofootinbib}{\@booleanfalse\footinbib@sw}
+% \end{macrocode}
+%
+% \subsubsection{altaffilletter}%
+%
+% \begin{macrocode}
+\DeclareOption{altaffilletter}{\@booleantrue\altaffilletter@sw}%
+\DeclareOption{altaffilsymbol}{\@booleanfalse\altaffilletter@sw}%
+\appdef\class@inithook{%
+ \@ifxundefined\altaffilletter@sw{\@booleanfalse\altaffilletter@sw}{}%
+}%
+% \end{macrocode}
+%
+% \subsubsection{superbib}%
+% The document may invoke superscript bibliography style.
+% If not, the journal substyle may make a selection.
+% If neither, the class itself selects a default.
+% This is really a quite deep nesting of defaults.
+% \begin{macrocode}
+\DeclareOption{superbib}{%
+ \def\place@bibnumber{\place@bibnumber@sup}%
+}%
+% \end{macrocode}
+%
+% \subsubsection{citeautoscript}%
+% This class option allows you to automatically accomodate a change from non-superscripted, numbered references
+% to superscripted, bunmbered references.
+%
+% Note: you should always mark up your document with the assumption that references are \emph{not} going to be superscripted.
+% Otherwise this option has no hope of working properly.
+%
+% \begin{macrocode}
+\DeclareOption{citeautoscript}{%
+ \@booleantrue\citeautoscript@sw
+}%
+\@booleanfalse\citeautoscript@sw
+% \end{macrocode}
+%
+% \subsubsection{Simplex/Duplex Pages}%
+% \changes{v4.e}{1998/01/31}
+% {4.d had twoside option setting twoside switch to false}
+% The complementary options \classoption{twoside} and \classoption{oneside}
+% assert formatting for duplex or simplex printing, respectively.
+% At the same time, we arrange for the selection of the page grid
+% with respect to the marginal column:
+% Because \cmd\if@reversemargin\ remains default (false),
+% if duplex printing, this column will always be on the (right),
+% if simplex printing, it will always be on the (outside).
+% QUERY: correct choice?
+% \begin{macrocode}
+\DeclareOption{twoside}{\@booleantrue\twoside@sw \@mparswitchfalse}
+\DeclareOption{oneside}{\@booleanfalse\twoside@sw\@mparswitchtrue}
+% \end{macrocode}
+%
+% \subsubsection{Two-Column Page Grid}%
+%
+% \begin{macro}{\twocolumn@sw}
+% The flag \cmd\twocolumn@sw\ signifies that the document is to be
+% formatted in the two-column page grid.
+%
+% If no options relating to page grid are invoked by
+% \cmd\AtBeginDcoument\ time, we set default values.
+% Up to that point, the class can check if \cmd\twocolumn@sw\
+% is \cmd\undefined\ to see if any related options have been invoked.
+%
+% At \cmd\AtBeginDocument\ time, we must align the value
+% of the kernel \cmd\newif\ switch \cmd\if@twocolumn\
+% to that of \cmd\twocolumn@sw.
+%
+% We install into \cmd\class@enddocumenthook\
+% all tasks that we know must be completed at \cmd\AtEndDocument\ time.
+% The first thing it does is end the current paragraph.
+% The last is
+% to return us to one-column page grid.
+% (This task is installed as late as possible,
+% i.e., after items like \cmd\printtables.)
+% \begin{macrocode}
+\AtEndOfClass{%
+ \def\clear@document{%
+ \close@column
+ }%
+ \appdef\class@inithook{%
+ \@ifxundefined\close@column{%
+ \let\close@column\close@column@default
+ }{}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% The \classoption{twocolumn} class option employs the standard mechanism for
+% changing the column grid: the \classname{ltxgrid} package.
+% \begin{macrocode}
+\DeclareOption{twocolumn}{%
+ \@booleantrue\twocolumn@sw
+}%
+% \end{macrocode}
+%
+% \classoption{onecolumn} specifies one-column page grid.
+% \begin{macrocode}
+\DeclareOption{onecolumn}{%
+ \@booleanfalse\twocolumn@sw
+}%
+% \end{macrocode}
+%
+% \classoption{galley} emulates setting the galleys of
+% a two-column journal.
+% FIXME: this option should effectively set \cmd\preprintsty@sw\ false.
+% NOTE: it makes no sense to assert both galley and twocolumn.
+%
+% \begin{macrocode}
+\DeclareOption{galley}{%
+ \ExecuteOptions{onecolumn}%
+ \@booleantrue\galley@sw
+ \appdef\set@pica@hook{%
+ \advance\textwidth-\columnsep
+ \textwidth.5\textwidth
+ }%
+}%
+% \end{macrocode}
+%
+%
+% \subsubsection{raggedbottom or flushbottom}%
+% The class options \classoption{raggedbottom} and \classoption{flushbottom} determine whether the columns (page)
+% are ragged bottom or flush bottom.
+% Note that we do not select a default here; that is done by the journal substyle.
+% \begin{macrocode}
+\DeclareOption{raggedbottom}{\@booleantrue\raggedcolumn@sw}
+\DeclareOption{flushbottom}{\@booleanfalse\raggedcolumn@sw}
+% \end{macrocode}
+%
+% \subsubsection{tightenlines}%
+% This class option specifies that standard leading
+% is to be used to set the type.
+% If lacking, the leading will be loose.
+%
+% \begin{macrocode}
+\DeclareOption{tightenlines}{\@booleantrue\tightenlines@sw}
+% \end{macrocode}
+%
+% \subsubsection{lengthcheck}%
+% This class option specifies that the formatted document
+% should approach as closely as possible the
+% formatting of an actual journal article
+% to facilitate the author's performance of a length check.
+%
+% \begin{macrocode}
+\DeclareOption{lengthcheck}{%
+ \@booleantrue\lengthcheck@sw
+ \@booleantrue\twoside@sw
+ \@booleantrue\twocolumn@sw
+}%
+% \end{macrocode}
+%
+% \subsubsection{Draft and Final}%
+% \begin{macrocode}
+\DeclareOption{draft}{%
+ \@booleantrue\draft@sw
+}%
+\DeclareOption{final}{%
+ \@booleanfalse\draft@sw
+}%
+% \end{macrocode}
+%
+% \subsubsection{eqsecnum}%
+% The \classoption{eqsecnum} class option signifies that equations are
+% to be numbered within sections.
+% \begin{macrocode}
+\DeclareOption{eqsecnum}{\@booleantrue\eqsecnum@sw}
+% \end{macrocode}
+%
+% \subsubsection{secnumarabic}%
+% The \classoption{secnumarabic} class option signifies that sectioning commands are
+% to be numbered arabic.
+% \begin{macrocode}
+\DeclareOption{secnumarabic}{\@booleantrue\secnumarabic@sw}
+% \end{macrocode}
+% The code that polls the Boolean \cmd\secnumarabic@sw\ appears
+% in Section~\ref{sec:secnumarabic}.
+%
+% FIXME: model fleqn after amsfonts. I no longer understand why I said this.
+% \begin{macrocode}
+\DeclareOption{fleqn}{\input{fleqn.clo}}
+% \end{macrocode}
+%
+% \subsubsection{floats/endfloats}%
+% These options control, via the Boolean \cmd\floats@sw,
+% whether floats are to be migrated to the end of the document.
+% \begin{macrocode}
+\DeclareOption{floats}{\@booleantrue\floats@sw\@booleanfalse\floatp@sw}
+\DeclareOption{endfloats}{\@booleanfalse\floats@sw\@booleanfalse\floatp@sw}
+\DeclareOption{endfloats*}{\@booleanfalse\floats@sw\@booleantrue\floatp@sw}
+\appdef\class@inithook{%
+ \@ifxundefined\floats@sw{\@booleantrue\floats@sw}{}%
+ \@ifxundefined\floatp@sw{\@booleantrue\floatp@sw}{}%
+}%
+% \end{macrocode}
+%
+% \subsubsection{titlepage/notitlepage}%
+% These options control, via \cmd\titlepage@sw,
+% whether the title block is to be set on a separate page.
+% \begin{macro}{\titlepage@sw}
+% The flag \cmd\titlepage@sw\ signifies that a forced
+% page break is to follow the title page: the article
+% title appears on a page by itself.
+%
+% The Boolean \cmd\titlepage@sw\ is in an odd situation:
+% its value is set by one or more substyles, contingent
+% upon the value of another Boolean.
+% Therefore that code must be invoked at \cmd\AtBeginDocument\ time.
+% Therefore we must assign the default value at the very end
+% of \cmd\AtBeginDocument\ processing: we use \cmd\defaults@hook.
+% Luckily, this Boolean does not need to be queried at
+% \cmd\AtBeginDocument\ time, or we'd be in dire straights.
+% \begin{macrocode}
+\DeclareOption{titlepage}{\@booleantrue\titlepage@sw}
+\DeclareOption{notitlepage}{\@booleanfalse\titlepage@sw}
+\appdef\defaults@hook{%
+ \@ifxundefined\titlepage@sw{\@booleanfalse\titlepage@sw}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Substyle and Sub-substyle}%
+%
+% If the society has already been assigned,
+% notify user that \cmd\@society\ is being overridden.
+%
+% \begin{macrocode}
+\def\change@society#1{%
+ \def\@tempa{#1}%
+ \@ifxundefined\@society{}{%
+ \@ifx{\@tempa\@society}{}{%
+ \class@warn{Conflicting society \@tempa<>\@society.}%
+ }%
+ }%
+ \let\@society\@tempa
+}%
+% \end{macrocode}
+% Here are the class options relating to the APS
+% \begin{macrocode}
+\DeclareOption{aps}{\change@society{aps}\def\@journal{}}%
+\DeclareOption{pra}{\change@society{aps}\def\@journal{pra}}%
+\DeclareOption{prb}{\change@society{aps}\def\@journal{prb}}%
+\DeclareOption{prc}{\change@society{aps}\def\@journal{prc}}%
+\DeclareOption{prd}{\change@society{aps}\def\@journal{prd}}%
+\DeclareOption{pre}{\change@society{aps}\def\@journal{pre}}%
+\DeclareOption{prl}{\change@society{aps}\def\@journal{prl}}%
+\DeclareOption{prstab}{\change@society{aps}\def\@journal{prstab}}%
+\DeclareOption{rmp}{\change@society{aps}\def\@journal{rmp}}%
+% \end{macrocode}
+% Here are the class options relating to the Optical Society of America
+% \begin{macrocode}
+\DeclareOption{osa}{\change@society{osa}\def\@journal{}}%
+\DeclareOption{osameet}{\change@society{osa}\def\@journal{osameet}}%
+\DeclareOption{opex}{\change@society{osa}\def\@journal{opex}}%
+\DeclareOption{tops}{\change@society{osa}\def\@journal{tops}}%
+\DeclareOption{josa}{\change@society{osa}\def\@journal{josa}}%
+% \end{macrocode}
+%
+% NOTE: \file{revguide.tex} does not mention any \cmd\@journal\ options
+% besides \classoption{prb}.
+%
+% \begin{macro}{amsfonts}
+% The class option \classoption{amsfonts} has the
+% same effect as if the document preamble contained
+% a \cmd\usepackage\verb${amsfonts}$ statement.
+% \begin{macrocode}
+\DeclareOption{amsfonts}{%
+ \def\class@amsfonts{\RequirePackage{amsfonts}}%
+}%
+\DeclareOption{noamsfonts}{%
+ \let\class@amsfonts\@empty
+}%
+\AtEndOfClass{%
+ \@ifxundefined\class@amsfonts{}{\class@amsfonts}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{amssymb}
+% The class option \classoption{amssymb} has the
+% same effect as if the document preamble contained
+% a \cmd\usepackage\verb${amssymb}$ statement.
+% \begin{macrocode}
+\DeclareOption{amssymb}{%
+ \def\class@amssymb{\RequirePackage{amssymb}}%
+}%
+\DeclareOption{noamssymb}{%
+ \let\class@amssymb\@empty
+}%
+\AtEndOfClass{%
+ \@ifxundefined\class@amssymb{}{\class@amssymb}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{amsmath}
+% The class option \classoption{amsmath} has the
+% same effect as if the document preamble contained
+% a \cmd\usepackage\verb${amsmath}$ statement.
+%
+% We require version 1.2 (datestamped 1997/03/20) or later.
+% The \expandafter\cmd\csname ver@amsmath.sty\endcsname, will
+%
+% \LaTeX\ note:
+% Certain \LaTeX\ procedures have an arbitrary and pointless restriction that they may be used only within the preamble.
+% We get around this by preserving the procedures in private \cmd\csname s.
+%
+% FIXME note: it is difficult to ensure that an error summary will be printed on the console at the very end,
+% but \classname{ltxgrid} allows accomplishing this via an interrupt, put down at \cmd\AtEndDocument\ time.
+%
+% \begin{macrocode}
+\DeclareOption{amsmath}{%
+ \def\class@amsmath{\RequirePackage{amsmath}[\ver@amsmath@prefer]}%
+}%
+\DeclareOption{noamsmath}{%
+ \let\class@amsmath\@empty
+}%
+\AtEndOfClass{%
+ \preserve@LaTeX
+ \@ifxundefined\class@amsmath{}{\class@amsmath}%
+ \appdef\class@enddocumenthook{\test@amsmath@ver}%
+}%
+\appdef\preserve@LaTeX{%
+ \let\@ifl@aded@LaTeX\@ifl@aded
+ \let\@ifpackageloaded@LaTeX\@ifpackageloaded
+ \let\@pkgextension@LaTeX\@pkgextension
+ \let\@ifpackagelater@LaTeX\@ifpackagelater
+ \let\@ifl@ter@LaTeX\@ifl@ter
+ \let\@ifl@t@r@LaTeX\@ifl@t@r
+ \let\@parse@version@LaTeX\@parse@version
+}%
+\appdef\restore@LaTeX{%
+ \let\@ifl@aded\@ifl@aded@LaTeX
+ \let\@ifpackageloaded\@ifpackageloaded@LaTeX
+ \let\@pkgextension\@pkgextension@LaTeX
+ \let\@ifpackagelater\@ifpackagelater@LaTeX
+ \let\@ifl@ter\@ifl@ter@LaTeX
+ \let\@ifl@t@r\@ifl@t@r@LaTeX
+ \let\@parse@version\@parse@version@LaTeX
+}%
+\def\test@amsmath@ver{%
+ \begingroup
+ \restore@LaTeX
+ \@ifpackageloaded{amsmath}{%
+ \@ifpackagelater{amsmath}{\ver@amsmath@prefer}{}{%
+ \class@warn{%
+ You have loaded amsmath, version "\csname ver@amsmath.sty\endcsname",\MessageBreak
+ but this class requires version "\ver@amsmath@prefer", or later.\MessageBreak
+ Please update your LaTeX installation.
+ }%
+ }%
+ }{%
+ }%
+ \endgroup
+}%
+\def\ver@amsmath@prefer{2000/01/15 v2.05 AMS math features}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Presenting Authors and Their Affiliations}%
+% \changes{v4.0beta 2}{1999/06/20}
+% {These options are now mutually exclusive. But is this correct?}
+%
+% The \classoption{runinaddress} option is the only one that sets \cmd\runinaddress@sw\ to true.
+%
+% The \classoption{unsortedaddress} option is the only one that sets \cmd\@affils@sw\ to false.
+%
+% 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 false.
+%
+% \classoption{groupedaddress}, the default, groups authors above a common address.
+% In order to assert the default and still provide for proper precedence
+% for document-supplied options, we carry out our action at \cmd\AtBeginDocument\ time,
+% and only if none of the related class options were invoked.
+% \begin{macrocode}
+\DeclareOption{groupedaddress}{\clo@groupedaddress}%
+\def\clo@groupedaddress{%
+ \@booleantrue\groupauthors@sw
+ \@booleantrue\@affils@sw
+ \@booleanfalse\runinaddress@sw
+}%
+\appdef\class@inithook{%
+ \@ifxundefined\groupauthors@sw{\clo@groupedaddress}{}%
+}%
+% \end{macrocode}
+%
+% \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}
+%
+% \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}
+%
+% \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}
+%
+%
+% \subsubsection{Typeset by \revtex}%
+%
+% The class option \classoption{byrevtex} signifies that you want the
+% ``Typeset by \revtex'' byline to appear on your formatted output.
+% By default, no such byline appears.
+% \begin{macrocode}
+\DeclareOption{byrevtex}{\@booleantrue\byrevtex@sw}%
+% \end{macrocode}
+%
+%
+% \subsection{Attempt to fix float placement failure}%
+%
+% \revtex\ uses the \classname{ltxgrid} package, which provides the ability to attempt repairs when
+% \LaTeX's float placement mechanism is about to fail, but that facility is turned off by default.
+% Users should invoke the \classoption{floatfix} document class option to enable this \LaTeX\ extension.
+% If not, a helpful message is printed in the log, indicating how to work around the difficulty.
+% \begin{macrocode}
+\DeclareOption{floatfix}{\@booleantrue\force@deferlist@sw}%
+\DeclareOption{nofloatfix}{\@booleanfalse\force@deferlist@sw}%
+\appdef\class@inithook{%
+ \@ifxundefined\force@deferlist@sw{\@booleanfalse\force@deferlist@sw}{}%
+}%
+% \end{macrocode}
+%
+% \begin{macro}{\@fltovf}
+% \begin{macro}{\@fltstk}
+% The \LaTeX\ kernel error message \cmd\@fltovf\ may now be a bit more helpful to the user;
+% likewise for the \cmd\@fltstk\ message of \classname{ltxgrid}.
+% \begin{macrocode}
+\gdef\@fltovf{%
+ \@latex@error{%
+ Too many unprocessed floats%
+ \force@deferlist@sw{}{; try class option [floatfix]}%
+ }\@ehb
+}%
+\def\@fltstk{%
+ \@latex@warning{%
+ A float is stuck (cannot be placed)%
+ \force@deferlist@sw{}{; try class option [floatfix]}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ltxgrid@info@sw}
+% \begin{macro}{\outputdebug@sw}
+% The two options \classoption{ltxgridinfo} and \classoption{outputdebug} turn on informative diagnostics within the
+% package \classname{ltxgrid}. Only people who really want to see this output will select these class options.
+% Consult documentation for the \classname{ltxgrid} package to see what output the related switches enable.
+% \begin{macrocode}
+\DeclareOption{ltxgridinfo}{\@booleantrue\ltxgrid@info@sw}%
+\DeclareOption{outputdebug}{\@booleantrue\outputdebug@sw}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Option to relax page height}%
+%
+% The \classname{ltxgrid} package can set text pages to their natural height or force them to the full
+% text height; the latter is the default.
+% If setting the pages with a variable length,
+% the running foot will move up or down with the natural length of the text column.
+% While I recommend against doing so, this option will turn that switch to the latter setting.
+% \begin{macrocode}
+\DeclareOption{raggedfooter}{\@booleanfalse\textheight@sw}%
+\DeclareOption{noraggedfooter}{\@booleantrue\textheight@sw}%
+% \end{macrocode}
+%
+% \subsection{Selecting procedure for processing abstract}%
+%
+% There are two different procedures for processing an abstract; the options
+% \classoption{newabstract} and \classoption{oldabstract} determine which one the user
+% prefers. At present, the default is to use the old, but this may change.
+% \begin{macrocode}
+\DeclareOption{newabstract}{\@booleanfalse\oldabstract@sw}%
+\DeclareOption{oldabstract}{\@booleantrue \oldabstract@sw}%
+\appdef\class@inithook{%
+ \@ifxundefined\oldabstract@sw{\@booleanfalse\oldabstract@sw}{}%
+ \oldabstract@sw{%
+ \let@environment{abstract}{abstract-old}%
+ }{}%
+}%
+% \end{macrocode}
+%
+%
+%
+%
+% \subsection{Default Option}%
+%
+% The default handling for a document class option is to
+% treat it as the name of a society and
+% hunt for a corresponding \file{.rtx} file to read in.
+% This behavior is much like the \LaTeX2.09 handling, where
+% one looked for a \file{.sty} file, except that
+% in this case, we must catch the case where multiple
+% unknown options are declared.
+%
+% \begin{macrocode}
+\DeclareOption*{%
+ \IfFileExists{\CurrentOption\substyle@ext}{%
+ \expandafter\change@society\expandafter{\CurrentOption}%
+ }{%
+ \OptionNotUsed
+ }%
+}%
+\def\substyle@ext{.rtx}%
+\AtEndOfClass{%
+ \@ifxundefined\@society{%
+ \class@warn{No Society specified, using generic APS style}%
+ \def\@society{aps}\def\@journal{}%
+ }{}%
+ \expandafter\input\expandafter{\@society\substyle@ext}%
+}%
+% \end{macrocode}
+%
+% \subsection{Class-Asserted Options}%
+% \changes{v4.0beta 2}{1999/06/20}
+% {%
+% Removed invocation of nonexistent class option \protect\classoption{groupauthors}
+% and all other class options that should only be invoked by the document.
+% (Otherwise precedence of class options does not work.)
+% }
+% Here we establish the default document class options.
+% Those of the document itself will override these.
+% \begin{macrocode}
+\ExecuteOptions{10pt}
+% \end{macrocode}
+%
+% \subsection{Execute Options}%
+% The document class options are processed in the order
+% they are declared in this document class file.
+%
+% Precedence is established in the following way:
+%
+% First, the single \file{.rtx} file is read in.
+% It may set values to any of the Booleans that represent class options,
+% and it may elect to do so only if that Boolean is undefined, signifying
+% that its corresponding document class options were absent from
+% the document's option list.
+% In this way correct precedence of class options is maintained.
+%
+% Second, the type size option is acted upon. Type size code
+% should not require altering the values of any of the Booleans carrying
+% class options.
+%
+% Next, at \cmd\AtEndOfClass\ time, certain packages are read in.
+%
+% Finally, at \cmd\AtBeginDocument\ time, the state of the Booleans determines
+% how the formatting will go.
+%
+% \begin{macrocode}
+\ProcessOptions\relax
+% \end{macrocode}
+%
+%
+% \section{Procedures Dependent Upon Options}
+%
+% Here we introduce \classname{classes.dtx} definitions for
+% the page styles that people will expect to be able to use.
+% \begin{macro}{\ps@headings}
+% \begin{macro}{\ps@myheadings}
+% \begin{macrocode}
+ \def\ps@headings{%
+ \let\@oddfoot\@empty\let\@evenfoot\@empty
+ \def\@evenhead{\thepage\hfil\slshape\leftmark}%
+ \def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
+ \let\@mkboth\markboth
+ \def\sectionmark##1{%
+ \markboth {\MakeUppercase{%
+ \ifnum \c@secnumdepth >\z@
+ \thesection\quad
+ \fi
+ ##1}}{}}%
+ \def\subsectionmark##1{%
+ \markright {%
+ \ifnum \c@secnumdepth >\@ne
+ \thesubsection\quad
+ \fi
+ ##1}}}%
+\def\ps@myheadings{%
+ \let\@oddfoot\@empty\let\@evenfoot\@empty
+ \def\@evenhead{\thepage\hfil\slshape\leftmark}%
+ \def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
+ \let\@mkboth\@gobbletwo
+ \let\sectionmark\@gobble
+ \let\subsectionmark\@gobble
+ }%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ps@article@twoside}
+% \begin{macro}{\ps@article@oneside}
+% \begin{macro}{\ps@preprint}
+% \changes{v4.e}{1998/01/31}
+% {Move after process options, so the following test works}
+% \changes{v4.0beta 2}{1999/06/20}
+% {Defer decision until \cs{AtBeginDocument} time}
+% \changes{v4.0beta 3}{1999/11/13}
+% {Insert procedure \cs{checkindate}}
+% \changes{v4.0rc1}{2001/06/17}
+% {Running headers always as if two-sided}
+% \begin{macrocode}
+\def\ps@article{%
+ \@provide\@evenhead{\let\\\heading@cr\thepage\quad\checkindate\hfil{\leftmark}}%
+ \@provide\@oddhead{\let\\\heading@cr{\rightmark}\hfil\checkindate\quad\thepage}%
+ \@provide\@oddfoot{}%
+ \@provide\@evenfoot{}%
+ \let\@mkboth\markboth
+ \let\sectionmark\@gobble
+ \let\subsectionmark\@gobble
+}%
+\def\ps@article@final{%
+ \@provide\@evenhead{\let\\\heading@cr\thepage\quad\checkindate\hfil{\leftmark}}%
+ \@provide\@oddhead{\let\\\heading@cr{\rightmark}\hfil\checkindate\quad\thepage}%
+ \@provide\@oddfoot{}%
+ \@provide\@evenfoot{}%
+ \let\@mkboth\markboth
+ \def\sectionmark##1{%
+ \markboth{%
+ \MakeTextUppercase{%
+ \@ifnum{\c@secnumdepth >\z@}{\thesection\hskip 1em\relax}{}%
+ ##1%
+ }%
+ }{}%
+ }%
+ \def\subsectionmark##1{%
+ \markright {%
+ \@ifnum{\c@secnumdepth >\@ne}{\thesubsection\hskip 1em\relax}{}%
+ ##1%
+ }%
+ }%
+}%
+\appdef\class@inithook{%
+%\twoside@sw{%
+%}{%
+%}%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\heading@cr{\unskip\space\ignorespaces}%
+% \end{macrocode}
+%
+% \changes{v4.0beta 3}{1999/11/13}
+% {Do not put by REVTeX in every page foot}
+% \changes{v4.0beta 3}{1999/11/13}
+% {Insert procedure \cs{checkindate}}
+% \begin{macrocode}
+\def\ps@preprint{%
+ \@provide\@oddfoot{\hfil\thepage\quad\checkindate\hfil}%
+ \@provide\@evenfoot{\hfil\thepage\quad\checkindate\hfil}%
+ \@provide\@oddhead{}%
+ \@provide\@evenhead{}%
+ \let\@mkboth\@gobbletwo
+ \let\sectionmark\@gobble
+ \let\subsectionmark\@gobble
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\let\@oddhead\@undefined
+\let\@evenhead\@undefined
+\let\@oddfoot\@undefined
+\let\@evenfoot\@undefined
+\AtEndOfClass{%
+ \appdef\class@documenthook{%
+ \@provide\@oddhead{}%
+ \@provide\@evenhead{}%
+ \@provide\@oddfoot{}%
+ \@provide\@evenfoot{}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\lastpage@putlabel}
+% Support the default meaning of \cmd\@endpage.
+% \changes{v4.d}{1998/01/31}
+% {Move after process options, so \cs{clearpage} not in scope of
+% twocolumn}
+% Name of this macro (and the \cmd\label\ key) taken from
+% \url{CTAN:/macros/latex/contrib/other/lastpage}%
+% with code optimised slightly.
+% \begin{macrocode}
+\def\lastpage@putlabel{%
+ \if@filesw
+ \begingroup
+ \advance\c@page\m@ne
+ \immediate\write\@auxout{\string\newlabel{LastPage}{{}{\thepage}}}%
+ \endgroup
+ \fi
+}%
+% \end{macrocode}
+% Install a late hook into \cmd\class@enddocumenthook\ that
+% labels the last page of the document.
+% This is done just before the \file{.aux} file
+% is closed, and does not require a \cmd\shipout, because it writes
+% directly to the \file{.aux} file.
+% Note that we invoke \cmd\clearpage: this means that no more typesetting
+% should be done past this point.
+% CHECKME: are there any more things installed via
+% \cmd\AtEndOfClass\allowbreak\cmd\class@enddocumenthook?
+% \begin{macrocode}
+\AtEndOfClass{%
+ \appdef\clear@document{%
+ \clearpage
+ \lastpage@putlabel
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \section{Required Packages}
+% \url{CTAN:macros/latex/contrib/other/misc/url.sty}%
+% \begin{macrocode}
+\RequirePackage{url}%
+% \end{macrocode}
+%
+% \section{Incompatible Packages}
+% Known to be incompatible are \classname{multicol} and \classname{cite}.
+% The former is incompatible with \classname{ltxgrid}, which replaces it.
+% The latter is incompatible with \classname{natbib}, which replaces its functionality.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \incompatible@package{cite}%
+ \incompatible@package{multicol}%
+}%
+% \end{macrocode}
+%
+% \section{Society- and Journal-Specific Code}
+%
+% \begin{macro}{\@journal}
+% Journal test helper, used as
+% \begin{verbatim}
+%\@ifx{\@journal\journal@pra}{%
+% <journal-specific setup>
+%\fi
+% \end{verbatim}
+% Journal code might like to further specify (if as yet undefined) or distinguish on
+% the following Booleans.
+%
+% Note: the journal substyle code should only alter the value of one of these Booleans if
+% the Boolean is \cmd\undefined. This convention is what makes the document's
+% options take precedence over the values set by the journal.
+%
+% FIXME: make this table an exhaustive listing of all the parameters set by
+% the class options.
+%
+% \begin{tabular}{ll}
+% \cmd\@pointsize &(10|11|12), depending on the type size\\
+% \cmd\footinbib@sw &true if footnotes are to be formatted in the bibliography\\
+% \cmd\preprintsty@sw &true for preprint and hyperpreprint\\
+% \cmd\eqsecnum@sw &true means that equations are numbered within sections\\
+% \cmd\secnumarabic@sw &true means the sections are to be numbered arabic\\
+% \cmd\groupauthors@sw &true means authors listed separately for each address\\
+% \cmd\preprint@sw &true means to produce the preprint numbers as part of the title block\\
+% \cmd\showPACS@sw &true means to produce the PACS as part of the title block\\
+% \cmd\showKEYS@sw &true means to produce the keywords as part of the title block\\
+% \cmd\@affils@sw &true means each affiliation is printed, for each author\\
+% \cmd\runinaddress@sw &true means author addresses are printed run-in\\
+% \cmd\draft@sw &true implies that PACS will be printed\\
+% \cmd\tightenlines@sw &true if preprint single spaced\\
+% \cmd\lengthcheck@sw &true if length checking is in effect\\
+% \cmd\byrevtex@sw &true means to announce ``typeset by \revtex''\\
+% \cmd\titlepage@sw &true for title is to be set on a separate page\\
+% \cmd\twocolumn@sw &true if two-column page grid\\
+% \cmd\twocolumn@sw &true if we are to automatically balance the columns of the last page\\
+% \cmd\twoside@sw &true means to format pages for duplex printing\\
+% \cmd\floats@sw &false means floats are migrated to end of document\\
+% \cmd\floatp@sw &true means endfloats are set one to a page\\
+% \cmd\class@amsfonts &if \cmd\@empty, means that \classname{amsfonts} will \emph{not} be loaded\\
+% \cmd\class@amssymb &if \cmd\@empty, means that \classname{amssymb} will \emph{not} be loaded\\
+% \cmd\frontmatter@footnote &if \cmd\undefined, means that the default (\cmd\footnote) will be used\\
+% \cmd\place@bibnumber &if \cmd\undefined, means that the default (inline) will be used\\
+% \end{tabular}
+%
+% Note: if \cmd\twocolumn@sw\ and \cmd\preprintsty@sw\ are both false,
+% then `galley' style is in effect. The \classoption{galley} option invokes
+% \classoption{onecolumn}, but does not affect the \cmd\preprintsty@sw.
+%
+% Note: \cmd\paperwidth\ and \cmd\paperheight\ are not integrated into this scheme,
+% and should be selected by the document alone.
+% \end{macro}
+%
+%
+% \section{Front Matter}
+%
+% \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.
+% \begin{macrocode}
+\renewcommand\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.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \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}
+% A counter to store the affiliation numbers used for the
+% superscript marks. This command defines \cmd\theaffil.
+% \begin{macrocode}
+\newcounter{affil}
+% \end{macrocode}
+% \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.
+% \revtex, 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.
+% \begin{macrocode}
+\renewcommand\author{% implicit #1
+ \@author@def{}% implicit #2
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\collaboration}
+% \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.
+% \begin{macrocode}
+\def\collaboration{% implicit #1
+ \groupauthors@sw{%
+ \class@warn{%
+ \string\collaboration\space is only allowed with superscriptaddress option.
+ Use superscriptaddress in place of groupedaddress, unsortedaddress, or runinaddress%
+ }%
+ }{}%
+ \@author@def{\@booleantrue\collaboration@sw}% implicit #2
+}%
+% \end{macrocode}
+% \end{macro}
+% \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{v4.0beta 2}{1999/06/20}
+% {Change handling of \cs{@author} to prevent parsing problems.
+% (Helps in error recovery when syntax errors exist)}
+%
+% Here are all the access procedures for the author data structure.
+%
+% We define a flag value for \cmd\@author (private),
+% 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.
+% \begin{macrocode}
+\def\@author@cleared{{}{}}%
+\def\@author@init{%
+ \let\@author\@author@cleared
+}%
+\def\@authorclear@sw{\@ifx{\@author\@author@cleared}}%
+\appdef\class@inithook{%
+ \@author@init
+}%
+\def\@author@def#1#2{%
+ \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}%
+\def\@author@gobble#1#2{}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\move@AU}
+% Move the most recent author to the list of current authors.
+% If we recently did a \cmd\@author@init, this is a no-op.
+% If we recently encountered a \cmd\collaboration,
+% we preface the author with the \cmd\CO@opr \ intercollated operator,
+% otherwise we apply \cmd\AU@opr.
+% \begin{macrocode}
+\def\move@AU{%
+ \@authorclear@sw{}{%
+ \collaboration@sw{%
+ \expandafter\appdef
+ \expandafter\AU@grp
+ \expandafter{%
+ \expandafter \CO@opr
+ \@author
+ }%
+ }{%
+ \expandafter\appdef
+ \expandafter\AU@grp
+ \expandafter{%
+ \expandafter \AU@opr
+ \@author
+ }%
+ }%
+ }%
+ \@author@init
+ \@booleanfalse\collaboration@sw
+}%
+% \end{macrocode}
+% \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{v4.0beta 6}{2001/02/13}
+% {Actually append AU@grp to @AAClist.}
+%
+% We first finish off any author- or affiliation groups in progress.
+% Next, we detect the case where there is an author 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{%
+ \move@AU\move@AF
+ \@ifx{\AU@grp\@empty}{}{%
+ \@ifx{\AF@grp\@empty}{%
+ \begingroup
+ \let\href\@secondoftwo
+ \let\AU@opr\@firstoftwo
+ \let\CO@opr\@firstoftwo
+ \class@warn{Assuming \string\noaffiliation\space for \AU@grp}%
+ \endgroup
+ \begingroup\@affiliation{\blankaffiliation}%\endgroup in \@affiliation
+ \move@AF
+%
+% \appdef \@AAC@list{\AF@opr}%
+% \appdef@eval\@AAC@list{\AF@grp}%
+% \appdef@e \@AAC@list{\AU@grp}%
+% \let\AU@grp\@empty
+% \let\AF@grp\@empty
+ }{}%
+ }%
+ \move@AUAF
+}%
+% \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}{\AU@grp}
+% The control sequence name \cmd\AU@grp\ accretes
+% 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.
+% 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.
+%
+% \begin{macrocode}
+\let\AU@grp\@empty
+% \end{macrocode}
+% \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}
+\renewcommand\and{\class@err{\protect\and\space is not supported}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Commands for affiliation}%
+%
+% \begin{macro}{\affiliation}
+% 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 similarity 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.
+%
+% 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{%
+ \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}
+% User-level command signifying that the current group of authors 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\blankaffiliation, which \cmd\@affil@group\ can recognize as a no-op.
+% \begin{macrocode}
+\newcommand\noaffiliation{%
+ \move@AU\move@AF
+% \edef\AF@grp{\AF@grp}%
+ \begingroup\@affiliation{\blankaffiliation}%
+% \move@AF
+}%
+\def\blankaffiliation{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@affil@cleared}
+% \begin{macro}{\@affil@init}
+% \begin{macro}{\@affilclear@sw}
+% \begin{macro}{\@affil@def}
+% \begin{macro}{\@affil@join@}
+% \begin{macro}{\@affil@join}
+%
+% 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),
+% and a procedure to add new ancillary data to the affiliation.
+% \begin{macrocode}
+\def\@affil@cleared{{}{}}%
+\def\@affil@init{%
+ \let\@affil\@affil@cleared
+}%
+\def\@affilclear@sw{\@ifx{\@affil\@affil@cleared}}%
+\appdef\class@inithook{%
+ \@affil@init
+}%
+\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}
+%
+% \begin{macro}{\move@AF}
+% Move the most recent affiliation to the affiliation group.
+% If we recently did a \cmd\@affil@init, this is a no-op.
+% \begin{macrocode}
+\def\move@AF{%
+ \@affilclear@sw{}{%
+% \end{macrocode}
+% 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, \cmd\temp@sw\ will be set to true,
+% \cmd\@tempc\ will be set to the existing 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 positive result.
+%
+% This procedure uses \cmd\@tempa\ and sets \cmd\@tempc, \cmd\@tempd, and \cmd\temp@sw.
+% \begin{macrocode}
+ \@booleanfalse\temp@sw
+ \let\@tempd\@empty
+ \@affils@sw{%
+ \expandafter\@firstoftwodef\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\@secondoftwodef\expandafter\@tempb\@affil
+ \@ifx{\@tempb\@empty}{}{%
+ \@ifx{\@tempb\@tempd}{}{%
+ \class@warn{%
+ Ancillary information for \@tempa\space must not be different!
+ Please put it on the first instance%
+ }%
+ }%
+ }%
+ \appdef@eval\AF@grp\@tempc
+ }%
+% \end{macrocode}
+% False clause: This is a new address:
+% increment the counter to get a unique ID for the new affiliation
+% and append the new number, address, and footnote to the list \cmd\@AFF@list.
+% \begin{macrocode}
+ {%
+ \@if@empty{\expandafter\@firstoftwo\@affil}{%
+ \edef\@tempc{\z@}%
+ }{%
+ \stepcounter{affil}%
+ \edef\@tempc{\theaffil}%
+ }%
+ \appdef \@AFF@list{\AFF@opr}%
+ \appdef@eval\@AFF@list\@tempc
+ \appdef@e \@AFF@list{\@affil}%
+ \appdef@eval\AF@grp\@tempc
+ }%
+% \end{macrocode}
+% Append the ID of the affiliation to the affiliation group of the current author group.
+% \begin{macrocode}
+ \@affil@init
+ }%
+}%
+\def\@firstoftwodef#1#2#3{%
+ \def#1{#2}%
+}%
+\def\@secondoftwodef#1#2#3{%
+ \def#1{#3}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\move@AUAF}
+% \changes{v4.h}{1998/06/25}
+% {Changes to support groups of affiliations}
+% Append \cmd\AF@grp\ and \cmd\AU@grp\ to \cmd\@AAC@list\ %
+% and merge any new \cmd\AF@grp\ to \cmd\@AFG@list.
+% \begin{macrocode}
+\def\move@AUAF{%
+% \end{macrocode}
+% Entire procedure is predicated on something non-trivial to move.
+%
+% If both author and affiliation are nil, bail out.
+%
+% No, try that again:
+%
+% If we have seen any affiliations, 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.
+% \begin{macrocode}
+%\@ifx{\AU@grp\@empty}{\@ifx{\AF@grp\@empty}{\true@sw}{\false@sw}}{\false@sw}%
+ \@ifx{\AF@grp\@empty}%
+ {}{%
+% \end{macrocode}
+% First, 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}
+% Next, append the current affiliation group to \cmd\@AFG@list,
+% (if it is not already there)
+% using \cmd\AFS@opr\ as the intercollated operator.
+%
+% Note that \cmd\@AFG@list\ is a list of \emph{unique} affiliation groups.
+% \begin{macrocode}
+ \@ifx{\@empty\AU@grp}{}{%
+ \@ifx{\@empty\AF@grp}{}{%
+ \@booleanfalse\temp@sw
+ \def\AFS@opr{\x@match\AF@grp}%
+ \@AFG@list
+ \temp@sw{}{%
+ \appdef \@AFG@list{\AFS@opr}%
+ \appdef@eval\@AFG@list{\AF@grp}%
+ }%
+ }%
+ }%
+% \end{macrocode}
+% Finally, null out the macros holding the author group and affiliation group, respectively.
+% \begin{macrocode}
+ \let\AU@grp\@empty
+ \let\AF@grp\@empty
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@AAC@list}
+% The \cmd\@AAC@list\ macro accretes
+% 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).
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \let\@AAC@list\@empty
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@AFG@list}
+% The macro \cmd\@AFG@list\ accretes \cmd\AF@grp,
+% with \cmd\AFS@opr\ as the intercollated operator.
+%
+% This token list is employed when and only when \classoption{groupedaddress} is in effect.
+%
+% It must be empty at the beginning of the document.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \let\@AFG@list\@empty
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@AFF@list}
+% The macro \cmd\@AFF@list\ accretes the list of affiliations
+% with \cmd\AFF@opr\ as the intercollated operator.
+% It must be empty at the beginning of the document.
+%
+% 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@footnote\ (FIXME: never used),
+% \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.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \let\@AFF@list\@empty
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\AF@grp}
+% The macro \cmd\AF@grp\ accretes affiliation IDs into an affiliation group.
+% It must be empty at the beginning of the document.
+% \begin{macrocode}
+\let\AF@grp\@empty
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@affil@match}
+% The definition for the \cmd\AFF@opr, the intercollated operator for \cmd\@AFF@list,
+% when adding a new affiliation: 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).
+%
+% 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 footnote number 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{%
+ \temp@sw{}{%
+ \def\@tempifx{#3}%
+ \@ifx{\@tempifx#1}{%
+ \@booleantrue\temp@sw
+ \def\@tempc{#2}%
+ \def\@tempd{#4}%
+ }{%
+ }%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@tempaffil@script}
+% Give a superscript marker to the address,
+% and junk the text argument (|#2|).
+% \begin{macrocode}
+%\def\@tempaffil@script#1#2{%
+% ,\,#1%
+%}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@tempaffil@group}
+%
+% Execute if we are grouping authors above `main addresses' (\classoption{groupedaddress}).
+% Put temp address in a footnote, with explanatory text.
+% Note: this procedure uses \cmd\@tempb\ and \cmd\@tempc\
+% to communicate to \cmd\AFF@opr.
+% \begin{macrocode}
+%\def\@tempaffil@group#1#2{%
+% \def\@tempc{#1}%
+% \def\@tempb{#2}%
+% \begingroup
+% \let\AFF@opr \@affil@footnote
+% \@AFF@list
+% \endgroup
+%}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@affil@footnote}
+% The alias of \cmd\AFF@opr\ when \cmd\@AFF@list\
+% is executed by \cmd\@tempaffil@group.
+% If we find a match of the affiliation number to \cmd\@tempc,
+% then footnotes are formatted with the relevant content and \cmd\@tempb.
+% \begin{macrocode}
+%\def\@affil@footnote#1#2#3{%
+% \def\@tempifx{#1}%
+% \@ifx{\@tempifx\@tempc}{%
+% \comma@space
+% \expandafter\frontmatter@footnote\expandafter{\@tempb#2}%
+% \frontmatter@footnote{#3}%
+% }{%
+% }%
+%}%
+% \end{macrocode}
+% \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\class@inithook{%
+ \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.
+% \begin{macrocode}
+\def\sanitize@url{%
+ \@makeother\%%
+ \@makeother\~%
+ \@makeother\_%
+}%
+\newcommand*\email[1][Electronic address: ]{\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.
+% \begin{macrocode}
+\newcommand*\homepage[1][URL:~]{\begingroup\sanitize@url\@homepage{#1}}%
+\def\@homepage#1#2{%
+ \endgroup
+ \@AF@join{#1\url{#2}}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\url}
+% \begin{macro}{\href}
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \providecommand\url{\texttt}%
+ \providecommand\href[2]{\url{#2}}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\thanks}
+%
+% The operative version of \cmd\thanks\ appends an item to \cmd\@author, or \cmd\@affil's auxiliary data.
+% \begin{macrocode}
+\def\thanks{% implicit #1
+ \@AF@join
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\altaffiliation}
+% \changes{v4.d}{1998/01/31}
+% {change name from \cs{tempaffiliation}}
+% \changes{v4.l}{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{v4.l}{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@err}
+% This command will be executed if are in a \classoption{groupedaddress} situation and
+% the document contained a \cmd\collaboration\ command.
+%
+% There already has been issued a warning message explaining that \cmd\collaboration\ is wrong in this case,
+% so here we simply gobble.
+% \begin{macrocode}
+\def\@collaboration@err#1#2{%
+%\class@warn{An illegal \string\collaboration\ command has been entered!}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\doauthor}
+% 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.
+% \begin{macrocode}
+\def\doauthor#1#2#3{%
+ \ignorespaces#1\unskip\@listcomma
+ \def\@tempifx{#3}%
+ \@ifx{\@tempifx\@empty}{%
+ \def\@tempifx{#2}%
+ \@ifx{\@tempifx\@empty}{}{\frontmatter@footnote{#2}}%
+ }{%
+ #3%
+ \def\@tempifx{#2}%
+ \@ifx{\@tempifx\@empty}{}{\comma@space\frontmatter@footnote{#2}}%
+ }%
+ \space \@listand
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\AF@opr}
+% DPC: The number(s) associated to the affiliation address(es).
+% \end{macro}
+%
+% \begin{macro}{\@thanks}
+% \changes{v4.d}{1998/01/31}
+% {\cs{comma@space} added}
+% Society-specific options may change this. \cmd\comma@space\ is a separator
+% between adjacent footnotes.
+% \begin{macrocode}
+\def\@thanks{\comma@space\footnote}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\x@match}
+% Procedure \cmd\x@match\ is used as an alias \cmd\AFS@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
+ \temp@sw{%
+ \expandafter\frontmatter@footnotemark
+ \expandafter{\@tempb}%
+ }{%
+ \stepcounter\@mpfn
+ \protected@xdef\@tempb{\the\csname c@\@mpfn\endcsname}%
+ \expandafter\frontmatter@footnotemark
+ \expandafter{\@tempb}%
+ \expandafter\g@addto@macro
+ \expandafter\@FMN@list
+ \expandafter{%
+ \expandafter \@TBN@opr
+ \expandafter {\@tempb}{#1}%
+ }%
+ }%
+ \endgroup
+}%
+\appdef\class@inithook{%
+ \global\let\@FMN@list\@empty
+}%
+\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{\thempfn}%
+ \@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}%
+}%
+\def\@keywords{}%
+% \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}
+% 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}
+\renewcommand*\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}%
+}%
+\def\@pacs{}%{\class@warn{No PACS numbers}}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{The \cs{preprint} command}
+%
+% \changes{v4.g}{1998/06/10}
+% {multiple preprint commands}
+% \begin{macrocode}
+\def\preprint#1{\gappdef\@preprint{\preprint{#1}}}%
+\let\@preprint\@empty
+% \end{macrocode}
+%
+% \subsection{draft}
+% DPC: Name clash with draft option. \LaTeX\ doesn't care, but it confuses me.
+%
+% This command is a 3.1 relic, now removed.
+% \begin{macrocode}
+%\newcommand\draft{\@booleantrue\draft@sw}%
+% \end{macrocode}
+%
+% \subsection{The \env{abstract} environment}%
+%
+% \changes{v4.0beta 2}{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{v4.d}{1998/01/31}
+% {If empty \cs{abstractname} omit spacing}
+% \begin{macrocode}
+% \changes{v4.e}{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}.
+%
+% The user can elect to use this new mechanism via the \classoption{newabstract};
+% likewise the old mechanism via the \classoption{oldabstract}.
+%
+% \begin{macrocode}
+\newenvironment{abstract}{%
+ \aftermaketitle@chk{\begin{abstract}}%
+ \global\setbox\absbox\vbox\bgroup
+ \color@begingroup
+ \columnwidth\textwidth
+ \hsize\columnwidth
+ \@parboxrestore
+ \def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}\c@mpfootnote\z@
+ \let\@footnotetext\frontmatter@footnotetext
+ \minipagefootnote@init
+ \let\@listdepth\@mplistdepth \@mplistdepth\z@
+ \@minipagerestore
+ \@setminipage
+ \frontmatter@abstractheading
+ \frontmatter@abstractfont
+ \let\footnote\mini@note
+}{%
+ \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 \texttt{p@mpfootnote} instead of \texttt{p@mpfootnote}, and
+% \cmd\frontmatter@makefntext\ instead of \cmd\@makefntext.
+%
+% \begin{macrocode}
+\long\def\frontmatter@footnotetext#1{%
+ \minipagefootnote@pick
+ \reset@font\footnotesize
+ \interlinepenalty \interfootnotelinepenalty
+ \splittopskip \footnotesep
+ \splitmaxdepth \dp \strutbox
+ \set@footnotewidth
+ \@parboxrestore
+ \protected@edef\@currentlabel{\csname p@mpfootnote\endcsname\@thefnmark}%
+ \color@begingroup
+ \frontmatter@makefntext{%
+ \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox
+ }%
+ \color@endgroup
+ \minipagefootnote@drop
+}%
+% \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@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
+% \tracingall
+ \preprintsty@sw{%
+ \do@output@MVL{%
+ \vskip\frontmatter@preabstractspace
+ \vskip200\p@\@plus1fil
+ \penalty-200\relax
+ \vskip-200\p@\@plus-1fil
+ }%
+ }{%
+ \addvspace{\frontmatter@preabstractspace}%
+ }%
+% \leavevmode
+ \begingroup
+ \dimen@\baselineskip
+ \setbox\z@\vtop{\unvcopy\absbox}%
+ \advance\dimen@-\ht\z@\advance\dimen@-\prevdepth
+ \@ifdim{\dimen@>\z@}{\vskip\dimen@}{}%
+ \endgroup
+ \unvbox\absbox
+ \@ifx{\@empty\mini@notes}{}{\mini@notes\par}%
+% \par
+ \addvspace\frontmatter@postabstractspace
+% \showlists
+% \tracingplain
+}%
+% \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{v4.0beta 3}{1999/11/13}
+% {grid changes with ltxgrid}
+% \begin{macrocode}
+\newenvironment{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{v4.d}{1998/01/31}
+% {hookify}
+% Put it all together to format the title block.
+% \begin{macrocode}
+\def\maketitle{%
+ \@author@finish
+ \title@column\titleblock@produce
+ \suppressfloats[t]%
+% \end{macrocode}
+% Now save some memory.
+% \begin{macrocode}
+ \let\and\relax
+ \let\affiliation\@gobble
+% \let\address\affiliation
+ \let\author\@gobble
+ \let\@AAC@list\@empty
+ \let\@AFF@list\@empty
+ \let\@AFG@list\@empty
+% \let\keywords\@gobble
+% \let\@keywords\@empty
+ \let\@AF@join\@AF@join@error
+ \let\email\@gobble
+ \let\@address\@empty
+ \let\maketitle\relax
+ \let\thanks\@gobble
+ \titlepage@sw{%
+ \vfil
+ \clearpage
+ }{}%
+}%
+% \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}
+% Special footnote version [of footnotes] for \cmd\thanks,
+% copied from \classname{article} class \cmd\maketitle.
+% \changes{v4.0beta 2}{1999/06/20}
+% {Set \cs{footnote} to \LaTeX\ standard version for this scope.}
+% \begin{macrocode}
+ \let\footnote\footnote@latex
+ \let\@makefnmark\@makefnmark@latex
+ \let\@footnotemark\@footnotemark@latex
+ \let\thefootnote\frontmatter@thefootnote
+% \let\@makefntext\frontmatter@makefntext
+ \global\c@footnote\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.
+% \begin{macrocode}
+ \frontmatter@abstract@produce
+ \@pacs@produce\@pacs
+ \@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.
+%
+% Journals 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.
+%
+% At this point, we patch into \cmd\let@mark\ so that the common markup idiom \cmd\\ is taken care of.
+% \begin{macrocode}
+\def\frontmatter@title@produce{%
+ \begingroup
+ \frontmatter@title@above
+ \frontmatter@title@format
+ \@title
+ \@ifx{\@title@aux\@title@aux@cleared}{}{%
+ \expandafter\frontmatter@footnote\expandafter{\@title@aux}%
+ }%
+ \par
+% \@ifx{\@shorttitle\@empty}{%
+% \markboth{\@title}{\@title}%
+% }{%
+% \markboth{\@shorttitle}{\@shorttitle}%
+%% \class@warn{Unused short title ignored}%
+% }%
+ \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}
+% \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.
+% \begin{macrocode}
+\def\frontmatter@author@produce@script{%
+ \begingroup
+ \let\@author@present\@author@present@script
+% \end{macrocode}
+% \changes{v4.l}{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.
+%
+% 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\@AFU@list\@empty
+% \let\AFS@opr \affils@present@script
+% \@AFG@list
+% \let\AF@opr \affil@present@script
+% \@AFU@list
+ \let\AFF@opr \@affil@script
+% \say\@AFF@list
+ \@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{%
+ \par
+ \begingroup
+ \frontmatter@collaboration@above
+ \@author@present{(\ignorespaces#2\unskip)}{#3}%
+ \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\AFS@opr, this procedure is applied to \cmd\@AFG@list\ and builds
+% \cmd\@AFU@list, a list of unique affiliations found within affiliation groups.
+%
+% \begin{macrocode}
+%\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{macrocode}
+% \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.
+% \begin{macrocode}
+%\def\affil@present@script#1{%
+% \def\@tempa{#1}%
+% \begingroup
+% \frontmatter@affiliationfont
+% \let\AFF@opr \affil@script
+% \@AFF@list
+% \endgroup
+%}%
+% \end{macrocode}
+% \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
+ \textsuperscript{\normalfont#1}%
+ #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.
+%
+% FIXME: dead code.
+% \begin{macrocode}
+\def\@affil@script#1#2#3{%
+ \@ifnum{#1=\z@}{}{%
+ \par
+ \begingroup
+ \frontmatter@affiliationfont
+% \textsuperscript{\normalfont#1}%
+ \textsuperscript{#1}%
+ #2%
+ \@if@empty{#3}{}{\frontmatter@footnote{#3}}%
+ \par
+ \endgroup
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@author@present@script}
+% \changes{v4.h}{1998/06/25}
+% {Changes to support groups of affiliations}
+% 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{%
+ \begingroup
+% \parskip\@author@parskip\relax
+ \gdef\comma@space{\textsuperscript{,\,}}%
+% \@ifx{\@affilID@temp\@empty}{%
+% \doauthor{#1}{#2}{}%
+% }{%
+% \expandafter\set@count@\@affilID@temp{}{}\@@nil
+% \@ifnum{\count@=\z@}{%
+% \doauthor{#1}{#2}{}%
+% }{%
+% \doauthor{#1}{#2}{%
+% \textsuperscript{\expandafter\@affilcomma\@affilID@temp\relax\relax}%
+% }%
+% }%
+% }%
+ \doauthor{#1}{#2}{%
+ \let\@tempa\@empty
+ \expandafter\@affil@present@script\@affilID@temp\relax
+ }%
+ \endgroup
+ \advance\@tempcnta\m@ne
+}%
+%\def\set@count@#1#2\@@nil{%
+% \count@#1\relax
+%}%
+\def\@affilcomma#1#2{%
+ \@ifx{\z@#1}{%
+ \@ifx{\relax#2}{}{%
+ \@affilcomma{#2}%
+ }%
+ }{%
+ #1%
+ \@ifx{\relax#2}{}{%
+ \@ifx{\z@#2}{%
+ \@affilcomma
+ }{%
+ ,\,\@affilcomma{#2}%
+ }%
+ }%
+ }%
+}%
+\def\@affil@present@script#1{%
+ \@ifx{\relax#1}{%
+ \@ifx{\@tempa\@empty}{}{%
+ \textsuperscript{\expandafter\@affilcomma\@tempa\relax\relax}%
+ }%
+ }{%
+ \@ifx{\z@#1}{}{\appdef\@tempa{{#1}}}%
+ \@affil@present@script
+ }%
+}%
+\@provide\@author@parskip{\z@skip}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Authors and affiliations in groupedaddress style}
+%
+% \begin{macro}{\frontmatter@author@produce@group}
+% \cmd\frontmatter@author@produce@group\ is an alias for \cmd\frontmatter@author@produce,
+% the procedure that formats the author/affiliation list when \classoption{groupedaddress} is in effect.
+%
+% 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.
+% \begin{macrocode}
+\def\frontmatter@author@produce@group{%
+ \begingroup
+ \let\@author@present\@author@present@group
+ \frontmatter@authorformat
+ \let\AFS@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}
+% Alias of \cmd\AFS@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 is |#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 communicate accumulate the number of authors in the current affiliation set.
+%
+% QUERY: does 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}% % 0B13
+ \@tempcnta\z@
+ \let\AU@opr \undefined % 0B13
+ \let\CO@opr \undefined % 0B13
+ \def\AF@opr{\@affilID@count\AF@temp\@tempcnta}% 0B13
+ \@AAC@list
+% \end{macrocode}
+%
+% If 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 % 0B13
+ \let\CO@opr \undefined % 0B13
+ \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 used to count 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{\z@\AF@temp}{}{%
+ \advance\@tempcnta\@ne
+ }%
+ }%
+ \@ifnum{\@tempcnta=\tw@}{%
+ \let\@listcomma\relax
+ }{}%
+ \def\after@address{\@listcomma\ \@listand}%
+ \runinaddress@sw{%
+ }{%
+ \tightenlines@sw{%
+ }{%
+ \parskip\z@ %space between affilations in grouped mode
+ }%
+ \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
+%\smallskip
+}%
+% \end{macrocode}
+% \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@err
+}%
+\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@err
+}%
+% \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 createed 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{\count@=\z@}{}{#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 second parameter's being the token \cmd\blankaffiliation.
+% \begin{macrocode}
+\def\@affil@group#1#2#3{%
+ \@ifnum{\count@=#1\relax}{%
+ \@ifx{#2\blankaffiliation}{}{%
+ #2%
+ \@if@empty{#3}{}{%
+ \frontmatter@footnote{#3}%
+ }%
+ \after@address
+ }%
+ \advance\@tempcnta\m@ne
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@author@present@group}
+% \changes{v4.d}{1998/01/31}
+% {\cs{comma@space}}
+% This version of \cmd\AU@opr\ applies to the \classoption{groupedaddress} class option.
+% Traverse the list calling the \cmd\doauthor\ hook on each author.
+% \begin{macrocode}
+\def\@author@present@group#1#2{%
+ \gdef\comma@space{\gdef\comma@space{\textsuperscript{,\,}}}%
+ \doauthor{#1}{#2}{}%
+ \advance\@tempcnta\m@ne
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@pacs@produce}
+% PACS, keywords and dates.
+% \changes{v4.d}{1998/01/31}
+% {PACS boxed to width of abstract}
+% \changes{v4.0beta 2}{1999/06/20}
+% {Separate option now controls production}
+% \changes{v4.0beta 5}{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{v4.0beta 5}{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
+}%
+\def\present@FM@footnote#1#2{%
+ \begingroup
+ \csname c@\@mpfn\endcsname#1\relax
+ \def\@thefnmark{\thempfn}%
+ \frontmatter@footnotetext{#2}%
+ \endgroup
+}%
+\def\frontmatter@footnote@produce@endnote{%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@thefootnote}
+% The 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.
+% \begin{macrocode}
+\def\frontmatter@thefootnote{%
+ \altaffilletter@sw{\@alph}{\@fnsymbol}\c@footnote
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@makefnmark}
+% The default procedure for setting the footnote mark within the frontmatter.
+% Journals will 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.
+% \begin{macrocode}
+\long\def\frontmatter@makefntext#1{%
+ \parindent 1em
+ \noindent
+ \Hy@raisedlink{\hyper@anchorstart{frontmatter@\the\c@footnote}\hyper@anchorend}%
+ \@makefnmark
+ #1%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@setup}
+% The default type specification for the title page.
+% Journals 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.
+% Journals 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.
+% Journals will override this definition.
+% \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).
+% Journals 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}.
+% Journals will override this definition.
+% \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.
+% Journals will override this definition.
+% \begin{macrocode}
+\def\frontmatter@affiliationfont{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@RRAP@format}
+% The default type specification for the dates.
+% Journals 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{v4.h}{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
+% \c@secnumdepth-\maxdimen
+ \expandafter\section
+ \expandafter*%
+ \expandafter{%
+ \csname#1name\endcsname
+ }%
+ \let\appendix\appendix@toc
+ \@starttoc{#1}%
+ \endgroup
+}%
+\def\appendix@toc{}%
+% \end{macrocode}
+%
+%
+% \section{Body}
+%
+% \subsection{counters}
+% The following definitions are probably identical to those in
+% \file{classes.dtx}%
+% \begin{macrocode}
+\def\labelenumi{\theenumi.}
+\def\theenumi{\arabic{enumi}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\labelenumii{(\theenumii)}
+\def\theenumii{\alph{enumii}}
+\def\p@enumii{\theenumi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\labelenumiii{\theenumiii.}
+\def\theenumiii{\roman{enumiii}}
+\def\p@enumiii{\theenumi(\theenumii)}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\labelenumiv{\theenumiv.}
+\def\theenumiv{\Alph{enumiv}}
+\def\p@enumiv{\p@enumiii\theenumiii}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\labelitemi{\textbullet}
+\def\labelitemii{\normalfont\bfseries\textendash}
+\def\labelitemiii{\textasteriskcentered}
+\def\labelitemiv{\textperiodcentered}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\pagenumbering{arabic}
+% \end{macrocode}
+%
+% \subsection{float parameters}
+%
+% from the old aps.sty. (DPC: same as article I think)
+% AO: here, \LaTeX's standard classes fail very poorly
+% (the price of backward compatability): the values for
+% \cmd\floatpagefraction\ and \cmd\dblfloatpagefraction\
+% need to be raised to avoid creating extremely short
+% float pages.
+% \begin{macrocode}
+\setcounter{topnumber}{2}
+\def\topfraction{.9}
+\setcounter{bottomnumber}{1}
+\def\bottomfraction{.9}
+\setcounter{totalnumber}{3}
+\def\textfraction{.1}
+\def\floatpagefraction{.9}
+\setcounter{dbltopnumber}{2}
+\def\dbltopfraction{.9}
+\def\dblfloatpagefraction{.9}
+% \end{macrocode}
+%
+% \subsection{List Environments}
+%
+% \begin{macrocode}
+\newenvironment{verse}{%
+ \let\\=\@centercr
+ \list{}{%
+ \itemsep\z@ \itemindent -1.5em\listparindent \itemindent
+ \rightmargin\leftmargin\advance\leftmargin 1.5em}\item[]%
+}{%
+ \endlist
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newenvironment{quotation}{%
+ \list{}{%
+ \listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin \parsep \z@ \@plus\p@}\item[]%
+}{%
+ \endlist
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newenvironment{quote}{%
+ \list{}{%
+ \rightmargin\leftmargin}\item[]%
+}{%
+ \endlist
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\descriptionlabel#1{%
+ \hspace\labelsep \normalfont\bfseries #1%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newenvironment{description}{%
+ \list{}{%
+ \labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel
+ }%
+}{%
+ \endlist
+}%
+% \end{macrocode}
+%
+% \subsection{Sectioning Commands}
+%
+% \subsubsection{Counters and Their Productions}%
+% \begin{macrocode}
+\newcounter{part}
+\newcounter{section}
+\newcounter{subsection}[section]
+\newcounter{subsubsection}[subsection]
+\newcounter{paragraph}[subsubsection]
+\newcounter{subparagraph}[paragraph]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\thepart {\Roman{part}} %
+\def\thesection {\Roman{section}}
+\def\p@section {}
+\def\thesubsection {\Alph{subsection}}
+\def\p@subsection {\thesection\,}
+\def\thesubsubsection {\arabic{subsubsection}}
+\def\p@subsubsection {\thesection\,\thesubsection\,}
+\def\theparagraph {\alph{paragraph}}
+\def\p@paragraph {\thesection\,\thesubsection\,\thesubsubsection\,}
+\def\thesubparagraph {\arabic{subparagraph}}
+\def\p@subparagraph {\thesection\,\thesubsection\,\thesubsubsection\,\theparagraph\,}
+% \end{macrocode}
+%
+% \subsubsection{The Acknowledgments Environment}%
+% This user-level markup produces a head introducing
+% the acknowledgments, and acts as a wrapper for the text.
+% In this implementation, it is an unnumbered section,
+% but appears within the toc.
+%
+% For compatiability's sake, we implement it under the alternative
+% spelling \env{acknowledgements}.
+% \changes{v4.0beta 3}{1999/11/13}
+% {also spelled ``acknowledgements''.}
+% \changes{v4.0beta 4}{2000/05/18}
+% {But alternative spelling is deprecated.}
+% \begin{macrocode}
+\newenvironment{acknowledgments}{%
+ \acknowledgments@sw{%
+ \section*{\acknowledgmentsname}%
+ }{%
+ \par
+ \phantomsection
+ \addcontentsline{toc}{section}{\protect\numberline{}\acknowledgmentsname}%
+ }%
+}{%
+ \par
+}%
+\@booleantrue\acknowledgments@sw
+\newenvironment{acknowledgements}{%
+ \replace@environment{acknowledgements}{acknowledgments}%
+}{%
+ \endacknowledgments
+}%
+% \end{macrocode}
+%
+% \subsubsection{Part Opener}%
+% section setup copied verbatim from revtex3 aps/osa.
+% Does not explicitly depend on pointsize options.
+% \begin{macrocode}
+\def\part{\par
+ \addvspace{4ex}%
+ \@afterindentfalse
+ \secdef\@part\@spart}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@part[#1]#2{%
+ \@ifnum{\c@secnumdepth >\m@ne}{%
+ \refstepcounter{part}%
+ \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}%
+ }{%
+ \addcontentsline{toc}{part}{#1}%
+ }%
+ \begingroup
+ \parindent \z@ \raggedright
+ \interlinepenalty\@M
+ \@ifnum{\c@secnumdepth >\m@ne}{%
+ \Large \bf \partname~\thepart%
+ \par\nobreak
+ }{}%
+ \huge \bf
+ #2%
+ \markboth{}{}\par
+ \endgroup
+ \nobreak
+ \vskip 3ex
+ \@afterheading
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@spart#1{{\parindent \z@ \raggedright
+ \interlinepenalty\@M
+ \huge \bf
+ #1\par}
+ \nobreak
+ \vskip 3ex
+ \@afterheading}
+% \end{macrocode}
+%
+% \subsubsection{Stacked Heads}%
+% Here are the class default definitions for sectioning commands.
+% A society or a journal substyle will likely override these definitions.
+%
+% In doing so, you can customize the formatting for a particular level by defining,
+% e.g., \cmd\@hangfrom@section\ or \cmd\@subsectioncntformat.
+% \begin{macrocode}
+\def\section{%
+ \@startsection
+ {section}%
+ {1}%
+ {\z@}%
+ {0.8cm \@plus1ex \@minus .2ex}%
+ {0.5cm}%
+ {\normalfont\small\bfseries}%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\subsection{%
+ \@startsection
+ {subsection}%
+ {2}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {\normalfont\small\bfseries}%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\subsubsection{%
+ \@startsection
+ {subsubsection}%
+ {3}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {\normalfont\small\itshape}%
+}%
+% \end{macrocode}
+%
+% \subsubsection{Runin Heads}%
+% \begin{macrocode}
+\def\paragraph{%
+ \@startsection
+ {paragraph}%
+ {4}%
+ {\parindent}%
+ {\z@}%
+ {-1em}%
+ {\normalfont\normalsize\itshape}%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\subparagraph{%
+ \@startsection
+ {subparagraph}%
+ {5}%
+ {\parindent}%
+ {3.25ex \@plus1ex \@minus .2ex}%
+ {-1em}%
+ {\normalfont\normalsize\bfseries}%
+}%
+% \end{macrocode}
+%
+%
+% \subsection{Math}
+%
+% \begin{macro}{\theequation}
+% We change the production of the equation counter so that
+% we can accomodate the \classoption{eqsecnum} option.
+% \begin{macrocode}
+\def\theequation{%
+ \theequation@prefix\arabic{equation}%
+}%
+\def\theequation@prefix{}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Type Size-Dependent Settings}
+%
+% Note that many parameters, as well as the meaning of
+% \cmd\normalsize, are deferred until
+% \cmd\AtEndOfClass\ time.
+% Therefore, code elsewhere in this class \emph{should not}
+% assume these things' values have been set!
+% \begin{macrocode}
+\AtEndOfClass{%
+ \expandafter\input\expandafter{\@pointsize pt\substyle@ext}%
+}%
+% \end{macrocode}
+%
+%
+% \subsection{All Point Sizes}
+% \begin{macrocode}
+\setcounter{secnumdepth}{4}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\lineskip 1pt
+\normallineskip 1pt
+\def\baselinestretch{1}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@lowpenalty 51
+\@medpenalty 151
+\@highpenalty 301
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@beginparpenalty -\@lowpenalty
+\@endparpenalty -\@lowpenalty
+\@itempenalty -\@lowpenalty
+% \end{macrocode}
+%
+% \begin{macrocode}
+\arraycolsep 3pt
+\tabcolsep 2pt
+\arrayrulewidth .4pt
+\doublerulesep 2pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\skip\@mpfootins = 0pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\fboxsep = 3.0pt
+\fboxrule = 0.4pt
+% \end{macrocode}
+%
+% \subsection{Figures}
+% \changes{v4.0beta 2}{1999/06/20}
+% {Processing delayed to \cs{AtBeginDocument} time}
+%
+% \begin{environment}{figure}
+% We define the \env{figure} environment.
+% Later, we will horse around with its meaning
+% in order to accomodate \cmd\floats@sw.
+% \begin{macrocode}
+\newenvironment{figure}
+ {\@float{figure}}
+ {\end@float}
+\newenvironment{figure*}
+ {\@dblfloat{figure}}
+ {\end@dblfloat}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\@makecaption}
+% If caption is one line long, to be centered; if lines turn, then set justified.
+% \begin{macrocode}
+\newlength\abovecaptionskip
+\newlength\belowcaptionskip
+\setlength\abovecaptionskip{10\p@}
+\setlength\belowcaptionskip{2\p@}
+% \end{macrocode}
+%
+% \changes{v4.0beta 2}{1999/06/20}
+% {One-line caption sets flush left.}
+% \changes{v4.0beta 3}{1999/11/13}
+% {Prevent an inner footnote from performing twice}
+% \begin{macrocode}
+\long\def\@makecaption#1#2{%
+ \par
+% \nobreak
+ \vskip\abovecaptionskip
+ \begingroup
+ \small\rmfamily
+ \sbox\@tempboxa{%
+ \let\\\heading@cr
+ #1: #2%
+ }%
+ \@ifdim{\wd\@tempboxa >\hsize}{%
+ \begingroup
+ \samepage
+ \flushing
+ \let\footnote\@footnotemark@gobble
+ #1: #2\par
+ \endgroup
+ }{%
+ \global \@minipagefalse
+ \hb@xt@\hsize{\hfil\unhbox\@tempboxa\hfil}%
+ }%
+ \endgroup
+ \vskip\belowcaptionskip
+}%
+\def\@footnotemark@gobble{%
+ \@footnotemark
+ \@ifnextchar[{\@gobble@opt@i}{\@gobble}%
+}%
+\def\@gobble@opt@i[#1]#2{}%
+\def\@mpmakefntext#1{%
+ \flushing
+ \parindent=1em
+ \noindent
+ \hb@xt@1em{\hss\@makefnmark}%
+ #1%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\thefigure}
+% The figure counter and float placement defaults.
+% \begin{macrocode}
+\newcounter{figure}
+\renewcommand \thefigure {\@arabic\c@figure}
+% \end{macrocode}
+% Note that we give the `!' modifier by default.
+% This is an effort to avoid the syndrome wherein
+% a deferred float finds itself unqualified for
+% placement, thereby getting carried until \cmd\clearpage.
+% \begin{macrocode}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{\figurename~\thefigure}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Deferring \env{figure} Floats}%
+%
+% We install a hook at \cmd\AtBeginDocument\ time which determines if
+% figures will float or will be deferred until
+% \cmd\printfigures\ time.
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \do@if@floats{figure}{.fgx}%
+}%
+\appdef\class@enddocumenthook{%
+ \printfigures\relax
+}%
+% \end{macrocode}
+%
+% \begin{macro}{\printfigures}
+% The user-level command \cmd\printfigures\ determines
+% where the figures are to appear in a document in which
+% \cmd\floats@sw\ is false.
+% If the user invokes the \classoption{endfloats} class option and fails to
+% insert a \cmd\printfigures\ command,
+% the figures will be printed at the end of the document.
+% If the command is given, but floats are not being deferred,
+% it amounts to a no-op.
+% \changes{v4.0beta 2}{1999/06/20}
+% {call \cs{print@floats}}
+% \changes{v4.0beta 3}{1999/11/13}
+% {*-form mandates pagebreak}
+% \begin{macrocode}
+\newcommand\printfigures{%
+ \@ifstar{\true@sw}{\floatp@sw{\true@sw}{\false@sw}}%
+ {%
+ \print@float{figure}{\oneapage}%
+ }{%
+ \print@float{figure}{}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@xfloat@prep}
+% We patch into the procedure \cmd\@xfloat@prep.
+% This patch applies to all floats (not \env{figure} alone)
+% and makes the type center.
+% \begin{macrocode}
+\appdef\@xfloat@prep{%
+ \appdef\@parboxrestore{\centering}%
+ \let\@makefnmark\@makefnmark@latex
+ \let\@footnotemark\@footnotemark@latex
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Tables}
+% \changes{v4.0beta 2}{1999/06/20}
+% {Processing delayed to \cs{AtBeginDocument} time}
+%
+% DPC: More or less taken from \file{revtex2} \file{aps.sty},
+% but using dcolumn for decimal alignment.
+% \begin{environment}{table}
+% We define the \env{table} environment.
+% Later, we will horse around with its meaning
+% in order to accomodate \cmd\floats@sw.
+% \begin{macrocode}
+\newenvironment{table}
+ {\@float{table}}
+ {\end@float}
+\newenvironment{table*}
+ {\@dblfloat{table}}
+ {\end@dblfloat}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\thetable}
+% Table counter and default float placement declarations.
+% \begin{macrocode}
+\newcounter{table}
+\renewcommand\thetable{\@Roman\c@table}
+% \end{macrocode}
+% Note that we give the `!' modifier by default.
+% This is an effort to avoid the syndrome wherein
+% a deferred float finds itself unqualified for
+% placement, thereby getting carried until \cmd\clearpage.
+% \begin{macrocode}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{\tablename~\thetable}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\table@hook}
+% \begin{macro}{\squeezetable}
+% Assign a meaning to the hook installed into float processing.
+%
+% By default floats are \cmd\small. The \cmd\squeezetable\ declaration
+% makes them smaller (\cmd\scriptsize). In general you can locally
+% redefine \cmd\table@hook\ to be whatever you like.
+% (DPC: |\Huge\color{magenta}|\ldots?)
+% \begin{macrocode}
+\def\table@hook{\small}%
+\def\squeezetable{\def\table@hook{\scriptsize}}%
+\appdef\@floatboxreset{\table@hook}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Deferring \env{table} Floats}%
+%
+% We install a hook at
+% \cmd\AtBeginDocument\ time which determines if
+% tables will float or will be deferred until
+% \cmd\printtables\ time.
+%
+% We also deal with the possibility of \env{longtable} environments.
+%
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \floats@sw{}{%
+ \let@environment{longtable@float}{longtable}%
+ \let@environment{longtable}{longtable@write}%
+ \let@environment{longtable*@float}{longtable*}%
+ \let@environment{longtable*}{longtable*@write}%
+ \let@environment{turnpage@float}{turnpage}%
+ \let@environment{turnpage}{turnpage@write}%
+ }%
+ \do@if@floats{table}{.tbx}%
+}%
+\appdef\class@enddocumenthook{%
+ \printtables\relax
+}%
+\newenvironment{longtable@write}{%
+ \write@@float{longtable}{table}%
+}{%
+ \endwrite@float
+}%
+\newenvironment{longtable*@write}{%
+ \write@@float{longtable*}{table}%
+}{%
+ \endwrite@float
+}%
+\newenvironment{turnpage@write}{%
+ \immediate\write\tablewrite{\string\begin{turnpage}}%
+}{%
+ \immediate\write\tablewrite{\string\end{turnpage}}%
+}%
+% \end{macrocode}
+%
+% \begin{macro}{\printtables}
+% The user-level command \cmd\printtables\ determines
+% where the tables are to appear in a document in which
+% \cmd\floats@sw\ is false.
+% If the user invokes the \classoption{nofloats} and fails to
+% insert a \cmd\printtables\ command,
+% the tables will be printed at the end of the document.
+% If the command is given, but floats are not being deferred,
+% it amounts to a no-op.
+% \changes{v4.0beta 2}{1999/06/20}
+% {only execute if appropriate}
+% \changes{v4.0beta 3}{1999/11/13}
+% {*-form mandates pagebreak}
+% \changes{v4.0beta 4}{2000/05/17}
+% {make longtable trigger the head, too}
+% \begin{macrocode}
+\newcommand\printtables{%
+ \begingroup
+ \let@environment{longtable}{longtable@float}%
+ \let@environment{longtable*}{longtable*@float}%
+ \let@environment{turnpage}{turnpage@anchored}%
+ \prepdef\longtable{\trigger@float@par}%
+ \expandafter\prepdef\csname longtable*\endcsname{\trigger@float@par}%
+ \expandafter\prepdef\csname table@floats\endcsname{%
+ \onecolumngrid@push
+ }%
+ \expandafter\appdef\csname endtable@floats\endcsname{%
+ \onecolumngrid@pop
+ }%
+ \@ifstar{\true@sw}{\floatp@sw{\true@sw}{\false@sw}}%
+ {%
+ \print@float{table}{\oneapage}%
+ }{%
+ \print@float{table}{}%
+ }%
+ \endgroup
+}%
+\newenvironment{turnpage@anchored}{%
+ \onecolumngrid@push
+ \setbox\z@\vbox to\textwidth\bgroup
+ \columnwidth\textheight
+}{%
+ \vfil
+ \egroup
+ \rotatebox{90}{\box\z@}%
+ \onecolumngrid@pop
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \section{Tabular}
+% Every tabular has a double (Scotch) rule above and below.
+% The column specifier ``d'' is implemented using the \classname{dcolumn}
+% package, if available.
+% FIXME: always load dcolumn!
+% \begin{macro}{\tabular@hook}
+% \begin{macro}{\endtabular@hook}
+% \begin{environment}{ruledtabular}
+% \begin{macrocode}
+\def\endtabular@hook{}%
+%\RequirePackage{dcolumn}%
+\appdef\class@documenthook{%
+ \@ifpackageloaded{dcolumn}{%
+ \newcolumntype{d}{D{.}{.}{-1}}%
+ }{}%
+}%
+\def\toprule{\hline\hline}%
+\def\colrule{\hline}%
+\def\botrule{\hline\hline}%
+\newenvironment{ruledtabular}{%
+ \def\array@default{v}%
+ \appdef\tabular@hook{\def\@halignto{to\hsize}}%
+ \let\tableft@skip@default\tableft@skip
+ \let\tableft@skip\tableft@skip@float
+ \let\tabmid@skip@default\tabmid@skip
+ \let\tabmid@skip\tabmid@skip@float
+ \let\tabright@skip@default\tabright@skip
+ \let\tabright@skip\tabright@skip@float
+ \let\array@row@pre@default\array@row@pre
+ \let\array@row@pre\array@row@pre@float
+ \let\array@row@pst@default\array@row@pst
+ \let\array@row@pst\array@row@pst@float
+ \appdef\array@row@rst{%
+ \let\array@row@pre\array@row@pre@default
+ \let\array@row@pst\array@row@pst@default
+ \let\tableft@skip\tableft@skip@default
+ \let\tabmid@skip\tabmid@skip@default
+ \let\tabright@skip\tabright@skip@default
+ \appdef\tabular@hook{\let\@halignto\@empty}%
+ }%
+}{%
+}%
+% \end{macrocode}
+% \end{environment}
+% \end{macro}
+% \end{macro}
+%
+% \section{Footnote Text}
+%
+% \changes{v4.g}{1998/06/10}
+% {single space footnotes}
+% \changes{v4.0beta 2}{1999/06/20}
+% {%
+% Frank Mittelbach, has stated in \protect\classname{multicol}:
+% ``The kernel command \cs{@footnotetext} should not be modified.''
+% Thus, I have removed David Carlisle's redefinition of that command.
+% Note, however, that later versions of \protect\classname{multicol} do not require
+% this workaround. Belt and suspenders.
+% }%
+%
+% \begin{macro}{\@makefntext}
+% \begin{macrocode}
+\def\@makefntext#1{%
+ \def\baselinestretch{1}%
+ \reset@font\footnotesize
+ \parindent 1em%
+ \noindent
+ \hb@xt@1.8em{%
+ \Hy@raisedlink{\hyper@anchorstart{footnote@\the\c@footnote}\hyper@anchorend}%
+ \hss\@makefnmark
+ }%
+ #1\par
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Citations, Bibliography, Endnotes}
+%
+% \subsubsection{Bibliography}
+%
+% Load Patrick Daly's \classname{natbib} package,
+% \url{ftp://ctan.tug.org/macros/latex/contrib/supported/natbib}
+%
+% Note that \classname{natbib} assumes that it loads
+% over a document class, such as the \classname{article} class,
+% that has already defined \env{thebibliography} and \cmd\@listi.
+%
+% Note also that \classname{natbib} also installs a command
+% \cmd\NAT@set@cites\ into \cmd\AtBeginDocument\ which presumes
+% that the proper \cmd\bibpunct\ command has been issued.
+%
+% We have a problem with \classname{natbib} in that it does not
+% accomodate late binding of its package options. This means
+% that those options must be known at the time the package
+% loads. Therefore, we select \classoption{sort\&compress}
+% now, and thereby foreclose on alternative uses of \classname{natbib}.
+%
+% Certain societies may prefer an alternative; they are out of luck.
+% If you find yourself in this position, please let the author
+% of \classname{natbib} know that his package should be modified to
+% accomodate late binding of package options.
+%
+% To remedy the situation, note that the macro \cmd\NAT@sort\ controls
+% whether citations are left alone (\cmd\NAT@sort=0), sorted (\cmd\NAT@sort=1), or sorted and compressed (\cmd\NAT@sort=2).
+% Since we give \classname{natbib} the \classoption{sort\&compress} option,
+% if you prefer \classoption{sort}, you need only define \cmd\NAT@sort\ to be 1.
+% However, if you prefer the effect of having neither \classoption{sort} nor \classoption{sort\&compress},
+% you must define \cmd\NAT@sort\ to be 0 and you must also define
+% \cmd\NAT@sort@cites:
+%\begin{verbatim}
+%\renewcommand\NAT@sort@cites[1]{\edef\NAT@cite@list{#1}}%
+%\end{verbatim}
+%
+% For other \classname{natbib} customizations, you may proceed as if you were going to use
+% the \file{natbib.cfg} file: anything that you can modify by this means is fair game.
+% Once \revtex\ is finished loading, you can assert any definitions for \classname{natbib} that you wish.
+%
+% \begin{macrocode}
+\newenvironment{thebibliography}{}{}%
+\let\@listi\@empty
+\RequirePackage[sort&compress]{natbib}[1999/05/28 7.0]%
+\let\NAT@thebibliography\thebibliography
+\let\NAT@endthebibliography\endthebibliography
+\let\bibliographystyle@latex\bibliographystyle
+% \end{macrocode}
+%
+% \begin{macro}{\NAT@citesuper}
+% We redefine \classname{natbib}'s procedure \cmd\NAT@citesuper,
+% which is executed when setting a superscript citation.
+% The \cmd\hspace\ is removed: in any case, it
+% should really be \cmd\hspace*, to prevent an unwanted pagebreak.
+% \begin{macrocode}
+\renewcommand\NAT@citesuper[3]{%
+ \ifNAT@swa
+ \leavevmode
+ \unskip
+% \hspace{1\p@}%
+ \textsuperscript{#1}%
+ \if*#3*\else\ (#3)\fi
+ \else
+ #1%
+ \fi
+ \endgroup
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@makefnmark@cite}
+% We define a procedure that will set a footnote mark the same way that
+% a citation is set. If footnotes are put in the bibliography with
+% \cmd\footinbib@sw, then the corresponding mark should look the same
+% as the result of a \cmd\cite. This is how we do it.
+% \begin{macrocode}
+\def\@makefnmark@cite{\begingroup\NAT@swatrue\@cite{{\@thefnmark}}{}{}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bibliographystyle}
+% We arrange for the selection of bibliography style
+% to occur either due to the document's explicit
+% \cmd\bibliographystyle\ statement or
+% via the journal substyle.
+%
+% Note that \revtex\ is now incompatible with
+% any package that patches \cmd\bibliographystyle,
+% except for those (like \classname{natbib}) that load before here.
+% \begin{macrocode}
+\let\bibliographystyle@latex\bibliographystyle
+\def\bibliographystyle{\def\@bibstyle}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bibsection}
+% \begin{macro}{\NAT@bibsetnum}
+% \begin{macro}{\NAT@bibsetup}
+% \begin{macro}{\bibpreamble}
+% \begin{macro}{\newblock}
+% \begin{macro}{\bibnumfmt}
+% We define the sectioning command to use when starting the bibliography
+% and gently coax \classname{natbib} into using
+% the formatting procedures that \emph{we} want it to use.
+%
+% This way of setting up \env{thebibliography}
+% automatically sets the label width based on
+% the largest number used within the bibliography.
+% This scheme will not work properly using the
+% author/year style of bib entry, though.
+%
+% We define \cmd\bibnumfmt\ to be \cmd\place@bibnumber, which is a macro
+% managed by \revtex. If the document defines \cmd\bibnumfmt, then that
+% definition will be used instead, which is what the \classname{natbib}
+% package gives as its programming interface.
+%
+% And if the substyle does not give a meaning to \cmd\place@bibnumber,
+% we give it that of the original \cmd\bibnumfmt.
+% \begin{macrocode}
+\def\bibsection{%
+ \@ifx@empty\refname{%
+ \par
+ }{%
+ \let\@hangfroms@section\@hang@froms
+ \section*{\refname}%
+ \@nobreaktrue
+ }%
+}%
+\let\NATx@bibsetnum\NAT@bibsetnum
+\def\NAT@bibsetnum#1{%
+ \setlength{\topsep}{\z@}%
+ \NATx@bibsetnum{\ref{LastBibItem}}%
+}%
+\let\NATx@bibsetup\NAT@bibsetup
+\def\NAT@bibsetup{%
+ \setlength{\labelwidth}{\z@}%
+ \setlength{\labelsep}{\z@}%
+ \setlength{\itemindent}{\z@}%
+ \setlength{\listparindent}{\z@}%
+ \setlength{\topsep}{\z@}%
+ \setlength{\parsep}{\z@}%
+ \NATx@bibsetup
+}%
+\let\bibpreamble\@empty
+\def\newblock{\ }%
+\let\NATx@bibnumfmt\bibnumfmt
+\def\bibnumfmt{\place@bibnumber}%
+\AtEndOfClass{%
+ \appdef\class@documenthook{%
+ \@ifxundefined\place@bibnumber{%
+ \let\place@bibnumber\NATx@bibnumfmt
+ }{}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\NAT@onlinecite}
+% We anticipate using numerical citations.
+% If superscript citations are used, we nonetheless need a way to
+% use numerical citations as required by the author.
+% These should be accessible via the \cmd\citet\ command.
+%
+% Therefore we remember how to do a numerical citation
+% even when the superscript citation has been selected.
+%
+% Can you say ``inelegant hack''? I knew you could!
+% \begin{macrocode}
+\let\NAT@citeyear\citeyear
+\def\NAT@onlinecite#1{%
+ \begingroup
+ \let\@cite\NAT@citenum
+ \let\NAT@mbox\mbox
+ \let\citeyear\NAT@citeyear
+ \def\NAT@space{ }%
+ \cite{#1}%
+ \endgroup
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{+}
+% \begin{macro}{\textcite}
+% We extend \classname{natbib}'s syntax with two commands to set a citation
+% on the baseline (as opposed to superscripted) and as text (rather than parenthetical), respectively.
+% A journal substyle that makes citations be superscripted or parenthetical as the case may be, should ensure
+% that the author has continued access to these two styles.
+%
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\@onlinecite{\def\@onlinecite{\citealp}}{}%
+ \@ifxundefined\@textcite{\def\@textcite{\citet}}{}%
+}%
+\DeclareRobustCommand\onlinecite{\@onlinecite}%
+\DeclareRobustCommand\textcite{\@textcite}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{environment}{thebibliography}%
+% \begin{macro}{\present@bibnote}%
+% We put a tail patch into \cmd\thebibliogrphy\ and
+% a headpatch into \cmd\endthebibliography.
+%
+% We also apply a fix to the \cmd\list\ procedure
+% so that, at least within the bibliography,
+% items are not formatted via \cmd\parshape,
+% which caused problems during column balancing.
+% (Other list-like environments may also require fixing,
+% but we will save that for another day.)
+%
+% Here we provide a default treatment for frontmatter notes
+% deferred to the bibliography; a journal substyle
+% might want to override the definition of \cmd\present@bibnote.
+% \begin{macrocode}
+\renewenvironment{thebibliography}[1]{%
+ \NAT@thebibliography{#1}%
+ \@clubpenalty\clubpenalty
+ \let\@TBN@opr\present@bibnote
+ \@FMN@list
+}{%
+ \@endnotesinbib
+ \edef\@currentlabel{\arabic{NAT@ctr}}%
+ \label{LastBibItem}%
+ \NAT@endthebibliography
+ \global\let\auto@bib\@empty
+}%
+\def\present@bibnote#1#2{%
+ \item[%
+ \textsuperscript{%
+ \normalfont
+ \Hy@raisedlink{\hyper@anchorstart{frontmatter@#1}\hyper@anchorend}%
+ \begingroup
+ \c@footnote#1\relax
+ \frontmatter@thefootnote
+ \endgroup
+ }%
+ ]#2\par
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{environment}
+%
+% \begin{macro}{\place@bibnumber@sup}
+% \begin{macro}{\place@bibnumber@inl}
+% For producing the \cmd\bibitem\ device,
+% we define two procedures to select from.
+%
+% Note that we could have used \classname{natbib}'s \cmd\ifNAT@super\
+% switch, but it does not allow for altering the meaning of \cmd\bibnumfmt.
+% \begin{macrocode}
+\def\place@bibnumber@sup#1{\textsuperscript{#1}}%
+\def\place@bibnumber@inl#1{[#1]}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%% \begin{macro}{\@cite}
+%% \begin{macro}{\nocite}
+% \begin{macro}{write@bibliographystyle}
+% We wish to delay committing the \cmd\bibliographystyle\ until as late as possible.
+% The journal substyle will define a default bibliography style, and
+% the document's explicit \cmd\bibliographystyle\ command, if any, will override that default.
+%% For the sake of Bib\TeX, we must execute the \cmd\bibliographystyle\ command
+%% (putting a \cmd\bibstyle\ command into the auxiliary file)
+%% somewhere before the first \cmd\cite\ command (or any other like command),
+%% which puts a \cmd\citation\ command into the auxiliary file.
+%%
+%% Therefore, we headpatch the two procedures in \classname{natbib} that can result in
+%% the appearance in the auxiliary file of a \cmd\citation\ command.
+%% These two procedures are \cmd\@cite\ and \cmd\nocite.
+%%
+%% Not!
+%
+% The \cmd\bibstyle\ command may appear quite late in the \filename{.aux} file.
+% We now delay the automatic writing of the \cmd\bibstyle\ command to the end of the job.
+%
+% The procedure \cmd\write@bibliographystyle\ tests whether a \cmd\bibliographystyle\ command has
+% already been given.
+% If not, it effectively executes the needed \cmd\bibliographystyle\ command, then neutralizes itself
+% (we only need to do this once per job).
+%
+% \begin{macrocode}
+%\AtBeginDocument{%
+% \let\natbib@@cite\@cite
+% \def\@cite{\write@bibliographystyle\natbib@@cite}%
+% \let\natbib@nocite\nocite
+% \def\nocite{\write@bibliographystyle\natbib@nocite}%
+%}%
+\def\write@bibliographystyle{%
+ \@ifxundefined\@bibstyle{}{%
+ \expandafter\bibliographystyle@latex\expandafter{\@bibstyle}%
+ }%
+ \global\let\write@bibliographystyle\relax
+}%
+\AtEndDocument{\write@bibliographystyle}%
+% \end{macrocode}
+% \end{macro}
+%% \end{macro}
+%% \end{macro}
+%
+% \begin{macro}{\super@cite}
+% \begin{macro}{\super@cite@}
+% The \cmd\super@cite\ procedure takes the place of \cmd\@citex\ and implements the feature of the
+% \classoption{citeautoscript} class option.
+% This means that the document should be marked up as if citations were \emph{not} superscripted,
+% and then if you select a journal substyle that has superscripted citations, \revtex\ will do its best
+% to alter the formatting of the \cmd\cite s to accomodate superscript style.
+%
+% Note that the commands \cmd\onlinecite\ and \cmd\textcite\ are not affected by this procedure.
+%
+% Here's a subtle one: when is the argument of \cmd\super@cite@@\ not the same as the token \cmd\@let@token?
+% Answer: when the latter is \cmd\@sptoken! This case has to be handled separately.
+%
+% \begin{macrocode}
+\def\super@cite[#1][#2]#3{%
+ \leavevmode
+ \skip@\lastskip
+ \unskip
+ \begingroup
+ \def\@tempa{[#1][#2]{#3}}%
+ \super@cite@
+}%
+\def\super@cite@{%
+ \futurelet\@let@token\super@cite@@
+}%
+\long\def\super@cite@@#1{%
+ \@ifx{\@let@token\@sptoken}{%
+ \aftergroup\@sptoken\false@sw
+ }{%
+ \@ifx{\@let@token.}{\true@sw}{%
+ \@ifx{\@let@token,}{\true@sw}{%
+ \@ifx{\@let@token'}{\true@sw}{%
+ \@ifx{\@let@token)}{\true@sw}{%
+ \false@sw
+ }%
+ }%
+ }%
+ }%
+ }%
+ {%
+ #1%
+ \super@cite@
+ }{%
+ \expandafter\@citex@NAT\@tempa\endgroup
+ #1%
+ }%
+}%
+\AtBeginDocument{%
+ \citeautoscript@sw{%
+ \@ifx{\place@bibnumber\place@bibnumber@sup}{%
+ \let\@citex@NAT\@citex\let\@citex\super@cite
+ }{}%
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% Resolve an incompatability between \classname{natbib} and \classname{listings}.
+% The latter package tests \cmd\chapter (which has now been \cmd\let\ to \cmd\relax\ as a side effect \classname{natbib}'s use of \LaTeX's \cmd\@ifundefined).
+%
+% We couch our fix in such terms that will not be disruptive if \cmd\chapter\ is actually defined at this point.
+% \begin{macrocode}
+\@ifx{\chapter\relax}{\let\chapter\@undefined}{}%
+% \end{macrocode}
+%
+%
+% \subsubsection{\cs{endnote}s and \cs{rtx@bibnote}s}
+% FIXME: check hyperref compatibility!
+%
+% \begin{macro}{\mini@note}
+% \begin{macro}{\save@note}
+% \begin{macrocode}
+\def\mini@note{\save@note\mini@notes}%Implicit #1
+\def\save@note#1#2{%
+ \stepcounter{footnote}%
+ \protected@xdef\@thefnmark{\the\c@footnote}%
+ \@footnotemark
+ \expandafter\g@addto@macro
+ \expandafter#1%
+ \expandafter{%
+ \expandafter \@@footnotetext
+ \expandafter {\@thefnmark}{#2}%
+ }%
+}%
+\long\def\@@footnotetext#1{\def\@thefnmark{#1}\@footnotetext}%
+\let\mini@notes\@empty
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\endnote}
+% A version of footnote that appears at the end of the document.
+% Actually it just appears where \cmd\printendnotes\ appears.
+% \begin{macrocode}
+\def\endnote{%
+ \begingroup
+ \aftergroup\@footnotemark
+ \aftergroup\@endnotetext
+ \@ifnextchar[{%
+ \@xendnote
+ }{%
+ \stepcounter{footnote}%
+ \protected@xdef\@tempa{\thefootnote}%
+ \expandafter\@xendnote\expandafter[\@tempa]%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@xendnote}
+% \begin{macrocode}
+\def\@xendnote[#1]{%
+ \begingroup
+ \c@footnote#1\relax
+ \unrestored@protected@xdef\@thefnmark{endnote\thefootnote}%
+ \endgroup
+ \endgroup
+}%
+\def\@endnotemark{%
+ \expandafter\cite\expandafter{\@thefnmark}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\endnote@ext}
+% \begin{macrocode}
+\def\endnote@ext{.end}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@endnotetext}
+% The commands \cmd\label, \cmd\index, and \cmd\glossary,
+% which are robustified for \cmd\markright\ and \cmd\addcontentsline,
+% are likewise robustified here.
+%
+% Note the similarity to \cmd\protected@write.
+% \begin{macrocode}
+\long\def\@endnotetext#1{%
+ \@ifxundefined\@endnoteout{%
+ \newwrite\@endnoteout
+ \gdef\endnote@stream{\jobname\endnote@ext}%
+ \immediate\openout\@endnoteout\endnote@stream\relax
+ }{}%
+ \begingroup
+ \let\label\relax \let\index\relax \let\glossary\relax
+ \let\cite \relax \let\ref \relax \let\pageref \relax
+ \let\( \relax \let\) \relax \let\\ \relax
+% \let\protect\noexpand
+ \let \protect \@unexpandable@protect
+ \newlinechar`\^^M%
+% \newlinechar`\ %
+ \immediate\write\@endnoteout{\string\@doendnote{\@thefnmark}{#1}}%
+ \endgroup
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\endnotetext}
+% \begin{macrocode}
+\def\endnotetext{%
+ \@ifnextchar[{%
+ \@xendnotenext
+ }{%
+ \protected@xdef\@thefnmark{\thefootnote}%
+ \@endnotetext
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@xendnotenext}
+% \begin{macrocode}
+\def\@xendnotenext[#1]{%
+ \begingroup
+ \c@footnote#1\relax
+ \unrestored@protected@xdef\@thefnmark{\thefootnote}%
+ \endgroup
+ \@endnotetext
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\printendnotes}
+% \begin{macrocode}
+\def\printendnotes{%
+ \@ifx{\@endnoteout\@undefined}{}{%
+ \begingroup
+ \c@secnumdepth-\maxdimen
+ \section{%
+ \notesname
+ }%
+ \immediate\closeout\@endnoteout
+ \global\let\@endnoteout\@undefined
+ \begin{enumerate}%
+ \makeatletter
+ \input{\endnote@stream}%
+ \end{enumerate}%
+ \endgroup
+ }%
+}%
+\appdef\class@enddocumenthook{%
+ \printendnotes
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\firstnote@num}
+% \begin{macro}{\set@firstnote}
+%
+% In \revtex, we have permanently altered the way
+% that the footnote counter gets reset at the beginning
+% of the document.
+%
+% If footnotes appear in the bibliography, we initialise
+% the footnote counter to number of cites (found last time)
+% via \cmd\set@firstnote.
+%
+% \begin{macrocode}
+\mathchardef\firstnote@num\z@
+\appdef\class@documenthook{%
+ \global\c@footnote\firstnote@num
+ \appdef\maketitle{\global\c@footnote\firstnote@num}%
+}%
+\def\set@firstnote#1{%
+ \@ifnum{\firstnote@num=#1\relax}{}{%
+ \class@warn@end{Endnote numbers changed: rerun LaTeX}%
+ }%
+ \immediate\write\@mainaux{%
+ \global\chardef\string\firstnote@num#1\relax
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@endnotesinbib}
+% \begin{macro}{\@endnotesinbibliography}
+% We define a function \cmd\@endnotesinbib,
+% and a variant \cmd\@endnotesinbibliography.
+% The former is invoked at the start of
+% the end processing for \enve{thebibliography};
+% the latter is a synonym.
+%
+% The procedure typesets the footnotes that are to
+% appear in the bibliography; the default is to
+% simply arrange for the footnote counter to be
+% reset at the start of the document.
+%
+% The switchover to setting footnotes in the bibliography
+% is done via \cmd\AtBeginDocument\ code that
+% changes the meaning of \cmd\footnote\ and
+% that substitutes the synonym for
+% \cmd\@endnotesinbib.
+%
+% Note that this code make the assumption that
+% the counter used in \env{thebibliography} is \cmd\c@NAT@ctr.
+%
+% \begin{macrocode}
+\def\@endnotesinbib{%
+ \set@firstnote\z@
+}%
+\def\@endnotesinbibliography{%
+ \expandafter\set@firstnote\expandafter{\the\c@NAT@ctr}%
+ \@ifx{\@endnoteout\@undefined}{}{%
+ \immediate\closeout\@endnoteout
+ \global\let\@endnoteout\@undefined
+ \makeatletter
+ \input{\endnote@stream}%
+ }%
+}%
+\appdef\class@documenthook{%
+ \let\@makefnmark@latex\@makefnmark
+ \let\@footnotemark@latex\@footnotemark
+ \footinbib@sw{%
+ \let\footnote\endnote
+ \let\@footnotemark\@endnotemark
+ \let\@makefnmark\@makefnmark@cite
+ \let\@endnotesinbib\@endnotesinbibliography
+ \appdef\class@enddocumenthook{\auto@bib}%
+ \let\printendnotes\relax
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\auto@bib}
+% Under some circumstances, we must typeset the bibliography automatically.
+% For instance, the document specifies footnotes in the bibliography, but contains
+% no bibliography.
+%
+% Note that this facility is not able to work more than once per document.
+% If multiple bibliographys are required (e.g., per article), it will be the responsibility of the journal style
+% to restore \cmd\auto@bib\ to its original meaning so it can be re-invoked.
+% \begin{macrocode}
+\def\auto@bib{%
+ \@ifx@empty\@FMN@list{%
+ \@ifxundefined\@endnoteout{%
+ \false@sw
+ }{%
+ \true@sw
+ }%
+ }{%
+ \true@sw
+ }{%
+ \begin{thebibliography}{}\end{thebibliography}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@doendnote}
+% \begin{macrocode}
+\def\@doendnote#1#2{\bibitem{#1}#2}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \section{Initial setup}
+% \changes{v4.0beta 2}{1999/06/20}
+% {Defer assignment until \cs{AtBeginDocument} time.}
+% Note that this code is executed at \cmd\AtBeginDocument\ time
+% in order to handle a particular timing problem.
+% Please do not move this code any earlier!
+% \begin{macrocode}
+\appdef\class@documenthook{%
+% \end{macrocode}
+% We assert our own page style only if nobody else has done so.
+% Users wishing to customize their documents will be able to invoke a \cmd\pagestyle\
+% command anywhere in the preamble.
+% \begin{macrocode}
+ \@ifxundefined\@evenhead{%
+ \@ifxundefined\@oddhead{%
+ \@ifxundefined\@oddfoot{%
+ \@ifxundefined\@evenfoot{%
+ \preprintsty@sw{%
+ \ps@preprint
+ }{%
+ \ps@article
+ }%
+ }{}%
+ }{}%
+ }{}%
+ }{}%
+ \pagenumbering{arabic}%
+ \normalsize
+ \tabbingsep \labelsep
+ \leftmargin\leftmargini
+ \labelwidth\leftmargin\advance\labelwidth-\labelsep
+ \let\@listi\@listI
+ \@listi
+% \end{macrocode}
+%
+% \begin{macrocode}
+%\twoside@sw{}{%
+% \raggedbottom
+%}%
+% \end{macrocode}
+% We make sure that the ``environment'' component mark is set.
+% \begin{macrocode}
+ \def\curr@envir{document}%
+ \mark@envir{\curr@envir}%
+% \end{macrocode}
+%
+% \changes{v4.0beta 3}{1999/11/13}
+% {Grid changes with ltxgrid}
+% \changes{v4.0beta 4}{2000/04/10}
+% {Also alter how lists get indented.}
+% When setting the column grid, we have to alter the procedure
+% for formatting lists. Because \cmd\twocolumngrid\ requires
+% rebalancing columns at some points, lists must \emph{not}
+% involve the use of \cmd\moveleft, \cmd\moveright, or \cmd\parshape.
+% The alternative procedure only involves the manipulation of
+% \cmd\leftskip\ and \cmd\rightskip.
+%
+% FIXME: Always sloppy??
+% \begin{macrocode}
+ \twocolumn@sw{%
+ \open@column@mlt\tw@
+ \set@colht
+ \@floatplacement
+ \@dblfloatplacement
+ \sloppy
+ \@booleanfalse\raggedcolumn@sw
+ \let\set@listindent\set@listindent@
+ }{%
+ \open@column@one\@ne
+ \set@colht
+ \@floatplacement
+ \@dblfloatplacement
+ \sloppy
+% \raggedbottom
+ \let\set@listindent\set@listindent@parshape
+ }%
+}%
+% \end{macrocode}
+%
+%
+% \section{\cs{appendix}}
+%
+% \begin{macrocode}
+%\newif\ifappendixon
+% \end{macrocode}
+% Note that, within appendices,
+% equations are numbered within sections (appendices).
+% \begin{macrocode}
+\def\appendix{%
+ \par
+%\appendixontrue
+ \setcounter{section}\z@
+ \setcounter{subsection}\z@
+ \setcounter{subsubsection}\z@
+ \def\thesubsection{\arabic{subsection}}%
+ \def\thesubsubsection{\alph{subsubsection}}%
+ \@addtoreset{equation}{section}%
+ \def\theequation@prefix{\thesection}%
+ \addtocontents{toc}{\protect\appendix}%
+ \@ifstar{%
+ \def\thesection{\unskip}%
+ \def\theequation@prefix{A.}%
+ }{%
+ \def\thesection{\Alph{section}}%
+ }%
+}%
+% \end{macrocode}
+%
+% \section{Changing the page grid}
+% \changes{v4.0beta 2}{1999/06/20}
+% {Define three separate environments,
+% defer assignment to \cs{AtBeginDocument} time.
+% }
+%
+% \subsection{Avoiding Grid Changes}%
+%
+% In preprint styles, ``wide text'' is a no-op, and the title page
+% processing involves no grid change.
+%
+% \begin{macro}{\title@column@default}%
+% \begin{macro}{\close@column@default}%
+%
+% \begin{macrocode}
+\def\title@column@default#1{%
+ \minipagefootnote@init
+ #1%
+ \minipagefootnote@foot
+}%
+\def\close@column@default{%
+ \newpage
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Galley Style: Margin Changes}%
+% A variant of preprint processing. Emulate journal appearance somewhat.
+%
+% \begin{environment}{widetext@galley}
+% DPC: We're in galley style so do a lob sided display environment.
+%
+% QUERY: How can we be sure that we are in galley style?
+% ANSWER: as noted elsewhere, require both \cmd\twocolumn@sw\ and \cmd\preprintsty@sw\ to be false.
+% \begin{macrocode}
+\def\galley@outdent{\rightmargin-\columnwidth\advance\rightmargin-\columnsep}%
+\let\widetext@outdent\@empty
+\newenvironment{widetext@galley}{%
+ \list{}{%
+ \topsep \z@skip
+ \listparindent \parindent
+ \itemindent \parindent
+ \leftmargin \z@
+ \parsep \z@\@plus\p@
+ \widetext@outdent
+ \relax
+ }%
+ \item\relax
+}{
+ \endlist
+}%
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \subsection{Grid Changing Via \classname{ltxgrid}}%
+%
+% In case \classoption{twocolumngrid} has been invoked,
+% switch column grid using the column grid-changing commands.
+% Supply stub definitions of those commands here.
+% \changes{v4.0beta 3}{1999/11/13}
+% {grid changes with ltxgrid}
+%
+% \begin{macro}{\title@column@grid}%
+% \begin{macro}{\close@column@grid}%
+% The title block always starts at the top of a new page.
+% \changes{v4.0beta 3}{1999/11/13}
+% {grid changes with ltxgrid}
+%
+% Note that, for the procedure \cmd\close@column@grid,
+% we balance columns by switching to the one-column page grid,
+% then we return to a two-column page grid in anticipation of the
+% upcoming \cmd\clearpage.
+% \begin{macrocode}
+\def\title@column@grid#1{%
+ \minipagefootnote@init
+ \onecolumngrid
+ \begingroup
+ \let\@footnotetext\frontmatter@footnotetext
+ \let\set@footnotewidth\set@footnotewidth@ii
+ #1%
+ \endgroup
+ \twocolumngrid
+ \minipagefootnote@foot
+}%
+\def\close@column@grid{%
+ \balancelastpage@sw{%
+ \onecolumngrid
+% \twocolumngrid
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{environment}{widetext@grid}
+% \changes{v4.0beta 3}{1999/11/13}
+% {grid changes via ltxgrid procedures}
+% \changes{v4.0beta 5}{2000/11/21}
+% {adornments above and below.}
+% We slip into the one-column page grid
+% within the scope of this environment.
+%
+% Note that we set adornments above and below the \env{widettext}.
+% These are set as leaders, so they will disappear at a page break.
+% \begin{macrocode}
+\newenvironment{widetext@grid}{%
+ \par\ignorespaces
+ \setbox\widetext@top\vbox{%
+ \vskip15\p@
+ \hb@xt@\hsize{%
+ \leaders\hrule\hfil
+ \vrule\@height6\p@
+ }%
+ \vskip6\p@
+ }%
+ \setbox\widetext@bot\hb@xt@\hsize{%
+ \vrule\@depth6\p@
+ \leaders\hrule\hfil
+ }%
+ \onecolumngrid
+ \dimen@\ht\widetext@top\advance\dimen@\dp\widetext@top
+ \cleaders\box\widetext@top\vskip\dimen@
+ \let\set@footnotewidth\set@footnotewidth@ii
+}{%
+ \par
+ \setbox\widetext@bot\vbox{%
+ \hb@xt@\hsize{\hfil\box\widetext@bot}%
+ \vskip14\p@
+ }%
+ \dimen@\ht\widetext@bot\advance\dimen@\dp\widetext@bot
+ \cleaders\box\widetext@bot\vskip\dimen@
+ \twocolumngrid\global\@ignoretrue
+ \@endpetrue
+}%
+\newbox\widetext@top
+\newbox\widetext@bot
+% \end{macrocode}
+% \end{environment}
+%
+%
+% Decide, finally, how the page grid is to be manipulated.
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \twocolumn@sw{%
+ \let@environment{widetext}{widetext@grid}%
+ \let\title@column\title@column@grid
+ \let\close@column\close@column@grid
+ }{%
+ \let@environment{widetext}{widetext@galley}%
+ \preprintsty@sw{%
+% \end{macrocode}
+% Change the page grid not at all.
+% \begin{macrocode}
+ }{%
+% \end{macrocode}
+% If we are galley style, change the page margin only.
+% \begin{macrocode}
+ \galley@sw{%
+ \let\widetext@outdent\galley@outdent
+ }{%
+ }%
+ }%
+ }%
+}%
+% \end{macrocode}
+%
+% \begin{macro}{\title@column}
+% Provide a default meaning for \cmd\title@column\
+% in case it was never defined.
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\title@column{%
+ \let\title@column\title@column@default
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \section{Old font commands}
+%
+% \begin{macrocode}
+\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
+\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
+\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
+\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
+\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
+\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
+\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
+\DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal}
+\DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal}
+% \end{macrocode}
+%
+% \section{English-Language Texts}
+% As this class is just for English language journals, we
+% could hardwire these texts,
+% but to make it easier to use this as a
+% basis for the code for similar journal styles, separate out all the
+% fixed text strings into babel-style macros of the form
+% |\|\ldots|name|
+%
+% Note: for babel compatability, use version 1999/05/05 v3.6x or later.
+%
+% Some of these might need changing in the society-specific code.
+%
+% \begin{macro}{\today}
+% Procedure \cmd\today\ is used in the article class, but not in
+% this document class.
+% \begin{macrocode}
+\def\today{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\notesname}
+% Text entity \cmd\notesname\ is used in \cmd\printendnotes.
+% \begin{macrocode}
+\def\notesname{Notes}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\partname}
+% Text entity \cmd\partname\ is used in \cmd\@part.
+% \begin{macrocode}
+\def\partname{Part}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tocname}
+% Text entity \cmd\tocname\ is used in \cmd\tableofcontents,
+% as defined in the standard \LaTeX\ book class.
+% \begin{macrocode}
+\def\tocname{Contents}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\lofname}
+% Text entity \cmd\lofname\ is used in \cmd\listoffigures,
+% as defined in the standard \LaTeX\ book class.
+% \begin{macrocode}
+\def\lofname{List of Figures}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\lotname}
+% Text entity \cmd\lotname\ is used in \cmd\listoftables,
+% as defined in the standard \LaTeX\ book class.
+% \begin{macrocode}
+\def\lotname{List of Tables}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\refname}
+% Text entity \cmd\refname\ is used in \env{thebibliography}.
+% \begin{macrocode}
+\def\refname{References}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\indexname}
+% Text entity \cmd\indexname\ is used in \env{theindex},
+% as defined in the standard \LaTeX\ book class.
+% \begin{macrocode}
+\def\indexname{Index}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\figurename}
+% \changes{v4.0beta 2}{1999/06/20}
+% {Added localization of \cs{figuresname}}
+% Text entity \cmd\figurename\ is used in \env{figure},
+% \cmd\figuresname\ in \cmd\printfigures.
+% \begin{macrocode}
+\def\figurename{FIG.}
+\def\figuresname{Figures}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tablename}
+% \changes{v4.0beta 2}{1999/06/20}
+% {Added localization of \cs{tablesname}}
+% Text entity \cmd\tablename\ is used in \env{table},
+% \cmd\tablesname\ in \cmd\printtables.
+% \begin{macrocode}
+\def\tablename{TABLE}
+\def\tablesname{Tables}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\abstractname}
+% Text entity \cmd\abstractname\ is used in \env{abstract}.
+% \begin{macrocode}
+\def\abstractname{Abstract}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\appendixesname}
+% \begin{macro}{\appendixname}
+% Text entity \cmd\appendixesname\ is used in TOC.
+% \begin{macrocode}
+\def\appendixesname{Appendixes}%
+\def\appendixname{Appendix}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\acknowledgmentsname}
+% Text entity \cmd\acknowledgmentsname\ is used in \env{acknowledgments}.
+% \begin{macrocode}
+\def\acknowledgmentsname{Acknowledgments}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\journalname}
+% This should be set by the society journal options, eg `pra'.
+% \begin{macrocode}
+\def\journalname{??}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\copyrightname}
+% Default layout does not assign copyright, but a journal that wants
+% to might use this.
+% \begin{macrocode}
+\def\copyrightname{??}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\andname}
+% The text string ``and'' for use in author lists.
+% \begin{macrocode}
+\def\andname{and}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@pacs@name}
+% \begin{macro}{\@keys@name}
+% The text string prepended to PACS numbers, resp. to keywords.
+% \begin{macrocode}
+\def\@pacs@name{PACS numbers: }%
+\def\@keys@name{Keywords: }%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ppname}
+% The text string ``pp'' for use in page ranges.
+% \begin{macrocode}
+\def\ppname{pp}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\numbername}
+% The text string ``number'' for use in article reference.
+% \begin{macrocode}
+\def\numbername{number}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\volumename}
+% The text string ``volume'' for use in article reference.
+% \begin{macrocode}
+\def\volumename{volume}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Dated@name}
+% \begin{macro}{\Received@name}
+% \begin{macro}{\Revised@name}
+% \begin{macro}{\Accepted@name}
+% \begin{macro}{\Published@name}
+% These texts 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}
+%
+% \section{Legacy Commands}
+% We deffine some commands left over from version 3.1, or give default meanings.
+% Some definitions can be overridden
+% in the document preamble or in included packages.
+%
+% Note on the namespace: command names like \cmd\REV@\emph{name} are used here,
+% because it is not clear that any of this code is generally useful.
+% \begin{macrocode}
+\def\address{\replace@command\address\affiliation}%
+\def\altaddress{\replace@command\altaddress\altaffiliation}%
+\newenvironment{references}{%
+ \class@warn@end{The references environment is not supported; use thebibliography instead.}
+ \gdef\references{\thebibliography{}}\references
+}{%
+ \endthebibliography
+}%
+\def\draft{%
+ \class@warn@end{Command \string\draft\space is obsolete;^^JInvoke option draft instead.}%
+ \@booleantrue\draft@sw
+}%
+\def\tighten{%
+ \class@warn@end{Command \string\tighten\space is obsolete;^^JInvoke option tightenlines instead.}%
+ \@booleantrue\tightenlines@sw
+}%
+\def\tableline{%
+ \noalign{%
+ \class@warn@end{Command \string\tableline\space is obsolete;^^JUse \string\colrule\space instead.}%
+ \global\let\tableline\colrule
+ }%
+ \tableline
+}%
+\def\case{\replace@command\case\frac}%
+\def\slantfrac{\replace@command\slantfrac\frac}%
+\def\tablenote{\replace@command\tablenote\footnote}%
+\def\tablenotemark{\replace@command\tablenotemark\footnotemark}%
+\def\tablenotetext{\replace@command\tablenotetext\footnotetext}%
+% Lose the following definition:
+\DeclareRobustCommand\REV@text[1]{%
+ \relax
+ \ifmmode
+ \mathchoice
+ {\hbox{{\everymath{\displaystyle }#1}}}%
+ {\hbox{{\everymath{\textstyle }#1}}}%
+ {\hbox{{\everymath{\scriptstyle }\let\f@size\sf@size\selectfont#1}}}%
+ {\hbox{{\everymath{\scriptscriptstyle}\let\f@size\ssf@size\selectfont#1}}}%
+ \glb@settings
+ \else
+ \mbox{#1}%
+ \fi
+}%
+% Lose the following definition:
+\DeclareRobustCommand\REV@bbox[1]{%
+ \relax
+ \ifmmode
+ \mathchoice
+ {\hbox{{\everymath{\displaystyle }\boldmath$#1$}}}%
+ {\hbox{{\everymath{\textstyle }\boldmath$#1$}}}%
+ {\hbox{{\everymath{\scriptstyle }\boldmath$#1$}}}%
+ {\hbox{{\everymath{\scriptscriptstyle}\boldmath$#1$}}}%
+ \glb@settings
+ \else
+ \mbox{#1}%
+ \fi
+}%
+\DeclareRobustCommand\REV@bm[1]{%
+ \class@warn@end{To use \string\bm, please load the bm package!}%
+ \global\let\bm\relax
+}%
+\def\FL{\obsolete@command\FL}%
+\def\FR{\obsolete@command\FR}%
+\def\narrowtext{\obsolete@command\narrowtext}%
+\def\mediumtext{\obsolete@command\mediumtext}%
+\newenvironment{quasitable}{%
+ \let@environment{tabular}{longtable}%
+}{%
+}%
+% \end{macrocode}
+%
+% \begin{macro}{\text}
+% \begin{macro}{\bm}
+% \begin{macro}{\bibinfo}
+% \begin{macro}{\eprint}
+% \begin{macro}{\url}
+%
+% If not otherwise defined, give default meanings to certain commands.
+% \changes{v4.0beta 4}{2000/04/10}
+% {eprint takes an aoptional argument, syntactical only in this case.}
+% \begin{macrocode}
+\appdef\class@inithook{%
+ \@ifxundefined\text{\let\text\REV@text}{}%
+ \@ifxundefined\bm{\let\bm\REV@bm}{}%
+ \providecommand\bibinfo[2]{#2}%
+ \providecommand\eprint[2][]{#2}%
+ \providecommand\url[1]{#1}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bbox}
+%
+% \begin{macrocode}
+\def\bbox#1{%
+ \class@warn@end{\string\bbox\space is obsolete,^^Jload the bm package and use \string\bm\space instead.}%
+ \global\let\bbox\relax
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\mathletters}
+%
+% \begin{macrocode}
+\newenvironment{mathletters}{%
+ \class@warn@end{Environment {mathletters} is obsolete;^^Jload the amsmath package and use {subequations}!}%
+ \global\let\mathletters\@empty
+}{%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\eqnum}
+%
+% \begin{macrocode}
+\def\eqnum#1{%
+ \class@warn@end{\string\eqnum\space is obsolete, load the amsmath package and use \string\tag!}%
+ \global\let\eqnum\@gobble
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% We read in the symbol definitions.
+% \begin{macrocode}
+\RequirePackage{revsymb}%
+\appdef\class@inithook{\revsymb@inithook}%
+% \end{macrocode}
+%
+% \section{Endgame for the Document Class}
+%
+% This section contains definitions related to the
+% end-of-class processing:
+% we want to control exactly what happens next.
+%
+% We provide for a ``job macro package'' that can override
+% definitions made by the class or any other packages it loads.
+% We act on the value of \cmd\secnumarabic@sw;
+% this code is a model for dealing with the job macro package.
+% We also install a the very last procedures into
+% \cmd\AtEndOfClass, ones that need to tail on to
+% any processing performed either by the
+% class, by any of its included packages, or
+% by the job macro package and any packages it may have loaded.
+%
+% \subsection{Job Macro Package}
+% You can create a ``job macro package'' for your document
+% that will be read in automatically every time
+% your document is processed.
+% Thus, if your job is a file called \file{myarticle.tex},
+% then the file \file{myarticle.rty} will be read in
+% just the same as if you had placed a
+% \cmd\usepackage|{myarticle.rty}| statement
+% immediately following your \cmd\documentclass\ statement.
+%
+% Within your \file{.rty} file,
+% you can define and use control sequence names that use the |@| character
+% and you can override any of the definitions or assignments made
+% by the \revtex\ document class or the selected journal substyle.
+% That is, you have the power to really mess things up badly.
+%
+% If you choose to have a job macro package, you are well
+% advised to read the \LaTeX\ guide to document classes,
+% \filename{clsguide.tex} or read up on the subject
+% in a book line the \LaTeX\ Companion.
+%
+% The file \filename{template.rty} contains a template for
+% creating your own job macro package.
+%
+% \begin{macrocode}
+\AtEndOfClass{%
+ \InputIfFileExists{\jobname.rty}{}{}%
+}%
+% \end{macrocode}
+%
+% \subsection{\cs{secnumarabic@sw}}\label{sec:secnumarabic}
+% \begin{macro}{\secnumarabic@sw}
+% The flag \cmd\secnumarabic@sw\ signifies that sectioning commands are
+% to be numbered arabic.
+% The effect of this command should override any settings
+% made by the journal substyle or by the job macro package.
+% However, it should be lower in precedence to definitions
+% appearing in the document preamble.
+% Therefore, we install its code into \cmd\AtEndOfClass,
+% but do it \emph{after} the corresponding code
+% for the journal substyle and the job macro package.
+%
+% Note: \cmd\thesection\ must \emph{not} be redefined,
+% say, at \cmd\AtBeginDocument\ time by some delayed code.
+% \begin{macrocode}
+\AtEndOfClass{%
+ \@ifxundefined\secnumarabic@sw{\@booleanfalse\secnumarabic@sw}{}%
+ \secnumarabic@sw{%
+ \def\p@section {}%
+ \def\thesection {\arabic{section}}%
+ \def\p@subsection {}%
+ \def\thesubsection {\thesection.\arabic{subsection}}%
+ \def\p@subsubsection {}%
+ \def\thesubsubsection {\thesubsection.\arabic{subsubsection}}%
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Hook for default values of Booleans}
+% This portion of the code for this class file
+% \emph{must} appear at the very end.
+% \begin{macro}{\defaults@hook}
+% The procedure \cmd\defaults@hook\ should hereby
+% be the very last to be installed into \cmd\AtBeginDocument.
+% We provide it with a default in case it has not been
+% used up til now.
+%
+% CHECKME: is any other hook installed later than \cmd\defaults@hook?
+% \begin{macrocode}
+\AtEndOfClass{%
+ \appdef\class@documenthook{%
+ \defaults@hook
+ }%
+}%
+\@ifxundefined\defaults@hook{\let\defaults@hook\@empty}{}%
+% \end{macrocode}
+% \end{macro}
+%
+% End of the class file.
+% \begin{macrocode}
+%</class-pst>
+% \end{macrocode}
+%
+%
+% \section{Symbols: the \texttt{revsymb} module}
+% We immediately define a utility command: this module's warning.
+% \begin{macrocode}
+%<*revsymb>
+\def\REVSYMB@warn#1{\PackageWarningNoLine{revsymb}{#1}}%
+% \end{macrocode}
+%
+% \begin{macro}{\lambdabar}
+% \begin{macrocode}
+\DeclareRobustCommand\lambdabar{%
+ \bgroup
+ \def\@tempa{%
+ \hbox{%
+ \raise.73\ht\z@
+ \hb@xt@\z@{%
+ \kern.25\wd\z@
+ \vrule \@width.5\wd\z@\@height.1\p@\@depth.1\p@
+ \hss
+ }%
+ \box\z@
+ }%
+ }%
+ \mathchoice
+ {\setbox\z@\hbox{$\displaystyle \lambda$}\@tempa}%
+ {\setbox\z@\hbox{$\textstyle \lambda$}\@tempa}%
+ {\setbox\z@\hbox{$\scriptstyle \lambda$}\@tempa}%
+ {\setbox\z@\hbox{$\scriptscriptstyle\lambda$}\@tempa}%
+ \egroup
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\openone}
+% DPC: Really should use a font that includes this glyph.
+% Unfortunately not in AMS ones, but is in bbold, cmbb.
+% (I think, must check),
+% \changes{v4.d}{1998/01/31}
+% {use font-dependent spacing}
+% FIXME: check for bbold.
+% \begin{macrocode}
+\DeclareRobustCommand\openone{\leavevmode\hbox{\small1\normalsize\kern-.33em1}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\corresponds}
+% \begin{macro}{\overdots}
+% \begin{macro}{\overcirc}
+% J\"org Knappen suggests the replacements:
+% replace \cmd\corresponds\ with \cmd\triangleq, source \classname{amssymb};
+% replace \cmd\overcirc\ with \cmd\mathring, source \classname{latex2e};
+% replace \cmd\overdots\ with \cmd\dddot, source \classname{amsmath}.
+%
+% Any use of any of these commands will result in a warning message at the end
+% of the log file. If the corresponding package is not loaded, a
+% definition will quietly be provided.
+% \begin{macrocode}
+\DeclareRobustCommand\corresponds{\replace@command\corresponds\triangleq}%
+\DeclareRobustCommand\overcirc{\replace@command\overcirc\mathring}%
+\DeclareRobustCommand\overdots{\replace@command\overdots\dddot}%
+\DeclareRobustCommand\REV@triangleq{%
+ {\lower.2ex\hbox{=}}{\kern-.75em^\triangle}%
+}%
+\DeclareRobustCommand\REV@dddot[1]{%
+ \@ontopof{#1}{\cdots}{1.0}\mathord{\box2}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\succsim}
+% \begin{macro}{\precsim}
+% \begin{macro}{\lesssim}
+% \begin{macro}{\gtrsim}
+% \begin{macro}{\alt}
+% \begin{macro}{\agt}
+% These version 3.1 commands are always supplied,
+% but the definitions in \classname{amssymb} are preferred.
+% \begin{macrocode}
+\DeclareRobustCommand\altsuccsim{\succ\kern-.9em_\sim\kern.3em}%
+\DeclareRobustCommand\altprecsim{\prec\kern-1em_\sim\kern.3em}%
+\let\REV@succsim\altsuccsim
+\let\REV@precsim\altprecsim
+\DeclareRobustCommand\REV@lesssim{\mathrel{\mathpalette\vereq{<}}}%
+\DeclareRobustCommand\REV@gtrsim{\mathrel{\mathpalette\vereq{>}}}%
+\DeclareRobustCommand\alt{\lesssim}
+\DeclareRobustCommand\agt{\gtrsim}
+\def\vereq#1#2{%
+ \lower3\p@\vbox{%
+ \baselineskip1.5\p@
+ \lineskip1.5\p@
+ \ialign{$\m@th#1\hfill##\hfil$\crcr#2\crcr\sim\crcr}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\tensor}
+% \begin{macro}{\overstar}
+% \begin{macro}{\loarrow}
+% \begin{macro}{\roarrow}
+% \changes{v4.0beta 2}{1999/06/20}
+% {AO: remove duplicates}
+% \begin{macrocode}
+\DeclareRobustCommand\tensor[1]{\@ontopof{#1}{\leftrightarrow}{1.15}\mathord{\box2}}
+\DeclareRobustCommand\overstar[1]{\@ontopof{#1}{\ast}{1.15}\mathord{\box2}}
+\DeclareRobustCommand\loarrow[1]{\@ontopof{#1}{\leftarrow}{1.15}\mathord{\box2}}
+\DeclareRobustCommand\roarrow[1]{\@ontopof{#1}{\rightarrow}{1.15}\mathord{\box2}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@ontopof}
+% \begin{macrocode}
+\def\@ontopof#1#2#3{%
+ {%
+ \mathchoice
+ {\@@ontopof{#1}{#2}{#3}\displaystyle \scriptstyle }%
+ {\@@ontopof{#1}{#2}{#3}\textstyle \scriptstyle }%
+ {\@@ontopof{#1}{#2}{#3}\scriptstyle \scriptscriptstyle}%
+ {\@@ontopof{#1}{#2}{#3}\scriptscriptstyle\scriptscriptstyle}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@ontopof}
+% Same as \revtex3, more or less.
+% \begin{macrocode}
+\def\@@ontopof#1#2#3#4#5{%
+ \setbox\z@\hbox{$#4#1$}%
+ \setbox\f@ur\hbox{$#5#2$}%
+ \setbox\tw@\null\ht\tw@\ht\z@ \dp\tw@\dp\z@
+ \@ifdim{\wd\z@>\wd\f@ur}{%
+ \setbox\f@ur\hb@xt@\wd\z@{\hss\box\f@ur\hss}%
+ \mathord{\rlap{\raise#3\ht\z@\box\f@ur}\box\z@}%
+ }{%
+ \setbox\f@ur\hb@xt@.9\wd\f@ur{\hss\box\f@ur\hss}%
+ \setbox\z@\hb@xt@\wd\f@ur{\hss$#4\relax#1$\hss}%
+ \mathord{\rlap{\copy\z@}\raise#3\ht\z@\box\f@ur}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frak}
+% Deal with legacy \cmd\frak:
+% if \classname{amsfonts} not loaded, defined in such a way as to ask for that package.
+% Also, says to use \cmd\mathfrak\ instead.
+% \begin{macrocode}
+\DeclareRobustCommand\frak{%
+ \REVSYMB@warn{%
+ Command \string\frak\space unsupported:^^J%
+ please use \string\mathfrak\space instead.%
+ }%
+ \global\let\frak\mathfrak
+ \frak
+}%
+\DeclareRobustCommand\REV@mathfrak{%
+ \REVSYMB@warn{%
+ Command \string\mathfrak\space undefined:^^J%
+ please specify the amsfonts or amssymb option!%
+ }%
+ \global\let\mathfrak\@firstofone
+ \mathfrak
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Bbb}
+% Deal with legacy \cmd\Bbb:
+% if \classname{amsfonts} not loaded, defined in such a way as to ask for that package.
+% Also, says to use \cmd\mathbb\ instead.
+% \begin{macrocode}
+\DeclareRobustCommand\Bbb{%
+ \REVSYMB@warn{%
+ Command \string\Bbb\space unsupported:^^J%
+ please use \string\mathbb\space instead.%
+ }%
+ \global\let\Bbb\mathbb
+ \Bbb
+}%
+\DeclareRobustCommand\REV@mathfrak{%
+ \REVSYMB@warn{%
+ Command \string\mathbb\space undefined:^^J%
+ please specify the amsfonts or amssymb option!%
+ }%
+ \global\let\mathbb\@firstofone
+ \mathbb
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Bigglb}
+% Deal with legacy bold delimiters.
+% Each of the following takes an implicit argument consisting of
+% the delimiter to be made big and bold.
+% FIXME: \cmd\DeclareBoldMathCommand\ is not the right tool!
+% \begin{macrocode}
+\def\Bigglb{\REV@boldopen \Bigg}%
+\def\Biglb {\REV@boldopen \Big }%
+\def\bigglb{\REV@boldopen \bigg}%
+\def\biglb {\REV@boldopen \big }%
+\def\Biggrb{\REV@boldclose\Bigg}%
+\def\Bigrb {\REV@boldclose\Big }%
+\def\biggrb{\REV@boldclose\bigg}%
+\def\bigrb {\REV@boldclose\big }%
+\def\REV@pmb#1{%
+ \hbox{%
+ \setbox\z@=\hbox{#1}%
+ \kern-.02em\copy\z@\kern-\wd\z@
+ \kern .04em\copy\z@\kern-\wd\z@
+ \kern-.02em
+ \raise.04em\copy\z@
+ }%
+}%
+\def\REV@boldopen #1#2{\mathopen {\REV@pmb{$#1#2$}}}%
+\def\REV@boldclose#1#2{\mathclose{\REV@pmb{$#1#2$}}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\AtBeginDocument}
+% Package dependencies are taken care of
+% \cmd\AtBeginDocument\ time.
+% \begin{macrocode}
+\def\revsymb@inithook{%
+ \@ifxundefined\dddot{\let\dddot\REV@dddot}{}%
+ \@ifxundefined\triangleq{\let\triangleq\REV@triangleq}{}%
+ \@ifxundefined\succsim{\let\succsim\altsuccsim}{}%
+ \@ifxundefined\precsim{\let\precsim\altprecsim}{}%
+ \@ifxundefined\lesssim{\let\lesssim\REV@lesssim}{}%
+ \@ifxundefined\gtrsim {\let\gtrsim \REV@gtrsim }{}%
+ \@ifxundefined\mathfrak{\let\mathfrak\REV@mathfrak}{}%
+ \@ifxundefined\mathbb{\let\mathbb\REV@mathbb}{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</revsymb>
+% \end{macrocode}
+%
+% \section{The \classoption{10pt} class option: the \texttt{10pt} module}
+% \changes{v4.0beta 2}{1999/06/20}
+% {AO: all code for \protect\classoption{10pt} is in this module.}
+% The file \file{10pt.rtx} is read in by the \classname{revtex4} document class
+% if \cmd\@pointsize\ has the value 10.
+%
+% \begin{macrocode}
+%<*10pt>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\normalsize{%
+ \@setfontsize\normalsize\@xpt{11.5}%
+ \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\small{%
+ \@setfontsize\small\@ixpt{10.5}%
+ \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ \@plus2\p@
+ \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@
+ \def\@listi{%
+ \leftmargin\leftmargini
+ \topsep 4\p@ \@plus2\p@ \@minus2\p@
+ \parsep 2\p@ \@plus\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\footnotesize{%
+ \@setfontsize\footnotesize\@viiipt{9.5pt}%
+ \abovedisplayskip 6\p@ \@plus2\p@ \@minus4\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ \@plus\p@
+ \belowdisplayshortskip 3\p@ \@plus\p@ \@minus2\p@
+ \def\@listi{%
+ \leftmargin\leftmargini
+ \topsep 3\p@ \@plus\p@ \@minus\p@
+ \parsep 2\p@ \@plus\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\scriptsize{%
+ \@setfontsize\scriptsize\@viipt\@viiipt
+}%
+\def\tiny{%
+ \@setfontsize\tiny\@vpt\@vipt
+}%
+\def\large{%
+ \@setfontsize\large\@xiipt{14pt}%
+}%
+\def\Large{%
+ \@setfontsize\Large\@xivpt{18pt}%
+}%
+\def\LARGE{%
+ \@setfontsize\LARGE\@xviipt{22pt}%
+}%
+\def\huge{%
+ \@setfontsize\huge\@xxpt{25pt}%
+}%
+\def\Huge{%
+ \@setfontsize\Huge\@xxvpt{30pt}%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+%\appdef\class@documenthook{%
+ \@ifxundefined\twoside@sw{\@booleanfalse\twoside@sw}{}%
+ \twoside@sw{%
+% \oddsidemargin -.1in
+% \evensidemargin -.4in
+ \oddsidemargin -20pt
+ \evensidemargin -20pt
+ \marginparwidth 107pt
+ }{%
+ \oddsidemargin -.25in
+ \evensidemargin -.25in
+ \marginparwidth 30pt
+ }%
+%}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\marginparsep 6pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\topmargin -61pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\headheight 25pt
+\headsep 16pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\topskip 10pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\footskip 30pt
+% \end{macrocode}
+%
+% Was: 57\cmd\baselineskip + \cmd\topskip
+% \begin{macrocode}
+%\appdef\set@pica@hook{%
+ \textheight = 56pc
+%}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\textwidth42.5pc
+% \end{macrocode}
+%
+% \begin{macrocode}
+\columnsep 1.5pc
+\columnseprule 0pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\footnotesep 1pt
+\skip\footins 39pt plus 4pt minus 2pt
+\def\footnoterule{\kern-19pt\hrule width.5in\kern18.6pt\relax}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\floatsep 12pt plus 2pt minus 2pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 12pt plus 2pt minus 2pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\dblfloatsep 12pt plus 2pt minus 2pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@fptop 0pt plus 1fil
+\@fpsep 8pt plus 2fil
+\@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil
+\@dblfpsep 8pt plus 2fil
+\@dblfpbot 0pt plus 1fil
+% \end{macrocode}
+%
+% \begin{macrocode}
+\marginparpush 5pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\parskip 0pt plus 1pt
+\parindent 10pt
+\emergencystretch8\p@
+% \end{macrocode}
+%
+% \begin{macrocode}
+\partopsep 2pt plus 1pt minus 1pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\leftmargini 25pt
+\leftmarginii 22pt
+\leftmarginiii 18.7pt
+\leftmarginiv 17pt
+\leftmarginv 10pt
+\leftmarginvi 10pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listI{%
+ \leftmargin\leftmargini
+ \parsep 4\p@ plus2\p@ minus\p@
+ \topsep 8\p@ plus2\p@ minus4\p@
+ \itemsep 4\p@ plus2\p@ minus\p@
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\labelsep 4pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listii{%
+ \leftmargin\leftmarginii
+ \labelwidth\leftmarginii
+ \advance\labelwidth-\labelsep
+ \topsep 4\p@ plus2\p@ minus\p@
+ \parsep 2\p@ plus\p@ minus\p@
+ \itemsep \parsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listiii{%
+ \leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii
+ \advance\labelwidth-\labelsep
+ \topsep 2\p@ plus\p@ minus\p@
+ \parsep \z@
+ \partopsep \p@ plus\z@ minus\p@
+ \itemsep \topsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listiv{%
+ \leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv
+ \advance\labelwidth-\labelsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listv{%
+ \leftmargin\leftmarginv
+ \labelwidth\leftmarginv
+ \advance\labelwidth-\labelsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listvi{%
+ \leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi
+ \advance\labelwidth-\labelsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</10pt>
+% \end{macrocode}
+%
+% \section{The \classoption{11pt} class option: the \texttt{11pt} module}
+% \changes{v4.0beta 2}{1999/06/20}
+% {AO: all code for \protect\classoption{11pt} is in this module.}
+% The file \file{11pt.rtx} is read in by the \classname{revtex4} document class
+% if \cmd\@pointsize\ has the value 11.
+%
+% \begin{macrocode}
+%<*11pt>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\normalsize{%
+ \@setfontsize\normalsize\@xipt{13.6}%
+ \abovedisplayskip 11\p@ \@plus3\p@ \@minus6\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\small{%
+ \@setfontsize\small\@xpt\@xiipt
+ \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
+ \abovedisplayshortskip \z@ \@plus3\p@
+ \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@
+ \def\@listi{\leftmargin\leftmargini
+ \topsep 6\p@ \@plus2\p@ \@minus2\p@
+ \parsep 3\p@ \@plus2\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+ \belowdisplayskip \abovedisplayskip
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\footnotesize{%
+ \@setfontsize\footnotesize\@ixpt{11}%
+ \abovedisplayskip 8\p@ \@plus2\p@ \@minus4\p@
+ \abovedisplayshortskip \z@ \@plus\p@
+ \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@
+ \def\@listi{\leftmargin\leftmargini
+ \topsep 4\p@ \@plus2\p@ \@minus2\p@
+ \parsep 2\p@ \@plus\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+ \belowdisplayskip \abovedisplayskip
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\scriptsize{%
+ \@setfontsize\scriptsize\@viiipt{9.5}%
+}%
+\def\tiny{%
+ \@setfontsize\tiny\@vipt\@viipt
+}%
+\def\large{%
+ \@setfontsize\large\@xiipt{14}%
+}%
+\def\Large{%
+ \@setfontsize\Large\@xivpt{18}%
+}%
+\def\LARGE{%
+ \@setfontsize\LARGE\@xviipt{22}%
+}%
+\def\huge{%
+ \@setfontsize\huge\@xxpt{25pt}%
+}%
+\def\Huge{%
+ \@setfontsize\Huge\@xxvpt{30pt}%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</11pt>
+% \end{macrocode}
+%
+% \section{The \classoption{12pt} class option: the \texttt{12pt} module}
+% \changes{v4.0beta 2}{1999/06/20}
+% {AO: all code for \protect\classoption{12pt} is in this module.}
+% The file \file{12pt.rtx} is read in by the \classname{revtex4} document class
+% if \cmd\@pointsize\ has the value 12.
+%
+% \begin{macrocode}
+%<*12pt>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\normalsize{%
+ \@setfontsize\normalsize\@xiipt{14pt}%
+ \abovedisplayskip 12\p@ \@plus3\p@ \@minus7\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ plus3\p@
+ \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@
+ \let\@listi\@listI
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \def\small{%
+ \@setfontsize\small\@xipt{14.5pt}%
+ \abovedisplayskip 8\p@ \@plus3\p@ \@minus6\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ \@plus3\p@
+ \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@
+ \def\@listi{%
+ \leftmargin\leftmargini
+ \topsep 9\p@ \@plus3\p@ \@minus5\p@
+ \parsep 4.5\p@ \@plus2\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+}%
+% \end{macrocode}
+%
+% Same baselineskip as \cmd\small\ ?
+% \begin{macrocode}
+ \def\footnotesize{%
+ \@setfontsize\footnotesize\@xpt{14.5pt}%
+ \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \z@ \@plus3\p@
+ \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@
+ \def\@listi{%
+ \leftmargin\leftmargini
+ \topsep 6\p@ \@plus2\p@ \@minus2\p@
+ \parsep 3\p@ \@plus2\p@ \@minus\p@
+ \itemsep \parsep
+ }%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\scriptsize{%
+ \@setfontsize\scriptsize\@viiipt{9.5pt}%
+}%
+\def\tiny{%
+ \@setfontsize\tiny\@vipt{7pt}%
+}%
+\def\large{%
+ \@setfontsize\large\@xivpt{18pt}%
+}%
+\def\Large{%
+ \@setfontsize\Large\@xviipt{22pt}%
+}%
+\def\LARGE{%
+ \@setfontsize\LARGE\@xxpt{25pt}%
+}%
+\def\huge{%
+ \@setfontsize\huge\@xxvpt{30pt}%
+}%
+\let\Huge=\huge
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</12pt>
+% \end{macrocode}
+%
+% \section{Page parameters}%
+% This code is common to both \classoption{11pt} and \classoption{12pt}.
+%
+% \begin{macrocode}
+%<*11pt|12pt>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%\appdef\class@documenthook{%
+ \@ifxundefined\twoside@sw{\@booleanfalse\twoside@sw}{}%
+ \twoside@sw{%
+ \oddsidemargin 0pt
+ \evensidemargin 0pt
+ \marginparwidth 60pt
+ }{%
+ \oddsidemargin 0pt
+ \evensidemargin 0pt
+ \marginparwidth 44pt
+ }%
+%}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\marginparsep 10pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\topmargin -37pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\headheight 12pt
+\headsep 25pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\topskip 10pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\footskip 30pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+%\appdef\set@pica@hook{%
+ \@ifxundefined\tightenlines@sw{\@booleanfalse\tightenlines@sw}{}%
+ \textheight=665.5\p@
+ \tightenlines@sw{%
+ \def\baselinestretch{1}%
+ }{%
+ \def\baselinestretch{1.5}%
+ }%
+%}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\textwidth 468pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\columnsep 10pt
+\columnseprule 0pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\footnotesep 1pt
+\skip\footins 25.25pt plus 4pt minus 2pt
+\def\footnoterule{\kern-5.25pt\hrule width.5in\kern4.85pt\relax}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\floatsep 14pt plus 2pt minus 4pt
+\textfloatsep 20pt plus 2pt minus 4pt
+\intextsep 14pt plus 4pt minus 4pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\dblfloatsep 14pt plus 2pt minus 4pt
+\dbltextfloatsep 20pt plus 2pt minus 4pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@fptop 0pt plus 1fil
+\@fpsep 10pt plus 2fil
+\@fpbot 0pt plus 1fil
+\@dblfptop 0pt plus 1fil
+\@dblfpsep 10pt plus 2fil%
+\@dblfpbot 0pt plus 1fil
+% \end{macrocode}
+%
+% \begin{macrocode}
+\marginparpush 7pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\parskip 0pt plus 1pt
+\parindent 15pt
+\emergencystretch8\p@
+\partopsep 3pt plus 2pt minus 2pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\leftmargini 30pt
+\leftmarginii 26pt
+\leftmarginiii 22pt
+\leftmarginiv 20pt
+\leftmarginv 12pt
+\leftmarginvi 12pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listI{\leftmargin\leftmargini \parsep 5\p@ plus2.5\p@ minus\p@
+ \topsep 10\p@ plus4\p@ minus6\p@
+ \itemsep 5\p@ plus2.5\p@ minus\p@
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\labelsep 6pt
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii\advance\labelwidth-\labelsep
+ \topsep 5\p@ plus2.5\p@ minus\p@
+ \parsep 2.5\p@ plus\p@ minus\p@
+ \itemsep \parsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
+ \topsep 2.5\p@ plus\p@ minus\p@
+ \parsep \z@ \partopsep \p@ plus\z@ minus\p@
+ \itemsep \topsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listiv{\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv\advance\labelwidth-\labelsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listv{\leftmargin\leftmarginv
+ \labelwidth\leftmarginv\advance\labelwidth-\labelsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@listvi{\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi\advance\labelwidth-\labelsep
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</11pt|12pt>
+% \end{macrocode}
+%
+% \section{The \classoption{aps} class option: the \texttt{aps} module}
+% \changes{v4.0beta 2}{1999/06/20}
+% {AO: made aps.rtx part of revtex4.dtx}
+% The file \file{aps.rtx} is read in by the \classname{revtex4} document class
+% if \cmd\@society\ has the value \classoption{aps}.
+%
+% Here, code specific to APS journals is separated out from the \revtex\ document class.
+% (Other societies can customize \revtex\ by supplying their own \file{.rtx} file.)
+%
+% We first give some text entities (amounting to journal abbreviations),
+% then some APS-specific initialisations,
+% then code for particular APS journals.
+% In the latter case, the choice is
+% keyed off the macro \cmd\@journal.
+%
+% Note on \cmd\AtEndOfClass:
+% this file, like all journal substyles, is read in at \cmd\AtEndOfClass\ time,
+% so you should not use this command in this file.
+% Mote for \LaTeX\ developers: It would be an improvement in \LaTeX\ to
+% \cmd\let\cmd\AtEndOfClass\ to something like \cmd\@firstofone.
+% This change would be effected in \cmd\@onefilewithoptions.
+%
+% \begin{macrocode}
+%<*aps>
+% \end{macrocode}
+%
+% \subsection{Defend Against Forseeable Errors}%
+% Protect this file from being read in by anything but \revtex.
+% \begin{macrocode}
+\ifx\undefined\substyle@ext
+ \def\@tempa{%
+ \endinput
+ \GenericWarning{I must be read in by REVTeX! (Bailing out)}%
+ }%
+ \expandafter\else
+ \def\@tempa{}%
+ \expandafter\fi\@tempa
+% \end{macrocode}
+%
+% \subsection{Abbreviations}%
+% The following macros constitute typing shortcuts for
+% certain journal names.
+% \begin{macrocode}
+\def\ao{Appl.\ Opt.\ }
+\def\ap{Appl.\ Phys.\ }
+\def\apl{Appl.\ Phys.\ Lett.\ }
+\def\apj{Astrophys.\ J.\ }
+\def\bell{Bell Syst.\ Tech.\ J.\ }
+\def\jqe{IEEE J.\ Quantum Electron.\ }
+\def\assp{IEEE Trans.\ Acoust.\ Speech Signal Process.\ }
+\def\aprop{IEEE Trans.\ Antennas Propag.\ }
+\def\mtt{IEEE Trans.\ Microwave Theory Tech.\ }
+\def\iovs{Invest.\ Ophthalmol.\ Vis.\ Sci.\ }
+\def\jcp{J.\ Chem.\ Phys.\ }
+\def\jmo{J.\ Mod.\ Opt.\ }
+\def\josa{J.\ Opt.\ Soc.\ Am.\ }
+\def\josaa{J.\ Opt.\ Soc.\ Am.\ A }
+\def\josab{J.\ Opt.\ Soc.\ Am.\ B }
+\def\jpp{J.\ Phys.\ (Paris) }
+\def\nat{Nature (London) }
+\def\oc{Opt.\ Commun.\ }
+\def\ol{Opt.\ Lett.\ }
+\def\pl{Phys.\ Lett.\ }
+\def\pra{Phys.\ Rev.\ A }
+\def\prb{Phys.\ Rev.\ B }
+\def\prc{Phys.\ Rev.\ C }
+\def\prd{Phys.\ Rev.\ D }
+\def\pre{Phys.\ Rev.\ E }
+\def\prl{Phys.\ Rev.\ Lett.\ }
+\def\rmp{Rev.\ Mod.\ Phys.\ }
+\def\pspie{Proc.\ Soc.\ Photo-Opt.\ Instrum.\ Eng.\ }
+\def\sjqe{Sov.\ J.\ Quantum Electron.\ }
+\def\vr{Vision Res.\ }
+% \end{macrocode}
+%
+% \subsection{APS Setup}%
+% Here we define the default procedures for APS journals.
+% Individual APS journals may override these definitions.
+%
+% \subsubsection{Title block}%
+%
+% The specifics of the title block.
+% Apply to all APS journals; individual journals may override these settings.
+%
+% \begin{macro}{\@fnsymbol}
+% The \LaTeX\ kernel definition of \cmd\@fnsymbol\ is overridden.
+% \begin{macrocode}
+\def\@fnsymbol#1{%
+ \ensuremath{%
+ \ifcase#1\or
+ *\or \dagger \or
+ \ddagger \or \mathsection \or
+ \mathparagraph\or
+ **\or \dagger\dagger \or
+ \ddagger\ddagger \or \mathsection \mathsection \or
+ \mathparagraph\mathparagraph\or
+ *{*}*\ignorespaces \or \dagger\dagger\dagger \or
+ \ddagger\ddagger\ddagger\or \mathsection \mathsection \mathsection \or
+ \mathparagraph\mathparagraph\mathparagraph\or
+ \else
+ \@ctrerr
+ \fi
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\titlepage}
+% \begin{macrocode}
+\renewenvironment{titlepage}{%
+ \let\wastwocol@sw\twocolumn@sw
+ \onecolumngrid
+ \newpage
+ \thispagestyle{titlepage}%
+ \c@page\z@% article sets this to one not zero???
+}{%
+ \wastwocol@sw{\twocolumngrid}{\newpage}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@abstractheading}
+% APS Journals all set the abstract head the same way, with no head.
+% However, if the user has specified the \classoption{preprint} class option,
+% then the abstract will have a head.
+% \begin{macrocode}
+\def\frontmatter@abstractheading{%
+ \preprintsty@sw{%
+ \begingroup
+ \centering\large
+ \abstractname
+ \par
+ \endgroup
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@abstractwidth}
+% All APS journals set the abstract to the same width.
+% \begin{macrocode}
+\def\frontmatter@abstractwidth{400\p@}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@abstractfont}
+% All APS journals set the abstract body the same way.
+% \changes{v4.0beta 3}{1999/11/13}
+% {Bug 123: add parskip to the abstract.}
+% \begin{macrocode}
+\def\frontmatter@abstractfont{%
+ \small
+ \parindent1em\relax
+ \adjust@abstractwidth
+}%
+\def\adjust@abstractwidth{%
+ \dimen@\textwidth\advance\dimen@-\frontmatter@abstractwidth
+ \divide\dimen@\tw@
+ \galley@sw{%
+ \advance\rightskip\tw@\dimen@
+ }{%
+ \advance\leftskip\dimen@
+ \advance\rightskip\dimen@
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% All APS journal preprints use separate titlepage and full-width abstract.
+%
+% Note that we defer polling the \cmd\preprintsty@sw\ Boolean until
+% \cmd\AtBeginDocument\ time, because the document preamble
+% may legitimately change the state of that variable.
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \preprintsty@sw{%
+ \@ifxundefined\titlepage@sw{\@booleantrue\titlepage@sw}{}%
+% \tightenlines@sw{%
+% \def\baselinestretch{1}%
+% }{%
+% \def\baselinestretch{1.5}%
+% }%
+ \def\frontmatter@abstractwidth{\textwidth}%
+ \def\frontmatter@affiliationfont{\it}%
+ \let\section\section@preprintsty
+% \let\@hangfrom@section\@hangfrom@section@preprintsty
+ \let\subsection\subsection@preprintsty
+ \let\subsubsection\subsubsection@preprintsty
+ }{}%
+ }%
+% \end{macrocode}
+%
+% \begin{macro}{\frontmatter@authorformat}
+% All APS journals set the author list the same.
+% The leading is 11.5 points, and
+% there is 11.5 points of extra space above the first author line
+% (which amounts to the same thing as 11.5 points extra below the title)
+% for a total of 23 points base-to-base.
+%
+% \begin{macrocode}
+\def\frontmatter@authorformat{%
+ \skip@\@flushglue
+ \@flushglue\z@ plus.3\hsize\relax
+ \centering
+ \advance\baselineskip\p@
+ \parskip11.5\p@\relax
+ \@flushglue\skip@
+%\preprintsty@sw{}{%
+% \addvspace{0\p@}%
+%}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@above@affilgroup}
+% The default amount of space above affiliation.
+% APS Journals have 24 points b-b above an affiliation group.
+% \begin{macrocode}
+\def\frontmatter@above@affilgroup{%
+%\preprintsty@sw{}{%
+% \addvspace{11\p@}%
+%}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@above@affiliation}
+% \begin{macro}{\frontmatter@above@affiliation@script}
+% The default amount of space above affiliation.
+% APS Journals have no extra space between author group down to common affiliation.
+% \begin{macrocode}
+\def\frontmatter@above@affiliation@script{%
+ \skip@\@flushglue
+ \@flushglue\z@ plus.3\hsize\relax
+ \centering
+ \@flushglue\skip@
+ \addvspace{3.5\p@}%
+}%
+\def\frontmatter@above@affiliation{%
+ \preprintsty@sw{}{%
+% \addvspace{12\p@}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@affiliationfont}
+% All APS journals set the affiliation the same.
+% \begin{macrocode}
+\def\frontmatter@affiliationfont{%
+ \small\it
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@collaboration@above}
+% PRL: 1.5 points extra: 13 points base-to-base above.
+% \begin{macrocode}
+\def\frontmatter@collaboration@above{%
+ \preprintsty@sw{%
+ }{%
+ \parskip1.5\p@\relax
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% Set up the default APS style for title block authors and affiliations.
+% \begin{macrocode}
+\@ifxundefined\groupauthors@sw{%
+ \clo@groupedaddress
+}{}%
+% \end{macrocode}
+%
+% \begin{macro}{\frontmatter@setup}
+% All APS journals set the title page using the same font and size.
+% However, justification varies for the title block elements, so
+% we assert none here.
+% \begin{macrocode}
+\def\frontmatter@setup{%
+ \normalfont
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@title@above}
+% \begin{macro}{\frontmatter@title@format}
+% \begin{macro}{\frontmatter@title@below}
+% All APS journals set the article title the same.
+%
+% Note: Spacing from title to author is 23 points base-to-base.
+% \begin{macrocode}
+\def\frontmatter@title@above{\addvspace{6\p@}}%
+\def\frontmatter@title@format{\large\bfseries\centering\parskip\z@skip}%
+\def\frontmatter@title@below{}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@makefnmark}
+% All APS journals share this procedure for setting the titlepage footnote text.
+% \begin{macrocode}
+\def\@author@parskip{3\p@}%
+\def\frontmatter@makefnmark{%
+ \@textsuperscript{%
+ \normalfont\@thefnmark
+ }%
+}%
+\def\frontmatter@authorbelow{%
+ \addvspace{3\p@}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@RRAP@format}
+% All APS journals use the same format for the ``Received, Revised, etc.'' block on the title page.
+%
+% Change note: 11.5 points b-b from author/affiliation down to date.
+% \begin{macrocode}
+\def\frontmatter@RRAP@format{%
+ \small
+ \centering
+% \preprintsty@sw{}{\parskip.5ex\relax}%
+ \everypar{\hbox\bgroup(\@gobble@leavemode@uppercase}%
+ \def\par{\@ifvmode{}{\unskip)\egroup\@@par}}%
+}%
+\def\punct@RRAP{;\egroup\ \hbox\bgroup}%
+\def\@gobble@leavemode@uppercase#1#2{\expandafter\MakeTextUppercase}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@PACS@format}
+%
+% \begin{macrocode}
+\def\frontmatter@PACS@format{%
+ \addvspace{11\p@}%
+ \footnotesize
+ \adjust@abstractwidth
+ \parindent\z@
+ \parskip\z@skip
+ \samepage
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@keys@format}
+%
+% \begin{macrocode}
+\def\frontmatter@keys@format{%
+ \footnotesize
+ \adjust@abstractwidth
+ \parindent\z@
+ \samepage
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ps@titlepage}
+% \changes{v4.g}{1998/06/10}
+% {multiple preprint commands}
+% \changes{v4.0beta 2}{1999/06/20}
+% {Stack \cs{preprint} args flush right at right margin.}
+% Title page style. Currently empty except for preprint header,
+% which consists of all the \cmd\preprint\ arguments,
+% stacked flush right at the right margin.
+% \changes{v4.0beta 3}{1999/11/13}
+% {Insert procedure \cs{checkindate}}
+% \begin{macrocode}
+\def\ps@titlepage{%
+ \def\@oddhead{%
+ \hfill
+ \produce@preprints\@preprint
+ }%
+ \let\@evenhead\@oddhead
+ \def\@oddfoot{%
+ \hb@xt@\z@{\byrevtex\hss}%
+ \hfil
+ \preprintsty@sw{\thepage}{}%
+ \quad\checkindate
+ \hfil
+ }%
+ \let\@evenfoot\@oddfoot
+}%
+\def\byrevtex{\byrevtex@sw{Typeset by REV\TeX}{}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\produce@preprints}
+% \changes{v4.0beta 3}{1999/11/13}
+% {Bug 115. If three or more preprints specified, set on single line, with commas.}
+% \begin{macrocode}
+\def\produce@preprints#1{%
+ \preprint@sw{%
+ \vtop to \z@{%
+ \def\baselinestretch{1}%
+ \small
+ \let\preprint\preprint@count
+ \count@\z@#1\@ifnum{\count@>\tw@}{%
+ \hbox{%
+ \let\preprint\preprint@hlist
+ #1\setbox\z@\lastbox
+ }%
+ }{%
+ \let\preprint\preprint@cr
+ \halign{\hfil##\cr#1\crcr}%
+ \par
+ \vss
+ }%
+ }%
+ }{}%
+}%
+\def\preprint@cr#1{#1\cr}%
+\def\preprint@count#1{\advance\count@\@ne}%
+\def\preprint@hlist#1{#1\hbox{, }}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Stacked Heads}%
+% All APS journals put a period (.), followed by quad space, after the section number.
+% Also, no hanging section number.
+% \begin{macrocode}
+\def\@seccntformat#1{\csname the#1\endcsname.\quad}%
+\def\@hang@from#1#2#3{#1#2#3}%
+% \end{macrocode}
+%
+% Note that in the following, we wish to set the section head uppercase, so we use
+% David Carlisle's \cmd\MakeTextUppercase. However, because this procedure effectively
+% parses its argument (looking for things to \emph{not} translate), it has to be invoked
+% in such a way that the argument of the \cmd\section\ command is passed to it as its
+% own argument.
+%
+% To accomplish this, we use the \cmd\@hangfrom@\ hook, which was developed for this
+% purpose.
+%
+% \begin{macrocode}
+\def\section{%
+ \@startsection
+ {section}%
+ {1}%
+ {\z@}%
+ {0.8cm \@plus1ex \@minus .2ex}%
+ {0.5cm}%
+ {%
+ \normalfont\small\bfseries
+ \centering
+ }%
+}%
+\def\@hangfrom@section#1#2#3{\@hangfrom{#1#2}\MakeTextUppercase{#3}}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\subsection{%
+ \@startsection
+ {subsection}%
+ {2}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {%
+ \normalfont\small\bfseries
+ \centering
+ }%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\subsubsection{%
+ \@startsection
+ {subsubsection}%
+ {3}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {%
+ \normalfont\small\itshape
+ \centering
+ }%
+}%
+% \end{macrocode}
+%
+% \subsubsection{Runin Heads}%
+% \begin{macrocode}
+\def\paragraph{%
+ \@startsection
+ {paragraph}%
+ {4}%
+ {\parindent}%
+ {\z@}%
+ {-1em}%
+ {\normalfont\normalsize\itshape}%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\subparagraph{%
+ \@startsection
+ {subparagraph}%
+ {5}%
+ {\parindent}%
+ {3.25ex \@plus1ex \@minus .2ex}%
+ {-1em}%
+ {\normalfont\normalsize\bfseries}%
+}%
+% \end{macrocode}
+%
+%
+%
+% \begin{macro}{\section@preprintsty}
+% \begin{macro}{\subsection@preprintsty}
+% \begin{macro}{\subsubsection@preprintsty}
+% Here are the formatting procedures specific to the preprint style;
+% the only difference is that the heads are flush left instead of centered.
+%
+% \begin{macrocode}
+\def\section@preprintsty{%
+ \@startsection
+ {section}%
+ {1}%
+ {\z@}%
+ {0.8cm \@plus1ex \@minus .2ex}%
+ {0.5cm}%
+ {%
+ \normalfont\small\bfseries
+% \centering
+ }%
+}%
+%\def\@hangfrom@section@preprintsty#1#2#3{\@hangfrom{#1#2}\MakeTextUppercase{#3}}%
+% \end{macrocode}
+% \begin{macrocode}
+\def\subsection@preprintsty{%
+ \@startsection
+ {subsection}%
+ {2}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {%
+ \normalfont\small\bfseries
+% \centering
+ }%
+}%
+% \end{macrocode}
+% \begin{macrocode}
+\def\subsubsection@preprintsty{%
+ \@startsection
+ {subsubsection}%
+ {3}%
+ {\z@}%
+ {.8cm \@plus1ex \@minus .2ex}%
+ {.5cm}%
+ {%
+ \normalfont\small\itshape
+% \centering
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% Effectively invoke the \classoption{bibnote} class option,
+% if \cmd\frontmatter@footnote@produce\ has not yet been set.
+% \begin{macrocode}
+ \@ifxundefined\frontmatter@footnote@produce{%
+ \let\frontmatter@footnote@produce\frontmatter@footnote@produce@endnote
+ }{}%
+% \end{macrocode}
+%
+%
+% \subsubsection{Table of Contents}%
+% The toc will itself make an entry in the toc,
+% but we temporarily turn off toc formatting for the duration.
+% \begin{macrocode}
+\def\@pnumwidth{1.55em}
+\def\@tocrmarg {2.55em}
+\def\@dotsep{4.5pt}
+\setcounter{tocdepth}{3}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\tableofcontents{%
+ \addtocontents{toc}{\string\tocdepth@munge}%
+ \print@toc{toc}%
+ \addtocontents{toc}{\string\tocdepth@restore}%
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\tocdepth@munge{%
+ \let\l@section@saved\l@section
+ \let\l@section\@gobble@tw@
+}%
+\def\@gobble@tw@#1#2{}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\tocdepth@restore{%
+ \let\l@section\l@section@saved
+}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\l@part#1#2{\addpenalty{\@secpenalty}%
+ \begingroup
+ \set@tocdim@pagenum{#2}%
+% \@tempdima 3em %
+ \parindent \z@
+ \rightskip\tocleft@pagenum plus 1fil\relax
+ \skip@\parfillskip\parfillskip\z@
+ \addvspace{2.25em plus\p@}%
+ \large \bf %
+ \leavevmode\ignorespaces#1\unskip\nobreak\hskip\skip@
+ \hb@xt@\rightskip{\hfil\unhbox\z@}\hskip-\rightskip\hskip\z@skip
+ \par
+ \nobreak %
+ \endgroup
+}%
+% \end{macrocode}
+%
+% \begin{macro}{\l@section}
+% Determine which TOC elements are automatically indented.
+% \begin{macrocode}
+\def\tocleft@{\z@}%
+\def\tocdim@min{5\p@}%
+\def\l@section{%
+ \l@@sections{}{section}% Implicit #3#4
+}%
+\def\l@f@section{%
+ \addpenalty{\@secpenalty}%
+ \addvspace{1.0em plus\p@}%
+ \bf
+}%
+\def\l@subsection{%
+ \l@@sections{section}{subsection}% Implicit #3#4
+}%
+\def\l@subsubsection{%
+ \l@@sections{subsection}{subsubsection}% Implicit #3#4
+}%
+\def\l@paragraph#1#2{}%
+\def\l@subparagraph#1#2{}%
+% \end{macrocode}
+% \end{macro}
+%
+% Activate the auto TOC processing.
+% \begin{macrocode}
+\let\toc@pre\toc@pre@auto
+\let\toc@post\toc@post@auto
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\listoffigures{\print@toc{lof}}%
+\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\listoftables{\print@toc{lot}}%
+\let\l@table\l@figure
+% \end{macrocode}
+%
+% \subsubsection{Default column bottom}%
+% All APS journal styles have flush bottoms.
+%
+% Note that we defer polling the \cmd\raggedcolumn@sw\ Boolean until
+% \cmd\AtBeginDocument\ time, because the document preamble
+% may legitimately change the state of that variable.
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \@ifxundefined\raggedcolumn@sw{\@booleantrue\raggedcolumn@sw}{}%
+ \raggedcolumn@sw{\raggedbottom}{\flushbottom}%
+}%
+% \end{macrocode}
+%
+%
+% \subsubsection{Table alignment style}%
+%
+% \begin{macro}{\tableft@skip@float}
+% \begin{macro}{\tabmid@skip@float}
+% \begin{macro}{\tabright@skip@float}
+% \begin{macro}{\array@row@pre@float}
+% \begin{macro}{\array@row@pst@float}
+% All APS publications have the same table specification:
+% Scotch rules above and below, centered in column.
+% \begin{macrocode}
+\def\tableft@skip@float{\z@ plus\hsize}%
+\def\tabmid@skip@float{\@flushglue}%
+\def\tabright@skip@float{\z@ plus\hsize}%
+\def\array@row@pre@float{\hline\hline\noalign{\vskip\doublerulesep}}%
+\def\array@row@pst@float{\noalign{\vskip\doublerulesep}\hline\hline}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{Footnote formatting}%
+% We customize the formatting of footnotes for all APS journals.
+% \begin{macro}{\@makefntext}
+% \begin{macrocode}
+\def\@makefntext#1{%
+ \def\baselinestretch{1}%
+ \reset@font
+ \footnotesize
+ \leftskip1em
+ \parindent1em
+ \noindent\nobreak\hskip-\leftskip
+ \hb@xt@\leftskip{%
+ \Hy@raisedlink{\hyper@anchorstart{footnote@\the\c@footnote}\hyper@anchorend}%
+ \hss\@makefnmark\
+ }%
+ #1%
+ \par
+}%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Appendix}%
+% \begin{macro}{\appendix}
+% \begin{macro}{\@hangfrom@appendix}
+% \begin{macro}{\@hangfroms@appendix}
+% \begin{macro}{\@appendixcntformat}
+% \changes{v4.0beta 3}{1999/11/13}
+% {Bug 129: section* within appendix was producing appendixname}
+% \begin{macrocode}
+\prepdef\appendix{%
+ \par
+ \let\@hangfrom@section\@hangfrom@appendix
+ \let\@hangfroms@section\@hangfroms@appendix
+ \let\@sectioncntformat\@appendixcntformat
+}%
+\def\@hangfrom@appendix#1#2#3{%
+ #1%
+ \@if@empty{#2}{%
+ #3%
+ }{%
+ #2\@if@empty{#3}{}{:\ #3}%
+ }%
+}%
+\def\@hangfroms@appendix#1#2{%
+ #1#2%
+}%
+\def\@appendixcntformat#1{\appendixname\ \csname the#1\endcsname}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{Bibliography}%
+%
+% Customize \revtex\ for the journal substyle;
+% this task requires three components:
+% the \BibTeX\ \file{apsrev.bst} style file,
+% customizing code for \file{natbib}, and
+% customizations of the \env{thebibliography} environment.
+%
+% \begin{macro}{\@bibstyle}
+% Define the argument of the \cmd\bibliographystyle\ command
+% (if the document does not do so).
+% The user must have installed a \file{.bst} file of the corresponding name.
+% This file will then be used by \BibTeX\ when compiling the document's \file{.bbl} file.
+%
+% The default bibliography style for the APS journal substyles, \file{apsrev.bst},
+% was originally called \file{revtex.bst}, but
+% that name is much too generic and should be given to a \file{.bst} file that
+% that applies generally to any \revtex\ jounal substyle, an impossibility.
+%
+% To generate \file{apsrev.bst}, use \classname{custom-bib} version 4.0b2 or later.
+% Run the \file{.bst} generator, \file{makebst.tex}, and
+% accept all defaults, with the following exceptions:
+%
+% \begin{enumerate}
+% \item
+% ORDERING OF REFERENCES: c: seq-no (references in order of Citation);
+% \item
+% AUTHOR NAMES: i: nm-init,ed-au (Initials + surname);
+% \item
+% NUMBER OF AUTHORS: l: max 12, min 12 (there will be three prompts total);
+% \item
+% TYPEFACE FOR AUTHORS IN LIST OF REFERENCES: u: nmft,nmft-def (User defined author font);
+% \item
+% FONT FOR FIRST NAMES: u: fnm-def (First names in user defined font);
+% \item
+% EDITOR NAMES IN INCOLLECTION ETC: a: nmfted (Editors incollection like authors);
+% \item
+% DATE FORMAT: p: yr-par (Date in parentheses);
+% \item
+% SUPPRESS MONTH: x: xmth (Date is year only);
+% \item
+% TITLE OF ARTICLE: i: tit-it (Title italic)
+% \item
+% ARTICLE TITLE PRESENT: x: jtit-x (No article title);
+% \item
+% JOURNAL NAME FONT: r: jttl-rm (Journal title normal);
+% \item
+% TECHNICAL REPORT TITLE: b: trtit-b (Tech. report title like books);
+% \item
+% JOURNAL VOLUME: b: vol-bf (Volume bold);
+% \item
+% VOLUME PUNCTUATION: c: volp-com (Volume with comma);
+% \item
+% PAGE NUMBERS: f: jpg-1 (Only start page number);
+% \item
+% JOURNAL NAME PUNCTUATION: x: jnm-x (Space after journal);
+% \item
+% PUBLISHER IN PARENTHESES: d: pub-date (Publisher and date in parentheses);
+% \item
+% PUBLISHER POSITION: p: pre-pub (Publisher before chapter, pages);
+% \item
+% ISBN NUMBER: isbn: (Include ISBN for books, booklets)
+% \item
+% ISSN NUMBER: issn: (Include ISSN for periodicals)
+% \item
+% EDITOR IN COLLECTIONS: b: edby (Booktitle, edited by \dots);
+% \item
+% PUNCTUATION BETWEEN SECTIONS (BLOCKS): c: blk-com (Comma between blocks);
+% \item
+% ABBREVIATE WORD `PAGES': a: pp (`Page' abbreviated);
+% \item
+% ABBREVIATE WORD `EDITORS': a: ed (`Editor' abbreviated);
+% \item
+% OTHER ABBREVIATIONS: a: abr (Abbreviations);
+% \item
+% ABBREVIATION FOR `EDITION': a: ednx (`Edition' abbreviated as `ed');
+% \item
+% EDITION NUMBERS: n: ord (Numerical editions);
+% \item
+% STORED JOURNAL NAMES: a: jabr (Abbreviated journal names);
+% \item
+% FONT OF `ET AL': i: etal-it (Italic et al);
+% \item
+% ADDITIONAL REVTeX DATA FIELDS: r: revdata, eprint, url, url-blk (Include REVTeX data fields collaboration, eid, eprint, numpages, url)
+% \item
+% NEW FONT SELECTION SCHEME: n: nfss (NFSS);
+% \item
+% ADDITIONAL REVTeX DATA FIELDS: y: revdata (additional data fields);
+% \item
+% REFERENCE COMPONENT TAGS: y: reference component tags;
+% \item
+% URL ADDRESS: n: URL as note;
+% \end{enumerate}
+%
+% A file \file{apsrev.dbj} file equivalent to the following should result:
+% \begin{verbatim}
+% \input docstrip
+% \preamble
+% ----------------------------------------
+% *** REVTeX-compatible apsrev.bst ***
+% \endpreamble
+% \postamble
+% End of customized bst file
+% \endpostamble
+% \keepsilent
+% \askforoverwritefalse
+% \def\MBopts{\from{merlin.mbs}{%
+% seq-no%: Citation order (unsorted, like unsrt.bst)
+% ,nm-init,ed-au%: Initials + surname (J. F. Smith)
+% ,nmlm%: Limited authors (et al replaces missing names)
+% ,x10%: Maximum of 10 authors
+% ,m10%: Minimum of 10 authors
+% ,nmft,nmft-def%: User defined author font (\bibnamefont)
+% ,fnm-def%: First names in user defined font (\bibfnamefont)
+% ,nmfted%: Editors incollection like authors font
+% ,yr-par%: Date in parentheses as (May 1993)
+% ,xmth%: Date is year only
+% ,tit-it%: Title italic (\em)
+% ,jtit-x%: No article title
+% ,jttl-rm%: Journal name normal font
+% ,trtit-b%: Tech. report title like books
+% ,vol-bf%: Volume bold as {\bf vol}(num)
+% ,volp-com%: Volume with comma as vol(num), ppp
+% ,jpg-1%: Only start page number
+% ,jnm-x%: Space after journal name
+% ,pub-date%: Publisher and date in parentheses (Oxford, 1994)
+% ,pre-pub%: Publisher before chapter, pages
+% ,isbn%: Include ISBN for books, booklets, etc.
+% ,issn%: Include ISSN for periodicals
+% ,edby%: In booktitle, edited by .. (where .. is names)
+% ,blk-com%: Comma between blocks
+% ,pp%: `Page' abbreviated as p. or pp.
+% ,ed%: `Editor' abbreviated as ed. or eds.
+% ,abr%: Abbreviations of such words
+% ,ednx%: `Edition' abbreviated as `ed'
+% ,ord%: Numerical editions as 1st, 2nd, 3rd, etc
+% ,jabr%: Abbreviated journal names
+% ,etal-it%: Italic et al
+% ,revdata,eprint,url,url-blk%: Include REVTeX data fields collaboration, eid, eprint, numpages, url
+% ,url,url-nt%: URL as note
+% ,bibinfo%: Reference component tags like \bibinfo in the content of \bibitem
+% ,nfss%: NFSS use \textbf, \emph, not \bf, \em
+% }}
+% \generate{\file{\jobname.bst}{\MBopts}}
+% \endbatchfile
+% \end{verbatim}
+%
+% To get a banner in the \file{.blg} file, patch by hand into \file{apsrev.bst}:
+% \begin{verbatim}
+% FUNCTION {banner.log} {"REVTeX-compatible apsrev.bst 9812" warning$}
+% \end{verbatim}
+% and invoke \texttt{banner.log} from within \texttt{begin.bib}
+%
+% We ensure that the journal substyle has the first word
+% in the matter by installing the (default) APS code
+% later on (see Section~\ref{sec:aps-defaults}).
+% \end{macro}
+%
+% \begin{macro}{\bibpunct}
+% The following commands effectively establish the style in which \cmd\cite\ commands are
+% formatted.
+% You can think of them as the second needed component for the bibliography.
+%
+% Set up for numerical citations.
+%
+% The journal substyles can override these choices.
+%
+% Note that setting \cmd\NAT@sort\ at this late hour is not totally effective.
+% You have to give \classname{natbib} the relevant options at load time.
+% \begin{macrocode}
+ \bibpunct{[}{]}{,}{n}{}{,}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bibsection}
+% We define the sectioning command to use when starting the bibliography.
+%
+% \changes{v4.0rc1}{2001/06/18}
+% {grid changes with push and pop}
+% \begin{macrocode}
+ \def\bibsection{%
+ \par
+% \twocolumn@sw{\onecolumngrid}{}%
+ \onecolumngrid@push
+ \begingroup
+ \baselineskip26\p@
+% \def\@currentHref{section.bib}%
+ \bib@device{\textwidth}{245.5\p@}%
+ \endgroup
+ \nobreak\@nobreaktrue
+ \addvspace{19\p@}%
+ \par
+% \twocolumn@sw{\twocolumngrid}{}%
+ \onecolumngrid@pop
+ }%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bib@device}
+% \begin{macro}{\bibpreamble}
+% \begin{macro}{\bibsep}
+% \begin{macro}{\newblock}
+% We define the sectioning command to use when starting the bibliography.
+% \begin{macrocode}
+\def\bib@device#1#2{%
+ \hb@xt@#1{%
+ \hfil
+ \phantomsection
+ \addcontentsline {toc}{section}{\protect\numberline{}\refname}%
+% \hyper@anchorstart {\@currentHref }%
+ \hb@xt@#2{%
+ \skip@\z@\@plus-1fil\relax
+ \leaders\hrule height.25 \p@ depth.25 \p@ \hskip\z@\@plus1fil
+ \hskip\skip@
+ \hskip\z@\@plus0.125fil\leaders\hrule height.375\p@ depth.375\p@ \hskip\z@\@plus0.75fil \hskip\z@\@plus0.125fil
+ \hskip\skip@
+ \hskip\z@\@plus0.25 fil\leaders\hrule height.5 \p@ depth.5 \p@ \hskip\z@\@plus0.5 fil \hskip\z@\@plus0.25 fil
+ \hskip\skip@
+ \hskip\z@\@plus0.375fil\leaders\hrule height.625\p@ depth.625\p@ \hskip\z@\@plus0.25fil \hskip\z@\@plus0.375fil
+ % \hskip\skip@
+ % \hfil
+ }%
+%\hyper@anchorend
+ \hfil
+ }%
+}%
+\let\bibpreamble\@empty
+\bibsep\z@\relax
+\def\newblock{\ }%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bibfont}
+% We define the font switch that applies to the body of the bibliography.
+%
+% \begin{macrocode}
+ \def\bibfont{%
+ \small
+ }%
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Index}%
+% FIXME: the following call to \cmd\twocolumn\ appears wrong if we were in two-column grid.
+% \changes{v4.0beta 3}{1999/11/13}
+% {grid changes with ltxgrid}
+% \changes{v4.0rc1}{2001/06/18}
+% {grid changes with push and pop}
+% \begin{macrocode}
+\newenvironment{theindex}{%
+%\let\wastwocol@sw\twocolumn@sw
+ \columnseprule \z@
+ \columnsep 35\p@
+ \c@secnumdepth-\maxdimen
+ \onecolumngrid@push
+ \section{\indexname}%
+ \thispagestyle{plain}%
+ \parindent\z@
+ \parskip\z@ plus.3\p@\relax
+ \let\item\@idxitem
+%\wastwocol@sw{\twocolumngrid}{}%
+ \onecolumngrid@pop
+}{%
+%\onecolumngrid@pop
+}%
+%
+\def\@idxitem{\par\hangindent 40\p@}
+%
+\def\subitem{\par\hangindent 40\p@ \hspace*{20\p@}}
+%
+\def\subsubitem{\par\hangindent 40\p@ \hspace*{30\p@}}
+%
+\def\indexspace{\par \vskip 10\p@ plus5\p@ minus3\p@\relax}
+% \end{macrocode}
+%
+%
+% \subsection{Journal-Specific Code}%
+%
+% For APS journals, we supply code specific to PRA, PRB, PRC, PRD, PRE, PRL, and RMP.
+% At present, they are identical,
+% with the exception of PRB's code for superscript citations.
+%
+% \begin{macrocode}
+\def\journal@pra{pra}%
+\def\journal@prb{prb}%
+\def\journal@prc{prc}%
+\def\journal@prd{prd}%
+\def\journal@pre{pre}%
+\def\journal@prl{prl}%
+\def\journal@prstab{prstab}%
+\def\journal@rmp{rmp}%
+% \end{macrocode}
+%
+% Note: the convention in this document class is that
+% the substyle must not override any explicit class options
+% declared by the document.
+% This means that the various Booleans of Section~\ref{sec:options}
+% may be assigned here only if they are still undefined at this point.
+%
+% For most all of the APS journals, the journal-dependent
+% code is relatively meager and is therefore embedded in this file.
+% However, the RMP code is sufficiently extensive that
+% splitting it out into a separate file is more convenient.
+%
+% \subsubsection{\classoption{pra}}%
+% \begin{macrocode}
+\@ifx{\@journal\journal@pra}{%
+% \end{macrocode}
+%
+% End of \classoption{pra} code.
+% \begin{macrocode}
+}{}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{prb}}%
+% \begin{macrocode}
+\@ifx{\@journal\journal@prb}{%
+% \end{macrocode}
+% PRB requires superscript citations.
+% We use Patrick Daly's \classname{natbib} package,
+% and hyperref and other packages are already set up to cope with this.
+%
+% \begin{macro}{\bibpunct}
+% By default, PRB selects the \classoption{bibnotes} option.
+% We also set up for numerical citations.
+% \begin{macrocode}
+ \@ifxundefined\bibnotes@sw{\@booleantrue\bibnotes@sw}{}%
+ \bibpunct{}{}{,}{s}{}{\textsuperscript{,}}%
+ \def\@onlinecite#1{\begingroup\let\@cite\NAT@citenum\citealp{#1}\endgroup}%
+% \end{macrocode}
+% \end{macro}
+%
+% Invoke \classoption{superbib} option if the document
+% has made no selection of its own.
+% \begin{macrocode}
+ \appdef\class@documenthook{%
+ \@ifxundefined\place@bibnumber{%
+ \let\place@bibnumber\place@bibnumber@sup
+ }{}%
+ }%
+% \end{macrocode}
+%
+% End of \classoption{prb} code.
+% \begin{macrocode}
+}{}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{prc}}%
+% \begin{macrocode}
+\@ifx{\@journal\journal@prc}{%
+% \end{macrocode}
+%
+% End of \classoption{prc} code.
+% \begin{macrocode}
+}{}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{prd}}%
+% \begin{macrocode}
+\@ifx{\@journal\journal@prd}{%
+% \end{macrocode}
+%
+% End of \classoption{prd} code.
+% \begin{macrocode}
+}{}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{pre}}%
+% \begin{macrocode}
+\@ifx{\@journal\journal@pre}{%
+% \end{macrocode}
+%
+% End of \classoption{prd} code.
+% \begin{macrocode}
+}{}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{prl}}%
+% \begin{macrocode}
+\@ifx{\@journal\journal@prl}{%
+% \end{macrocode}
+% In PRL, the default is the \classoption{bibnotes} option,
+% and the Acknowledgments section has no head.
+%
+% However, the References head is a device that may be described as a lozenge centered on the baseline,
+% 71 points wide by 2 points thick, with the ends tapering to a half point in thickness.
+% Space above 26 points base to base, below 31 base to base.
+% \begin{macrocode}
+ \@ifxundefined\bibnotes@sw{\@booleantrue\bibnotes@sw}{}%
+ \@booleanfalse\acknowledgments@sw
+%\let\acknowledgmentsname\@empty
+ \def\bibsection{%
+ \par
+ \begingroup
+ \baselineskip26\p@
+ \bib@device{\hsize}{72\p@}%
+ \endgroup
+ \nobreak\@nobreaktrue
+ \addvspace{19\p@}%
+ }%
+% \end{macrocode}
+% Implement length checking.
+% Use the \classname{times} and \classname{mathtime} packages,
+% plus whatever other processing is required
+% to make the formatted output be true
+% to the metrics of the journal.
+%
+% Wait. Do not use mathtime after all. APS has their own way of doing math pi, involving
+% Adobe Mathematical Pi and other fonts.
+% \begin{macrocode}
+%\appdef\class@documenthook{%
+ \@ifxundefined\lengthcheck@sw{\@booleanfalse\lengthcheck@sw}{}%
+ \lengthcheck@sw{%
+ \RequirePackage{times}%
+% \RequirePackage{mathtime}%
+ }{%
+ }%
+%}%
+% \end{macrocode}
+% A PRL does not have numbered sections.
+% \begin{macrocode}
+ \c@secnumdepth=-\maxdimen
+% \end{macrocode}
+% Note: we defer this code until after type size file is read in.
+% \begin{macrocode}
+ \appdef\set@typesize@hook{%
+ \@ifnum{\@pointsize=10\relax}{%
+ \lengthcheck@sw{%
+ \def\large{%
+ \@setfontsize\large{12.5}{14\p@}%
+ }%
+ \def\normalsize{%
+ \@setfontsize\normalsize{10.5}\@xiipt
+ \abovedisplayskip 6\p@ \@plus6\p@ \@minus5\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+ }%
+ \def\small{%
+ \@setfontsize\small{9.5}\@xipt
+ \abovedisplayskip 5\p@ \@plus5\p@ \@minus4\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+ }%
+ \DeclareMathSizes{12.5}{12.5}{9}{6}%
+ \DeclareMathSizes{10.5}{10.5}{7.5}{5}%
+ \DeclareMathSizes{9.5}{9.5}{7.0}{5}%
+ }{%
+ \def\normalsize{%
+ \@setfontsize\normalsize\@xpt\@xiipt
+ \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+ }%
+ }%
+ }{}%
+ }%
+%\appdef\set@pica@hook{%
+ \@ifnum{\@pointsize=10\relax}{%
+ \textheight = 694.0\p@
+% \textheight = 55\baselineskip
+% \advance\textheight by \topskip
+ }{}%
+%}%
+% \end{macrocode}
+%
+% End of \classoption{prl} code.
+% \begin{macrocode}
+}{}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{prstab}}%
+% \begin{macrocode}
+\@ifx{\@journal\journal@prstab}{%
+% \end{macrocode}
+%
+% End of \classoption{prstab} code.
+% \begin{macrocode}
+}{}%
+% \end{macrocode}
+%
+% \subsubsection{\classoption{rmp}}%
+% Read in the code from a file.
+% \begin{macrocode}
+\@ifx{\@journal\journal@rmp}{\input{\@journal\substyle@ext}}{}%
+% \end{macrocode}
+%
+%
+% \subsection{Establish APS Defaults}\label{sec:aps-defaults}
+%
+% \begin{macro}{\footinbib@sw}
+% All APS journals except RMP invoke the \classoption{footinbib} option.
+% We rely on the RMP-specific code to give a value to this switch.
+% \begin{macrocode}
+\@ifxundefined\footinbib@sw{\@booleantrue\footinbib@sw}{}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\place@bibnumber}
+% \begin{macro}{\@bibstyle}
+% We install code that will select the presentation for \cmd\bibitem s
+% and govern the \BibTeX\ processing.
+% If the user has not selected any related option and if
+% the journal substyle also has not, then the \classoption{aps}
+% option choses these defaults.
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \@ifxundefined\place@bibnumber{%
+ \let\place@bibnumber\place@bibnumber@inl
+ }{}%
+ \@ifxundefined\@bibstyle{%
+ \def\@bibstyle{apsrev}%
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \begin{macrocode}
+%</aps>
+% \end{macrocode}
+%
+%
+% \section{The \classoption{rmp} journal substyle: the \texttt{rmp} module}
+%
+% The file \file{rmp.rtx} is read in by the \classname{revtex4} document class
+% if \cmd\@society\ has the value \classoption{aps}
+% and \cmd\@journal\ has the value \classoption{rmp}.
+%
+% It is read at the end of the \filename{aps.rtx}, so all definitions
+% and assignments in that file are operative unless overridden here.
+%
+%
+% \begin{macrocode}
+%<*rmp>
+% \end{macrocode}
+%
+% Protect this file from being read in by anything but \revtex.
+% \begin{macrocode}
+\ifx\undefined\substyle@ext
+ \def\@tempa{%
+ \endinput
+ \GenericWarning{I must be read in by REVTeX! (Bailing out)}%
+ }%
+ \expandafter\else
+ \def\@tempa{}%
+ \expandafter\fi\@tempa
+% \end{macrocode}
+%
+% Protect this file from being read in as a society instead of a journal.
+% In such a case, \cmd\@journal\ will be \cmd\@empty.
+% \begin{macrocode}
+\@ifx@empty\@journal{%
+ \class@warn{I have to read in the aps substyle first!}%
+ \endinput
+ \def\@society{aps}\def\@journal{rmp}%
+ \expandafter\input\expandafter{\@society\substyle@ext}%
+}{}%
+% \end{macrocode}
+%
+% \subsection{Frontmatter}%
+%
+% \begin{macro}{\frontmatter@setup}
+%
+% \begin{macrocode}
+\def\frontmatter@setup{%
+ \normalfont\sffamily\raggedright
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\PACS@warn}
+% Per Mark Doyle, RMP never displays the PACS, so they don't want the `use showpacs' warning spit out.
+% \begin{macrocode}
+\def\PACS@warn{RMP documents do not display PACS. Your \string\pacs\space will be ignored}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@title@above}
+% \begin{macro}{\frontmatter@title@format}
+% \begin{macro}{\frontmatter@title@below}
+%
+% \begin{macrocode}
+\def\frontmatter@title@above{}%
+\def\frontmatter@title@format{\Large\bfseries\raggedright}% HelveticaNeue-Medium(Italic) 14pt.
+\def\frontmatter@title@below{\addvspace{12\p@}}% 24pt b-b down to first author
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@authorformat}
+% Set the rag to a milder value, because we want to do true ragged right
+% typesetting, as opposed to the \LaTeX\ default, which gives very poor results.
+%
+% Note: author font is 9.8bp. 19.2bp/14.3bp above/below.
+% \begin{macrocode}
+\def\frontmatter@authorformat{%
+ \preprintsty@sw{\vskip0.5pc\relax}{}%
+ \@tempskipa\@flushglue
+ \@flushglue\z@ plus50\p@\relax
+ \raggedright\advance\leftskip.5in\relax
+ \@flushglue\@tempskipa
+ \parskip\z@skip
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@affiliationfont}
+% The hook \cmd\frontmatter@affiliationfont\ controls the formatting of affiliations and affiliation groups.
+% The hook \cmd\frontmatter@above@affilgroup\ is invoked just before proceeding with author/affiliation processing.
+% 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}.
+%
+% Note: affiliation font is 9.03/10.4bp, 14.3bp/19.2bp b-b above/below
+% \begin{macrocode}
+\def\frontmatter@affiliationfont{% Helvetica 9/10.2
+ \small\slshape\selectfont\baselineskip10.5\p@\relax
+ \@tempskipa\@flushglue
+ \@flushglue\z@ plus50\p@\relax
+ \raggedright\advance\leftskip.5in\relax
+ \@flushglue\@tempskipa
+}%
+\def\frontmatter@above@affilgroup{\addvspace{7.2\p@}}% additional leading above an author
+\def\frontmatter@above@affiliation{\addvspace{5.3\p@}}%
+\def\frontmatter@above@affiliation@script{}%
+% \end{macrocode}
+% \end{macro}
+%
+% Set up the default RMP style for title block authors and affiliations.
+% This command should effectively override the effect of the
+% corresponding command in the parent substyle.
+% \begin{macrocode}
+\@ifxundefined\groupauthors@sw{%
+ \clo@groupedaddress
+}{}%
+% \end{macrocode}
+%
+% \begin{macro}{\frontmatter@RRAP@format}
+% Note: in RMP, if we are not in preprint mode, the date will not be produced.
+%
+% Note: Helvetica C/lc, 8.98bp, space above: 16.3bp b-b.
+% \begin{macrocode}
+\def\frontmatter@RRAP@format{%
+ \addvspace{7.3\p@}%
+ \small
+ \raggedright\advance\leftskip.5in\relax
+% \parskip.5ex\relax
+% \everypar{\hbox\bgroup(\@gobble@leavemode@uppercase}%
+% \def\par{\@ifvmode{}{\unskip)\egroup\@@par}}%
+% \preprintsty@sw{}{\let\@date\@empty}%
+}%
+%\def\@gobble@leavemode@uppercase#1#2{\expandafter\MakeTextUppercase}%
+\def\produce@RRAP#1{%
+ \@if@empty{#1}{}{%
+ \@ifvmode{\leavevmode}{}%
+ \unskip(\ignorespaces#1\unskip)\quad
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@abstractheading}
+% Space above 21.8bp b-b.
+% \begin{macrocode}
+\def\frontmatter@abstractheading{%
+ \preprintsty@sw{%
+ \begingroup
+ \centering\large
+ \abstractname
+ \par
+ \endgroup
+ \vspace{.5pc}%
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@abstractfont}
+% TimesTen 8.93bp/9.6bp X 360bp, indented 36bp, with 21.9/37.6bp b-b above/below
+% \begin{macrocode}
+\def\frontmatter@abstractfont{%
+ \footnotesize
+ \hsize360\p@
+ \leftskip=0.5in
+ \advance\hsize\leftskip
+%\rightskip=\leftskip
+ \parindent\z@
+%\hsize5.5in
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frontmatter@preabstractspace}
+% \begin{macro}{\frontmatter@postabstractspace}
+% Space above and space below abstract in title block.
+% Should be 22/36 points base-to-base.
+% \begin{macrocode}
+\def\frontmatter@preabstractspace{7.7\p@}%
+\def\frontmatter@postabstractspace{24.6\p@}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% FIXME: Not done: PACS.
+% FIXME: TOC: Head is same as \section: HelveticaNeue 8.98. 32/22bp b-b above/below,
+% Body: TimesTen 8/10.5.
+%
+% \subsection{General Text}%
+%
+% If not in preprint mode, set the type size to 10/12 point. Note: s/b 11.6bp leading
+% \begin{macrocode}
+ \appdef\set@typesize@hook{%
+ \@ifxundefined\preprintsty@sw{}{%
+ \preprintsty@sw{}{%
+ \def\normalsize{%
+ \@setsize\normalsize{12pt}\xpt\@xpt
+ \abovedisplayskip 10\p@ plus2\p@ minus5\p@
+ \belowdisplayskip \abovedisplayskip
+ \abovedisplayshortskip \abovedisplayskip
+ \belowdisplayshortskip \abovedisplayskip
+ \let\@listi\@listI
+ }%
+ }%
+ }%
+ }%
+% \end{macrocode}
+%
+% Footnote mods:
+% \begin{macrocode}
+ \footnotesep 9.25pt
+ \skip\footins 36pt plus 4pt minus 2pt
+ \def\footnoterule{\kern-13pt\hrule width.5in\kern15.6pt\relax}%
+% \end{macrocode}
+%
+%
+% \subsection{Sectioning}
+%
+% \begin{macrocode}
+\def\thepart{\Roman{part}} %
+\def\thesection{\Roman{section}}
+\def\p@section{}
+\def\thesubsection{\Alph{subsection}}
+\def\p@subsection{\thesection.}
+\def\thesubsubsection{\arabic{subsubsection}}
+\def\p@subsubsection{\thesection.\thesubsection.}
+\def\theparagraph{\alph{paragraph}}
+\def\p@paragraph{\thesection.\thesubsection.\thesubsubsection.}
+\def\thesubparagraph{\arabic{subparagraph}}
+\def\p@subparagraph{\thesection.\thesubsection.\thesubsubsection.\theparagraph.}
+% \end{macrocode}
+%
+% In RMP, put a period (.), followed by nut space, after the section number.
+% Also, hang the section number (the \LaTeX\ default).
+% \begin{macrocode}
+\def\@seccntformat#1{\csname the#1\endcsname.\hskip0.5em\relax}%
+% \end{macrocode}
+%
+% Note that we wish to set the section head uppercase, so we use
+% David Carlisle's \cmd\MakeTextUppercase. However, because this procedure effectively
+% parses its argument (looking for things to \emph{not} translate), it has to be invoked
+% in such a way that the argument of the \cmd\section\ command is passed to it as its
+% own argument.
+%
+% To accomplish this, we use the \cmd\@hangfrom@\ hook, which was developed for this
+% purpose.
+% \begin{macrocode}
+ \def\section{%
+ \@startsection{section}{1}{\z@}{0.8cm plus1ex minus.2ex}{0.4cm}%
+ {%
+ \small\sffamily\bfseries\selectfont
+ \raggedright
+ \parindent\z@
+ }%
+ }%
+ \def\@hangfrom@section#1#2#3{\@hangfrom{#1#2}\MakeTextUppercase{#3}}%
+ \def\subsection{%
+ \@startsection{subsection}{2}{\z@}{0.8cm plus1ex minus.2ex}{0.4cm}%
+ {%
+ \small\sffamily\bfseries
+ \raggedright
+ \parindent\z@
+ }%
+ }%
+ \def\subsubsection{%
+ \@startsection{subsubsection}{3}{\z@}{.8cm plus1ex minus.2ex}{0.4cm}%
+ {%
+ \small\sffamily\selectfont
+ \raggedright
+ \parindent\z@
+ }%
+ }%
+ \def\paragraph{%
+ \@startsection{paragraph}{4}{\z@}{.8cm plus1ex minus.2ex}{-1em}%
+ {%
+ \small\slshape\selectfont
+ \raggedright
+ \parindent\z@
+ }%
+ }%
+ \def\subparagraph{%
+ \@startsection{subparagraph}{4}{\parindent}{3.25ex plus1ex minus.2ex}{-1em}%
+ {\normalsize\bfseries\selectfont}%
+ }%
+%
+ \setcounter{tocdepth}{4}% FIXME: has no effect
+% \end{macrocode}
+%
+% \begin{macro}{\appendix}
+% \begin{macro}{\@hangfrom@appendix}
+% \begin{macro}{\@hangfroms@appendix}
+% \begin{macro}{\@appendixcntformat}
+% \begin{macrocode}
+\appdef\appendix{%
+ \let\@hangfrom@section\@hangfrom@appendix
+ \let\@hangfroms@section\@hangfroms@appendix
+ \let\@sectioncntformat\@appendixcntformat
+}%
+\def\@hangfrom@appendix#1#2#3{%
+ #1%
+ \@if@empty{#2}{%
+ #3%
+ }{%
+ #2\@if@empty{#3}{}{:\ #3}%
+ }%
+}%
+\def\@hangfroms@appendix#1#2{%
+ #1\appendixname\@if@empty{#2}{}{:\ #2}%
+}%
+\def\@appendixcntformat#1{\appendixname\ \csname the#1\endcsname}%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Figure and Table Caption Formatting}
+% \begin{macro}{\@makecaption}
+%
+% \begin{macrocode}
+\setlength\belowcaptionskip{2\p@}
+\long\def\@makecaption#1#2{%
+ \vskip\abovecaptionskip
+ \vbox{%
+ \flushing
+ \small\rmfamily
+% \hsize\@capwidth
+ \noindent
+ #1\nobreak\hskip.5em plus.2em\ignorespaces#2\par
+ }%
+ \vskip\belowcaptionskip
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Citations and Bibliography}%
+%
+% Customize \revtex\ for the journal substyle;
+% this task requires three components:
+% a \BibTeX\ \file{.bst} style file,
+% customizing code for \file{natbib}, and
+% customizations of the \env{thebibliography} environment.
+%
+% \begin{macro}{\@bibstyle}
+% Define the argument of the \cmd\bibliographystyle\ command
+% (if the document does not do so).
+%
+% The user must have installed a \file{.bst} file of the corresponding name.
+% This file will then be used by \BibTeX\ when compiling the document's \file{.bbl} file.
+%
+% To generate \file{apsrmp.bst}, use \classname{custom-bib} version 3.89d1 or later.
+% Run the \file{.bst} generator, \file{makebst.tex}, with the following options:
+%
+% \begin{enumerate}
+% \item
+% STYLE OF CITATIONS: a: ay( Author-year with some non-standard interface)
+% \item
+% AUTHOR-YEAR SUPPORT SYSTEM: nat: (Natbib for use with natbib v5.3 or later)
+% \item
+% ORDERING OF REFERENCES: *: (Alphabetical);
+% \item
+% ORDER ON VON PART: x: vonx (Sort without von part---de la Maire after Mahone)
+% \item
+% AUTHOR NAMES: a: nm-rev1 (Only first name reversed, initials---AGU style: Smith, J. F., H. K. Jones)
+% \item
+% POSITION OF JUNIOR: jnrlst (Junior comes last as Smith, John, Jr.)
+% \item
+% NUMBER OF AUTHORS: l: max 12, min 12 (three prompts in all);
+% \item
+% TYPEFACE FOR AUTHORS IN LIST OF REFERENCES: u: nmft, nmft-def (User defined author font---\cmd\bibnamefont)
+% \item
+% FONT FOR FIRST NAMES: u: fnm-def (First names in user defined font---\cmd\bibfnamefont)
+% \item
+% EDITOR NAMES IN INCOLLECTION ETC: a: nmfted (Editors incollection like authors font)
+% \item
+% FONT FOR `AND' IN LIST: r: nmand-rm (`And' in normal font---JONES and JAMES)
+% \item
+% FONT OF CITATION LABELS IN TEXT: u: lab, lab-def (User-defined citation font---\cmd\citenamefont)
+% \item
+% LABEL WHEN AUTHORS MISSING: keyxyr (Year blank when KEY replaces missing author---for natbib 7.0)
+% \item
+% DATE POSITION: b: dt-beg (Date after authors)
+% \item
+% SUPPRESS MONTH: xmth (Date is year only)
+% \item
+% DATE FORMAT: yr-com (Date preceded by comma as `, 1993')
+% \item
+% TRUNCATE YEAR: note-yr (Year text full as 1990--1993 or `in press')
+% \item
+% ARTICLE TITLE PRESENT: x: jtit-x (No article title);
+% \item
+% JOURNAL TITLE FONT: r: jttl-rm (Journal title normal);
+% \item
+% TECHNICAL REPORT TITLE: b: trtit-b (Tech. report title like books);
+% \item
+% JOURNAL VOLUME: b: vol-bf (Volume bold);
+% \item
+% VOLUME PUNCTUATION: c: volp-com (Volume with comma);
+% \item
+% PAGE NUMBERS: f: jpg-1 (Only start page number);
+% \item
+% POSITION OF PAGES: e: pp-last (Pages at end, but before any notes)
+% \item
+% NUMBER AND SERIES FOR COLLECTIONS: num-xser (Allows number without series and suppresses word ``number'')
+% \item
+% JOURNAL NAME PUNCTUATION: x: jnm-x (Space after journal);
+% \item
+% PUBLISHER IN PARENTHESES: p: pub-par (Publisher in parentheses)
+% \item
+% PUBLISHER POSITION: p: pre-pub (Publisher before chapter, pages);
+% \item
+% ISBN NUMBER: *: isbn (Include ISBN);
+% \item
+% ISSN NUMBER: *: isbn (Include ISSN for periodicals);
+% \item
+% `EDITOR' AFTER NAMES: a: edpar (`Name (editor),' in parentheses, after name, comma after)
+% \item
+% EDITOR IN COLLECTIONS: b: edby (In booktitle, edited by\dots---where \dots is names)
+% \item
+% PUNCTUATION BETWEEN SECTIONS (BLOCKS): c: blk-com (Comma between blocks);
+% \item
+% `IN' WITH JOURNAL NAMES: i: injnl (Add `in' before journal name in style for incollection)
+% \item
+% ABBREVIATE WORD `PAGES': a: pp (`Page' abbreviated);
+% \item
+% ABBREVIATE WORD `EDITORS': a: ed (`Editor' abbreviated);
+% \item
+% ABBREVIATION FOR `EDITION': a: ednx (`Edition' abbreviated as `ed');
+% \item
+% EDITION NUMBERS: xedn (Editions as in database saving much processing memory)
+% \item
+% STORED JOURNAL NAMES: a: jabr (Abbreviated journal names);
+% \item
+% FONT OF `ET AL': i: etal-it (Italic et al);
+% \item
+% ADDITIONAL REVTeX DATA FIELDS: r: revdata, eprint, url, url-blk (Include REVTeX data fields)
+% \item
+% NEW FONT SELECTION SCHEME: n: nfss (NFSS);
+% \item
+% ADDITIONAL REVTeX DATA FIELDS: y: revdata (additional data fields);
+% \item
+% REFERENCE COMPONENT TAGS: r: bibinfo (reference component tags);
+% \end{enumerate}
+%
+% A file \file{apsrmp.dbj} file equivalent to the following should result:
+% \begin{verbatim}
+% \input docstrip
+% \preamble
+% ----------------------------------------
+% *** REVTeX-compatible apsrmp.bst ***
+% \endpreamble
+% \postamble
+% End of customized bst file
+% \endpostamble
+% \keepsilent
+% \askforoverwritefalse
+% \def\MBopts{\from{merlin.mbs}{%
+% ay%: Author-year with some non-standard interface
+% ,nat%: Natbib for use with natbib v5.3 or later
+% ,vonx%: Sort without von part (de la Maire after Mahone)
+% ,nm-rev1%: Only first name reversed, initials (AGU style: Smith, J. F., H. K. Jones)
+% ,jnrlst%: Junior comes last as Smith, John, Jr.
+% ,nmlm%: Limited authors (et al replaces missing names)
+% ,x10%: Maximum of 10 authors
+% ,m10%: Minimum of 10 authors
+% ,nmft,nmft-def%: User defined author font (\bibnamefont)
+% ,fnm-def%: First names in user defined font (\bibfnamefont)
+% ,nmfted%: Editors incollection like authors font
+% ,nmand-rm%: `And' in normal font (JONES and JAMES)
+% ,lab,lab-def%: User defined citation font (\citenamefont)
+% ,keyxyr%: Year blank when KEY replaces missing author (for natbib 7.0)
+% ,dt-beg%: Date after authors
+% ,xmth%: Date is year only
+% ,yr-com%: Date preceded by comma as `, 1993'
+% ,note-yr%: Year text full as 1990--1993 or `in press'
+% ,jtit-x%: No article title
+% ,jttl-rm%: Journal name normal font
+% ,trtit-b%: Tech. report title like books
+% ,vol-bf%: Volume bold as {\bf vol}(num)
+% ,volp-com%: Volume with comma as vol(num), ppp
+% ,jpg-1%: Only start page number
+% ,pp-last%: Pages at end but before any notes
+% ,num-xser%: Allows number without series and suppresses word "number"
+% ,jnm-x%: Space after journal name
+% ,pub-par%: Publisher in parentheses
+% ,pre-pub%: Publisher before chapter, pages
+% ,isbn%: Include ISBN for books, booklets, etc.
+% ,issn%: Include ISSN for periodicals
+% ,edpar%: `Name (editor),' in parentheses, after name, comma after
+% ,edby%: In booktitle, edited by .. (where .. is names)
+% ,blk-com%: Comma between blocks
+% ,injnl%: Add `in' before journal name in style for incollection
+% ,pp%: `Page' abbreviated as p. or pp.
+% ,ed%: `Editor' abbreviated as ed. or eds.
+% ,xedn%: Editions as in database saving much processing memory
+% ,jabr%: Abbreviated journal names
+% ,etal-it%: Italic et al
+% ,revdata,eprint,url,url-blk%: Include REVTeX data fields collaboration, eid, eprint, numpages, url
+% ,bibinfo%: Reference component tags like \bibinfo in the content of \bibitem
+% ,nfss%: NFSS use \textbf, \emph, not \bf, \em
+% }}
+% \generate{\file{\jobname.bst}{\MBopts}}
+% \endbatchfile
+% \end{verbatim}
+%
+% \begin{macrocode}
+\appdef\class@documenthook{%
+ \@ifxundefined\@bibstyle{%
+ \def\@bibstyle{apsrmp}%
+ }{}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bibpunct}
+% The following commands effectively etablish the style in which \cmd\cite\ commands are
+% formatted.
+% You can think of them as the second needed component for the bibliography.
+%
+% Set up for author-year citations:
+% when \cmd\NAT@set@cites\ executes (at \envb{document} time), the \cmd\@biblabel\ will
+% be set to \cmd\NAT@biblabel.
+%
+% Per Karie Friedman (friedman@phys.washington.edu), multiple citations are separated by semicolons, e.g.,
+% (Jones, 1999; Abbott and Smith, 2000; Wortley, 2001a),
+% and
+% multiple citations by the same author by commas, e.g.,
+% Abela et al. (1995, 1997a, 1997b).
+% The third argument of \cmd\bibpunct\ handles the former.
+%
+% The fifth argument puts a comma after the author when the year is not in parens:
+% (Lee et al., 1996).
+%
+% \begin{macrocode}
+ \bibpunct{(}{)}{;}{a}{,}{,}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\cite}
+% Per Mark Doyle, \cmd\cite\ is mapped to \cmd\citep\ in RMP.
+%
+% \begin{macrocode}
+ \let\cite\citep
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bibsection}
+% \begin{macro}{\bibpreamble}
+% \begin{macro}{\newblock}
+% \begin{macro}{\bibhang}
+% \begin{macro}{\bibsep}
+% We define the sectioning command to use when starting the bibliography.
+%
+% \begin{macrocode}
+\def\bibsection{%
+ \let\@hangfroms@section\@hang@froms
+ \section*{\refname}%
+ \@nobreaktrue
+}%
+\let\bibpreamble\@empty
+\def\newblock{\ }%
+\bibhang10\p@
+\bibsep\z@
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\footinbib@sw}
+% Footnotes in bibliography are inconsistent with author-year
+% references, and are particularly nast under \classname{natbib}:
+% the packcage will automatically change to numbered references if
+% any \cmd\bibitem\ commands lack the optional argument.
+% Therefore, we must uninvoke it now, even if invoked by the document.
+% \begin{macrocode}
+\@ifxundefined\footinbib@sw{}{%
+ \footinbib@sw{%
+ \class@warn{%
+ Footnotes in bibliography are incompatible with RMP.^^J%
+ Undoing the footinbib option.
+ }%
+ }{}%
+}%
+\@booleanfalse\footinbib@sw
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\eprint}
+% RMP requires the \cmd\eprint\ field in the bib entry to be set off with the word ``eprint''.
+% \begin{macrocode}
+\def\eprint#1{eprint #1}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Table of Contents}
+%
+% We set up for auto-sizing of certain TOC elements.
+%
+% To do this, we override certain definitions for
+% the default TOC font (\cmd\toc@@font) and spacing (\@dotsep),
+% and define
+% formatting for the needed elements (\cmd\l@\dots).
+% Finally, we activate the autosizing by
+% assigning \cmd\toc@pre\ and \cmd\toc@post.
+%
+% \begin{macro}{\toc@@font}
+% Set the formatting characteristics of the auto-indenting part
+% of the TOC.
+% \begin{macrocode}
+\def\toc@@font{%
+ \footnotesize\rmfamily
+ \def\\{\space\ignorespaces}%
+}%
+\def\@dotsep{5.5pt}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l@section}
+% Determine which TOC elements are automatically indented.
+% \begin{macrocode}
+\def\tocleft@{\z@}%
+\def\tocdim@min{5\p@}%
+\def\l@section{%
+ \l@@sections{}{section}% Implicit #3#4
+}%
+\def\l@subsection{%
+ \l@@sections{section}{subsection}% Implicit #3#4
+}%
+\def\l@subsubsection{%
+ \l@@sections{subsection}{subsubsection}% Implicit #3#4
+}%
+%\def\l@subsubsection#1#2{}%
+\def\l@paragraph#1#2{}%
+\def\l@subparagraph#1#2{}%
+% \end{macrocode}
+% \end{macro}
+%
+% Activate the TOC processing.
+% \begin{macrocode}
+\let\toc@pre\toc@pre@auto
+\let\toc@post\toc@post@auto
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+%</rmp>
+% \end{macrocode}
+%
+%
+% \Finale
+% %Here ends the programmer's documentation.
+% \endinput
+%
+\endinput