% \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
