diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/revtex/revtex4.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/revtex/revtex4.dtx | 8728 |
1 files changed, 8728 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/revtex/revtex4.dtx b/Master/texmf-dist/source/latex/revtex/revtex4.dtx new file mode 100644 index 00000000000..693747ef47f --- /dev/null +++ b/Master/texmf-dist/source/latex/revtex/revtex4.dtx @@ -0,0 +1,8728 @@ +% \iffalse +% ****** Start of file revtex4.dtx ****** % +% +% This file is part of the APS files in the REVTeX 4 distribution. +% For version number, search on the string "%FileInfo" +% +% First revision by David Carlisle, +% later versions by Arthur Ogawa. +% +% Copyright (c) 2000 The American Physical Society. +% http://publish.aps.org/revtex4/ +% mailto:revtex@aps.org +% +% +% See the REVTeX 4 README file for restrictions and more information. +% \fi +% \iffalse +%<*driver> + \ProvidesFile{revtex4.dtx} +%</driver> +%<class-pre|aps|rmp>\NeedsTeXFormat{LaTeX2e}[1996/12/01] +%<class-pre>\ProvidesClass{revtex4} +%<aps>\ProvidesFile{aps.rtx} +%<rmp>\ProvidesFile{rmp.rtx} +%<10pt>\ProvidesFile{10pt.rtx} +%<11pt>\ProvidesFile{11pt.rtx} +%<12pt>\ProvidesFile{12pt.rtx} +%<revsymb&!class-pre>\ProvidesPackage{revsymb} +%<driver>\ProvidesFile{revtex.drv} +%<*!class-pst> + [2001/08/02 v4.0 (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}\CheckSum{7177} +% +% \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 |