diff options
Diffstat (limited to 'macros/latex/contrib/revtex/source')
-rw-r--r-- | macros/latex/contrib/revtex/source/aip4-2.dtx | 4233 | ||||
-rw-r--r-- | macros/latex/contrib/revtex/source/ltxdocext.dtx | 1259 | ||||
-rw-r--r-- | macros/latex/contrib/revtex/source/ltxfront.dtx | 3763 | ||||
-rw-r--r-- | macros/latex/contrib/revtex/source/ltxgrid.dtx | 6849 | ||||
-rw-r--r-- | macros/latex/contrib/revtex/source/ltxutil.dtx | 4461 | ||||
-rw-r--r-- | macros/latex/contrib/revtex/source/revtex-bst.dtx | 3873 | ||||
-rw-r--r-- | macros/latex/contrib/revtex/source/revtex4-2.dtx | 8384 |
7 files changed, 0 insertions, 32822 deletions
diff --git a/macros/latex/contrib/revtex/source/aip4-2.dtx b/macros/latex/contrib/revtex/source/aip4-2.dtx deleted file mode 100644 index af7c9d8a67..0000000000 --- a/macros/latex/contrib/revtex/source/aip4-2.dtx +++ /dev/null @@ -1,4233 +0,0 @@ -% \iffalse meta-comment -% aip4-2.dtx: package to change page grid, MVL. -% Copyright (c) 2019 American Institute of Physics -% mailto:tex@aip.org -% -% Disclaimer -% This file is distributed WITHOUT ANY WARRANTY; -% without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -% License -% You may distribute this file under the conditions of the -% LaTeX Project Public License 1.3c or later -% (http://www.latex-project.org/lppl.txt). -% ReadMe -% For the documentation and more detailed instructions for -% installation, typeset this document with \LaTeX. -% Maintenance Status -% This work has the LPPL maintenance status "maintained"; -% Current Maintainer of this work is Arthur Ogawa -% changes for version 4.2d--4.2f by Phelype Oleinik. -% -% Version (4.2f) -% Modified by Aptara -% -% This work consists of the main source file aip4-2.dtx -% and the derived files -% aip.rtx, aip.pdf, aip.ins, aip.drv. -% Distribution: -% CTAN:macros/latex/contrib/aip/ -% -% Unpacking: -% tex aip4-2.dtx -% -% Documentation: -% latex aip4-2.dtx; ... -% -% Programm calls to get the documentation (example): -% pdflatex aip4-2.dtx -% makeindex -s gind.ist aip -% makeindex -s gglo.ist -o aip.gls aip.glo -% pdflatex aip4-2.dtx -% makeindex -s gind.ist aip -% pdflatex aip4-2.dtx -% -% Installation: -% TDS:bibtex/bst/aip/ -% TDS:doc/latex/aip/ -% TDS:source/latex/aip/ -% TDS:tex/latex/aip/ -% -% Thanks, Heiko! -% This method of letting a single .dtx file serve as both -% documentation (via latex) and installer (via tex) follows -% the example of Heiko Oberdiek. Thanks! -%<*ignore> -\begingroup - \def\x{LaTeX2e}% -\expandafter\endgroup -\ifcase - 0\expandafter\ifx\csname processbatchFile\endcsname\relax\else1\fi\ifx\fmtname\x\else 1\fi - \relax -\else - \csname fi\endcsname -%</ignore> -%<*install> -%% This file will generate documentation and runtime files -%% from aip4-2.dtx when run through LaTeX or TeX. -%% 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 is a generated file; -altering it directly is inadvisable; -instead, modify the original source file. -See the URL in the file README-AIP. - -Copyright (c) 2019--2022 American Institute of Physics. -mailto:tex@aip.org - -Maintained by Arthur Ogawa (mailto:arthur_ogawa at sbcglobal.net) -under contract to American Institute of Physics - -Version (4.2c) -Modified by Aptara -under contract to American Institute of Physics - -Version (4.2d--4.2f) -Modified by Phelype Oleinik for the American Physical Society (mailto:phelype.oleinik at latex-project.org) - -License - You may distribute this file under the conditions of the - LaTeX Project Public License 1.3c or later - (http://www.latex-project.org/lppl.txt). - - This file is distributed WITHOUT ANY WARRANTY; - without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. - -\endpreamble -\askforoverwritefalse -\keepsilent - \generate{% - %{ignore} -% \file{aip.ins}{\from{aip4-2.dtx}{install}}% -% \file{aip.drv}{\from{aip4-2.dtx}{driver}}% -% \usedir{tex/latex/aip}% - \file{aip4-2.rtx}{\from{aip4-2.dtx}{package}}% - \file{aapm4-2.rtx}{\from{aip4-2.dtx}{aapm}}% - \file{sor4-2.rtx}{\from{aip4-2.dtx}{sor}}% - }% -\ifToplevel{ -\Msg{***********************************************************} -\Msg{*} -\Msg{* To finish the installation, please move} -\Msg{* aip.rtx} -\Msg{* into a directory searched by TeX;} -\Msg{* in a TDS-compliant installation:} -\Msg{* texmf/tex/macros/latex/aip/.} -\Msg{*} -\Msg{* To produce the documentation, - run aip4-2.dtx through LaTeX.} -\Msg{*} -\Msg{* Happy TeXing} -\Msg{***********************************************************} -} -\endbatchfile -%</install> -%<*ignore> -\fi -%</ignore> -% \fi -% -% \GetFileInfo{aip4-2.dtx} -%% \CharacterTable -%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z -%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z -%% Digits \0\1\2\3\4\5\6\7\8\9 -%% Exclamation \! Double quote \" Hash (number) \# -%% Dollar \$ Percent \% Ampersand \& -%% Acute accent \' Left paren \( Right paren \) -%% Asterisk \* Plus \+ Comma \, -%% Minus \- Point \. Solidus \/ -%% Colon \: Semicolon \; Less than \< -%% Equals \= Greater than \> Question mark \? -%% Commercial at \@ Left bracket \[ Backslash \\ -%% Right bracket \] Circumflex \^ Underscore \_ -%% Grave accent \` Left brace \{ Vertical bar \| -%% Right brace \} Tilde \~} -%% -% -% \StopEventually{} -% \iffalse ltxdoc klootch -%<*package> -%%% @LaTeX-file{ -%%% filename = "aip4-2.dtx", -%%% version = "4.2f", -%%% date = "2022/06/05", -%%% author = "Arthur Ogawa (mailto:arthur_ogawa at sbcglobal.net), -%%% Phelype Oleinik (mailto:phelype.oleinik at latex-project.org), -%%% commissioned by the American Institute of Physics. -%%% ", -%%% copyright = "Copyright (C) 2019--2022 American Institute of Physics, -%%% distributed under the terms of the -%%% LaTeX Project Public License 1.3c, see -%%% ftp://ctan.tug.org/macros/latex/base/lppl.txt -%%% ", -%%% address = "AIP Journal Program -%%% American Institute of Physics, -%%% Suite 1NO1, 2 Huntington Quadrangle, -%%% Melville, NY 11747 USA", -%%% telephone = "", -%%% FAX = "", -%%% email = "mailto colon tex at aip.org", -%%% codetable = "ISO/ASCII", -%%% keywords = "latex, page grid, main vertical list", -%%% supported = "yes", -%%% abstract = "aip substyle for REVTeX", -%%% } -%</package> -% \fi -% -% \iffalse ltxdoc klootch -% The following references the \file{README-AIP} file, -% which contains basic information about this package. -% The contents of this file are generated when -% you typeset the programmer's documentation. -% Search on "{filecontents*}{README-AIP}" to locate it. -% \fi\input{README-AIP}% -% -% \subsection{Bill of Materials} -% -% Following is a list of the files in this distribution arranged -% according to provenance. -% -% \subsubsection{Primary Source}% -% One single file generates all. -%\begin{verbatim} -%aip4-2.dtx -%\end{verbatim} -% -% \subsubsection{Generated by \texttt{latex aip4-2.dtx}}% -% Typesetting the source file under \LaTeX\ -% generates the readme and the installer. -%\begin{verbatim} -%README aip.ins -%\end{verbatim} -% -% \subsubsection{Generated by \texttt{tex aip4-2.dtx}}% -% Typesetting the installer generates -% the package files. -%\begin{verbatim} -%aip.rtx -%\end{verbatim} -% -% \subsubsection{Documentation}% -% The following are the online documentation: -% \begin{verbatim} -%aip.pdf -% \end{verbatim} -% -% \subsubsection{Auxiliary}% -% The following are auxiliary files generated -% in the course of running \LaTeX: -% \begin{verbatim} -%aip.aux aip.idx aip.ind aip.log aip.toc -% \end{verbatim} -% -% \section{Code common to all modules}% -% -% The following may look a bit klootchy, but we -% want to require only one place in this file -% where the version number is stated, -% and we also want to ensure that the version -% number is embedded into every generated file. -% -% Now we declare that -% these files can only be used with \LaTeXe. -% An appropriate message is displayed if -% a different \TeX{} format is used. -% \begin{macrocode} -%<*driver|package|aapm|sor> -\NeedsTeXFormat{LaTeX2e}[1996/12/01]% -%</driver|package|aapm|sor> -% \end{macrocode} -% As desired, the following modules all -% take common version information: -% \begin{macrocode} -%<package>\ProvidesFile{aip4-2.rtx}% -%<aapm>\ProvidesFile{aapm4-2.rtx}% -%<sor>\ProvidesFile{sor4-2.rtx}% -%<*driver> -\expandafter\ProvidesFile\expandafter{\jobname.dtx}% -%</driver> -% \end{macrocode} -% -% The following line contains, for once and for all, -% the version and date information. -% By various means, this information is reproduced -% consistently in all generated files and in the -% typeset documentation. -% \begin{macrocode} -%<*driver|package> -%<version> - [2022/06/05 4.2f AIP substyle for REVTeX]% \fileversion -%</driver|package> -% \end{macrocode} -% -% -% \section{The driver module \texttt{driver}} -% -% This module, consisting of the present section, -% typesets the programmer's documentation, -% generating the \file{.ins} installer and \file{README-AIP} as required. -% -% Because the only uncommented-out lines of code at the beginning of -% this file constitute the \file{driver} module itself, -% we can simply typeset the \file{.dtx} file directly, -% and there is thus rarely any need to -% generate the ``driver'' {\sc docstrip} module. -% Module delimiters are nonetheless required so that -% this code does not find its way into the other modules. -% -% The \enve{document} command concludes the typesetting run. -% -% \begin{macrocode} -%<*driver> -% \end{macrocode} -% -% \subsection{The Preamble} -% The programmers documentation is formatted -% with the \classname{ltxdoc} class with local customizations, -% and with the usual code line indexing. -% \begin{macrocode} -\documentclass{ltxdoc} -\RequirePackage{ltxdocext}% -\let\url\undefined -\RequirePackage[colorlinks=true,linkcolor=blue]{hyperref}% -\gdef\lquote{`}\gdef\rquote{'}% -\CodelineIndex\EnableCrossrefs % makeindex -s gind.ist aip -\RecordChanges % makeindex -s gglo.ist -o aip.gls aip.glo -% \end{macrocode} -% -% \subsubsection{Docstrip and info directives} -% We use so many {\sc docstrip} modules that we set the -% \texttt{StandardModuleDepth} counter to 1. -% \begin{macrocode} -\setcounter{StandardModuleDepth}{1} -% \end{macrocode} -% The following command retrieves the date and version information -% from this file. -% \begin{macrocode} -\expandafter\GetFileInfo\expandafter{\jobname.dtx}% -% \end{macrocode} -% -% \subsection{The ``Read Me'' File} -% As promised above, here is the contents of the -% ``Read Me'' file. That file serves a double purpose, -% since it also constitutes the beginining of the -% programmer's documentation. What better thing, after -% all, to have appear at the beginning of the -% typeset documentation? -% -% A good discussion of how to write a ReadMe file can be found in -% Engst, Tonya, ``Writing a ReadMe File? Read This'' -% \emph{MacTech} October 1998, p. 58. -% -% Note the appearance of the -% \cmd\StopEventually\ command, which marks the -% dividing line between the user documentation -% and the programmer documentation. -% -% The usual user will not be asked to -% do a full build, not to speak -% of the bootstrap. -% Instructions for carrying these processes -% begin the programmer's manual. -% -%\changes{4.1b}{2008/08/06}{Beta candidate b} -% \begin{macrocode} -\begin{filecontents*}{README-AIP} -\title{% - The \classname{aip} substyle for REV\TeX% - \protect\thanks{% - \fileversion\ \copyright 2009 American Institute of Physics - % For version number and date, - % search on "\fileversion" in the .dtx file, - % or see the end of the README file. - }% -}% - -\author{% -Arthur Ogawa\thanks{mailto:arthur\_ogawa at sbcglobal.net}% -}% -\date{Version \fileversion, dated \filedate}% -\maketitle - -This file embodies the implementation of the -AIP journal substyles for APS's \revtex\ 4.2 document class -for electronic submissions to AIP journals. - -The distribution point for this work is -\url{http://publishing.aip.org/authors/preparing-your-manuscript}. -The archive contains ready-to-Install files, documentation, and full source. - -This package is also distributed via CTAN: -\url{http://www.ctan.org/pub/tex-archive/macros/latex/contrib/aip}, and as a ready-to-install image as -\url{http://www.ctan.org/pub/tex-archive/install/macros/latex/contrib/aip.tds.zip}. - -The \classname{aip} package was commissioned by the American Institute of Physics -and is distributed under the terms of the \LaTeX\ Project Public License, -the same license under which all the portions of \LaTeX\ itself is distributed. -Please see \url{http://ctan.tug.org/macros/latex/base/lppl.txt} for details. - -To use this document class, you must have a working -\TeX\ installation equipped with \LaTeXe\ -and possibly pdftex and Adobe Acrobat Reader or equivalent. - -To install, retrieve the distribution, -unpack it into a directory on the target computer, -and move the file \file{aip.rtx} -into a location in your filesystem where it will be found by \LaTeX. - -To use, read the user documentation \file{auguide.pdf}. - -\tableofcontents - -\section{Overview}% -\revtex\ is a \LaTeXe\ document class, somewhat like a hybrid of -the standard \LaTeX\ \classname{book} and \classname{article} classes. - -This document class implements the AIP society and journal substyles: -the journals represent a set of mutually exclusive class options that, in this case, allow the -document class to address multiple journals within the AIP family. -This society is obtained with class option \classoption{aip}. - -\section{Processing Instructions} - -The package file \file{aip.rtx} -is generated from this file, \file{aip4-2.dtx}, -using the {\sc docstrip} facility of \LaTeX -via |tex aip4-2.dtx|. -The typeset documentation that you are now reading is generated from -the same file by typesetting it with \LaTeX\ or pdftex -via |latex aip4-2.dtx| or |pdflatex aip4-2.dtx|. - -\subsection{Build Instructions} - -You may bootstrap this suite of files solely from \file{aip4-2.dtx}. -Prepare by installing \LaTeXe\ (and either tex or pdftex) on your computer, -then carry out the following steps: -\begin{enumerate} -\item -Within an otherwise empty directory, -typeset \file{aip4-2.dtx} with \LaTeX\ or pdflatex; -you will obtain the typeset documentation you are now reading, -along with -the installer \file{aip.ins}, -and the file \file{README-AIP}. - -Note: you will have to run \LaTeX\ twice, then \file{makeindex}, then -\LaTeX\ again in order to obtain a valid index and table of contents. -\item -Now typeset \file{aip4-2.dtx} with \TeX (not \LaTeX), -thereby generating the package file \file{aip.rtx}. -\item -Install \classname{aip.rtx} -by moving it to a location -in your filesystem where it will be found by \LaTeX, -like \file{tex/latex/aip}. -\item -Install \classname{aip.pdf} -by moving it to -\file{doc/latex/aip}. -\item -Using the \file{.dbj} information herein, -generate the needed \file{.bst} files and install them in -\file{bibtex/bst/aip}. -\end{enumerate} -\end{filecontents*} -% \end{macrocode} -% -% \subsection{The Document Body} -% -% Here is the document body, containing only a -% \cmd\DocInput\ directive---referring to this very file. -% This very cute self-reference is a common \classname{ltxdoc} idiom. -% \begin{macrocode} -\begin{document}% -\newcommand\revtex{REV\TeX}% -\expandafter\DocInput\expandafter{\jobname.dtx}% -% ^^A\PrintChanges -\end{document} -% \end{macrocode} -% -% \begin{macrocode} -%</driver> -% \end{macrocode} -% -% \section{AIP: A set of journal-specifc extensions to \revtex} -% -% To create a journal substyle, you create -% a \file{.rtx} file, in our case \file{aip.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 JMP looks like: -% \begin{verbatim} -% \@ifx{\@journal\journal@jmp}{% -% <code specific to the JMP> -% }{}% -% \end{verbatim} -% -% \section{The \classoption{aip} class option: the \texttt{aip} module} -% The file \file{aip.rtx} is read in by the \classname{revtex4} document class -% if \cmd\@society\ has the value \classoption{aip}. -% -% Here, code specific to AIP journals appears. -% -% We first give some text entities (amounting to journal abbreviations), -% then some AIP-specific initialisations, -% then code for particular AIP 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. -% Note 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} -%<*package> -% \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 - \class@info{RevTeX society AIP selected}% -% \end{macrocode} -% -% \subsection{Substyle Options}% -% -% Here are the class options relating to the AIP: -% \begin{macrocode} -\DeclareOption{jcp}{\change@journal{jcp}}% -\DeclareOption{pop}{\change@journal{pop}}% -\DeclareOption{rsi}{\change@journal{rsi}}% -\DeclareOption{jap}{\change@journal{jap}}% -\DeclareOption{apl}{\change@journal{apl}}% -\DeclareOption{apm}{\change@journal{apm}}% -\DeclareOption{cha}{\change@journal{cha}}% -\DeclareOption{pof}{\change@journal{pof}}% -\DeclareOption{bmf}{\change@journal{bmf}}% -\DeclareOption{rse}{\change@journal{rse}}% -\DeclareOption{jmp}{\change@journal{jmp}}% -\DeclareOption{adv}{\change@journal{adv}}% -\DeclareOption{sd}{\change@journal{sd}}% -\DeclareOption{jor}{\change@journal{jor}}% -\DeclareOption{cp}{\change@journal{cp}}% -% \end{macrocode} -% -% \subsection{Abbreviations}% -% \changes{4.1p}{2010/02/24}{(AO, 584) Per MD, remove trailing space character from each journal abbreviation: it had caused an extraneous space in the .bbl} -% The following macros constitute typing shortcuts for -% certain journal names. -% \begin{macrocode} -\def\adv{AIP Advances}% -\def\ao{Appl.\ Opt.}% -\def\ap{Appl.\ Phys.}% -\def\apl{Appl.\ Phys.\ Lett.}% -\def\apm{Appl.\ Phys.\ Lett.\ Mater.}% -\def\apj{Astrophys.\ J.}% -\def\bell{Bell Syst.\ Tech.\ J.}% -\def\bmf{Biomicrofluidics}% -\def\cha{Chaos}% -\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\jap{J.\ Appl.\ Phys.}% -\def\jmp{J.\ Math.\ 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\jpr{J.\ Phys.\ Chem.\ Ref.\ Data}% -\def\ltp{Low.\ Temp.\ Phys.}% -\def\nat{Nature (London)}% -\def\oc{Opt.\ Commun.}% -\def\ol{Opt.\ Lett.}% -\def\pl{Phys.\ Lett.}% -\def\pop{Phys.\ Plasmas}% -\def\pof{Phys.\ Fluids}% -\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\rsi{Rev.\ Sci.\ Instrum.}% -\def\rse{J.\ Renewable Sustainable Energy}% -\def\pspie{Proc.\ Soc.\ Photo-Opt.\ Instrum.\ Eng.}% -\def\sjqe{Sov.\ J.\ Quantum Electron.}% -\def\vr{Vision Res.}% -\def\sd{Structural\ Dynamics}% -\def\jor{J.\ Rheol.}% -\def\cp{AIP\ Conference\ Proceedings}% -% \end{macrocode} -% -% Option allowing for ``numerical author-year'' bibliography. -% \begin{macrocode} -\DeclareOption{author-numerical}{% - \@booleantrue\authoryear@sw - \@booleantrue\authornum@sw -}% -% \end{macrocode} -% -% Optionally allow article title in bibliography entries. -% A new switch is defined here: \cmd\aip@jtitx@sw\ signifies that -% the numbered style bibliography is to be prepared without article titles in @ARTICLE entries. -% Otherwise, such titles are incorporated if present in the \file{.bib} entry. -% By default, exclude the article titles. -% \begin{macrocode} -\DeclareOption{article-title}{% - \@booleanfalse\aip@jtitx@sw -}% -\@booleantrue \aip@jtitx@sw -% \end{macrocode} -% -% Establish default options for this society. -% -% \begin{macrocode} -\@booleanfalse\authoryear@sw -\@booleanfalse\authornum@sw -\@booleanfalse\onecolumn@sw -\@booleanfalse\newonecolumn@sw -% \end{macrocode} -% -% \begin{macro}{\@bibdataout@init} -% \begin{macro}{\@bibdataout@aip} -% \changes{4.1o}{2010/02/12}{(AO, 580) Control .bst at run time.}% -% Procedure \cmd\@bibdataout@aip\ has the job of writing the control record into the -% job's \cmd\jobname\filename{.bib} file, where it will adjust the options to \filename{.bst} processing. -% It is installed into the initialization procedure \cmd\@bibdataout@init, and its meaning -% is set by the society (AIP) and journal. -% -% \begin{macrocode} -\appdef\@bibdataout@rev{\@bibdataout@aip}% -\def\@bibdataout@aip{% - \immediate\write\@bibdataout{% -% \end{macrocode} -% An entry that controls processing of the \filename{.bst} file has entry type \texttt{@CONTROL}. -% \begin{macrocode} - @CONTROL{% - aip41Control% -% \end{macrocode} -% Say whether we want long bibliography style (the default), or the abbreviated style. -% \begin{macrocode} - \longbibliography@sw{\true@sw}{\aip@jtitx@sw{\false@sw}{\true@sw}}% - {% - ,pages="1",title="0"% - }{% - ,pages="0",title=""% - }% - }% - }% -% \end{macrocode} -% Place a \cmd\citation\ into the auxiliary file corresponding to this entry. -% \begin{macrocode} - \if@filesw - \immediate\write\@auxout{\string\citation{aip41Control}}% - \fi -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% For AIP, the preprint style \classoption{preprint} is the default. -% \begin{macrocode} -\@booleantrue\preprintsty@sw -% \end{macrocode} -% -% \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} -\@booleantrue\showPACS@sw -\@booleantrue\showKEYS@sw -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\refname} -% -% In reprint style only, we eliminate the head above the bibliography. -% \begin{macrocode} -% TeXSupport -\let\old@refname\refname -\appdef\setup@hook{% - \preprintsty@sw{}{% - \let\refname\@empty - }% -}% -% \end{macrocode} -% \end{macro} -% -% \subsection{AIP Setup}% -% Here we define the default procedures for AIP journals. -% Individual AIP journals may override these definitions. -% -% \subsubsection{Running header and footer}% -% -% Page style for all AIP journals. -% 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. -%FIXME: \cmd\preprintsty@sw\ is defined? -% \begin{macrocode} -\appdef\setup@hook{% - \preprintsty@sw{% - \ps@preprint - }{% - \ps@article - }% -}% -% \end{macrocode} -% -% The spc says: ``Running title must be provided on title page'', -% and that journal classes 1b and 2 have no running title. -% \begin{macrocode} -\def\ps@preprint{% - \def\@oddhead{\@runningtitle\hfil}% - \def\@evenhead{\@runningtitle\hfil}% - \def\@oddfoot{\hfil\thepage\quad\checkindate\hfil}% - \def\@evenfoot{\hfil\thepage\quad\checkindate\hfil}% - \let\@mkboth\@gobbletwo - \let\sectionmark\@gobble - \let\subsectionmark\@gobble -}% -\def\ps@article{% - \def\@evenhead{\let\\\heading@cr\thepage\quad\checkindate\hfil\@runningtitle}% - \def\@oddhead{\let\\\heading@cr\@runningtitle\hfil\checkindate\quad\thepage}% - \def\@oddfoot{}% - \def\@evenfoot{}% - \let\@mkboth\@gobbletwo - \let\sectionmark\@gobble - \let\subsectionmark\@gobble -}% -\def\@runningtitle{\@shorttitle}% -% \end{macrocode} -% -% \subsubsection{Title block}% -% -% The specifics of the title block. -% Apply to all AIP journals; individual journals may override these settings. -% -% \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}{\@fnsymbol} -% On the title page, footnotes are lettered with right parenthesis: ``a)''. -% \begin{macrocode} -\let\@fnsymbol@latex\@fnsymbol -\let\@fnsymbol\@alph -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\adjust@abstractwidth} -% This procedure is used by many titlepage elements to indent on the left by a particular -% amount. The author list uses \cmd\frontmatter@authorformat\ to accomplish the same. -% \begin{macrocode} -\def\adjust@abstractwidth{% - \parindent1em\relax - \advance\leftskip.5in\relax - \@totalleftmargin\leftskip - \@afterheading\@afterindentfalse -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\frontmatter@abstractheading} -% AIP Journals all set the abstract head the same way, with no head. -% \begin{macrocode} -\def\frontmatter@abstractheading{}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\frontmatter@abstractfont} -% All AIP journals set the abstract body the same way. -% \begin{macrocode} -\def\frontmatter@abstractfont{% -%\small - \adjust@abstractwidth -}% -% \end{macrocode} -% \end{macro} -% -% All AIP journal preprints use separate titlepage and full-width abstract. -% \begin{macrocode} -\appdef\setup@hook{% - \preprintsty@sw{% - \@booleantrue\titlepage@sw -% \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 AIP 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@@indent{% - \skip@\@flushglue - \@flushglue\z@ plus.3\hsize\relax - \raggedright - \advance\leftskip.5in\relax - \@totalleftmargin\leftskip - \@flushglue\skip@ -}% -\def\frontmatter@authorformat{% - \frontmatter@@indent - \sffamily -%\advance\baselineskip\p@ -%\parskip11.5\p@\relax -}% -\renewcommand*\email[1][Electronic mail: ]{\begingroup\sanitize@url\@email{#1}}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\frontmatter@above@affilgroup} -% The default amount of space above affiliation. -% \begin{macrocode} -\def\frontmatter@above@affilgroup{% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\frontmatter@above@affiliation} -% \begin{macro}{\frontmatter@above@affiliation@script} -% The default amount of space above affiliation. -% \begin{macrocode} -\def\frontmatter@above@affiliation@script{% - \frontmatter@@indent -%\addvspace{3.5\p@}% -}% -\def\frontmatter@above@affiliation{% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\frontmatter@affiliationfont} -% All AIP journals set the affiliation the same. -% Like the author, but in italic. -% \begin{macrocode} -\def\frontmatter@affiliationfont{% - \frontmatter@@indent - \preprintsty@sw{}{\small}% - \it -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\frontmatter@collaboration@above} -% \begin{macrocode} -\def\frontmatter@collaboration@above{% -}% -% \end{macrocode} -% \end{macro} -% -% Set up the default AIP style for title block authors and affiliations. -% -% \begin{macro}{\frontmatter@setup} -% All AIP 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 AIP journals set the article title 12 point Times Roman, bold, flush left. -% -% \begin{macrocode} -\def\frontmatter@title@above{\addvspace{6\p@}}% -\def\frontmatter@title@format{% - \preprintsty@sw{}{\Large}% - \sffamily - \bfseries - \raggedright - \parskip\z@skip -}% -\def\frontmatter@title@below{\addvspace{3\p@}}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\frontmatter@makefnmark} -% All AIP journals share this procedure for setting the titlepage footnote text: -% superior lowercase letter, with right parenthesis. -% \begin{macrocode} -\def\@author@parskip{3\p@}% -\@booleantrue\altaffilletter@sw -\def\frontmatter@makefnmark{% - \@textsuperscript{% - \normalfont\@thefnmark%( - )% - }% -}% -\def\frontmatter@authorbelow{% - \addvspace{3\p@}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\affil@cutoff} -% We override \cmd\affil@cutoff\ to enforce the rule that, -% if a single affiliation appears on the title page, then -% no affiliation superscript at all is produced. -% \begin{macrocode} -\let\affil@cutoff\tw@ -% \end{macrocode} -% De awa. -% \end{macro} -% -% \begin{macro}{\frontmatter@RRAP@format} -% All AIP 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{% - \addvspace{5\p@}% - \small - \raggedright - \advance\leftskip.5in\relax - \@totalleftmargin\leftskip -% \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 - \parskip\z@skip - \samepage -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\frontmatter@keys@format} -% -% \begin{macrocode} -\def\frontmatter@keys@format{% -% \footnotesize - \adjust@abstractwidth - \samepage -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ps@titlepage} -% Title page style. Currently empty except for preprint header, -% which consists of all the \cmd\preprint\ arguments, -% stacked flush right at the right margin. -% \begin{macrocode} -\def\ps@titlepage{% - \def\@oddhead{% - \@runningtitle - \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 and AIP}{}}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\produce@preprints} -% \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{Lead-in paragraph}% -% -% The \env{Lead-in paragraph} environment formats the AIP ``lead paragraph''. -% To avoid introducing new syntax, we take over the \env{quotation} environment -% until the first \cmd\section\ (or other sectioning command) appears. -% -% \begin{macrocode} -\newenvironment{Lead@inParagraph}{% - \par - \bfseries - \@afterheading\@afterindentfalse -}{% - \par - \hb@xt@\hsize{\hfil\leaders\hrule\hfil\leaders\hrule\hfil\hfil}% -}% -% \end{macrocode} -% At the beginning of the document temporarily change the meaning of -% the \env{quotation} environment, restoring it once the first sectioning -% command is given. -% \begin{macrocode} -\appdef\frontmatter@init{% - \let@environment{quotation@ltx}{quotation}% - \let@environment{quotation}{Lead@inParagraph}% -}% -\appdef\@startsection@hook{% - \let@environment{quotation}{quotation@ltx}% -}% -% \end{macrocode} -% -% \subsubsection{Stacked Heads}% -% All AIP 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 - \sffamily - \bfseries - \raggedright - }% -}% -\def\@hangfrom@section#1#2#3{\@hangfrom{#1#2}\MakeTextUppercase{#3}}% -\def\@hangfroms@section#1#2{#1\MakeTextUppercase{#2}}% -% \end{macrocode} -% -% See, e.g., BMF\_044101\_1 (1) or BMF\_044103\_1 (1) -% \begin{macrocode} -\def\subsection{% - \@startsection - {subsection}% - {2}% - {\z@}% - {.8cm \@plus1ex \@minus .2ex}% - {.5cm}% - {% - \normalfont - \small - \sffamily - \bfseries - \raggedright - }% -}% -% \end{macrocode} -% -% See, e.g., BMF\_044104\_1 (1), JMP\_123520\_1 (48), -% \begin{macrocode} -\def\subsubsection{% - \@startsection - {subsubsection}% - {3}% - {\z@}% - {.8cm \@plus1ex \@minus .2ex}% - {.5cm}% - {% - \normalfont - \small - \sffamily - \bfseries - \itshape - \raggedright - }% -}% -% \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 - \bfseries - \raggedright - }% -}% -%\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 - \bfseries - \raggedright - }% -}% -% \end{macrocode} -% \begin{macrocode} -\def\subsubsection@preprintsty{% - \@startsection - {subsubsection}% - {3}% - {\z@}% - {.8cm \@plus1ex \@minus .2ex}% - {.5cm}% - {% - \normalfont -% \small - \itshape\bfseries - \raggedright - }% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% For examples of -% \env{theorem}, \env{proposition}, \env{lemma}, \env{remark}, \env{corollary}, \env{example}, -% and \env{proof} (with optional title), -% using independent numbering for each class, -% and with numbered and roman lists therein, -% see JMP\_122901\_1 (48). -% -% For theorems, etc, numbered by section, (and with theorems in the appendix) -% but equations numbered throughout, -% see JMP\_123301\_1 (48). -% -% For a (roman) list in text, theorem, and proof, -% see JMP\_123514\_1 (48). -% -% For numbered list in text, -% and equations numbered by section, -% see JMP\_123518\_1 (48). -% -% All AIP journals use frontmatter footnotes by default. -% \begin{macrocode} -\let\frontmatter@footnote@produce\frontmatter@footnote@produce@footnote -% \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{2} -\def\ltxu@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 AIP journal styles have flush bottoms. -% -% \begin{macrocode} -\@booleanfalse\raggedcolumn@sw -% \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 AIP 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 AIP journals. -% \begin{macro}{\@makefntext} -% \begin{macrocode} -\def\@makefntext#1{% - \def\baselinestretch{1}% - \leftskip1em% - \parindent1em% - \noindent - \nobreak\hskip-\leftskip - \hb@xt@\leftskip{% - \hss\@makefnmark\ % - }% - #1% - \par -}% -% \end{macrocode} -% \end{macro} -% -% -% \subsubsection{Appendix}% -% \begin{macro}{\appendix} -% \begin{macro}{\@hangfrom@appendix} -% \begin{macro}{\@hangfroms@appendix} -% \begin{macro}{\@appendixcntformat} -% \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 the \revtex\ for the AIP society. -% this task requires three components: -% the \BibTeX\ \file{aipnum.bst} and \file{aipauth.bst} style files, -% customizing code for \file{natbib}, and -% customizations of the \env{thebibliography} environment. -% -% \begin{macro}{\@bibstyle} -% Define the argument of the \cmd\bibliographystyle\ command. -% 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 AIP journal substyles are \file{aipnum.bst} and \file{aipauth.bst}. -% To generate them, use \classname{custom-bib} version 4.21 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{aipnum.dbj} file equivalent to the following should result: -% \begin{verbatim} -%\input docstrip -%\preamble -%---------------------------------------- -%*** REVTeX-compatible aipnum4-1.bst 2009-10-08 *** -%\endpreamble -%\postamble -%End of customized bst file -%\endpostamble -%\keepsilent -%\askforoverwritefalse -%\def\MBopts{\from{merlin.mbs}{% -% head,\MBopta} -%\from{physjour.mbs}{\MBopta} -%\from{geojour.mbs}{\MBopta} -%\from{photjour.mbs}{\MBopta} -%\from{merlin.mbs}{tail,\MBopta}} -%\def\MBopta{% -% lang,%: Use language field to switch hyphenation patterns for title -% pres,pres-bf,%: Presentation, speaker bold face -% seq-no,%: Citation order (unsorted, like unsrt.bst) -% vonx,%: Sort without von part (de la Maire after Mahone) -% nm-init,ed-au,%: Initials + surname (J. F. Smith) -% 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) -% and-rm,%: Cited `and' in normal font -% yr-par,%: Date in parentheses as (May 1993) -% date-nil-x,%: If date is empty, then do not produce the surrounding punctuation (parens, brackets, colon, comma) -% tit-qq,%: Title and punctuation in double quotes (``Title,'' ..) -% inproceedings-chapter,%: produce pages after chapter, just as in InBook -% jtit-x,%: Title is ignored -% inproceedings-chapter,%: produce pages after chapter just as in InBook -% article-booktitle,%: format booktitle -% article-series,%: article can has series -% jttl-rm,%: Journal name normal font -% journal-address,%: Include address field (in parentheses) along with journal name -% book-bt,%: Field `booktitle', or if absent field `title', is book title -% thesis-title-o,%: Title is optional: no warning issued if empty -% techreport-institution-par,%: format tech report institution like book publisher -% vol-bf,%: Volume bold as {\bf vol}(num) -% vnum-x,%: Journal vol, without number as 34 -% volp-com,%: Volume with comma as vol(num), ppp -% jpg-1,%: Only start page number -% book-editor-booktitle,%: Book permits empty author, produces title before editor in this case -% inbook-editor-booktitle,%: Allow using both title/booktitle, both author/editor -% bookaddress,%: Italic booktitle followed by bookaddress in roman -% num-xser,%: Allows number without series and suppresses word "number" -% number-cap,%: Capitalize word `number' as: "Number 123" -% chapter-cap,%: Capitalize word `chapter' as: `Chapter 42' -% series-number,%: Series number as: `Springer Lecture Notes No. 125' -% numser-booktitle,%: After book title and conference address, and before editors -% ser-vol,%: Series, vol. 23 -% ser-rm,%: format series roman , even when used with volume -% volume-cap,%: Capitalize word `volume', as: `Volume 7 in Lecture Series' -% ser-ed,%: Series and volume after booktitle and before editors -% jnm-x,%: Space after journal name -% pg-bk,book-chapter-pages,%: As chapter and page: chapter 42, page 345 -% pub-date,%: Publisher with address and date in parentheses (Oxford, 1994) -% ay-empty-pub-parens-x,%: eliminate parentheses altogether if nothing inside -% pre-pub,%: Publisher before volume, chapter, pages -% pre-edn,%: Edition before publisher -% pre-pub,pre-edn,%: Edition, publisher, volume, chapter, pages -% isbn,%: Include ISBN for books, booklets, etc. -% issn,%: Include ISSN for periodicals -% doi-link,doi,%: Doi forms a link to the publication, anchored to the volume or title -% edby,%: In booktitle, edited by .. (where .. is names) -% blk-com,%: Comma between blocks -% fin-endbibitem,%: Command at end instead of period -% 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,translation,%: Include REVTeX data fields collaboration, eid, eprint, archive, url, translation -% SLACcitation,%: Produce SLACcitation field -% numpages-x,%: Do not include numpages field -% url,url-prefix-x,%: URL without prefix (default: `URL ') -% bibinfo,%: Reference component tags like \bibinfo in the content of \bibitem -% bibfield,%: Element tags like \bibfield in the content of \bibitem -% nfss,%: Use LaTeX commands which may not work with Plain TeX -%,{% -% }} -%\generate{\file{aipnum4-1.bst}{\MBopts}} -%\endbatchfile -% \end{verbatim} -% -% Between the two files \file{aipnum.dbj} and \file{aipauth.dbj}, -% the differences are limited: -% \file{aipnum.dbj} has two lines lacking in \file{aipauth.dbj}: -% \begin{verbatim} -% seq-no,%: Citation order (unsorted, like unsrt.bst) -% nm-init,ed-au,%: Initials + surname (J. F. Smith) -% \end{verbatim} -% thus, the ``numbered citation'' bibliography is sorted by citation order, and -% the names are give first inital, then last name. -% -% Likewise, \file{aipauth.dbj} has one line lacking in \file{aipnum.dbj}: -% \begin{verbatim} -% nm-rev,%: Surname + comma + initials (Smith, J. F.) -% \end{verbatim} -% Thus, the ``author-year'' bibliography is sorted by author name, and -% names are given last name first, followed by initials. -% -% We ensure that the journal substyle has the first word -% in the matter by installing the (default) AIP code -% later on (see Section~\ref{sec:aip-defaults}). -% \end{macro} -% -% \begin{macro}{\pre@bibdata} -% -% Set up to write endnotes to a .bib file; its data will be incorporated into the bibliography. -% \begin{macrocode} - \def\pre@bibdata{\jobname\bibdata@app}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bibsection} -% We define the sectioning command to use when starting the bibliography -% (we use \cmd\refname). -% \begin{macrocode} -\def\refname{References}% -\def\rtx@bibsection{% - \@ifx@empty\refname{% - \par\vspace{6\p@ plus 6\p@}% - }{% -% \end{macrocode} -% The following line has been commented out: -% \begin{verbatim} -% \let\@hangfroms@section\@hang@froms -% \end{verbatim} -% \begin{macrocode} - \expandafter\section\expandafter*\expandafter{\refname}% - \@nobreaktrue - }% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bibpreamble} -% \begin{macro}{\bibsep} -% \begin{macro}{\newblock} -% \begin{macrocode} -\let\bibpreamble\@empty -\appdef\setup@hook{% - \bibsep\z@\relax -}% -\def\newblock{\ }% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\bibfont} -% We define the font switch that applies to the body of the bibliography. -% -% \begin{macrocode} -\appdef\setup@hook{% - \def\bibfont{% - \preprintsty@sw{}{\footnotesize}% - \@clubpenalty\clubpenalty - \labelsep\z@ - }% -}% -\let\place@bibnumber\place@bibnumber@sup -% \end{macrocode} -% \end{macro} -% -% -% \subsubsection{Index}% -% \begin{macrocode} -\newenvironment{theindex}{% - \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 - \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} -% -% -% \subsubsection{Typesize Processing}% -% The formatting specification for the preprint option is: -% Times Roman 12 pt, double spacing, with 1-inch margins on letter paper. -% Paragraphs indented ``five spaces''. -% Display math on standard indent, with equation number flush right in parenthesis, with subequations roman. -% -% That for reprint option is to format similar to the printed journal; with most journals -% set (approximately analyzed) 10-point, 2-column grid, letter paper. -% \begin{macrocode} -\expandafter\def\csname rtx@aip10pt\endcsname{% - \let\@currname@class\@currname - \def\@currname{aps10pt\substyle@post}% - \class@info{Reading file \@currname.\substyle@ext}% - \input{\@currname.\substyle@ext}% - \let\@currname\@currname@class - \class@info{Overriding 10pt}% - \aipreprint -}% -\expandafter\def\csname rtx@aip11pt\endcsname{\csname rtx@aip12pt\endcsname}% -\expandafter\def\csname rtx@aip12pt\endcsname{% - \let\@currname@class\@currname - \def\@currname{aps12pt\substyle@post}% - \class@info{Reading file \@currname.\substyle@ext}% - \input{\@currname.\substyle@ext}% - \let\@currname\@currname@class - \class@info{Overriding 12pt}% - \aippreprint -}% -% \end{macrocode} -% -% \begin{macro}{\today} -% Procedure \cmd\today\ is used in the article class, but not in -% this document class. -% \begin{macrocode} -\def\today{% - \number\day\space - \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\year -}% -% \end{macrocode} -% \end{macro} -% -% \subsection{A. Running Title} -% User-provided running title \cmd\@shorttitle\ to be set. -% -% \subsection{B. Equation numbering, figure and table numbering} -% Equations can be numbered throughout, or by section, with appendix equations prepended by the appendix label. -% Figures and tables are numbered throughout. -% -% -% \subsection{C. Title} -% Title page may break above abstract, within author list. -% Title notes are signified by superior letter followed by right parenthesis. -% -% \subsection{D. Author footnote} -% Set short line above these footnotes. -% -% \subsection{E. Author} -% Class option \classoption{superscriptaddress} is standard. -% \begin{macrocode} - \clo@superscriptaddress -% \end{macrocode} -% -% \subsection{F. Affiliations} -% Set italic. -% -% \subsection{G. Received date} -% -% -% \subsection{H. Abstract} -% Single paragraph, no indent. -% -% \subsection{J. Lead Paragraph} -% Set boldface, flush left before main text, single paragraph. -% Separated from text by a short centered rule. -% -% \subsection{K. Headings} -% Use labels: ROMAN, LETTER, arabic, letter. -% Set ALLCAPS, boldface; Initial cap, boldface; Initial cap, bold-italic; Initial cap, italic. -% -% Theorem, proof title followed by colon. Follow author. -% -% \subsection{L. Text Footnotes} -% Not permitted; use endnotes. -% -% \subsection{M. Citations and Bibliography} -% Numerical \filename{aipnum.bst}, author-year \filename{aipauth.bst}, and numbered author-year \filename{aipnumauth.bst} are the available choices. -% Numerical is standard, with all styles permitted in journal classes 3a and 4b. -% -% -% \subsection{N. References} -% -% Article Title usage: -% -% Article title required in all journals with "unpublished", "to be published", "in press" and "submitted" refs. -% -% Exceptions: -% -% Journal classes 1a,1b,2,4a: -% -% Article title not allowed in published references, except in the case of "in press" or submitted" (see sample references below). -% -% Journal class 3a: -% -% Article title allowed but not required in author-year references (use must be consistent within a single manuscript). -% -% Journal class 3b: -% -% Article title required in all journal references and report references. -% -% Journal class 4b: -% -% Article title allowed in journal references in author-year mode. -% -% \subsection{O. Examples of Numerical References} -% -% -% \subsection{P. References in Author-year mode} -% -% -% \subsection{Q. Numbered Author-year References} -% -% -% \subsection{R. Tables} -% Placed within text (floated), labeled with Roman numeral. -% -% Table caption placed above table, followed by space, -% two double lines, space, table column headings, space, -% single line, table contents, two double lines. -% -% Footnotes labeled with superior lower-case letter, set below table contents. -% -% \subsection{S. Figures} -% Placed within text (floated), labeled with arabic numbers. -% -% Caption set below figure. A citation to be set inline, not superscripted. -% -% \subsection{Society defaults}% -% -% After this society file is read in, we will process the -% \cmd\@journal- and \cmd\@pointsize-specific code. -% Here we define the defaults. -% -% We select \textbf{Chaos} as the default journal substyle, because it is -% the most permissive in terms of bibliography and citation style, -% and it is formatted in two column in the reprint style. -% -% \begin{macrocode} -\def\@journal@default{cha}% -\def\@pointsize@default{12}% -% \end{macrocode} -% -% \subsection{Journal-Specific Code}% -% -% For AIP journals, we supply code specific to JCP, POP, RSI, JAP, APL, CHA, POF, BMF, RSE, JMP. -% -% \subsubsection{\classoption{jcp}}% -%A member of the journal class 1a. -% \begin{macrocode} -\def\rtx@aipjcp{% - \typeout{Using journal substyle \@journal.}% -% \end{macrocode} -% Journal class 1a uses the (superscript) numerical citation style by default. -% \begin{macrocode} - \@booleanfalse\authoryear@sw -% \end{macrocode} -% -% End of \classoption{jcp} code. -% \begin{macrocode} -}% -% \end{macrocode} -% -% \subsubsection{\classoption{pop}}% -%A member of the journal class 1a. -% \begin{macrocode} -\def\rtx@aippop{% - \typeout{Using journal substyle \@journal.}% -% \end{macrocode} -% Journal class 1a uses the (superscript) numerical citation style by default. -% \begin{macrocode} - \@booleanfalse\authoryear@sw -% \end{macrocode} -% -% End of \classoption{pop} code. -% \begin{macrocode} -}% -% \end{macrocode} -% -% \subsubsection{\classoption{rsi}}% -%A member of the journal class 1a. -% \begin{macrocode} -\def\rtx@aiprsi{% - \typeout{Using journal substyle \@journal.}% -% \end{macrocode} -% Journal class 1a uses the (superscript) numerical citation style by default. -% \begin{macrocode} - \@booleanfalse\authoryear@sw -% \end{macrocode} -% -% End of \classoption{rsi} code. -% \begin{macrocode} -}% -% \end{macrocode} -% -% \subsubsection{\classoption{jap}}% -%Sole member of the journal class 1b. -% -% No running title. -% \begin{macrocode} -\def\rtx@aipjap{% - \typeout{Using journal substyle \@journal.}% -% \end{macrocode} -% Journal class 1b uses the (superscript) numerical citation style by default. -% \begin{macrocode} - \@booleanfalse\authoryear@sw - \let\@runningtitle\@empty -% \end{macrocode} -% -% End of \classoption{jap} code. -% \begin{macrocode} -}% -% \end{macrocode} -% -% \subsubsection{\classoption{apl}}% -%Sole member of the journal class 2. -% -% No running title. -% \begin{macrocode} -\def\rtx@aipapl{% - \typeout{Using journal substyle \@journal.}% -% \end{macrocode} -% Journal class 2 uses the (superscript) numerical citation style by default. -% \begin{macrocode} - \@booleanfalse\authoryear@sw - \let\@runningtitle\@empty -% \end{macrocode} -% -% End of \classoption{apl} code. -% \begin{macrocode} -}% -% \end{macrocode} -% -% \subsubsection{\classoption{apm}}% -% -% \begin{macrocode} -\def\rtx@aipapm{% - \typeout{Using journal substyle \@journal.}% - \@booleanfalse\authoryear@sw - \let\@runningtitle\@empty -}% -% \end{macrocode} -% -% -% \subsubsection{\classoption{cha}}% -%Sole member of the journal class 3a. -% \begin{macrocode} -\def\rtx@aipcha{% - \typeout{Using journal substyle \@journal.}% -% \end{macrocode} -% Article titles are allowed. -% \begin{macrocode} - \@booleanfalse\aip@jtitx@sw -% \end{macrocode} -% -% End of \classoption{cha} code. -% \begin{macrocode} -}% -% \end{macrocode} -% -% \subsubsection{\classoption{pof}}% -%Sole member of the journal class 3b. -% \begin{macrocode} -\def\rtx@aippof{% - \typeout{Using journal substyle \@journal.}% -% \end{macrocode} -% Journal class 3b uses the (superscript) numerical citation style by default. -% Article titles are required, so we include them if available, -% but if absent, we can do no more than make a warning in the \file{.blg}. -% \begin{macrocode} - \@booleanfalse\authoryear@sw - \@booleanfalse\aip@jtitx@sw -% \end{macrocode} -% -% End of \classoption{pof} code. -% \begin{macrocode} -}% -% \end{macrocode} -% -% \subsubsection{\classoption{bmf}}% -% A member of the journal class 4a, -% the Biomicrofluidics journal is single column. -% \begin{macrocode} -\def\rtx@aipbmf{% - \typeout{Using journal substyle \@journal.}% -% \end{macrocode} -% Journal class 4a uses the (superscript) numerical citation style by default. -% Journal is formatted in a single column. -% \begin{macrocode} - \@booleanfalse\authoryear@sw -% \end{macrocode} -% -% End of \classoption{bmf} code. -% \begin{macrocode} -}% -% \end{macrocode} -% -% -% \subsubsection{\classoption{sd}}% -% \begin{macrocode} -\def\rtx@aipsd{% - \typeout{Using journal substyle \@journal.}% - \@booleanfalse\authoryear@sw -}% -% \end{macrocode} -% -% \subsubsection{\classoption{cp}}% -% \begin{macrocode} -\def\rtx@aipcp{% - \typeout{Using journal substyle \@journal.}% - \@booleanfalse\authoryear@sw% -% \@booleantrue\authoryear@sw - \@booleanfalse\twocolumn@sw% -% \@booleantrue\longbibliography@sw% -% \@booleanfalse\aip@jtitx@sw -}% -% \end{macrocode} -% -% \subsubsection{\classoption{jor}}% -% \begin{macrocode} -\def\rtx@aipjor{% - \typeout{Using journal substyle \@journal.}% - \@booleantrue\authoryear@sw% - \@booleantrue\twoside@sw\@mparswitchfalse% -}% -% \end{macrocode} -% -% \subsubsection{\classoption{rse}}% -%A member of the journal class 4a. -% \begin{macrocode} -\def\rtx@aiprse{% - \typeout{Using journal substyle \@journal.}% -% \end{macrocode} -% Journal class 4a uses the (superscript) numerical citation style by default. -% \begin{macrocode} - \@booleanfalse\authoryear@sw -% \end{macrocode} -% -% End of \classoption{rse} code. -% \begin{macrocode} -}% -% \end{macrocode} -% -% \subsubsection{\classoption{jmp}}% -% Sole member of the journal class 4b, Journal of Mathematical Physics is single column. -% For an example of \env{itemize}, see JMP\_122901\_1 (48). -% \begin{macrocode} -\def\rtx@aipjmp{% - \typeout{Using journal substyle \@journal.}% -% \end{macrocode} -% Article titles are allowed. -% Journal is formatted in a single column. -% \begin{macrocode} - \@booleanfalse\aip@jtitx@sw - \@booleanfalse\twocolumn@sw - \@booleantrue\onecolumn@sw -% \end{macrocode} -% -% End of \classoption{jmp} code. -% \begin{macrocode} -}% -% \end{macrocode} -% -% -% \subsubsection{\classoption{adv}}% -% \begin{macrocode} -\def\rtx@aipadv{% - \typeout{Using journal substyle \@journal.}% - \@booleanfalse\authoryear@sw - \let\@runningtitle\@empty -}% -% \end{macrocode} -% -% -% \subsection{Establish AIP Defaults\label{sec:aip-defaults}} -% -% \begin{macro}{\footinbib@sw} -% All AIP journals invoke the \classoption{footinbib} option. -% \begin{macrocode} -\@booleantrue\footinbib@sw -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\place@bibnumber} -% \begin{macro}{\@bibstyle} -% \begin{macro}{\bibpunct} -% We install code that will -% govern the style in which \cmd\cite\ commands are -% formatted, -% select the presentation for \cmd\bibitem s -% and control the \BibTeX\ processing. -% -% Note that a journal substyle may override these settings. -% Likewise, document preamble may itself invoke \cmd\bibpunct\ or \cmd\bibliographystyle, -% thereby overriding these settings and those of the journal substyle. -% -% The numbered citations of \file{aipnum} and \file{aipauthnum} -% are compatible with \classoption{footinbib} and -% the compression and coalescing features of \classname{natbib}, -% while \file{aipauth}'s author-year citations are not. -% Therefore, we de-select such options if we are selecting author-year citations. -% -% Note on \classname{natbib} presets: -% \file{aipnum} and \file{aipauthnum} uses the Chicago \cmd\bibpunct\ style; -% while \file{aipauth} uses that of Nature. -% -% Note on \cmd\NAT@mcite: if not using numerical citations, we set \cmd\NAT@mcite\ -% to a lower value, to turn off the mcite semantics of \classname{natbib}. -% \begin{macrocode} -\let\old@place@bibnumber\place@bibnumber -\let\place@bibnumber\place@bibnumber@sup -\appdef\setup@hook{% - \authoryear@sw{% - \aip@jtitx@sw{% - \def\@bibstyle{aipauth\substyle@post}% - }{% - \def\@bibstyle{aipauth\substyle@post}% - }% - \authornum@sw{% - \bibpunct{}{}{,}{s}{}{\textsuperscript{,}}% - \let\onlinecite\rev@citealpnum - }{% - \bibhang10\p@ - \bibpunct{(%) - }{%( - )}{; }{a}{,}{,}% - \@booleanfalse\footinbib@sw - \let\NAT@mcite\@ne - \let\NAT@sort\z@ - \def\NAT@cmprs{\z@}% - \let\NAT@def@citea\rtx@def@citea - \let\NAT@def@citea@close\rtx@def@citea@close - }% - }{% - \aip@jtitx@sw{% - \def\@bibstyle{aipnum\substyle@post}% - }{% - \def\@bibstyle{aipnum\substyle@post}% - }% - \bibpunct{}{}{,}{s}{}{\textsuperscript{,}}% - \let\onlinecite\rev@citealpnum - }% -}% -\def\make@footnote@endnote{% - \footinbib@sw{% - \authoryear@sw{\authornum@sw{\false@sw}{\true@sw}}{\false@sw}% - {}{% - \ltx@footnote@push - \def\thempfn{Note\thefootnote}% - \let\ltx@footmark\rev@citemark - \let\ltx@foottext\rev@endtext - \appdef\class@enddocumenthook{\auto@bib}% - \let\printendnotes\relax - }% - }{}% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\aipreprint}% -% We want to override \filename{aps10pt.rtx}. -% \begin{macrocode} -\def\aipreprint{% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\aippreprint}% -% We want to override \filename{aps12pt.rtx}. -% \begin{macrocode} -\def\aippreprint{% -}% -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Fixing the bug for single author/affiliation}% -% In case of single author/affiliation no need to produce the affiliation number after the author name. -% -% \begin{macrocode} -%% -\xdef\t@talAU{0}% TeXSupport -\def\frontmatter@author@produce@script{% - \begingroup - \let\@author@present\@author@present@script - \frontmatterverbose@sw{\typeout{\string\frontmatter@author@produce@script:}\say\@AAC@list\say\@AFF@list\say\@AFG@list}{}% - \let\AU@temp\@empty - \@tempcnta\z@ - \let\AF@opr \@gobble - \def\AU@opr{\@author@count\@tempcnta}% - \def\CO@opr{\@collaboration@count\AU@temp\@tempcnta}% - \@AAC@list% - \xdef\t@talAU{\the\@tempcnta}% TeXSupport - \expandafter\CO@opr\@author@cleared - \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 - \begingroup - \frontmatter@above@affiliation@script - \let\AFF@opr \@affil@script - \@AFF@list - \frontmatter@footnote@produce - \par - \endgroup - \endgroup -}% -\def\doauthor#1#2#3{% TeXSupport - \ignorespaces#1\unskip\@listcomma - \begingroup - \ifnum\t@talAU=1\else\ifnum\c@affil=\@ne\relax\else#3\fi\fi% TeXSupport - \@if@empty{#2}{\endgroup{}{}}{\endgroup{\ifnum\t@talAU=1\else\ifnum\c@affil=\@ne\relax\else\comma@space\fi\fi}{}\frontmatter@footnote{#2}}% TeXSupport - \space \@listand -}% -%% -% \end{macrocode} -% -% \subsubsection{\classoption{Page restriction for APL (removed)}}% -% -% This macro was installed to calculate page-lenght for APL articles. -%% Appended by Ms. Sehar Tahir (Aptara) for American Institute of Physics. -%% To impose page restrictions for APL journal at MSP stage. -% -% \begin{macrocode} -%% -%% HISTORY -%% Revised page restriction to 4 pages: 05/10/2011 -%% Tweaked the page over length message: 31/10/2011 -%% Removed unused page restriction code: 30/09/2020 -%% -\DeclareOption{no-pagerestrict}{% - \class@warn{Deprecated pagerestrict code. Option 'no-pagerestrict' was ignored.}}% -% \end{macrocode} -% End of \classoption{apl} pagerestriction code. -% -% \subsubsection{Style updates for \texttt{jmp} and \texttt{rse}}% -% -% JMP, BMF and RSE journal's to be as one column at Reprint stage -% -%\begin{macrocode} -%% -%% JMP, BMF and RSE journal's to be as one column at Reprint stage -%% -\appdef\rtx@require@packages{% -\def\jnl@rse{rse}% -\def\jnl@jmp{jmp}% -\preprintsty@sw{}% - {%\ifx\@journal\jnl@jmp% - \onecolumn@sw{% - \typeout{AIP Info: \@journal\space journal style Single column, 2013/07/30}% - \@booleanfalse\twocolumn@sw% - \appdef\setup@hook{% - \twoside@sw{% - \oddsidemargin 28pt - \evensidemargin 0pt - \marginparwidth 60pt - }{% - \oddsidemargin 28pt - \evensidemargin 0pt - \marginparwidth 44pt - }% - }% - \marginparsep 10pt - \topmargin -17pt - \headheight 12pt - \headsep 25pt - \topskip 10pt - \splittopskip\topskip - \footskip 30pt - \textheight=53.5pc - \textwidth 33pc - \columnsep 10pt - \def\title@column#1{% - \minipagefootnote@init - \begingroup - \let\@footnotetext\frontmatter@footnotetext - \ltx@no@footnote - #1% - \endgroup - \minipagefootnote@foot - }% -}{}% -% \fi% Curly brace -} -% \end{macrocode} -% -% \subsubsection{Style updates for \texttt{bmf} and addition of new substyle \texttt{sd}}% -% -% BMF journal to match with final layout (textheight and other page setup dimensions). -% Addition of new journal SD: Structural Dynamics. -% -% \begin{macrocode} -%% BMF journal to match with final layout (textheight) -%% Addition of new journals SD: Structural Dynamics -% -\def\jnl@bmf{bmf}% -\def\jnl@sd{sd}% -\preprintsty@sw{}% - {%\ifx\@journal\jnl@bmf% - \newonecolumn@sw{% - \typeout{AIP Info: \@journal\space journal style Single column, 2011/08/11}% - \@booleanfalse\twocolumn@sw% - \appdef\setup@hook{% - \twoside@sw{% - \oddsidemargin 28pt - \evensidemargin 0pt - \marginparwidth 60pt - }{% - \oddsidemargin 28pt - \evensidemargin 0pt - \marginparwidth 44pt - }% - }% - \marginparsep 10pt - \topmargin -17pt - \headheight 12pt - \headsep 25pt% 25pt - \topskip 10pt - \splittopskip\topskip - \footskip 30pt -% \textheight=53.5pc - \textheight=54.5pc% - \textwidth 33pc - \columnsep 10pt - \def\title@column#1{% - \minipagefootnote@init - \begingroup - \let\@footnotetext\frontmatter@footnotetext - \ltx@no@footnote - #1% - \endgroup - \minipagefootnote@foot - }% -\def\adjust@abstractwidth{% - \parindent1em\relax -% \advance\leftskip.5in\relax - \advance\leftskip2.5pc\relax - \advance\rightskip2.5pc\relax - \@totalleftmargin\leftskip - \@afterheading\@afterindentfalse -}% -% \fi -}{}% -} -% \end{macrocode} -% -% \subsubsection{Addition of new substyle \texttt{jor}}% -% -% Addition of new journal JOR: Journal of Rheology. -% -% \begin{macrocode} -%% -%% Journal of Rheology (jor) -%% -\def\jnl@jor{jor}% -\preprintsty@sw{}% - {\ifx\@journal\jnl@jor% - \typeout{AIP Info: \@journal\space journal style Single column, 2013/10/24}% - \@booleanfalse\twocolumn@sw% - \appdef\setup@hook{% - \twoside@sw{% - \oddsidemargin 28pt - \evensidemargin 0pt - \marginparwidth 60pt - }{% - \oddsidemargin 28pt - \evensidemargin 0pt - \marginparwidth 44pt - }% - }% - \marginparsep 10pt - \topmargin -17pt - \headheight 12pt - \headsep 25pt - \topskip 10pt - \splittopskip\topskip - \footskip 30pt - \textheight=53.5pc - \textwidth 33pc - \columnsep 10pt - \def\title@column#1{% - \minipagefootnote@init - \begingroup - \let\@footnotetext\frontmatter@footnotetext - \ltx@no@footnote - #1% - \endgroup - \minipagefootnote@foot - }% -\def\frontmatter@title@format{% - \preprintsty@sw{}{\Large}% - \sffamily% - \bfseries% - \leftskip0pt plus1fill% - \rightskip0pt plus1fill% - \parindent\z@% -%\raggedright% - \parskip\z@skip% -}% -\def\frontmatter@@indent{% - \skip@\@flushglue - \@flushglue\z@ plus.3\hsize\relax - \leftskip0pt plus1fill% - \rightskip0pt plus1fill% - \parindent\z@% -%\raggedright -%\advance\leftskip.5in\relax - \@totalleftmargin\leftskip - \@flushglue\skip@ -}% -%\def\frontmatter@authorformat{% -% \frontmatter@@indent -% \sffamily -%}% -\def\frontmatter@RRAP@format{% - \addvspace{5\p@}% - \small - \leftskip0pt plus1fill% - \rightskip0pt plus1fill% - \parindent\z@% -%%\raggedright -%%\advance\leftskip.5in\relax - \@totalleftmargin\leftskip - \everypar{% - \hbox\bgroup(\@gobble@leavemode@uppercase%) - }% - \def\par{% - \@ifvmode{}{%( - \unskip)\egroup\@@par - }% - }% -}% -\def\frontmatter@abstractfont{}% -\def\frontmatter@abstractwidth{\textwidth} -\def\abstractname{Synopsis} -\def\frontmatter@abstractheading{% - \begingroup - \centering\large - {\bfseries\abstractname} - \par\vskip.25\baselineskip - \endgroup -}% -\appdef\setup@hook{% - \preprintsty@sw{}{% - \let\refname\old@refname%\@empty - }% -}% -% -\def\ps@article{% - \def\@evenhead{\let\\\heading@cr\sffamily\thepage\quad\checkindate\hfil\@runningtitle\hfil}% - \def\@oddhead{\let\\\heading@cr\hfil\sffamily\@runningtitle\hfil\checkindate\quad\thepage}% - \def\@oddfoot{}% - \def\@evenfoot{}% - \let\@mkboth\@gobbletwo - \let\sectionmark\@gobble - \let\subsectionmark\@gobble -}% -\def\@make@capt@title#1#2{% - \@ifx@empty\float@link{\@firstofone}{\expandafter\href\expandafter{\float@link}}% - {{\bfseries#1}}\@caption@fignum@sep#2% -}% -\def\@caption@fignum@sep{{\bfseries.} }% - \fi} -% \end{macrocode} -% -% \subsubsection{Addition of new substyle \texttt{cp}}% -% -% Addition of new journal AIP-CP: AIP Conference Proceedings. -% -% \begin{macrocode} -%% -%% AIP Conference Proceedings -%% -\def\jnl@cp{cp}% -\preprintsty@sw{}% - {\ifx\@journal\jnl@cp% - \typeout{AIP Info: \@journal\space journal style Single column, 2013/10/30}% - \@booleanfalse\twocolumn@sw% - \appdef\setup@hook{% - \twoside@sw{% - \oddsidemargin 0pt - \evensidemargin 0pt - \marginparwidth 60pt - }{% - \oddsidemargin 0pt - \evensidemargin 0pt - \marginparwidth 44pt - }% - }% - \marginparsep 10pt - \topmargin -29.5pt - \headheight 12pt - \headsep 25pt - \topskip 10pt - \splittopskip\topskip - \footskip 30pt - \textheight=53.5pc - \textwidth 39pc - \columnsep 10pt -%% - \def\title@column#1{% - \minipagefootnote@init - \begingroup - \let\@footnotetext\frontmatter@footnotetext - \ltx@no@footnote - #1% - \endgroup - \minipagefootnote@foot - }% -%% -\def\frontmatter@title@format{% - \preprintsty@sw{}{\LARGE}% \Large -%\sffamily% - \bfseries% - \leftskip0pt plus1fill% - \rightskip0pt plus1fill% - \parindent\z@% -%\raggedright% - \parskip\z@skip% -}% -%% -\def\frontmatter@@indent{% - \skip@\@flushglue - \@flushglue\z@ plus.3\hsize\relax - \leftskip0pt plus1fill% - \rightskip0pt plus1fill% - \parindent\z@% -%\raggedright -%\advance\leftskip.5in\relax - \@totalleftmargin\leftskip - \@flushglue\skip@ -}% -%% -\def\frontmatter@RRAP@format{% - \addvspace{5\p@}% - \small - \leftskip0pt plus1fill% - \rightskip0pt plus1fill% - \parindent\z@% -%%\raggedright -%%\advance\leftskip.5in\relax - \@totalleftmargin\leftskip - \everypar{% - \hbox\bgroup(\@gobble@leavemode@uppercase%) - }% - \def\par{% - \@ifvmode{}{%( - \unskip)\egroup\@@par - }% - }% -}% -\def\frontmatter@abstractfont{\small}% -\def\frontmatter@abstractwidth{\textwidth} -\def\@keys@name{{\small\bfseries Keywords:} }% -\def\@pacs@name{{\small\bfseries PACS:} }% -\def\abstractname{Abstract.} -%% -\def\frontmatter@abstractheading{% - \begingroup -% \centering\large - \small% - {\bfseries\abstractname} -% \par\vskip.25\baselineskip - \endgroup -}% -%% -\def\adjust@abstractwidth{% - \parindent1em\relax -% \advance\leftskip.5in\relax - \@totalleftmargin\leftskip - \@afterheading\@afterindentfalse - \small% -}% -%% -\def\frontmatter@PACS@format{% -% \addvspace{11\p@}% - \adjust@abstractwidth -% \parskip\z@skip - \samepage -}% -\def\frontmatter@keys@format{% - \addvspace{11\p@}% - \adjust@abstractwidth - \parskip\z@skip - \samepage -}% -%% -\def\frontmatter@authorformat{% - \frontmatter@@indent - \Large% -% \sffamily - \vskip.5\baselineskip% -}% -%% -%% -\def\titleblock@produce{% - \begingroup - \ltx@footnote@pop - \def\@mpfn{mpfootnote}% - \def\thempfn{\thempfootnote}% - \c@mpfootnote\z@ - \let\@makefnmark\frontmatter@makefnmark - \frontmatter@setup - \thispagestyle{titlepage}\label{FirstPage}% - \frontmatter@title@produce - \groupauthors@sw{% - \frontmatter@author@produce@group - }{% - \frontmatter@author@produce@script - }% - \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}% - }% - \frontmatter@abstract@produce - \@ifx@empty\@keywords{}{% - \@keywords@produce\@keywords - }% - \@ifx@empty\@pacs{}{% - \@pacs@produce\@pacs - }% - \par - \frontmatter@finalspace - \endgroup -}% -%% -\appdef\setup@hook{% - \preprintsty@sw{}{% - \let\refname\old@refname%\@empty - }% -}% -%% -\def\ps@article{% -% \def\@evenhead{\let\\\heading@cr\thepage\quad\checkindate\hfil{\leftmark}}% -% \def\@oddhead{\let\\\heading@cr{\rightmark}\hfil\checkindate\quad\thepage}% - \def\@evenhead{}% - \def\@oddhead{}% - \def\@oddfoot{}% - \def\@evenfoot{}% - \let\@mkboth\markboth - \let\sectionmark\@gobble - \let\subsectionmark\@gobble -}% -%% -\def\@make@capt@title#1#2{% - \@ifx@empty\float@link{\@firstofone}{\expandafter\href\expandafter{\float@link}}% - {{\bfseries#1}}\@caption@fignum@sep#2% -}% -\def\@caption@fignum@sep{{\bfseries.} }% -\setcounter{secnumdepth}{0} -\def\section{\@startsection{section}{1}{\z@}{-0.8cm \@plus-1ex \@minus -.2ex}{0.5cm}{\normalfont\large\bfseries\centering}}% \sffamily\small -\def\subsection{\@startsection{subsection}{2}{\z@}{-.8cm \@plus-1ex \@minus -.2ex}{.5cm}{\normalfont\large\bfseries\centering}}% \sffamily\small -\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{-.8cm \@plus-1ex \@minus -.2ex}{.5cm}{\normalfont\large\bfseries\itshape\centering}}% \sffamily\small -% -\def\BIBsection{\@startsection{section}{1}{\z@}{-0.8cm \@plus-1ex \@minus -.2ex}{0.5cm}{\normalfont\large\bfseries\centering}}% \sffamily\small -\def\figurename{FIGURE} -%% -\newcommand\rtx@myciteonline[3]{% - \ifNAT@swa - \leavevmode - \unskip -% \textsuperscript{\normalfont#1}% TeXSupport - \space[{\normalfont#1}]% - \if*#3*\else\ (#3)\fi - \else - #1% - \fi - \endgroup -}% -%% -\appdef\setup@hook{% - \authoryear@sw{}{% - \def\NAT@cmprs{\z@} -% \let\rtx@citesuper\rtx@mycitesuper% - \let\NAT@citesuper\rtx@myciteonline%\rtx@citesuper - \let\place@bibnumber\old@place@bibnumber - \gdef\place@bibnumber@online#1{{#1}.\hskip5pt}% - \let\place@bibnumber\place@bibnumber@online - \def\NAT@spacechar{}% - \def\NAT@conj{and\ }% - \bibpunct{}{}{, }{s}{}{\textsuperscript{,}}% TeXSupport - }% -}% -%% - \def\rtx@mybibsection{% - \@ifx@empty\refname{% - \par\vspace{6\p@ plus 6\p@}% - }{% - \expandafter\BIBsection\expandafter*\expandafter{\refname}% - \@nobreaktrue - }% -}% -\let\bibsection\rtx@mybibsection% - \fi} -% -% \end{macrocode} -% -% \subsubsection{\classoption{pof}}% -% This macro modifies the reprint output of POF journal to single column. -% \begin{macrocode} -%% POF journal to be one column at Reprint stage -%% -%% HISTORY -%% Further corrected the text area and margins to closely match Print output: 23/04/2012 -\def\jnl@pof{pof}% -\preprintsty@sw{}% - {\ifx\@journal\jnl@pof% - \typeout{AIP Info: \@journal\space journal style Single column, 2011/08/11}% - \@booleanfalse\twocolumn@sw% - \appdef\setup@hook{% - \twoside@sw{% - \oddsidemargin 28pt - \evensidemargin 0pt - \marginparwidth 60pt - }{% - \oddsidemargin 28pt - \evensidemargin 0pt - \marginparwidth 44pt - }% - }% - \marginparsep 10pt - \topmargin -17pt - \headheight 12pt - \headsep 25pt - \topskip 10pt - \splittopskip\topskip - \footskip 30pt - \textheight=53.5pc - \textwidth 33pc - \columnsep 10pt - \def\title@column#1{% - \minipagefootnote@init - \begingroup - \let\@footnotetext\frontmatter@footnotetext - \ltx@no@footnote - #1% - \endgroup - \minipagefootnote@foot - }% - \fi} -}% -% \end{macrocode} -% End of \classoption{pof} code. -% -% \begin{macrocode} -%</package> -% \end{macrocode} -% -% -% -% \section{AAPM: The Socity Journals Style (\texttt{mph} substyle)} -% -% The file \file{aapm.rtx} is read in by the \classname{revtex4} document class -% for applying the journal specific changes. User should use \texttt{[aapm,mph]} -% for applying the required updates. -% -% -% \begin{macrocode} -%<*aapm> -% \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 - \class@info{RevTeX society AAPM selected}% -\DeclareOption{mph}{\change@journal{mph}}% -%% -\@booleantrue\longbibliography@sw -\@booleanfalse\authoryear@sw -\def\@bibstyle{aapmrev\substyle@post}% -\appdef\@bibdataout@rev{\@bibdataout@aapm}% -\def\@bibdataout@aapm{% - \immediate\write\@bibdataout{% - @CONTROL{% - aapm41Control% - \longbibliography@sw{% - ,pages="1",title="0"% - }{% - ,pages="0",title=""% - }% - }% - }% - \if@filesw - \immediate\write\@auxout{\string\citation{aapm41Control}}% - \fi -}% -\appdef\setup@hook{% - \lengthcheck@sw{% - \RequirePackage{times}% - \frenchspacing% - }{}% -} -\@booleantrue\preprintsty@sw -\@booleantrue\showPACS@sw -\@booleantrue\showKEYS@sw -\appdef\setup@hook{% - \preprintsty@sw{}{% - \let\refname\@empty - }% -}% -\appdef\setup@hook{% - \preprintsty@sw{% - \ps@preprint - }{% - \ps@article - }% -}% -\def\ps@preprint{% - \def\@oddhead{\@runningtitle\hfil}% - \def\@evenhead{\@runningtitle\hfil}% - \def\@oddfoot{\hfil\thepage\quad\checkindate\hfil}% - \def\@evenfoot{\hfil\thepage\quad\checkindate\hfil}% - \let\@mkboth\@gobbletwo - \let\sectionmark\@gobble - \let\subsectionmark\@gobble -}% -\def\ps@article{% - \def\@evenhead{\let\\\heading@cr\thepage\quad\checkindate\hfil\@runningtitle}% - \def\@oddhead{\let\\\heading@cr\@runningtitle\hfil\checkindate\quad\thepage}% - \def\@oddfoot{}% - \def\@evenfoot{}% - \let\@mkboth\@gobbletwo - \let\sectionmark\@gobble - \let\subsectionmark\@gobble -}% -\def\@runningtitle{\@shorttitle}% -\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}% -}% -\let\@fnsymbol@latex\@fnsymbol -\let\@fnsymbol\@alph -\def\adjust@abstractwidth{% - \parindent1em\relax - \advance\leftskip.5in\relax - \@totalleftmargin\leftskip - \preprintsty@sw{}{\rightskip.14\hsize\relax} - \@afterheading\@afterindentfalse -}% -\def\frontmatter@abstractheading{}% -\def\frontmatter@abstractfont{% - \adjust@abstractwidth -}% -\def\frontmatter@postabstractspace{1\baselineskip} -\def\frontmatter@finalspace{\addvspace{28\p@}} -\appdef\setup@hook{% - \preprintsty@sw{% - \@booleantrue\titlepage@sw - \let\section\section@preprintsty - \let\subsection\subsection@preprintsty - \let\subsubsection\subsubsection@preprintsty - }{}% -}% -\def\frontmatter@@indent{% - \skip@\@flushglue - \preprintsty@sw{\@flushglue\z@ plus.3\hsize\relax}% - {\@flushglue.14\hsize\relax} - \raggedright - \advance\leftskip.5in\relax - \@totalleftmargin\leftskip - \@flushglue\skip@ -}% -\def\frontmatter@authorformat{% - \frontmatter@@indent - \sffamily -}% -\renewcommand*\email[1][Electronic mail: ]{\begingroup\sanitize@url\@email{#1}}% -\def\frontmatter@above@affilgroup{\par\addvspace{6\p@}% -}% -\def\frontmatter@above@affiliation@script{% - \frontmatter@@indent -}% -\def\frontmatter@above@affiliation{% -}% -\def\frontmatter@affiliationfont{% - \frontmatter@@indent - \preprintsty@sw{}{\small}% - \it -}% -\def\frontmatter@collaboration@above{% -}% -\def\frontmatter@setup{% - \normalfont -}% -\def\frontmatter@title@above{\addvspace{6\p@}}% -\def\frontmatter@title@format{% - \preprintsty@sw{}{\Large}% - \sffamily - \bfseries - \raggedright - \parskip\z@skip -}% -\def\frontmatter@title@below{\addvspace{7.5\p@}}% -\def\@author@parskip{3\p@}% -\@booleanfalse\altaffilletter@sw -\def\frontmatter@makefnmark{% - \@textsuperscript{% - \normalfont\@thefnmark%( - )% - }% -}% -\def\frontmatter@authorbelow{% -\addvspace{3\p@}% -}% -\let\affil@cutoff\tw@ -\def\frontmatter@RRAP@format{% - \addvspace{2\p@}% - \raggedright - \advance\leftskip.5in\relax - \@totalleftmargin\leftskip - \preprintsty@sw{}{\advance\rightskip.14\hsize\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}% -\def\frontmatter@PACS@format{% - \addvspace{11\p@}% - \adjust@abstractwidth - \parskip\z@skip - \samepage -}% -\def\frontmatter@keys@format{% - \adjust@abstractwidth - \samepage -}% -\def\ps@titlepage{% - \def\@oddhead{% - \@runningtitle - \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 and AAPM}{}}% -\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{, }}% -\newenvironment{Lead@inParagraph}{% - \par - \bfseries - \@afterheading\@afterindentfalse -}{% - \par - \hb@xt@\hsize{\hfil\leaders\hrule\hfil\leaders\hrule\hfil\hfil}% -}% -\appdef\frontmatter@init{% - \let@environment{quotation@ltx}{quotation}% - \let@environment{quotation}{Lead@inParagraph}% -}% -\appdef\@startsection@hook{% - \let@environment{quotation}{quotation@ltx}% -}% -\def\secnums@rtx{% - \@ifxundefined\thepart{% - \def\thepart {\Roman{part}}% - }{}% - \@ifxundefined\thesection{% - \def\thesection {\Roman{section}}% - \def\p@section {}% - }{}% - \@ifxundefined\thesubsection{% - \def\thesubsection {\thesection.\Alph{subsection}}% - \def\p@subsection {}% - }{}% - \@ifxundefined\thesubsubsection{% - \def\thesubsubsection {\thesubsection.\arabic{subsubsection}}% - \def\p@subsubsection {}% - }{}% - \@ifxundefined\theparagraph{% - \def\theparagraph {\thesubsubsection.\alph{paragraph}}% - \def\p@paragraph {}% - }{}% - \@ifxundefined\thesubparagraph{% - \def\thesubparagraph {\theparagraph.\arabic{subparagraph}}% - \def\p@subparagraph {}% - }{}% -}% -\def\@seccntformat#1{\csname the#1\endcsname.\hskip0.5em\relax}% -\def\@hang@from#1#2#3{#1#2#3}% -\def\section{% - \@startsection - {section}% - {1}% - {\z@}% - {1.5\baselineskip \@plus1ex \@minus .2ex}% - {.5\baselineskip}% - {% - \normalfont - \sffamily - \bfseries - \raggedright - }% -}% -\def\@hangfrom@section#1#2#3{\@hangfrom{#1#2}\MakeTextUppercase{#3}}% -\def\@hangfroms@section#1#2{#1\MakeTextUppercase{#2}}% -\def\subsection{% - \@startsection - {subsection}% - {2}% - {\z@}% - {1.5\baselineskip \@plus1ex \@minus .2ex}% - {.5\baselineskip}% - {% - \normalfont - \fontsize{9.5}{12} - \sffamily - \bfseries - \raggedright - }% -}% -\def\subsubsection{% - \@startsection - {subsubsection}% - {3}% - {\z@}% - {1.5\baselineskip \@plus1ex \@minus .2ex}% - {.5\baselineskip}% - {% - \normalfont - \fontsize{9.5}{12} - \sffamily - \bfseries - \itshape - \raggedright - }% -}% -\def\paragraph{% - \@startsection - {paragraph}% - {4}% - {\parindent}% - {\z@}% - {-1em}% - {\normalfont\normalsize\itshape}% -}% -\def\subparagraph{% - \@startsection - {subparagraph}% - {5}% - {\parindent}% - {3.25ex \@plus1ex \@minus .2ex}% - {-1em}% - {\normalfont\normalsize\bfseries}% -}% -\def\section@preprintsty{% - \@startsection - {section}% - {1}% - {\z@}% - {0.8cm \@plus1ex \@minus .2ex}% - {0.5cm}% - {% - \normalfont - \bfseries - \raggedright - }% -}% -\def\subsection@preprintsty{% - \@startsection - {subsection}% - {2}% - {\z@}% - {.8cm \@plus1ex \@minus .2ex}% - {.5cm}% - {% - \normalfont - \bfseries - \raggedright - }% -}% -\def\subsubsection@preprintsty{% - \@startsection - {subsubsection}% - {3}% - {\z@}% - {.8cm \@plus1ex \@minus .2ex}% - {.5cm}% - {% - \normalfont - \itshape\bfseries - \raggedright - }% -}% -\let\frontmatter@footnote@produce\frontmatter@footnote@produce@endnote -\def\@pnumwidth{1.55em} -\def\@tocrmarg {2.55em} -\def\@dotsep{2} -\def\ltxu@dotsep{4.5pt} -\setcounter{tocdepth}{3} -\def\tableofcontents{% - \addtocontents{toc}{\string\tocdepth@munge}% - \print@toc{toc}% - \addtocontents{toc}{\string\tocdepth@restore}% -}% -\def\tocdepth@munge{% - \let\l@section@saved\l@section - \let\l@section\@gobble@tw@ -}% -\def\@gobble@tw@#1#2{}% -\def\tocdepth@restore{% - \let\l@section\l@section@saved -}% -\def\l@part#1#2{\addpenalty{\@secpenalty}% - \begingroup - \set@tocdim@pagenum{#2}% - \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 -}% -\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{}% -\let\toc@pre\toc@pre@auto -\let\toc@post\toc@post@auto -\def\listoffigures{\print@toc{lof}}% -\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}} -\def\listoftables{\print@toc{lot}}% -\let\l@table\l@figure -\def\figurename{\textsc{Fig.}} -\def\tablename{\textsc{Table}} -\long\def\@makecaption#1#2{% - \par - \vskip\abovecaptionskip - \begingroup - \preprintsty@sw{\small}{\footnotesize}\rmfamily - \sbox\@tempboxa{% - \let\\\heading@cr - \@make@capt@title{#1}{#2}% - }% - \@ifdim{\wd\@tempboxa >\hsize}{% - \begingroup - \samepage - \flushing - \let\footnote\@footnotemark@gobble - \@make@capt@title{#1}{#2}\par - \endgroup - }{% - \global \@minipagefalse - \hb@xt@\hsize{\hfil\unhbox\@tempboxa\hfil}% - }% - \endgroup - \vskip\belowcaptionskip -}% -\def\@caption@fignum@sep{\nobreak\hskip.5em plus.2em\ignorespaces}% -\@booleanfalse\raggedcolumn@sw -\def\table@hook{\preprintsty@sw{\small}{\footnotesize}}% -\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}% -\def\@makefntext#1{% - \def\baselinestretch{1}% - \leftskip1em% - \parindent1em% - \noindent - \nobreak\hskip-\leftskip - \hb@xt@\leftskip{% - \hss\@makefnmark\ % - }% - #1% - \par -}% -\prepdef\appendix{% - \par - \let\@hangfrom@section\@hangfrom@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}% - \def\pre@bibdata{\jobname\bibdata@app}% -\def\refname{References}% -\def\rtx@bibsection{% - \@ifx@empty\refname{% - \par\vspace{6\p@ plus 6\p@}% - }{% - \expandafter\section\expandafter*\expandafter{\refname}% - \@nobreaktrue - }% -}% -\let\bibpreamble\@empty -\appdef\setup@hook{% - \bibsep\z@\relax -}% -\def\newblock{\ }% -\appdef\setup@hook{% - \def\bibfont{% - \preprintsty@sw{}{\footnotesize}% - \@clubpenalty\clubpenalty - \labelsep\z@ - }% -}% -\let\place@bibnumber\place@bibnumber@sup -\newenvironment{theindex}{% - \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 - \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} -\expandafter\def\csname rtx@aapm10pt\endcsname{% - \let\@currname@class\@currname - \def\@currname{aps10pt\substyle@post}% - \class@info{Reading file \@currname.\substyle@ext}% - \input{\@currname.\substyle@ext}% - \let\@currname\@currname@class - \class@info{Overriding 10pt}% - \aapmreprint -}% -\expandafter\def\csname rtx@aapm11pt\endcsname{\csname rtx@aapm12pt\endcsname}% -\expandafter\def\csname rtx@aapm12pt\endcsname{% - \let\@currname@class\@currname - \def\@currname{aps12pt\substyle@post}% - \class@info{Reading file \@currname.\substyle@ext}% - \input{\@currname.\substyle@ext}% - \let\@currname\@currname@class - \class@info{Overriding 12pt}% - \aapmpreprint -}% -\def\today{% - \number\day\space - \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\year -}% -\@booleantrue\groupauthors@sw -\@booleanfalse\@affils@sw -\@booleantrue\runinaddress@sw -\def\@journal@default{mph}% -\def\@pointsize@default{12}% - \appdef\setup@hook{% - \preprintsty@sw{}{% - \def\normalsize{% - \@setfontsize\normalsize\@xpt{12}% - \abovedisplayskip 6\p@ plus2\p@ minus5\p@ - \belowdisplayskip \abovedisplayskip - \abovedisplayshortskip \abovedisplayskip - \belowdisplayshortskip \abovedisplayskip - \let\@listi\@listI - }% - \def\small{% - \@setfontsize\small\@ixpt{11}% - \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 - }% - }% - \def\Large{% - \@setfontsize\Large\@xivpt{16pt}% - }% - \def\@listI{% - \leftmargin\leftmargini - \parsep 4\p@ plus2\p@ minus\p@ - \topsep 8\p@ plus2\p@ minus4\p@ - \itemsep\z@ - }% - \textheight = 694.0\p@ - }% - }% -\def\rtx@aapmmph{% - \typeout{Using journal substyle \@journal.}% - \@booleanfalse\authoryear@sw% - \input{fleqn.clo}% - \PassOptionsToPackage{fleqn}{amsmath}% - \AtBeginDocument{\mathindent12pt\relax}% -}% -\appdef\setup@hook{% - \bibpunct{}{}{,}{s}{}{\textsuperscript{,}}% - \let\onlinecite\rev@citealpnum -}% -\@booleantrue\footinbib@sw -\let\place@bibnumber\place@bibnumber@sup -\appdef\setup@hook{% - \footinbib@sw{}{% - \class@warn{Citations are superscript numbers: footnotes must be endnotes; changing to that configuration}% - \@booleantrue\footinbib@sw - }% -}% -\def\present@bibnote#1#2{% - \item[% - \textsuperscript{% - \normalfont% - \Hy@raisedlink{\hyper@anchorstart{frontmatter.#1}\hyper@anchorend}% - \begingroup% - \csname c@\@mpfn\endcsname#1\relax% - \frontmatter@thefootnote% - )\endgroup% - }% - ]#2\par% -}% -\def\make@footnote@endnote{% - \footinbib@sw{% - \ltx@footnote@push - \def\thempfn{Note\thefootnote}% - \let\ltx@footmark\rev@citemark - \let\ltx@foottext\rev@endtext - \appdef\class@enddocumenthook{\auto@bib}% - \let\printendnotes\relax - }{}% -}% -\def\aapmreprint{% -}% -\def\aapmpreprint{% -}% -% \end{macrocode} -% -% -% \begin{macrocode} -%</aapm> -% \end{macrocode} -% -% -% -% \section{SOR: The Socity Journals Style (\texttt{jor} substyle)} -% -% The file \file{sor.rtx} is read in by the \classname{revtex4} document class -% for applying the journal specific changes. User should use \texttt{[sor,jor]} -% for applying the required updates. -% -% -% \begin{macrocode} -%<*sor> -% \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 - \class@info{RevTeX society AIP selected}% -%% -\DeclareOption{jor}{\change@journal{jor}}% -\def\adv{AIP Advances}% -\def\ao{Appl.\ Opt.}% -\def\ap{Appl.\ Phys.}% -\def\apl{Appl.\ Phys.\ Lett.}% -\def\apm{Appl.\ Phys.\ Lett.\ Mater.}% -\def\apj{Astrophys.\ J.}% -\def\bell{Bell Syst.\ Tech.\ J.}% -\def\bmf{Biomicrofluidics}% -\def\cha{Chaos}% -\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\jap{J.\Appl.\Phys.}% -\def\jmp{j.\Math.\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\jpr{j.\Phys.\Chem.\Ref.\Data}% -\def\ltp{Low.\Temp.\Phys.}% -\def\nat{Nature (London)}% -\def\oc{Opt.\ Commun.}% -\def\ol{Opt.\ Lett.}% -\def\pl{Phys.\ Lett.}% -\def\pop{Phys.\Plasmas}% -\def\pof{Phys.\Fluids}% -\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\rsi{Rev.\Sci.\Instrum.}% -\def\rse{J. \Renewable Sustainable Energy}% -\def\pspie{Proc.\ Soc.\ Photo-Opt.\ Instrum.\ Eng.}% -\def\sjqe{Sov.\ J.\ Quantum Electron.}% -\def\vr{Vision Res.}% -\def\sd{Structural Dynamics}% -\def\jor{J.\ Rheol.}% -\def\cp{AIP\ Conference\ Proceedings}% -%% -\DeclareOption{author-numerical}{% - \@booleantrue\authoryear@sw - \@booleantrue\authornum@sw -}% -\DeclareOption{article-title}{% - \@booleanfalse\sor@jtitx@sw -}% -\@booleantrue \sor@jtitx@sw -\@booleanfalse\authoryear@sw -\@booleanfalse\authornum@sw -\@booleanfalse\onecolumn@sw -\@booleanfalse\newonecolumn@sw -\appdef\@bibdataout@rev{\@bibdataout@sor}% -\def\@bibdataout@sor{% - \immediate\write\@bibdataout{% - @CONTROL{% - sor41Control%% TeXSupport: aip - \longbibliography@sw{\true@sw}{\sor@jtitx@sw{\false@sw}{\true@sw}}% - {% - ,pages="1",title="0"% - }{% - ,pages="0",title=""% - }% - }% - }% - \if@filesw - \immediate\write\@auxout{\string\citation{sor41Control}}%% TeXSupport: aip - \fi -}% -\@booleantrue\preprintsty@sw -\@booleantrue\showPACS@sw -\@booleantrue\showKEYS@sw -%% TeXSupport -\let\old@refname\refname -\appdef\setup@hook{% - \preprintsty@sw{}{% - \let\refname\@empty - }% -}% -\appdef\setup@hook{% - \preprintsty@sw{% - \ps@preprint - }{% - \ps@article - }% -}% -\def\ps@preprint{% - \def\@oddhead{\@runningtitle\hfil}% - \def\@evenhead{\@runningtitle\hfil}% - \def\@oddfoot{\hfil\thepage\quad\checkindate\hfil}% - \def\@evenfoot{\hfil\thepage\quad\checkindate\hfil}% - \let\@mkboth\@gobbletwo - \let\sectionmark\@gobble - \let\subsectionmark\@gobble -}% -\def\ps@article{% - \def\@evenhead{\let\\\heading@cr\thepage\quad\checkindate\hfil\@runningtitle}% - \def\@oddhead{\let\\\heading@cr\@runningtitle\hfil\checkindate\quad\thepage}% - \def\@oddfoot{}% - \def\@evenfoot{}% - \let\@mkboth\@gobbletwo - \let\sectionmark\@gobble - \let\subsectionmark\@gobble -}% -\def\@runningtitle{\@shorttitle}% -\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}% -}% -\let\@fnsymbol@latex\@fnsymbol -\let\@fnsymbol\@alph -\def\adjust@abstractwidth{% - \parindent1em\relax - \advance\leftskip.5in\relax - \@totalleftmargin\leftskip - \@afterheading\@afterindentfalse -}% -\def\frontmatter@abstractheading{}% -\def\frontmatter@abstractfont{% - \adjust@abstractwidth -}% -\appdef\setup@hook{% - \preprintsty@sw{% - \@booleantrue\titlepage@sw - \let\section\section@preprintsty - \let\subsection\subsection@preprintsty - \let\subsubsection\subsubsection@preprintsty - }{}% -}% -\def\frontmatter@@indent{% - \skip@\@flushglue - \@flushglue\z@ plus.3\hsize\relax - \raggedright - \advance\leftskip.5in\relax - \@totalleftmargin\leftskip - \@flushglue\skip@ -}% -\def\frontmatter@authorformat{% - \frontmatter@@indent - \sffamily -}% -\renewcommand*\email[1][Electronic mail: ]{\begingroup\sanitize@url\@email{#1}}% -\def\frontmatter@above@affilgroup{% -}% -\def\frontmatter@above@affiliation@script{% - \frontmatter@@indent -}% -\def\frontmatter@above@affiliation{% -}% -\def\frontmatter@affiliationfont{% - \frontmatter@@indent - \preprintsty@sw{}{\small}% - \it -}% -\def\frontmatter@collaboration@above{% -}% -\def\frontmatter@setup{% - \normalfont -}% -\def\frontmatter@title@above{\addvspace{6\p@}}% -\def\frontmatter@title@format{% - \preprintsty@sw{}{\Large}% - \sffamily - \bfseries - \raggedright - \parskip\z@skip -}% -\def\frontmatter@title@below{\addvspace{3\p@}}% -\def\@author@parskip{3\p@}% -\@booleantrue\altaffilletter@sw -\def\frontmatter@makefnmark{% - \@textsuperscript{% - \normalfont\@thefnmark%( - )% - }% -}% -\def\frontmatter@authorbelow{% -\addvspace{3\p@}% -}% -\let\affil@cutoff\tw@ -\def\frontmatter@RRAP@format{% - \addvspace{5\p@}% - \small - \raggedright - \advance\leftskip.5in\relax - \@totalleftmargin\leftskip - \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}% -\def\frontmatter@PACS@format{% - \addvspace{11\p@}% - \adjust@abstractwidth - \parskip\z@skip - \samepage -}% -\def\frontmatter@keys@format{% - \adjust@abstractwidth - \samepage -}% -\def\ps@titlepage{% - \def\@oddhead{% - \@runningtitle - \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 and AIP}{}}% -\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{, }}% -\newenvironment{Lead@inParagraph}{% - \par - \bfseries - \@afterheading\@afterindentfalse -}{% - \par - \hb@xt@\hsize{\hfil\leaders\hrule\hfil\leaders\hrule\hfil\hfil}% -}% -\appdef\frontmatter@init{% - \let@environment{quotation@ltx}{quotation}% - \let@environment{quotation}{Lead@inParagraph}% -}% -\appdef\@startsection@hook{% - \let@environment{quotation}{quotation@ltx}% -}% -\def\@seccntformat#1{\csname the#1\endcsname.\quad}% -\def\@hang@from#1#2#3{#1#2#3}% -\def\section{% - \@startsection - {section}% - {1}% - {\z@}% - {0.8cm \@plus1ex \@minus .2ex}% - {0.5cm}% - {% - \normalfont - \small - \sffamily - \bfseries - \raggedright - }% -}% -\def\@hangfrom@section#1#2#3{\@hangfrom{#1#2}\MakeTextUppercase{#3}}% -\def\@hangfroms@section#1#2{#1\MakeTextUppercase{#2}}% -\def\subsection{% - \@startsection - {subsection}% - {2}% - {\z@}% - {.8cm \@plus1ex \@minus .2ex}% - {.5cm}% - {% - \normalfont - \small - \sffamily - \bfseries - \raggedright - }% -}% -\def\subsubsection{% - \@startsection - {subsubsection}% - {3}% - {\z@}% - {.8cm \@plus1ex \@minus .2ex}% - {.5cm}% - {% - \normalfont - \small - \sffamily - \bfseries - \itshape - \raggedright - }% -}% -\def\paragraph{% - \@startsection - {paragraph}% - {4}% - {\parindent}% - {\z@}% - {-1em}% - {\normalfont\normalsize\itshape}% -}% -\def\subparagraph{% - \@startsection - {subparagraph}% - {5}% - {\parindent}% - {3.25ex \@plus1ex \@minus .2ex}% - {-1em}% - {\normalfont\normalsize\bfseries}% -}% -\def\section@preprintsty{% - \@startsection - {section}% - {1}% - {\z@}% - {0.8cm \@plus1ex \@minus .2ex}% - {0.5cm}% - {% - \normalfont - \bfseries - \raggedright - }% -}% -\def\subsection@preprintsty{% - \@startsection - {subsection}% - {2}% - {\z@}% - {.8cm \@plus1ex \@minus .2ex}% - {.5cm}% - {% - \normalfont - \bfseries - \raggedright - }% -}% -\def\subsubsection@preprintsty{% - \@startsection - {subsubsection}% - {3}% - {\z@}% - {.8cm \@plus1ex \@minus .2ex}% - {.5cm}% - {% - \normalfont - \itshape\bfseries - \raggedright - }% -}% -\let\frontmatter@footnote@produce\frontmatter@footnote@produce@footnote -\def\@pnumwidth{1.55em} -\def\@tocrmarg {2.55em} -\def\@dotsep{2} -\def\ltxu@dotsep{4.5pt} -\setcounter{tocdepth}{3} -\def\tableofcontents{% - \addtocontents{toc}{\string\tocdepth@munge}% - \print@toc{toc}% - \addtocontents{toc}{\string\tocdepth@restore}% -}% -\def\tocdepth@munge{% - \let\l@section@saved\l@section - \let\l@section\@gobble@tw@ -}% -\def\@gobble@tw@#1#2{}% -\def\tocdepth@restore{% - \let\l@section\l@section@saved -}% -\def\l@part#1#2{\addpenalty{\@secpenalty}% - \begingroup - \set@tocdim@pagenum{#2}% - \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 -}% -\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{}% -\let\toc@pre\toc@pre@auto -\let\toc@post\toc@post@auto -\def\listoffigures{\print@toc{lof}}% -\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}} -\def\listoftables{\print@toc{lot}}% -\let\l@table\l@figure -\@booleanfalse\raggedcolumn@sw -\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}% -\def\@makefntext#1{% - \def\baselinestretch{1}% - \leftskip1em% - \parindent1em% - \noindent - \nobreak\hskip-\leftskip - \hb@xt@\leftskip{% - \hss\@makefnmark\ % - }% - #1% - \par -}% -\prepdef\appendix{% - \par - \let\@hangfrom@section\@hangfrom@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}% - \def\pre@bibdata{\jobname\bibdata@app}% -\def\refname{References}% -\def\rtx@bibsection{% - \@ifx@empty\refname{% - \par\vspace{6\p@ plus 6\p@}% - }{% - \expandafter\section\expandafter*\expandafter{\refname}% - \@nobreaktrue - }% -}% -\let\bibpreamble\@empty -\appdef\setup@hook{% - \bibsep\z@\relax -}% -\def\newblock{\ }% -\appdef\setup@hook{% - \def\bibfont{% - \preprintsty@sw{}{\footnotesize}% - \@clubpenalty\clubpenalty - \labelsep\z@ - }% -}% -\let\place@bibnumber\place@bibnumber@sup -\newenvironment{theindex}{% - \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 - \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} -\expandafter\def\csname rtx@sor10pt\endcsname{%% TeXSupport: aip - \let\@currname@class\@currname - \def\@currname{aps10pt\substyle@post}% - \class@info{Reading file \@currname.\substyle@ext}% - \input{\@currname.\substyle@ext}% - \let\@currname\@currname@class - \class@info{Overriding 10pt}% - \sorreprint -}% -\expandafter\def\csname rtx@sor11pt\endcsname{\csname rtx@sor12pt\endcsname}% -\expandafter\def\csname rtx@sor12pt\endcsname{% - \let\@currname@class\@currname - \def\@currname{aps12pt\substyle@post}% - \class@info{Reading file \@currname.\substyle@ext}% - \input{\@currname.\substyle@ext}% - \let\@currname\@currname@class - \class@info{Overriding 12pt}% - \sorpreprint -}% -\def\today{% - \number\day\space - \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\year -}% - \clo@superscriptaddress -\def\@journal@default{cha}% -\def\@pointsize@default{12}% -\@booleanfalse\pagerestrict@sw% -%% -\def\rtx@sorjor{% - \typeout{Using journal substyle \@journal.}% - \@booleantrue\authoryear@sw% - \@booleantrue\twoside@sw\@mparswitchfalse% -}% -%% -\@booleantrue\footinbib@sw -\let\old@place@bibnumber\place@bibnumber -\let\place@bibnumber\place@bibnumber@sup -\appdef\setup@hook{% - \authoryear@sw{% - \sor@jtitx@sw{% - \def\@bibstyle{aipauth\substyle@post}% - }{% - \def\@bibstyle{aipauth\substyle@post}% - }% - \authornum@sw{% - \bibpunct{}{}{,}{s}{}{\textsuperscript{,}}% - \let\onlinecite\rev@citealpnum - }{% - \bibhang10\p@ - \bibpunct{(%) - }{%( - )}{; }{a}{,}{,}% - \@booleanfalse\footinbib@sw - \let\NAT@mcite\@ne - \let\NAT@sort\z@ - \def\NAT@cmprs{\z@}% - \let\NAT@def@citea\rtx@def@citea - \let\NAT@def@citea@close\rtx@def@citea@close - }% - }{% - \sor@jtitx@sw{% - \def\@bibstyle{sornum\substyle@post}% - }{% - \def\@bibstyle{sornum\substyle@post}% - }% - \bibpunct{}{}{,}{s}{}{\textsuperscript{,}}% - \let\onlinecite\rev@citealpnum - }% -}% -\def\make@footnote@endnote{% - \footinbib@sw{% - \authoryear@sw{\authornum@sw{\false@sw}{\true@sw}}{\false@sw}% - {}{% - \ltx@footnote@push - \def\thempfn{Note\thefootnote}% - \let\ltx@footmark\rev@citemark - \let\ltx@foottext\rev@endtext - \appdef\class@enddocumenthook{\auto@bib}% - \let\printendnotes\relax - }% - }{}% -}% -\def\sorreprint{% -}% -\def\sorpreprint{% -}% -%% -\xdef\t@talAU{0}% TeXSupport -\def\frontmatter@author@produce@script{% - \begingroup - \let\@author@present\@author@present@script - \frontmatterverbose@sw{\typeout{\string\frontmatter@author@produce@script:}\say\@AAC@list\say\@AFF@list\say\@AFG@list}{}% - \let\AU@temp\@empty - \@tempcnta\z@ - \let\AF@opr \@gobble - \def\AU@opr{\@author@count\@tempcnta}% - \def\CO@opr{\@collaboration@count\AU@temp\@tempcnta}% - \@AAC@list% - \xdef\t@talAU{\the\@tempcnta}% TeXSupport - \expandafter\CO@opr\@author@cleared - \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 - \begingroup - \frontmatter@above@affiliation@script - \let\AFF@opr \@affil@script - \@AFF@list - \frontmatter@footnote@produce - \par - \endgroup - \endgroup -}% -\def\doauthor#1#2#3{% TeXSupport - \ignorespaces#1\unskip\@listcomma - \begingroup - \ifnum\t@talAU=1\else\ifnum\c@affil=\@ne\relax\else#3\fi\fi% TeXSupport - \@if@empty{#2}{\endgroup{}{}}{\endgroup{\ifnum\t@talAU=1\else\ifnum\c@affil=\@ne\relax\else\comma@space\fi\fi}{}\frontmatter@footnote{#2}}% TeXSupport - \space \@listand -}% -%% -\appdef\rtx@require@packages{% -%% -%% -%% Journal of Rheology (jor) -%% -\def\jnl@jor{jor}% -\preprintsty@sw{}% - {\ifx\@journal\jnl@jor% - \typeout{SOR Info: \@journal\space journal style Single column, 2013/10/24}% - \@booleanfalse\twocolumn@sw% - \appdef\setup@hook{% - \twoside@sw{% - \oddsidemargin 28pt% - \evensidemargin 28pt% - \marginparwidth 30pt% - }{% - \oddsidemargin 28pt - \evensidemargin 0pt - \marginparwidth 44pt - }% - }% - \marginparsep 10pt - \topmargin -17pt - \headheight 12pt - \headsep 25pt - \topskip 10pt - \splittopskip\topskip - \footskip 30pt - \textheight=53.5pc - \textwidth 33pc - \columnsep 10pt - \def\title@column#1{% - \minipagefootnote@init - \begingroup - \let\@footnotetext\frontmatter@footnotetext - \ltx@no@footnote - #1% - \endgroup - \minipagefootnote@foot - }% -\def\frontmatter@title@format{% - \preprintsty@sw{}{\Large}% - \sffamily% - \bfseries% - \leftskip0pt plus1fill% - \rightskip0pt plus1fill% - \parindent\z@% -%% \raggedright% - \parskip\z@skip% -}% -\def\frontmatter@@indent{% - \skip@\@flushglue - \@flushglue\z@ plus.3\hsize\relax - \leftskip0pt plus1fill% - \rightskip0pt plus1fill% - \parindent\z@% -%% \raggedright -%% \advance\leftskip.5in\relax - \@totalleftmargin\leftskip - \@flushglue\skip@ -}% -%% \def\frontmatter@authorformat{% -%% \frontmatter@@indent -%% \sffamily -%% }% -\def\frontmatter@RRAP@format{% - \addvspace{5\p@}% - \small - \leftskip0pt plus1fill% - \rightskip0pt plus1fill% - \parindent\z@% -%%\raggedright -%%\advance\leftskip.5in\relax - \@totalleftmargin\leftskip - \everypar{% - \hbox\bgroup(\@gobble@leavemode@uppercase%) - }% - \def\par{% - \@ifvmode{}{%( - \unskip)\egroup\@@par - }% - }% -}% -\def\frontmatter@abstractfont{}% -\def\frontmatter@abstractwidth{\textwidth} -\def\abstractname{Synopsis} -\def\frontmatter@abstractheading{% - \begingroup - \centering\large - {\bfseries\abstractname} - \par\vskip.25\baselineskip - \endgroup -}% -\appdef\setup@hook{% - \preprintsty@sw{}{% - \let\refname\old@refname%\@empty - }% -}% -% -\def\ps@article{% - \def\@evenhead{\let\\\heading@cr\sffamily\thepage\quad\checkindate\hfil\@runningtitle\hfil}% - \def\@oddhead{\let\\\heading@cr\hfil\sffamily\@runningtitle\hfil\checkindate\quad\thepage}% - \def\@oddfoot{}% - \def\@evenfoot{}% - \let\@mkboth\@gobbletwo - \let\sectionmark\@gobble - \let\subsectionmark\@gobble -}% -\def\@make@capt@title#1#2{% - \@ifx@empty\float@link{\@firstofone}{\expandafter\href\expandafter{\float@link}}% - {{\bfseries#1}}\@caption@fignum@sep#2% -}% -\def\@caption@fignum@sep{{\bfseries.} }% -%% - \fi% -} -}% -% \end{macrocode} -% -% -% \begin{macrocode} -%</sor> -% \end{macrocode} -% -% -% -% -% \Finale -% %Here ends the programmer's documentation. -% \endinput -% -\endinput diff --git a/macros/latex/contrib/revtex/source/ltxdocext.dtx b/macros/latex/contrib/revtex/source/ltxdocext.dtx deleted file mode 100644 index d3d8b772f5..0000000000 --- a/macros/latex/contrib/revtex/source/ltxdocext.dtx +++ /dev/null @@ -1,1259 +0,0 @@ -% \iffalse meta-comment balanced on line 108 -% ltxdocext.dtx: package to extend the ltxdoc class of standard LaTeX -% Copyright (c) 2008 Arthur Ogawa -% -% Disclaimer -% This file is distributed WITHOUT ANY WARRANTY; -% without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -% License -% You may distribute this file under the conditions of the -% LaTeX Project Public License 1.3c or later -% (http://www.latex-project.org/lppl.txt). -% ReadMe -% For the documentation and more detailed instructions for -% installation, typeset this document with \LaTeX. -% Maintenance Status -% This work has the LPPL maintenance status "maintained"; -% Current Maintainer of this work is Arthur Ogawa. -% -% This work consists of the main source file ltxdocext.dtx -% and the derived files -% ltxdocext.sty, ltxdocext.pdf, ltxdocext.ins, ltxdocext.drv. -% Distribution: -% CTAN:macros/latex/contrib/revtex/ -% -% Unpacking: -% tex ltxdocext.dtx -% -% Documentation: -% latex ltxdocext.dtx; ... -% -% Program calls to get the documentation (example): -% pdflatex ltxdocext.dtx -% makeindex -s gind.ist ltxdocext.idx -% makeindex -s gglo.ist -o ltxdocext.gls ltxdocext.glo -% pdflatex ltxdocext.dtx -% makeindex -s gind.ist ltxdocext.idx -% pdflatex ltxdocext.dtx -% -% Installation: -% TDS:doc/latex/revtex/ -% TDS:source/latex/revtex/ -% TDS:tex/latex/revtex/ -% -% Thanks, Heiko! -% This method of letting a single .dtx file serve as both -% documentation (via latex) and installer (via tex) follows -% the example of Heiko Oberdiek. Thanks! -%<*ignore> -\begingroup - \def\x{LaTeX2e}% -\expandafter\endgroup -\ifcase - 0\expandafter\ifx\csname processbatchFile\endcsname\relax\else1\fi\ifx\fmtname\x\else 1\fi - \relax -\else - \csname fi\endcsname -%</ignore> -%<*install> -\input docstrip -\preamble - -This is a generated file; -altering it directly is inadvisable; -instead, modify the original source file. -See the URL in the file README. - -License - You may distribute this file under the conditions of the - LaTeX Project Public License 1.3c or later - (http://www.latex-project.org/lppl.txt). - - This file is distributed WITHOUT ANY WARRANTY; - without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. - -\endpreamble -\askforoverwritefalse -\keepsilent - \generate{% - %{ignore} -%\usedir{tex/latex/revtex}% - \file{ltxdocext.sty}{% - \from{ltxdocext.dtx}{package,kernel}% - }% - % \file{acrofont.sty}{\from{ltxdocext.dtx}{fonts}}% - }% -\ifToplevel{ -\Msg{***********************************************************} -\Msg{*} -\Msg{* To finish the installation, please move} -\Msg{* ltxdocext.sty} -\Msg{* into a directory searched by TeX;} -\Msg{* in a TDS-compliant installation:} -\Msg{* texmf/tex/macros/latex/revtex/.} -\Msg{*} -\Msg{* To produce the documentation, - run ltxdocext.dtx through LaTeX.} -\Msg{*} -\Msg{* Happy TeXing} -\Msg{***********************************************************} -} -\endbatchfile -%</install> -%<*ignore> -\fi -%</ignore> -% \fi -% -% \GetFileInfo{ltxdocext.dtx} -% -% \iffalse ltxdoc klootch -%<*ltxdocext> -%%% @LaTeX-file{ -%%% filename = "ltxdocext.dtx", -%%% version = "1.0a", -%%% date = "2018/12/26", -%%% author = "Arthur Ogawa (mailto:arthur_ogawa at sbcglobal.net), -%%% commissioned by the American Physical Society. -%%% ", -%%% copyright = "Copyright (C) 1999, 2008 Arthur Ogawa, -%%% distributed under the terms of the -%%% LaTeX Project Public License, see -%%% ftp://ctan.tug.org/macros/latex/base/lppl.txt -%%% ", -%%% address = "Arthur Ogawa, -%%% USA", -%%% telephone = "", -%%% FAX = "", -%%% email = "mailto colon arthur_ogawa at sbcglobal.net", -%%% codetable = "ISO/ASCII", -%%% keywords = "latex, ltxdoc", -%%% supported = "yes", -%%% abstract = "extensions to the ltxdoc class", -%%% } -%</ltxdocext> -% \fi -% -% \iffalse ltxdoc klootch -% The following references the \file{README-LTXDOCEXT} file, -% which contains basic information about this package. -% The contents of this file are generated when -% you typeset the programmer's documentation. -% Search on "{filecontents*}{README-LTXDOCEXT}" to locate it. -% \fi\input{README-LTXDOCEXT}% -% -% \subsection{Bill of Materials} -% -% Following is a list of the files in this distribution arranged -% according to provenance. -% -% \subsubsection{Primary Source}% -% One single file generates all. -%\begin{verbatim} -%ltxdocext.dtx -%\end{verbatim} -% -% \subsubsection{Generated by \texttt{latex ltxdocext.dtx}}% -% Typesetting the source file under pdflatex -% generates the readme and the documentation. -%\begin{verbatim} -%README ltxdocext.pdf -%\end{verbatim} -% -% \subsubsection{Generated by \texttt{tex ltxdocext.ins}}% -% Typesetting this file with \TeX\ generates -% the package file. -%\begin{verbatim} -%ltxdocext.sty acrofont.sty -%\end{verbatim} -% -% \subsubsection{Documentation}% -% The following are the online documentation: -% \begin{verbatim} -%ltxdocext.pdf -% \end{verbatim} -% -% \subsubsection{Auxiliary}% -% The following are auxiliary files generated -% in the course of running \LaTeX: -% \begin{verbatim} -%ltxdocext.aux ltxdocext.idx ltxdocext.ind ltxdocext.log ltxdocext.toc -% \end{verbatim} -% -% \section{Code common to all modules}% -% -% We want to require only one place in this file -% where the version number is stated, -% and we also want to ensure that the version -% number is embedded into every generated file. -% -% Now we declare that -% these files can only be used with \LaTeXe. -% An appropriate message is displayed if -% a different \TeX{} format is used. -% \begin{macrocode} -%<*driver|package|fonts> -\NeedsTeXFormat{LaTeX2e}[1995/12/01]% -%</driver|package|fonts> -% \end{macrocode} -% As desired, the following modules all -% take common version information: -% \begin{macrocode} -%<package>\ProvidesFile{ltxdocext.sty}% -%<fonts>\ProvidesFile{acrofont.sty}% -%<*driver> -\expandafter\ProvidesFile\expandafter{\jobname.dtx}% -%</driver> -% \end{macrocode} -% -% The following line contains, for once and for all, -% the version and date information. -% By various means, this information is reproduced -% consistently in all generated files and in the -% typeset documentation. -% \begin{macrocode} -%<version> - [2018/12/26 1.0a ltxdoc extensions package]% \fileversion -% \end{macrocode} -% -% -% \section{The driver module \texttt{doc}} -% -% This module, consisting of the present section, -% typesets the programmer's documentation, -% generating the \file{README-LTXDOCEXT} as required. -% -% Because the only uncommented-out lines of code at the beginning of -% this file constitute the \file{doc} module itself, -% we can simply typeset the \file{.dtx} file directly, -% and there is thus rarely any need to -% generate the ``doc'' {\sc docstrip} module. -% Module delimiters are nonetheless required so that -% this code does not find its way into the other modules. -% -% The \enve{document} command concludes the typesetting run. -% -% \begin{macrocode} -%<*driver> -% \end{macrocode} -% -% \subsection{The Preamble} -% The programmers documentation is formatted -% with the \classname{ltxdoc} document class, with local customizations, -% and with the usual code line indexing. -% \begin{macrocode} -\documentclass[draft]{ltxdoc} -\RequirePackage{ltxdocext}% -\RequirePackage[colorlinks=true,linkcolor=blue]{hyperref}% -%\expandafter\ifx\csname package@font\endcsname\@undefined\else -% \expandafter\RequirePackage\expandafter{\csname package@font\endcsname}% -%\fi -\CodelineIndex\EnableCrossrefs % makeindex -s gind.ist ltxdocext -\RecordChanges % makeindex -s gglo.ist -o ltxdocext.gls ltxdocext.glo -% \end{macrocode} -% -% \subsubsection{Docstrip and info directives} -% We use so many {\sc docstrip} modules that we set the -% \texttt{StandardModuleDepth} counter to 1. -% \begin{macrocode} -\setcounter{StandardModuleDepth}{1} -% \end{macrocode} -% The following command retrieves the date and version information -% from this file. -% \begin{macrocode} -\expandafter\GetFileInfo\expandafter{\jobname.dtx}% -% \end{macrocode} -% -% \subsection{The ``Read Me'' File} -% As promised above, here is the contents of the -% ``Read Me'' file. That file serves a double purpose, -% since it also constitutes the beginining of the -% programmer's documentation. What better thing, after -% all, to have appear at the beginning of the -% typeset documentation? -% -% A good discussion of how to write a ReadMe file can be found in -% Engst, Tonya, ``Writing a ReadMe File? Read This'' -% \emph{MacTech} October 1998, p. 58. -% -% Note the appearance of the -% \cmd\StopEventually\ command, which marks the -% dividing line between the user documentation -% and the programmer documentation. -% -% The usual user will not be asked to -% do a full build, not to speak -% of the bootstrap. -% Instructions for carrying these processes -% begin the programmer's manual. -% -% \begin{macrocode} -\begin{filecontents*}{README-LTXDOCEXT} -\title{% - Extensions to the \classname{ltxdoc} class% - \thanks{% - This file has version number \fileversion, - last revised \filedate.% - }% - \thanks{% - Version \fileversion\ \copyright\ 2019 American Physical Society - }% -}% -\author{% -Arthur Ogawa% - \thanks{\texttt{mailto:arthur\_ogawa at sbcglobal.net}}% -}% -%\iffalse -% For version number and date, -% search on "\fileversion" in the .dtx file, -% or see the end of the README file. -%\fi - -\maketitle - -This file embodies the \classname{ltxdocext} package, -the implementation and its user documentation. - -The distribution point for this work is -\url{journals.aps.org/revtex}, -which contains prebuilt runtime files, documentation, and full source, -ready to add to a TDS-compliant \TeX\ installation. - -The \classname{ltxdocext} package was commissioned by the American Physical Society -and is distributed under the terms of the \LaTeX\ Project Public License, -the same license under which all the portions of \LaTeX\ itself are distributed. -Please see \url{http://ctan.tug.org/macros/latex/base/lppl.txt} for details. - -To use this document class, you must have a working -\TeX\ installation equipped with \LaTeXe\ -and possibly pdftex and Adobe Acrobat Reader or equivalent. - -To install, retrieve the distribution, -unpack it into a directory on the target computer, -and move the files \file{ltxdocext.sty} and \file{acrofont.sty} -into a location in your filesystem where they will be found by \LaTeX. - -If you will be using the \classname{acrofont} package, you must -also install the virtual fonts -\file{zpsynocmrv}, \file{zptmnocmr}, -\file{zptmnocmrm}, and \file{zpzcnocmry}. -The corresponding \file{.tfm}, \file{.vf}, and \file{.vpl} -files are part of this distribution. - -To use, read the user documentation \file{ltxdocext.pdf}. -The \file{.dtx} file, \file{ltxdocext.dtx}, constitutes -in itself an instance of use of the \classname{ltxdocext} -package and the \classname{acrofont} package. - -\tableofcontents - -\section{Processing Instructions} - -The package files \file{ltxdocext.sty} and \file{acrofont.sty} -are generated from this file, \file{ltxdocext.dtx}, -using the {\sc docstrip} facility of \LaTeX -via |tex ltxdocext.dtx| (Note: do \emph{not} use \LaTeX\ for this step). -The typeset documentation that you are now reading is generated from -the same file by typesetting it with \LaTeX\ or pdftex -via |latex ltxdocext.dtx| or |pdflatex ltxdocext.dtx|. - -\subsection{Build Instructions} - -You may bootstrap this suite of files solely from \file{ltxdocext.dtx}. -Prepare by installing \LaTeXe\ (and either tex or pdftex) on your computer, -then carry out the following steps: -\begin{enumerate} -\item -Within an otherwise empty directory, -typeset \file{ltxdocext.dtx} with \TeX\ or pdftex; -thereby generating the package file \file{ltxdocext.sty}, -and the package file \file{acrofont.sty}. -Make sure that {\sc docstrip} receives permission -to overwrite existing versions of these packages. -\item -Now -typeset \file{ltxdocext.dtx} with \LaTeX\ or pdflatex; -you will obtain the typeset documentation you are now reading, -along with -the file \file{README}. - -Note: you will have to run \LaTeX, then -\file{makeindex} \texttt{-s gind.ist ltxdocext.idx}, then -\file{makeindex} \texttt{-s gglo.ist -o ltxdocext.gls ltxdocext.glo}, then -\LaTeX\ again in order to obtain a valid index and table of contents. -\item -Install the following files into indicated locations within your -TDS-compliant \texttt{texmf} tree (you may need root access): -\begin{itemize} -\item -\file{$TEXMF/}\file{tex/}\file{latex/}\file{revtex/}\classname{ltxdocext.sty} and -\file{$TEXMF/}\file{tex/}\file{latex/}\file{revtex/}\classname{acrofont.sty} -\item -\file{$TEXMF/}\file{source/}\file{latex/}\file{revtex/}\classname{ltxdocext.dtx} -\item -\file{$TEXMF/}\file{doc/}\file{latex/}\file{revtex/}\classname{ltxdocext.pdf} -\end{itemize} -where \file{$TEXMF/} stands for \file{texmf-local/}, or some other \texttt{texmf} tree -in your installation. -\item -Run \texttt{mktexlsr} on \file{$TEXMF/} (you may need root access). -\item -Build and installation are now complete; -now put a \cmd\usepackage\texttt{\{ltxutil\}} in your document preamble! -\end{enumerate} - -\subsection{Change Log} -\changes{1.0a}{2018/12/12}{(MD) Updated name of README file and use standard fonts when typesetting}% - - -\end{filecontents*} -% \end{macrocode} -% -% \subsection{The Document Body} -% -% Here is the document body, containing only a -% \cmd\DocInput\ directive---referring to this very file. -% This very cute self-reference is a common \classname{ltxdoc} idiom. -% \begin{macrocode} -\begin{document}% -\expandafter\DocInput\expandafter{\jobname.dtx}% -\PrintChanges -\end{document} -%</driver> -% \end{macrocode} -% -% \section{Using the \classname{ltxdoc} and \classname{acrofont} packages}% -% These packages are an adjunct to the -% standard \LaTeX\ \classname{ltxdoc} class and may be -% simply invoked as follows: -%\begin{verbatim} -%\documentclass[draft]{ltxdoc} -%\RequirePackage{ltxdocext}% -%\RequirePackage{acrofont}% -%\CodelineIndex\EnableCrossrefs -%\end{verbatim} -% -% Your document should simply cleave to the standards of the -% \classname{ltxdoc} class, with extensions and alterations as noted. -% -% \subsection{Extensions to the \classname{ltxdoc} class}% -% -% \subsubsection{Extensions to the \env{verbatim} environment and \cs{verb} command}% -% -% The delimiters \verb$<<$ and \verb$>>$ within the scope of the verbatim environment -% or within the argument of the \cmd\verb\ command produce -% italics surrounded by angle brackets. -% This typographic convention usually indicates -% \emph{metalanguage}, i.e., a placeholder. -% -% To obtain the angle bracket character per se, -% double the character, viz., ``\verb$the delimiter \verb+<<<<+$''. -% -% \subsubsection{The -\texttt{matter} Commands Work} -% The sectioning commands \cmd\frontmatter, \cmd\mainmatter, and \cmd\backmatter -% of the standard \LaTeX\ \classname{book} class are operative in the -% \classname{ltxdoc} class. -% -% \subsubsection{The \cs{GetFileInfo} command}\label{sec:GetFileInfo} -% You can use the \cmd\GetFileInfo\ command to extract -% the date, version, and file info of a file which has registered itself -% via the \cmd\ProvidesFile\ or \cmd\ProvidesClass\ command -% (employing the optional argument thereto). -% -% For instance, if your document contains the following: -%\begin{verbatim} -%\RequirePackage{ltxdocext}% -%\GetFileInfo{ltxdocext.sty}% -%\end{verbatim} -% then the following control sequence names will have -% a value corresponding to that package's \cmd\ProvidesFile\ -% command: -% \cmd\filedate: the file's date, -% \cmd\fileversion: the file's version, and -% \cmd\fileinfo: the file's info. -% -% \subsubsection{Self-Indexing Commands}% -% Certain commands automatically produce an index entry -% (or several related entries) according to the meaning. -% -% \begin{unnumtable} -% \begin{tabular}{ll} -% meta-text &\cmd\marg\arg{text}\\ -% command &\cmd\cmd\cmd\csname\\ -% environment name &\cmd\env\arg{name}\\ -% \cmd\begin\verb`{foo}`&\cmd\envb\arg{foo}\\ -% \cmd\end\verb`{foo}` &\cmd\enve\arg{foo}\\ -% argument &\cmd\arg\arg{name}\\ -% optional &\cmd\oarg\arg{name}\\ -% filename &\cmd\file\arg{name}\\ -% url &\cmd\url\arg{name}\\ -% document class &\cmd\classname\arg{name}\\ -% document substyle &\cmd\substyle\arg{name}\\ -% class option &\cmd\classoption\arg{name} -% \end{tabular} -% \end{unnumtable} -% -% \subsubsection{Unnumbered Tables}% -% -% When your documentation requires the use of an unnumbered table, -% use the \env{unnumtable} environment: -% \begin{verbatim} -%\begin{unnumtable} -%\begin{tabular}{ll} -%<table rows> -%\end{tabular} -%\end{unnumtable} -% \end{verbatim} -% -% \subsubsection{Structuring Tables}% -% The commands \cmd\toprule, \cmd\colrule, and \cmd\botrule -% allow you to mark the beginning of the column heads -% the beginning of the table body, and the end of -% the table body, respectively. -% In context, -% \begin{verbatim} -%\begin{tabular}{ll} -%\toprule -%<table head rows> -%\colrule -%<table rows> -%\botrule -%\end{tabular} -% \end{verbatim} -% -% \subsubsection{A Sectioning Command Below \cs{subsection}}% -% The \cmd\subsubsection\ command is defined. -% -% -% \subsection{Alterations to the \classname{ltxdoc} class}% -% The following involve no new markup, but they -% do change the appearance of your formatted documentation: -% \begin{enumerate} -% \item -% Using the \classname{acrofont} package causes your -% document to be formatted using the standard -% Acrobat fonts to the greatest extent possible. -% This means that for most documents, Computer Modern -% is not used at all. -% Math that unavoidable must use CM still exists, however. -% \item -% An index will be produced at the end of the document -% without your needing to explicitly mark it up, and -% it will have an entry in the TOC. -% \item -% The \env{quote} environment has a slightly smaller left margin. -% \item -% Array columns are set tight by default. -% \item -% A host of \cmd\DoNotIndex\ directives are invoked. -% I intend this list to grow to encompass -% even more commands. Send me your suggestions. -% \end{enumerate} -% -% -% -%\StopEventually{} -% -% \section{Extensions to the ltxdoc class} -% The \file{package} {\sc docstrip} module comprises the -% package \classname{ltxdocext.sty}, which provides extensions -% to the standard \LaTeX\ \classname{ltxdoc} class. -% -% \subsection{Beginning of the \file{package} {\sc docstrip} module} -% This portion of code is only present in the \LaTeX\ package (\texttt{.sty} file), -% not in the kernel portion. -% \begin{macrocode} -%<*package> -\def\class@name{ltxdocext}% -\expandafter\PackageInfo\expandafter{\class@name}{% - An extension to the \protect\LaTeXe\space ltxdoc class - by A. Ogawa (arthur\_ogawa sbcglobal.net)% -}% -%</package> -% \end{macrocode} -% -% \subsection{Beginning of the \file{kernel} {\sc docstrip} module} -% -% The bulk of the code is the kernel portion; a brief tail of \file{package} code then follows. -% \begin{macrocode} -%<*kernel> -% \end{macrocode} -% -% \subsection{Incorporate \classname{ltxguide.cls} extensions} -% -% Code extracted from \classname{ltxguide.cls}, by Alan Jeffrey. -% ``This code stolen from \classname{ltxguide.cls}: -% Some hacks with verbatim... NB: this would be better done with the -% verbatim package, but this document has to run on any \LaTeX -% installation.'' -% \begin{macrocode} -\RequirePackage{verbatim}% -\let\o@verbatim\verbatim -\def\verbatim{% - \ifhmode\unskip\par\fi -% \nopagebreak % Overridden by list penalty - \ifx\@currsize\normalsize - \small - \fi - \o@verbatim -}% -% \end{macrocode} -% -% Here we extend the font-setting command to include making \texttt{<>} active -% (i.e., adjusting the input encoding). -% \begin{macrocode} -\renewcommand \verbatim@font {% - \normalfont \ttfamily - \catcode`\<=\active - \catcode`\>=\active -}% -% \end{macrocode} -% -% Make \verb$|...|$ a synonym for \cmd\verb\verb$|...|$. -% \begin{macrocode} -\RequirePackage{shortvrb} -\AtBeginDocument{% - \MakeShortVerb{\|}% -}% -% \end{macrocode} -% -% Make active bracket characters produce italics surrounded by angle brackets -% (used in \env{verbatim} and \cmd\verb). -% \verb|<<| produces a less-than, and \verb|>>| produces a greater-than. -% \begin{macrocode} -\begingroup - \catcode`\<=\active - \catcode`\>=\active - \gdef<{\@ifnextchar<\@lt\@meta} - \gdef>{\@ifnextchar>\@gt\@gtr@err} - \gdef\@meta#1>{\marg{#1}} - \gdef\@lt<{\char`\<} - \gdef\@gt>{\char`\>} -\endgroup -\def\@gtr@err{% - \ClassError{ltxguide}{% - Isolated \protect>% - }{% - In this document class, \protect<...\protect> - is used to indicate a parameter.\MessageBreak - I've just found a \protect> on its own. - Perhaps you meant to type \protect>\protect>? - }% -} -\def\verbatim@nolig@list{\do\`\do\,\do\'\do\-} -% \end{macrocode} -% End of code stolen from \file{ltxguide.cls}. Thanks, Alan. -% -% Add functionality from doc.dtx: -% (code stolen from doc.dtx): -% \begin{macrocode} -\def\GetFileInfo#1{% - \def\filename{#1}% - \def\@tempb##1 ##2 ##3\relax##4\relax{% - \def\filedate{##1}% - \def\fileversion{##2}% - \def\fileinfo{##3}}% - \edef\@tempa{\csname ver@#1\endcsname}% - \expandafter\@tempb\@tempa\relax? ? \relax\relax} -% \end{macrocode} -% (end of code stolen from doc.dtx. Thanks FMi.) -% -% Various forms of self-indexing commands: -% \begin{macrocode} -\DeclareRobustCommand{\marg}[1]{% - \meta{#1}% - \index{#1=\string\meta{#1} placeholder}\index{placeholder>#1=\string\meta{#1}}% -}% -\DeclareRobustCommand\meta[1]{% - \mbox{\LANGLE\itshape#1\/\RANGLE}% -}% -\def\LANGLE{$\langle$}% -\def\RANGLE{$\rangle$}% -\DeclareRobustCommand{\arg}[1]{% - {\ttfamily\string{}\meta{#1}{\ttfamily\string}}% - \index{#1=\string\ttt{#1}, argument}\index{argument>#1=\string\ttt{#1}}% -}% -\let\oarg\undefined -\DeclareRobustCommand{\oarg}[1]{% - {\ttfamily[%] - }\meta{#1}{\ttfamily%[ - ]}% - \index{#1=\string\ttt{#1}, optional argument}% - \index{argument, optional>#1=\string\ttt{#1}}% -}% -\DeclareRobustCommand\cmd{\begingroup\makeatletter\@cmd}% -\long\def\@cmd#1{% - \endgroup - \cs{\expandafter\cmd@to@cs\string#1}% - \expandafter\cmd@to@index\string#1\@nil -}% -\def\cmd@to@cs#1#2{\char\number`#2\relax}% -\def\cmd@to@index#1#2\@nil{% - \index{#2=\string\cmd#1#2}%\index{command>#2=\string\cmd#1#2}% -}% -\DeclareRobustCommand\cs[1]{{\ttfamily\char`\\#1}}% -\def\scmd#1{% - \cs{\expandafter\cmd@to@cs\string#1}% - \expandafter\scmd@to@index\string#1\@nil -}% -\def\scmd@to@index#1#2\@nil#3{% - \index{\string$#3=\string\cmd#1#2---#3}% -%\index{command>\string$#3=\string\cmd#1#2---#3}% -}% -\DeclareRobustCommand\env{\name@idx{environment}}% -\DeclareRobustCommand\envb[1]{% - {\ttfamily\string\begin\string{}\env{#1}{\ttfamily\string}}% -}% -\DeclareRobustCommand\enve[1]{{\ttfamily\string\end\string{}\env{#1}{\ttfamily\string}}}% -\DeclareRobustCommand{\file}{\begingroup\@sanitize\@file}% -\long\def\@file#1{\endgroup - {\ttfamily#1}% - \index{#1=\string\ttt{#1}}\index{file>#1=\string\ttt{#1}}% -}% -\DeclareRobustCommand\substyle{\name@idx{document substyle}}% -\DeclareRobustCommand\classoption{\name@idx{document class option}}% -\DeclareRobustCommand\classname{\name@idx{document class}}% -\def\name@idx#1#2{% - {\ttfamily#2}% - \index{#2\space#1=\string\ttt{#2}\space#1}\index{#1>#2=\string\ttt{#2}}% -}% -\DeclareRobustCommand\url@ltxdocext{\begingroup\catcode`\/\active\catcode`\.\active\catcode`\:\active\@url}% -\AtBeginDocument{% - \ifx\url\undefined\let\url\url@ltxdocext\fi -}% -\def\@url#1{% - \url@break{\ttfamily#1}% - \url@char\edef\@tempa{#1=\string\url{#1}}% - \expandafter\index\expandafter{\@tempa}% - \expandafter\index\expandafter{\expandafter u\expandafter r\expandafter l\expandafter >\@tempa}% - \endgroup -}% -{\catcode`\:\active\aftergroup\def\aftergroup:}{\active@colon}% -\def\colon@break{\colon@char\allowbreak}% -\def\colon@char{:}% -{\catcode`\/\active\aftergroup\def\aftergroup/}{\active@slash}% -\def\slash@break{\slash@char\allowbreak}% -\def\slash@char{/}% -{\catcode`\.\active\aftergroup\def\aftergroup.}{\active@dot}% -\def\dot@break{\dot@char\allowbreak}% -\def\dot@char{.}% -\def\url@break{\let\active@slash\slash@break\let\active@dot\dot@break\let\active@colon\colon@break}% -\def\url@char{\let\active@slash\slash@char\let\active@dot\dot@char\let\active@colon\colon@char}% -% \end{macrocode} -% -% \subsection{Changes to the base class of the ltxdoc class} -% Modify \env{theindex} environment so that it produces a TOC entry -% \begin{macrocode} -\renewenvironment{theindex} - {\if@twocolumn - \@restonecolfalse - \else - \@restonecoltrue - \fi - \columnseprule \z@ - \columnsep 35\p@ -\def\see##1##2{\textit{See} ##1}% -\def\seealso##1##2{\textit{See also} ##1}% -\long\def\cmd##1{\cs{\expandafter\cmd@to@cs\string##1}}% -\def\@url##1{\url@break\ttt{##1}\endgroup}% -\def\ttt{\begingroup\@sanitize\ttfamily\@ttt}% -\def\@ttt##1{##1\endgroup}% -\mathchardef\save@secnumdepth\c@secnumdepth -\c@secnumdepth\m@ne - \twocolumn[\section{\indexname}]% -% \@mkboth{\MakeUppercase\indexname}% -% {\MakeUppercase\indexname}% -\c@secnumdepth\save@secnumdepth - \thispagestyle{plain}\parindent\z@ - \parskip\z@ \@plus .3\p@\relax - \let\item\@idxitem} - {\if@restonecol\onecolumn\else\clearpage\fi} -\renewenvironment{quote} - {\list{}{% - \leftmargin1em\relax - \rightmargin\leftmargin - }% - \item\relax} - {\endlist} -% \end{macrocode} -% -% \subsection{Extensions to the base class of \classname{ltxdoc.cls}} -% -% Matter commands from \classname{book.cls} -% \begin{macrocode} -\newif\if@mainmatter -\newif\if@openright -\@openrighttrue -\DeclareRobustCommand\frontmatter{% - \cleartorecto - \@mainmatterfalse - \pagenumbering{roman}% -}% -\DeclareRobustCommand\mainmatter{% - \cleartorecto - \@mainmattertrue - \pagenumbering{arabic}% -}% -\DeclareRobustCommand\backmatter{% - \if@openright - \cleartorecto - \else - \clearpage - \fi - \@mainmatterfalse -}% -\ifx\undefined\cleartorecto - \def\cleartorecto{\cleardoublepage}% -\fi -% \end{macrocode} -% -% Unnumbered tables -% -% \begin{environment}{unnumtable} -% An unnumbered table does not float. -% \begin{macrocode} -\def\@to{to}% -\newenvironment{unnumtable}{% - \par - \addpenalty\predisplaypenalty - \addvspace\abovedisplayskip - \hbox\@to\hsize\bgroup\hfil\ignorespaces - \let\@Hline\@empty -}{% - \unskip\hfil\egroup - \penalty\postdisplaypenalty - \vskip\belowdisplayskip - \aftergroup\ignorespaces - \@endpetrue -}% -% \end{macrocode} -% \end{environment} -% -% Emulate \cmd\toprule\ and friends -% \begin{macrocode} -\providecommand\toprule{\hline\hline}% -\providecommand\colrule{\\\hline}% -\providecommand\botrule{\\\hline\hline}% -% \end{macrocode} -% -% Define sectioning command below \cmd\subsubsection. -% \begin{macrocode} -\DeclareRobustCommand\subsubsubsection{% - \@startsection{subsubsection}{4}% - {\z@}{-15\p@\@plus-5\p@\@minus-2\p@}% - {5\p@}{\normalfont\normalsize\itshape}% -}% -% \end{macrocode} -% -% \subsection{In lieu of \file{ltxdoc.cfg}} -% We don't want everything to appear in the index -% \begin{macrocode} -\DoNotIndex{\',\.,\@M,\@@input,\@Alph,\@alph,\@addtoreset,\@arabic} -\DoNotIndex{\@badmath,\@centercr,\@cite} -\DoNotIndex{\@dotsep,\@empty,\@float,\@gobble,\@gobbletwo,\@ignoretrue} -\DoNotIndex{\@input,\@ixpt,\@m,\@minus,\@mkboth} -\DoNotIndex{\@ne,\@nil,\@nomath,\@plus,\roman,\@set@topoint} -\DoNotIndex{\@tempboxa,\@tempcnta,\@tempdima,\@tempdimb} -\DoNotIndex{\@tempswafalse,\@tempswatrue,\@viipt,\@viiipt,\@vipt} -\DoNotIndex{\@vpt,\@warning,\@xiipt,\@xipt,\@xivpt,\@xpt,\@xviipt} -\DoNotIndex{\@xxpt,\@xxvpt,\\,\ ,\addpenalty,\addtolength,\addvspace} -\DoNotIndex{\advance,\ast,\begin,\begingroup,\bfseries,\bgroup,\box} -\DoNotIndex{\bullet} -\DoNotIndex{\cdot,\cite,\CodelineIndex,\cr,\day,\DeclareOption} -\DoNotIndex{\def,\DisableCrossrefs,\divide,\DocInput,\documentclass} -\DoNotIndex{\DoNotIndex,\egroup,\ifdim,\else,\fi,\em,\endtrivlist} -\DoNotIndex{\EnableCrossrefs,\end,\end@dblfloat,\end@float,\endgroup} -\DoNotIndex{\endlist,\everycr,\everypar,\ExecuteOptions,\expandafter} -\DoNotIndex{\fbox} -\DoNotIndex{\filedate,\filename,\fileversion,\fontsize,\framebox,\gdef} -\DoNotIndex{\global,\halign,\hangindent,\hbox,\hfil,\hfill,\hrule} -\DoNotIndex{\hsize,\hskip,\hspace,\hss,\if@tempswa,\ifcase,\or,\fi,\fi} -\DoNotIndex{\ifhmode,\ifvmode,\ifnum,\iftrue,\ifx,\fi,\fi,\fi,\fi,\fi} -\DoNotIndex{\input} -\DoNotIndex{\jobname,\kern,\leavevmode,\let,\leftmark} -\DoNotIndex{\list,\llap,\long,\m@ne,\m@th,\mark,\markboth,\markright} -\DoNotIndex{\month,\newcommand,\newcounter,\newenvironment} -\DoNotIndex{\NeedsTeXFormat,\newdimen} -\DoNotIndex{\newlength,\newpage,\nobreak,\noindent,\null,\number} -\DoNotIndex{\numberline,\OldMakeindex,\OnlyDescription,\p@} -\DoNotIndex{\pagestyle,\par,\paragraph,\paragraphmark,\parfillskip} -\DoNotIndex{\penalty,\PrintChanges,\PrintIndex,\ProcessOptions} -\DoNotIndex{\protect,\ProvidesClass,\raggedbottom,\raggedright} -\DoNotIndex{\refstepcounter,\relax,\renewcommand} -\DoNotIndex{\rightmargin,\rightmark,\rightskip,\rlap,\rmfamily} -\DoNotIndex{\secdef,\selectfont,\setbox,\setcounter,\setlength} -\DoNotIndex{\settowidth,\sfcode,\skip,\sloppy,\slshape,\space} -\DoNotIndex{\symbol,\the,\trivlist,\typeout,\tw@,\undefined,\uppercase} -\DoNotIndex{\usecounter,\usefont,\usepackage,\vfil,\vfill,\viiipt} -\DoNotIndex{\viipt,\vipt,\vskip,\vspace} -\DoNotIndex{\wd,\xiipt,\year,\z@} -\DoNotIndex{\next} -% \end{macrocode} -% -% Direct \classname{ltxdoc} to produce an index. -% \begin{macrocode} -\AtEndDocument{\PrintIndex\PrintChanges}% -% \end{macrocode} -% -% \subsection{Extension to \LaTeX's \env{filecontents} Environment} -% We want to -% coax the version number into \env{filecontents}-generated files. -% Note that we expect \cmd\fileversion\ and \cmd\filedate\ to -% hold the needed information. For this to be the case, -% your document should execute the \cmd\GetFileInfo\ command -% (as documented in section~\ref{sec:GetFileInfo}) before -% any instances of \env{filecontents}. -% \begin{macrocode} -\makeatletter -\def\endfilecontents{% - \immediate\write\reserved@c{% - \string\iffalse\space ltxdoc klootch^^J% - \ifx\undefined\fileversion\else - \ifx\undefined\filedate\else - This file has version number \fileversion, last revised \filedate.% - \fi\fi - \string\fi - }% - \immediate\closeout\reserved@c - \def\T##1##2##3{% - \ifx##1\@undefined\else - \@latex@warning@no@line{##2 has been converted to Blank ##3e}% - \fi - }% - \T\L{Form Feed}{Lin}% - \T\I{Tab}{Spac}% - \immediate\write\@unused{}% -}% -\expandafter\let\csname endfilecontents*\endcsname\endfilecontents -\makeatother -% \end{macrocode} -% -% Alter formatting in arrays; set them tight. -% \begin{macrocode} -\setlength\arraycolsep{0pt}% -% \end{macrocode} -% -% \subsection{End of the \file{kernel} {\sc docstrip} module} -% -% \begin{macrocode} -%</kernel> -% \end{macrocode} -% -% \subsection{Tail of the \file{package} {\sc docstrip} module} -% Here is the remainder of the package code. -% \begin{macrocode} -%<*package> -% \end{macrocode} -% Currently, there is little. -% \begin{macrocode} -%</package> -% \end{macrocode} -% -% -% \section{Font Package for Acrobat Compatability}% -% The package \classname{acrofont} -% substitutes Acrobat-standard fonts for Computer Modern where possible, -% even in math mode. -% Documents typeset with this package in effect will require as little -% downloaded font data as possible, but will not be exemplars of -% fine math typesetting. -% -% \subsection{Beginning of the \file{fonts} {\sc docstrip} module} -% The document class module comprises this and the next -% four sections. -% \begin{macro}{\class@base} -% We define in exactly one spot the base class. -% Typically that class will be one of \classname{book}, -% \classname{article}, or \classname{report}. -% The base class effectively defines the use and the markup scheme -% of the class of documents to be handled by this class. -% -% This class is a variant of the standard \LaTeX\ book class: -% \url{ftp://ctan.tug.org/tex-archive/macros/latex/unpacked}. -% \begin{macrocode} -%<*fonts> -\def\class@name{ltxdocext}% -\expandafter\ClassInfo\expandafter{\class@name}{% - Written for \protect\LaTeXe\space - by A. Ogawa (arthur_ogawa at sbcglobal.net)% -}% -% \end{macrocode} -% \end{macro} -% -% \subsection{Variants on psfonts packages}% -% The following uses \file{times.sty} from \url{/packages/psnfss/psfonts.dtx} -% \begin{macrocode} -\RequirePackage{times}% -% \end{macrocode} -% -% The following uses \file{mathptm.sty} from \url{/packages/psnfss/psfonts.dtx} -% \begin{macrocode} -\RequirePackage{mathptm}% -% \end{macrocode} -% -% The following is a customization of \file{ot1ptmcm.fd}. -% The virtual font referred to here \file{zptmnocmr} is -% a variant of Sebastian Rahtz's \file{zptmcmr}, but with -% even more glyphs moved from CM to Acrobat-standard fonts. -% \begin{macrocode} -\DeclareFontFamily{OT1}{ptmcm}{} -\DeclareFontShape{OT1}{ptmcm}{m}{n}{ - <-> zptmnocmr -}{} -\DeclareFontShape{OT1}{ptmcm}{l}{n}{<->ssub * ptmnocm/m/n}{} -% \end{macrocode} -% -% The following is a customization of \file{omlptmcm.fd} -% The virtual font referred to here \file{zptmnocmrm} is -% a variant of Sebastian Rahtz's \file{zptmcmrm}, but with -% even more glyphs moved from CM to Acrobat-standard fonts. -% \begin{macrocode} -\DeclareFontFamily{OML}{ptmcm}{\skewchar \font =127} -\DeclareFontShape{OML}{ptmcm}{m}{it}{ - <-> zptmnocmrm -}{} -\DeclareFontShape{OML}{ptmcm}{l}{it}{<->ssub * ptmcm/m/it}{} -\DeclareFontShape{OML}{ptmcm}{m}{sl}{<->ssub * ptmcm/m/it}{} -\DeclareFontShape{OML}{ptmcm}{l}{sl}{<->ssub * ptmcm/m/sl}{} -% \end{macrocode} -% -% The following is a customization of \file{omspzccm.fd} -% The virtual font referred to here \file{zpzcnocmry} is -% a variant of Sebastian Rahtz's \file{zpzccmry}, but with -% even more glyphs moved from CM to Acrobat-standard fonts. -% \begin{macrocode} -\DeclareFontFamily{OMS}{pzccm}{} -\DeclareFontShape{OMS}{pzccm}{m}{n}{ - <-> zpzcnocmry -}{}% cmsy10 Symbol Zapf Chancery Medium-Italic Times-Roman -\DeclareFontShape{OMS}{pzccm}{l}{n}{<->ssub * pzccm/m/n}{} -% \end{macrocode} -% -% The following is a customization of \file{omxpsycm.fd} -% The virtual font referred to here \file{zpsynocmrv} is -% a variant of Sebastian Rahtz's \file{zpsycmrv}, but with -% even more glyphs moved from CM to Acrobat-standard fonts. -% \begin{macrocode} -\DeclareFontFamily{OMX}{psycm}{} -\DeclareFontShape{OMX}{psycm}{m}{n}{ - <-> zpsynocmrv -}{} -\DeclareFontShape{OMX}{psycm}{l}{n}{<->ssub * psycm/m/n}{} -% -\DeclareFontEncoding{8r}{}{}% from file: 8renc.def -\DeclareFontFamily{8r}{cmr}{\hyphenchar\font45 }% from file: 8rcmr.fd -\DeclareFontShape{8r}{cmr}{m}{n}{ - <-> cmr10 -}{} -% \end{macrocode} -% -% \subsection{Font definition files}% -% -% The following forces \LaTeX\ to do now what it would do anyway: -% load the `font definition' information for the fonts that we -% use. In this way, we prepare for faster processing through -% the \cmd\dump\ of a preformatted macro package that will not -% need to read in any packages or font definitions from disk. -% \begin{macrocode} -\input{8rphv.fd}% -\input{8rptm.fd}% -\input{ot1phv.fd}% -\input{ot1ptm.fd}% -\input{t1ptm.fd}% -% \end{macrocode} -% -% \subsection{More math substitutions}% -% -% The following definitions arrange to get certain glyphs from the -% text font instead of out of math pi fonts. -% In particular, the copyright and registered symbols -% are single glyphs instead of composites involving -% the big circle from the \file{cmsy} font. -% \begin{macrocode} - \def\eightRChar#1{{\def\encodingdefault{8r}\fontencoding\encodingdefault\selectfont\char"#1}}% - \def\LANGLE{$<$}%{\eightRChar{8B}}% - \def\RANGLE{$>$}%{\eightRChar{9B}}% -%\def\ASTER{\eightRChar{2A}}% -%\def\DAGGER{\eightRChar{86}}% -%\def\DDAGGER{\eightRChar{87}}% - \def\BULLET{\eightRChar{95}}% -%\def\SECTION{\eightRChar{A7}}% -%\def\PARAGRAPH{\eightRChar{B6}}% - \def\VERTBAR{\eightRChar{7C}}% - \def\COPYRIGHT{\eightRChar{A9}}% - \def\REGISTERED{\eightRChar{AE}}% -% \end{macrocode} -% -% \begin{macrocode} - \def\textbar{\VERTBAR}% - \def\textbullet{\BULLET}% - \def\textcopyright{\COPYRIGHT}% - \def\textregistered{\REGISTERED}% -% \end{macrocode} -% -% I have removed \cmd\ensuremath\ from the following definition, and -% all commands like \cmd\mathsection have been converted to -% e.g., \cmd\textsection. -% \begin{macrocode} -\def\@makefnmark{\@thefnmark}% -\def\@fnsymbol#1{{\ifcase#1\or *\or \dagger\or \ddagger\or - \textsection\or \textparagraph\or \|\or **\or \dagger\dagger - \or \ddagger\ddagger \else\@ctrerr\fi}} -% \end{macrocode} -% -% \subsection{End of the \file{fonts} {\sc docstrip} module} -% Here ends the module. -% \begin{macrocode} -%</fonts> -% \end{macrocode} -% -% -% \section{Programming Conventions}% -% In writing the above code, I cleave to certain conventions, noted -% here. -% My goal in explaining them is to encourage others maintaining this -% body of code to consider following them as well. -% The benefits are twofold: -% Some of the coding conventions aim to avoid programming pitfalls; -% following them reduces maintenance costs. -% Others make the code easier to read; following these eases the -% process of understanding how the code works. -% -% And, for my part, I prefer to read code of this type. -% -% \subsection{Whitespace Conventions}% -% Exactly where code lines break and indent, and where additional -% whitespace is inserted is explained here. -% \begin{itemize} -% \item -% Each new macro definition or register assignment begins a new line. -% Therefore, \cmd\def, \cmd\newcommand, and their ilk will start in column~1. -% \item -% Code is indented one space for each level of nesting within braces -% \verb|{}|. -% \item -% Likewise, if possible, for \cmd\if\dots and matching \cmd\fi. -% \item -% However, the closing brace or \cmd\fi\ is outdented by one so that it -% falls -% at the same level of indentation as its matching brace or \cmd\if, -% and it appears alone on its line. -% \item -% Use of the |tab| character is deprecated -% (tabs are not standardized across all applications and operating -% systems). -% \item -% Lines of code are limited to 72 characters. -% I follow this convention mostly to ease the transmission of files -% via email (a deprecated practice) and to accomodate people with -% small monitors. -% But \classname{ltxdoc} output looks better with the shorter lines, too. -% \item -% Extraneous whitespace in the replacement part of a macro definition -% is avoided by using the comment character |%|. -% In most cases, if falling at the end of a line of code, -% a brace will be immediately followed by a comment character, -% as will the macro parameter |#1| and any one-letter control sequence, -% like |\\|. -% \item -% Extraneous whitespace in the package file is also avoided. -% When \TeX\ reads in the .sty file, it will process \cmd\def s, and other commands, -% but will not process blank spaces. -% This practice is simply a discipline. You don't need to do this. -% But sometimes \TeX\ has to read in a file while it is in horizontal mode, -% at which point this practice is essential. -% \end{itemize} -% These conventions taken together are illustrated by the following: -% \begin{verbatim} -%\def\prepdef#1#2{% -% \@ifxundefined#1{\toks@{}}{\toks@\expandafter{#1}}% -% \toks@ii{#2}% -% \edef#1{\the\toks@ii\the\toks@}% -%}% -% \end{verbatim} -% In the above, the definition of \cmd\prepdef\ would not fit on a single -% line, -% and required breaking. The first and last lines have matching braces, -% and are a the same level of indentation, with the last line containing -% a single brace. -% -% Each of the three intervening lines has balanced braces and is -% indented by one space. Each line that would otherwise end in a single -% brace character is terminated by a comment character. -% -% Some coders rely on the fact that a space character seen by \TeX's -% scanner while in vertical mode is a no-op. -% Be that as it may, I eliminate them unless actually intentional. -% -% \subsection{Conventions For Procedures}% -% Here are some of my preferences when writing procedures: -% \begin{itemize} -% -% \item -% I dislike defining a macro within another macro, especially when the -% pattern part is non-nil. -% You know, you are not saving much space in |mem| when you do this, -% right? -% You do save space in the hash table and the string pool, though. -% On the other hand, we are not dealing with small \TeX\ engines -% anymore; Team \LaTeX\ has made sure of this. -% -% \item -% If two or more macros have very similar replacement parts, consider -% layering. -% -% \item -% Macros may perform parsing, may maintain tokens or registers, or may -% set type (produce marks). I try to avoid combining the three functions -% in a single macro. -% -% \item -% When a procedure both does assignments and sets type, I try to have a -% clean separations between the two activities. Try to avoid: -% \begin{verbatim} -% \vskip10pt -% \parindent=0pt -% \leavevmode -% \end{verbatim} -% -% \item -% The Boolean calculus (cf. \cmd\@ifx) -% is very useful and produces code that executes nicely. -% Using it also helps avoid your having to debug problems where -% \cmd\if\dots\ and \cmd\fi\ are not properly balanced -% (a nightmare, in case you have not already experienced it). -% -% \end{itemize} -% -% \subsection{Conventions For \LaTeX}% -% Team \LaTeX\ make certain recommendations in \file{clsguide.tex}. -% Ones that I particularly pay attention to are: -% \begin{itemize} -% -% \item -% For the sake of ``color safety'', -% use \cmd\sbox\ rather than \cmd\setbox, \cmd\mbox\ rather than \cmd\hbox, and -% \cmd\parbox\ or \env{minipage} rather than \cmd\vbox. -% -% \item -% Use \cmd\newcommand\ and \cmd\newenvironment\ to declare user-level commands -% and environments. Avoid the idiom \cmd\def\cmd\foo, \cmd\def\cmd\endfoo\ to define -% an environment. -% Ideally, all user-level markup could be extracted from the -% document class by grepping on \cmd\newcommand\ and \cmd\newenvironment. -% -% \item -% Prefer to use \cmd\setlength\ to assign registers. -% -% \end{itemize} -% I cannot help but notice that much of the code of \LaTeX\ itself fails -% to comply with many of the coding recommendations of Team \LaTeX. -% -% \Finale -% \iffalse Here ends the programmer's documentation.\fi -% \endinput -% -\endinput -%%EOF diff --git a/macros/latex/contrib/revtex/source/ltxfront.dtx b/macros/latex/contrib/revtex/source/ltxfront.dtx deleted file mode 100644 index e1b3582184..0000000000 --- a/macros/latex/contrib/revtex/source/ltxfront.dtx +++ /dev/null @@ -1,3763 +0,0 @@ -% \iffalse meta-comment balanced on line 108 -% ltxfront.dtx: package to change page grid, MVL. -% Copyright (c) 2009 Arthur Ogawa -% -% Disclaimer -% This file is distributed WITHOUT ANY WARRANTY; -% without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -% License -% You may distribute this file under the conditions of the -% LaTeX Project Public License 1.3c or later -% (http://www.latex-project.org/lppl.txt). -% ReadMe -% For the documentation and more detailed instructions for -% installation, typeset this document with \LaTeX. -% Maintenance Status -% This work has the LPPL maintenance status "maintained"; -% Current Maintainer of this work is Arthur Ogawa. -% -% This work consists of the main source file ltxfront.dtx -% and the derived files -% ltxfront.sty, ltxfront.pdf -% Distribution: -% CTAN:macros/latex/contrib/revtex/ -% -% Unpacking: -% tex ltxfront.dtx -% -% Documentation: -% latex ltxfront.dtx; ... -% -% Programm calls to get the documentation (example): -% pdflatex ltxfront.dtx -% makeindex -s gind.ist ltxfront.idx -% makeindex -s gglo.ist -o ltxfront.gls ltxfront.glo -% pdflatex ltxfront.dtx -% makeindex -s gind.ist ltxfront.idx -% pdflatex ltxfront.dtx -% -% Installation: -% TDS:doc/latex/revtex/ -% TDS:source/latex/revtex/ -% TDS:tex/latex/revtex/ -% -% Thanks, Heiko! -% This method of letting a single .dtx file serve as both -% documentation (via latex) and installer (via tex) follows -% the example of Heiko Oberdiek. Thanks! -%<*ignore> -\begingroup - \def\x{LaTeX2e}% -\expandafter\endgroup -\ifcase - 0\expandafter\ifx\csname processbatchFile\endcsname\relax\else1\fi\ifx\fmtname\x\else 1\fi - \relax -\else - \csname fi\endcsname -%</ignore> -%<*install> -%% This file will generate documentation and runtime files -%% from ltxfront.dtx when run through LaTeX or TeX. -\input docstrip -\preamble - -This is a generated file; -altering it directly is inadvisable; -instead, modify the original source file. -See the URL in the file README-LTXFRONT.tex. - -License - You may distribute this file under the conditions of the - LaTeX Project Public License 1.3c or later - (http://www.latex-project.org/lppl.txt). - - This file is distributed WITHOUT ANY WARRANTY; - without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. - -\endpreamble -\askforoverwritefalse -\keepsilent - \generate{% - %{ignore} -% \usedir{tex/latex/revtex}% - \file{ltxfront.sty}{% - \from{ltxfront.dtx}{package,options,kernel}% - }% - }% -\ifToplevel{ -\Msg{***********************************************************} -\Msg{*} -\Msg{* To finish the installation, please move} -\Msg{* ltxfront.sty} -\Msg{* into a directory searched by TeX;} -\Msg{* in a TDS-compliant installation:} -\Msg{* texmf/tex/macros/latex/revtex/.} -\Msg{*} -\Msg{* To produce the documentation, - run ltxfront.dtx through LaTeX.} -\Msg{*} -\Msg{* Happy TeXing} -\Msg{***********************************************************} -} -\endbatchfile -%</install> -%<*ignore> -\fi -%</ignore> -% \fi -% -% \GetFileInfo{ltxfront.dtx} -% -% \iffalse ltxdoc klootch -%<*package> -%%% @LaTeX-file{ -%%% filename = "ltxfront.dtx", -%%% version = "4.2f", -%%% date = "2022/06/05", -%%% author = "Arthur Ogawa (mailto:arthur_ogawa at sbcglobal.net), -%%% commissioned by the American Physical Society. -%%% ", -%%% copyright = "Copyright (C) 1999, 2009 Arthur Ogawa, -%%% distributed under the terms of the -%%% LaTeX Project Public License 1.3c, see -%%% ftp://ctan.tug.org/macros/latex/base/lppl.txt -%%% ", -%%% address = "Arthur Ogawa, -%%% USA", -%%% telephone = "", -%%% FAX = "", -%%% email = "mailto colon arthur_ogawa at sbcglobal.net", -%%% codetable = "ISO/ASCII", -%%% keywords = "latex, page grid, main vertical list", -%%% supported = "yes", -%%% abstract = "package to change page grid, MVL", -%%% } -%</package> -% \fi -% -% \iffalse ltxdoc klootch -% The following references the \file{README-LTXFRONT} file, -% which contains basic information about this package. -% The contents of this file are generated when -% you typeset the programmer's documentation. -% Search on "{filecontents*}{README-LTXFRONT.tex}" to locate it. -% \fi\input{README-LTXFRONT}% -% -% \subsection{Bill of Materials} -% -% Following is a list of the files in this distribution arranged -% according to provenance. -% -% \subsubsection{Primary Source}% -% One single file generates all. -%\begin{verbatim}ltxfront.dtx\end{verbatim} -% -% \subsubsection{Generated by \texttt{latex ltxfront.dtx}}% -% Typesetting the source file under \LaTeX\ -% generates the readme and the documentation. -%\begin{verbatim}README-LTXFRONT\end{verbatim} -% -% \subsubsection{Generated by \texttt{tex ltxfront.dtx}}% -% Typesetting the installer generates -% the package files. -%\begin{verbatim}ltxfront.sty\end{verbatim} -% -% \subsubsection{Documentation}% -% The following are the online documentation: -% \begin{verbatim}ltxfront.pdf\end{verbatim} -% -% \subsubsection{Auxiliary}% -% The following are auxiliary files generated -% in the course of running \LaTeX: -% \begin{verbatim}ltxfront.aux ltxfront.idx ltxfront.ind ltxfront.log ltxfront.toc\end{verbatim} -% -% \section{Code common to all modules}% -% -% We want to require only one place in this file -% where the version number is stated, -% and we also want to ensure that the version -% number is embedded into every generated file. -% -% Now we declare that -% these files can only be used with \LaTeXe. -% An appropriate message is displayed if -% a different \TeX{} format is used. -% \begin{macrocode} -%<*doc|package> -\NeedsTeXFormat{LaTeX2e}[1995/12/01]% -%</doc|package> -% \end{macrocode} -% As desired, the following modules all -% take common version information: -% \begin{macrocode} -%<kernel&!package&!doc>\typeout{% -%<*package|doc> -\ProvidesFile{% -%</package|doc> -%<*kernel|package|doc> -ltxfront% -%</kernel|package|doc> -%<*doc> -.dtx% -%</doc> -%<package>.sty% -%<*package|doc> -}% -%</package|doc> -% \end{macrocode} -% -% The following line contains, for once and for all, -% the version and date information. -% By various means, this information is reproduced -% consistently in all generated files and in the -% typeset documentation. -% \begin{macrocode} -%<*doc|package|kernel> -%<version> - [2022/06/05 4.2f frontmatter package (AO,DPC,MD)]% \fileversion -%</doc|package|kernel> -%<kernel&!package&!doc>}% -% \end{macrocode} -% -% -% \section{The doc module \texttt{doc}} -% -% This module, consisting of the present section, -% typesets the programmer's documentation, -% generating the \file{README-LTXFRONT} and sample document as needed. -% -% Because the only uncommented-out lines of code at the beginning of -% this file constitute the \file{doc} module itself, -% we can simply typeset the \file{.dtx} file directly, -% and there is thus rarely any need to -% generate the ``doc'' {\sc docstrip} module. -% Module delimiters are nonetheless required so that -% this code does not find its way into the other modules. -% -% The \enve{document} command concludes the typesetting run. -% -% \begin{macrocode} -%<*doc> -% \end{macrocode} -% -% \subsection{The Preamble} -% The programmers documentation is formatted -% with the \classname{ltxdoc} class with local customizations, -% and with the usual code line indexing. -% \begin{macrocode} -\documentclass{ltxdoc} -\RequirePackage{ltxdocext}% -\let\url\undefined -\RequirePackage[colorlinks=true,linkcolor=blue]{hyperref}% -%\expandafter\ifx\csname package@font\endcsname\@undefined\else -% \expandafter\RequirePackage\expandafter{\csname package@font\endcsname}% -%\fi -\CodelineIndex\EnableCrossrefs % makeindex -s gind.ist ltxfront -\RecordChanges % makeindex -s gglo.ist -o ltxfront.gls ltxfront.glo -% \end{macrocode} -% -% \subsubsection{Docstrip and info directives} -% We use so many {\sc docstrip} modules that we set the -% \texttt{StandardModuleDepth} counter to 1. -% \begin{macrocode} -\setcounter{StandardModuleDepth}{1} -% \end{macrocode} -% The following command retrieves the date and version information -% from this file. -% \begin{macrocode} -\expandafter\GetFileInfo\expandafter{\jobname.dtx}% -% \end{macrocode} -% -% \subsection{The ``Read Me'' File} -% As promised above, here is the contents of the -% ``Read Me'' file. That file serves a double purpose, -% since it also constitutes the beginining of the -% programmer's documentation. What better thing, after -% all, to have appear at the beginning of the -% typeset documentation? -% -% A good discussion of how to write a ReadMe file can be found in -% Engst, Tonya, ``Writing a ReadMe File? Read This'' -% \emph{MacTech} October 1998, p. 58. -% -% Note the appearance of the -% \cmd\StopEventually\ command, which marks the -% dividing line between the user documentation -% and the programmer documentation. -% -% The usual user will not be asked to -% do a full build, not to speak -% of the bootstrap. -% Instructions for carrying these processes -% begin the programmer's manual. -% -% \begin{macrocode} -\begin{filecontents*}{README-LTXFRONT.tex} -\title{% - A \LaTeX\ Package for\\the frontmatter and title page% - \thanks{% - This file has version number \fileversion, - last revised \filedate.% - }% - \thanks{% - Version \fileversion\ \copyright\ 2019 American Physical Society - }% -}% - -\author{% - Arthur Ogawa% - \thanks{\texttt{mailto:arthur\_ogawa at sbcglobal.net}}% -}% -%\iffalse -% For version number and date, -% search on "\fileversion" in the .dtx file, -% or see the end of the README-LTXFRONT file. -%\fi -\maketitle - -This file embodies the \classname{ltxfront} package, -the implementation and its user documentation. - -The distribution point for this work is -\url{https://journals.aps.org/revtex}, -which contains fully unpacked, prebuilt runtime files and documentation. - -The \classname{ltxfront} package was commissioned by the American Physical Society -and is distributed under the terms of the \LaTeX\ Project Public License 1.3c, -the same license under which all the portions of \LaTeX\ itself is distributed. -Please see \url{http://ctan.tug.org/macros/latex/base/lppl.txt} for details. - -To use this document class, you must have a working -\TeX\ installation equipped with \LaTeXe\ -and possibly pdftex and Adobe Acrobat Reader or equivalent. - -To install, retrieve the distribution, -unpack it into a directory on the target computer, -and move the file \file{ltxfront.sty} -into a location in your filesystem where it will be found by \LaTeX. - -To use, read the user documentation \file{ltxfront.pdf}. - -\tableofcontents - -\section{Processing Instructions} - -The package file \file{ltxfront.sty} -is generated from this file, \file{ltxfront.dtx}, -using the {\sc docstrip} facility of \LaTeX -via |tex ltxfront.dtx|. -The typeset documentation that you are now reading is generated from -the same file by typesetting it with \LaTeX\ or pdftex -via |latex ltxfront.dtx| or |pdflatex ltxfront.dtx|. - -\subsection{Build Instructions} - -You may bootstrap this suite of files solely from \file{ltxfront.dtx}. -Prepare by installing \LaTeXe\ (and either tex or pdftex) on your computer, -then carry out the following steps: -\begin{enumerate} - -\item -Within an otherwise empty directory, -typeset \file{ltxfront.dtx} with \TeX\ or pdftex, -thereby generating the package file \file{ltxfront.sty}. - -\item -Next typeset \file{ltxfront.dtx} with \LaTeX\ or pdflatex; -you will obtain the typeset documentation you are now reading, -along with -the sample document \file{ltxfront-test.tex} -and the file \file{README-LTXFRONT}. - -Note: you will have to run \LaTeX, then -\file{makeindex} \texttt{-s gind.ist ltxfront.idx}, then -\file{makeindex} \texttt{-s gglo.ist -o ltxfront.gls ltxfront.glo}, then -\LaTeX\ again in order to obtain a valid index and table of contents. -\item -Now typeset \file{ltxfront.dtx} with \TeX (not \LaTeX), -thereby generating the package file \file{ltxfront.sty}. -\item -Install the following files into indicated locations within your -TDS-compliant \texttt{texmf} tree (you may need root access): -\begin{itemize} -\item -\file{$TEXMF/}\file{tex/}\file{latex/}\file{revtex/}\classname{ltxfront.sty} -\item -\file{$TEXMF/}\file{source/}\file{latex/}\file{revtex/}\classname{ltxfront.dtx} -\item -\file{$TEXMF/}\file{doc/}\file{latex/}\file{revtex/}\classname{ltxfront.pdf} -\end{itemize} -where \file{$TEXMF/} stands for \file{texmf-local/}, or some other \texttt{texmf} tree -in your installation. -\item -Run \texttt{mktexlsr} on \file{$TEXMF/} (you may need root access). -\item -Build and installation are now complete; -now put a \cmd\usepackage\texttt{\{ltxfront\}} in your document preamble! -\end{enumerate} - -\subsection{Change Log} -\changes{4.0b}{1999/06/20}{Change handling of \cs{@author} to prevent parsing problems. (Helps in error recovery when syntax errors exist)} -\changes{4.0b}{1999/06/20}{Gathered all code for the abstract environment together and abstracted out the formatting details for journals to override.} -\changes{4.0b}{1999/06/20}{Separate option now controls production} -\changes{4.0b}{1999/06/20}{Set \cs{footnote} to \LaTeX\ standard version for this scope.} -\changes{4.0c}{1999/11/13}{grid changes with ltxgrid} -\changes{4.0d}{1998/01/31}{\cs{comma@space}} -\changes{4.0d}{1998/01/31}{change name from \cs{tempaffiliation}} -\changes{4.0d}{1998/01/31}{hookify} -\changes{4.0d}{1998/01/31}{If empty \cs{abstractname} omit spacing} -\changes{4.0d}{1998/01/31}{PACS boxed to width of abstract} -\changes{4.0e}{2000/09/20}{Keywords on same footing as PACS} -\changes{4.0e}{2000/09/20}{Warn if no production} -\changes{4.0f}{2001/02/13}{Actually append \cs{AU@grp} to \cs{@AAClist}.} -\changes{4.0g}{1998/06/10}{multiple preprint commands} -\changes{4.0h}{1998/06/25}{Changes to support groups of affiliations} -\changes{4.0h}{1998/06/25}{new hook} -\changes{4.0l}{1998/09/01}{add optional argument handling back} -\changes{4.0l}{1998/09/01}{Changes to add collaboration processing, which now means doing comma/and processing on each sublist} -\changes{4.0l}{1998/09/01}{macro added} -\changes{4.1a}{2008-06-30}{(AO, 443) create an entry in the PDF bookmarks for the abstract via the toc} -\changes{4.1a}{2008-07-01}{(AO, 496) remove default prependation to \cs{email}.} -\changes{4.1a}{2008-07-01}{(AO, 496) remove default prependation to \cs{homepage}.} -\changes{4.1a}{2008/06/16}{removed code that had been commented out} -\changes{4.1b}{2008/06/29}{(AO, 455) provide a \texttt{description} environment for the abstract} -\changes{4.1b}{2008/08/02}{(AO, 486) \cs{collaboration} to work with \texttt{groupedaddress}} -\changes{4.1b}{2008/08/02}{Change csname \cs{AFS@opr} to \cs{AFG@opr}} -\changes{4.1b}{2008/08/02}{Make the syntax of this package switch optional}% -\changes{4.1b}{2008/08/02}{Provide for diagnostics via \cs{frontmatterverbose@sw}} -\changes{4.1b}{2008/08/02}{Use \cs{@affil@def} for all access to \cs{@affil}} -\changes{4.1b}{2008/08/02}{Use \cs{frontmatter@init} as the vehicle for all initialization} -\changes{4.1b}{2008/08/04}{(AO, 443) PDF Bookmark for title page}% -\changes{4.1b}{2008/08/04}{Provide facility \cs{affil@cutoff}: if there is only one affiliation on the title page, no superscript}% -\changes{4.1c}{2008/08/04}{Hyperref compatibility: take \cs{maketitle} back.} -\changes{4.1c}{2008/08/04}{Parametrize the production after the address}% -\changes{4.1c}{2008/08/04}{Produce PACS, keywords only if specified}% -\changes{4.1d}{2008/10/17}{(AO, 410) compare \cs{@tempa} to \cs{blankaffiliation}.}% -\changes{4.1f}{2009/07/07}{(AO, 515) Use \cs{set@footnotefont}, which is defined in ltxutil} -\changes{4.1g}{2009/10/05}{(AO, 535) Robustify \cs{footnote} while \cs{class@warn} is expanding its argument} -\changes{4.1g}{2009/10/05}{(AO, 539) Robustify \cs{class@warn} against TOC processing}% -\changes{4.1i}{2009/10/18}{(AO, 540) More runtime diagnostics via \cs{frontmatterverbose@sw}} -\changes{4.1i}{2009/10/23}{(AO, 540) Rationalize code that appends to \cs{AF@grp}} -\changes{4.1i}{2009/10/23}{(AO, 540) Optimize boolean logic } -\changes{4.1i}{2009/10/23}{(AO, 544) Class options runinaddress and unsortedaddress stopped working} -\changes{4.1m}{2009/11/20}{(AO, 563) \cs{collaboration} to work with both \texttt{groupedaddress} and \texttt{superscriptaddress}} -\changes{4.1m}{2009/11/20}{(AO, 563) More complete runtime diagnostics via \cs{frontmatterverbose@sw}} -\changes{4.1m}{2009/11/20}{(AO, 563) Let \cs{@collaboration@gobble} parse all three arguments of \cs{CO@opr}} -\changes{4.1n}{2009/11/30}{(AO, 567) Handle \cs{noaffiliation} case} -\changes{4.1n}{2009/11/30}{(AO, 567) Handle punctuation for \classoption{superscriptaddress} style authors' extra information, such as \cs{email}} -\changes{4.1n}{2009/12/03}{(AO) remove http:// from \cs{href} call} -\changes{4.1n}{2010/01/02}{(AO, 571) Interface \cs{set@footnotewidth} for determining the set width of footnotes}% -\changes{4.1n}{2010/01/02}{(AO, 571) allow split after last line of footnote}% -\changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}% -\changes{4.2a}{2018/12/12}{(MD) Updated name of README file and use standard fonts when typesetting}% - -\end{filecontents*} -% \end{macrocode} -% -% \subsection{A Gnuly Created Sample Document} -% -% \begin{macrocode} -\begin{filecontents*}{ltxfront-test.tex} -\documentclass{article}% use any combination of titlepage, twocolumn -\usepackage[]{ltxfront}% use inactive to turn off features -\begin{document} - -\title{Gnu Veldt Cuisine} - -\author{G. Picking} -\thanks{Supported by a grant from the GSF.} -\affiliation{Acme Kitchen Products} - -\author{R. Dillo} -\thanks{On leave during 1985.} -\affiliation{Cordon Puce School} - -\date{24 July 1984}% -\revised{5 January 1985}% - -\maketitle - -\section{Introduction}% -We reproduce most features of \LaTeX\ manual, Figure C.4, p. 183. -\end{document} -\end{filecontents*} -% \end{macrocode} -% -% \subsection{The Document Body} -% -% Here is the document body, containing only a -% \cmd\DocInput\ directive---referring to this very file. -% This very cute self-reference is a common \classname{ltxdoc} idiom. -% \begin{macrocode} -\begin{document}% -\expandafter\DocInput\expandafter{\jobname.dtx}% -% ^^A\PrintChanges -\end{document} -% \end{macrocode} -% -% \begin{macrocode} -%</doc> -% \end{macrocode} -% -% \section{Using this package} -% Once this package is installed on your filesystem, you can employ it in -% adding functionality to \LaTeX\ by invoking it in your document or document class. -% -% \subsection{Invoking the package} -% In your document, you can simply call it up in your preamble: -% \begin{verbatim} -%\documentclass{book}% -%\usepackage{ltxfront}% -%\begin{document} -%<your document here> -%\end{document}\end{verbatim} -% However, the preferred way is to invoke this package from within your -% customized document class: -% \begin{verbatim} -%\NeedsTeXFormat{LaTeX2e}[1995/12/01]% -%\ProvidesClass{myclass}% -%\RequirePackage{ltxfront}% -%\LoadClass{book}% -%<class customization commands> -%\endinput\end{verbatim} -% -% Once loaded, the package gives you acccess to certain procedures, -% usually to be invoked by a \LaTeX\ command or environment. -% -% \section{Frontmatter commands} -% -% A document using this package will use commands like \cmd\title, \cmd\author, \cmd\thanks, -% the \texttt{abstract} environment -% and \cmd\maketitle. -% These are part of \LaTeX's standard document classes. -% But this package supplements \LaTeX\ syntax with additional commands, such as -% \cmd\affiliation, \cmd\collaboration, \cmd\email, \cmd\homepage, and others. -% -% Furthermore, you can have multiple \cmd\author, \cmd\affiliation, and \cmd\collaboration\ commands, -% each with their own set of \cmd\email, \cmd\homepage, etc. commands. -% -% \section{The Front Matter}\label{sec:front} -% -% This section describes the macros -% this package provides for formatting the front matter of an -% article. The behavior and usage of these macros can be quite -% different from those provided in \LaTeXe. -% -% \subsection{Setting the title} -% -% The title of the manuscript is simply specified by using the -% \cmd\title\arg{title} macro. A \verb+\\+ may be used to put a line -% break in a long title. -% The \cmd\title\ commnd takes an optional argument, which you will use to -% give an abbreviated title for use in the running header. -% -% \subsection{Specifying a date}% -% -% The \cmd\date\marg{date} command outputs the date on the manuscript. -% Using \cmd\today\ will cause \LaTeX{} to insert the -% current date whenever the file is run: -% \begin{verbatim}\date{\today}\end{verbatim} -% -% \subsection{Specifying authors and affiliations} -% -% Commands specifying author and affilliation have been improved to save -% labor for authors and in production. Authors and affiliations are -% arranged into groupings called, appropriately enough, \emph{author -% groups}. Each author group is a set of authors who share the same set -% of affiliations. Author names are specified with the \cmd\author\ -% macro while affiliations (or addresses) are specified with the -% \cmd\affiliation\ macro. Author groups are specified by sequences of -% \cmd\author\ macros followed by \cmd\affiliation\ macros. An -% \cmd\affiliation\ macro applies to all previously specified -% \cmd\author\ macros which don't already have an affiliation supplied. -% -% For example, if Bugs Bunny and Roger Rabbit are both at Looney Tune -% Studios, while Mickey Mouse is at Disney World, the markup would be: -% \begin{verbatim} -% \author{Bugs Bunny} -% \author{Roger Rabbit} -% \affiliation{Looney Tune Studios} -% \author{Mickey Mouse} -% \affiliation{Disney World}\end{verbatim} -% The default is to display this as -% \begin{center} -% Bugs Bunny and Roger Rabbit\\ -% \emph{Looney Tune Studios}\\ -% Mickey Mouse\\ -% \emph{Disney World}\\ -% \end{center} -% This layout style for displaying authors and their affiliations is -% chosen by selecting the class option -% \classoption{groupedaddress}. This option is the default for all APS -% journal styles, so it does not need to be specified explicitly. -% The other major way of displaying this -% information is to use superscripts on the authors and -% affiliations. This can be accomplished by selecting the class option -% \classoption{superscriptaddress}. To achieve the display -% \begin{center} -% Bugs Bunny,$^{1}$ Roger Rabbit,$^{1,2}$ and Mickey Mouse$^{2}$\\ -% \emph{$^{1}$Looney Tune Studios}\\ -% \emph{$^{2}$Disney World}\\ -% \end{center} -% one would use the markup -% \begin{verbatim} -% \author{Bugs Bunny} -% \affiliation{Looney Tune Studios} -% \author{Roger Rabbit} -% \affiliation{Looney Tune Studios} -% \affiliation{Disney World} -% \author{Mickey Mouse} -% \affiliation{Disney World}\end{verbatim} -% -% Note that this package takes care of any commas and \emph{and}'s that join -% the author names together and font selection, as well as any -% superscript numbering. Only the author names and affiliations should -% be given within their respective macros. -% -% There is a third class option, \classoption{unsortedaddress}, for -% controlling author/affiliation display. The default -% \classoption{groupedaddress} will actually sort authors into the -% approriate author groups if one chooses to specify an affiliation for -% each author. The markup: -% \begin{verbatim} -% \author{Bugs Bunny} -% \affiliation{Looney Tune Studios} -% \author{Mickey Mouse} -% \affiliation{Disney World} -% \author{Roger Rabbit} -% \affiliation{Looney Tune Studios}\end{verbatim} -% will result in the same display as for the first case given -% above even though Roger Rabbit is specified after Mickey Mouse. To -% avoid Roger Rabbit being moved into the same author group as Bugs -% Bunny, use the -% \classoption{unsortedaddress} option instead. In general, it is safest -% to list authors in the order they should appear and specify -% affiliations for multiple authors rather than one at a time. This will -% afford the most independence for choosing the display option. Finally, -% it should be mentioned that the affiliations for the -% \classoption{superscriptaddress} are presented and numbered -% in the order that they are encountered. This means that the order -% will usually follow the order of the authors. An alternative ordering -% can be forced by including a list of \cmd\affiliation\ commands before -% the first \cmd{\author} in the desired order. Then use the exact same -% text for each affilation when specifying them for each author. -% -% If an author doesn't have an affiliation, the \cmd\noaffiliation\ -% macro may be used in the place of an \cmd\affiliation\ macro. -% -% -% \subsubsection{Collaborations} -% -% A collaboration name can be specified with the \cmd\collaboration\ -% command. This is very similar to the \cmd\author\ command. -% It should appear at the end of an author group. -% The collaboration name will appear centered in parentheses. -% You may have multiple author groups, each with its own \cmd\collaboration. -% Because collaborations don't normally have affiliations, one needs to follow the -% \cmd\collaboration\ with \cmd\noaffiliation. -% -% \subsubsection{Footnotes for authors, collaborations, affiliations or title}\label{sec:footau} -% -% Often one wants to specify additional information associated with an -% author, collaboration, or affiliation such an e-mail address, an -% alternate affiliation, or some other ancillary information. -% This package introduces several new macros just for this purpose. They -% are: -% \begin{itemize} -% \item\cmd\email\oarg{optional text}\arg{e-mail address} -% \item\cmd\homepage\oarg{optional text}\arg{URL} -% \item\cmd\altaffiliation\oarg{optional text}\arg{affiliation} -% \item\cmd\thanks\arg{miscellaneous text} -% \end{itemize} -% In the first three, the \emph{optional text} will be prepended before the -% actual information specified in the required argument. \cmd\email\ and -% \cmd\homepage\ each have a default text for their optional arguments -% (`Electronic address:' and `URL:' respectively). The \cmd\thanks\ -% macro should only be used if one of the other three do not apply. Any -% author name can have multiple instances of these four commands. -% Note that unlike the -% \cmd\affiliation\ macro, these macros only apply to the \cmd\author\ -% that directly precedes it. Any \cmd\affiliation\ \emph{must} follow -% the other author-specific macros. A typical usage might be as follows: -% \begin{verbatim} -% \author{Bugs Bunny} -% \email[E-mail me at: ]{bugs@looney.com} -% \homepage[Visit: ]{http://looney.com/} -% \altaffiliation[Permanent address: ] -% {Warner Brothers} -% \affiliation{Looney Tunes}\end{verbatim} -% This would result in the footnote ``E-mail me at: \texttt{bugs@looney.com}, -% Visit: \texttt{http://looney.com/}, Permanent address: Warner -% Brothers'' being attached to Bugs Bunny. Note that: -% \begin{itemize} -% \item Only an e-mail address, URL, or affiliation should go in the -% required argument in the curly braces. -% \item The font is automatically taken care of. -% \item An explicit space is needed at the end of the optional text if one is -% desired in the output. -% \item Use the optional arguments to provide customized -% text only if there is a good reason to. -% \end{itemize} -% -% The \cmd\collaboration\ , \cmd\affiliation, or even \cmd\title\ can -% also have footnotes attached via these commands. If any ancillary data -% (\cmd\thanks, \cmd\email, \cmd\homepage, or -% \cmd\altaffiliation) are given in the wrong context (e.g., before any -% \cmd\title, \cmd\author, \cmd\collaboration, or \cmd\affiliation\ -% command has been given), then a warning is given in the \TeX\ log, and -% the command is ignored. -% -% Duplicate sets of ancillary data are merged, giving rise to a single -% shared footnote. However, this only applies if the ancillary data are -% identical: even the order of the commands specifying the data must be -% identical. Thus, for example, two authors can share a single footnote -% indicating a group e-mail address. -% -% Duplicate \cmd\affiliation\ commands may be given in the course of the -% front matter, without the danger of producing extraneous affiliations -% on the title page. However, ancillary data should be specified for -% only the first instance of any particular institution's -% \cmd\affiliation\ command; a later instance with different ancillary -% data will result in a warning in the \TeX\ log. -% -% It is preferable to arrange authors into -% sets. Within each set all the authors share the same group of -% affiliations. For each author, give the \cmd\author\ (and appropriate -% ancillary data), then follow this author group with the needed group -% of \cmd\affiliation\ commands. -% -% If affiliations have been listed before the first -% \cmd\author\ macro to ensure a particular ordering, be sure -% that any later \cmd\affiliation\ command for the given institution is -% an exact copy of the first, and also ensure that no ancillary data is -% given in these later instances. -% -% -% A journal may determine the placement of these -% ancillary information footnotes. One journal may put all -% such footnotes at the start of the bibliography while another -% journal may display them on the first page, as a footnote. One can override a -% journal style's default behavior by specifying explicitly the class -% option -% \classoption{bibnotes} (puts the footnotes at the start of the -% bibliography) or \classoption{nobibnotes} (puts them on the first page). -% -% \subsubsection{Specifying first names and surnames} -% -% Many authors have names in which either the surname appears first -% or in which the surname is made up of more than one name. To ensure -% that such names are accurately captured for indexing and other -% purposes, the \cmd\surname\ macro should be used to indicate which portion -% of a name is the surname. Similarly, there is a \cmd\firstname\ macro -% as well, although usage of \cmd\surname\ should be sufficient. If an -% author's surname is a single name and written last, it is not -% necessary to use these macros. These macros do nothing but indicate -% how a name should be indexed. Here are some examples; -% \begin{verbatim} -% \author{Andrew \surname{Lloyd Weber}} -% \author{\surname{Mao} Tse-Tung}\end{verbatim} -% -% \subsection{The abstract} -% An abstract for a paper is specified by using the \env{abstract} -% environment: -% \begin{verbatim} -% \begin{abstract} -% Text of abstract -% \end{abstract}\end{verbatim} -% Note that with this package, the abstract must be specified before the -% \cmd\maketitle\ command, and there is no need to embed it in an explicit -% minipage environment. -% -% \subsection{PACS codes} -% Some authors are asked to supply suggested PACS codes with their -% submissions. The \cmd\pacs\ macro is provided as a way to do this: -% \begin{verbatim}\pacs{23.23.+x, 56.65.Dy}\end{verbatim} -% The actual display of the PACS numbers below the abstract is -% controlled by two class options: \classoption{showpacs} and -% \classoption{noshowpacs}. In particular, this is now independent of -% the \classoption{preprint} option. \classoption{showpacs} must be -% explicitly included in the class options to display the PACS codes. -% -% \subsection{Keywords} -% A \cmd\keywords\ macro may also be used to indicate keywords for the -% article. -% \begin{verbatim}\keywords{nuclear form; yrast level}\end{verbatim} -% This will be displayed below the abstract and PACS (if supplied). Like -% PACS codes, the actual display of the the keywords is controlled by -% two classoptions: \classoption{showkeys} and -% \classoption{noshowkeys}. An explicit \classoption{showkeys} must be -% included in the \cmd\documentclass\ line to display the keywords. -% -% \subsection{Institutional report numbers} -% Institutional report numbers can be specified using the \cmd\preprint\ -% macro. These will be displayed in the upper lefthand corner of the -% first page. Multiple \cmd\preprint\ macros may be supplied (space is -% limited though, so only three or less may actually fit). -% -% \subsection{maketitle} -% After specifying the title, authors, affiliations, abstract, PACS -% codes, and report numbers, the final step for formatting the front -% matter of the manuscript is to issue the \cmd\maketitle\ command: -% \begin{verbatim}\maketitle\end{verbatim} -% This command must follow all of the macros listed above. -% The macro will format the front matter in accordance with the various -% class options that were specified in the -% \cmd\documentclass\ line (either implicitly through defaults or -% explicitly). -% -% -% \section{Compatability with \LaTeX's Required Packages} -% Certain packages, usually ones written by members of the -% \LaTeX\ Project itself, have been designated ``required'' and -% are distributed as part of standard \LaTeX. -% These packages have been placed in a priviledged position -% vis \'a vis the \LaTeX\ kernel in that they override the definitions of certain kernel macros. -% -% The \classname{ltxfront} package will be incompatible with any package that -% redefines any of the kernel macros that \classname{ltxfront} patches---if that -% package is loaded \emph{after} \classname{ltxfront}. -% -% Hereinafter follows some notes on specific \LaTeX\ packages. -% -%\StopEventually{} -% -% \section{Implementation of package} -% -% \subsection{Beginning of the \file{package} {\sc docstrip} module} -% \begin{macrocode} -%<*package> -\def\package@name{ltxfront}% -\expandafter\PackageInfo\expandafter{\package@name}{% - Title page macros for \protect\LaTeXe, - by A. Ogawa (arthur_ogawa at sbcglobal.net)% -}% -% \end{macrocode} -% -% \subsection{Prerequisites}% -% -% This package requires the use of the \classname{ltxutil} package. -% \begin{macrocode} -\let\class@name\package@name -\RequirePackage{ltxutil}% -%</package> -% \end{macrocode} -% End of the preliminary portion of the package code. -% \begin{macrocode} -% \end{macrocode} -% -% \subsection{Options}% -% Package options are treated in this portion of the dtx file. -% This portion is guarded by the \texttt{options} \classname{docstrip} code so that it can be -% merged into a larger package gracefully. -% \begin{macrocode} -%<*options> -% \end{macrocode} -% -% Package option turns on diagnostics that trace its operation. -% \cmd\frontmatterverbose@sw\ is set false by default: we do not elect to monitor -% the workings of these procedures. -% \begin{macrocode} -\DeclareOption{frontmatterverbose}{\@booleantrue\frontmatterverbose@sw}% -\@booleanfalse\frontmatterverbose@sw -% \end{macrocode} -% -% Package option inactivates its syntax, for testing purposes. -% \begin{macrocode} -\DeclareOption{inactive}{\@booleanfalse\frontmatter@syntax@sw}% -\@booleantrue\frontmatter@syntax@sw -% \end{macrocode} -% -% \begin{macro}{\runinaddress@sw} -% The flag \cmd\runinaddress@sw\ signifies that author addresses are to be set on the same -% line with the author. -% -% The \classoption{runinaddress} option is the only one that sets \cmd\runinaddress@sw\ to true. -% -% FIXME: this option pertains to cases where \cmd\groupauthors@sw\ is true, but is independant of \cmd\@affils@sw. -% So, it should be possible to assert both \classoption{runinaddress} and \classoption{unsortedaddress} as well as -% each separately. -% \begin{macrocode} -\@booleanfalse\runinaddress@sw -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@affils@sw} -% If \cmd\@affils@sw\ is false, an address is never recognised as ``new'' -% and is therefore always entered into the affiliation list, -% stopping groups of authors at the same address being consolidated -% into the same list: -% the address will be printed the same number of times it is entered. -% -% The \classoption{unsortedaddress} option is the only one that sets \cmd\@affils@sw\ to false. -% \begin{macrocode} -\@booleantrue\@affils@sw -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\groupauthors@sw} -% The flag \cmd\groupauthors@sw\ signifies that authors are to be grouped, -% affecting the meaning of \cmd\@author@present. -% -% Clients will want to set \cmd\groupauthors@sw\ true if they want grouped addresses -% or either of the following variants: -% for unsorted addresses: set \cmd\@affils@sw\ false; -% for run-in addresses, set \cmd\runinaddress@sw\ true. -% \begin{macrocode} -\@booleanfalse\groupauthors@sw -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{groupedaddress} -% If we take the \classoption{groupedaddress} option as the default, then we can look upon -% the \classoption{superscriptaddress} option as simply turning \cmd\groupauthors@sw\ to \cmd\false@sw. -% -% \classoption{groupedaddress}, the default in APS journals, groups authors above a common address. -% \begin{macrocode} -\DeclareOption{groupedaddress}{\clo@groupedaddress}% -\def\clo@groupedaddress{% - \@booleantrue\groupauthors@sw - \@booleantrue\@affils@sw - \@booleanfalse\runinaddress@sw -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{unsortedaddress} -% \classoption{unsortedaddress} is similar to \classoption{groupedaddress}, -% but turns off \cmd\@affils@sw, -% with the result that each address that is entered will be printed. -% \begin{macrocode} -\DeclareOption{unsortedaddress}{\clo@unsortedaddress}% -\def\clo@unsortedaddress{% - \@booleantrue\groupauthors@sw - \@booleanfalse\@affils@sw - \@booleanfalse\runinaddress@sw -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{runinaddress} -% -% \classoption{runinaddress} is similar to \classoption{groupedaddress}, -% with the addition of the Boolean \cmd\runinaddress@sw, -% which causes the authors associated with a particular address group -% to be formatted in a paragraph instead of on separate lines. -% \begin{macrocode} -\DeclareOption{runinaddress}{\clo@runinaddress}% -\def\clo@runinaddress{% - \@booleantrue\groupauthors@sw - \@booleantrue\@affils@sw - \@booleantrue\runinaddress@sw -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{superscriptaddress} -% \classoption{superscriptaddress} presents author affiliations -% as superscripts. Authors with like affiliations share the same -% superscript. -% -% FIXME: if \cmd\groupauthors@sw\ is false, would not \cmd\@affils@sw\ be a don't care? -% \begin{macrocode} -\DeclareOption{superscriptaddress}{\clo@superscriptaddress}% -\def\clo@superscriptaddress{% - \@booleanfalse\groupauthors@sw - \@booleantrue\@affils@sw - \@booleanfalse\runinaddress@sw -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -%</options> -% \end{macrocode} -% -% \subsection{Process package options}% -% \begin{macrocode} -%<*package> -\DeclareOption*{\OptionNotUsed}% -\ProcessOptions* -%</package> -% \end{macrocode} -% -% \section{Kernel of Front Matter} -% Here begins the kernel of the \classname{frontmatter} package. -% \begin{macrocode} -%<*kernel> -% \end{macrocode} -% -% This package implements a new syntax for the title page of an article. -% -% Special acknowledgment: this package uses concepts pioneered -% and first realized by William Baxter (mailto:web at superscript.com) -% in his SuperScript line of commercial typesetting tools, and -% which are used here with his permission. -% -% These macros were first coded by David P. Carlisle for the American Physical -% society in the late 1990s as part of the development of REV\TeX4. -% That development work was taken over by Arthur Ogawa, who is the author of -% this package. -% -% \subsection{Initialization}% -% -% \begin{macro}{\frontmatter@init} -% The \cmd\frontmatter@init\ procedure sets up all the registers for -% processing the title page. -% At present, this is done once, at \cmd\class@documenthook\ time. -% If multiple title pages are to be processed within a job, -% the initialization must be done for each. -% \begin{macrocode} -\appdef\class@documenthook{\frontmatter@init}% -\let\frontmatter@init\@empty -% \end{macrocode} -% \end{macro} -% -% \subsection{The title command}% -% -% \begin{macro}{\title} -% \begin{macro}{\do@title} -% The author uses \cmd\title\ to specify the title. As in the AMS -% classes, \cmd\title\ has an optional argument specifying a short form -% for use in running heads. -% -% Once the \cmd\title\ is given, you can specify any combination of -% \cmd\thanks, \cmd\email, \cmd\homepage, and \cmd\altaffiliation\ commands, -% applying to the title of the document. -% -% Compatibility note: as with all of the standard \LaTeX\ commands that we override, -% we make here a private definition and later switch it in if so required. -% \changes{4.1b}{2008/08/02}{Make the syntax of this package switch optional}% -% \begin{macrocode} -\newcommand\frontmatter@title[2][]{% - \def\@title{#2}% - \def\@shorttitle{#1}% - \let\@AF@join\@title@join -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@title} -% \begin{macro}{\@shorttitle} -% The arguments to \cmd\title\ are saved in these internal -% macros, which are set up to produce a warning if \cmd\title\ has not -% been used before \cmd\maketitle. -% \changes{4.1b}{2008/08/02}{Use \cs{frontmatter@init} as the vehicle for all initialization} -% -% Extensibility note: by using \cmd\frontmatter@init\ as the initialization procedure, -% we open the possibility of more than one title page per document. -% \begin{macrocode} -\appdef\frontmatter@init{% - \def\@title{\class@warn{No title}}% - \let\@shorttitle\@empty - \let\@title@aux\@title@aux@cleared -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@title@join} -% \begin{macro}{\@title@join@} -% \begin{macro}{\@title@aux@cleared} -% -% \begin{macrocode} -\def\@title@join{\expandafter\@title@join@\@title@aux}% -\def\@title@join@#1#2{% - \def\@title@aux{{\@join{\@separator}{#1}{#2}}}% -}% -\def\@title@aux@cleared{{}}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% -% \subsection{The author, affiliation, and related commands}% -% -% \begin{macro}{\c@affil} -% \begin{macro}{\c@collab} -% \changes{4.1b}{2008/08/02}{(AO, 486) \cs{collaboration} to work with \texttt{groupedaddress}} -% -% \cmd\c@affil\ stores the affiliation numbers used for the superscript marks. -% The \cmd\newcounter\ command defines \cmd\theaffil, which we never use: -% this counter is evaluated solely via \cmd\the. -% -% \cmd\c@collab\ stores the collaboration numbers. -% The \cmd\newcounter\ command defines \cmd\thecollab. -% As with \cmd\c@affil, we never use \cmd\thecollab; only \cmd\the\ \cmd\c@collab. -% -% Each counter must be cleared before frontmatter can be processed. -% \begin{macrocode} -\newcounter{affil}% -\newcounter{collab}% -\appdef\frontmatter@init{% - \c@affil\z@ - \c@collab\z@ -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \subsubsection{Commands for author or collaboration}% -% -% \begin{macro}{\author} -% Each author is given in a \emph{separate} \cmd\author\ command. -% This is similar to the AMS classes, but the AMS also try to support -% the \classname{article} class's \cmd\and\ command for putting multiple -% authors in one \cmd\author\ command. -% This package, however, does not support the \cmd\and\ command. -% -% When the \cmd\author\ command is encountered, -% the previous author, author group, affiliation, and affiliation group are at an end. -% This procedure moves the previous author to the author group (\cmd\move@AU), -% moves the previous affiliation to the affiliation group (\cmd\move@AF), -% and terminates the previous author/affiliation group (\cmd\move@AUAF) as the case may require. -% -% Compatibility note: as with all of the standard \LaTeX\ commands that we override, -% we make here a private definition and later switch it in if so required. -% \changes{4.1b}{2008/08/02}{Make the syntax of this package switch optional}% -% \begin{macrocode} -\newcommand\frontmatter@author{% implicit #1 - \@author@def{}% implicit #2 -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\collaboration} -% Specify the collaboration (given after a group of authors). -% -% This procedure does exactly what \cmd\author\ does, and sets -% a flag signifying that the \cmd\collaboration\ command was given. -% -% Note: earlier versions attempted to ignore the collaboration command if it was considered inappropriate. -% We must not do this, however, because it throws the state machine out of kilter. -% \changes{4.1b}{2008/08/02}{(AO, 486) \cs{collaboration} to work with \texttt{groupedaddress}} -% \begin{macrocode} -\def\collaboration{% implicit #1 - \@author@def{\@booleantrue\collaboration@sw}% implicit #2 -}% -\appdef\frontmatter@init{% - \@booleanfalse\collaboration@sw -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@author@init} -% \begin{macro}{\@author@cleared} -% \begin{macro}{\@authorclear@sw} -% \begin{macro}{\@author@def} -% \begin{macro}{\@author@join@} -% \begin{macro}{\@author@join} -% \changes{4.0b}{1999/06/20}{Change handling of \cs{@author} to prevent parsing problems. (Helps in error recovery when syntax errors exist)} -% \changes{4.1b}{2008/08/02}{(AO, 486) \cs{collaboration} to work with \texttt{groupedaddress}} -% \changes{4.1b}{2008/08/02}{Use \cs{frontmatter@init} as the vehicle for all initialization} -% -% Here are all the access procedures for the author data structure. -% -% We define a flag value for \cmd\@author (private), -% a procedure \cmd\@author@gobble\ to read author data without any effect, -% a procedure for setting \cmd\@author\ to the flag value (\cmd\@author@init), -% a Boolean to test against the flag value (\cmd\@authorclear@sw), -% and a procedure to add new ancillary data to the author. -% -% Note that expanding the functionality of the \cmd\collaboration\ command entailed changing -% the data structures, because now all authors must remember the collaboration they belong to. -% This change affects procedures \cmd\@author@cleared\ and \cmd\@author@gobble. -% \begin{macrocode} -\def\@author@cleared{{}{}{}}% -\def\@author@gobble#1#2#3{}% -\def\@author@init{% - \let\@author\@author@cleared - \@booleanfalse\collaboration@sw -}% -\def\@authorclear@sw{\@ifx{\@author\@author@cleared}}% -\appdef\frontmatter@init{% - \@author@init -}% -% \end{macrocode} -% \changes{4.1i}{2009/10/18}{(AO, 540) More runtime diagnostics via \cs{frontmatterverbose@sw}} -% \begin{macrocode} -\def\@author@def#1#2{% - \frontmatterverbose@sw{\typeout{\string\author\space\string\collaboration}}{}% - \move@AU\move@AF\move@AUAF - \let\@AF@join\@author@join - #1% - \def\@author{{#2}{}}% -}% -\def\@author@join@#1#2#3{% - \def\@author{{#1}{\@join{\@separator}{#2}{#3}}}% -}% -\def\@author@join{\expandafter\@author@join@\@author}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\move@AU} -% \begin{macro}{\add@AUCO@grp} -% \changes{4.1b}{2008/08/02}{(AO, 486) \cs{collaboration} to work with \texttt{groupedaddress}} -% The \cmd\move@AU\ procedure moves the most recent author to the current author group \cmd\AU@grp, -% or the most recent collaboration to the collaboration group \cmd\CO@grp. -% If we recently did a \cmd\@author@init, this is a no-op. -% -% To accommodate the expanded syntax of \cmd\collaboration, we add a new field to -% those associated with an author (collaborator), namely the value of the -% collaboration counter. -% \begin{macrocode} -\def\move@AU{% - \@authorclear@sw{}{% - \collaboration@sw{% - \advance\c@collab\@ne - \@argswap{\CO@grp\CO@opr}% - }{% - \@argswap{\AU@grp\AU@opr}% - }% - {% - \expandafter\@argswap@val - \expandafter{\@author}% - {\expandafter\@argswap@val\expandafter{\the\c@collab}{\add@AUCO@grp}}% - }% - }% - \@author@init -}% -% \end{macrocode} -% \changes{4.1b}{2008/08/02}{Provide for diagnostics via \cs{frontmatterverbose@sw}} -% The procedure \cmd\add@AUCO@grp\ adds to the specified group \#3 using the -% given intercollated operator \#4, with arguments \{\#1\} and \#2, -% where the first argument is the collaboration number, -% the second is the author name, and the third the joined attributes of the author. -% For example, \cmd\move@AU\ could finally execute: -% \cmd\appdef\ \cmd\AU@grp\ \{\cmd\AU@opr\{1\}\{A. Author\}\{\}\}. -% \begin{macrocode} -\def\add@AUCO@grp#1#2#3#4{% - \appdef#3{#4{#1}#2}% - \frontmatterverbose@sw{\say#3}{}% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@author@finish} -% We define a procedure to terminate author/affiliation parsing just before the title block is formatted. -% We detect the case where an author group is not followed by an affiliation group. -% \changes{4.0f}{2001/02/13}{Actually append \cs{AU@grp} to \cs{@AAClist}.} -% \changes{4.1b}{2008/08/02}{(AO, 486) \cs{collaboration} to work with \texttt{groupedaddress}} -% \changes{4.1b}{2008/08/02}{Use \cs{@affil@def} for all access to \cs{@affil}} -% \changes{4.1b}{2008/08/02}{Provide for diagnostics via \cs{frontmatterverbose@sw}} -% \changes{4.1g}{2009/10/05}{(AO, 535) Robustify \cs{footnote} while \cs{class@warn} is expanding its argument} -% \changes{4.1i}{2009/10/18}{(AO, 540) More runtime diagnostics via \cs{frontmatterverbose@sw}} -% \changes{4.1m}{2009/11/20}{(AO, 563) \cs{collaboration} to work with both \texttt{groupedaddress} and \texttt{superscriptaddress}} -% \changes{4.1n}{2009/11/30}{(AO, 567) Handle \cs{noaffiliation} case} -% -% We first finish off any author- or affiliation groups in progress. -% Next, we detect the case where there is an author group or a collaboration group in progress, but no affiliation group. -% If so, we emit a diagnositic message and act as if a \cmd\noaffiliation\ command had been given. -% In any case, we finish off any author/affiliation pair that may remain. -% Formatting of the title block may now proceed. -% \begin{macrocode} -\def\@author@finish{% - \frontmatterverbose@sw{\typeout{\string\@author@finish}}{}% - \move@AU\move@AF - \@ifx{\AU@grp\@empty}{% - \@ifx{\CO@grp\@empty}% - }{% - \false@sw - }% - {}{% - \@ifx{\AF@grp\@empty}{% - \begingroup - \let\href\@secondoftwo - \let\AU@opr\@secondofthree - \let\CO@opr\@secondofthree - \let\footnote\@gobble - \@ifx{\CO@grp\@empty}{% - \class@warn{Assuming \string\noaffiliation\space for authors}% - \frontmatterverbose@sw{\say\AU@grp}% - }{% - \class@warn{Assuming \string\noaffiliation\space for collaboration}% - \frontmatterverbose@sw{\say\CO@grp}{}% - }% - \endgroup - \@affil@none\move@AF - }{}% - }% - \move@AUAF -}% -\def\@secondofthree#1#2#3{#2}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@join} -% The procedure \cmd\@join\ inserts -% a separator between two tokens, or, if the first token is -% nil, elides both that token and the separator. -% \begin{macrocode} -\def\@join#1#2#3{% - \@if@empty{#2}{#3}{#2#1#3}% -}% -\def\@separator{;\space}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\surname} -% \begin{macro}{\firstname} -% No-op to allow better post-processing of the file. -% \begin{macrocode} -\let\surname\@firstofone -\let\firstname\@firstofone -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\and} -% The original \LaTeX\ idea of using one \cmd\author\ command to capture -% all authors and their address just doesn't work with multiple authors -% possibly sharing addresses, so in this class disable \cmd\and. -% \begin{macrocode} -\newcommand\frontmatter@and{\class@err{\protect\and\space is not supported}} -% \end{macrocode} -% \end{macro} -% -% -% \subsubsection{Commands for affiliation}% -% -% \begin{macro}{\affiliation} -% \changes{4.1b}{2008/08/02}{Use \cs{@affil@def} for all access to \cs{@affil}} -% After each group of authors with the same address, -% give that address in \cmd\affiliation. -% If later in the list you have an author -% with the address of an earlier author, repeat the \cmd\affiliation\ -% command: the system will detect the equivalence and (if using the \classoption{superscriptaddress} option) -% only print the affiliation once, reusing the superscript marker. -% -% When the \cmd\affiliation\ command is encountered, the current author and author group (if any) are at an end. -% Also, the current affiliation is at an end. -% -% \changes{4.1i}{2009/10/18}{(AO, 540) More runtime diagnostics via \cs{frontmatterverbose@sw}} -% FIXME: changes to catcode required elsewhere now? -% \begin{macrocode} -\def\cat@comma@active{\catcode`\,\active}% -{\cat@comma@active\gdef,{\active@comma}}% -\def\active@comma{,\penalty-300\relax}% -\newcommand\affiliation{% - \frontmatterverbose@sw{\typeout{\string\affiliation}}{}% - \move@AU\move@AF - \begingroup - \cat@comma@active - \@affiliation -}% -\def\@affiliation#1{% - \endgroup - \let\@AF@join\@affil@join - \@affil@def{#1}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\noaffiliation} -% \changes{4.1b}{2008/08/02}{Use \cs{@affil@def} for all access to \cs{@affil}} -% \changes{4.1i}{2009/10/18}{(AO, 540) More runtime diagnostics via \cs{frontmatterverbose@sw}} -% \changes{4.1n}{2009/11/30}{(AO, 567) Handle \cs{noaffiliation} case} -% User-level command \cmd\noaffiliation\ signifies that the current group of authors, or the current collaboration, has \emph{no} affiliation. -% -% This is implemented by acting as if the \cmd\affiliation\ command has been given, and using a -% flag value of \{\cmd\relax\}, which adds an element to the affiliation group of this author, -% albeit a nil one (\cmd\AFF@opr\ \{\cmd\relax\} \{\}). -% -% Note that this procedure does substantially the same as \cmd\@author@finish. (the latter, If it does not bail out altogether, differs chiefly in providing diagnostics). -% \begin{macrocode} -\newcommand\frontmatter@noaffiliation{% - \frontmatterverbose@sw{\typeout{\string\noaffiliation}}{}% - \move@AU\move@AF -% \end{macrocode} -% In \cmd\@author@finish, there is code testing if an effective -% \cmd\noaffiliation\ should be executed now. Here, we do so in any case. -% \begin{macrocode} - \@affil@none\move@AF - \move@AUAF -}% -\def\blankaffiliation{{}}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@affil@cleared} -% \begin{macro}{\@affil@nil} -% \begin{macro}{\@affil@init} -% \begin{macro}{\@affil@none} -% \begin{macro}{\@affilclear@sw} -% \begin{macro}{\@affil@def} -% \begin{macro}{\@affil@join@} -% \begin{macro}{\@affil@join} -% \changes{4.1b}{2008/08/02}{Use \cs{@affil@def} for all access to \cs{@affil}} -% \changes{4.1n}{2009/11/30}{(AO, 567) Handle \cs{noaffiliation} case} -% -% Here are all the access procedures for the affiliation data structure. -% Note the similarity to those of the \cmd\@author\ data structure. -% -% We define a flag value for \cmd\@affil\ (private), -% a procedure for setting \cmd\@affil\ to the flag value (\cmd\@affil@init), -% a Boolean to test against the flag value (\cmd\@affilclear@sw), -% a procedure \cmd\@affil@def\ to load a value into the structure, -% and a procedure to add new ancillary data to the affiliation. -% \begin{macrocode} -\def\@affil@cleared{{{}}{}}% -\def\@affil@nil{{\relax}{}}% -\appdef\frontmatter@init{% - \@affil@init -}% -\def\@affil@none{% - \let\@affil\@affil@nil -}% -\def\@affil@init{% - \let\@affil\@affil@cleared -}% -\def\@affilclear@sw{\@ifx{\@affil\@affil@cleared}}% -\def\@affil@def#1{% - \def\@affil{{#1}{}}% -}% -\def\@affil@join@#1#2#3{% - \def\@affil{{#1}{\@join{\@separator}{#2}{#3}}}% -}% -\def\@affil@join{\expandafter\@affil@join@\@affil}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\move@AF} -% \changes{4.1b}{2008/08/02}{(AO, 486) \cs{collaboration} to work with \texttt{groupedaddress}} -% \changes{4.1i}{2009/10/23}{(AO, 540) Rationalize code that appends to \cs{AF@grp}} -% \changes{4.1n}{2009/11/30}{(AO, 567) Handle \cs{noaffiliation} case} -% Move the most recent affiliation to the affiliation group. -% If we recently did a \cmd\@affil@init, this is a no-op. -% -% Set the \cmd\temp@sw\ to false, then execute the affiliation list (\cmd\@AFF@list) -% with the intercollated operator set to \cmd\@affil@match\ -% and with \cmd\@tempa\ holding the first component of \cmd\@affil, the current affiliation, which is to be matched. -% -% If the current affiliation has been seen before, then by side effect -% \cmd\temp@sw\ will be set to true, -% \cmd\@tempc\ will be set to the matching affiliation number, -% and \cmd\@tempd\ will be set to the affiliation's ancillary data. -% The Boolean \cmd\@affils@sw\ being false prevents this test from ever returning a ``true'' result. -% -% This procedure uses \cmd\@tempa\ and sets \cmd\@tempc, \cmd\@tempd, and \cmd\temp@sw. -% \begin{macrocode} -\def\move@AF{% - \@affilclear@sw{}{% - \@booleanfalse\temp@sw - \let\@tempd\@empty - \@affils@sw{% - \expandafter\@affil@addr@def\expandafter\@tempa\@affil - \def\AFF@opr{\@affil@match\@tempa}% - \@AFF@list - }{}\temp@sw -% \end{macrocode} -% True clause: This affiliation has been seen before. -% If ancillary data for the affiliation have been given, but are not identical to those seen before, give a warning. -% \begin{macrocode} - {% - \expandafter\@affil@aux@def\expandafter\@tempb\@affil - \@ifx{\@tempb\@empty}{}{% - \@ifx{\@tempb\@tempd}{}{% - \class@warn{% - Ancillary information for \@tempa\space must not be different! - Please put all of it on the first instance% - }% - }% - }% - }% -% \end{macrocode} -% False clause: This affiliation is a new one: -% increment the affiliation counter to get a unique affiliation ID -% and append the new ID, collaboration number, address, and auxiliary information -% to the list \cmd\@AFF@list. -% -% Note that, with the expanded syntax of \cmd\collaboration, we need to label each address with -% its associated collaboration. -% -% Note also that the \cmd\noaffiliation\ case is handled by recognizing the flag value \cmd\@affil@nil. -% \begin{macrocode} - {% - \@ifx{\@affil\@affil@nil}{% - \def\@tempc{0}% - \@argswap@val{0}% - }{% - \advance\c@affil\@ne - \expandafter\def\expandafter\@tempc\expandafter{\the\c@affil}% - \expandafter\@argswap@val\expandafter{\the\c@affil}% - }% - {% - \expandafter\@argswap@val\expandafter{\the\c@collab}{% - \expandafter\@argswap@val\expandafter{\@affil}{% - \add@list@val@val@val\@AFF@list\AFF@opr - }% - }% - }% - }% -% \end{macrocode} -% In either case, append this affiliation number to the \cmd\AF@grp, the affiliation group of the current author group. -% (It will later be considered for the \cmd\@AFG@list.) -% Then assign the flag value to \cmd\@affil\ that signifies it has been cleared. -% \changes{4.1i}{2009/10/18}{(AO, 540) Rationalize code that appends to \cs{AF@grp}} -% \begin{macrocode} - \appdef@eval\AF@grp\@tempc - \frontmatterverbose@sw{\say\AF@grp}{}% - \@affil@init - }% -}% -\def\@affil@addr@def#1#2#3{% - \def#1{#2}% -}% -\def\@affil@aux@def#1#2#3{% - \def#1{#3}% -}% -% \end{macrocode} -% \changes{4.1b}{2008/08/02}{Provide for diagnostics via \cs{frontmatterverbose@sw}} -% Procedure \cmd\add@list@val@val@val\ appends to the given list \#1 using the given intercollated operator \#2, -% with arguments \#5 (affiliation ID) and \#4 (collaboration ID) delimited by braces, and \#3 bare. -% In the end, \cmd\move@AF\ may execute something like -% \cmd\appdef\ \cmd\@AFF@list\ \cmd\AFF@opr\ \{1\} \{3\} \{My Institution\} \{thanks\}. -% \begin{macrocode} -\def\add@list@val@val@val#1#2#3#4#5{% - \appdef#1{#2{#5}{#4}#3}% - \frontmatterverbose@sw{\say#1}{}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@affil@match} -% \changes{4.1b}{2008/08/02}{(AO, 486) \cs{collaboration} to work with \texttt{groupedaddress}} -% The procedure \cmd\@affil@match\ is the definition for \cmd\AFF@opr, -% the intercollated operator for \cmd\@AFF@list, -% when adding a new affiliation: it seeks a match with any earlier affiliation. -% When the affiliation list is executed, this procedure tests each entry against -% the `new' affiliation (which has been stored in \cmd\@tempa) and its associated -% collaboration number (in \cmd\@tempb). -% -% If \cmd\groupauthors@sw\ is true, then we require the collaboration ID to match, -% otherwise there is no such requirement, -% as is appropriate for the \classoption{superscriptaddress} class option. -% -% Uses \cmd\temp@sw, \cmd\@tempc, and \cmd\@tempd\ to communicate back: -% if it returns \cmd\temp@sw\ true, a match was found. -% Then -% \cmd\@tempc\ will be the affiliation ID of the matching entry -% and \cmd\@tempd\ will be the auxiliary information of the matching entry. -% \begin{macrocode} -\def\@affil@match#1#2#3#4#5{% - \temp@sw{}{% - \def\@tempifx{#4}% - \@ifx{\@tempifx#1}{% - \groupauthors@sw{% - \@ifnum{#3=\c@collab}{% - \true@sw - }{% - \false@sw - }% - }{% - \true@sw - }% - }{% - \false@sw - }% - {% - \@booleantrue\temp@sw - \def\@tempc{#2}% - \def\@tempd{#5}% - }{% - }% - }% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\move@AUAF} -% \changes{4.0h}{1998/06/25}{Changes to support groups of affiliations} -% \changes{4.1b}{2008/08/02}{(AO, 486) \cs{collaboration} to work with \texttt{groupedaddress}} -% \changes{4.1b}{2008/08/02}{Change csname \cs{AFS@opr} to \cs{AFG@opr}} -% \changes{4.1b}{2008/08/02}{Provide for diagnostics via \cs{frontmatterverbose@sw}} -% Append \cmd\AF@grp, \cmd\AU@grp, and \cmd\CO@grp\ to \cmd\@AAC@list, -% append \cmd\CO@grp\ to \cmd\@AFG@list, -% and merge any new \cmd\AF@grp\ to \cmd\@AFG@list. -% -% The entire procedure is predicated on something non-trivial to move. -% -% If both author group \cmd\AU@grp\ and affiliation group \cmd\AF@grp\ are nil, bail out. -% -% No, try that again: -% -% If we have seen any affiliations (\cmd\AF@grp\ is not nil), -% then it is time to move the current affiliation group and author group to \cmd\@AAC@list. -% If not, we are picking up authors into an author group, and we should bail out. -% -% To extend this scheme to the new \cmd\collaboration\ abilities, we must append an affiliation \cmd\AF@opr\ to \cmd\@AAC@list\ -% also in the case where there was no affiliation specified (e.g., \cmd\noaffiliation). This affiliation will be a nil affiliation: -% \cmd\AF@opr\verb+{{0}}+. -% -%FIXME: only one of \cmd\CO@grp\ or \cmd\AU@grp\ is non-empty at this point, -% but this code does not appear to recognize this fact! -% \changes{4.1i}{2009/10/18}{(AO, 540) More runtime diagnostics via \cs{frontmatterverbose@sw}} -% \begin{macrocode} -\def\move@AUAF{% - \frontmatterverbose@sw{\say\AU@grp\say\AF@grp\say\CO@grp}{}% - \@ifx{\AF@grp\@empty}{% - \@ifx{\@empty\CO@grp}{% -% \end{macrocode} -% Both \cmd\AF@grp\ and \cmd\CO@grp\ are empty: nothing to do. But what if \cmd\AU@grp\ is not empty? -% \begin{macrocode} - }{% -% \end{macrocode} -% Append the nil \cmd\AF@opr\ to \cmd\@AAC@list. -% \begin{macrocode} - \appdef \@AAC@list{\AF@opr{{0}}}% -% \end{macrocode} -% Append the collaboration group to the \cmd\@AAC@list; no intercollated operator need be added, -% because we already have \cmd\CO@opr. -% \begin{macrocode} - \appdef@e \@AAC@list{\CO@grp}% - \appdef@e \@AFG@list{\CO@grp}% - \let\CO@grp\@empty - }% - }{% -% \end{macrocode} -% Append current affiliation group (expansion of \cmd\AF@grp) -% to the author/affiliation list (\cmd\@AAC@list), -% using \cmd\AF@opr\ as the intercollated operator; -% also append the current authors (\cmd\AU@grp). -% \begin{macrocode} - \appdef \@AAC@list{\AF@opr}% - \appdef@eval\@AAC@list{\AF@grp}% - \appdef@e \@AAC@list{\AU@grp}% -% \end{macrocode} -% Determine if either \cmd\AU@grp\ or \cmd\CO@grp\ is non-empty. -% \begin{macrocode} - \@ifx{\@empty\AU@grp}{% - \@ifx{\@empty\CO@grp}% - }{% - \false@sw - }% -% \end{macrocode} -% At this point, there is a Boolean in \TeX's scanner; -% it will parse the following two brace-delimited sequences and select one of them. -% \begin{macrocode} - {% -% \end{macrocode} -% This branch is executed if and only if both \cmd\AU@grp\ and \cmd\CO@grp\ are empty. -% \begin{macrocode} - }{% -% \end{macrocode} -% There was either a \cmd\author\ or a \cmd\collaboration\ command. -% Append the current affiliation group to \cmd\@AFG@list, -% (only if it is not already there) -% using \cmd\AFG@opr\ as the intercollated operator. -% -% Note that \cmd\@AFG@list\ is a list of \emph{unique} affiliation \emph{groups}, -% and building it entails an \(N^2\) computation. -% \begin{macrocode} - \@booleanfalse\temp@sw - \def\AFG@opr{\x@match\AF@grp}% - \let\CO@opr\@author@gobble - \@AFG@list - \temp@sw{}{% - \appdef \@AFG@list{\AFG@opr}% - \appdef@eval\@AFG@list{\AF@grp}% - }% -% \end{macrocode} -% If the collaboration \cmd\CO@grp\ is not empty, we append it to the \cmd\@AFG@list\ and to the \cmd\@AAC@list. -% \changes{4.1m}{2009/11/20}{(AO, 563) \cs{collaboration} to work with both \texttt{groupedaddress} and \texttt{superscriptaddress}} -% \begin{macrocode} - \@ifx{\@empty\CO@grp}{}{% - \appdef@e \@AAC@list{\CO@grp}% - \appdef@e \@AFG@list{\CO@grp}% - \let\CO@grp\@empty - }% - }% -% \end{macrocode} -% Finally, null out the macros holding the author group \cmd\AU@grp, affiliation group \cmd\AF@grp, and collaboration group \cmd\CO@grp. -% \begin{macrocode} - \let\CO@grp\@empty - \let\AU@grp\@empty - \let\AF@grp\@empty - }% - \frontmatterverbose@sw{\say\@AAC@list\say\@AFG@list}{}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\AU@grp} -% \begin{macro}{\AF@grp} -% \begin{macro}{\@AAC@list} -% \begin{macro}{\@AFG@list} -% \begin{macro}{\@AFF@list} -% -% The control sequence name \cmd\AU@grp\ accumulates -% consecutive \cmd\author\ entries (with \cmd\AU@opr\ as the intercollated operator) -% and \cmd\collaboration\ entries (with \cmd\CO@opr\ as the intercollated operator). -% Ultimately, its contents are appended to the author/affiliation list \cmd\@AAC@list\ -% and to the list of affiliation groups, \cmd\@AFG@list. -% It must be initialized to \cmd\@empty. -% -% Note on \cmd\AU@opr\ and \cmd\CO@opr: it is essential to treat these two operators to the greatest extent possible on an equal footing. -% Therefore we invariably assign values to the pair of them within the same procedure. -% -% The macro \cmd\AF@grp\ accumulates affiliation IDs into an affiliation group. -% It must be empty at the beginning of the frontmatter. -% -% The \cmd\@AAC@list\ macro accumulates -% authors (using \cmd\AU@opr\ as the intercollated operator), -% collaborations (using \cmd\CO@opr\ as the intercollated operator), -% and -% affiliations (using \cmd\AF@opr\ as the intercollated operator). -% -% It must be empty at the beginning of the frontmatter. -% -% The macro \cmd\@AFG@list\ accumulates -% affiliation groups, with \cmd\AFG@opr\ as the intercollated operator, -% and collaborations, with no intercollated operator. -% This token list is employed when and only when \classoption{groupedaddress} is in effect. -% -% The macro \cmd\@AFF@list\ accumulates the list of affiliations -% with \cmd\AFF@opr\ as the intercollated operator. -% It must be empty at the beginning of the frontmatter. -% -% Each \cmd\affiliation\ command in the document contributes -% to this list, as long as the argument of that instance of the command -% is ``new''. -% -% Each entry in this list consists of the \cmd\AFF@opr\ intercollated operator -% followed by three brace-delimited tokens, representing, in order: -% \begin{enumerate} -% \item -% the affiliation's unique ID, a number increasing monotonically for -% each new entry, -% \item -% the optional argument of the \cmd\affiliation\ command, -% the footnote to the affiliation, and -% \item -% the text of the affiliation. -% \end{enumerate} -% -% At various junctures in the code, the control sequence name -% \cmd\AFF@opr\ assumes the meaning of -% \cmd\@affil@group, \cmd\affil@script, -% or is defined to expand to \cmd\@affil@match\cmd\@tempa, -% and the list \cmd\@AFF@list\ is expanded. -% -% For each of these lists, here is the syntax of an element and the usage of the associated operator: -% \begin{verbatim} -%\@AFF@list \AFF@opr{<affiliation ID>}{<collaboration ID>}{<address>}{<auxiliary info>} \frontmatter@author@produce@script \affils@present@group -%\@AFG@list \AFG@opr{{<affiliation ID>}..{<affiliation ID>}} \frontmatter@author@produce@group -%\@AAC@list \AF@opr{{<affiliation ID>}..{<affiliation ID>}} (\AU@opr|\CO@opr){<collaboration ID>}{<author>}{<auxilliary info>} \frontmatter@author@produce@script \frontmatter@author@produce@group \affils@present@group -% -%\AFF@opr \@affil@match\@tempa \@affil@script \@affil@group -%\AFG@opr \affils@present@group \x@match\AF@grp -%\AF@opr \@gobble \@affilID@def \@affilID@count\AF@temp\@tempcnta \@affilID@match\AF@temp -%\AU@opr \@secondofthree \@author@count\@tempcnta \@author@present \@author@gobble \@author@count#2 \@author@present -%\CO@opr \@secondofthree \@collaboration@count\AU@temp\@tempcnta \@collaboration@present\AU@temp \@collaboration@present\AU@temp \@collaboration@gobble -% -%\CO@opr\@author@cleared -% \end{verbatim} -% \begin{macrocode} -\appdef\frontmatter@init{% - \let\AU@grp\@empty - \let\CO@grp\@empty - \let\AF@grp\@empty - \let\@AAC@list\@empty - \let\@AFG@list\@empty - \let\@AFF@list\@empty -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@AF@join} -% The \cmd\csname\ \cmd\@AF@join\ is a procedure used within -% \cmd\email, \cmd\homepage, \cmd\thanks, and \cmd\altaffiliation. -% When such a command appears after an \cmd\author, \cmd\collaboration, or \cmd\affiliation -% command, the \cmd\@AF@join\ procedure appends the argument given to the appropriate -% macro. -% Its default is to give an error message, since these commands are legal only within -% the particular context mentioned. -% \begin{macrocode} -\appdef\frontmatter@init{% - \let\@AF@join\@AF@join@error -}% -\def\@AF@join@error#1{% - \class@warn{% - \string\email, \string\homepage, \string\thanks, or \string\altaffiliation\space - appears in wrong context. - }% -}% -% \end{macrocode} -% \end{macro} -% -% -% \subsubsection{Commands for auxiliary information}% -% -% \begin{macro}{\email} -% Just tacks the email address on to the current author or affiliation. -% \changes{4.1a}{2008-07-01}{(AO, 496) remove default prependation to \cs{email}.} -% \begin{macrocode} -\def\sanitize@url{% - \@makeother\%% - \@makeother\~% - \@makeother\_% -}% -\newcommand*\email[1][]{\begingroup\sanitize@url\@email{#1}}% -\def\@email#1#2{% - \endgroup - \@AF@join{#1\href{mailto:#2}{#2}}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\homepage} -% Just tacks the URL on to the current author or affiliation. -% Note: group opened in \cmd\homepage\ is closed in \cmd\@homepage. -% \changes{4.1a}{2008-07-01}{(AO, 496) remove default prependation to \cs{homepage}.} -% \changes{4.1n}{2009/12/03}{(AO) remove http:// from \cs{href} call} -% \begin{macrocode} -\newcommand*\homepage[1][]{\begingroup\sanitize@url\@homepage{#1}}% -\def\@homepage#1#2{% - \endgroup - \@AF@join{#1\href{#2}{#2}}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\href} -% The document may load a package that defines either of these commands; -% if not, we give a default meaning. -% \begin{macrocode} -\appdef\class@documenthook{% - \providecommand\href[1]{}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\thanks} -% \changes{4.1b}{2008/08/02}{Make the syntax of this package switch optional}% -% -% The operative version of \cmd\thanks\ appends an item to \cmd\@author, or \cmd\@affil's auxiliary data. -% \begin{macrocode} -\def\frontmatter@thanks{% implicit #1 - \@AF@join -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\altaffiliation} -% \changes{4.0d}{1998/01/31}{change name from \cs{tempaffiliation}} -% \changes{4.0l}{1998/09/01}{add optional argument handling back} -% Implemented more or less like \cmd\thanks\ but shares the affiliation -% counter. -% Optional argument may be used to give explanatory text eg -% `currently staying at' -% This will be placed before the address, if used in a footnote. -% \begin{macrocode} -\newcommand*\altaffiliation[2][]{% - \@AF@join{#1#2}% -}% -% \end{macrocode} -% \end{macro} -% -% -% \subsubsection{Procedures for author, collaboration, and affiliation}% -% -% Macros that list off, say, authors, and which require punctuation, like ``A, B, and C'', will use -% \cmd\set@listcomma@list, \cmd\set@listcomma@count, \cmd\@listand, and \cmd\@listcomma. -% These macros use the \cmd\@tempcnta\ register to keep track of how many items remain to be listed off. -% -% At present, \cmd\@author@present\ will decrement that counter. -% -% \begin{macro}{\set@listcomma@list} -% \begin{macro}{\set@listcomma@count} -% \changes{4.0l}{1998/09/01}{macro added} -% Pop the author count for this collaboration. -% -% Note: by side effect, it assigns \cmd\@listcomma: -% for a list of length two, suppress comma addition. -% \begin{macrocode} -\def\set@listcomma@list#1{% - \expandafter\@reset@ac\expandafter#1#1{0}\@reset@ac{% - \let\@listcomma\relax - }{% - \let\@listcomma\@listcomma@comma - }% -}% -\def\set@listcomma@count#1{% - \@ifnum{#1=\tw@}{% - \let\@listcomma\relax - }{% - \let\@listcomma\@listcomma@comma - }% -}% -% \end{macrocode} -% Does the actual pop operation, then generates a Boolean which selects one of the two assignments for \cmd\@listcomma. -% -% Note: this procedure sets \cmd\@tempcnta\ to reflect the number of items to list off. -% \begin{macrocode} -\def\@reset@ac#1#2#3\@reset@ac{% - \def#1{#3}% - \@tempcnta#2\relax - \@ifnum{#2=\tw@}% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\listand} -% Might need extending with penalties etc. -% -% Note: this procedure expects \cmd\@tempcnta\ to reflect the current number of items remaining to list off. -% \begin{macrocode} -\def\@listand{\@ifnum{\@tempcnta=\tw@}{\andname\space}{}}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@listcomma} -% This definition, with \cmd\@ne\ puts a comma before and. -% -% David Carlisle says: In UK English (at least) would have \cmd\tw@\ here, -% which would then implement the convention of indicating conjunction with comma or ``and'', but not both. -% -% Note: this procedure expects \cmd\@tempcnta\ to reflect the current number of items remaining to list off. -% \begin{macrocode} -\def\@listcomma@comma{\@ifnum{\@tempcnta>\@ne}{,}{}}% -\def\@listcomma@comma@UK{\@ifnum{\@tempcnta>\tw@}{,}{}}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@collaboration@gobble} -% This command will be the synonym of \cmd\CO@grp\ during the expansion of \cmd\@AAC@list, -% within \cmd\affils@present@group execution (in a \classoption{groupedaddress} situation). -% -% \changes{4.1m}{2009/11/20}{(AO, 563) Let \cs{@collaboration@gobble} parse all three arguments of \cs{CO@opr}} -% \begin{macrocode} -\def\@collaboration@gobble#1#2#3{}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\doauthor} -% \changes{4.1b}{2008/08/04}{Provide facility \cs{affil@cutoff}: if there is only one affiliation on the title page, no superscript}% -% \changes{4.1n}{2009/11/30}{(AO, 567) Handle punctuation for \classoption{superscriptaddress} style authors' extra information, such as \cs{email}} -% Main control over how authors are typeset. -% -% |#1| is loaded by \cmd\author -% -% |#2| is loaded by \cmd\email, \cmd\homepage, \cmd\altaffiliation, or \cmd\thanks -% -% |#3| is the superscript affiliation, if at all used. -% -% First, the author name is formatted, followed by a comma, -% then come any marks relating to affiliation (if present), -% then come the homepage URL and email address, if any, with -% appropriate punctuation. -% -% Here, as in \cmd\@affil@script, the parameter \cmd\affil@cutoff\ -% controls whether the argument \#3 is produced as a superscript label -% connecting this author with its affiliation. (If there is only one -% affiliation on the title page, it makes sense to remove the superscript.) -% -% Note that argument \#3 must effectively execute either -% \cmd\aftergroup\cmd\true@sw\ or \cmd\aftergroup\cmd\false@sw\ (exactly once!). -% In the case of \classoption{superscriptaddress}, this is done when -% \cmd\@author@present@script\ invokes \cmd\doauthor\ with its third argument containing -% \cmd\@affil@present@script. -% Otherwise (e.g., \classoption{groupedaddress}), \cmd\doauthor\ is invoked by -% \cmd\@author@present@group\ with its third argument containing \cmd\@affil@present@group. -% \begin{macrocode} -\def\doauthor#1#2#3{% - \ignorespaces#1\unskip\@listcomma - \begingroup - #3% -% \end{macrocode} -% At this point, we must have queued up a Boolean (either \cmd\true@sw\ or \cmd\false@sw). -% \begin{macrocode} - \@if@empty{#2}{\endgroup{}{}}{\endgroup{\comma@space}{}\frontmatter@footnote{#2}}% - \space \@listand -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\x@match} -% Procedure \cmd\x@match\ is used as an alias \cmd\AFG@opr, -% probing the list of affiliation groups -% and setting a Boolean if a match is found to \#1 (usually the current affiliation group). -% -% Procedure \cmd\y@match\ is used as an alias to \cmd\@TBN@opr, -% probing the list of unique title block footnotes for a match to the footnote text: -% when the first match is found it sets a Boolean, -% defining \cmd\@tempb\ to the number of that footnote. -% \begin{macrocode} -\def\x@match#1#2{% - \temp@sw{}{% - \def\@tempifx{#2}% - \@ifx{\@tempifx#1}{% - \@booleantrue\temp@sw - }{% - }% - }% -}% -\def\y@match#1#2#3{% - \temp@sw{}{% - \def\@tempifx{#3}% - \@ifx{\@tempifx#1}{% - \@booleantrue\temp@sw - \def\@tempb{#2}% - }{% - }% - }% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\frontmatter@footnote} -% Used when typesetting a title block footnote. -% (Item 290: merge duplicates.) -% -% Maintains a list of frontmatter footnotes along with associated device. -% Uniquifies each footnote by traversing the list and looking for a match to the footnote text. -% If found, define \cmd\@tempb\ to the corresponding footnote device, and typeset it with \cmd\@footnotemark. -% If never found, manually increment footnote counter, -% determine the corresponding footnote device, and -% add footnote text and device to the list of frontmatter footnotes. -% -% The list \cmd\@FMN@list\ is processed later in the title block production. -% -% Note that this method of making footnotes runs afoul of \classname{hyperref}'s patches of the \LaTeX\ kernel. -% Therefore, we avoid trouble by refraining from using \cmd\@footnotemark\ and by creating our own hypertext links. -% \begin{macrocode} -\def\frontmatter@footnote#1{% - \begingroup - \@booleanfalse\temp@sw - \def\@tempa{#1}% - \let\@tempb\@empty - \def\@TBN@opr{\y@match\@tempa}% - \@FMN@list -% \end{macrocode} -% By side effect, \cmd\@tempb\ holds the value of the footnote counter if -% This note has been seen before. Otherwise \cmd\temp@sw\ is false. -% \begin{macrocode} - \temp@sw{% - \expandafter\frontmatter@footnotemark - \expandafter{\@tempb}% - }{% -% \end{macrocode} -% Execute \cmd\frontmatter@foot@mark, feeding it the value of the current footnote counter. -% This call requires two levels of pre-expansion to accomplish, the first to expand \cmd\csname, the second to evaluate \cmd\the. -% \begin{macrocode} - \stepcounter\@mpfn - \expandafter\expandafter - \expandafter\frontmatter@foot@mark - \expandafter\expandafter - \expandafter{% - \expandafter \the\csname c@\@mpfn\endcsname - }{#1}% - }% - \endgroup -}% -% \end{macrocode} -% Procedure \cmd\frontmatter@foot@mark\ lays down the footnote device (mark) and takes care of the footnote text. -% The latter merely involves queueing that text (along with its associated device) into \cmd\@FMN@list. -% \begin{macrocode} -\def\frontmatter@foot@mark#1#2{% - \frontmatter@footnotemark{#1}% - \g@addto@macro\@FMN@list{\@TBN@opr{#1}{#2}}% -}% -\appdef\frontmatter@init{% - \global\let\@FMN@list\@empty -}% -% \end{macrocode} -% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}% -% \begin{macrocode} -\def\frontmatter@footnotemark#1{% - \leavevmode - \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi - \begingroup - \hyper@linkstart {link}{frontmatter.#1}% - \csname c@\@mpfn\endcsname#1\relax - \def\@thefnmark{\frontmatter@thefootnote}% - \@makefnmark - \hyper@linkend - \endgroup - \ifhmode\spacefactor\@x@sf\fi - \relax -}% -% \end{macrocode} -% \end{macro} -% -% -% -% \subsection{The keywords command}% -% \begin{macro}{\keywords} -% \begin{macro}{\@keywords} -% Usual game, save text in a macro for processing by \cmd\maketitle. -% \begin{macrocode} -\def\keywords#1{% - \aftermaketitle@chk{\keywords}% - \gdef\@keywords{#1}% -}% -\appdef\frontmatter@init{% - \let\@keywords\@empty -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \subsection{The \cs{date} command and related commands}% -% \begin{macro}{\date} -% \begin{macro}{\received} -% \begin{macro}{\revised} -% \begin{macro}{\accepted} -% \begin{macro}{\published} -% \begin{macro}{\@date} -% \begin{macro}{\@received} -% \begin{macro}{\@revised} -% \begin{macro}{\@accepted} -% \begin{macro}{\@published} -% \changes{4.1b}{2008/08/02}{Make the syntax of this package switch optional}% -% Use the \cmd\date\ command to specify the document date, -% the \cmd\received\ command to specify the date received, -% \cmd\revised\ for date revised, -% \cmd\accepted\ for date accepted, and -% \cmd\published\ for date published. -% Normally only \cmd\date\ to be used by author, -% the remainder used only by editors. -% -% DPC: As for \cmd\keywords, but this time don't flag a warning if there is no -% revision date specified. -% -% In each case the user-level command defines the value of a -% macro which buffers the data entered by the user. -% For instance, \cmd\received\ causes \cmd\@received\ to -% acquire a value. -% The optional argument allows the user to override the -% text that will be typeset along with the date; -% the default value of that text is itself -% a localized macro. -% \begin{macrocode} -\newcommand*\frontmatter@date[2][\Dated@name]{\def\@date{#1#2}}% -\def\@date{}% -\newcommand*\received[2][\Received@name]{\def\@received{#1#2}}% -\def\@received{}% -\newcommand*\revised[2][\Revised@name]{\def\@revised{#1#2}}% -\def\@revised{}% -\newcommand*\accepted[2][\Accepted@name]{\def\@accepted{#1#2}}% -\def\@accepted{}% -\newcommand*\published[2][\Published@name]{\def\@published{#1#2}}% -\def\@published{}% -% \end{macrocode} -% -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \subsection{The pacs command}% -% PACS, the Physics and Astronomy Classification Scheme. -% \begin{macro}{\pacs} -% \begin{macro}{\@pacs} -% As for \cmd\keywords\ -% \begin{macrocode} -\def\pacs#1{% - \aftermaketitle@chk{\pacs}% - \gdef\@pacs{#1}% -}% -\appdef\frontmatter@init{% - \let\@pacs\@empty -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \subsection{The \cs{preprint} command} -% -% \changes{4.0g}{1998/06/10}{multiple preprint commands} -% \begin{macrocode} -\def\preprint#1{\gappdef\@preprint{\preprint{#1}}}% -\appdef\frontmatter@init{% - \let\@preprint\@empty -}% -% \end{macrocode} -% -% \subsection{The \env{abstract} environment}% -% -% \changes{4.0b}{1999/06/20}{Gathered all code for the abstract environment together and abstracted out the formatting details for journals to override.} -% -% \begin{macro}{\absbox} -% -% \begin{macrocode} -\newbox\absbox -% \end{macrocode} -% \end{macro} -% -% \begin{environment}{abstract} -% Abstract, as in AMS classes, must be specified \emph{before} -% \cmd\maketitle. It just saves everything up in \cmd\absbox. -% \changes{4.0d}{1998/01/31}{If empty \cs{abstractname} omit spacing} -% \changes{4.0d}{1998/01/31}{hookify} -% Note that the specifics of how the abstract is to be -% formatted are set by \cmd\frontmatter@abstractwidth, -% \cmd\frontmatter@abstractheading, and \cmd\frontmatter@abstractfont. -% -% Here we wish to set the abstract into type but save it away in a box, much like -% the \cmd\minipage\ command does. -% -% Note that the \cmd\endabstract\ portion of the environment -% begins with code that mostly duplicates \cmd\endminipage, but without the \cmd\@iiiparbox. -% At the end, we simply transfer the contents of the \cmd\minipage\ -% into a box of our own. -% -% However, we also have to end the gratuitous -% paragraph begun by \cmd\minipage. -% We ensure that no trace of that paragraph is left, -% by absorbing the \cmd\parindent\ box. -% Doing so destroys the paragraph entirely, except -% for the \cmd\parskip\ glue, and that morsel is pruned, because we are at the top -% of a page. -% -% This mechanism is vulnerable, however, because anything placed into the horizontal list -% after the \cmd\parindent\ box will confound it. -% And that is exactly what happens under Mik\TeX: -% There seems to be an extension to the \TeX\ standard operating here which inserts a \cmd\special \ at the beginning of every paragraph. -% (The mechnism is \emph{not} based on \cmd\everypar.) -% -% To accomodate this state of affairs, -% we have a new mechanism that offers an even more complete rewrite of \env{minipage}. -% -% Note that an entry is made in the toc for the abstract; this has the side effect -% of creating a PDF bookmark for this element if the \classname{hyperref} package is in effect. -% \changes{4.1a}{2008-06-30}{(AO, 443) create an entry in the PDF bookmarks for the abstract via the toc} -% \begin{macrocode} -\def\toclevel@abstract{1}% -\def\addcontents@abstract{% - \phantomsection - \expandafter\def\csname Parent0\endcsname{section*.2}% - \expandafter\@argswap@val\expandafter{\abstractname}{\addcontentsline{toc}{abstract}}% -}% -\newenvironment{frontmatter@abstract}{% - \aftermaketitle@chk{\begin{abstract}}% - \global\setbox\absbox\vbox\bgroup - \color@begingroup - \columnwidth\textwidth - \hsize\columnwidth - \@parboxrestore -% \end{macrocode} -% The following line switches footnotes to the \texttt{mpfoootnote} series. -% This action should rather be taken by \cmd\frontmatter@abstractfont, which can be customized. -% There is also an interaction with \cmd\mini@note. -% \begin{macrocode} - \def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}\c@mpfootnote\z@ - \let\@footnotetext\frontmatter@footnotetext - \minipagefootnote@init - \let\set@listindent\set@listindent@ - \let\@listdepth\@mplistdepth \@mplistdepth\z@ - \let@environment{description}{frontmatter@description}% - \@minipagerestore - \@setminipage - \frontmatter@abstractheading - \frontmatter@abstractfont - \let\footnote\mini@note - \expandafter\everypar\expandafter{\the\everypar\addcontents@abstract\everypar{}}% -}{% - \par - \unskip - \minipagefootnote@here - \@minipagefalse %% added 24 May 89 - \color@endgroup - \egroup -}% -% \end{macrocode} -% \end{environment} -% -% \begin{macro}{\frontmatter@footnotetext} -% We reimplement \cmd\@mpfootnotetext\ under a new name (so as not to be overridden by the \classname{hyperref} package) -% and extend it to accomodate hyperrefs. -% -% Note that this procedure is very like \classname{ltxutil}'s \cmd\mp@footnotetext, except that it -% uses \cmd\frontmatter@makefntext\ instead of \cmd\@makefntext. -% -% \changes{4.1f}{2009/07/07}{(AO, 515) Use \cs{set@footnotefont}, which is defined in ltxutil} -% \changes{4.1n}{2010/01/02}{(AO, 571) allow split after last line of footnote}% -% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}% -% \begin{macrocode} -\long\def\frontmatter@footnotetext#1{% - \minipagefootnote@pick - \set@footnotefont - \set@footnotewidth - \@parboxrestore - \protected@edef\@currentlabel{\csname p@\@mpfn\endcsname\@thefnmark}% - \color@begingroup - \frontmatter@makefntext{% - \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox\vadjust{\vskip\z@skip}% - }% - \color@endgroup - \minipagefootnote@drop -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ltx@no@footwarn} -% -% \begin{macrocode} -\def\ltx@no@footnote{% - \let\ltx@xfootnote\ltx@no@xfootnote\let\ltx@yfootnote\ltx@no@yfootnote - \let\ltx@xfootmark\ltx@no@xfootmark\let\ltx@yfootmark\ltx@no@yfootmark - \let\ltx@xfoottext\ltx@no@xfoottext\let\ltx@yfoottext\ltx@no@yfoottext -}% -\def\ltx@no@xfootnote[#1]#2{\ltx@no@footwarn\footnote}% -\def\ltx@no@yfootnote#1{\ltx@no@footwarn\footnote}% -\def\ltx@no@xfootmark[#1]{\ltx@no@footwarn\footnotemark}% -\def\ltx@no@yfootmark{\ltx@no@footwarn\footnotemark}% -\def\ltx@no@xfoottext[#1]#2{\ltx@no@footwarn\footnotetext}% -\def\ltx@no@yfoottext#1{\ltx@no@footwarn\footnotetext}% -\def\ltx@no@footwarn#1{% - \class@warn{% - The \string#1\space command is not legal on the title page; - using \string\thanks\space instead might suit you: consult the manual for details% - }% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\frontmatter@abstractheading} -% The default abstract head; journals will override this procedure. -% \begin{macrocode} -\def\frontmatter@abstractheading{% - \begingroup - \centering\large - \abstractname - \par - \endgroup -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\frontmatter@abstractfont} -% The default type specification for the body of the abstract. -% Journals will override this setting. -% \begin{macrocode} -\def\frontmatter@abstractfont{}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{frontmatter@description} -% \changes{4.1b}{2008/06/29}{(AO, 455) provide a \texttt{description} environment for the abstract} -% Within the abstract, the description environment is defined as follows: -% \begin{macrocode} -\newenvironment{frontmatter@description}{% - \list{}{% - \leftmargin\z@ - \labelwidth\z@ -% \end{macrocode} -% \begin{verbatim} -% \itemindent-\leftmargin -% \end{verbatim} -% \begin{macrocode} - \itemindent\z@ - \let\makelabel\frontmatter@descriptionlabel - }% -}{% - \endlist -}% -\def\frontmatter@descriptionlabel#1{% - \hspace\labelsep - \normalfont\bfseries - #1:% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\frontmatter@abstractwidth} -% The default setting is the full text width; -% journals can override this setting. -% \begin{macrocode} -\def\frontmatter@abstractwidth{\textwidth} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\frontmatter@abstract@produce} -% This procedure determines how the abstract is incorporated -% into the title block. We split this out in anticipation -% of the need to lift the limitation that the abstract not break over pages. -% -% If we are in preprint style, we provide an easy pagebreak point immediately above the abstract. -% This means that the abstract will either fit entirely on the same page as the title block, -% or it will start a page of its own (which may itself break onto a subsequent page if necessary). -% \begin{macrocode} -\def\frontmatter@abstract@produce{% - \par - \preprintsty@sw{% - \do@output@MVL{% - \vskip\frontmatter@preabstractspace - \vskip200\p@\@plus1fil - \penalty-200\relax - \vskip-200\p@\@plus-1fil - }% - }{% - \addvspace{\frontmatter@preabstractspace}% - }% - \begingroup - \dimen@\baselineskip - \setbox\z@\vtop{\unvcopy\absbox}% - \advance\dimen@-\ht\z@\advance\dimen@-\prevdepth - \@ifdim{\dimen@>\z@}{\vskip\dimen@}{}% - \endgroup - \begingroup - \prep@absbox - \unvbox\absbox - \post@absbox - \endgroup - \@ifx{\@empty\mini@notes}{}{\mini@notes\par}% - \addvspace\frontmatter@postabstractspace -}% -\appdef\frontmatter@init{\let\mini@notes\@empty}% -\let\prep@absbox\@empty -\let\post@absbox\@empty -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\frontmatter@preabstractspace} -% \begin{macro}{\frontmatter@postabstractspace} -% Space above and space below abstract in title block -% \begin{macrocode} -\def\frontmatter@preabstractspace{.5\baselineskip} -\def\frontmatter@postabstractspace{.5\baselineskip} -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% -% -% \subsection{Formatting the title block}% -% -% \begin{environment}{titlepage} -% This is \LaTeXe's \classname{article} class version, -% with modifications. -% \changes{4.0c}{1999/11/13}{grid changes with ltxgrid} -% \changes{4.1b}{2008/08/02}{Make the syntax of this package switch optional}% -% \begin{macrocode} -\newenvironment{frontmatter@titlepage}{% - \twocolumn@sw{\onecolumngrid}{\newpage}% - \thispagestyle{titlepage}% - \setcounter{page}\@ne -}{% - \twocolumn@sw{\twocolumngrid}{\newpage}% - \twoside@sw{}{% - \setcounter{page}\@ne - }% -}% -% \end{macrocode} -% \end{environment} -% -% \begin{macro}{\maketitle} -% \changes{4.0d}{1998/01/31}{hookify} -% Put it all together to format the title block. -% -% Gotcha! -% If you expand \cmd\csname undefined\cmd\endcsname, you change the meaning of \cmd\undefined\ from -% ``Undefined'' to \cmd\relax. -% Watchout! -% \begin{macrocode} -\def\frontmatter@maketitle{% - \@author@finish - \title@column\titleblock@produce - \suppressfloats[t]% -% \end{macrocode} -% Now save some memory. -% \begin{macrocode} - \let\and\relax - \let\affiliation\@gobble - \let\author\@gobble - \let\@AAC@list\@empty - \let\@AFF@list\@empty - \let\@AFG@list\@empty - \let\@AF@join\@AF@join@error - \let\email\@gobble - \let\@address\@empty - \let\maketitle\relax - \let\thanks\@gobble - \let\abstract\@undefined\let\endabstract\@undefined - \titlepage@sw{% - \vfil - \clearpage - }{}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\maketitle@Hy} -% \changes{4.1c}{2008/08/04}{Hyperref compatibility: take \cs{maketitle} back.} -% We provide the means to take back the definition of \cmd\maketitle\ from \classname{hyperref}: -% we do not need its help in providing hypertext services in the title page. -% \begin{macrocode} -\def\maketitle@Hy{% - \let\Hy@saved@footnotemark\@footnotemark - \let\Hy@saved@footnotetext\@footnotetext - \let\@footnotemark\H@@footnotemark - \let\@footnotetext\H@@footnotetext - \@ifnextchar[%] - \Hy@maketitle@optarg - {% - \HyOrg@maketitle - \Hy@maketitle@end - }% -}% -\appdef\class@documenthook{% - \@ifx{\maketitle\maketitle@Hy}{% - \class@info{Taking \string\maketitle\space back from hyperref}% - \let\maketitle\frontmatter@maketitle - }{% - }% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\titleblock@produce} -% This procedure produces the title block. -% -% It effectively executes inside a group -% and always returns us to vertical mode. -% -% Note: we assume that it is OK to set the footnote counter to zero at this point. -% Is this a safe assumption? -% \begin{macrocode} -\def\titleblock@produce{% - \begingroup -% \end{macrocode} -% \changes{4.0b}{1999/06/20}{Set \cs{footnote} to \LaTeX\ standard version for this scope.} -% First, we restore the footnote mechanism to its default state, -% then we customize the way the footnote mark is produced and how it is formatted. -% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}% -% \begin{macrocode} - \ltx@footnote@pop -% \end{macrocode} -% The following three lines establish an independent footnote counter for use in the title block. -% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}% -% \begin{macrocode} - \def\@mpfn{mpfootnote}% - \def\thempfn{\thempfootnote}% - \c@mpfootnote\z@ - \let\@makefnmark\frontmatter@makefnmark - \frontmatter@setup - \thispagestyle{titlepage}\label{FirstPage}% -% \end{macrocode} -% Produce the title: -% \begin{macrocode} - \frontmatter@title@produce -% \end{macrocode} -% Produce the author list: -% \begin{macrocode} - \groupauthors@sw{% - \frontmatter@author@produce@group - }{% - \frontmatter@author@produce@script - }% -% \end{macrocode} -% Produce the dates: -% \begin{macrocode} - \frontmatter@RRAPformat{% - \expandafter\produce@RRAP\expandafter{\@date}% - \expandafter\produce@RRAP\expandafter{\@received}% - \expandafter\produce@RRAP\expandafter{\@revised}% - \expandafter\produce@RRAP\expandafter{\@accepted}% - \expandafter\produce@RRAP\expandafter{\@published}% - }% -% \end{macrocode} -% Produce the abstract, PACS, and keywords, and end any paragraph. -% \changes{4.1c}{2008/08/04}{Produce PACS, keywords only if specified}% -% \begin{macrocode} - \frontmatter@abstract@produce - \@ifx@empty\@pacs{}{% - \@pacs@produce\@pacs - }% - \@ifx@empty\@keywords{}{% - \@keywords@produce\@keywords - }% - \par - \frontmatter@finalspace - \endgroup -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\frontmatter@title@produce} -% The default formatting procedure for the article title. -% This procedure should take care of the vertical space below the title. -% -% Clients may override this procedure, but it is more likely that they will -% use the hooks \cmd\frontmatter@title@above, \cmd\frontmatter@title@format, and \cmd\frontmatter@title@below. -% \changes{4.1b}{2008/08/04}{(AO, 443) PDF Bookmark for title page}% -% \begin{macrocode} -\def\toclevel@title{0}% -\def\frontmatter@title@produce{% - \begingroup - \frontmatter@title@above - \frontmatter@title@format - \@title - \unskip - \phantomsection\expandafter\@argswap@val\expandafter{\@title}{\addcontentsline{toc}{title}}% - \@ifx{\@title@aux\@title@aux@cleared}{}{% - \expandafter\frontmatter@footnote\expandafter{\@title@aux}% - }% - \par - \frontmatter@title@below - \endgroup -}% -\appdef\let@mark{\let\\\relax}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\frontmatter@title@above} -% \begin{macro}{\frontmatter@title@format} -% \begin{macro}{\frontmatter@title@below} -% The default values for formatting specifications for the article title. -% -% The procedure \cmd\frontmatter@title@above\ should take care of the vertical space above the title; -% \cmd\frontmatter@title@below\ below. -% The procedure \cmd\frontmatter@title@format\ should invoke any font switches, etc. -% that may apply to the title. -% -% Journals will override this procedure. -% \begin{macrocode} -\def\frontmatter@title@above{}% -\def\frontmatter@title@format{}% -\def\frontmatter@title@below{\addvspace{\baselineskip}}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \subsubsection{Authors and affiliations in superscriptaddress style} -% -% \begin{macro}{\frontmatter@author@produce@script} -% \changes{4.1b}{2008/08/02}{Provide for diagnostics via \cs{frontmatterverbose@sw}} -% \cmd\frontmatter@author@produce@script\ is an alias for \cmd\frontmatter@author@produce, -% the procedure that formats the author/affiliation list. -% -% In this case, the authors affiliations are being superscripted -% (class option \classoption{superscriptaddress}). -% -% This procedure must ensure that any paragraph that it starts gets ended finally. -% \changes{4.1i}{2009/10/18}{(AO, 540) More runtime diagnostics via \cs{frontmatterverbose@sw}} -% \changes{4.1m}{2009/11/20}{(AO, 563) More complete runtime diagnostics via \cs{frontmatterverbose@sw}} -% \begin{macrocode} -\def\frontmatter@author@produce@script{% - \begingroup - \let\@author@present\@author@present@script - \frontmatterverbose@sw{\typeout{\string\frontmatter@author@produce@script:}\say\@AAC@list\say\@AFF@list\say\@AFG@list}{}% -% \end{macrocode} -% \changes{4.0l}{1998/09/01}{Changes to add collaboration processing, which now means doing comma/and processing on each sublist} -% When the author/affiliation list \cmd\@AAC@list\ is executed, -% \cmd\@tempcnt\ counts each author, -% and -% \cmd\@tempa\ stores a list of author indices for the current collaboration. -% -% Note: this procedure uses \cmd\AU@temp\ to hold a list of author counts for each collaboration. -% Note: also uses \cmd\@tempcnta\ to communicate between procedures. -% This usage ot \cmd\@tempcnta\ is OK, because the expansion of \cmd\@AAC@list\ will trigger only the execution of -% our own procedures. -% \begin{macrocode} - \let\AU@temp\@empty - \@tempcnta\z@ -% \end{macrocode} -% -% We wish to know how many authors are in each collaboration, for the purposes of \cmd\listcomma\ and \cmd\listand. -% -% Here we assign values for the intercollated operators appearing within \cmd\@AAC@list, -% then execute that macro, registering the authors in each collaboration. -% Afterwards, clean up by emulating an empty collaboration. -% -% The result, stored in \cmd\AU@temp, is a list of brace-delmited tokens, each a number -% representing the number of authors in that collaboration. -% \begin{macrocode} - \let\AF@opr \@gobble - \def\AU@opr{\@author@count\@tempcnta}% - \def\CO@opr{\@collaboration@count\AU@temp\@tempcnta}% - \@AAC@list - \expandafter\CO@opr\@author@cleared -% \end{macrocode} -% Next, present the authors and their affiliations, with the collaborations interleaved. -% -% We assign values for the intercollated operators appearing within \cmd\@AAC@list. -% Next, assign \cmd\@listcomma\ based on the number of authors in the first collaboration. -% Then expand \cmd\@AAC@list. -% -% Upon completion, there will be two space tokens following the last author because of \cmd\listand\ processing; -% remove them, then end the last paragraph. -% -% FIXME: this juncture would be a good time to effectively eliminate -% the unused affiliations in \cmd\@AFF@list. -% \begin{macrocode} - \begingroup - \frontmatter@authorformat - \let\AF@opr \@affilID@def - \let\AU@opr \@author@present - \def\CO@opr{\@collaboration@present\AU@temp}% - \set@listcomma@list\AU@temp - \@AAC@list - \unskip\unskip - \par - \endgroup -% \end{macrocode} -% We now list out the affiliations in the order they appeared. -% \begin{macrocode} - \begingroup - \frontmatter@above@affiliation@script - \let\AFF@opr \@affil@script - \@AFF@list - \frontmatter@footnote@produce - \par - \endgroup - \endgroup -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@author@count} -% This version of \cmd\AU@opr\ counts the number of authors it processes. -% \begin{macrocode} -\def\@author@count#1{% - \advance#1\@ne - \@author@gobble -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@collaboration@present} -% Format a collaboration. -% Note that we immediately end the paragraph thus begun, because we only support -% \classoption{superscriptaddress}-style processing. -% -% Note also that the execution of the production procedures takes place inside of a group; -% for reasons of protective programming. -% -% Bug note: originally, the number of authors in each collaboration was stored in \cmd\@tempa, -% but this exposed us to procedures in our production that modified the meaning of \cmd\@tempa. -% -% The last action done in this procedure is to assign \cmd\@listcomma\ based on the number of authors in the next collaboration. -% \begin{macrocode} -\def\@collaboration@present#1#2#3#4{% - \par - \begingroup - \frontmatter@collaboration@above - \@affilID@def{}% - \@tempcnta\z@ - \@author@present{}{(\ignorespaces#3\unskip)}{#4}% - \par - \endgroup - \set@listcomma@list#1% -}% -\def\frontmatter@collaboration@above{}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@collaboration@count} -% Simply register each author in this collaboration. -% Note: \#1 is a \cmd\csname\ to hold the value, \#2 is the \cmd\count\ register holding the count of interest. -% \begin{macrocode} -\def\@collaboration@count#1#2{% - \appdef@eval#1{\the#2}#2\z@ - \@author@gobble -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@affilID@def} -% -% The \cmd\@affilID@def\ procedure, an alias of \cmd\AF@opr\ used during \cmd\frontmatter@author@produce@script\ processing, -% memorizes the affiliation in \cmd\@affilID@temp. -% \begin{macrocode} -\def\@affilID@def{\def\@affilID@temp}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@affilID@temp} -% -% The macro \cmd\@affilID@temp\ is used to communicate between -% \cmd\doauthor\ and instances of \cmd\AF@opr\ within the author list. -% \begin{macrocode} -\let\@affilID@temp\@empty -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\affils@present@script} -% An alias of \cmd\AFG@opr, this procedure is applied to elements in \cmd\@AFG@list. -% It builds \cmd\@AFU@list, a list of unique affiliations found within affiliation groups. -% -% \changes{4.1a}{2008/06/16}{removed code that had been commented out} -% \begin{verbatim} -%\def\affils@present@script#1{% -% \get@affil#1{}% -%}% -%\def\get@affil#1{% -% \def\@tempa{#1}% -% \@ifx{\@empty\@tempa}{}{% -% \@booleanfalse\temp@sw -% \def\AF@opr{\x@match\@tempa}% -% \@AFU@list -% \temp@sw{}{% -% \appdef\@AFU@list{\AF@opr{#1}}% -% }% -% \get@affil -% }% -%}% -% \end{verbatim} -% \end{macro} -% -% \begin{macro}{\affil@present@script} -% An alias of \cmd\AF@opr, this procedure is applied to \cmd\@AFU@list\ when formatting the affiliations -% under \classoption{superscriptaddress}. -% It in turn applies \cmd\affil@script\ to \cmd\@AFF@list, thereby formatting the affiliation -% associated with this affiliation index. -% -% Note: it traverses the \cmd\@AFF@list\ for each entry in the \cmd\@AFU@list, thereby making this -% portion of code execute in $N^{2}$ time. -% \changes{4.1a}{2008/06/16}{removed code that had been commented out} -% \begin{verbatim} -%\def\affil@present@script#1{% -% \def\@tempa{#1}% -% \begingroup -% \frontmatter@affiliationfont -% \let\AFF@opr \affil@script -% \@AFF@list -% \endgroup -%}% -% \end{verbatim} -% \end{macro} -% -% \begin{macro}{\affil@script} -% Alias of \cmd\AFF@opr, this procedure is applied to \cmd\@AFF@list\ when formatting the affiliations -% under \classoption{superscriptaddress}. -% It rejects all entries not matching the affiliation index held in \cmd\@tempa. -% \begin{macrocode} -\def\affil@script#1#2#3{% - \def\@tempifx{#1}\@ifx{\@tempifx\@tempa}{% - \@if@empty{#2}{}{% - \par - \begingroup - \def\@thefnmark{#1}\@makefnmark\ignorespaces - #2% - \@if@empty{#3}{}{\frontmatter@footnote{#3}}% - \par - \endgroup - }% - }{}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@affil@script} -% Alias of \cmd\AFF@opr: -% The affiliations are being formatted in the case -% where affiliations are being superscripted: -% make a list out of the affiliations with the numbers printed. -% Society-specific code can change the formatting -% by overriding the definition of \cmd\frontmatter@affiliationfont. -% -% A client may choose to set \cmd\affil@cutoff\ to either \cmd\@ne\ (the default) -% or \cmd\tw@. The latter setting will enforce a rule to the effect that -% if a single affiliation appears on the title page, -% then no affiliation superscript at all is produced. -% -% |#1|---Affiliation ID: a number; zero signifies a \cmd\noaffiliation. -% -% |#2|---Collaboration ID -% -% |#3|---Affiliation address -% -% |#4|---Auxiliary info -% \begin{macrocode} -\def\@affil@script#1#2#3#4{% -% \end{macrocode} -% If the affiliation is the \cmd\noaffiliation, then we do nothing. -% \begin{macrocode} - \@ifnum{#1=\z@}{}{% - \par - \begingroup - \frontmatter@affiliationfont - \@ifnum{\c@affil<\affil@cutoff}{}{% - \def\@thefnmark{#1}\@makefnmark - }% - \ignorespaces#3% - \@if@empty{#4}{}{\frontmatter@footnote{#4}}% - \par - \endgroup - }% -}% -\let\affil@cutoff\@ne -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@author@present@script} -% \changes{4.0h}{1998/06/25}{Changes to support groups of affiliations} -% \changes{4.1n}{2009/11/30}{(AO, 567) Handle \cs{noaffiliation} case} -% This version of \cmd\AU@opr\ applies to the \classoption{superscriptaddress} class option. -% Need to add commas between groups -% of address numbers, which are passed in the macro \cmd\@affilID@temp\ in the form -% |{3}{4}{7}| if this set of authors is related to addresses, 3, 4 and 7. -% \begin{macrocode} -\def\@author@present@script#1#2#3{% - \begingroup - \gdef\comma@space{\textsuperscript{,\,}}% - \doauthor{#2}{#3}{\@affil@present@script}% - \endgroup - \advance\@tempcnta\m@ne -}% -\def\@affilcomma#1#2{% - \@ifx{\z@#1}{% - \@ifx{\relax#2}{}{% - \@affilcomma{#2}% - }% - }{% - #1% - \@ifx{\relax#2}{}{% - \@ifx{\z@#2}{% - \@affilcomma - }{% - ,\,\@affilcomma{#2}% - }% - }% - }% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@affil@present@script} -% \begin{macro}{\@affil@present@script@} -% \changes{4.1n}{2009/11/30}{(AO, 567) Handle punctuation for \classoption{superscriptaddress} style authors' extra information, such as \cs{email}} -% The \cmd\@affil@present@script\ procedure presents the reference to the affiliations in the case of superscript addresses. -% -% The affiliations are presented to \cmd\@affil@present@script@ as a list of brace-delimited tokens, each containing the affiliation ID (a number). -% The list is terminated by the token \cmd\relax. -% The macro recurses (via tail recursion) until the terminating token is encountered. -% Note that an affiliation ID of zero signifies a \cmd\noaffiliation: -% references to the \cmd\noaffiliation\ are passed over. -% -% Upon termination, the affiliations, if any, are produced via \cmd\textsuperscript\ and the appropriate boolean is queued via \cmd\aftergroup. -% The boolean signifies that a non-trivial affiliation was produced, so that the proper punctuation can be produced. -% The group in question is that opened and closed by the \cmd\doauthor\ procedure. -% -% This procedure uses \cmd\@tempa\ as a scratch register. -% \begin{macrocode} -\def\@affil@present@script{% - \let\@tempa\@empty - \expandafter\@affil@present@script@\@affilID@temp\relax -}% -\def\@affil@present@script@#1{% - \@ifx{\relax#1}{% - \@ifx{\@tempa\@empty}{% - \aftergroup\false@sw - }{% - \textsuperscript{\expandafter\@affilcomma\@tempa\relax\relax}% - \aftergroup\true@sw - }% - }{% - \@ifnum{#1=\z@}{}{\appdef\@tempa{{#1}}}% - \@affil@present@script@ - }% -}% -\@provide\@author@parskip{\z@skip}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% -% \subsubsection{Authors and affiliations in groupedaddress style} -% -% \begin{macro}{\frontmatter@author@produce@group} -% \changes{4.1b}{2008/08/02}{Provide for diagnostics via \cs{frontmatterverbose@sw}} -% Alias for \cmd\frontmatter@author@produce when \classoption{groupedaddress} is in effect, -% the procedure that formats the author/affiliation list. -% -% In this case, the authors are being grouped above their shared addresses. -% How it works: the \cmd\@AFG@list, a list of all unique affiliation groups, is expanded. -% For each such group, all authors belonging to that group are formatted above the affiliation group. -% Collaborations are silently passed over. -% -% This procedure must ensure that any paragraph that it starts gets ended finally. -% \changes{4.1i}{2009/10/18}{(AO, 540) More runtime diagnostics via \cs{frontmatterverbose@sw}} -% \changes{4.1m}{2009/11/20}{(AO, 563) More complete runtime diagnostics via \cs{frontmatterverbose@sw}} -% \begin{macrocode} -\def\frontmatter@author@produce@group{% - \begingroup - \let\@author@present\@author@present@group - \frontmatter@authorformat - \frontmatterverbose@sw{\typeout{\string\frontmatter@author@produce@group:}\say\@AAC@list\say\@AFF@list\say\@AFG@list}{}% - \let\AU@temp\@empty - \set@listcomma@list\AU@temp - \def\CO@opr{\@collaboration@present\AU@temp}% - \let\AFG@opr \affils@present@group - \let\@listcomma\relax - \@AFG@list - \frontmatter@footnote@produce - \par - \endgroup - \frontmatter@authorbelow -}% -\@provide\frontmatter@authorbelow{}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\affils@present@group} -% \changes{4.1b}{2008/08/02}{Provide for diagnostics via \cs{frontmatterverbose@sw}} -% Alias of \cmd\AFG@opr, this procedure is used on every element of -% \cmd\@AFG@list, the list of unique affiliation groups, -% when formatting the author/affiliation block: -% It presents all authors sharing this affiliation group. -% -% This procedure is called via the procedure -% \cmd\frontmatter@author@produce@group, an alias for \cmd\frontmatter@author@produce, -% -% Its use pertains to the class options -% \classoption{groupedaddress}, \classoption{unsortedaddress}, and \classoption{runinaddress} -% (that is, \cmd\groupauthors@sw\ is true). -% -% For each invocation, the entire \cmd\@AAC@list\ is run through (twice), -% making this process execute in $N^{2}$ time. (Is this really true?) -% \begin{macrocode} -\def\affils@present@group#1{% -% \end{macrocode} -% Count (using \cmd\@tempcnta) the authors in the author list whose affiliation group -% matches the argument |#1|. -% -% Note that \cmd\AF@temp\ is used as a storage register for the argument -% of the procedure, for purposes of comparison using \cmd\ifx. -% -% Note: here we use \cmd\@tempcnta\ to accumulate the number of authors in the current affiliation set. -% -% QUERY: do the value of \cmd\AF@temp\ and \cmd\AF@opr\ need to persist? -% -% QUERY: what value does \cmd\AU@opr\ have at this point? -% ANSWER: the \cmd\@affilID@count\ and \cmd\@affilID@match\ procedures -% assign meanings to \cmd\AU@opr\ and \cmd\CO@opr\ dynamically. -% We initialize the two operators to \cmd\@undefined\ so as to catch the -% pathological cases. -% \begin{macrocode} - \begingroup - \def\AF@temp{#1}% - \@tempcnta\z@ - \let\AU@opr \@undefined - \let\CO@opr \@undefined - \def\AF@opr{\@affilID@count\AF@temp\@tempcnta}% - \@AAC@list -% \end{macrocode} -% -% If there are no authors using this affiliation group, skip it. -% \begin{macrocode} - \@ifnum{\@tempcnta=\z@}{}{% -% \end{macrocode} -% -% DPC: If we have a list of length two, need to locally zap a comma. -% \begin{macrocode} - \begingroup - \frontmatter@above@affilgroup - \set@listcomma@count\@tempcnta -% \end{macrocode} -% Run through the author list, presenting (with \cmd\@author@present) -% those authors whose affiliation matched the given one. -% \begin{macrocode} - \let\AU@opr \@undefined - \let\CO@opr \@undefined - \def\AF@opr{\@affilID@match\AF@temp}% - \@AAC@list - \endgroup -% \end{macrocode} -% Now that the authors have all been presented, present the affiliations, grouped. -% -% Note: \cmd\@tempcnta\ is the number of affiliations for this set of authors. -% \begin{macrocode} - \begingroup - \par - \frontmatter@above@affiliation - \frontmatter@affiliationfont - \let\\\frontmatter@addressnewline - \@tempcnta\z@ - \@tfor\AF@temp:=#1\do{% - \expandafter\@ifx\expandafter{\expandafter\z@\AF@temp}{}{% - \advance\@tempcnta\@ne - }% - }% - \@ifnum{\@tempcnta=\tw@}{% - \let\@listcomma\relax - }{}% - \def@after@address - \runinaddress@sw{% - }{% - \tightenlines@sw{}{% -% \end{macrocode} -% The following line determines the space between affilations in grouped mode -% \begin{macrocode} - \parskip\z@ - }% - \appdef\after@address\par - }% - \let\AFF@opr \@affil@group - \do@affil@fromgroup\@AFF@list#1\relax - \endgroup -% \end{macrocode} -% End of branch handling authors. -% \begin{macrocode} - }% -% \end{macrocode} -% -% \begin{macrocode} - \par - \endgroup -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\def@after@address} -% \begin{macro}{\def@after@address@empty} -% \changes{4.1c}{2008/08/04}{Parametrize the production after the address}% -% -% Each of these procedures assigns a meaning to \cmd\after@address, the first -% a useful default, the second a nil. -% A society or journal substyle may define it according to its own requirements. -% \begin{macrocode} -\def\def@after@address{\def\after@address{\@listcomma\ \@listand}}% -\def\def@after@address@empty{\let\after@address\@empty}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@affilID@count} -% \begin{macro}{\@affilID@match} -% -% The control sequence name \cmd\AF@opr\ is placed in the -% author/affiliation list (\cmd\@AAC@list) for each (new) affiliation, with that affiliation as its argument. -% -% The control sequence name \cmd\AF@opr\ is an alias of a procedure -% to count the number of authors at a given affiliation (\cmd\@affilID@count) -% or to present the given authors (\cmd\@affilID@match). -% These two procedures are executed when formatting under the \classoption{groupedaddress} class option. -% \begin{macrocode} -\def\@affilID@count#1#2#3{% - \def\@tempifx{#3}% - \@ifx{\@tempifx#1}{% - \def\AU@opr{\@author@count#2}% - }{% - \let\AU@opr \@author@gobble - }% - \let\CO@opr \@collaboration@gobble -}% -\def\@affilID@match#1#2{% - \def\@tempifx{#2}% - \@ifx{\@tempifx#1}{% - \let\AU@opr \@author@present - }{% - \let\AU@opr \@author@gobble - }% - \let\CO@opr \@collaboration@gobble -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\do@affil@fromgroup} -% Executes iteratively: -% selects the next address ID to print, -% and then re-execute the list of addresses to print the text of that address. -% -% Note: an argument of \cmd\relax\ breaks out of this iteration, -% while an argument of \cmd\z@\ (\cmd\noaffiliation) is a no-op. -% -% Note: we have created an $N^{2}$ computing process. -% FIXME: can use hashing instead, you know. -% \begin{macrocode} -\def\do@affil@fromgroup#1#2{% - \@ifx{\relax#2}{}{% - \count@#2\relax - \@ifnum{\z@=\count@}{}{#1}% - \do@affil@fromgroup#1% - }% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@affil@group} -% The alias of \cmd\AFF@opr\ when the list \cmd\@AFF@list\ -% is executed by \cmd\do@affil@fromgroup\ (\classoption{groupedaddress}): -% Print the address if its number matches \cmd\count@\ (value set by \cmd\do@affil@fromgroup). -% -% Note that we detect a \cmd\noaffiliation\ here by the affiliation address being -% the same as the expansion of \cmd\blankaffiliation. -% -% \changes{4.1d}{2008/10/17}{(AO, 410) compare \cs{@tempa} to \cs{blankaffiliation}.}% -% -% I made a mistake when coding the comparison to \cmd\blankaffiliation: -% it originally read \cmd\@ifx\{\#3\cmd\blankaffiliation\}. -% This is obviously wrong once you think twice. -% \begin{macrocode} -\def\@affil@group#1#2#3#4{% - \@ifnum{#1=\count@}{% - \def\@tempa{#3}% - \@ifx{\@tempa\blankaffiliation}{}{% - #3% - \@if@empty{#4}{}{% - \frontmatter@footnote{#4}% - }% - \after@address - }% - \advance\@tempcnta\m@ne - }{}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@author@present@group} -% \begin{macro}{\@affil@present@group} -% \changes{4.0d}{1998/01/31}{\cs{comma@space}} -% This version of \cmd\AU@opr\ applies to the \classoption{groupedaddress} class option and its ilk. -% Traverse the list calling the \cmd\doauthor\ hook on each author. -% -% The third argument of \cmd\doauthor\ fulfills the requirement that it -% queue up a boolean via \cmd\aftergroup. -% \begin{macrocode} -\def\@author@present@group#1#2#3{% - \gdef\comma@space{\gdef\comma@space{\textsuperscript{,\,}}}% - \doauthor{#2}{#3}{\@affil@present@group}% - \advance\@tempcnta\m@ne -}% -\def\@affil@present@group{% - \aftergroup\false@sw -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% -% \begin{macro}{\@pacs@produce} -% PACS, keywords and dates. -% \changes{4.0d}{1998/01/31}{PACS boxed to width of abstract} -% \changes{4.0b}{1999/06/20}{Separate option now controls production} -% \changes{4.0e}{2000/09/20}{Warn if no production} -% \begin{macrocode} -\def\@pacs@produce#1{% - \showPACS@sw{% - \begingroup - \frontmatter@PACS@format - \@pacs@name#1\par - \endgroup - }{% - \@if@empty{#1}{}{% - \class@warn{\PACS@warn}% - }% - }% -}% -\def\PACS@warn{If you want your PACS to appear in your output, use document class option showpacs}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@keywords@produce} -% \changes{4.0e}{2000/09/20}{Keywords on same footing as PACS} -% \begin{macrocode} -\def\@keywords@produce#1{% - \showKEYS@sw{% - \begingroup - \frontmatter@keys@format - \@keys@name#1\par - \endgroup - }{% - \@if@empty{#1}{}{% - \class@warn{If you want your keywords to appear in your output, use document class option showkeys}% - }% - }% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\frontmatter@footnote@produce@footnote} -% \begin{macro}{\frontmatter@footnote@produce@endnote} -% Produce any footnotes to appear at the bottom of the title page. -% -% If frontmatter footnotes have been redirected to the bibliography, this will be a no-op. -% ref.: \cmd\present@bibnote. -% \begin{macrocode} -\def\frontmatter@footnote@produce@footnote{% - \let\@TBN@opr\present@FM@footnote - \@FMN@list - \global\let\@FMN@list\@empty -}% -% \end{macrocode} -% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}% -% \begin{macrocode} -\def\present@FM@footnote#1#2{% - \begingroup - \csname c@\@mpfn\endcsname#1\relax - \def\@thefnmark{\frontmatter@thefootnote}% - \frontmatter@footnotetext{#2}% - \endgroup -}% -\def\frontmatter@footnote@produce@endnote{% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \section{Package defaults} -% -% \begin{macro}{\title@column} -% \begin{macro}{\preprintsty@sw} -% \begin{macro}{\collaboration@sw} -% \begin{macro}{\frontmatter@footnote@produce} -% \begin{macro}{\do@output@MVL} -% \begin{macro}{\comma@space} -% We give meanings to the Booleans and other macros that a client document class would -% set on our behalf. -% \begin{macrocode} -\appdef\frontmatter@init{% - \@ifxundefined\title@column {\let\title@column\@empty}{}% - \@ifxundefined\preprintsty@sw {\@booleanfalse\preprintsty@sw}{}% - \@ifxundefined\frontmatter@footnote@produce{\let\frontmatter@footnote@produce\frontmatter@footnote@produce@footnote}{}% - \@ifxundefined\do@output@MVL {\let\do@output@MVL\@firstofone}{}% - \@ifxundefined\comma@space {\let\comma@space\@empty}{}% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\frontmatter@thefootnote} -% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}% -% In the title block, the footnote symbol (used for alternate affiliation and sundry) -% is a \cmd\@fnsymbol\ or a lowercase letter, as selected by a boolean. -% The society or journal may override this definition. -% \begin{macrocode} -\def\frontmatter@thefootnote{% - \altaffilletter@sw{\@alph}{\@fnsymbol}{\csname c@\@mpfn\endcsname}% -}% -\@ifx{\altaffilletter@sw\@undefined}{\@booleantrue\altaffilletter@sw}{}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\frontmatter@makefnmark} -% The default procedure for setting the footnote mark within the frontmatter. -% A client may override this procedure. -% \begin{macrocode} -\def\frontmatter@makefnmark{% - \@textsuperscript{% - \normalfont\@thefnmark - }% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\frontmatter@makefntext} -% This procedure is used when setting footnotes within the title block. -% -% Note that we are \classname{hyperref} friendly: we invoke \cmd\Hy@raisedlink\ -% so that this footnote becomes a hypertext anchor. If \classname{hyperref} is -% not loaded, then \classname{ltxutil} has our act covered via some stubs. -% -% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}% -% \begin{macrocode} -\long\def\frontmatter@makefntext#1{% - \parindent 1em - \noindent - \Hy@raisedlink{\hyper@anchorstart{frontmatter.\expandafter\the\csname c@\@mpfn\endcsname}\hyper@anchorend}% - \@makefnmark - #1% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\frontmatter@setup} -% The default type specification for the title page. -% Clients will override this definition. -% \begin{macrocode} -\def\frontmatter@setup{}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\frontmatter@RRAPformat} -% \begin{macro}{\punct@RRAP} -% \begin{macro}{\produce@RRAP} -% The procedure \cmd\frontmatter@RRAPformat\ is the formatting procedure -% for the ``Received, Revised, etc.'' block on the title page. -% The macro \cmd\punct@RRAP\ produces the punctuation between the entries. -% Clients will override these two definitions. -% -% The procedure \cmd\produce@RRAP\ is fairly general, and should be used by most -% journal substyles. -% -% The procedure \cmd\frontmatter@RRAP@format\ will be overridden by the journal. -% \begin{macrocode} -\def\frontmatter@RRAPformat#1{% - \removelastskip - \begingroup - \frontmatter@RRAP@format - #1\par - \endgroup -}% -\def\punct@RRAP{; }% -\def\produce@RRAP#1{% - \@if@empty{#1}{}{% - \@ifvmode{\leavevmode}{\unskip\punct@RRAP\ignorespaces}% - #1% - }% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\frontmatter@authorformat} -% The default type specification for the author list. -% Clients will override this definition. -% For one alternative, see the \classname{revtex4} document class. -% \begin{macrocode} -\def\frontmatter@authorformat{}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\frontmatter@above@affilgroup} -% The default amount of space above an affiliation group -% (in a \cmd\affils@present@group\ production). -% Clients will override this definition. -% \begin{macrocode} -\def\frontmatter@above@affilgroup{}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\frontmatter@above@affiliation} -% \begin{macro}{\frontmatter@above@affiliation@script} -% The \cmd\frontmatter@above@affiliation\ is the amount of space above affiliations in the \classoption{groupedaddress} -% style, and \cmd\frontmatter@above@affiliation@script\ is that for \classoption{superscriptaddress}. -% Clients will override this definition. -% For one alternative, see the \classname{revtex4} document class. -% \begin{macrocode} -\def\frontmatter@above@affiliation{}% -\def\frontmatter@above@affiliation@script{}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\frontmatter@affiliationfont} -% The default type specification for the affiliation. -% Clients will override this definition. -% For one alternative, see the \classname{revtex4} document class, where -% several alternative definitions are made. -% \begin{macrocode} -\def\frontmatter@affiliationfont{\itshape\selectfont}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\frontmatter@RRAP@format} -% The default type specification for the dates. -% Clients will override this definition. -% \begin{macrocode} -\def\frontmatter@RRAP@format{}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\frontmatter@PACS@format} -% Specify the formatting of the title page PACS statement. -% -% Journals will override. -% \begin{macrocode} -\def\frontmatter@PACS@format{}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\frontmatter@keys@format} -% Specify the formatting of the title page keywords statement. -% -% Journals will override. -% \begin{macrocode} -\def\frontmatter@keys@format{}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\frontmatter@finalspace} -% -% \begin{macrocode} -\def\frontmatter@finalspace{\addvspace{18\p@}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\frontmatter@addressnewline} -% \changes{4.0h}{1998/06/25}{new hook} -% The definition of \cmd\\\ for address handling. Default puts all the `lines' -% on a run-in line, separated by comma and space. -% DPC: was \newline space between lines of addresss. -% \begin{macrocode} -\def\frontmatter@addressnewline{% - \@ifhmode{\skip@\lastskip\unskip\unpenalty\break\hskip\skip@}{}% - % was: \vskip-.5ex -}% -% \end{macrocode} -% \end{macro} -% -% -% \begin{macro}{\frontmatter@preabstractspace} -% \begin{macro}{\frontmatter@postabstractspace} -% Space above and space below abstract in title block -% \begin{macrocode} -\def\frontmatter@preabstractspace{5.5\p@} -\def\frontmatter@postabstractspace{6.5\p@} -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\aftermaketitle@chk} -% Error-checking code. -% \begin{macrocode} -\def\aftermaketitle@chk#1{% - \@ifx{\maketitle\relax}{% - \class@err{\protect#1 must be used before \protect\maketitle}% - }{}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ps@titlepage} -% Default page style for title page. -% Journals will override this procedure. -% \begin{macrocode} -\def\ps@titlepage{\ps@empty}% -% \end{macrocode} -% \end{macro} -% -%FIXME: there is a limitation to the default meaning of -% \cmd\@startpage: the label ``FirstPage'' is only -% defined if the document has a \cmd\maketitle\ command. -% -% \begin{macrocode} -\def\volumeyear#1{\gdef\@volumeyear{#1}}% -\def\@volumeyear{}% -\def\volumenumber#1{\gdef\@volumenumber{#1}}% -\def\@volumenumber{}% -\def\issuenumber#1{\gdef\@issuenumber{#1}}% -\def\@issuenumber{}% -\def\eid#1{\gdef\@eid{#1}}% -\def\@eid{}% -% -\def\startpage#1{\gdef\@startpage{#1}\c@page#1\relax}% -\def\@startpage{\pageref{FirstPage}}% -\def\endpage#1{\gdef\@endpage{#1}}% -\def\@endpage{\pageref{LastPage}}% -% \end{macrocode} -% -% -% \subsection{Printing out the ``list-of'' elements}% -% -% FIXME: The \cmd\appendix@toc\ procedure should change the meaning -% of \cmd\l@section\ so that the \cmd\section s can be appropriately formatted, -% reflecting their status as appendices. -% -% \begin{macrocode} -\def\print@toc#1{% - \begingroup - \expandafter\section - \expandafter*% - \expandafter{% - \csname#1name\endcsname - }% - \let\appendix\appendix@toc - \@starttoc{#1}% - \endgroup -}% -\def\appendix@toc{}% -% \end{macrocode} -% -% \begin{macro}{\Dated@name} -% \begin{macro}{\Received@name} -% \begin{macro}{\Revised@name} -% \begin{macro}{\Accepted@name} -% \begin{macro}{\Published@name} -% These strings are used in the \cmd\date, et al. commands. -% \begin{macrocode} -\def\Dated@name{Dated }% -\def\Received@name{Received }% -\def\Revised@name{Revised }% -\def\Accepted@name{Accepted }% -\def\Published@name{Published }% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \changes{4.1g}{2009/10/05}{(AO, 539) Robustify \cs{class@warn} against TOC processing}% -% Two commands require robustifying against harsh treatment when TOC entries are written out. -% Note that \cmd\class@warn\ is not user-level markup, but crops up when -% the \cmd\title\ command is missing from the document. -% \begin{macrocode} -\appdef\robustify@contents{% - \let\thanks\@gobble\let\class@warn\@gobble - \def\begin{\string\begin}\def\end{\string\end}% -}% -% \end{macrocode} -% -% \subsection{Syntax switch}% -% \changes{4.1b}{2008/08/02}{Make the syntax of this package switch optional}% -% -% Shall we take over the syntax of \LaTeX? -% By default, Yes, unless the Boolean below has already been defined. -% In the package version, this is controlled by an option; -% in the kernel version, the Boolean remains undefined. -% -% \cmd\maketitle\ presents a complication. If this code will execute under -% \classname{ltxgrid}, then its version of the procedure will do fine. -% -% As a package, under \classname{article}, things are different. -% In this case, what should be done depends upon \cmd\if@titlepage. -% If true, then just execute \cmd\maketitle\ as it stands. -% If false, then the \classname{article} class has defined its wrapper -% procedure, and we should take over the meaning of \cmd\@maketitle\ instead. -% -% Here is a list of the commands defined by this package that potentially override -% those of standard \LaTeX: -% \cmd\frontmatter@title, -% \cmd\frontmatter@author, -% \cmd\frontmatter@and, -% \cmd\frontmatter@thanks, -% \cmd\frontmatter@date, -% \env{frontmatter@abstract}, -% \env{frontmatter@titlepage}, -% \cmd\frontmatter@maketitle. -% -% The following code will perform that override, given the appropriate state of the Boolean. -% \begin{macrocode} -\@ifxundefined\frontmatter@syntax@sw{\@booleantrue\frontmatter@syntax@sw}{}% -\frontmatter@syntax@sw{% - \let\title \frontmatter@title - \let\author \frontmatter@author - \let\date \frontmatter@date - \@ifxundefined\@maketitle{% - \let\maketitle \frontmatter@maketitle - \@booleantrue \titlepage@sw - }{% - \let\@maketitle \frontmatter@maketitle - \prepdef\maketitle\@author@finish - }% - \let\noaffiliation \frontmatter@noaffiliation - \let\thanks@latex \thanks - \let\thanks \frontmatter@thanks - \let\and@latex \and - \let\and \frontmatter@and - \let@environment{titlepage}{frontmatter@titlepage}% - \let@environment{abstract}{frontmatter@abstract}% -}{% - \let\noaffiliation\@empty -}% -% \end{macrocode} -% -% \subsection{End of the \file{ltxfront} kernel} -% The kernel portion of the \classname{ltxfront} package is complete. -% \begin{macrocode} -%</kernel> -% \end{macrocode} -% -% \subsection{Remainder of the \classname{ltxfront} package} -% -% Include any code here that ought to be incorporated into the package, -% but should not be part of the kernel. -% -% \begin{macrocode} -%<*package> -% \end{macrocode} -% -% \begin{macrocode} -% \end{macrocode} -% Define formatting as like as possible to the article class. -% Comands that prepare for \cmd\maketitle: \cmd\author, \cmd\title, \cmd\date. -% -% Argument of the above three may contain \cmd\\ and \cmd\thanks; argument of \cmd\author may contain \cmd\and. -% The \cmd\\ may still work fine; \cmd\and\ will be ignored (warning); -% \cmd\thanks\ even though it should not reside in the argument, will work. -% -% An explicit \cmd\footnote should be treated as if it were \cmd\thanks. -% -% \begin{verbatim} -% \@maketitle: \frontmatter@footnote@produce -% \end{verbatim} -% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}% -% -% \begin{macrocode} -\def\thanks@latex#1{% - \footnotemark - \expandafter\expandafter - \expandafter\gappdef - \expandafter\expandafter - \expandafter\@thanks - \expandafter\expandafter - \expandafter{% - \expandafter\expandafter - \expandafter\footnotetext - \expandafter\expandafter - \expandafter[% - \expandafter\the\csname c@\@mpfn\endcsname]{#1}}% -}% -\@booleanfalse\altaffilletter@sw -\@if@sw\if@titlepage\fi{\@booleantrue}{\@booleanfalse}\titlepage@sw -\def\frontmatter@title@above{\newpage\null\vskip2em\relax}% -\def\frontmatter@title@format{\centering\LARGE\let\thanks\thanks@latex}% -\def\frontmatter@title@below{\vskip1.5em\relax}% -\def\frontmatter@authorformat{\centering\large\advance\baselineskip\p@\parskip11.5\p@\let\thanks\thanks@latex\let\and\and@space}% -\def\frontmatter@authorbelow{\vskip 1em\relax}% -\def\frontmatter@above@affiliation{}% -\def\frontmatter@above@affiliation@script{}% -\def\frontmatter@affiliationfont{\centering\itshape}% -\def\frontmatter@RRAP@format{\centering\large}% -\def\frontmatter@preabstractspace{1.5em}% -% \end{macrocode} -% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}% -% \begin{macrocode} -\long\def\frontmatter@footnotetext{% - \expandafter\expandafter - \expandafter\footnotetext - \expandafter\expandafter - \expandafter[% - \expandafter\the\csname c@\@mpfn\endcsname]% -}% -\def\and@space{\\}% -\def\andname{and}% -% \end{macrocode} -% Implement the feature of the article class whereby there is a default \cmd\@date, left over -% from the \LaTeX\ kernel. -% This package does not have a default date. The user must put in an explicit command, like -% \cmd\date\arg{\cmd\today}, which will retore \LaTeX's default behavior. -% -% What if the abstract environment falls after the \cmd\maketitle\ command? -% The environment will be undefined; the user will have to deal with this. -% \begin{macrocode} -% \end{macrocode} -% End of the package. -% \begin{macrocode} -%</package> -% \end{macrocode} -% -% \Finale -% %Here ends the programmer's documentation. -% \endinput -% -\endinput -%%EOF diff --git a/macros/latex/contrib/revtex/source/ltxgrid.dtx b/macros/latex/contrib/revtex/source/ltxgrid.dtx deleted file mode 100644 index 1bd35cbd62..0000000000 --- a/macros/latex/contrib/revtex/source/ltxgrid.dtx +++ /dev/null @@ -1,6849 +0,0 @@ -% \iffalse meta-comment balanced on line 109 -% ltxgrid.dtx: package to change page grid, MVL. -% Copyright (c) 2009 Arthur Ogawa -% -% Disclaimer -% This file is distributed WITHOUT ANY WARRANTY; -% without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -% License -% You may distribute this file under the conditions of the -% LaTeX Project Public License 1.3c or later -% (http://www.latex-project.org/lppl.txt). -% ReadMe -% For the documentation and more detailed instructions for -% installation, typeset this document with \LaTeX. -% Maintenance Status -% This work has the LPPL maintenance status "maintained"; -% Current Maintainer of this work is Arthur Ogawa -% changes for version 4.2d--4.2f by Phelype Oleinik. -% -% This work consists of the main source file ltxgrid.dtx -% and the derived files -% ltxgrid.sty, ltxgrid.pdf -% Distribution: -% CTAN:macros/latex/contrib/revtex/ -% -% Unpacking: -% tex ltxgrid.dtx -% -% Documentation: -% latex ltxgrid.dtx; ... -% -% Programm calls to get the documentation (example): -% pdflatex ltxgrid.dtx -% makeindex -s gind.ist ltxgrid -% makeindex -s gglo.ist -o ltxgrid.gls ltxgrid.glo -% pdflatex ltxgrid.dtx -% makeindex -s gind.ist ltxgrid.idx -% pdflatex ltxgrid.dtx -% -% Installation: -% TDS:doc/latex/revtex/ -% TDS:tex/latex/revtex/ -% TDS:source/latex/revtex/ -% -% Thanks, Heiko! -% This method of letting a single .dtx file serve as both -% documentation (via latex) and installer (via tex) follows -% the example of Heiko Oberdiek. Thanks! -%<*ignore> -\begingroup - \def\x{LaTeX2e}% -\expandafter\endgroup -\ifcase - 0\expandafter\ifx\csname processbatchFile\endcsname\relax\else1\fi\ifx\fmtname\x\else 1\fi - \relax -\else - \csname fi\endcsname -%</ignore> -%<*install> -%% This file will generate documentation and runtime files -%% from ltxgrid.dtx when run through LaTeX or TeX. -\input docstrip -\preamble - -This is a generated file; -altering it directly is inadvisable; -instead, modify the original source file. -See the URL in the file README-LTXGRID.tex. - -License - You may distribute this file under the conditions of the - LaTeX Project Public License 1.3c or later - (http://www.latex-project.org/lppl.txt). - - This file is distributed WITHOUT ANY WARRANTY; - without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. - -\endpreamble -\askforoverwritefalse -\keepsilent - \generate{% - %{ignore} -% \usedir{tex/latex/revtex}% - \file{ltxgrid.sty}{% - \from{ltxgrid.dtx}{package,kernel}% - }% - }% -\ifToplevel{ -\Msg{***********************************************************} -\Msg{*} -\Msg{* To finish the installation, please move} -\Msg{* ltxgrid.sty} -\Msg{* into a directory searched by TeX;} -\Msg{* in a TDS-compliant installation:} -\Msg{* texmf/tex/macros/latex/revtex/.} -\Msg{*} -\Msg{* To produce the documentation, - run ltxgrid.dtx through LaTeX.} -\Msg{*} -\Msg{* Happy TeXing} -\Msg{***********************************************************} -} -\endbatchfile -%</install> -%<*ignore> -\fi -%</ignore> -% \fi -% -% \GetFileInfo{ltxgrid.dtx} -% -% \iffalse ltxdoc klootch -%<*package> -%%% @LaTeX-file{ -%%% filename = "ltxgrid.dtx", -%%% version = "4.2f", -%%% date = "2022/06/05", -%%% author = "Arthur Ogawa (mailto:arthur_ogawa at sbcglobal.net), -%%% Phelype Oleinik (mailto:phelype.oleinik at latex-project.org), -%%% commissioned by the American Physical Society. -%%% ", -%%% copyright = "Copyright (C) 1999, 2009 Arthur Ogawa, -%%% distributed under the terms of the -%%% LaTeX Project Public License 1.3c, see -%%% ftp://ctan.tug.org/macros/latex/base/lppl.txt -%%% ", -%%% address = "Arthur Ogawa, -%%% USA", -%%% telephone = "", -%%% FAX = "", -%%% email = "mailto colon arthur_ogawa at sbcglobal.net", -%%% codetable = "ISO/ASCII", -%%% keywords = "latex, page grid, main vertical list", -%%% supported = "yes", -%%% abstract = "package to change page grid, MVL", -%%% } -%</package> -% \fi -% -% \iffalse ltxdoc klootch -% The following references the \file{README-LTXGRID} file, -% which contains basic information about this package. -% The contents of this file are generated when -% you typeset the programmer's documentation. -% Search on "{filecontents*}{README-LTXGRID}" to locate it. -% \fi\input{README-LTXGRID}% -% -% \subsection{Bill of Materials} -% -% Following is a list of the files in this distribution arranged -% according to provenance. -% -% \subsubsection{Primary Source}% -% One single file generates all. -%\begin{verbatim} -%ltxgrid.dtx -%\end{verbatim} -% -% \subsubsection{Generated by \texttt{latex ltxgrid.dtx}}% -% Typesetting the source file under \LaTeX\ -% generates the readme and the installer. -%\begin{verbatim} -%README-LTXGRID ltxgrid.ins -%\end{verbatim} -% -% \subsubsection{Generated by \texttt{tex ltxgrid.ins}}% -% Typesetting the installer generates -% the package files. -%\begin{verbatim} -%ltxgrid.sty -%\end{verbatim} -% -% \subsubsection{Documentation}% -% The following are the online documentation: -% \begin{verbatim} -%ltxgrid.pdf -% \end{verbatim} -% -% \subsubsection{Auxiliary}% -% The following are auxiliary files generated -% in the course of running \LaTeX: -% \begin{verbatim} -%ltxgrid.aux ltxgrid.idx ltxgrid.ind ltxgrid.log ltxgrid.toc -% \end{verbatim} -% -% \section{Code common to all modules}% -% -% The following may look a bit klootchy, but we -% want to require only one place in this file -% where the version number is stated, -% and we also want to ensure that the version -% number is embedded into every generated file. -% -% Now we declare that -% these files can only be used with \LaTeXe. -% An appropriate message is displayed if -% a different \TeX{} format is used. -% \begin{macrocode} -%<*driver|package> -\NeedsTeXFormat{LaTeX2e}[1995/12/01]% -%</driver|package> -% \end{macrocode} -% As desired, the following modules all -% take common version information: -% \begin{macrocode} -%<kernel&!package&!doc>\typeout{% -%<*package|doc> -\ProvidesFile{% -%</package|doc> -%<*kernel|package|doc> -ltxgrid% -%</kernel|package|doc> -%<*doc> -.dtx% -%</doc> -%<package>.sty% -%<*package|doc> -}% -%</package|doc> -% \end{macrocode} -% -% The following line contains, for once and for all, -% the version and date information. -% By various means, this information is reproduced -% consistently in all generated files and in the -% typeset documentation. -% Give credit where due. -% \begin{macrocode} -%<*doc|package|kernel> -%<version> - [2022/06/05 4.2f page grid package (portions licensed from W. E. Baxter web at superscript.com)]% \fileversion -%</doc|package|kernel> -%<kernel&!package&!doc>}% -% \end{macrocode} -% -% -% \section{The driver module \texttt{doc}} -% -% This module, consisting of the present section, -% typesets the programmer's documentation, -% generating the \file{.ins} installer and \file{README-LTXGRID} as required. -% -% Because the only uncommented-out lines of code at the beginning of -% this file constitute the \file{doc} module itself, -% we can simply typeset the \file{.dtx} file directly, -% and there is thus rarely any need to -% generate the ``doc'' {\sc docstrip} module. -% Module delimiters are nonetheless required so that -% this code does not find its way into the other modules. -% -% The \enve{document} command concludes the typesetting run. -% -% \begin{macrocode} -%<*driver> -% \end{macrocode} -% -% \subsection{The Preamble} -% The programmers documentation is formatted -% with the \classname{ltxdoc} class with local customizations, -% and with the usual code line indexing. -% \begin{macrocode} -\documentclass{ltxdoc} -\RequirePackage{ltxdocext}% -\RequirePackage[colorlinks=true,linkcolor=blue]{hyperref}% -%\ifx\package@font\@undefined\else -% \expandafter\expandafter -% \expandafter\RequirePackage -% \expandafter\expandafter -% \expandafter{% -% \csname package@font\endcsname -% }% -%\fi -\CodelineIndex\EnableCrossrefs % makeindex -s gind.ist ltxgrid -\RecordChanges % makeindex -s gglo.ist -o ltxgrid.gls ltxgrid.glo -% \end{macrocode} -% -% \subsubsection{Docstrip and info directives} -% We use so many {\sc docstrip} modules that we set the -% \texttt{StandardModuleDepth} counter to 1. -% \begin{macrocode} -\setcounter{StandardModuleDepth}{1} -% \end{macrocode} -% The following command retrieves the date and version information -% from this file. -% \begin{macrocode} -\expandafter\GetFileInfo\expandafter{\jobname.dtx}% -% \end{macrocode} -% -% \subsection{The ``Read Me'' File} -% As promised above, here is the contents of the -% ``Read Me'' file. That file serves a double purpose, -% since it also constitutes the beginining of the -% programmer's documentation. What better thing, after -% all, to have appear at the beginning of the -% typeset documentation? -% -% A good discussion of how to write a ReadMe file can be found in -% Engst, Tonya, ``Writing a ReadMe File? Read This'' -% \emph{MacTech} October 1998, p. 58. -% -% Note the appearance of the -% \cmd\StopEventually\ command, which marks the -% dividing line between the user documentation -% and the programmer documentation. -% -% The usual user will not be asked to -% do a full build, not to speak -% of the bootstrap. -% Instructions for carrying these processes -% begin the programmer's manual. -% -% \begin{macrocode} -\begin{filecontents*}{README-LTXGRID} -\title{% - A \LaTeX\ Package for changing the page grid and MVL% - \thanks{% - This file has version number \fileversion, - last revised \filedate.% - }% - \thanks{% - Version \fileversion\ \copyright\ 2019--2022 American Physical Society - }% -}% -\author{% - Arthur Ogawa% - \thanks{\texttt{mailto:arthur\_ogawa at sbcglobal.net}}% -}% -%\iffalse -% For version number and date, -% search on "\fileversion" in the .dtx file, -% or see the end of the README-LTXGRID file. -%\fi -\maketitle - -This file embodies the \classname{ltxgrid} package, -the implementation and its user documentation. - -The distribution point for this work is -\url{journals.aps.org/revtex}, -which contains the REV\TeX\ package, and includes source and documentation for this package. - -The \classname{ltxgrid} package was commissioned by the American Physical Society -and is distributed under the terms of the \LaTeX\ Project Public License 1.3c, -the same license under which all the portions of \LaTeX\ itself is distributed. -Please see \url{http://ctan.tug.org/macros/latex/base/lppl.txt} for details. - -To use this document class, you must have a working -\TeX\ installation equipped with \LaTeXe\ -and possibly pdftex and Adobe Acrobat Reader or equivalent. - -To install, retrieve the distribution, -unpack it into a directory on the target computer, -into a location in your filesystem where it will be found by \LaTeX; -in a TDS-compliant installation this would be: -\file{texmf/tex/macros/latex/revtex/.} - -To use, read the user documentation \file{src/ltxgrid.pdf}. - -\tableofcontents - -\section{Processing Instructions} - -The package file \file{ltxgrid.sty} -is generated from this file, \file{ltxgrid.dtx}, -using the {\sc docstrip} facility of \LaTeX -via |tex ltxgrid.dtx|. -The typeset documentation that you are now reading is generated from -this same file by typesetting it with \LaTeX\ or pdftex -via |latex ltxgrid.dtx| or |pdflatex ltxgrid.dtx|. - -\subsection{Build Instructions} - -You may bootstrap this suite of files solely from \file{ltxgrid.dtx}. -Prepare by installing \LaTeXe\ (and either tex or pdftex) on your computer, -then carry out the following steps: -\begin{enumerate} -\item -Within an otherwise empty directory, -typeset \file{ltxgrid.dtx} with \TeX\ or pdftex; -thereby generating the package file \file{ltxgrid.sty}. - -\item -Now typeset \file{ltxgrid.dtx} with \LaTeX\ or pdflatex; -you will obtain the typeset documentation you are now reading, -along with the file \file{README-LTXGRID}. - -Note: you will have to run \LaTeX\ twice, then \file{makeindex}, then -\LaTeX\ again in order to obtain a valid index and table of contents. - -\item -Install the following files into indicated locations within your -TDS-compliant \texttt{texmf} tree (you may need root access): -\begin{itemize} -\item -\file{$TEXMF/}\file{tex/}\file{latex/}\file{revtex/}\classname{ltxgrid.sty} -\item -\file{$TEXMF/}\file{source/}\file{latex/}\file{revtex/}\classname{ltxgrid.dtx} -\item -\file{$TEXMF/}\file{doc/}\file{latex/}\file{revtex/}\classname{ltxgrid.pdf} -\end{itemize} -where \file{TEXMF/} stands for \file{texmf-local/}, or some other \texttt{texmf} tree in your installation. -\item -Run \texttt{mktexlsr} on directory \file{$TEXMF/} (you may need root access). -\item -Build and installation are now complete; -now put a \cmd\usepackage\texttt{\{ltxgrid\}} in your document preamble! -(Note: \texttt{ltxgrid} requires package \texttt{ltxutil}.) -\end{enumerate} - -\subsection{Change Log} -\changes{4.0a}{2001/06/18}{Introduce \cs{marry@height} } -\changes{4.0a}{2001/06/18}{Introduce \cs{set@marry@height} } -\changes{4.0a}{2008/06/26 }{\cs{@yfloat}: de-fang \cs{set@footnotewidth} (see ltxutil.dtx): we have already done its job. } -\changes{4.1a}{2008/06/29}{Change \cs{LT@array@new}: restore \cs{@tabularcr} and \cs{@xtabularcr}} -\changes{4.1a}{2008/06/29}{Change \cs{LT@array@new}: set \cs{LT@LL@FM@cr} to \cs{@arraycr@array} instead of \cs{@arraycr}} -\changes{4.1a}{2008/06/29}{Repair error in \cs{endlongtable@new} involving \cs{@ifx}: argument not delimited.} -\changes{4.1b}{2008/08/04}{Get rid of the \cs{reserved@a} idiom} -\changes{4.1b}{2008/08/04}{Turn off the \cs{set@footnotewidth} mechanism; a float `knows' its proper typesetting context} -\changes{4.1b}{2008/08/04}{(AO, 452) Support length checking: show size of shipped out text.} -\changes{4.1b}{2008/08/04}{(AO, 456) Compatibility with other packages that override the output routine, following suggestion by David Kastrup.} -\changes{4.1b}{2008/08/04}{} -\changes{4.1b}{2008/08/04}{Box \cs{footbox} changed to box \cs{footsofar}} -\changes{4.1b}{2008/08/04}{Change \cs{@combinepage} to \cs{@combinepage} with argument} -\changes{4.1b}{2008/08/04}{Change \cs{@makecol} to \cs{@makecolumn} with argument} -\changes{4.1b}{2008/08/04}{Change \cs{set@colroom} to \cs{set@colht}} -\changes{4.1b}{2008/08/04}{New procedure \cs{@iffpsbit} replaces \cs{@getfpsbit}} -\changes{4.1b}{2008/08/04}{New procedure \cs{@output@combined@page}} -\changes{4.1b}{2008/08/04}{New procedure for showing a box contents, \cs{trace@box}} -\changes{4.1b}{2008/08/04}{Procedure \cs{@outputpage@head} headpatches \cs{@outputpage}}% -\changes{4.1b}{2008/08/04}{Procedure \cs{@outputpage@tail} tailpatches \cs{@outputpage}}% -\changes{4.1b}{2008/08/04}{Procedure \cs{balance@2} defined more transparently}% -\changes{4.1b}{2008/08/04}{Tally the height of the float} -\changes{4.1b}{2008/08/04}{Use \cs{document@inithook} instead of \cs{AtBeginDocument}} -\changes{4.1b}{2008/08/04}{Use \cs{trace@box} instead of \cs{showbox}} -\changes{4.1f}{2009/07/07}{(AO, 515) Prevent line numbering within a footnote} -\changes{4.1f}{2009/07/10}{(AO, 518) Tally register overflow when locument is long} -\changes{4.1f}{2009/07/14}{(AO, 519) \cs{footins} content must be preserved and reintegrated} -\changes{4.1f}{2009/07/15}{(AO, 519) Preserve footnotes that are in \cs{footsofar} across a page grid change} -\changes{4.1g}{2009/10/06}{(AO, 531) Fix package \classname{float} } -\changes{4.1n}{2009/12/02}{Restore the \cs{lastbox} if it is not a footnote} -\changes{4.1n}{2009/12/02}{More diagnostics of column balancing} -\changes{4.1n}{2009/12/18}{(AO, 571) Deconstruct balanced footnotes when needed} -\changes{4.1n}{2010/01/02}{(AO, 571) Interface \cs{set@footnotewidth} for determining the set width of footnotes}% -\changes{4.1n}{2010/01/02}{(AO, 571) Footnotes, when columns are balanced or when they are composed with their column}% -\changes{4.1n}{2010/01/02}{(AO, 571) Abandon \cs{recover@footins} in favor of \cs{recover@column}}% -\changes{4.1n}{2010/01/02}{(AO, 571) Use procedures \cs{output@do@prep} and \cs{output@column@do} as dispatchers} -\changes{4.1n}{2010/01/02}{(AO, 571) coding convention: use \cs{bgroup}, \cs{egroup} (instead of braces) when a box is being built}% -\changes{4.1n}{2010/01/02}{(AO, 571) calling sequence of \cs{combine@foot@inserts} and \cs{grid@column} to expose box registers; that of \cs{append@column@} its column counters}% -\changes{4.1n}{2010/01/02}{(AO, 571) footnote rule is leaders, so that it may be removed by \cs{vsplit}; mechanism of \cs{kern} signals to indicate footnote height}% -\changes{4.1o}{2010/02/02}{(AO, 576) Allow \classname{lscape} to act on \cs{@outputbox} at the right time}% -\changes{4.1p}{2010/02/24}{(AO, 583) Provide setup code also for footnotes in a one-column document}% -\changes{4.2a}{2018/12/12}{(MD) Updated name of README file and use standard fonts when typesetting}% -\changes{4.2d}{2020/09/19}{(PHO) Adapt \cs{document} and \cs{enddocument} hooks to the 2020-10-01 \LaTeX{} release.}% -\changes{4.2d}{2020/09/30}{(PHO) Correct \cs{@normalcr} patch for \LaTeX{} 2020-02-02 and later.}% -\end{filecontents*} -% \end{macrocode} -% -% \subsection{The Document Body} -% -% Here is the document body, containing only a -% \cmd\DocInput\ directive---referring to this very file. -% This very cute self-reference is a common \classname{ltxdoc} idiom. -% \begin{macrocode} -\begin{document}% -\def\revtex{REV\TeX}% -\expandafter\DocInput\expandafter{\jobname.dtx}% -\end{document} -%</driver> -% \end{macrocode} -% -% \section{Using this package} -% Once this package is installed on your filesystem, you can employ it in -% adding functionality to \LaTeX\ by invoking it in your document or document class. -% -% \subsection{Invoking the package} -% In your document, you can simply call it up in your preamble: -% \begin{verbatim} -%\documentclass{book}% -%\usepackage{ltxgrid}% -%\begin{document} -%<your document here> -%\end{document} -% \end{verbatim} -% However, the preferred way is to invoke this package from within your -% customized document class: -% \begin{verbatim} -%\NeedsTeXFormat{LaTeX2e}[1995/12/01]% -%\ProvidesClass{myclass}% -%\LoadClass{book}% -%\RequirePackage{ltxgrid}% -%<class customization commands> -%\endinput -% \end{verbatim} -% -% Note that this package requires the features of the \classname{ltxutil} package, -% available at -% \url{publish.aps.org/revtex}. -% -% Once loaded, the package gives you acccess to certain procedures, -% usually to be invoked by a \LaTeX\ command or environment, but not at the document level. -% -% \subsection{Changing the page grid}% -% This package provides two procedures, \cmd\onecolumngrid, \cmd\twocolumngrid, -% that change the page grid (it can be extended to more columns and to other page grids). -% -% They differ from standard \LaTeX's \cmd\onecolumn\ and \cmd\twocolumn\ commands in that -% they do not force a page break. Also, upon leaving a multiple-column grid, the columns are balanced. -% In other respects they work same. -% -% They differ from the grid-changing commands of Frank Mittelbach's \classname{multicol} package -% in that they allow floats of all types (single- and double column floats, that is) and -% preserve compatability with the \classname{longtable} package. -% -% These commands must be issued in vertical mode (conceivably via a \cmd\vadjust) such that -% they are ultimately present in the MVL, where they can do their work. -% Because they do not work in \LaTeX's left-right mode, they are unsuitable at the -% document level. -% Furthermore, packaging a grid command in a \cmd\vadjust, although possible, will probably -% not acheive satisfactory page layout. -% -% Page grid commands are not intended to be issued unnecessarily: only the first of -% two successive \cmd\onecolumngrid\ commands is effective; the second will be silently ignored. -% -% \DescribeMacro\onecolumngrid -% You command \LaTeX\ to return to the one-column grid with the -% \cmd\onecolumngrid\ command. If you are already in the one-column grid, this -% is a no-op. The one-column grid is considered special of all page grids, in that -% no portion of the page is held back (in \cmd\pagesofar); all items that might go -% on the current page (with the exception of floats and footnotes) are on the MVL. -% -% \DescribeMacro\twocolumngrid -% You command \LaTeX\ to return to the two-column grid with the -% \cmd\twocolumngrid\ command. If you are already in the two-column grid, this -% is a no-op. -% -% These two commands should be issued by a macro procedure that can ensure that -% \TeX\ is in outer vertical mode. -% -% \subsection{Changing the MVL}% -% -% This package also provides commands to modify the main vertical list (MVL) in a safe way. -% The scheme here is to structure, insofar possible, \TeX's MVL as follows: -%\begin{quotation} -%box or boxes\\ -%penalty\\ -%glue -%\end{quotation} -% This should be a familiar sequence. It is the prototype sequence for a vertical list, -% and is followed when \TeX\ breaks paragraphs into lines, and when \TeX\ generates -% a display math equation. -% -% If you (as a macro programmer) wish to modify the value of the penalty or glue item, -% you can use one of the MVL-altering commands to do so. Certain operations are implemented -% here; you can make up your own. -% -% Note that these commands must be issued in vertical mode, perhaps via a \cmd\vadjust\ or a \cmd\noalign. -% They can work directly if you are in inner mode (say within a parbox or a minipage). -% -% \DescribeMacro\removestuff -% You instruct \LaTeX\ to remove both the penalty and the glue item with this command. -% -% \DescribeMacro\addstuff -% You issue the \cmd\addstuff\arg{penalty}\arg{glue} command to add a penalty, glue, or both. -% If you do not wish to add one or the other, the corresponding argument should be nil. -% Note that the effect of \cmd\addstuff\ is to stack the penalties and glue items. -% Therefore, the lesser of the two penalties takes effect, -% and the two glue items add together. -% -% \cmd\addstuff\ is limited because once applied, it cannot be applied again with correct results. -% -% \DescribeMacro\replacestuff -% The \cmd\replacestuff\ command is syntactically the same as \cmd\addstuff, but works -% differently: the existing penalty and glue are replaced or modified. -% -% The specified penalty is not inserted if the existing penalty is greater than 10000 -% (that is, in case of a \cmd\nobreak), otherwise, the lower (non-zero) of the two penalties is inserted. -% -% If the specified glue has a larger natural component than the existing glue, we replace the glue. -% However, if the specified glue's natural component is negative, then the existing glue's natural component is -% changed by that amount. -% -% \cmd\replacestuff\ can be applied mutiple times bceause it retains the list structure in the canonical form. -% -% Note that we treat two penalties specially (as does \TeX): a penalty of 10000 is considered -% a garbage value, to be replaced if found. This is the signal value that \TeX\ inserts on -% the MVL replacing the penalty that caused the page break (if the page break occurred at a penalty). -% Also, a penalty of zero is indistinguishable from no penalty at all, so it will always -% be replaced by the given value. -% -% Therefore, it is highly recommended to never set any of \TeX's penalty parameters to -% zero (a value of, say, 1, is practically the same), nor should a skip parameter be set to zero -% (instead, use, say, 1sp). Also, to prevent a pagebreak, do not use a penalty of 10000, use, say -% 10001 instead. -% -% You can define your own construct that modifies the MVL: -% Define a command, say, \cmd\myadjust, as follows: -%\begin{verbatim} -%\def\myadjust#1{\noexpand\do@main@vlist{\noexpand\@myadjust{#1}}\@tempa}% -%\end{verbatim} -% that is, \cmd\myadjust\ invokes \cmd\do@main@vlist, passing it the procedure name -% \cmd\@myadjust\ along with the arguments thereof pre-expanded. -% Next, define the procedure \cmd\@myadjust: -%\begin{verbatim} -%\def\@myadjust#1{<meddle with the MVL>}% -%\end{verbatim} -% when \cmd\@myadjust\ executes, you will be in the output routine (in inner vertical mode) -% and the MVL will be that very vertical list. -% -% -% -% -% \section{Compatability with \LaTeX's Required Packages} -% Certain packages, usually ones written by members of the -% \LaTeX\ Project itself, have been designated ``required'' and -% are distributed as part of standard \LaTeX. -% These packages have been placed in a priviledged position -% vis \'a vis the \LaTeX\ kernel in that they override the definitions of certain kernel macros. -% -% Compatability between \classname{ltxgrid} and these packages is complicated -% by a number of factors. First is that \classname{ltxgrid} alters the meaning of some of the same -% kernel macros as certain of the ``required'' packages. -% Second is that fact that certain of the ``required'' packages of \LaTeX\ are incompatible with -% each other. -% -% Examples of the first kind are the \classname{ftnright}, \classname{multicol}, and \classname{longtable} -% packages. -% The \classname{ltxgrid} package is not compatible with \classname{multicol}, -% but if you are using \classname{ltxgrid}, you do not need to use \classname{ftnright} or \classname{multicol} -% anyway. The \classname{ltxgrid} package does however attempt to be compatible with \classname{longtable}. -% -% Among the ``required'' packages that are mutually incompatible are \classname{multicol} and \classname{longtable}, -% the incompatibility arising because both packages replace \LaTeX's output routine: -% if one package is active, the other must not be so. -% This state of affairs has remained essentially unchanged since the introduction of the two as \LaTeX2.09 packages in the late 1980s. -% -% The reason that \classname{ltxgrid} can remain compatible with \classname{longtable} is due to the -% introduction of a more modern architecture, the ``output routine dispatcher'', which allows all macro packages access to the -% safe processing environment of the output routine, on an equal footing. -% The relevant portions of the \classname{longtable} package are reimplemented in \classname{ltxgrid} -% to take advantage of this mechanism. -% -% Timing is critical: -% the \classname{ltxgrid} package will be incompatible with any package that -% redefines any of the kernel macros that \classname{ltxgrid} patches---if that -% package is loaded \emph{after} \classname{ltxgrid}. -% -% Hereinafter follows some notes on specific \LaTeX\ packages. -% -% \subsection{ftnright} -% Frank Mittelbach's \classname{ftnright} package effects a change to \LaTeX's -% \cmd\twocolumn\ mode such that footnotes are set at the bottom of the right-hand -% column instead of at the foot of each of the two columns. -% -% Note that it overwrites three \LaTeX\ kernel macros: \cmd\@outputdblcol, \cmd\@startcolumn, and \cmd\@makecolumn. -% Fortunately none of the three are patched by \classname{ltxgrid}, so that compatability -% is not excluded on this basis. -% -% At the same time, it changes the meaning of \cmd\footnotesize, the macro that is automatically -% invoked when setting a document's footnote into type. -% One might well argue that it is an error for the meaning of \cmd\footnotesize\ to be determined by -% a package such as \classname{ftnright}, that indeed such a choice should be made in the -% document class, or in a file such as \file{bk10.clo}. -% -% To avoid being tripped up by this misfeature in \classname{ftnright}, it is only necessary to -% reassert our meaning for \cmd\footnotesize\ later on, after \classname{ftnright} has been loaded. -% -% Note that \classname{ftnright} inserts code that demands that \LaTeX's flag \cmd\if@twocolumn\ -% is true, that is, it will complain if deployed in a \cmd\onecolumn\ document. -% It is therefore necessary for any other multicolumn package to assert that flag in order to -% avoid this package's complaint. It is an interesting question exactly why this package has -% this limitation. After all, a one-column page grid is just a degenerate case of the -% two column. -% -% \subsection{longtable} -% David Carlisle's \classname{longtable} package sets tables that can be so long as to break over pages. -% According to its author, it uses the same override of \LaTeX's output routine as -% Frank Mittelbach's \classname{multicol} package. By implication, then, it has a hard -% incompatability with the latter. -% -% The \classname{longtable} package also performs a check of whether the document is in -% \cmd\twocolumn\ mode, and declines to work if this is the case. It is not clear, however, -% that there is any true incompatability present if so. It's just that David did not see any reason -% anyone would want to set such long tables in a multicolumn document, hence the check. -% -% There does not appear to be any indication that \classname{longtable} would work less -% well under \classname{ltxgrid} than under standard \LaTeX's \cmd\twocolumn\ mode. -% Therefore, this \classname{ltxgrid} patches \classname{longtable} (if loaded) so as to provide -% compatability. In the course of which, \classname{longtable} becomes more robust -% (\classname{longtable} has mumerous bugs and incompatabilities of long standing, -% some of which are repaired by \classname{ltxgrid}). -% -% One problem remains, namely that, if a \env{longtable} environment breaks over columns -% and thereby inserts its special headers and footers at that break, and those columms are then -% balanced (due to a return to the one-column page grid), then those inserted rows -% will remain, and may no longer fall at the column break. This will, of course look -% wrong. -% -% The only way to fix this problem is to avoid doing column balancing in the way -% I have implemented here; such an enhancement to this package is possible. -% -% \subsection{multicol} -% Frank Mittelbach's \classname{multicol} package provides a page grid with many columns, -% albeit denies the placement of floats in individual columns. -% -% It establishes its own \cmd\output\ routine, which is the reason it runs afoul of -% the \classname{longtable} package. On the other hand, \classname{ltxgrid} specifically -% allows for the case where a package installs its own \cmd\output\ routine, so -% there is no incompatability on that basis. -% -% Still, it is pointless to use \classname{multicol} if you are using \classname{ltxgrid}, -% since both packages provide multicolumn page layouts. -% Therefore, \classname{multicol} is not supported by \classname{ltxgrid}. -% -% \subsection{ltxgrid} -% It has been pointed out that one of the disadvantages of adopting the \classname{ltxgrid} package is that -% it does alter the \LaTeX\ kernel. -% Any package that itself alters the \LaTeX\ kernel may be incompatible with \classname{ltxgrid}, and new packages -% (destined perhaps to become part of the successor to \LaTeXe) may break \classname{ltxgrid}. -% -% The consequence is that packages introduced in future, and future changes to \LaTeX\ may be incompatible -% with \classname{ltxgrid}. -% This is, of course, true. -% The development plan for \classname{ltxgrid} is that when such packages and \LaTeX\ kernel changes come about, -% the burden will be on \classname{ltxgrid} to change in a way that provides for continued compatability with -% those packages and \LaTeX\ kernel changes. -% -% -% \section{How \classname{ltxgrid} places footnotes} -% -% In conventional multicolumn layouts, a footnote will appear at the bottom of the column in which it is called out. -% The \classname{ltxgrid} package implements this conventional layout choice by default. -% However, other choices are possible (a la \classname{ftnright}, whose compatability with \classname{ltxgrid} has not been tested). -% -% One unusual feature of \classname{ltxgrid}'s default implementation must be mentioned, though, -% namely the case in a two-column page grid, where a footnote is followed by a temporary change to the one-column page grid -% (e.g., for a wide equation). -% In such a case, the material above the wide material is split into two columns, and a footnote whose callout -% appears in the right-hand column will nonetheless be set at the base of the left column. -% -% This arrangement was chosen because it ensures that the footnotes at the bottom of any page will appear in -% numerical order. It can be argued that this choice is ``incorrect'', but be that as it may, -% the \classname{ltxgrid} package does not foreclose on other arrangements for the footnotes. -% The package can be adapted to accomodate any page design desired. -% -% \section{Limitations in \classname{ltxgrid}'s default column balancing method}% -% -% In a multicolumn page grid, when encountering a page that is not completely full, -% it is customary to set the material in balanced columns (typically with the last column no longer than any of the others). -% Such a case also crops up when temporarily interrupting the multicolumn grid to set material on the full width of the page: -% the material on the page above the break is customarily set in balanced columns. -% -% An awkward case arises when we have already set one or more complete columns of type before encountering the need to -% balance columns. In this subset of cases, the default in \classname{ltxgrid} is to -% do an operation I call ``re-balancing'': -% the material on the page so far is pasted back together into a single column, and new, balanced column breaks are -% calculated. -% -% This scheme typically works fine, but it has a significant vulnerability: -% any discardable items trimmed at the original column break are lost, never to be retrieved. -% Consequently, after re-balancing, an element like, say, a section head can fail to have the correct amount of whitespace above. -% -% This problem is due to an unfortunate optimization in \TeX, wherein a certain class of nodes is trimmed from the -% top of main vertical list upon returning from the output routine: -% any penalty, glue, or leader node falls in to this class of discardable nodes, -% and trimming proceeds until a non-discardable node (such as a box, or rule) is encountered. -% It gets better: a third class of nodes is transparent to this trimming process; -% they are neither discarded nor do they halt the process of trimming: -% mark nodes and all whatsits fall into this class of transparent nodes; -% they are quietly passed over during trimming. -% -% An alternative approach for \TeX\ to take would have been, -% rather than discarding the node entirely, to simply \emph{mark} it as discarded. -% (Implementors of extended \TeX, please note!) -% Then, upon shipping out, such nodes would not make it into the DVI. -% \TeX's optimization, driven by the small computer architectures current when it was developed, -% does save mem, but at the cost of revisiting page breaks in a reliable way. -% -% FIXME: how to fix a column break in the above case? Widetext? -% -%\StopEventually{} -% -% \section{Implementation of package} -% -% Special acknowledgment: this package uses concepts pioneered -% and first realized by William Baxter (mailto:web at superscript.com) -% in his SuperScript line of commercial typesetting tools, and -% which are used here with his permission. His thorough understanding -% of \TeX's output routine underpins the entire \classname{ltxgrid} -% package. -% -% \subsection{Beginning of the \file{ltxgrid} {\sc docstrip} module} -% Requires the underpinnings of the \classname{ltxkrnext} package. -% \begin{macrocode} -%<*package> -\def\package@name{ltxgrid}% -\expandafter\PackageInfo\expandafter{\package@name}{% - Page grid for \protect\LaTeXe, - by A. Ogawa (arthur_ogawa at sbcglobal.net)% -}% -\RequirePackage{ltxutil}% -%</package> -% \end{macrocode} -% -% \subsection{Banner}% -% \begin{macrocode} -%<*kernel> -% \end{macrocode} -% -% \subsection{Sundry}% -% Here are assorted macro definitions. -% \begin{macro}{\lineloop} -% \begin{macro}{\linefoot} -% The (document-level) command \cmd\lineloop\ sets numbered lines until the -% specified count is reached. -% The command \cmd\linefoot\ sets a single, automatically numbered line, but with a footnote (with the specified label); -% it automatically increments the line counter. -% These commands are typically used to construct test documents. -% -% Because the counter is globally advanced and never reset, successive -% calls to \cmd\lineloop\ should have an argument ever larger. -% The formatted output will have each line labeled with its ordinal number. -% \begin{macrocode} -\newcounter{linecount} -\def\loop@line#1#2{% - \par - \hb@xt@\hsize{% - \global\advance#1\@ne - \edef\@tempa{\@ifnum{100>#1}{0}{}\@ifnum{10>#1}{0}{}\number#1}% - \@tempa\edef\@tempa{\special{line:\@tempa}}\@tempa - \vrule depth2.5\p@#2\leaders\hrule\hfil - }% -}% -\def\lineloop#1{% - \loopwhile{\loop@line\c@linecount{}\@ifnum{#1>\c@linecount}}% -}% -\def\linefoot#1{% - \loop@line\c@linecount{% - \footnote{% - #1\special{foot:#1}\vrule depth2.5\p@\leaders\hrule\hfill - }% - }% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% -% \subsection{Mark Components}% -% -% Override LaTeX's mark macros to allow more components. -% -% We remain bound by the weakness of LaTeX's scheme in that -% one cannot emulate the action of \TeX\ whereby -% material with marks can be inserted in the middle of -% a vertical list such that the marks are reliably calculated. -% If we did that, \cmd\@themark\ would no longer be utilized. -% -% A more robust scheme involves placing all marks (component and value) -% into a list (using global scoping, i.e., \cmd\gdef), -% and using \cmd\@@mark to place an index on that list into the MVL. -% Then, e.g., \cmd\@@botmark signifies the place where that list is to be cut, -% and the \cmd\botmark\ of any component is -% the value of the last element of the cut -% list having the given component. The \cmd\firstmark\ and \cmd\topmark\ -% can likewise be defined relative to \cmd\@@firstmark\ and \cmd\@@topmark, -% except in the latter case, we want the first following the cut instead of the last -% preceding the cut. -% -% The limitation of this scheme is its demands upon \TeX's mem. -% The list of marks would need to be trimmed back to, effectively, -% \cmd\topmark\ at the beginning of every page. -% -% This approach is not yet part of the extended LaTeX kernel. -% -% \begin{macro}{\@@mark} -% \begin{macro}{\@@topmark} -% \begin{macro}{\@@firstmark} -% \begin{macro}{\@@botmark} -% \begin{macro}{\@@splitfirstmark} -% \begin{macro}{\@@splitbotmark} -% Remember primitives under a new set of names. -% \begin{macrocode} -\let\@@mark\mark -\let\@@topmark\topmark -\let\@@firstmark\firstmark -\let\@@botmark\botmark -\let\@@splitfirstmark\splitfirstmark -\let\@@splitbotmark\splitbotmark -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \subsubsection{Procedures that expose the component data structure}% -% This portion of the code exposes the internal representation of -% the mark components. If we wish to add more components, we will have to revise -% these macro definitions: -% \cmd\@themark, -% \cmd\nul@mark, -% \cmd\set@mark@netw@, -% \cmd\set@marktw@, -% \cmd\set@markthr@@, -% \cmd\get@mark@@ne, -% \cmd\get@mark@tw@, -% \cmd\get@mark@thr@@, -% \cmd\get@mark@f@ur. -% -% \begin{macro}{\@themark} -%FIXME: is it safer to eliminate \cmd\@themark\ in favor of a message that evaluates \cmd\@@botmark? -% -% Note: these definitions expose the data structure of mark components. -% \begin{macrocode} -\def\@themark{{}{}{}{}}% -\def\nul@mark{{}{}{}{}\@@nul}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\set@mark@netw@} -% \begin{macro}{\set@marktw@} -% \begin{macro}{\set@markthr@@} -% These procedures insert the new value of a particular mark component into the given argument. -% They expose the data structure of mark components. -% -% \begin{macrocode} -\def\set@mark@netw@#1#2#3#4#5#6#7{\gdef#1{{#6}{#7}{#4}{#5}}\do@mark}% -\def\set@marktw@#1#2#3#4#5#6{\gdef#1{{#2}{#6}{#4}{#5}}\do@mark}% -\def\set@markthr@@#1#2#3#4#5#6{\gdef#1{{#2}{#3}{#6}{#5}}\do@mark}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\get@mark@@ne} -% \begin{macro}{\get@mark@tw@} -% \begin{macro}{\get@mark@thr@@} -% \begin{macro}{\get@mark@f@ur} -% These procedures retreive the value of a particular mark component. -% They expose the data structure of mark components. -% \begin{macrocode} -\def\get@mark@@ne#1#2#3#4#5\@@nul{#1}% -\def\get@mark@tw@#1#2#3#4#5\@@nul{#2}% -\def\get@mark@thr@@#1#2#3#4#5\@@nul{#3}% -\def\get@mark@f@ur#1#2#3#4#5\@@nul{#4}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% -% \subsubsection{Procedures that do not expose the component data structure}% -% -% \begin{macro}{\mark@netw@} -% \begin{macro}{\marktw@} -% \begin{macro}{\markthr@@} -% These procedures insert the new value of a particular mark component into \cmd\@themark, -% then execute \cmd\do@mark. -% They constitute the implementation layer for mark components one, two, and three. -% An analogous procedure for component four could be defined; call it \cmd\markf@ur. -% -% \begin{macrocode} -\def\mark@netw@{\expandafter\set@mark@netw@\expandafter\@themark\@themark}% -\def\marktw@{\expandafter\set@marktw@\expandafter\@themark\@themark}% -\def\markthr@@{\expandafter\set@markthr@@\expandafter\@themark\@themark}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\do@mark} -% \begin{macro}{\do@@mark} -% Access procedures \cmd\mark (AKA \cmd\@@mark). -% The \cmd\do@mark\ procedure is used when a mark is being put down into the MVL; -% \cmd\do@@mark\ when this happens in the output routine. -% \begin{macrocode} -\def\do@mark{\do@@mark\@themark\nobreak@mark}% -\def\do@@mark#1{% - \begingroup - \let@mark - \@@mark{#1}% - \endgroup -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\let@mark} -% \begin{macro}{\nobreak@mark}% -% The procedure that makes \cmd\csname s robust within a mark. -% Use \cmd\appdef\ and \cmd\robust@\ to extend the list. -% \begin{macrocode} -\def\let@mark{% - \let\protect\@unexpandable@protect - \let\label\relax - \let\index\relax - \let\glossary\relax -}% -\def\nobreak@mark{% - \@if@sw\if@nobreak\fi{\@ifvmode{\nobreak}{}}{}% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% -% \subsubsection{Using mark components}% -% -% These procedures use the component mark mechanism to implement -% a mark component that remembers the current environment (used in page makeup) -% and the the two mark components left over from the original \LaTeX. -% The fourth component is presently unused. -% -% \begin{macro}{\mark@envir} -% The third mark component's access procedures. -% The \cmd\mark@envir\ and \cmd\bot@envir\ commands are a good model of how to write -% access procedures for a new mark component. -% \begin{macrocode} -\def\mark@envir{\markthr@@}% -\def\bot@envir{% - \expandafter\expandafter - \expandafter\get@mark@thr@@ - \expandafter\@@botmark - \nul@mark -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\markboth} -% \begin{macro}{\markright} -% \begin{macro}{\leftmark} -% \begin{macro}{\rightmark} -% Set procedures for legacy components. -% \begin{macrocode} -\def\markboth{\mark@netw@}% -\def\markright{\marktw@}% -% \end{macrocode} -% -% Retrieval procedures for legacy mark components. -% The procedure for retrieving the first component from \cmd\botmark\ -% and the second component from \cmd\firstmark have names in \LaTeX; -% they are called, respectively, \cmd\leftmark\ and \cmd\rightmark. -% -% It is possible to retrieve the components of \cmd\topmark\ -% as well: use \cmd\saved@@topmark. -% \begin{macrocode} -\def\leftmark{% - \expandafter\expandafter - \expandafter\get@mark@@ne - \expandafter\saved@@botmark - \nul@mark -}% -\def\rightmark{% - \expandafter\expandafter - \expandafter\get@mark@tw@ - \expandafter\saved@@firstmark - \nul@mark -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% -% -% \subsection{Output Super-routine}% -% -% We want to change \LaTeX's output routine, but do not wish to remain vulnerable -% to interference from such ``required'' packages as -% \classname{multicol} (authored by Frank Mittelbach) -% and \classname{longtable} (authored by David P. Carlisle), which -% swap in their own output routines when the respective package is active. -% -% The better mechanism, used here, is due to William Baxter (web at superscript.com), -% who has allowed his several ideas to be used in this package. -% -% In what follows, we effectively wrap up the old \LaTeX\ output routine inside -% a new, more flexible ``super routine''. When the output routine is called, -% the ``super routine'' acts as a dispatcher. If the old routine is needed, it is called. -% -% If a package attempts to substitute in their own output routine, they will effectively -% be modifying a token register by the name of \cmd\output. -% The primitive \cmd\output\ is now known by a different name, which should no longer be -% necessary to use. -% -% Usage note: to make a visit to the output routine employing the dispatcher, enter -% with a value of \cmd\outputpenalty\ that corresponds to a macro. Defining as follows: -%\begin{verbatim} -%\@namedef{output@10000}{<your code here>}% -%\end{verbatim} -% by convention, your output routine should void out \cmd\box\cmd\@cclv. -% -% In rewriting \LaTeX's output dispatcher -% in a much simpler form, we also avoid the sin of multiple \cmd\shipout s -% within a single visit to the output routine. -% -% Conceptually, we divide visits to the output routine into two classes. -% The first involves natural page breaks -% (at a \cmd\newpage\ or when \cmd\pagetotal $>$ \cmd\pagegoal) -% and usually resulting in \cmd\box\cmd\@cclv\ either being shipped out or -% salted away (e.g., each column in a multicolumn layout). -% We might call this class the ``natural output routines''; the \cmd\outputpenalty\ -% will never be less than $-10000$. -% Furthermore, we ensure that \cmd\holdinginserts\ is cleared when -% calling such routines. -% -% The other class involves a forced visit to the output routine -% via a large negative penalty ($< -10000$). They do not generally -% result in a \cmd\shipout\ of \cmd\box\cmd\@cclv: they may be dead cycles. -% We provide a mechanism (call it a ``one-off'' output routine) that allows -% us to specify certain processing to be done when \TeX\ reaches -% the current position on the page. -% -% One-off output routines themselves fall into two divisions, ones -% that process \cmd\box\cmd\@cclv, and ones that work on the main vertical list (MVL). -% The former are typified by changes to the page grid, perhaps -% even column balancing. -% The latter involve the insertion of penalties or glue and the processing of floats. -% -% The natural output routine is a single procedure. We have not introduced multiple -% natural output routines based on the \cmd\outputpenalty\ because \TeX\ does not -% support such a thing: \TeX\ sometimes lays down a penalty whose value is the sum -% of other penalties. Because of this, we cannot depend on the value of \cmd\outputpenalty\ -% in such areas. -% -% We do introduce flexibility in the form of a mechanism for patching into the -% natural output routine. Three hooks are offered, allowing a procedure -% to prepare for the upcoming visit to the output routine, -% access to \cmd\box\cmd\@cclv, and after doing \cmd\shipout\ (or otherwise -% committing the material to the page). -% -% Environments, commands, and even packages can install their -% own procedures into these hooks. -% For instance, if the longtable package is loaded, it will install -% its procedures, but those procedures will punt if the page break -% being processed does not actually fall within a longtable environment. -% -% \begin{macro}{\primitive@output} -% Here we remember the \TeX\ primitive \cmd\output\ and its value, -% and then proceed to take over the \cmd\csname\ of \cmd\output, -% making it a \cmd\toks\ register and installing the old value of -% the output routine. -% \begin{macrocode} -\let\primitive@output\output -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\output@latex} -% \begin{macro}{\output} -% Grab the tokens in \cmd\the\cmd\output\ (but without the extra set of braces). -% The value of \cmd\toks@\ must remain untouched until loaded into the appropriate token -% register; this is done a few lines below. -% \begin{macrocode} -\long\def\@tempa#1\@@nil{#1}% - \toks@ -\expandafter\expandafter -\expandafter{% -\expandafter \@tempa - \the\primitive@output - \@@nil - }% -\newtoks\output@latex -\output@latex\expandafter{\the\toks@}% -\let\output\output@latex -% \end{macrocode} -% -% A comment on compatibility with other packages that co-opt the output routine. -% -% Somewhere on the LaTeX-L list, David Kastrup has urged macro writers to take over -% the output routine in such a way that others can do likewise. How is this to be -% accomplished? -% -% Consider what the \classname{lineno} package does when it loads. -% \begin{enumerate} -% \item -% It does \cmd\let\ cmd\@tempa\ \cmd\output. -% This has the effect of identifying \cmd\@tempa\ with the -% \cmd\toks\ register we created above to hold the old output routine of \LaTeX. -% Let us say that was \cmd\toks14. -% \item -% \classname{lineno} itself effectively does \cmd\newtoks\ \cmd\@LN@output, -% which assigns that \cmd\csname\ to \cmd\toks 15. -% \item -% It loads \cmd\@LN@output\ with the contents of \cmd\@tempa -% (that is, \cmd\toks14, our copy of \LaTeX's output routine). -% \item -% Then it loads \cmd\@tempa\ with its own desired procedure, -% to be executed at \cmd\output\ time, thereby taking over what it thinks is the output routine, -% but which is in reality the procedure \revtex\ executes when it wants to pass control -% to \LaTeX's original output routine. -% \item -% It then does \cmd\let\ \cmd\output\ \cmd\@LN@output, -% which now identifies \cmd\output\ with \cmd\toks15, the output routine of \classname{lineno}. -% \item -% When the \cmd\output\ routine is triggered, -% the primitive output routine \cmd\primitive@output\ is executed, and if -% appropriate, control is passed to \cmd\output@latex, which \revtex\ had loaded with the old -% \LaTeX\ output routine, but which is presently loaded with that of \classname{lineno}. -% \item -% The output routine of \classname{lineno} is executed, and if appropriate control is passed -% to \cmd\@LN@output, the old output routine of \LaTeX. -% \item -% Furthermore, the \cmd\csname\ \cmd\output\ now points to \cmd\@LN@output\ (\cmd\toks15). -% This means that someone coming in after \classname{lineno} to take over the output routine -% will actually get executed after that of \classname{lineno}, but before \LaTeX. -% \end{enumerate} -% As you can see, the process of taking over the output routine may continue until all of the -% \cmd\toks\ registers have been allocated. -% If, say, \classname{newpackage} would itself like to take over the output routine, -% and if it uses the above set of steps, then when the output routine is triggered, the order -% of execution is \revtex, then \classname{lineno}, then \classname{newpackage}, then \LaTeX. -% Each new package inserts itself on front of \LaTeX. -% \end{macro} -% \end{macro} -% -% \begin{macro}{\dispatch@output} -% \changes{4.1b}{2008/08/04}{(AO, 456) Compatibility with other packages that override the output routine, following suggestion by David Kastrup.} -% We now install our own output routine in place of the original -% output routine of \LaTeX, which is still available as \cmd\the\ \cmd\output. -% -% The output routine is simply the procedure \cmd\dispatch@output. -% It either dispatches to a procedure based on a particular value of -% \cmd\outputpenalty\ or it executes \cmd\the\cmd\output@latex\ tokens. -% \begin{macrocode} -\primitive@output{\dispatch@output}% -\def\dispatch@output{% - \let\par\@@par -% \end{macrocode} -% Try to interpret \cmd\outputpenalty\ as a dispatcher to a message handler, -% its value is, e.g., \cmd\do@startpage@pen. -% \begin{macrocode} - \expandafter\let\expandafter\output@procedure\csname output@\the\outputpenalty\endcsname -% \end{macrocode} -% If we have failed to find a dispatcher, then settle for \cmd\output@latex. -% \begin{macrocode} - \@ifnotrelax\output@procedure{}{% - \expandafter\def\expandafter\output@procedure\expandafter{\the\output@latex}% - }% -% \end{macrocode} -% Now test if the dispatcher is the special case of \cmd\execute@message@pen, in which case execute the \cmd\@message@saved. -% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing} -% \begin{macrocode} - \expandafter\@ifx\expandafter{\csname output@-\the\execute@message@pen\endcsname\output@procedure}{% - \let\output@procedure\@message@saved - }{}% - \ltxgrid@info@sw{\class@info{\string\dispatch@output}\say\output@procedure\saythe\holdinginserts}{}% - \outputdebug@sw{\output@debug}{}% - \output@procedure -}% -% \end{macrocode} -% -% \begin{macrocode} -\def\set@output@procedure#1#2{% - \count@\outputpenalty\advance\count@-#2% - \expandafter\let\expandafter#1\csname output@\the\count@\endcsname -}% -% \end{macrocode} -% -% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing} -% The following procedure is executed at the beginning of each visit to the output routine, -% contingent on the level of diagnostics specified. -% However, it bails out when the visit is part of a tight sequence of visits to the output routine. -% \begin{macrocode} -\def\output@debug{% - \def\@tempa{\save@message}% - \@ifx{\output@procedure\@tempa}{% - \true@sw - }{% - \@ifnum{\outputpenalty=-\save@column@insert@pen}{% - \@ifnum{\holdinginserts>\z@}% - }{% - \false@sw - }% - }% - {}{\output@debug@}% -}% -\def\output@debug@{% -%<ignore> \saythe\inputlineno - \saythe\outputpenalty - \saythe\interlinepenalty - \saythe\brokenpenalty - \saythe\clubpenalty - \saythe\widowpenalty - \saythe\displaywidowpenalty - \saythe\predisplaypenalty - \saythe\interdisplaylinepenalty - \saythe\postdisplaypenalty - \saythe\badness - \say\thepagegrid - \saythe\pagegrid@col - \saythe\pagegrid@cur -%<ignore> \say\bot@envir - \saythe\insertpenalties -%<ignore> \say\@@topmark -%<ignore> \say\saved@@topmark -%<ignore> \say\@@firstmark -%<ignore> \say\saved@@firstmark - \say\@@botmark -%<ignore> \say\saved@@botmark - \saythe\pagegoal - \saythe\pagetotal - \saythe{\badness\@cclv}% - \say\@toplist - \say\@botlist - \say\@dbltoplist - \say\@deferlist - \trace@scroll{% - \showbox\@cclv - \showbox\@cclv@saved - \showbox\pagesofar -% \end{macrocode} -% Klootch! The following line provides only for two-column page grid; if debugging more columns, you must -% add more statements here. -% \begin{macrocode} - \showbox\csname col@1\endcsname - \showbox\footsofar - \showbox\footins - \showbox\footins@saved - \showlists - }% -}% -\@ifxundefined{\outputdebug@sw}{% - \@booleanfalse\outputdebug@sw -}{}% -\def\trace@scroll#1{\begingroup\showboxbreadth\maxdimen\showboxdepth\maxdimen\scrollmode#1\endgroup}% -\def\trace@box#1{\trace@scroll{\showbox#1}}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@outputpage} -% \begin{macro}{\@outputpage@head} -% \begin{macro}{\@outputpage@tail} -% \changes{4.1b}{2008/08/04}{Procedure \cs{@outputpage@tail} tailpatches \cs{@outputpage}}% -% \changes{4.1b}{2008/08/04}{Procedure \cs{@outputpage@head} headpatches \cs{@outputpage}}% -% The procedure \cmd\@outputpage\ of standard \LaTeX\ is the sole place where a \cmd\shipout\ is carried out. -% The procedures that build \cmd\@outputbox\ just before a page is shipped out by \cmd\@outputpage\ are: -% \cmd\@makecolumn, -% \cmd\@combinepage, and -% \cmd\@combinedblfloats. -% -% We need to head- and tailpatch this procedure, so we perform here -% the only modifications to that procedure that are essential. -% Elsewhere, we will build up the meanings of \cmd\@outputpage@head\ and \cmd\@outputpage@tail. -% \begin{macrocode} -\prepdef\@outputpage{\@outputpage@head}% -\let\@outputpage@head\@empty -\appdef\@outputpage{\@outputpage@tail}% -\let\@outputpage@tail\@empty -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\show@box@size} -% \begin{macro}{\show@text@box@size} -% \begin{macro}{\show@pagesofar@size} -% \begin{macro}{\show@box@size@sw} -% \begin{macro}{\total@text} -% \changes{4.1b}{2008/08/04}{(AO, 452) Support length checking: show size of shipped out text.} -% Procedure \cmd\show@box@size\ is a diagnostic for the sizes of boxes; -% the boolean \cmd\show@box@size@sw\ turns it on and off. -% \begin{macrocode} -\def\show@box@size#1#2{% - \show@box@size@sw{% - \begingroup - \setbox\z@\vbox{\unvcopy#2\hrule}% - \class@info{Show box size: #1^^J% - (\the\ht\z@\space X \the\wd\z@) - \the\c@page\space\space\the\pagegrid@cur\space\the\pagegrid@col - }% - \endgroup - }{}% -}% -% \end{macrocode} -% Procedure \cmd\show@text@box@size\ tallies the size of the indicated column. -% If \cmd\box\ \cmd\pagesofar\ is a factor, then its height has been memorized -% in the depth of the tally box. -% -% \changes{4.1f}{2009/07/10}{(AO, 518) Tally register overflow when locument is long} -% \begin{macrocode} -\def\show@text@box@size{% - \show@box@size{Text column}\@outputbox - \tally@box@size@sw{% - \@ifdim{\wd\@outputbox>\z@}{% - \dimen@\ht\@outputbox\divide\dimen@\@twopowerfourteen - \advance\dimen@-\dp\csname box@size@\the\pagegrid@col\endcsname - \@ifdim{\dimen@>\z@}{% - \advance\dimen@ \ht\csname box@size@\the\pagegrid@col\endcsname - \global\ht\csname box@size@\the\pagegrid@col\endcsname\dimen@ - \show@box@size@sw{% - \class@info{Column: \the\dimen@}% - }{}% - }{}% - }{}% - \global\dp\csname box@size@\the\pagegrid@col\endcsname\z@ - }{}% -}% -% \end{macrocode} -% Take the height of \cmd\box\ \cmd\pagesofar\ into account. -% \begin{macrocode} -\def\show@pagesofar@size{% - \show@box@size{Page so far}\pagesofar - \dimen@\ht\pagesofar\divide\dimen@\@twopowerfourteen - \global\dp\csname box@size@1\endcsname\dimen@ - \show@box@size@sw{% - \class@info{Pagesofar: \the\dimen@}% - }{}% -}% -\@booleanfalse\tally@box@size@sw -\@booleanfalse\show@box@size@sw -\expandafter\newbox\csname box@size@1\endcsname -\expandafter\setbox\csname box@size@1\endcsname\hbox{}% -\expandafter\newbox\csname box@size@2\endcsname -\expandafter\setbox\csname box@size@2\endcsname\hbox{}% -\def\total@text{% - \@tempdima\the\ht\csname box@size@2\endcsname\divide\@tempdima\@twopowertwo\@tempcnta\@tempdima - \@tempdimb\the\ht\csname box@size@1\endcsname\divide\@tempdimb\@twopowertwo\@tempcntb\@tempdimb - \class@info{Total text: Column(\the\@tempcnta pt), Page(\the\@tempcntb pt)}% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% -% \subsection{Further thoughts about inserts} -% -% The only safe way to deal with inserts is to either set \cmd\holdininserts\ or -% to commit to using whatever insert comes your way: you cannot change your mind -% once you see a non-void \cmd\box\cmd\footins, say. -% -% Therefore all output routine processing must proceed with \cmd\holdinginserts\ set -% until you are sure of the material to be committed to the page. At that point, you -% can clear \cmd\holdinginserts, spew \cmd\box\cmd\@cclv, put down the appropriate penalty, -% and exit, with the knowledge that \TeX\ will re-find the same pagebreak, this time -% visiting the output routine with everything, including inserts, in their proper -% place. -% This technique applies to split elements (screens, longtable, index) as well as to -% manufactured pages (float pages and clearpage pages). -% -% Therefore, the output routine must not make assumptions about whether \cmd\holdinginserts\ -% should be cleared; instead this must be left to the one-off output routines or the natural output routine. -% -% If we are manufacturing pages (``float page processing''), and if \cmd\pagegoal\ is not equal to -% \cmd\vsize, then inserts are at hand, and our criterion should take into account the insert -% material, even though we cannot measure its height based on the size of \cmd\box\cmd\footins\ -% (because \cmd\holdinginserts\ is set, you see). -% -% It would be better to take the complement of \cmd\floatpagefraction\ and use that -% as a standard for the looseness of the page. Since \cmd\pagegoal\ reflects the inserted material, -% the criterion becomes the difference of the aggregate height of the floats and the \cmd\pagegoal\ -% versus this "page looseness" standard. -% -% As a check, consider what happens if we bail out: \cmd\@deferlist\ has never been touched, so it -% requires no attention. Also, \cmd\holdinginserts\ has never been cleared, so inserts require -% no attention. So we only have to ensure that marks are preserved, which is already taken -% care of by the message handler mechanism. -% -% If we are doing ordinary page cutting, then the scheme would be to detect whether we are within -% a screen (or longtable as may be), do the adjustment to the page height, and return, but this time -% with \cmd\holdinginserts\ cleared. Upon reentering the output routine, we may or may not be within -% the screen environment, but we are now sure to have a final page break, and we can commit this -% material (by shipping out or by saving it out as a full column). -% -% In the above, the first of the two visits to the output routine is a dead cycle and requires -% propagation of marks, but nothing else. -% -% \subsection{The difference between inserts and floats} -% -% While revisiting this package in 2008, I needed to clarify under what circumstances inserts -% would be added to the \cmd\pagesofar. My conclusion is that I had been treating them -% exactly the same as floats, but that was a mistake. -% -% Floats can be committed at the top of a column, in the middle, or at the bottom. -% Footnotes (the only \cmd\insert\ that is used in \LaTeX) may only be committed at the bottom -% of a column. So, it was necessary to provide two versions of \cmd\@combinepage, one -% that committed \cmd\insert s, and the other that did not, the former used only when -% a column of text was committed. Note that even after a column is committed, we could change our minds: -% for instance if in multicolumn grid and we decide to balance the columns. -% -% -% \subsection{The natural output routine} -% -% Here is the portion of the output routine that fields cases not handled by -% the dispatcher. -% -% The default is to ship out a page and then look around for more material -% that might constitute a ``float page''. However, because \cmd\holdinginserts\ -% is normally set, this output routine must first have a dead cycle and -% come back again with \cmd\holdinginserts\ cleared. -% Then, after shipping out, it puts down a message that -% will manufacture zero or more float pages, finally terminating -% with a procedure that commits floats to a new unfinished page. -% -% To accomodate special processing, we execute hooks whose name is based -% on the value of the "envir" mark component. The default is "document", -% ensured by an initial mark of that value; the associated procedures -% are all nil. Any unknown envir value will "\cmd\relax\ out". -% -% The test made by \cmd\toggle@insert\ tells whether we are on our first visit to -% the output routine (with \cmd\holdinginserts\ still positive), or our second -% (with \cmd\holdinginserts\ zeroed). The output routine will toggle the setting. -% -% The commands \cmd\hold@insertions\ and \cmd\move@insertions\ respectively -% clear and set \cmd\holdinginserts, so this procedure effectively -% clears \cmd\holdinginserts\ just long enough to pick up the insertions. -% Important: any output routine that clears \cmd\holdinginserts\ -% must guarentee that it is restored on the subsequent visit to the output routine. -% Or, to put it another way, if an output routine detects that \cmd\holdinginserts\ -% is cleared, it should take it upon itself to restore it to a positive value before exiting. -% -% The branch with \cmd\holdinginserts\ set is executed first; the other -% branch follows on practically immediately thereafter. In the first branch, -% we simply execute the appropriate hook and then execute a dead cycle. -% -% In the branch with \cmd\holdinginserts\ cleared, the procedure -% builds up the current column, which is now complete, with \cmd\@makecolumn, then -% dispatches to the shipout routine associated with the current page grid, \cmd\output@column@. -% At the end, it triggers the execution of an output routine to prepare the next column (or page). -% -% \subsection{Natural output routine}% -% -% \begin{macro}{\natural@output} -% \begin{macro}{\output} -% Here is the output routine that handles natural pagebreaks: -% we now have page that needs to be shipped out or a portion of a page that is ready to be committed to the page grid. -% Processing is of necessity divided into phases, \cmd\output@holding\ is executed upon first encountering the natural page-breaking point, while inserts are being held. -% The second phase, \cmd\output@moving, is set in motion by the first: here the same material (in most cases) will be processed with \cmd\holdinginserts\ cleared, -% and the insertions (e.g., footnotes) are split off into their assigned box registers. -% \begin{macrocode} -\def\natural@output{\toggle@insert{\output@holding}{\output@moving}}% -\output@latex{\natural@output}% -% \end{macrocode} -% -% In accordance with the scheme suggested by David Kastrup for allowing another output routine -% to slip itself into ours, we use a token register called \cmd\output. -% However, we reserve the ability to restore things if we so desire. -% This we must do in the case of the \filename{lineno.sty} package, because its functionality -% is best served by being integrated into our own dispatcher-based output routine. -% -% To restore our own output routine, we can repeat the above assignment, -% \begin{verbatim} -%\output@latex{\natural@output}% -% \end{verbatim} -% some time before the document begins. -% \end{macro} -% \end{macro} -% -% \begin{macro}{\output@holding} -% \begin{macro}{\@if@exceed@pagegoal} -% The procedure \cmd\output@holding\ -% is our first cycle through the output routine; \cmd\holdinginserts\ is still set. -% We give the current environment a heads up -% (it is through this means that \classname{longtable} sets its running header and footer), -% then we execute a dead cycle, which should propagate marks. -% -% One corner case that can crop up is the presence of a single unbreakable chunk whose size is larger -% than \cmd\vsize. -% Doing a dead cycle under such circumstances will not find the same breakpoint as this time -% (remember we threw in a \cmd\mark\ node). -% Instead, we attempt to remove the excess height of the material, so we can continue to propagate marks. -% -% The corner case is at hand if the natural size of \cmd\box\cmd\@cclv\ exceeds \cmd\pagegoal\ and -% the contents cannot be shrunk to fit. -% -% \changes{4.1b}{2008/08/04}{New procedure for showing a box contents, \cs{trace@box}} -% \begin{macrocode} -\def\output@holding{% - \csname output@init@\bot@envir\endcsname - \@if@exceed@pagegoal{\unvcopy\@cclv}{% - \setbox\z@\vbox{\unvcopy\@cclv}% - \outputdebug@sw{\trace@box\z@}{}% - \dimen@\ht\@cclv\advance\dimen@-\ht\z@ - \dead@cycle@repair\dimen@ - }{% - \dead@cycle - }% -}% -\def\@if@exceed@pagegoal#1{% - \begingroup - \setbox\z@\vbox{#1}% - \dimen@\ht\z@\advance\dimen@\dp\z@ - \outputdebug@sw{\saythe\dimen@}{}% - \@ifdim{\dimen@>\pagegoal}{% - \setbox\z@\vbox{\@@mark{}\unvbox\z@}% - \splittopskip\topskip - \splitmaxdepth\maxdepth - \vbadness\@M - \vfuzz\maxdimen - \setbox\tw@\vsplit\z@ to\pagegoal - \outputdebug@sw{\trace@scroll{\showbox\tw@\showbox\z@}}{}% - \setbox\tw@\vbox{\unvbox\tw@}% - \@ifdim{\ht\tw@=\z@}{% - \ltxgrid@info{Found overly large chunk while preparing to move insertions. Attempting repairs}% - \aftergroup\true@sw - }{% - \aftergroup\false@sw - }% - }{% - \aftergroup\false@sw - }% - \endgroup -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\output@moving} -% \begin{macro}{\@cclv@nontrivial@sw} -% The procedure \cmd\output@moving\ -% is our second cycle through the output routine; \cmd\holdinginserts\ is now cleared, -% and \cmd\insert s will have been split off into their respective box registers, like \cmd\footins. -% -% \begin{enumerate} -% \item -% Set the values of \cmd\topmark\ and \cmd\firstmark. -% \item -% If we got here because of a \cmd\clearpage\ command, remove the protection box that this mechanism has left on the MVL. -% \item -% If the contents of \cmd\box\cmd\@cclv\ are non-trivial, commit it to the current page (as a column) or ship it out, as the case may call for. -% \item -% If not, discard it (we are at the end of \cmd\clearpage\ processing). -% \item -% Set various values, including the available space for setting type on the next column (\cmd\@colroom). -% \end{enumerate} -% -% The processing for a non-trivial \cmd\box\cmd\@cclv\ are: -% \begin{enumerate} -% \item -% Execute the head procedure for the current environment. -% \item -% Make up a column and ship it out (or commit it to the current page) via a procedure keyed to the current page grid. -% \item -% Put down an interrupt for \cmd\do@startcolumn@pen: this will force a visit to the output routine for the -% purpose of committing floats to the next column. -% \item -% Possibly put down an interrupt to continue \cmd\clearpage\ proccessing. -% \item -% Execute the tail procedure for the current environment. -% \end{enumerate} -% -% -% The processing for a trivial \cmd\box\cmd\@cclv\ are: -% \begin{enumerate} -% \item -% Void out \cmd\box\cmd\@cclv\ and give appropriate warning messages and diagnostics. -% \item -% Put down the same interrupts as for the non-trivial case above. -% \end{enumerate} -% -% This instance of \cmd\@makecolumn\ is followed by \cmd\output@column@, -% that is, it builds a column for \cmd\shipout\ rather than for adding to \cmd\pagesofar. -% -% We need to handle cases where the \cmd\output@pre@, \cmd\output@column@, or \cmd\output@post@\ -% dispatchers come up \cmd\relax ed out: the default is to execute the corresponding -% procedures from the \env{docuemnt} environment and the one-column grid respectively. -% -% One such case comes up with frequency: at the end of the document, where the \cmd\botmark\ is -% now empty. -% \changes{4.1b}{2008/08/04}{Change \cs{@makecol} to \cs{@makecolumn} with argument} -% \changes{4.1b}{2008/08/04}{Change \cs{set@colroom} to \cs{set@colht}} -% \changes{4.1n}{2010/01/02}{(AO, 571) Use procedures \cs{output@do@prep} and \cs{output@column@do} as dispatchers} -% \begin{macrocode} -\def\output@moving{% - \set@top@firstmark - \@ifnum{\outputpenalty=\do@newpage@pen}{% - \setbox\@cclv\vbox{% - \unvbox\@cclv - \remove@lastbox - \@ifdim{\ht\z@=\ht\@protection@box}{\box\lastbox}{\unskip}% - }% - }{}% - \@cclv@nontrivial@sw{% - \expandafter\output@do@prep\csname output@prep@\bot@envir \endcsname - \@makecolumn\true@sw - \expandafter\output@column@do\csname output@column@\thepagegrid\endcsname - \protect@penalty\do@startcolumn@pen - \clearpage@sw{% - \protect@penalty\do@endpage@pen - }{}% - \expandafter\let\expandafter\output@post@\csname output@post@\bot@envir \endcsname - \outputdebug@sw{\say\output@post@}{}% - \@ifx{\output@post@\relax}{\output@post@document}{\output@post@}% - }{% - \void@cclv - }% - \set@colht - \global\@mparbottom\z@ - \global\@textfloatsheight\z@ -}% -% \end{macrocode} -% Procedure \cmd\output@do@prep\ dispatches to the proper procedure to prepare page. -% \begin{macrocode} -\def\output@do@prep#1{% - \outputdebug@sw{\class@info{Prep: \string#1}}{}% - \@ifx{#1\relax}{\output@prep@document}{#1}% -}% -% \end{macrocode} -% Procedure \cmd\output@column@do\ dispatches to the proper procedure to output column or page. -% \begin{macrocode} -\def\output@column@do#1{% - \outputdebug@sw{\class@info{Output column: \string#1}}{}% - \@ifx{#1\relax}{\output@column@one}{#1}% -}% -\def\void@cclv{\begingroup\setbox\z@\box\@cclv\endgroup}% -\def\remove@lastbox{\setbox\z@\lastbox}% -% \end{macrocode} -% -% The procedure \cmd\@cclv@nontrivial@sw\ determines if this visit to \cmd\output@moving\ -% is a trivial one, which happens at the end of \cmd\clearpage\ processing and under some pathological circumstances. -% It emits a Boolean, so it is syntactically like \cmd\true@sw, albeit does not execute solely via expansion. -% -% Note: the case where \cmd\box\cmd\@cclv\ is void comes up at the very beginning of the job, when -% typesetting a (full-page-width) title block in a two-column layout. -% -% Note: the code that removes the last box and skip from the output is intended to detect the case -% where the output has whatsit nodes followed by topskip and a protection box. -% This is what happens under normal circumstances at the end of \cmd\clearpage\ processing. -% \changes{4.1b}{2008/08/04}{New procedure for showing a box contents, \cs{trace@box}} -% \begin{macrocode} -\def\@cclv@nontrivial@sw{% - \@ifx@empty\@toplist{% - \@ifx@empty\@botlist{% - \@ifvoid\footins{% - \@ifvoid\@cclv{% - \false@sw - }{% - \setbox\z@\vbox{\unvcopy\@cclv}% - \@ifdim{\ht\z@=\topskip}{% - \setbox\z@\vbox\bgroup - \unvbox\z@ - \remove@lastbox - \dimen@\lastskip\unskip - \@ifdim{\ht\z@=\ht\@protection@box}{% - \advance\dimen@\ht\z@ - \@ifdim{\dimen@=\topskip}{% - \aftergroup\true@sw - }{% - \aftergroup\false@sw - }% - }{% - \aftergroup\false@sw - }% -% \end{macrocode} -% End of \cmd\box\cmd\z@. -% \begin{macrocode} - \egroup - {% -% \end{macrocode} -% Normal for \clearpage -% \begin{macrocode} - \false@sw - }{% - \true@sw - }% - }{% - \@ifdim{\ht\z@=\z@}{% - \ltxgrid@info{Found trivial column. Discarding it}% - \outputdebug@sw{\trace@box\@cclv}{}% - \false@sw - }{% - \true@sw - }% - }% - }% - }{% - \true@sw - }% - }{% - \true@sw - }% - }{% - \true@sw - }% -}% -% \end{macrocode} -% -% -% \end{macro} -% \end{macro} -% -% \begin{macro}{\protect@penalty} -% The procedure \cmd\protect@penalty\ is the utility procedure for invoking a -% one-off output routine. Such a routine can expect to find the protection box -% above it in \cmd\box\cmd\@cclv: it should remove that box. -% -% Note that \cmd\execute@message\ does the same thing as \cmd\protect@penalty, but -% in a slightly different way. -% -% We create a specially formulated box that will be universally used when a protection box is needed. -% In this way, we can always recognize when \cmd\box\cmd\@cclv\ is trivial: -% it will consist of whatsits followed by \cmd\topskip\ glue and the \cmd\@protection@box. -% \begin{macrocode} -\def\protect@penalty#1{\protection@box\penalty-#1\relax}% -\newbox\@protection@box -\setbox\@protection@box\vbox to1986sp{\vfil}% -\def\protection@box{\nointerlineskip\copy\@protection@box}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\dead@cycle} -% \begin{macro}{\dead@cycle@repair} -% The procedure \cmd\dead@cycle\ is defined separately as a utility which can be used by -% any output processing routine to emulate what takes place in the standard output routine. -% -% Here, we have entered the output routine with \cmd\holdinginserts\ enabled, which means that we -% are not yet ready to ship out material, because the \cmd\insert\ registers are being held. -% We want to clear \cmd\holdinginserts\ and come back here with the same page break as before, whereupon -% we may properly proceed with page makeup. -% -% To do this, we -% propagate marks, then spew the contents of \cmd\box\cmd\@cclv\ followed by the -% original output penalty that landed us here (but only if it is not 10000, -% the flag value for a pagebreak not at a penalty). -% -% However, the natural output routine should do this only if \cmd\box\cmd\@cclv\ is nontrivial. -% A pathological case exists wherein a box of height greater than \cmd\textheight\ would cause an infinite loop involving the output routine. -% The procedure \cmd\dead@cycle@repair, attempts to catch this case and avoid the loop. -% -% The test of the height of \cmd\box\cmd\@cclv\ is not the correct one, because this test will run afoul in -% the case where \cmd\box\cmd\@cclv\ contains nothing but an \cmd\insert\ node. What to do? -% -% It is possible that the pathological case can be detected by looking at \cmd\pagetotal. If that quantity is -% zero, then \cmd\box\cmd\@cclv\ really is trivial. -% -% In the procedure \cmd\dead@cycle@repair, if \cmd\box\cmd\@cclv\ is nontrivial, we execute \cmd\dead@cycle, -% otherwise it contains nothing but a mark, so we dispense with propagating marks -% and we simply spew out \cmd\box\cmd\@cclv\ without an accompanying mark. -% This has the effect of failing to propagate marks, but this problem is preferrable to the infinite loop, -% which in principle could crash even a robust operating system by filling up the file system. -% -% If a document has such a large chunk, it should be fixed, so we give a message in the log. -% -% You ask, ``In what way does this infinite loop come about?'' Good question! -% -% The setup is a chunk in the MVL that is taller than \cmd\textheight. -% (Yes, it's that simple.) -% As soon as the previous page ships out, the MVL will contain a mark (propagated from the previous page) followed -% by that large chunk (call it the `big bad box', albeit does not need to be a single box). -% The next visit to the output routine will be a natural page break, but -% \TeX\ will select the juncture between the mark and the big bad box as the least-cost page break. -% Unless the test in \cmd\dead@cycle\ is done, the cycle is perpetuated when the macro -% reinserts the mark. -% -% The crux matter is achieving, in a robust way, the goal of going from a \cmd\holdinginserts\ state to one -% where the insertions are moving. -% -% \begin{macrocode} -\def\dead@cycle@repair#1{% - \expandafter\do@@mark - \expandafter{% - \@@botmark - }% - \unvbox\@cclv - \nointerlineskip - \vbox to#1{\vss}% - \@ifnum{\outputpenalty<\@M}{\penalty\outputpenalty}{}% -}% -\def\dead@cycle@repair@protected#1{% - \expandafter\do@@mark - \expandafter{% - \@@botmark - }% - \begingroup - \unvbox\@cclv -% \end{macrocode} -% Remove the protection box -% \begin{macrocode} - \remove@lastbox - \nointerlineskip - \advance#1-\ht\@protection@box - \vbox to#1{\vss}% - \protection@box % Reinsert protection box - \@ifnum{\outputpenalty<\@M}{\penalty\outputpenalty}{}% - \endgroup -}% -\def\dead@cycle{% - \expandafter\do@@mark - \expandafter{% - \@@botmark - }% - \unvbox\@cclv - \@ifnum{\outputpenalty<\@M}{\penalty\outputpenalty}{}% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\output@init@document} -% \begin{macro}{\output@prep@document} -% \begin{macro}{\output@post@document} -% The default processing simply provides for insertion of held-over footnotes. -% At a natural page break, we are either at the bottom of a column or at the bottom -% of a page. In either case, the \cmd\output@init@\ processing adjusts for the height -% of the held-over footnotes and bails out. -% Upon our return, at \cmd\output@prep@\ time, the page break will accomodate the material; -% it is now actually inserted by concatenating it with the contents of \cmd\footins. -% The default processing for \cmd\output@post@\ is nil. -% \changes{4.1b}{2008/08/04}{Box \cs{footbox} changed to box \cs{footsofar}} -% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing} -% \begin{macrocode} -\def\output@init@document{% - \ltxgrid@info@sw{\class@info{\string\output@init@document}}{}% - \global\vsize\vsize -}% -% \end{macrocode} -% QUERY: the following procedure is very like \cmd\combine@foot@inserts. Should it be the same? -% Answer: no, the two differ: this procedure makes a local assignment of \cmd\footins; -% the latter makes a global assignment of \cmd\footsofar. -% -% Note: In a multicolumn document, footnotes must \emph{not} be balanced at this point. -% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing} -% \begin{macrocode} -\def\output@prep@document{% - \ltxgrid@foot@info@sw{\class@info{\string\output@prep@document}\trace@scroll{\showbox\footins\showbox\footsofar}}{}% - \@ifvoid\footsofar{% - }{% - \global\setbox\footins\vbox\bgroup - \unvbox\footsofar - \@ifvoid\footins{}{% - \marry@baselines - \unvbox\footins - }% - \egroup - \ltxgrid@foot@info@sw{\trace@box\footins}{}% - }% -}% -\def\output@post@document{}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@opcol} -% The standard \LaTeX\ procedure \cmd\@opcol\ is now completely obsoleted. -% \begin{macrocode} -\let\@opcol\@undefined -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@makecolumn} -% \changes{4.1b}{2008/08/04}{Change \cs{@makecol} to \cs{@makecolumn} with argument} -% The procedure \cmd\@makecolumn\ packages up a page along with all its insertions and floats. -% Therefore it is essential that it be executed with \cmd\holdininserts\ cleared. -% -% Note that there is a corner case when in a multi-column grid, where the change back to -% one-column grid occurs just after a complete page ships out. We want to detect when -% \cmd\@cclv\ contains nothing but a \cmd\mark, but this is a \TeX\ impossibility. -% -% Note on \cmd\@kludgeins: we have removed this mechanism from \LaTeX, because the implementation -% of \cmd\enlargethispage\ no longer requires it. -% Here, for consistency sake, we remove \cmd\@makespecialcolbox. -% -% The argument of \cmd\@makecolumn\ is a Boolean and determines if we combine the footnote material -% into the present column. If the procedure is building a column for shipping out, then we will -% combine the footnote material, if not, we return with the \cmd\footins\ box unchanged. -% -% \changes{4.1f}{2009/07/14}{(AO, 519) \cs{footins} content must be preserved and reintegrated} -% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing} -% \changes{4.1n}{2010/01/02}{(AO, 571) coding convention: use \cs{bgroup}, \cs{egroup} (instead of braces) when a box is being built}% -% \changes{4.1n}{2010/01/02}{(AO, 571) change calling sequence of \cs{combine@foot@inserts} to expose box registers}% -% I changed the behavior of this procedure in the case where the argument is \cmd\false@sw: -% send the unused footnote material to \cmd\footsofar. -% \begin{macrocode} -\def\@makecolumn#1{% - \ltxgrid@foot@info@sw{\class@info{\string\@makecolumn\string#1}}{}% - \setbox\@outputbox\vbox\bgroup - \boxmaxdepth\@maxdepth - \@tempdima\dp\@cclv - \unvbox\@cclv - \vskip-\@tempdima - \egroup - \xdef\@freelist{\@freelist\@midlist}\global\let\@midlist\@empty - \show@text@box@size - \@combinefloats - #1{% - \@combineinserts\@outputbox\footins - }{% - \combine@foot@inserts\footsofar\footins - }% - \set@adj@colht\dimen@ - \count@\vbadness - \vbadness\@M - \setbox\@outputbox\vbox to\dimen@\bgroup - \@texttop - \dimen@\dp\@outputbox - \unvbox\@outputbox - \vskip-\dimen@ - \@textbottom - \egroup - \vbadness\count@ - \global\maxdepth\@maxdepth -}% -\let\@makespecialcolbox\@undefined -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@combineinserts} -% The procedure to add the specified insertions to the packaged-up page. -% All other classes of insertions should also be dealt with at this time. -% -% Note that the second argument must be a \cmd\newinsert\ register: we access the \cmd\box\ along with the \cmd\skip. -% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing} -% \changes{4.1n}{2010/01/02}{(AO, 571) coding convention: use \cs{bgroup}, \cs{egroup} (instead of braces) when a box is being built}% -% \changes{4.1n}{2010/01/02}{(AO, 571) footnote rule is leaders, so that it may be removed by \cs{vsplit}; mechanism of \cs{kern} signals to indicate footnote height}% -% \begin{macrocode} -\def\@combineinserts#1#2{% - \ltxgrid@foot@info@sw{\class@info{\string\@combineinserts\string#1\string#2}\trace@box#2}{}% - \setbox#1\vbox\bgroup - \unvbox#1% - \@ifvoid{#2}{}{% - \dimen@\ht#2\advance\dimen@\dp#2\advance\dimen@\skip#2% - \show@box@size{Combining inserts}#2% - \vskip\skip#2% -% \end{macrocode} -% The footnote rule is created as leaders, so that it may be removed automatically (via \cmd\vsplit) -% in the event the footnote is recovered from this column. -% Note that if \cmd\color@begingroup\ or \cmd\normalcolor\ produce marks, this technique will be confounded. -% \begin{macrocode} - \setbox\z@\vbox{\footnoterule}\dimen@i\ht\z@ - \color@begingroup - \normalcolor - \cleaders\box\z@\vskip\dimen@i\kern-\dimen@i - \csname combine@insert@\the\pagegrid@col\endcsname#2% - \color@endgroup -% \end{macrocode} -% The following tells \cmd\recover@column\ the size of the footnotes added here, including the skip glue above. -% \begin{macrocode} - \kern-\dimen@\kern\dimen@ - }% - \egroup - \ltxgrid@foot@info@sw{\trace@box#1}{}% -}% -% \end{macrocode} -% We provide for a layer of abstraction for the laying down of footnotes at the bottom of this column or page. -% \end{macro} -% -% \begin{macro}{\combine@insert@tw@} -% \begin{macro}{\combine@insert@@ne} -% \begin{macro}{\twocolumn@grid@setup} -% \begin{macro}{\onecolumn@grid@setup} -% \begin{macro}{\columngrid@setup} -% \changes{4.1p}{2010/02/24}{(AO, 583) Provide setup code also for footnotes in a one-column document}% -% The following two definitions cover the cases of a two-column document (with footnotes set on a single-column width), -% and a one-column document. -% However, the case of a two-column document with footnotes set on full text width is not covered. -% -% For a document in an overall two-column page grid, execute the commands -% \cmd\twocolumn@grid@setup\ followed by \cmd\open@twocolumn; -% if on the full page width (one-column grid), the command \cmd\onecolumn@grid@setup. -% -% The following is the way REVTeX does the initialization. -% The procedure \cmd\select@column@grid\ is executed at \cmd\AtBeginDocument\ time; -% the boolean \cmd\twocolumn@sw\ selects between the two alternatives. -% \begin{verbatim} -%\def\select@column@grid{% -% \twocolumn@sw{% -% \twocolumn@grid@setup -% \open@twocolumn -% }{% -% \onecolumn@grid@setup -% }% -%}% -%\appdef\class@documenthook{% -% \select@column@grid -%}% -% \end{verbatim} -% -% \begin{macrocode} -\def\combine@insert@tw@#1{% - \compose@footnotes@two#1\@ifvbox{#1}{\unvbox}{\box}#1% -}% -\def\combine@insert@@ne#1{% - \compose@footnotes@one#1\@ifvbox{#1}{\unvbox}{\box}#1% -}% -\def\twocolumn@grid@setup{% - \expandafter\let\csname combine@insert@1\endcsname\combine@insert@tw@ - \expandafter\let\csname combine@insert@2\endcsname\combine@insert@@ne -}% -\def\onecolumn@grid@setup{% - \expandafter\let\csname combine@insert@1\endcsname\combine@insert@@ne - \expandafter\let\csname combine@insert@2\endcsname\combine@insert@@ne -}% -\let\columngrid@setup\onecolumn@grid@setup -\columngrid@setup -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@floatplacement} -% In standard \LaTeX, someone (DPC?) makes the assumption that \cmd\@fpmin\ can be assigned -% locally. This is no longer true now that we ship no more than one page per visit to the output routine. -% We apply a bandaid. -% \begin{macrocode} -\appdef\@floatplacement{% - \global\@fpmin\@fpmin -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\pagebreak@pen} -% While we are in the way of registering certain penalty values, -% let us register the smallest one that will force a visit to the output routine. -% However, this penalty will not have an assciated macro: we wish to execute the -% natural output routine instead. -% -% Note that this penalty is invoked by \cmd\clearpage\ and \cmd\newpage. -% \begin{macrocode} -\mathchardef\pagebreak@pen=\@M -\expandafter\let\csname output@-\the\pagebreak@pen\endcsname\relax -% \end{macrocode} -% \end{macro} -% -% -% \subsection{Float placement}% -% -% \begin{macro}{\do@startcolumn@pen} -% The procedure \cmd\do@startcolumn@pen\ is executed as a one-off output routine -% just after a page is shipped out (or, in a multicolumn page grid, a column is salted away). -% -% Its job is to either generate a ``float page'' (in reality a column) for shipping out, -% or to commit deferred floats to the fresh column, concluding with a dead cycle. -% In the former case, we accomodate split footnotes and other insertions (by comparing \cmd\vsize\ and \cmd\pagegoal): -% the floats are spewed onto the page, whereupon \LaTeX's output routine will place the footnotes and ship out, -% iterating the process once again. -% -% Note that when this procedure is invoked, \cmd\box\cmd\@cclv\ still has within it the protection box, so we -% start by removing it. Note also that if there was a split insertion held over from the previous page, the -% insert node will be present in \cmd\box\cmd\@cclv, \emph{prior to} the protection box. For this reason, we cannot -% just throw away that box, as we might be tempted to do. -% -% FIXME: where else do we possibly inappropriately discard \cmd\box\cmd\@cclv? -% -% Note that, because a column or page page had previously just been completed, -% we can assume that there is nothing of importance on the page, -% and because no message is being passed, we can preserve marks in a simple way. -% -% A Note on terminology: -% In a single-column page grid, you might expect that we would execute the procedure \cmd\do@startpage. -% But this is not so. -% \LaTeX\ has a confustion of long standing, -% in which the procedures that handle full-page width floats in a two-column page grid all have in their names -% the string `dbl', which erroneously suggests having something to do with ``double''. It does not: -% when you see `dbl', think ``full page width''. -% \changes{4.1b}{2008/08/04}{Change \cs{set@colroom} to \cs{set@colht}} -% \begin{macrocode} -\mathchardef\do@startcolumn@pen=10005 -\@namedef{output@-\the\do@startcolumn@pen}{\do@startcolumn}% -\def\do@startcolumn{% - \setbox\@cclv\vbox{\unvbox\@cclv\remove@lastbox\unskip}% - \clearpage@sw{\@clearfloatplacement}{\@floatplacement}% - \set@colht - \@booleanfalse\pfloat@avail@sw - \begingroup - \@colht\@colroom - \@booleanfalse\float@avail@sw - \@tryfcolumn\test@colfloat - \float@avail@sw{\aftergroup\@booleantrue\aftergroup\pfloat@avail@sw}{}% - \endgroup - \fcolmade@sw{% - \setbox\@cclv\vbox{\unvbox\@outputbox\unvbox\@cclv}% -% \end{macrocode} -% Now ask for a return visit, this time with insertions and all. -% \begin{macrocode} - \outputpenalty-\pagebreak@pen - \dead@cycle - }{% - \begingroup - \let\@elt\@scolelt - \let\reserved@b\@deferlist\global\let\@deferlist\@empty\reserved@b - \endgroup - \clearpage@sw{% - \outputpenalty\@M - }{% - \outputpenalty\do@newpage@pen - }% - \dead@cycle - }% - \check@deferlist@stuck\do@startcolumn - \set@vsize -}% -\def\@scolelt#1{\def\@currbox{#1}\@addtonextcol}% -\def\test@colfloat#1{% - \csname @floatselect@sw@\thepagegrid\endcsname#1{}{\@testtrue}% - \@if@sw\if@test\fi{}{\aftergroup\@booleantrue\aftergroup\float@avail@sw}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@addtonextcol} -% We must adjust \cmd\@addtonextcol\ to take held-over inserts into account. -% Now that all deferred floats are queued up together (in order), we must have a way of -% differentiating them; this is done by the page grid-dependent procedure \cmd\@floatselect@sw@. -% \begin{macrocode} -\def\@addtonextcol{% - \begingroup - \@insertfalse - \@setfloattypecounts - \csname @floatselect@sw@\thepagegrid\endcsname\@currbox{% - \@ifnum{\@fpstype=8 }{}{% - \@ifnum{\@fpstype=24 }{}{% - \@flsettextmin - \@reqcolroom \ht\@currbox - \advance \@reqcolroom \@textmin - \advance \@reqcolroom \vsize % take into account split insertions - \advance \@reqcolroom -\pagegoal - \@ifdim{\@colroom>\@reqcolroom}{% - \@flsetnum \@colnum - \@ifnum{\@colnum>\z@}{% - \@bitor\@currtype\@deferlist - \@if@sw\if@test\fi{}{% - \@addtotoporbot - }% - }{}% - }{}% - }% - }% - }{}% - \@if@sw\if@insert\fi{}{% - \@cons\@deferlist\@currbox - }% - \endgroup -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\do@startpage@pen} -% \begin{macro}{\forcefloats@sw} -% \begin{macro}{\@output@combined@page} -% \begin{macro}{\@sdblcolelt} -% \begin{macro}{\test@dblfloat} -% \begin{macro}{\@if@notdblfloat} -% Similar to \cmd\do@startcolumn, -% the procedure \cmd\do@startpage\ starts up a new page (not column) in a multi-column page grid. -% It is invoked after a page is shipped out in a multi-column page grid, and -% it commits full-page-width floats to the fresh page, possibly resulting in a float page. -% In implementation, it is similar to \cmd\do@startcolumn, except that -% it commits effectively via \cmd\@addtodblcol\ instead of \cmd\@addtonextcol. -% Note that this procedure will inevitably be followed by \cmd\do@startcolumn. -% -% Some details of the procedure: -% -% We begin by removing the protection box from \cmd\box\cmd\@cclv, then setting the values of the -% float placement parameters appropriately, and resetting \cmd\@colht, \cmd\@colroom, and \cmd\vsize\ to base values. -% -% Next we attempt to compose a float page, a page consisting entirely of floats. If successful, -% we ship out the float page and lay down an interrupt that will send us back here for another try. -% -% If no float page is formed, we attempt to commit full-page-width floats to the text page, and return with a dead cycle. -% We are now ready to compose columns of text. -% -% Note that all floats (both column floats and full-page-width floats) move through a single queue. -% To differentiate between the two, the width of the float is compared to \cmd\textwidth. -% This comparison is encapsulated in the macro \cmd\@if@notdblfloat, which should be used whenever -% such a determination must be made. This procedure returns a Boolean. -% -% \changes{4.1b}{2008/08/04}{Change \cs{set@colroom} to \cs{set@colht}} -% \begin{macrocode} -\mathchardef\do@startpage@pen=10006 -\@namedef{output@-\the\do@startpage@pen}{\do@startpage}% -\def\do@startpage{% - \setbox\@cclv\vbox{\unvbox\@cclv\remove@lastbox\unskip}% - \clearpage@sw{\@clearfloatplacement}{\@dblfloatplacement}% - \set@colht - \@booleanfalse\pfloat@avail@sw - \begingroup - \@booleanfalse\float@avail@sw - \@tryfcolumn\test@dblfloat - \float@avail@sw{\aftergroup\@booleantrue\aftergroup\pfloat@avail@sw}{}% - \endgroup - \fcolmade@sw{% - \global\setbox\pagesofar\vbox{\unvbox\pagesofar\unvbox\@outputbox}% - \@output@combined@page - }{% - \begingroup - \@booleanfalse\float@avail@sw - \let\@elt\@sdblcolelt - \let\reserved@b\@deferlist\global\let\@deferlist\@empty\reserved@b - \endgroup - \@ifdim{\@colht=\textheight}{% No luck... - \pfloat@avail@sw{% ...but a float *was* available! - \forcefloats@sw{% - \ltxgrid@warn{Forced dequeueing of floats stalled}% - }{% - \ltxgrid@warn{Dequeueing of floats stalled}% - }% - }{}% - }{}% - \outputpenalty\@M - \dead@cycle - }% - \check@deferlist@stuck\do@startpage - \set@colht -}% -% \end{macrocode} -% -% Procedure \cmd\@output@combined@page\ is a utility that ships out a page consisting of the -% result of \cmd\@combinepage\ and \cmd\@combinedblfloats, after which it prepares for -% the process to repeat. -% -% It is coincidentally identical to what needs to happen with -% a float page that has been built by \cmd\@tryfcolumn, in the multi-column page grid, -% and also handles the case where a page needs to be shipped out when in multicolumn mode. -% \changes{4.1b}{2008/08/04}{New procedure \cs{@output@combined@page}} -% \changes{4.1b}{2008/08/04}{Change \cs{@combinepage} to \cs{@combinepage} with argument} -% \begin{macrocode} -\def\@output@combined@page{% - \@combinepage\true@sw - \@combinedblfloats - \@outputpage - \global\pagegrid@cur\@ne - \protect@penalty\do@startpage@pen -}% -\def\@sdblcolelt#1{\def\@currbox{#1}\@addtodblcol}% -\def\test@dblfloat#1{% - \@if@notdblfloat{#1}{\@testtrue}{}% - \@if@sw\if@test\fi{}{\aftergroup\@booleantrue\aftergroup\float@avail@sw}% -}% -\def\@if@notdblfloat#1{\@ifdim{\wd#1<\textwidth}}% -\@booleanfalse\forcefloats@sw -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@addtodblcol} -% -% The procedure \cmd\@addtodblcol\ is called into play at the beginning of each fresh page -% and operates on each deferred float, in the hopes of placing one or more such floats -% at the top of the current page. -% -% We alter the procedure of standard \LaTeX\ by putting failed floats into -% \cmd\@deferlist\ instead of \cmd\@dbldeferlist. Having done so, we must have a means -% of differentiating full-page-width floats from column-width floats. -% We assume that the latter will always be narrower than \cmd\textwidth. -% -% In aid of detecting a stalled float flushing process, we set a Boolean if we encounter -% a qualified full-page-width float here. Any that qualify but fail the rest of the tests -% might still pass when reconsidered on an otherwise blank page. -% \begin{macrocode} -\def\@addtodblcol{% - \begingroup - \@if@notdblfloat{\@currbox}{% - \false@sw - }{% - \@setfloattypecounts - \@getfpsbit \tw@ - \@bitor \@currtype \@deferlist - \@if@sw\if@test\fi{% - \false@sw - }{% - \@ifodd\@tempcnta{% - \aftergroup\@booleantrue\aftergroup\float@avail@sw - \@flsetnum \@dbltopnum - \@ifnum{\@dbltopnum>\z@}{% - \@ifdim{\@dbltoproom>\ht\@currbox}{% - \true@sw - }{% - \@ifnum{\@fpstype<\sixt@@n}{% - \begingroup - \advance \@dbltoproom \@textmin - \@ifdim{\@dbltoproom>\ht\@currbox}{% - \endgroup\true@sw - }{% - \endgroup\false@sw - }% - }{% - \false@sw - }% - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - }% - }% - {% - \@tempdima -\ht\@currbox - \advance\@tempdima - -\@ifx{\@dbltoplist\@empty}{\dbltextfloatsep}{\dblfloatsep}% - \global \advance \@dbltoproom \@tempdima - \global \advance \@colht \@tempdima - \global \advance \@dbltopnum \m@ne - \@cons \@dbltoplist \@currbox - }{% - \@cons \@deferlist \@currbox - }% - \endgroup -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@tryfcolumn} -% \begin{macro}{\@wtryfc} -% \begin{macro}{\@xtryfc} -% \begin{macro}{\@ztryfc} -% Whenever a page is shipped out, \LaTeX\ automatically tries out a float column: -% a page containing nothing but floats (and, as we have added here, split footnotes). -% -% The following four procedures employ certain macros to communicate between each other: -% -% \cmd\fcolmade@sw, a boolean, says whether we were successful in making a float column. -% -% \cmd\if@test, a \cmd\newif\ switch, says a float has failed some test. -% -% \cmd\@deferlist, is the input to the process, a list, of deferred floats. -% -% \cmd\@trylist, a list, stores the deferred floats to be tried out on the float column. -% -% \cmd\@failedlist, a list of floats that have failed the selection for the float column. -% -% \cmd\@flfail, a list of floats that have failed the second selection for the float column. -% -% \cmd\@flsucceed, a list, the floats that have been successfully placed on the float column. -% -% \cmd\@freelist, a list, receives any freed floats. -% -% \cmd\@colht, a dimen, the available space for the column, including column floats and insertions (footnotes). -% -% \cmd\@fpmin, a dimen, the required minimum height for the float column. -% -% \cmd\@outputbox, a box, the output of the process. -% -% \cmd\@fptop, \cmd\@fpsep, \cmd\@fpbot, glue, placed above, between, and below floats on the float column. -% -% \cmd\@currtype, a count, used temporarily for the float's bits. -% -% \cmd\@tempcnta, a count, used temporarily for the float's bits. -% -% In \cmd\@tryfcolumn, we alter the criterion for a float page, because if footnotes are present at this point -% (presumably due to a split insertion) then \cmd\@fpmin is no longer the right threshold to apply. -% -% Note that we have changed \cmd\@tryfcolumn, \cmd\@xtryfc, and \cmd\@ztryfc\ syntactically so that the procedure -% to test for the float's being a column float versus a full-page-width float is passed in as an -% argument. -% -% \begin{macrocode} -\def\@tryfcolumn#1{% - \global\@booleanfalse\fcolmade@sw - \@ifx@empty\@deferlist{}{% - \global\let\@trylist\@deferlist - \global\let\@failedlist\@empty - \begingroup - \dimen@\vsize\advance\dimen@-\pagegoal\@ifdim{\dimen@>\z@}{% - \advance\@fpmin-\dimen@ - }{}% - \def\@elt{\@xtryfc#1}\@trylist - \endgroup - \fcolmade@sw{% - \global\setbox\@outputbox\vbox{\vskip \@fptop}% - \let \@elt \@wtryfc \@flsucceed - \global\setbox\@outputbox\vbox{\unvbox\@outputbox - \unskip \vskip \@fpbot - }% - \let \@elt \relax - \xdef\@deferlist{\@failedlist\@flfail}% - \xdef\@freelist{\@freelist\@flsucceed}% - }{}% - }% -}% -\def\@wtryfc #1{% - \global\setbox\@outputbox\vbox{\unvbox\@outputbox - \box #1\vskip\@fpsep - }% -}% -\def\@xtryfc#1#2{% - \@next\reserved@a\@trylist{}{}% trim \@trylist. Ugly! - \@currtype \count #2% - \divide\@currtype\@xxxii\multiply\@currtype\@xxxii - \@bitor \@currtype \@failedlist - \@testfp #2% - #1#2% - \@ifdim{\ht #2>\@colht }{\@testtrue}{}% - \@if@sw\if@test\fi{% - \@cons\@failedlist #2% - }{% - \begingroup - \gdef\@flsucceed{\@elt #2}% - \global\let\@flfail\@empty - \@tempdima\ht #2% - \def \@elt {\@ztryfc#1}\@trylist - \@ifdim{\@tempdima >\@fpmin}{% - \global\@booleantrue\fcolmade@sw - }{% - \@cons\@failedlist #2% - }% - \endgroup - \fcolmade@sw{% - \let \@elt \@gobble - }{}% - }% -}% -\def\@ztryfc #1#2{% - \@tempcnta \count#2% - \divide\@tempcnta\@xxxii\multiply\@tempcnta\@xxxii - \@bitor \@tempcnta {\@failedlist \@flfail}% - \@testfp #2% - #1#2% - \@tempdimb\@tempdima - \advance\@tempdimb \ht#2\advance\@tempdimb\@fpsep - \@ifdim{\@tempdimb >\@colht}{% - \@testtrue - }{}% - \@if@sw\if@test\fi{% - \@cons\@flfail #2% - }{% - \@cons\@flsucceed #2% - \@tempdima\@tempdimb - }% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% -% \subsection{Clearing pages}% -% -% Clearing the page is an elaboration of ending the page: it entails flushing all floats. -% -% This package might make number of float flushing algorithms available, -% a very simple one that does not try to produce excellent pages, -% another that tries to make the best use of space, -% and a more complex one that tries to balance columns. -% -% At the beginning of the page-clearing process, by definition all of the paragraph text involved is on the MVL and all floats have been encountered. -% There may be material in \cmd\pagesofar, and (in a multi-column page grid) any number of columns of the page have been composed. -% Also, there might be footnote material saved up in \cmd\footsofar. -% -% Because we did not want to perform multiple \cmd\shipout s per visit to the output routine, -% our multi-column page makeup will not compose multiple columns per visit. -% This implementation detail may not require alteration, but it is not a limitation that is truly necessary: -% it is only multiple \cmd\shipout s per visit that must be avoided. -% -% The crux matter is how to continue with flushing floats even after the material in the MVL is exhausted. -% At that point, we must, upon completion of the output routine, -% insert into the MVL an interrupt that triggers the next step in the processing. -% -% Therefore, after processing a \cmd\do@startcolumn\ interrupt, we must somehow force the completion of that column. -% This could be done by inserting a \cmd\do@newpage@pen\ interrupt. -% -% And after processing a \cmd\do@startpage@pen\ interrupt, that results in \cmd\@dbltopinsert s, -% we must ensure that the multiple columns on the page get completed, so that the page itself finally gets shipped out. -% This part will proceed automatically given that \cmd\do@startcolumn\ processing completes successfully. -% -% The process will not be complete until all deferred floats have been placed and shipped out, and all saved-up footnotes have been inserted. -% -% Full-page-width floats can get out of order of column floats. This problem can be remedied by holding them all in the same list. -% We therefore stop using \cmd\@dbldeferlist\ entirely, and all of the procedures that formerly used it have been rewritten to -% use \cmd\@deferlist\ instead. When traversing the list, we apply a selector on the given box that determines whether it is a column-width or page-width float. -% This selector is different depending on the page grid. -% -% When the \cmd\@deferlist\ is processed (by any means), we have to take care of the case where a float of one category is passed over but we are looking for a float of the other category. -% Here, we must terminate processing, to avoid disordering the floats. This we do by the usual means. -% -% The system has a Boolean that says we are clearing pages: \cmd\clearpage@sw; if it is true, -% then at the tail of \cmd\do@startcolumn\ processing, we should put down a (\cmd\vfil?) \cmd\do@newpage@pen\ interrupt. -% This is because the MVL is now empty, so we have to force the columns to complete. -% -% One potential very pathological case would be where there is one or more deferred floats that never successfully get placed: -% placing floats has stalled, and we will ship out blank pages indefinitely. How to detect this case? -% -% First, \cmd\do@startpage\ will evidently be stalled if the following are all true: -% a) \cmd\@tryfcolumn\ and \cmd\@sdblcolelt\ both fail, -% b) there are deferred floats available for page placement, and -% c) the \cmd\@colht=\cmd\textheight, that is, the full page height is available for placement of column floats. -% -% Second, \cmd\do@startcolumn\ will evidently be stalled if the following are all true: -% a) tryfcolumn fails, -% b) there are deferred floats available for column placement, and -% a) the \cmd\@colroom=\cmd\textheight, that is, the full page height is available for placement of column floats. -% -% -% \begin{macro}{\cleardoublepage} -% \begin{macro}{\clearpage} -% \begin{macro}{\newpage} -% \begin{macro}{\newpage@prep} -% The function of \cmd\clearpage\ is to end the current page with \cmd\newpage\ and then -% ship out additional pages until (\footins) inserts and (deferred) floats are exhausted. -% -% The method involves setting the float placement parameters to completely permissive values -% and kicking out the current page (using a non-discardable penalty). -% A possibly short page will be shipped out, followed -% by any number of float pages. However these float pages, because using permissive float placement, -% will exhaust all inserts and deferred floats. -% -% Bug Note: in the code for \cmd\clearpage, the first penalty we output is an unprotected \cmd\pagebreak@pen. -% I tried using a protected \cmd\do@newpage@pen, but that gave rise to a corner case where a blank page -% was output. -% -% At present, the \cmd\clearpage\ procedure does the same as \cmd\newpage, -% except that \cmd\clearpage@sw\ is turned on, -% and the (discardable) \cmd\newpage\ is inevitably followed by the same procedures -% that are executed if a page is shipped out. -% -% FIXME: it seems that better than \cmd\pagebreak@pen\ would be an unprotected penalty of a special value that would -% entail output routine processing consisting of the following steps: -% 3) \cmd\unvbox\cmd\@cclv, -% 1) set \cmd\clearpage@sw\ to \cmd\true@sw, -% 2) put down a protected \cmd\do@startcolumn@pen, -% 4) take a dead cycle. -% -% The effect would be to liberalize float placement options for the current column as well as further columns that may be output as part of \cmd\clearpage\ processing. -% Of course, it would still be necessary to set \cmd\clearpage@sw\ again via an interrupt. -% -% An optimization might be to clear \cmd\clearpage@sw\ as part of the same interrupt, -% but that would actually not work properly, because it is necessary for \cmd\do@endpage\ to -% possibly invoke further visits to the output routine before clearpage processing ceases. -% \begin{macrocode} -\def\newpage@prep{% - \if@noskipsec - \ifx \@nodocument\relax - \leavevmode - \global \@noskipsecfalse - \fi - \fi - \if@inlabel - \leavevmode - \global \@inlabelfalse - \fi - \if@nobreak \@nobreakfalse \everypar{}\fi - \par -}% -\def \newpage {% - \newpage@prep - \do@output@MVL{% - \vfil - \penalty-\pagebreak@pen - }% -}% -\def\clearpage{% - \newpage@prep - \do@output@MVL{% - \vfil - \penalty-\pagebreak@pen - \global\@booleantrue\clearpage@sw - \protect@penalty\do@startcolumn@pen - \protect@penalty\do@endpage@pen - }% - \do@output@MVL{% - \global\@booleanfalse\clearpage@sw - }% -}% -\def\cleardoublepage{% - \clearpage - \@if@sw\if@twoside\fi{% - \@ifodd\c@page{}{% - \null\clearpage - }% - }{}% -}% -\@booleanfalse\clearpage@sw -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\do@endpage@pen} -% The penalty \cmd\do@endpage@pen\ simply dispatches to the page grid procedure that forces an end page. -% That procedure should test whether there is anything to ship out (say committed floats), then act accordingly. -% Note that as part of this work, it should \cmd\unvbox\cmd\@cclv, which has been left boxed up so it can be -% measured. -% \begin{macrocode} -\mathchardef\do@endpage@pen=10007 -\@namedef{output@-\the\do@endpage@pen}{\csname end@column@\thepagegrid\endcsname}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\do@newpage@pen} -% The penalty \cmd\do@newpage@pen\ allows a ``non-discardable \cmd\newpage'' command: -% a \cmd\newpage\ command that will not disappear at a pagebreak. -% This visit to the output routine will not be dispatched to an interrupt, -% rather the natural output routine will be executed, where it -% will remove the protection box. -% -% Call this routine by executing \cmd\protect@penalty\cmd\do@newpage@pen. -% \begin{macrocode} -\mathchardef\do@newpage@pen=10001 -\expandafter\let\csname output@-\the\do@newpage@pen\endcsname\relax -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@clearfloatplacement} -% The procedure \cmd\@clearfloatplacement\ sets the float placement parameters -% to completely permissive values (except for \cmd\@fpmin). The standard values are: -% -% \begin{tabular}{ll} -%\cmd\@topnum &\cmd\c@topnumber\\ -%\cmd\@toproom &\cmd\topfraction\cmd\@colht\\ -%\cmd\@botnum &\cmd\c@bottomnumber\\ -%\cmd\@botroom &\cmd\bottomfraction\cmd\@colht\\ -%\cmd\@colnum &\cmd\c@totalnumber\\ -%\cmd\@fpmin &\cmd\floatpagefraction\cmd\@colht\\ -%\cmd\@dbltopnum &\cmd\c@dbltopnumber\\ -%\cmd\@dbltoproom &\cmd\dbltopfraction\cmd\@colht\\ -%\cmd\@textmin &\cmd\@colht\cmd\advance\cmd\@textmin -\cmd\@dbltoproom\\ -%\cmd\@fpmin &\cmd\dblfloatpagefraction\cmd\textheight -% \end{tabular} -% \begin{macrocode} -\def\@clearfloatplacement{% - \global\@topnum \maxdimen - \global\@toproom \maxdimen - \global\@botnum \maxdimen - \global\@botroom \maxdimen - \global\@colnum \maxdimen - \global\@dbltopnum \maxdimen - \global\@dbltoproom \maxdimen - \global\@textmin \z@ - \global\@fpmin \z@ - \let\@testfp\@gobble - \appdef\@setfloattypecounts{\@fpstype16\advance\@fpstype\m@ne}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@doclearpage} -% \begin{macro}{\@makefcolumn} -% \begin{macro}{\@makecol} -% The \cmd\@doclearpage\ procedure is now obsoleted, as is \cmd\@makefcolumn, which it invoked. -% We also completely avoid using \cmd\@makecol\ (in favor of \cmd\@makecolumn). -% \begin{macrocode} -\let\@doclearpage\@undefined -\let\@makefcolumn\@undefined -\let\@makecol\@undefined -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\clr@top@firstmark} -% \begin{macro}{\set@top@firstmark} -% \begin{macro}{\@outputpage@tail} -% We want accurate values of \cmd\topmark\ and \cmd\firstmark, but we must deal with -% the fact that there are many different ways of contributing material -% to the page. Only upon the first contribution to the page is the value of \cmd\topmark\ -% accurate. However, with \cmd\firstmark\ we must potentially examine each contribution -% because the first mark on the page may happen to fall in the last piece of material contributed. -% -% To begin, we define the procedure that initializes the macros to appropriate flag values. -% \begin{macrocode} -\def\clr@top@firstmark{% - \global\let\saved@@topmark\@undefined - \global\let\saved@@firstmark\@empty - \global\let\saved@@botmark\@empty -}% -\clr@top@firstmark -% \end{macrocode} -% -% Note that the flag value for \cmd\saved@@topmark\ is \cmd\@undefined, just as one would -% expect. But that for \cmd\saved@@firstmark\ and \cmd\saved@@botmark\ is \cmd\@empty. -% -% Next, we define procedure \cmd\set@top@firstmark; it will be exercised everywhere material is contributed, -% capturing the mark values if appropriate. -% \begin{macrocode} -\def\set@top@firstmark{% - \@ifxundefined\saved@@topmark{\expandafter\gdef\expandafter\saved@@topmark\expandafter{\@@topmark}}{}% - \@if@empty\saved@@firstmark{\expandafter\gdef\expandafter\saved@@firstmark\expandafter{\@@firstmark}}{}% - \@if@empty\@@botmark{}{\expandafter\gdef\expandafter\saved@@botmark\expandafter{\@@botmark}}% -}% -% \end{macrocode} -% When should \cmd\set@top@firstmark\ be called? -% A good candidate for a universal procedure for handling contributed material is -% the natural output routine; are any other calls needed? -% -% Yes, in \cmd\save@column\ we must execute \cmd\set@top@firstmark\ because we are about to -% save away \cmd\box\cmd\@cclv, and we will never see its marks again (unless it is unboxed into the MVL), -% because \TeX\ lets one access a box's marks only within an output routine that has put that box into \cmd\box\cmd\@cclv. -% -% As soon as a page is shipped out, we initialize the two macros that -% hold the values of \cmd\topmark\ and \cmd\firstmark, respectively. -% \changes{4.1b}{2008/08/04}{Procedure \cs{@outputpage@tail} tailpatches \cs{@outputpage}}% -% \begin{macrocode} -\appdef\@outputpage@tail{% - \clr@top@firstmark -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% -% \subsection{Other interfaces to \LaTeX}% -% -% \begin{macro}{\@float} -% \begin{macro}{\@dblfloat} -% \begin{macro}{\@yfloat} -% \begin{macro}{\fps@} -% \begin{macro}{\fpsd@} -% The \LaTeX\ kernel procedures \cmd\@float\ and \cmd\@dblfloat\ are treated on an equal footing. -% Each now takes environment-specific float placement defaults. -% If none are defined for the calling environment, we apply a default. -% -% A parameter is passed that will set the width of text within the float, normally \cmd\columnwidth, -% and in the "dbl" version, \cmd\textwidth. However, an environment such as \env{turnpage} -% may change the meanings of these macros to allow turnpage floats. -% -% \changes{4.0a}{2008/06/26 }{\cs{@yfloat}: de-fang \cs{set@footnotewidth} (see ltxutil.dtx): we have already done its job. } -% -% Note on \cmd\@xfloat: the optional argument must come to it fully expanded, because the macro -% does a weird procedure on this argument, involving \cmd\@onelevel@sanitize, which I do not -% understand, and which does not work if not so expanded. -% \changes{4.1b}{2008/08/04}{Get rid of the \cs{reserved@a} idiom} -% \begin{macrocode} -\def\@float#1{% - \@ifnextchar[{% -% \end{macrocode} -% \verb+}]{+Brace-matching klootch -% \begin{macrocode} - \@yfloat\width@float{#1}% - }{% - \@ifxundefined@cs{fps@#1}{}{\expandafter\let\expandafter\fps@\csname fps@#1\endcsname}% - \expandafter\@argswap\expandafter{\expandafter[\fps@]}{\@yfloat\width@float{#1}}% - }% -}% -\def\@dblfloat#1{% - \@ifnum{\pagegrid@col=\@ne}{% - \@float{#1}% - }{% - \@ifnextchar[{% -% \end{macrocode} -% \verb+}]{+Brace-matching klootch -% \begin{macrocode} - \@yfloat\widthd@float{#1}% - }{% - \@ifxundefined@cs{fpsd@#1}{}{\expandafter\let\expandafter\fpsd@\csname fpsd@#1\endcsname}% - \expandafter\@argswap\expandafter{\expandafter[\fpsd@]}{\@yfloat\widthd@float{#1}}% - }% - }% -}% -% \end{macrocode} -% \changes{4.1b}{2008/08/04}{Turn off the \cs{set@footnotewidth} mechanism; a float `knows' its proper typesetting context} -% \changes{4.1n}{2010/01/02}{(AO, 571) Interface \cs{set@footnotewidth} for determining the set width of footnotes}% -% \cmd\@yfloat\ is the go-to procdure for creating the proper environment for the content of a float. -% Argument \verb+#1+ is the width of the float environment (we disable \cmd\set@footnotewidth), and -% we establish a self-contained (minipage) environment for footnotes. -% \begin{macrocode} -\def\@yfloat#1#2[#3]{% - \@xfloat{#2}[#3]% - \hsize#1\linewidth\hsize - \let\set@footnotewidth\@empty - \minipagefootnote@init -}% -\def\fps@{tbp}% -\def\fpsd@{tp}% -\def\width@float{\columnwidth}% -\def\widthd@float{\textwidth}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\end@float} -% \begin{macro}{\end@dblfloat} -% \begin{macro}{\end@@float} -% \begin{macro}{\check@currbox@count} -% \begin{macro}{\minipagefootnote@init} -% \begin{macro}{\minipagefootnote@here} -% \LaTeX\ kernel procedures \cmd\end@float\ and \cmd\end@dblfloat\ -% have been changed to work alike; in particular, floats of both classes -% are deferred into the same queue. -% This measure ensures that they will be placed in their original order, -% an aspect in which \LaTeX\ is broken. -% -% Note: when retrieving floats from the queues, we can differentiate those of the two categories -% by the width of the box. -% -% Floats are processed via an output routine message, and are checked for -% sanity in re the float placement options. In the case of full-page-width floats, -% we ensure that the h and b float placement options are never asserted, because they -% make no sense. -% -% Note that if we get to the end of the float box and still have pending -% footnotes, we put then out. -% -% LaTeX Bug note: if a user types \cmd\begin{table*}[h], the float will never succeed in being placed! -% we try to catch such cases. -% -% Note that the macro \cmd\check@currbox@count\ tries to catch cases where the float placement options -% are such that the float can never be placed. -% -% The calls to \cmd\@iffpsbit\ are part of a procedure to deny certain of the float placement -% parameters: ``h'' and ``b'' are not possible, the former because the \cmd\marginpar\ mechanism -% cannot place a full-page-width float within a multicolumn page grid, the latter because nobody -% has yet written the code to do so (pretty bad reason, I know). -% \changes{4.1b}{2008/08/04}{New procedure \cs{@iffpsbit} replaces \cs{@getfpsbit}} -% \begin{macrocode} -\def\end@float{% - \end@@float{% - \check@currbox@count - }% -}% -\def\end@dblfloat{% - \@ifnum{\pagegrid@col=\@ne}{% - \end@float - }{% - \end@@float{% - \@iffpsbit\@ne{\global\advance\count\@currbox\m@ne}{}% - \@iffpsbit\f@ur{\global\advance\count\@currbox-4\relax}{}% - \global\wd\@currbox\textwidth % Klootch - \check@currbox@count - }% - }% -}% -\def\end@@float#1{% - \minipagefootnote@here - \@endfloatbox - #1% - \@ifnum{\@floatpenalty <\z@}{% - \@largefloatcheck - \@cons\@currlist\@currbox - \@ifnum{\@floatpenalty <-\@Mii}{% - \do@output@cclv{\@add@float}% - }{% - \vadjust{\do@output@cclv{\@add@float}}% - \@Esphack - }% - }{}% -}% -% \end{macrocode} -% The \classname{float} package of Anselm Lingnau fails when used under \classname{ltxgrid}, but -% we can fix things. -% We also repair a bug in that package. -% -% \changes{4.1g}{2009/10/06}{(AO, 531) Fix package \classname{float} } -% \begin{macrocode} -\newcommand\float@end@float{% - \@endfloatbox - \global\setbox\@currbox\float@makebox\columnwidth - \let\@endfloatbox\relax - \end@float -}% -\newcommand\float@end@ltx{% - \end@@float{% - \global\setbox\@currbox\float@makebox\columnwidth - \check@currbox@count - }% -}% -\newcommand\newfloat@float[3]{% - \@namedef{ext@#1}{#3} %! - \let\float@do=\relax - \xdef\@tempa{\noexpand\float@exts{\the\float@exts \float@do{#3}}}% - \@tempa - \floatplacement{#1}{#2}% - \@ifundefined{fname@#1}{\floatname{#1}{#1}}{} %! - \expandafter\edef\csname ftype@#1\endcsname{\value{float@type}}% - \addtocounter{float@type}{\value{float@type}} %! - \restylefloat{#1}% - \expandafter\edef\csname fnum@#1\endcsname{% - \expandafter\noexpand\csname fname@#1\endcsname{} %! - \expandafter\noexpand\csname the#1\endcsname - } - \@ifnextchar[%] - {% - \float@newx{#1}% - }{% - \@ifundefined{c@#1}{\newcounter{#1}\@namedef{the#1}{\arabic{#1}}}{}% - }% -}% -\newcommand\newfloat@ltx[3]{% - \@namedef{ext@#1}{#3}% - \let\float@do=\relax - \xdef\@tempa{\noexpand\float@exts{\the\float@exts \float@do{#3}}}% - \@tempa - \floatplacement{#1}{#2}% - \@ifundefined{fname@#1}{\floatname{#1}{#1}}{}% - \expandafter\edef\csname ftype@#1\expandafter\endcsname\expandafter{\the\c@float@type}% - \addtocounter{float@type}{\value{float@type}}% - \restylefloat{#1}% - \expandafter\edef\csname fnum@#1\endcsname{% - \expandafter\noexpand\csname fname@#1\endcsname{}% - \expandafter\noexpand\csname the#1\endcsname - } - \@ifnextchar[%] - {% - \float@newx{#1}% - }{% - \@ifundefined{c@#1}{\newcounter{#1}\@namedef{the#1}{\arabic{#1}}}{}% - }% -}% -\appdef\document@inithook{% - \@ifxundefined\newfloat{}{% - \@ifx{\float@end\float@end@float}{% - \@ifx{\newfloat\newfloat@float}{\true@sw}{\false@sw}% - }{\false@sw}% - {% - \class@warn{Repair the float package}% - \let\float@end\float@end@ltx - \let\newfloat\newfloat@ltx - }{% - \class@warn{Failed to patch the float package}% - }% - }% -}% -% \end{macrocode} -% -% Boolean procedure \cmd\@iffpsbit\ is similar to the \cmd\@getfpsbit\ of \LaTeX, except -% that we do not expose the scratch count register or even change its value. -% \begin{macrocode} -\def\@iffpsbit#1{% - \begingroup - \@tempcnta\count\@currbox - \divide\@tempcnta#1\relax - \@ifodd\@tempcnta{\aftergroup\true@sw}{\aftergroup\false@sw}% - \endgroup -}% -% \end{macrocode} -% -% In procedure \cmd\check@currbox@count, we calculate the net float placement -% directive (encoded into \cmd\count\ \cmd\@currbox's least significant four bits). -% If zero, issue a warning. -% \changes{4.1b}{2008/08/04}{Tally the height of the float} -% \begin{macrocode} -\def\check@currbox@count{% - \@ifnum{\count\@currbox>\z@}{% - \count@\count\@currbox\divide\count@\sixt@@n\multiply\count@\sixt@@n - \@tempcnta\count\@currbox\advance\@tempcnta-\count@ - \@ifnum{\@tempcnta=\z@}{% - \ltxgrid@warn{Float cannot be placed}% - }{}% - \expandafter\tally@float\expandafter{\@captype}% - }{% -% \end{macrocode} -% In this case, the float is a \cmd\marginpar. -% \begin{macrocode} - }% -}% -\providecommand\minipagefootnote@init{}% -\providecommand\minipagefootnote@here{}% -\providecommand\tally@float[1]{}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@specialoutput} -% The \cmd\@add@float\ procedure used to reside in standard \LaTeX's \cmd\@specialoutput, -% which is no more. -% -% Historical Note: \cmd\@specialoutput\ and Lamport's method of an output routine dispatcher -% is the genesis of our more powerful and refined way of using \TeX's output routine to -% safely accomplish page makeup tasks. To it and to him we owe acknowledgement and thanks. -% \begin{macrocode} -\let\@specialoutput\@undefined -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@add@float} -% In the following, we do not need to execute \cmd\@reinserts, which was wrong anyway, as you cannot -% reliably recover insertions when they split (unless you have a way of reinserting the captured insertion -% ahead of the split-off part). -% -% Now that full-page-width floats are being processed the same as column floats, we -% have to nip in here and cause them always to be deferred. -% -% At the very end, the \cmd\vsize\ is adjusted for any newly committed float. -% \begin{macrocode} -\def\@add@float{% - \@pageht\ht\@cclv\@pagedp\dp\@cclv - \unvbox\@cclv - \@next\@currbox\@currlist{% - \csname @floatselect@sw@\thepagegrid\endcsname\@currbox{% - \@ifnum{\count\@currbox>\z@}{% - \advance \@pageht \@pagedp -% \end{macrocode} -% Do not assume \cmd\holdinginserts is cleared: -% \begin{macrocode} - \advance \@pageht \vsize \advance \@pageht -\pagegoal -% \end{macrocode} -% Commit an `h' float: -% \begin{macrocode} - \@addtocurcol - }{% - \@addmarginpar - }% - }{% - \@resethfps - \@cons\@deferlist\@currbox - }% - }{\@latexbug}% - \@ifnum{\outputpenalty<\z@}{% - \@if@sw\if@nobreak\fi{% - \nobreak - }{% - \addpenalty \interlinepenalty - }% - }{}% - \set@vsize -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@reinserts} -% The \cmd\@reinserts\ procedure of standard \LaTeX\ is now obsoleted (it had been erroneous anyway). -% \begin{macrocode} -\let\@reinserts\@undefined -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@addtocurcol} -% We modify the \cmd\@addtocurcol\ procedure of standard \LaTeX\ -% so that a float placed ``here'' may break over pages. -% \begin{macrocode} -\def \@addtocurcol {% - \@insertfalse - \@setfloattypecounts - \ifnum \@fpstype=8 - \else - \ifnum \@fpstype=24 - \else - \@flsettextmin - \advance \@textmin \@textfloatsheight - \@reqcolroom \@pageht - \ifdim \@textmin>\@reqcolroom - \@reqcolroom \@textmin - \fi - \advance \@reqcolroom \ht\@currbox - \ifdim \@colroom>\@reqcolroom - \@flsetnum \@colnum - \ifnum \@colnum>\z@ - \@bitor\@currtype\@deferlist - \if@test - \else - \@bitor\@currtype\@botlist - \if@test - \@addtobot - \else - \ifodd \count\@currbox - \advance \@reqcolroom \intextsep - \ifdim \@colroom>\@reqcolroom - \global \advance \@colnum \m@ne - \global \advance \@textfloatsheight \ht\@currbox - \global \advance \@textfloatsheight 2\intextsep - \@cons \@midlist \@currbox - \if@nobreak - \nobreak - \@nobreakfalse - \everypar{}% - \else - \addpenalty \interlinepenalty - \fi - \vskip \intextsep - \unvbox\@currbox %AO - \penalty\interlinepenalty - \vskip\intextsep - \ifnum\outputpenalty <-\@Mii \vskip -\parskip\fi - \outputpenalty \z@ - \@inserttrue - \fi - \fi - \if@insert - \else - \@addtotoporbot - \fi - \fi - \fi - \fi - \fi - \fi - \fi - \if@insert - \else - \@resethfps - \@cons\@deferlist\@currbox - \fi -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\if@twocolumn} -% The \cmd\newif\ switch \cmd\if@twocolumn\ is entirely unused. However its access words are invoked by -% \LaTeX's \cmd\document\ procedure, so we de-fang it. -% \begin{macrocode} -\@twocolumnfalse -\let\@twocolumntrue\@twocolumnfalse -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@addmarginpar} -% The procedure \cmd\@addmarginpar\ used to access \cmd\if@twocolumn, but that switch is not reliable; -% the better way is to use \cmd\thepagegrid. We establish a convention for a page-grid-oriented -% procedure, e.g., \cmd\@addmarginpar@one, that emits a boolean, telling this procedure -% whether to set the marginpar on the left or right. -% \begin{macrocode} -\def\@addmarginpar{% - \@next\@marbox\@currlist{% - \@cons\@freelist\@marbox\@cons\@freelist\@currbox - }\@latexbug - \setbox\@marbox\hb@xt@\columnwidth{% - \csname @addmarginpar@\thepagegrid\endcsname{% - \hskip-\marginparsep\hskip-\marginparwidth - \box\@currbox - }{% - \hskip\columnwidth\hskip\marginparsep - \box\@marbox - }% - \hss - }% - \setbox\z@\box\@currbox - \@tempdima\@mparbottom - \advance\@tempdima -\@pageht - \advance\@tempdima\ht\@marbox - \@ifdim{\@tempdima >\z@}{% - \@latex@warning@no@line {Marginpar on page \thepage\space moved}% - }{% - \@tempdima\z@ - }% - \global\@mparbottom\@pageht - \global\advance\@mparbottom\@tempdima - \global\advance\@mparbottom\dp\@marbox - \global\advance\@mparbottom\marginparpush - \advance\@tempdima -\ht\@marbox - \global\setbox \@marbox - \vbox {\vskip \@tempdima - \box \@marbox}% - \global \ht\@marbox \z@ - \global \dp\@marbox \z@ - \kern -\@pagedp - \nointerlineskip - \box\@marbox - \nointerlineskip - \hbox{\vrule \@height\z@ \@width\z@ \@depth\@pagedp}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{environment}{turnpage} -% Any float (viz., \env{figure} or \env{table}) within the scope of this environment -% will be a turnpage float: It will be assumed to occupy an entire page (constitute a float page), -% the width will be \cmd\textheight, the height \cmd\textwidth, and the entire float will be presented -% rotated 90 degrees. -% -% The implementation requires the services of the \cmd\rotatebox\ command, so we supply a dummy definition -% that explains things to the user. -% \begin{macrocode} -\newenvironment{turnpage}{% - \def\width@float{\textheight}% - \def\widthd@float{\textheight}% - \appdef\@endfloatbox{% - \@ifxundefined\@currbox{% - \ltxgrid@warn{Cannot rotate! Not a float}% - }{% - \setbox\@currbox\vbox to\textwidth{\vfil\unvbox\@currbox\vfil}% - \global\setbox\@currbox\vbox{\rotatebox{90}{\box\@currbox}}% - }% - }% -}{% -}% -\def\rotatebox@dummy#1#2{% - \ltxgrid@warn{You must load the graphics or graphicx package in order to use the turnpage environment}% - #2% -}% -% \end{macrocode} -% \changes{4.1b}{2008/08/04}{Use \cs{document@inithook} instead of \cs{AtBeginDocument}} -% \begin{macrocode} -\appdef\document@inithook{% - \@ifxundefined\rotatebox{\let\rotatebox\rotatebox@dummy}{}% -}% -% \end{macrocode} -% \end{environment} -% -% -% \subsection{One-off output routines} -% -% These procedures are executed in lieu of \cmd\the\cmd\output\ when the output penalty has the associated flag value. -% -% \begin{macro}{output@-1073741824} -% The first one-off output routine handles the end of the job, wherein -% \LaTeX\ executes \cmd\@@end, and breaks to the output with a penalty of -% $"40000000 = 2^{32}/4 = 1073741824$. -% We simply discard \cmd\box\cmd\@cclv\ and leave. -% This means that \LaTeX\ is obligated to do \cmd\clearpage\ as part of -% its \enve{document} processing, otherwise material will be lost. -% \begin{macrocode} -\@namedef{output@-1073741824}{% - \deadcycles\z@ -% \end{macrocode} -% \begin{verbatim} -%\showbox\@cclv -% \end{verbatim} -% \begin{macrocode} - \void@cclv -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\save@column@pen} -% The one-off output routine associated with \cmd\penalty\cmd\save@column@pen\ -% will be called within a sequence of three such routines by \cmd\execute@message -% or its companion routine \cmd\execute@message@insert. -% This procedure must save away any the current page and preserve marks. -% \begin{macrocode} -\mathchardef\save@column@pen=10016 -\@namedef{output@-\the\save@column@pen}{\save@column}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@cclv@saved} -% We take over the \cmd\@holdpg\ box register. Hereafter, -% we no longer use the \cmd\@holdpg\ box register, so let the world know. -% This should decisively break packages that assume standard \LaTeX. -% Breaking decisively is preferred to quietly proceeding erroneously. -% \begin{macrocode} -\let \@cclv@saved \@holdpg -\let \@holdpg \@undefined -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\save@column} -% The procedure \cmd\save@column\ does the actual work of saving away the material -% on the page. It is invoked both by \cmd\save@column@pen\ and by \cmd\save@column@insert@pen. -% We save \cmd\box\cmd\@cclv\ and the primitive \cmd\@@topmark. -% \begin{macrocode} -\def\save@column{% - \@ifvoid\@cclv@saved{% - \set@top@firstmark - \global\@topmark@saved\expandafter{\@@topmark}% - }{}% - \global\setbox\@cclv@saved\vbox{% - \@ifvoid\@cclv@saved{}{% - \unvbox\@cclv@saved - \marry@baselines - }% - \unvbox\@cclv - \lose@breaks - \remove@lastbox - }% -}% -\newtoks\@topmark@saved -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\prep@cclv} -% The procedure \cmd\prep@cclv\ is used by message handlers to set up their environment -% to ape that of the usual output routine, with the boxed-up page in \cmd\box\cmd\@cclv. -% Here, we retrieve the material from \cmd\@cclv@saved, where it was saved away by -% the one-off output routine associated with \cmd\save@column@pen. -% \begin{macrocode} -\def\prep@cclv{% - \void@cclv - \setbox\@cclv\box\@cclv@saved - \vbadness\@M -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\save@column@insert@pen} -% The one-off output routine associated with \cmd\penalty\cmd\save@column@insert@pen\ -% is similar to that of \cmd\save@column@pen\ augmented with the processing of insertions. -% It is called by \cmd\execute@message@insert\ (i.e., at a grid change) -% and saves away the current page and preserves marks. -% In addition, it saves away any insertions that fall on the current page. -% As with the natural output routine, it executes in two phases, -% first with \cmd\holdinginserts\ set, then cleared. -% \begin{macrocode} -\mathchardef\save@column@insert@pen=10017 -\@namedef{output@-\the\save@column@insert@pen}{\toggle@insert{\savecolumn@holding}{\savecolumn@moving}}% -% \end{macrocode} -% The procedure \cmd\savecolumn@holding\ is the first phase of saving a column with its inserts. -% This phase must detect and remedy the one circumstance that will confound our efforts to propagate marks. -% It is similar to \cmd\output@holding, except that we have to deal with the protection box, which must -% remain, because the messaging mechanism is being used. -% -% If it appears that we have the pathological ``Big Bad Box'' case at hand, we use the \cmd\dead@cycle@repair@protected\ -% procedure instead of \cmd\dead@cycle\ to do our dead cycle. -% \changes{4.1b}{2008/08/04}{Use \cs{trace@box} instead of \cs{showbox}} -% \begin{macrocode} -\def\savecolumn@holding{% - \@if@exceed@pagegoal{\unvcopy\@cclv\remove@lastbox}{% - \setbox\z@\vbox{\unvcopy\@cclv\remove@lastbox}% - \outputdebug@sw{\trace@box\z@}{}% - \dimen@\ht\@cclv\advance\dimen@-\ht\z@ - \dead@cycle@repair@protected\dimen@ - }{% - \dead@cycle - }% -}% -% \end{macrocode} -% \changes{4.1b}{2008/08/04}{New procedure for showing a box contents, \cs{trace@box}} -% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing} -% The procedure \cmd\save@column@moving\ is the second phase of saving a column with its inserts. -% Now that \cmd\holdinginserts\ is cleared, we can look in the various \cmd\insert\ registers for -% our inserts (at present there is only one, \cmd\footins, along with \cmd\footins@saved). -% if anything is there, we save it away and ask for another cycle (because it may have split). -% -% Note that the message that is about to be executed had better deal properly with the contents of -% the \cmd\footins@saved\ box. -% -% \begin{macrocode} -\def\savecolumn@moving{% - \ltxgrid@info@sw{\class@info{\string\savecolumn@moving}}{}% - \@cclv@nontrivial@sw{% - \save@column - }{% - \void@cclv - }% - \@ifvoid\footins{}{% - \ltxgrid@foot@info@sw{\class@info{\string\savecolumn@moving}\trace@scroll{\showbox\footins@saved\showbox\footins}}{}% -% \end{macrocode} -% Save all away in \cmd\footins@saved. Note that if \cmd\footins\ is void, then \cmd\footins@saved\ remains untouched. -% \begin{macrocode} - \@ifvoid\footins@saved{% - \global\setbox\footins@saved\box\footins - }{% - \global\setbox\footins@saved\vbox\bgroup - \unvbox\footins@saved - \marry@baselines - \unvbox\footins - \egroup - }% - \ltxgrid@foot@info@sw{\trace@box\footins@saved}{}% - \protect@penalty\save@column@insert@pen - }% -}% -\newbox\footins@saved -\newbox\footins@recovered -\newbox\column@recovered -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\save@message@pen} -% The one-off output routine associated with \cmd\penalty\cmd\save@message@pen\ -% saves away the message that has been passed. -% This procedure is penultimate in a sequence of one-off output routine calls; -% earlier ones have saved away the MVL and preserved marks, the last executes the message. -% -% Note that we are passing tokens to \TeX's primitive \cmd\mark\ mechanism, so we must ensure -% that they are not inappropriately expanded. We use the same mechanism for all such cases, -% namely \cmd\let@mark. -% -% Note: we expect that \cmd\box\cmd\@cclv's contents are well known: -% \cmd\topskip, protection box, and a \cmd\mark, the latter containing the message. -% But if we came here via \cmd\penalty 10017, there might be an \cmd\insert\ node present as well, -% because a footnote may have split. -% Because this procedure simply voids out \cmd\box\cmd\@cclv, such material would be lost. -% Perhaps we can repair things by manipulating the \cmd\insert \ mechanism temporarily. -% \begin{macrocode} -\mathchardef\save@message@pen=10018 -\@namedef{output@-\the\save@message@pen}{\save@message}% -\def\save@message{% - \void@cclv -% \end{macrocode} -%FIXME: what if \cmd\box\cmd\@cclv is not empty? -% \begin{macrocode} - \toks@\expandafter{\@@firstmark}% - \expandafter\gdef\expandafter\@message@saved\expandafter{\the\toks@}% - \expandafter\do@@mark\expandafter{\the\@topmark@saved}% -}% -\gdef\@message@saved{}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\execute@message@pen} -% The one-off output routine associated with \cmd\execute@message@pen\ -% simply executes the given message. It is last in a sequence of one-off output routine calls; -% earlier ones have saved all that require saving. -% \begin{macrocode} -\mathchardef\execute@message@pen=10019 -\@namedef{output@-\the\execute@message@pen}{\@message@saved}% -% \end{macrocode} -% \end{macro} -% -% -% \subsection{Output messages} -% -% Message handlers are procedures that execute output messages, tokens that are passed to -% the output routine for execution in an environment appropriate to page makeup. -% -% How it works. We put down three large negative penalties, each of which will be handled by -% the output dispatcher (\emph{not} the natural output routine), each penalty being protected by -% a removable, non-discardable item (i.e., a box). -% Either three or four invocations of one-off output routines are involved per message. -% -% We make the last of the three protection boxes have a depth equal to the value of \cmd\prevdepth\ -% that was current when the procedure is called. This effectively restores \cmd\prevdepth. -% -% In each case, the one-off output routine will remove the extraneous box we have inserted. -% And the second and third one-off routines will simply void \cmd\box\cmd\@cclv, because its contents -% are entirely artificial. -% -% FIXME: not so! If \cmd\holdinginserts\ is cleared, that box may have an insert node; it must be preserved, too. -% -% The first routine saves away the current column contents and remembers the \cmd\topmark\ for later -% use. There is a variant routine that first clears \cmd\holdinginserts, so that the message can -% handle any inserts present in the boxed-up page; this of course entails yet another -% visit to the output routine. -% -% The penultimate routine saves away the tokens transmitted in via the \cmd\@@mark: the argument of -% the macro. These tokens are of course the very thing we wish to execute within the safety -% of the output routine. It also puts down a mark containing the \cmd\topmark\ tokens saved -% by the first routine. By this means, the mark, which we have clobbered, is restored. -% -% The last routine simply executes the given tokens. -% In the course of doing this, it must take care of \cmd\box\cmd\@cclv, either by shipping it out, -% or by \cmd\unvbox ing it onto the MVL. -% -% \begin{macro}{\execute@message} -% The procedure \cmd\execute@message\ simply calls the utility procedure \cmd\@execute@message\ -% with a penalty value for the standard treatment. -% \begin{macrocode} -\def\execute@message{% - \@execute@message\save@column@pen -% \end{macrocode} -% Implicit second argument -% \begin{macrocode} -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\execute@message@insert} -% The procedure \cmd\execute@message@insert\ is like \cmd\execute@message\ in all respects -% except that the penalty value is \cmd\save@column@insert@pen, which arranges for the -% message handler involved to deal with the page's insertions. -% At the same time, we prepare the \cmd\footins\ box so that these insertions can be dealt with. -% -% Note: -% If more insertions are added to \LaTeX\ (presumably via \cmd\newinsert), then they -% must be dealt with in a way entirely analogous to \cmd\footins. -% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing} -% \begin{macrocode} -\def\execute@message@insert#1{% - \@execute@message\save@column@insert@pen{% - \setbox \footins \box \footins@saved - \ltxgrid@foot@info@sw{\class@info{\string\execute@message@insert}\trace@box\footins}{}% - #1% - }% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@execute@message} -% The utility procedure \cmd\@execute@message\ is called by \cmd\execute@message\ and \cmd\execute@message@insert. -% We prepare by creating a \cmd\vbox\ containing all the needed nodes and proceed by simply -% \cmd\unvbox ing that box onto the MVL. -% We ensure that \cmd\box\cmd\@cclv\ is properly set up for the output message handler -% by always inserting \cmd\prep@cclv\ in advance of the argument. -% -% Note that each one-off output routine is invoked effectively the same as -% \cmd\protect@penalty, except that the second invocation involves an additional -% \cmd\mark\ node, and the third a specially prepared protection box. -% -% Note also that \TeX's primitive \cmd\mark\ is called here without any expansion protection. -% This is the only place where it is called that way, but it's OK because those tokens -% have have been pre-expanded by procedures that call \cmd\execute@message. -% FIXME: all procedures calling \cmd\execute@message\ must pre-expand their tokens! -% \begin{macrocode} -\long\def\@execute@message#1#2{% - \begingroup - \dimen@\prevdepth\@ifdim{\dimen@<\z@}{\dimen@\z@}{}% - \setbox\z@\vbox{% - \protect@penalty#1% - \protection@box - \toks@{\prep@cclv#2}% - \@@mark{\the\toks@}% - \penalty-\save@message@pen -% \end{macrocode} -%\begin{verbatim} -% \hbox{\vrule\@height\z@\@width\z@\@depth\dimen@}% -%\end{verbatim} -% \begin{macrocode} - \setbox\z@\null\dp\z@\dimen@\ht\z@-\dimen@ - \nointerlineskip\box\z@ - \penalty-\execute@message@pen - }\unvbox\z@ - \endgroup -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\do@output@cclv} -% The procedure \cmd\do@output@cclv\ provides access to message handlers at their simplest. -% The message will execute in the usual environment of the output routine, with -% the boxed-up page in \cmd\box\cmd\@cclv, and we assume that \cmd\holdinginserts\ remains set. -% This procedure must be invoked within main vertical mode; -% it is the obligation of the macro writer to ensure that this is the case. -% \begin{macrocode} -\def\do@output@cclv{\execute@message}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\do@output@MVL} -% The procedure \cmd\do@output@MVL, like \cmd\do@output@cclv, is an interface for messages, -% but provides two additional services: the command may also be invoked in horizontal mode, and -% the message handler will execute with the MVL unboxed. -% \begin{macrocode} -\def\do@output@MVL#1{% - \@ifvmode{% - \begingroup\execute@message{\unvbox\@cclv#1}\endgroup - }{% - \@ifhmode{% - \vadjust{\execute@message{\unvbox\@cclv#1}}% - }{% - \@latexerr{\string\do@output@MVL\space cannot be executed in this mode!}\@eha - }% - }% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\lose@breaks} -% The purpose of this procedure is to get rid of all the extraneous -% \cmd\penalty\cmd\@M\ nodes that tend to build up in the MVL. -% \begin{macrocode} -\def\lose@breaks{% - \loopwhile{% - \count@\lastpenalty - \@ifnum{\count@=\@M}{% -% \end{macrocode} -% Note: 10000 is a TeX magic number! -% \begin{macrocode} - \unpenalty\true@sw - }{% - \false@sw - }% - }% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\removestuff} -% \cmd\removestuff\ is a document-level command that removes the bottom skip glue item -% from the MVL. -% \begin{macrocode} -\def\removestuff{\do@output@MVL{\unskip\unpenalty}}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\removephantombox} -% The procedure \cmd\removephantombox\ is a special-purpose message handler exclusively for -% preventing incorrect spacing above display math. It must be issued in -% horizontal mode within the phantom paragraph generated when display math starts up in -% vertical mode. -% \begin{macrocode} -\def\removephantombox{% - \vadjust{% - \execute@message{% - \unvbox\@cclv - \remove@lastbox - \unskip - \unskip - \unpenalty - \penalty\predisplaypenalty - \vskip\abovedisplayskip - }% - }% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\addstuff} -% \cmd\addstuff\ is a document-level command that adds penalty, glue, or both to the -% MVL. The penalty and glue items are rearranged so that all penalties nodes precede all the glue nodes, -% which is the canonical arrangement. -% \begin{macrocode} -\def\addstuff#1#2{\edef\@tempa{\noexpand\do@output@MVL{\noexpand\@addstuff{#1}{#2}}}\@tempa}% -\def\@addstuff#1#2{% - \skip@\lastskip\unskip - \count@\lastpenalty\unpenalty - \@if@empty{#1}{}{\penalty#1\relax}% - \@ifnum{\count@=\z@}{}{\penalty\count@}% - \vskip\skip@ - \@if@empty{#2}{}{\vskip#2\relax}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\replacestuff} -% \cmd\replacestuff\ is a document-level command similar to \cmd\addstuff; -% but it replaces penalty, glue, or both in the MVL. -% The penalty and glue items are rearranged so that all penalties nodes precede all the glue nodes, -% which is the canonical arrangement. -% \begin{macrocode} -\def\replacestuff#1#2{\edef\@tempa{\noexpand\do@output@MVL{\noexpand\@replacestuff{#1}{#2}}}\@tempa}% -\def\@replacestuff#1#2{% - \skip@\lastskip\unskip - \count@\lastpenalty\unpenalty - \@if@empty{#1}{}{% - \@ifnum{\count@>\@M}{}{% - \@ifnum{\count@=\z@}{\count@=#1\relax}{% - \@ifnum{\count@<#1\relax}{}{% - \count@=#1\relax - }% - }% - }% - }% - \@ifnum{\count@=\z@}{}{\penalty\count@}% - \@if@empty{#2}{}{% - \@tempskipa#2\relax - \@ifdim{\z@>\@tempskipa}{% - \advance\skip@-\@tempskipa - }{% - \@ifdim{\skip@>\@tempskipa}{}{% - \skip@\@tempskipa - }% - }% - }% - \vskip\skip@ -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\move@insertions} -% \begin{macro}{\hold@insertions} -% In order to avoid bolluxing up \cmd\insert\ registers by our one-off -% output routines, we set \cmd\holdinginserts\ to zero by default and only -% clear it (briefly) while we handle cases where we want inserts to show up. -% \begin{macrocode} -\def\move@insertions{\global\holdinginserts\z@}% -\def\hold@insertions{\global\holdinginserts\@ne}% -\hold@insertions -\def\toggle@insert#1#2{% - \@ifnum{\holdinginserts>\z@}{\move@insertions#1}{\hold@insertions#2}% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% -% \subsection{Messages to alter the page grid}% -% -% Here is the implementation of the grid-switching procedures. -% We perform two checks when changing the page grid; first to ensure that -% the target page grid is known (defensive programming), second to ensure that -% the switch is a non-trivial one. The latter check must be performed within -% the safety of the output routine, so requires using an output message. -% Thus, a grid change requires two messages, for a total of six visits to the output routine. -% -% \begin{macro}{\do@columngrid} -% Utility procedure \cmd\do@columngrid\ changes the page grid. -% Note that this command forces an end to the current paragraph. This is necessary, because -% a page grid change makes no sense unless we can alter the \cmd\hsize\ before commencing to -% typeset the following paragraph. So the command should never be executed in horizontal mode -% anyway. -% \begin{macrocode} -\def\do@columngrid#1#2{% - \par - \expandafter\let\expandafter\@tempa\csname open@column@#1\endcsname - \@ifx{\relax\@tempa}{% - \ltxgrid@warn{Unknown page grid #1. No action taken}% - }{% - \do@output@MVL{\start@column{#1}{#2}}% - }% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\start@column} -% Procedure \cmd\start@column\ lays down the interrupts to switch the page grid. -% If the change to the page grid would have been trivial, it bails out. -% It seems a reasonable tradeoff of processing versus security: once we commit -% to changing the page grid, we clear \cmd\holdinginserts, so there is no turning back. -% -% Note that the second argument to the macro allows us to pass an argument to the -% page grid that is starting up. This can be handy, because a single procedure can -% handle multiple page grids, differing only by the value of a parameter. -% -% FIXME: this means that you cannot switch between mlt page grids in a single step. -% But do we want to do this, at all, at all? -% \begin{macrocode} -\def\start@column#1#2{% - \def\@tempa{#1}\@ifx{\@tempa\thepagegrid}{% - \ltxgrid@info{Already in page grid \thepagegrid. No action taken}% - }{% - \expandafter\execute@message@insert - \expandafter{% - \csname shut@column@\thepagegrid\expandafter\endcsname - \csname open@column@#1\endcsname{#2}% - \set@vsize - }% - }% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\thepagegrid} -% The macro \cmd\thepagegrid\ tracks what kind of page grid we are in. -% -% Note: Access \cmd\thepagegrid\ only within the safety of the output routine. -% -% Warning: The page grid should be changed only within the safety of the output routine. -% People who write multicol page grid mechanisms appear not to understand the matter, so they -% should particularly heed this warning. Think about it: obviously Lamport did so, which is why -% his \cmd\twocolumn\ command forced a pagebreak, which is limiting, but safe. -% \begin{macrocode} -\def\thepagegrid{one}% -% \end{macrocode} -% \end{macro} -% -% -% \subsection{Application Note: implementing a page grid} -% -% If you want to create a new page grid for \LaTeX, -% you must define five procedures with specific names: -% \cmd\open@column@ name, \cmd\shut@column@ name, \cmd\end@column@ name, -% \cmd\output@column@ name, and \cmd\@addmarginpar@ name, where ``name'' is the -% name of your page grid. -% -% The procedure \cmd\open@column@ name starts the new page grid. It should define \cmd\thepagegrid, -% deal with \cmd\box\cmd\pagesofar\ and \cmd\box\cmd\footsofar\ (perhaps by leaving them alone), -% and it should set the values of \LaTeX's page layout parameters for the column size and height. -% -% The procedure \cmd\shut@column@ name should expect to be called with \cmd\holdinginserts\ -% cleared (it can assume that \cmd\holdinginserts\ will automatically be restored). -% It should properly deal with insertions (like footnotes); calling \cmd\@makecolumn\ -% with an argument of \cmd\false@sw\ will do this. -% It should know that the page grid is being terminated -% in the middle of a page, so it should make arrangements to carry the footnotes down to the -% bottom of the column or page, and it should possibly salt away the material for later -% incorporation into the page. The box registers \cmd\footsofar\ and \cmd\pagesofar\ are customarily used -% for this purpose. -% -% The procedure \cmd\end@column@ name should kick out a possibly short page containing all the -% floats committed to the page. It will be invoked during \cmd\clearpage\ processing. -% After that, it should \cmd\unvbox\cmd\@cclv. -% -% The procedure \cmd\output@column@ name should ship out or commit the current \cmd\@outputbox. -% In a one-column layout, you ship out; in a multicolumn layout, you commit the box as the contents -% of a particular column, and if that column is the last, you ship out. -% -% The procedure \cmd\@addmarginpar@ name should return a boolean (either \cmd\true@sw\ or \cmd\false@sw\ or an equivalent) -% to tell the marginpar mechanism to place the marginal material to the right or left, respectively. -% -% You can use the existing page grids ``one'' and ``mlt'' as a point of departure for creating others. -% The former can be the basis for, say, a single-column page grid with a side column. -% -% \begin{macro}{\pagesofar} -% \begin{macro}{\footsofar} -% The box register \cmd\pagesofar\ holds the portion of the (full-width) page that is already composed into columns. -% This, plus the finished columns, each with its floats, plus \cmd\box255 constitute the full galley. -% -% The box register \cmd\footsofar\ holds all of the footnotes associated with \cmd\pagesofar. -% \begin{macrocode} -\newbox\pagesofar -\newbox\footsofar -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\combine@foot@inserts} -% \changes{4.1n}{2010/01/02}{(AO, 571) calling sequence of \cs{combine@foot@inserts} and \cs{grid@column} to expose box registers; that of \cs{append@column@} its column counters}% -% \changes{4.1n}{2010/01/02}{(AO, 571) coding convention: use \cs{bgroup}, \cs{egroup} (instead of braces) when a box is being built}% -% The procedure \cmd\combine@foot@inserts\ is for the purpose of merging -% the recently contributed footnotes (usually \cmd\box\cmd\footins) -% with those saved from earlier on the page (usually \cmd\box\cmd\footsofar). -% -% It is employed in a number of circumstances. -% -% \cmd\@makecolumn (when its argument is \cmd\false@sw): -% we are not shipping out, so we need to salt away any footnotes there may be. -% -% \cmd\shut@column@one: we are leaving the one-column page grid, so recover the footnotes from that material -% and combine them with those of \cmd\pagesofar. -% -% \expandafter\cmd\csname balance@2\endcsname: two columns of type have been balanced, so now balance the footnotes. -% The \cmd\combine@foot@inserts\ procedure is first used to gather footnotes from the columns balanced with those of \cmd\pagesofar. -% -% Bug 571 note: if balancing a two-column page grid, and there had been footnotes in the \cmd\pagesofar, -% those footnotes will have been balanced into a page-width box, \cmd\box\cmd\footsofar. -% We need to now re-cast them into a single, column-width galley, and only then -% combine them with those in \cmd\box\cmd\footins. -% -% \begin{macrocode} -\def\combine@foot@inserts#1#2{% - \ltxgrid@info@sw{\class@info{\string\combine@foot@inserts\string#1\string#2}}{}% - \@ifvoid#1{% - \ltxgrid@foot@info@sw{\trace@box#2}{}\global\setbox#1\box#2% - }{% - \global\setbox#1\vbox\bgroup - \ltxgrid@foot@info@sw{\trace@box#1}{}\unvbox#1% - \@ifvoid#2{}{% - \marry@baselines - \ltxgrid@foot@info@sw{\trace@box#2}{}\unvbox#2% - }% - \egroup - }% - \ltxgrid@foot@info@sw{\trace@scroll{\showbox#1\showbox#2}}{}% -}% -% \end{macrocode} -% \end{macro} -% -% -% \subsubsection{One-column page grid} -% -% \begin{macro}{\onecolumngrid} -% \begin{macro}{\open@column@one} -% \begin{macro}{\shut@column@one} -% \begin{macro}{\float@column@one} -% \begin{macro}{\end@column@one} -% \begin{macro}{\output@column@one} -% \begin{macro}{\@addmarginpar@one} -% Here are all the procedures necessary for the standard page grid named ``one'': -% a single column layout. It is, of course, \LaTeX's familiar \cmd\onecolumn\ layout. -% We begin with the procedure exposed to the style writer. -% This is, however, not a \LaTeX\ command; users should not change the page grid. -% \begin{macrocode} -\newcommand\onecolumngrid{\do@columngrid{one}{\@ne}}% -% \end{macrocode} -% -% Note that a document class that issues the command \cmd\onecolumn\ will break. This includes -% \LaTeX's standard classes.dtx-based classes: if your class descends from one of these, you -% must expunge it of all such commands. -% \begin{macrocode} -\let\onecolumn\@undefined -% \end{macrocode} -% -% The procedure \cmd\open@column@one\ takes advantage of the special nature of the one-column -% page grid to deal with \cmd\box\cmd\pagesofar, therefore it must also reset \cmd\@colroom. -% \changes{4.1b}{2008/08/04}{Change \cs{set@colroom} to \cs{set@colht}} -% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing} -% \begin{macrocode} -\def\open@column@one#1{% - \ltxgrid@info@sw{\class@info{\string\open@column@one\string#1}}{}% -% \end{macrocode} -% Throw the \cmd\pagesofar\ back onto the Main Vertical List. -% At this point, we must also \cmd\insert\ the footnotes back into the MVL. -% \changes{4.1n}{2010/01/02}{(AO, 571) coding convention: use \cs{bgroup}, \cs{egroup} (instead of braces) when a box is being built}% -% \begin{macrocode} - \unvbox\pagesofar - \@ifvoid{\footsofar}{}{% - \insert\footins\bgroup\unvbox\footsofar\egroup - \penalty\z@ - }% -% \end{macrocode} -% Record which page grid we are using. Then calculate the set width (\cmd\hsize) and the goal height (\cmd\vsize). -% -% Klootch: we set the \cmd\count\cmd\footins\ to a magic number. This is only correct in the case of a two-column document. -% \begin{macrocode} - \gdef\thepagegrid{one}% - \global\pagegrid@col#1% - \global\pagegrid@cur\@ne - \global\count\footins\@m - \global\divide\count\footins\tw@ - \set@column@hsize\pagegrid@col - \set@colht -}% -% \end{macrocode} -% -% The procedure \cmd\shut@column@one\ saves away the one-column material into the box register \cmd\pagesofar. -% Because it is called from a message handler, we are assured that marks are properly taken care of. -% -% This instance of \cmd\@makecolumn\ is building a column for saving into \cmd\pagesofar. -% \changes{4.1b}{2008/08/04}{Change \cs{@makecol} to \cs{@makecolumn} with argument} -% \changes{4.1b}{2008/08/04}{Change \cs{set@colroom} to \cs{set@colht}} -% \changes{4.1f}{2009/07/15}{(AO, 519) Preserve footnotes that are in \cs{footsofar} across a page grid change} -% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing} -% \changes{4.1n}{2010/01/02}{(AO, 571) calling sequence of \cs{combine@foot@inserts} and \cs{grid@column} to expose box registers; that of \cs{append@column@} its column counters}% -% We recover the footnotes into \cmd\footsofar\ (globally) and the column into \cmd\pagesofar\ (also globally), voiding \cmd\@outputbox\ by side effect. -% \begin{macrocode} -\def\shut@column@one{% - \ltxgrid@info@sw{\class@info{\string\shut@column@one}}{}% - \@makecolumn\false@sw -% \end{macrocode} -% Split text portion of \cmd\@outputbox\ into \cmd\pagesofar, -% and add its footnote portion to \cmd\footsofar. -% Then void out \cmd\@outputbox. -% \begin{macrocode} - \global\setbox\pagesofar\vbox\bgroup - \recover@column\@outputbox\footsofar\column@recovered\footins@recovered - \egroup - \begingroup\setbox\z@\box\@outputbox\endgroup -% \end{macrocode} -% FIXME: is \cmd\combine@foot@inserts\ needed? -% Also: if this procedure is immediately followed by \cmd\open@column@ \texttt{grid}, then \cmd\set@colht\ will be unneeded. -% \begin{macrocode} - \combine@foot@inserts\footsofar\footins - \set@colht -}% -% \end{macrocode} -% -%FIXME: the first line of a footnote should have an up-strut, and the last line a down-strut, so that they can marry baselines. -% The latter is the case; how about the former? -% -% The procedure \cmd\float@column@one\ takes care of a float column that has been built by -% \cmd\@tryfcolumn, in the single-column page grid. -% -% This instance of \cmd\@makecolumn\ is followed by \cmd\@outputpage: it is building -% a column for \cmd\shipout, rather than for saving into \cmd\pagesofar. -% \changes{4.1b}{2008/08/04}{Change \cs{@makecol} to \cs{@makecolumn} with argument} -% \begin{macrocode} -\def\float@column@one{% - \@makecolumn\true@sw - \@outputpage -}% -% \end{macrocode} -% -% The procedure \cmd\end@column@one\ is executed at the end of \cmd\clearpage\ processing, -% if we were in a one-column page grid, once all permissive float pages have been shipped out. -% At this point, one could perhaps -% assume that nothing more need be done, but let us anyway test for committed floats and force a shipout. -% -% FIXME: this procedure does the same as \cmd\end@column@mlt -% (except for the test of \cmd\@ifx@empty\cmd\@dbltoplist): -% the two could almost be the same procedure. -% -% I have changed this procedure to avoid the testing it once did: it simply puts down interrupts, -% upon which it relies to correctly do what \cmd\clearpage\ requires. -% \begin{macrocode} -\def\end@column@one{% - \unvbox\@cclv\remove@lastbox - \protect@penalty\do@newpage@pen -}% -% \end{macrocode} -% -% The procedure \cmd\output@column@one\ is dispatched from the output routine when -% we have completed a page (that is, a column in a one-column page grid); -% it ships out the page using the \cmd\@outputpage. -% It will be followed up with an output routine message to prepare a new column. -% -% Query: by what mechanism do the footnotes get placed onto such a page? -% \begin{macrocode} -\def\output@column@one{% - \@outputpage -}% -% \end{macrocode} -% -% The following procedure determines which side of the page a marginpar will appear. -% It reproduces the behavior of standard \LaTeX. -% \begin{macrocode} -\def\@addmarginpar@one{% - \@if@sw\if@mparswitch\fi{% - \@ifodd\c@page{\false@sw}{\true@sw}% - }{\false@sw}{% - \@if@sw\if@reversemargin\fi{\false@sw}{\true@sw}% - }{% - \@if@sw\if@reversemargin\fi{\true@sw}{\false@sw}% - }% -}% -% \end{macrocode} -% -% The following procedure yields a Boolean value; it determines whether a float in the deferred queue -% is appropriate for placing. In the one-column grid, all floats are so. -% \begin{macrocode} -\def\@floatselect@sw@one#1{\true@sw}% -% \end{macrocode} -% -% \begin{macrocode} -\def\onecolumngrid@push{% - \do@output@MVL{% - \@ifnum{\pagegrid@col=\@ne}{% - \global\let\restorecolumngrid\@empty - }{% - \xdef\restorecolumngrid{% - \noexpand\start@column{\thepagegrid}{\the\pagegrid@col}% - }% - \start@column{one}{\@ne}% - }% - }% -}% -\def\onecolumngrid@pop{% - \do@output@MVL{\restorecolumngrid}% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% -% \subsubsection{Two-column page grid} -% -% \begin{macro}{\twocolumngrid} -% \begin{macro}{\open@column@mlt} -% \begin{macro}{\shut@column@mlt} -% \begin{macro}{\end@column@mlt} -% \begin{macro}{\output@column@mlt} -% \begin{macro}{\@addmarginpar@mlt} -% \begin{macro}{\set@footnotewidth@mlt} -% \begin{macro}{\set@footnotewidth@two} -% \begin{macro}{\compose@footnotes@two} -% Here are all the procedures necessary for the standard page grid named ``mlt'': -% the multi-column page grid. With an argument of "2", it is, -% of course, \LaTeX's familiar \cmd\twocolumn\ layout. -% -% We start with the procedure to switch to the two-column page grid. -% \begin{macrocode} -\newcommand\twocolumngrid{\do@columngrid{mlt}{\tw@}}% -% \end{macrocode} -% -% The corresponding command of \LaTeX\ is obsolete. -% \begin{macrocode} -\let\twocolumn\@undefined -% \end{macrocode} -% -% Of course, \cmd\@topnewpage\ is also obsolete. Just do -%\begin{quote} -% \cmd\clearpage\cmd\onecolumngrid<vertical mode material>\cmd\twocolumngrid. -%\end{quote} -% \begin{macrocode} -\let\@topnewpage\@undefined -% \end{macrocode} -% -% If your document class descends from one of \LaTeX's standard classes.dtx-derived -% classes, it will break. You must expunge from it all such commands. -% -% \changes{4.1b}{2008/08/04}{Change \cs{set@colroom} to \cs{set@colht}} -% -% Bug 571 note: it is not enough to have the \cmd\pagesofar, we must also deal with the \cmd\footsofar. -% At this juncture, we should treat the case where the document has an essentially two-column page grid, -% with occasional excursions into the one-column grid. -% If a footnote is set within the latter grid, its set width should be that of the two-column grid. -% -% When a page is shipped out, if we are currently in a one-column grid, we will compose the footnotes onto the page -% in the form of balanced columns. This is only one way to handle footnotes: \classname{multicol} -% appears to set footnotes on the full text width. -% \begin{macrocode} -\def\open@column@mlt#1{% - \ltxgrid@info@sw{\class@info{\string\open@column@mlt\string#1}}{}% -% \end{macrocode} -% At this point, we must \cmd\insert\ the footnotes back into the Main Vertical List. -% \changes{4.1n}{2010/01/02}{(AO, 571) coding convention: use \cs{bgroup}, \cs{egroup} (instead of braces) when a box is being built}% -% \begin{macrocode} - \@ifvoid{\footsofar}{}{% - \insert\footins\bgroup\unvbox\footsofar\egroup - }% -% \end{macrocode} -% Record which page grid we are using. Then calculate the set width (\cmd\hsize) and the goal height (\cmd\vsize). -% -% Klootch: we set the \cmd\count\cmd\footins\ to a magic number. This value is valid whether footnotes are being -% set on the column width or the full text width. -% \begin{macrocode} - \gdef\thepagegrid{mlt}% - \global\pagegrid@col#1% - \global\pagegrid@cur\@ne - \global\count\footins\@m - \set@column@hsize\pagegrid@col - \set@colht -}% -% \end{macrocode} -% -% The procedure \cmd\shut@column@mlt\ ends the current column, balances the columns, and -% salts away all in \cmd\pagesofar. Because it is called in a message handler, -% we are assured that marks are handled properly. -% Attention: because this procedure balances columns, all footnotes are -% held aside in \cmd\footsofar\ for placement at the bottom of the page. -% -% Bug note: the last macro executed by this procedure is \cmd\set@colht, -% but had been erroneously \cmd\set@colroom. -% I now believe that the latter should be changed pretty much everywhere to the former. -% -% This instance of \cmd\@makecolumn\ is building material for \cmd\pagesofar, rather than -% for \cmd\shipout. -% \changes{4.1b}{2008/08/04}{Change \cs{@makecol} to \cs{@makecolumn} with argument} -% \changes{4.1b}{2008/08/04}{Change \cs{@combinepage} to \cs{@combinepage} with argument} -% \changes{4.1b}{2008/08/04}{Change \cs{set@colroom} to \cs{set@colht}} -% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing} -% \changes{4.1n}{2010/01/02}{(AO, 571) calling sequence of \cs{combine@foot@inserts} and \cs{grid@column} to expose box registers; that of \cs{append@column@} its column counters}% -% \begin{macrocode} -\def\shut@column@mlt{% - \ltxgrid@info@sw{\class@info{\string\shut@column@mlt}}{}% - \@cclv@nontrivial@sw{% - \@makecolumn\false@sw - \@ifnum{\pagegrid@cur<\pagegrid@col}{% - \expandafter\global\expandafter\setbox\csname col@\the\pagegrid@cur\endcsname\box\@outputbox - \global\advance\pagegrid@cur\@ne - }{}% - }{% - \void@cclv - }% - \@ifnum{\pagegrid@cur>\@ne}{% - \csname balance@\the\pagegrid@col\endcsname - \grid@column\@outputbox{}% - \@combinepage\false@sw - \@combinedblfloats - \global\setbox\pagesofar\box\@outputbox - \show@pagesofar@size - }{}% - \set@colht -}% -% \end{macrocode} -% -% The procedure \cmd\float@column@mlt\ takes care of a float page that has been built by \cmd\@tryfcolumn, -% in the multi-column page grid. It is coincidentally identical to what happens in -% \cmd\do@startpage\ when a page needs to be shipped out. -% \changes{4.1b}{2008/08/04}{New procedure \cs{@output@combined@page}} -% \begin{macrocode} -\def\float@column@mlt{% - \@output@combined@page -}% -% \end{macrocode} -% -% The procedure \cmd\end@column@mlt\ is executed at the end of \cmd\clearpage\ processing, -% if we were in a multi-column page grid, once all permissive float pages have been shipped out. -% If no floats are committed and if no columns are yet filled, we have nothing to do. -% Otherwise, we kick out a column and try again. -% -% Note that in our code to kick out a column, we must deal properly with the case where the column -% is trivial: it will have nothing but \cmd\topskip\ glue plus a protection box. We substitute an ordinary -% \cmd\null\ for the protection box. -% -% \begin{macrocode} -\def\end@column@mlt{% - \@ifx@empty\@toplist{% - \@ifx@empty\@botlist{% - \@ifx@empty\@dbltoplist{% - \@ifx@empty\@deferlist{% - \@ifnum{\pagegrid@cur=\@ne}{% - \false@sw - }{% - \true@sw - }% - }{% - \true@sw - }% - }{% - \true@sw - }% - }{% - \true@sw - }% - }{% - \true@sw - }% - % true = kick out a column and try again - {% - \@cclv@nontrivial@sw{% - \unvbox\@cclv\remove@lastbox - }{% - \unvbox\@cclv\remove@lastbox\unskip\null - }% - \protect@penalty\do@newpage@pen - \protect@penalty\do@endpage@pen - }{% - \unvbox\@cclv\remove@lastbox - }% -}% -% \end{macrocode} -% -% The procedure \cmd\output@column@mlt (cf. \cmd\output@column@one) -% is dispatched from the output routine when -% we have completed a column in a multi-column page grid). -% (It replaces the \cmd\@outputdblcol\ of standard \LaTeX.) -% If a complete set of columns is at hand, it ships out the page and -% lays down an interrupt for \cmd\do@startpage@pen, which will commit the -% full-page-width floats to the next page. -% Like \cmd\output@column@mlt, this is followed by -% an output routine message to prepare a new column. -% -% If a page needs to be shipped out, it uses the same mechanism as \cmd\do@startpage. -% \changes{4.1b}{2008/08/04}{New procedure \cs{@output@combined@page}} -% \changes{4.1n}{2010/01/02}{(AO, 571) calling sequence of \cs{combine@foot@inserts} and \cs{grid@column} to expose box registers; that of \cs{append@column@} its column counters}% -% \begin{macrocode} -\def\output@column@mlt{% - \@ifnum{\pagegrid@cur<\pagegrid@col}{% - \expandafter\global\expandafter\setbox\csname col@\the\pagegrid@cur\endcsname\box\@outputbox - \global\advance\pagegrid@cur\@ne - }{% - \set@adj@colht\dimen@ - \grid@column\@outputbox{}% - \@output@combined@page - }% -}% -% \end{macrocode} -% The procedure \cmd\output@column@mlt\ obsoletes \LaTeX's \cmd\@outputdblcol -% \begin{macrocode} -\let\@outputdblcol\@undefined -% \end{macrocode} -% -% The following procedure yields a Boolean value; it determines whether a float in the deferred queue -% is appropriate for placement in the column. In the multi-column grid, only those narrower than \cmd\textwidth\ are so. -% \begin{macrocode} -\def\@floatselect@sw@mlt#1{\@if@notdblfloat{#1}}% -% \end{macrocode} -% -% The following procedure determines which side of the page a marginpar will appear. -% It reproduces the behavior of standard \LaTeX. -% \begin{macrocode} -\def\@addmarginpar@mlt{% emits a boolean - \@ifnum{\pagegrid@cur=\@ne}% -}% -% \end{macrocode} -% -% \cmd\set@footnotewidth@one\ sets the width of type within footnotes to span the full text width; -% \cmd\set@footnotewidth@two\ to span a single column of the two-column grid, and -% more generally \cmd\set@footnotewidth@mlt\ for a multi-column page grid. -% \begin{macrocode} -\def\set@footnotewidth@one{% - \hsize\columnwidth - \linewidth\hsize -}% -\def\set@footnotewidth@two{\set@footnotewidth@mlt\tw@}% -\def\set@footnotewidth@mlt#1{% - \hsize\textwidth - \advance\hsize\columnsep - \divide\hsize#1% - \advance\hsize-\columnsep - \linewidth\hsize -}% -% \end{macrocode} -% -% \cmd\compose@footnotes\ is the procedure for arranging the footnotes for -% placement at the bottom of the page or column. -% In the former case, the material will be shipped out; in the latter, we must allow -% the column to possibly be balanced later on. -% -% \cmd\compose@footnotes@one\ is a no-op, because the footnotes require no rearrangement. -% In a scheme where footnotes are set on the full text width, this would be the procedure called. -% -% \cmd\compose@footnotes@two\ implements the case where a two-column document has been interrupted -% with full-page-width text (e.g., the widetext environment or the end of the document), -% and a natural page break appears. -% -% In either case, we assume that argument \verb+#1+ is an \cmd\insert\ register and must be assigned globally, -% so that when it is accessed with \cmd\box\ or \cmd\unvbox, it will be voided globally as well. -% -% To extend this scheme to a three-column page grid \cmd\compose@footnotes@thr@@\ would be created: -% it would balance the saved up footnotes into three columns. -% -% \begin{macrocode} -\def\compose@footnotes@one#1{% - \ltxgrid@foot@info@sw{\class@info{\string\compose@footnotes@one\string#1}\trace@box#1}{}% -}% -\let\compose@footnotes\compose@footnotes@one -\def\compose@footnotes@two#1{% - \ltxgrid@foot@info@sw{\class@info{\string\compose@footnotes@two\string#1}\trace@box#1}{}% - \setbox\z@\box\@tempboxa - \let\recover@column\recover@column@null - \let\marry@baselines\@empty - \balance@two#1\@tempboxa - \global\setbox#1\hbox to\textwidth{\box#1\hfil\box\@tempboxa}% - \ltxgrid@foot@info@sw{\trace@box#1}{}% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% -% \subsubsection{Page grid utility procedures} -% -% \begin{macro}{\pagegrid@cur} -% \begin{macro}{\pagegrid@col} -% \begin{macro}{\pagegrid@init} -% We take over \LaTeX's \cmd\col@number, and \cmd\@leftcolumn, which are obsolete (\cmd\@holdpg\ could also be taken over). -% We create two counters to hold the columns in the page grid and the current column within. -% We also create the first of a set of box registers to hold the committted columns. -% \begin{macrocode} -\let\pagegrid@cur\col@number -\let\col@number\@undefined -\newcount\pagegrid@col -\pagegrid@cur\@ne -\expandafter\let\csname col@\the\pagegrid@cur\endcsname\@leftcolumn -\let\@leftcolumn\@undefined -% \end{macrocode} -% -% The default is for maximum two columns. -% If your class will require more columns, assign that number to \cmd\pagegrid@col\ -% before \envb{document} time. -% \begin{macrocode} -\pagegrid@col\tw@ -% \end{macrocode} -% -% The procedure \cmd\pagegrid@init\ is a loop, exercising \cmd\newbox\ sufficiently to create the -% boxes for holding the columns in the page grid; these have names like \expandafter\cmd\csname col@1\endcsname, etc. -% \begin{macrocode} -\def\pagegrid@init{% - \advance\pagegrid@cur\@ne - \@ifnum{\pagegrid@cur<\pagegrid@col}{% - \csname newbox\expandafter\endcsname\csname col@\the\pagegrid@cur\endcsname - \pagegrid@init - }{% - }% -}% -\appdef\class@documenthook{% - \pagegrid@init -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\grid@column} -% \changes{4.1n}{2010/01/02}{(AO, 571) calling sequence of \cs{combine@foot@inserts} and \cs{grid@column} to expose box registers; that of \cs{append@column@} its column counters}% -% The procedure \cmd\grid@column\ knows how to lay up the columns in a multi-column page grid. -% It uses utility procedures \cmd\append@column@\ and \cmd\box@column. -% -% The first argument is the box register to create, usually \cmd\@outputbox, and provides both input and output. -% The second argument a dimension, allowing us to strut down the depth of the box we create. -% -% \begin{macrocode} -\def\grid@column#1#2{% - \ltxgrid@info@sw{\class@info{\string\grid@column\string#1}}{}% - \global\setbox#1\vbox\bgroup - \hb@xt@\textwidth\bgroup - \vrule\@height\z@\@width\z@\@if@empty{#2}{}{\@depth#2}% - \pagegrid@cur\@ne - \@ifnum{\pagegrid@cur<\pagegrid@col}{\loopwhile{\append@column@\pagegrid@cur\pagegrid@col}}{}% - \box@column#1% - \egroup -% \end{macrocode} -% FIXME: page depth! -% \begin{macrocode} - \vskip\z@skip - \egroup -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\append@column@} -% \begin{macro}{\box@column} -% \begin{macro}{\marry@baselines} -% The procedure \cmd\append@column@\ appends columns for \cmd\grid@column, -% \cmd\box@column\ builds the columns for \cmd\append@column@, -% and \cmd\marry@baselines\ pastes vertical things back together. -% \changes{4.0a}{2001/06/18}{Introduce \cs{marry@height} } -% -% Note that \cmd\box@column\ makes an attempt to prevent excessive \cmd\topskip\ -% or \cmd\baselineskip\ glue -% from being applied by \TeX\ when \cmd\@outputbox\ is contributed to the MVL. -% If this is not done, it is possible to get into an infinite loop in the corner case, -% wherein the page grid is changed to one column and the balanced-up columns are -% already sufficient to fill the page. -% -% Note (AO 0920): I have changed the dimension involved with \cmd\box@column\ from -% \cmd\vsize\ to \cmd\textheight, because the former is certainly not the correct value -% to use: it will change if floats have been placed in the last column of the page. -% I believe \cmd\textheight\ is the correct parameter to use here. -% -% A REVTeX4 user, Sergey Strelkov (strelkov@maik.rssi.ru), wants the option -% of ragged-bottom columns. Implementing this feature properly means reboxing the -% columns to their natural height only if \cmd\raggedcolumn@sw\ is true. -% Otherwise, they get reboxed to their common height (\cmd\@colht?). -% -% Note that the default has hereby changed from ragged to flush. -% It's not clear that anyone but Sergey will notice. -% -% The macro \cmd\marry@skip\ addresses (in a limited way) -% the fact that neither the value of \cmd\baselineskip\ nor that of \cmd\topskip\ -% can be relied upon for the purpose of marrying the baselines of two split columns. -% (Because there might have been a local change to their values at the point where -% the output routine got triggered.) -% -% For best results, your document class should call for grid changes only when in basal text -% settings. The \cmd\marry@baselines\ procedure will use the values appropriate to that point -% when attempting to put the columns back together. -% -% In any case, we are not attempting to solve the more general problem of how to marry baselines -% where the leading can change arbitrarily within the galley or where glue could have been trimmed -% at a page top. -% -% \changes{4.1n}{2010/01/02}{(AO, 571) calling sequence of \cs{combine@foot@inserts} and \cs{grid@column} to expose box registers; that of \cs{append@column@} its column counters}% -% Procedure \cmd\append@column@\ composes a column onto the horizontal list along with its \cmd\columnseprule. -% Its arguments are: \verb+#1+---\cmd\pagegrid@cur, and \verb+#2+---\cmd\pagegrid@col -% \begin{macrocode} -\def\append@column@#1#2{% - \expandafter\box@column\csname col@\the#1\endcsname - \hfil\vrule\@width\columnseprule\hfil - \advance#1\@ne -% \end{macrocode} -% This procedure is the argument of \cmd\loopwhile, so it must leave a Boolean (e.g., \cmd\true@sw) in \TeX's scanner. -% \begin{macrocode} - \@ifnum{#1<#2}% -}% -% \end{macrocode} -% \changes{4.1n}{2010/01/02}{(AO, 571) calling sequence of \cs{combine@foot@inserts} and \cs{grid@column} to expose box registers; that of \cs{append@column@} its column counters}% -% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing} -% \changes{4.1n}{2010/01/02}{(AO, 571) coding convention: use \cs{bgroup}, \cs{egroup} (instead of braces) when a box is being built}% -% Procdure \cmd\box@column, used by \cmd\append@column@, puts down a box containing the specified column. -% Its height is adjusted down to \cmd\@colht, if needed; likewise, the width is set to \cmd\columnwidth. -% The rag at the bottom is controlled by \cmd\raggedcolumn@skip. -% \begin{macrocode} -\def\box@column#1{% - \ltxgrid@info@sw{\class@info{\string\box@column\string#1}}{}% - \raise\topskip - \hb@xt@\columnwidth\bgroup - \dimen@\ht#1\@ifdim{\dimen@>\@colht}{\dimen@\@colht}{}% - \count@\vbadness\vbadness\@M - \dimen@ii\vfuzz\vfuzz\maxdimen - \ltxgrid@info@sw{\saythe\@colht\saythe\dimen@}{}% - \vtop to\dimen@\bgroup - \hrule\@height\z@ - \unvbox#1% - \raggedcolumn@skip - \egroup - \vfuzz\dimen@ii - \vbadness\count@ - \hss - \egroup -}% -% \end{macrocode} -% The purpose of procedure \cmd\marry@baselines\ is to ensure that the baseline spacing is correct; -% it does this by making adjustments to the previous line, compensating for its depth, and by adding in -% skip glue in an amount that assumes the added material has \cmd\topskip\ glue above. -% \begin{macrocode} -\def\marry@baselines{% - \begingroup - \setbox\z@\lastbox - \@ifvoid{\z@}{% - \endgroup - }{% - \aftergroup\kern - \aftergroup-% - \expandafter\box\expandafter\z@\expandafter\endgroup\the\dp\z@\relax - }% - \vskip\marry@skip\relax -}% -\gdef\marry@skip{\z@skip}% -\def\set@marry@skip{% - \begingroup - \skip@\baselineskip\advance\skip@-\topskip - \@ifdim{\skip@>\z@}{% - \xdef\marry@skip{\the\skip@}% - }{}% - \endgroup -}% -% \end{macrocode} -% \changes{4.1b}{2008/08/04}{Use \cs{document@inithook} instead of \cs{AtBeginDocument}} -% \begin{macrocode} -\appdef\document@inithook{% - \@ifxundefined\raggedcolumn@sw{\@booleanfalse\raggedcolumn@sw}{}% -}% -\def\raggedcolumn@skip{% - \vskip\z@\raggedcolumn@sw{\@plus.0001fil\@minus.0001fil}{}\relax -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@combinepage} -% The procedure \cmd\@combinepage\ prepends the stored page (\cmd\pagesofar) to \cmd\@outputbox\ and -% employs \cmd\@combineinserts\ to lay down the footnotes. -% The next event will usually be shipping out the made-up page, but not always. -% Therefore the argument of \cmd\@combinepage, which must be a Boolean, determines -% if the footnotes are to be combined into this page. -% -% \changes{4.1b}{2008/08/04}{Change \cs{@combinepage} to \cs{@combinepage} with argument} -% \changes{4.1b}{2008/08/04}{(AO, 452) Support length checking: show size of shipped out text.} -% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing} -% -% QUERY: In the following, if \cmd\box\cmd\footins\ is not void, its contents are lost. Can this ever happen? -% \begin{macrocode} -\def\@combinepage#1{% - \ltxgrid@foot@info@sw{\class@info{\string\@combinepage\string#1}}{}% - \@ifvoid\pagesofar{}{% - \setbox\@outputbox\vbox{% - \unvbox\pagesofar - \marry@baselines - \unvbox\@outputbox - }% - }% - #1{% - \@ifvoid\footsofar{}{% -% \end{macrocode} -% At this point, \cmd\footins\ is empty; all of the footnotes have been combined into \cmd\footsofar. -% \begin{macrocode} - \show@box@size{Combining page footnotes}\footsofar - \setbox\footins\box\footsofar -% \end{macrocode} -% Depending on the page grid, we compose the footnotes for placement on the page. -% \begin{macrocode} - \compose@footnotes - \@combineinserts\@outputbox\footins - }% - }{% -% \end{macrocode} -%QUERY: The following line was removed, probably to fix a bug. When was this done? -% \begin{verbatim} -% \global\setbox\footins\box\footsofar -% \end{verbatim} -% \begin{macrocode} - }% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@cflt} -% \begin{macro}{\@cflb} -% \changes{4.1b}{2008/08/04}{} -% We modify \LaTeX's \cmd\@cflt\ and \cmd\@cflb\ to remove the unwanted glue with \cmd\unskip. -% \begin{macrocode} -\def \@cflt{% - \let \@elt \@comflelt - \setbox\@tempboxa \vbox{}% - \@toplist - \setbox\@outputbox \vbox{% - \boxmaxdepth \maxdepth - \unvbox\@tempboxa\unskip - \topfigrule\vskip \textfloatsep - \unvbox\@outputbox - }% - \let\@elt\relax - \xdef\@freelist{\@freelist\@toplist}% - \global\let\@toplist\@empty -}% -\def \@cflb {% - \let\@elt\@comflelt - \setbox\@tempboxa \vbox{}% - \@botlist - \setbox\@outputbox \vbox{% - \unvbox\@outputbox - \vskip \textfloatsep\botfigrule - \unvbox\@tempboxa\unskip - }% - \let\@elt\relax - \xdef\@freelist{\@freelist\@botlist}% - \global \let \@botlist\@empty -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@combinedblfloats} -% We modify \LaTeX's \cmd\@combinedblfloats\ to be more appropriate for incremental page building: -% we \cmd\unvbox\ the \cmd\@outputbox. -% \begin{macrocode} -\def\@combinedblfloats{% - \@ifx@empty\@dbltoplist{}{% - \setbox\@tempboxa\vbox{}% - \let\@elt\@comdblflelt\@dbltoplist - \let\@elt\relax\xdef\@freelist{\@freelist\@dbltoplist}% - \global\let\@dbltoplist\@empty - \setbox\@outputbox\vbox{% - %\boxmaxdepth\maxdepth %% probably not needed, CAR - \unvbox\@tempboxa\unskip - \@ifnum{\@dbltopnum>\m@ne}{\dblfigrule}{}%FIXME: how is \@dbltopnum maintained? - \vskip\dbltextfloatsep - \unvbox\@outputbox - }% - }% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\set@column@hsize}% -% The procedure \cmd\set@column@hsize\ takes care of setting up the horizontal dimensions -% for the current page grid. The present routine will certainly not be adequate for more -% complex page layouts (e.g., with a side column), but works for the common ones. -% \changes{4.0a}{2001/06/18}{Introduce \cs{set@marry@height} } -% \begin{macrocode} -\def\set@column@hsize#1{% - \pagegrid@col#1% - \global\columnwidth\textwidth - \global\advance\columnwidth\columnsep - \global\divide\columnwidth\pagegrid@col - \global\advance\columnwidth-\columnsep - \global\hsize\columnwidth - \global\linewidth\columnwidth - \skip@\baselineskip\advance\skip@-\topskip - \@ifnum{\pagegrid@col>\@ne}{\set@marry@skip}{}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\set@colht}% -% \begin{macro}{\set@colroom}% -% \begin{macro}{\set@vsize}% -% \begin{macro}{\set@adj@colht}% -% The story of \cmd\textheight, \cmd\@colht, \cmd\@colroom, and \cmd\vsize. -% -% \cmd\textheight---height of the text column. Not a running parameter, however, each time a page is -% shipped out, the \cmd\textheight\ could in principle be altered. This must be done before -% -% \cmd\@colht---\cmd\textheight\ minus the height of any full-page-width floats. The latter are committed -% only just after shipping out, and only if we are in a multicolumn page grid. -% Therefore, \cmd\@colht\ should be set after a \cmd\shipout\ (by \cmd\@outputpage) and -% will be adjusted when full-page-width floats are committed to the fresh page by \cmd\do@startpage. -% -% \cmd\@colroom---\cmd\@colht\ (adjusted by \cmd\pagesofar) minus the height of any column-width floats. -% The latter are committed anywhere on the page, at which point \cmd\@colroom\ must be adjusted. -% Therefore, \cmd\@colroom\ should be set (by \cmd\set@colroom) whenever a column is prepared (by ). -%FIXME: committed (by \cmd\output@column@) and -% will be adjusted (by \cmd\@add@float\ or \cmd\do@startcolumn) whenever a float is committted to the column. -% -% \cmd\vsize---\cmd\@colroom. -% Therefore, \cmd\vsize\ should be set (by \cmd\set@vsize) whenever -% the \cmd\@colroom\ is set (by \cmd\set@colroom) or adjusted (by \cmd\@add@float\ or \cmd\do@startcolumn) -%FIXME: or when the \cmd\pagesofar\ box is changed (after invoking \cmd\open@column@). -% -% Question: what if there are committed floats? Footnotes? -% Answer: full-page-width floats are only committed at top, and they are already reckoned with in \cmd\@colht. -% Column-width committed floats are incorporated by \cmd\@makecolumn. -% -% As to footnotes, our scheme is to keep the \cmd\footins\ insert register up to date, and to use the insert mechanism -% to ensure room for footnotes. -% When a change is made to the page grid, the footnotes will need to be propagated back into the MVL. -% -% Note: FIXME: adjusting for \cmd\pagesofar\ is done at not quite the right time. I need to reexamine \cmd\set@colht, -% because \cmd\@dbltoplist\ and \cmd\pagesofar\ really should be on the same footing. -% Perhaps \cmd\@colht\ and \cmd\@colroom\ should both deal with their respective ``lists'' in the same way? -% -% These concerns will be particularly germane if we ever extend this package to deal with full-page-width floats -% placed at the bottom of the page, or committed on the same page as called out. -% -% It occurs to me that we should ditch \cmd\set@colroom\ and only ever execute \cmd\set@colht, -% which sets \cmd\@colroom\ as a side effect. -% If so, we can make \cmd\@colht\ take \cmd\pagesofar\ into account, as it should. Then \cmd\@colht\ will return to its -% original significance as the value that \cmd\@colroom\ is set to after a column is committed. -% -% On the other hand, why not simply forget all this caching and (re-)calculate \cmd\vsize\ as late as possible? -% Particularly, \cmd\@colht\ is an artifact of the old way of doing things, where once it was set, it would never change. -% -% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing} -% \begin{macrocode} -\def\set@colht{% - \set@adj@textheight\@colht - \global\let\enlarge@colroom\@empty - \set@colroom -}% -\def\set@adj@textheight#1{% - \ltxgrid@info@sw{\class@info{\string\set@adj@textheight\string#1}\saythe\textheight}{}% - #1\textheight - \def\@elt{\adj@page#1}% - \@booleantrue\firsttime@sw\@dbltoplist - \let\@elt\relax - \global#1#1\relax - \ltxgrid@info@sw{\saythe#1}{}% -}% -\def\set@colroom{% - \ltxgrid@info@sw{\class@info{\string\set@colroom}}{}% - \set@adj@colht\@colroom - \@if@empty\enlarge@colroom{}{% - \global\advance\@colroom\enlarge@colroom\relax - \ltxgrid@info@sw{\saythe\@colroom}{}% - }% - \@ifdim{\@colroom>\topskip}{}{% - \ltxgrid@info{Not enough room: \string\@colroom=\the\@colroom; increasing to \the\topskip}% - \@colroom\topskip - }% - \global\@colroom\@colroom -%<ignore> \ltxgrid@info@sw{\class@info{\string\set@colroom\string\vsize=\string\colroom}\saythe\vsize}{}% - \set@vsize -}% -% -\def\set@vsize{% - \global\vsize\@colroom - \ltxgrid@info@sw{\class@info{\string\set@vsize\string\vsize=\string\colroom}\saythe\vsize}{}% -}% -% \end{macrocode} -% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing} -% \begin{macrocode} -\def\set@adj@colht#1{% - #1\@colht - \ltxgrid@info@sw{\class@info{\string\set@adj@colht\string#1-\string\pagesofar}\saythe#1}{}% - \@ifvoid\pagesofar{}{% - \advance#1-\ht\pagesofar\advance#1-\dp\pagesofar - \ltxgrid@info@sw{\class@info{\string\pagesofar}\saythe#1}{}% - }% - \def\@elt{\adj@column#1}% - \@booleantrue\firsttime@sw\@toplist - \@booleantrue\firsttime@sw\@botlist - \let\@elt\relax -}% -\def\adj@column#1#2{% - \advance#1-\ht#2% - \advance#1-\firsttime@sw{\textfloatsep\@booleanfalse\firsttime@sw}{\floatsep}% - \ltxgrid@info@sw{\class@info{\string\adj@column\string#1-\string#2}\saythe#1}{}% -}% -\def\adj@page#1#2{% - \advance#1-\ht#2% - \advance#1-\firsttime@sw{\dbltextfloatsep\@booleanfalse\firsttime@sw}{\dblfloatsep}% - \ltxgrid@info@sw{\class@info{\string\adj@page\string#1-\string#2}\saythe#1}{}% -}% -\def\set@adj@box#1#2{% - \@ifvoid#2{}{% - \advance#1-\ht#2\advance#1-\dp#2% - \@booleantrue\temp@sw - \ltxgrid@foot@info@sw{\class@info{\string\set@adj@box\string#2}\saythe#1}{}% - }% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@outputpage@tail}% -% \changes{4.1b}{2008/08/04}{Procedure \cs{@outputpage@tail} tailpatches \cs{@outputpage}}% -% In \cmd\@outputpage@tail, we set \cmd\@colht\ and the float placement parameters -% (this is the one point where it is appropriate to set \cmd\@colht). -% At \cmd\do@startpage\ time, we adjust \cmd\@colht's value to reflect committed -% full-page-width floats. -% -% Note: with a correctly written output routine, a call to \cmd\@outputpage\ will inevitably be -% followed by a call to \cmd\do@startpage, so these procedure calls would be unneeded. -% \begin{macrocode} -\appdef\@outputpage@tail{% - \set@colht % FIXME: needed? - \@floatplacement % FIXME: needed? - \@dblfloatplacement % FIXME: needed? -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{balance@2} -% \changes{4.1b}{2008/08/04}{Procedure \cs{balance@2} defined more transparently}% -% We define procedures for balancing columns in a multicolumn layout. -% For now, we define only one: a procedure for the two-column grid. -% All others will simply \cmd\relax\ out. -% -% The following code defines \verb+\balance@2+ without all the clunky \cmd\csname\ commands -% in the replacement part, -% which appears on the right-hand side of the assignment to \cmd\toks@. -% -% The method is straightforward: balance the two columns of text, and balance the footnotes. -% Later on, \cmd\@combineinserts\ will be called to place the footnotes after the now-balanced columns. -% -% \changes{4.1f}{2009/07/14}{(AO, 519) \cs{footins} content must be preserved and reintegrated} -% It was necessary to deal with the case where \cmd\box\cmd\footsofar\ was not empty -% upon execution of this balancing code. We store it away in \cmd\box\cmd\footins\ and -% add it back in afterwards. -% -% Here is a conundrum: if we switch between single-, two-, and three-column page grids: -% On what measure should the footnotes be set? -% \begin{macrocode} -\begingroup - \catcode`\1=\cat@letter - \catcode`\2=\cat@letter -% \end{macrocode} -% \cmd\toks@\ contains the repacement part for an effective \cmd\def\cs{balance@2}. -% \begin{macrocode} - \toks@{% -% \end{macrocode} -% \cmd\balance@two, by side effect, strips footnotes into \cmd\box\cmd\footins. -% \begin{macrocode} - \setbox\footins\box\footsofar - \balance@two\col@1\@outputbox -% \end{macrocode} -% We ensure that the box assignments are global. -% \begin{macrocode} - \global\setbox\col@1\box\col@1 - \global\setbox\@outputbox\box\@outputbox -% \end{macrocode} -% The following line puts all footnotes into the footnote galley, \cmd\footsofar. -% \begin{macrocode} - \combine@foot@inserts\footsofar\footins - }% - \aftergroup\def\aftergroup\balance@2\expandafter -\endgroup\expandafter{\the\toks@}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\balance@two} -% The procedure \cmd\balance@two\ takes two columns and balances them; in the process it removes -% any footnotes that may be present to a place of safety \cmd\footsofar, -% for later placement at the foot of the shipped-out page. -% The box register \cmd\box\cmd\@ne\ is the aggregate of all columns. -% The box register \cmd\box\cmd \z@\ is the last column. -% The box register \cmd\box\cmd\tw@\ is the first column. -% The \cmd\dimen\ register \cmd\dimen@\ is the trial value to \cmd\vsplit\ to, -% initially half the height of \cmd\box\cmd\@ne. -% The \cmd\dimen\ register \cmd\dimen@i\ is the increment for the next trial; -% its initial value is equal to the initial value of \cmd\dimen@. -% The \cmd\dimen\ register \cmd\dimen@ii\ is the difference of the heights of the two columns. -% -% The procedure uses a binary search for that value of \cmd\dimen@\ which is stable to within .5\cmd\p@\ and which -% makes the last column be shorter than the others. -% -% This procedure can be extended to multiple columns simply by changing it to execute \cmd\vsplit\ multiple -% times (one less than the total number of columns in the page layout) and to calculating \cmd\dimen@ii\ -% to be the difference of the heights of last column and the \cmd\dimen@. -% Upon termination of the search, one would excute the \cmd\vsplit s once again, this time -% using the actual \cmd\col@\ box registers to store the -% balanced columns, thereby clobbering their former contents. -% -% Bug Note: -% as originally written, this macro had a bug, which is well worth avoiding under similar circumstances anywhere. -% So, learn from the mistakes of others, as they say. -% In trying to remove the depth of the boxes created via \cmd\vsplit\ within the \cmd\loopwhile\ control, -% I originally coded -% \cmd\unvbox -% \cmd\z@\ -% \cmd\setbox -% \cmd\z@ -% \cmd\lastbox\ -% \cmd\dimen@ -% \cmd\dp -% \cmd\z@\ -% \cmd\box -% \cmd\z@\ -% \cmd\vskip-% -% \cmd\dimen@. -% The error here is that the (horizontal) shift of the last box in the vertical list will be lost in the process. -% Simply put, \cmd\setbox\cmd\z@\cmd\lastbox\ fails to retain the shift of the box node in the vertical list, -% and when it is put down again via \cmd\box\cmd\z@, it will no longer have the correct shift. -% -% This bug affected things placed in the MVL with \cmd\moveleft, \cmd\moveright, \cmd\parshape, and -% \cmd\hangindent, as well as things shifted by \TeX's primitive mechanisms. -% -% A superior strategy for removing the depth of the last line of the list is more expensive, but safer: -% make a separate copy of the list, measure the depth of the last box as above, but then discard -% the list, retaining only the value of the dimension. -% -% Note that this procedure will not work if the material within is excessively chunky. -% A particular failure mode exists where none of the material is allocated to the last (right) column. -% We detect this case and revert to unbalanced columns. -% -% Another failure mode is where a large chunk occurs at the beginning of the composite box. -% In this case, the left column may fill up even when \cmd\dimen@\ is very small. -% If this configuration leaves the left column longer than the right, then we are done, -% but \cmd\dimen@\ by no means represents the height of either finished box. -% -% Therefore the last step in the process is to rebox the two columns to a common height determined -% independently of the balancing process. -% -% The dimension involved is checked against the current \cmd\@colroom\ to guard against the case where -% excessive material happens to fall in either column. -% \changes{4.1b}{2008/08/04}{Change \cs{set@colroom} to \cs{set@colht}} -% \changes{4.1n}{2009/12/02}{More diagnostics of column balancing} -% \changes{4.1n}{2010/01/02}{(AO, 571) coding convention: use \cs{bgroup}, \cs{egroup} (instead of braces) when a box is being built}% -% \changes{4.1n}{2010/01/02}{(AO, 571) Footnotes, when columns are balanced or when they are composed with their column}% -% \changes{4.1n}{2010/01/02}{(AO, 571) Change \cs{balance@two}'s balancing algorithm to more successfully balance extremely short columns.} -% \begin{macrocode} -\def\balance@two#1#2{% - \ltxgrid@info@sw{\class@info{\string\balance@two\string#1\string#2}}{}% - \outputdebug@sw{\trace@scroll{\showbox#1\showbox#2}}{}% -% \end{macrocode} -% The first step is to recover the footnotes from the bottoms of the two columns (globally, into \cmd\footsofar) -% and to combine the text into \cmd\box\cmd\@ne, but without voiding either of the argument boxes. -% \begin{macrocode} - \setbox\thr@@\copy\footsofar - \setbox\@ne\vbox\bgroup - \@ifvoid{#1}{}{% - \recover@column#1\footsofar\column@recovered\footins@recovered - \@ifvoid{#2}{}{\marry@baselines}% - }% - \@ifvoid{#2}{}{% - \recover@column#2\footsofar\column@recovered\footins@recovered - }% - \egroup - \outputdebug@sw{\trace@scroll{\showbox\@ne}}{}% - \ltxgrid@foot@info@sw{\trace@scroll{\showbox\footsofar}}{}% -% \end{macrocode} -% Hereunder, \cmd\dimen@\ is the split value. We adjust it until the step size is small enough, while the split is acceptable. -% Also, \cmd\dimen@i\ is the step size. Once this value is greater than a half point, we must iterate. -% \begin{macrocode} - \dimen@\ht\@ne\divide\dimen@\tw@ - \dimen@i\dimen@ - \vbadness\@M - \vfuzz\maxdimen - \splittopskip\topskip - \loopwhile{% - \setbox\z@\copy\@ne\setbox\tw@\vsplit\z@ to\dimen@ - \remove@depth\z@\remove@depth\tw@ -% \end{macrocode} -% The following line would provide a diagnostic of the iterations of column balancing, were we to use it. -% \begin{verbatim} -% \outputdebug@sw{\trace@scroll{\showbox\tw@\showbox\z@}}{}% -% \end{verbatim} -% Hereunder, \cmd\dimen@ii\ is used to reckon the difference in height between the left box and the right. -% \begin{macrocode} - \dimen@ii\ht\tw@\advance\dimen@ii-\ht\z@ - \dimen@i=.5\dimen@i - \ltxgrid@info@sw{\saythe\dimen@\saythe\dimen@i\saythe\dimen@ii}{}% -% \end{macrocode} -% If the columns are within a half-point of each other, -% \begin{macrocode} - \@ifdim{\dimen@ii<.5\p@}{% - \@ifdim{\dimen@ii>-.5\p@}% - }{% - \false@sw - }% -% \end{macrocode} -% The above results in a Boolean, which now chooses between the following two brace-delimited clauses. -% If the step size is less than a half-point, then terminate the loop. -% \begin{macrocode} - {% - \true@sw - }{% - \@ifdim{\dimen@i<.5\p@}% - }% -% \end{macrocode} -% The above results in a Boolean, which now chooses between the following two brace-delimited clauses. -% The true-part terminates the loop, otherwise iterate. -% \begin{macrocode} - {% - \false@sw - }% - {% -% \end{macrocode} -% For the next iteration, the candidate split dimension \cmd\dimen@\ will be one step larger -% if the height of the left box is less than that of the right box. -% Otherwise it will be one step smaller. -% \begin{macrocode} - \advance\dimen@\@ifdim{\dimen@ii<\z@}{}{-}\dimen@i - \true@sw - }% - }% -% \end{macrocode} -% The loop has terminated. -% \begin{macrocode} - \ltxgrid@info@sw{\saythe\dimen@\saythe\dimen@i\saythe\dimen@ii}{}% -% \end{macrocode} -% The algorithm has failed to find a satisfactory result if -% the left column is of non-zero height and the right column is of zero height. -% \begin{macrocode} - \@ifdim{\ht\z@=\z@}{% - \@ifdim{\ht\tw@=\z@}% - }{% - \true@sw - }% -% \end{macrocode} -% The \cmd\false@sw\ branch is executed if the algorithm has failed. -% We restore the original boxes. -% \begin{macrocode} - {% - }{% - \ltxgrid@info{Unsatifactorily balanced columns: giving up}% - \setbox\tw@\box#1% - \setbox\z@ \box#2% - \global\setbox\footsofar\box\thr@@ - }% - \setbox\tw@\vbox{\unvbox\tw@\vskip\z@skip}% - \setbox\z@ \vbox{\unvbox\z@ \vskip\z@skip}% - \set@colht - \dimen@\ht\z@\@ifdim{\dimen@<\ht\tw@}{\dimen@\ht\tw@}{}% - \@ifdim{\dimen@>\@colroom}{\dimen@\@colroom}{}% - \ltxgrid@info@sw{\saythe{\ht\z@}\saythe{\ht\tw@}\saythe\@colroom\saythe\dimen@}{}% - \setbox#1\vbox to\dimen@{\unvbox\tw@\unskip\raggedcolumn@skip}% - \setbox#2\vbox to\dimen@{\unvbox\z@ \unskip\raggedcolumn@skip}% - \outputdebug@sw{\trace@scroll{\showbox#1\showbox#2}}{}% -}% -% \end{macrocode} -% Procedure \cmd\remove@depth\ rearranges the given (vertical) box register so that it has zero depth. -% \begin{macrocode} -\def\remove@depth#1{% - \setbox#1\vbox\bgroup - \unvcopy#1% - \setbox\z@\vbox\bgroup - \unvbox#1% - \setbox\z@\lastbox - \aftergroup\kern\aftergroup-\expandafter - \egroup - \the\dp\z@\relax - \egroup -}% -% \end{macrocode} -% \end{macro} -% -% \changes{4.1n}{2010/01/02}{(AO, 571) Abandon \cs{recover@footins} in favor of \cs{recover@column}}% -% Procedure \cmd\recover@column\ is a utility to separate a column box into text and footnotes; -% the former being contributed to the current (vertical) list, the latter appended to the given register, usually \cmd\footsofar. -% -% Argument \verb+#1+ is the input: it should be a \cmd\vbox, and it remains unaltered. -% Argument \verb+#2+ is the box into which to (globally) add the footnotes, usually \cmd\footsofar. -% Arguments \verb+#3+ and \verb+#4+ are scratch box registers to use in this calculation. -% As a side effect, \verb+#3+ will be unboxed into whatever vertical mode we are in at the moment (should be a \cmd\vbox). -% \begin{macrocode} -\def\recover@column#1#2#3#4{% - \ltxgrid@info@sw{\class@info{\string\recover@column\string#1\string#2\string#3\string#4}}{}% - \setbox#4\vbox{\unvcopy#1}% - \ltxgrid@foot@info@sw{\trace@scroll{\showbox#4}}{}% - \dimen@\ht#4% - \ltxgrid@foot@info@sw{\saythe\dimen@}{}% - \setbox#4\vbox\bgroup - \unvbox#4\unskip -% \end{macrocode} -% We now strip the footnotes from the bottom of this box, adding them to \cmd\footsofar. -% The method relies on a signal, consisting of a complementary pair of kerns, placed at the bottom of the box by \cmd\@combineinserts. -% \begin{macrocode} - \dimen@i\lastkern\unkern\advance\dimen@i\lastkern - \@ifdim{\dimen@i=\z@}{% - \dimen@i\lastkern\unkern - \ltxgrid@foot@info@sw{\saythe\dimen@i}{}% - \aftergroup\dimen@i - \expandafter\egroup\the\dimen@i\relax - }{% - \egroup - }% -% \end{macrocode} -% Split the column into \verb+#3+ and the footnote into \verb+#4+. -% Append the footnote to \verb+#2+. -% \begin{macrocode} - \@ifdim{\dimen@i<\z@}{% - \advance\dimen@\dimen@i - \ltxgrid@foot@info@sw{\saythe\dimen@i\saythe\dimen@}{}% - \splittopskip\z@skip - \global\setbox#3\vsplit#4 to\dimen@ - \global\setbox#4\vbox{\unvbox#4}% - \ltxgrid@foot@info@sw{\trace@scroll{\showbox#1\showbox#2\showbox#3\showbox#4}}{}% - \global\setbox#2\vbox\bgroup\unvbox#2\vskip\z@skip\unvbox#4\egroup - }{% -% \end{macrocode} -% What if \cmd\dimen@i\ is zero? -% In that case, \cmd\setbox\#3\cmd\box\#4, and do not touch \cmd\box\#2. -% \begin{macrocode} - \setbox#3\box#4% - \ltxgrid@foot@info@sw{\trace@scroll{\showbox#1\showbox#2\showbox#3\showbox#4}}{}% - }% - \unvbox#3% - \loopwhile{\dimen@\lastskip\@ifdim{\dimen@>\z@}{\unskip\true@sw}{\false@sw}}% -}% -\def\recover@column@null#1#2#3#4{% - \unvcopy#1% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@begindocumenthook} -% Initialization: -% we initialize to the page grid named ``one''. -% If the class decides to initially set type in a different grid, it -% should execute these same commands, but changing the first to the appropriate procedure. -% -% Note that the point where this sequence is executed would be an excellent place to arrange for -% floats to be committed to the first page of a document. -% That is, we execute \cmd\do@startpage, which triggers \cmd\do@startcolumn. -% -% FIXME: it should be the job of the page grid to determine the procedure to execute at -% the start of the job. Make this a hook. -% \begin{macrocode} -\rvtx@ifformat@geq{2020/10/01}% - {% - \AddToHook{begindocument}{% - \open@column@one\@ne - \set@colht - \@floatplacement - \@dblfloatplacement - }% - }{% - \prepdef\@begindocumenthook{% - \open@column@one\@ne - \set@colht - \@floatplacement - \@dblfloatplacement - }% - } -% \end{macrocode} -% \end{macro} -% -% Comment: our technique of balancing columns is severely limited, because it cannot properly work -% with \env{longtable}, which places material at the bottom and top of the column break. -% -% The proper way to handle a grid change in the middle of the page is to accumulate all the material for -% an entire article (or chapter) and then assemble finished pages therefrom. This approach is fundamentally -% superior for complex layouts: it corresponds to real-world workflows. -% Such a scheme is an excellent subject for another \LaTeX\ package. -% -% -% \subsection{Patches for the longtable package}% -% -% \LaTeX's ``required'' package \classname{longtable} (written by David P. Carlilsle), -% which is part of /latex/required/tools, is incmpatible with both -% \LaTeX's ``required'' package \classname{multicol} and with -% \LaTeX's native \cmd\twocolumn\ capability. There is no essential reason -% for this incompatability, aside from implementation details, and the -% \classname{ltxgrid} package gives us the ability to lift them. -% -% Only four of \classname{longtable}'s procedures require rewriting: -% \cmd\longtable, -% \cmd\endlongtable, -% \cmd\LT@start, and -% \cmd\LT@end@hd@ft. -% The procedure \cmd\switch@longtable\ checks against their expected meanings -% and, if all is as expected, applies the patches. -% In the process, we simplify things considerably and also make them more -% secure. -% -% Why does \classname{longtable} need to access the output routine, anyway? -% What it comes down to, is what happens when a pagebreak falls within a -% long table. If this happens, we would like to append a row at the bottom of -% the broken table and add a row at the top of the next page. -% -% These things can be accomodated easily by the \classname{ltxgrid} output -% routine hooks. -% -% \begin{macro}{\longtable} -% \begin{macrocode} -\def\longtable@longtable{% - \par - \ifx\multicols\@undefined\else\ifnum\col@number>\@ne\@twocolumntrue\fi\fi - \if@twocolumn\LT@err{longtable not in 1-column mode}\@ehc\fi - \begingroup - \@ifnextchar[\LT@array{\LT@array[x]}% -}% -\def\longtable@new{% - \par - \@ifnextchar[\LT@array{\LT@array[x]}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\endlongtable} -% \begin{macrocode} -\def\endlongtable@longtable{% - \crcr - \noalign{% - \let\LT@entry\LT@entry@chop - \xdef\LT@save@row{\LT@save@row}}% - \LT@echunk - \LT@start - \unvbox\z@ - \LT@get@widths - \if@filesw - {\let\LT@entry\LT@entry@write\immediate\write\@auxout{% - \gdef\expandafter\noexpand - \csname LT@\romannumeral\c@LT@tables\endcsname - {\LT@save@row}}}% - \fi - \ifx\LT@save@row\LT@@save@row - \else - \LT@warn{Column \@width s have changed\MessageBreak - in table \thetable}% - \LT@final@warn - \fi - \endgraf\penalty -\LT@end@pen - \endgroup - \global\@mparbottom\z@ - \pagegoal\vsize - \endgraf\penalty\z@\addvspace\LTpost - \ifvoid\footins\else\insert\footins{}\fi -}% -% \end{macrocode} -% \changes{4.1a}{2008/06/29}{Repair error in \cs{endlongtable@new} involving \cs{@ifx}: argument not delimited.} -% \begin{macrocode} -\def\endlongtable@new{% - \crcr - \noalign{% - \let\LT@entry\LT@entry@chop - \xdef\LT@save@row{\LT@save@row}% - }% - \LT@echunk - \LT@start - \unvbox\z@ - \LT@get@widths - \@if@sw\if@filesw\fi{% - {% - \let\LT@entry\LT@entry@write - \immediate\write\@auxout{% - \gdef\expandafter\noexpand\csname LT@\romannumeral\c@LT@tables\endcsname - {\LT@save@row}% - }% - }% - }{}% - \@ifx{\LT@save@row\LT@@save@row}{}{% - \LT@warn{% - Column \@width s have changed\MessageBreak in table \thetable - }\LT@final@warn - }% - \endgraf - \nobreak - \box\@ifvoid\LT@lastfoot{\LT@foot}{\LT@lastfoot}% - \global\@mparbottom\z@ - \endgraf - \LT@post -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\LT@start} -% \begin{macrocode} -\def\LT@start@longtable{% - \let\LT@start\endgraf - \endgraf\penalty\z@\vskip\LTpre - \dimen@\pagetotal - \advance\dimen@ \ht\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi - \advance\dimen@ \dp\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi - \advance\dimen@ \ht\LT@foot - \dimen@ii\vfuzz - \vfuzz\maxdimen - \setbox\tw@\copy\z@ - \setbox\tw@\vsplit\tw@ to \ht\@arstrutbox - \setbox\tw@\vbox{\unvbox\tw@}% - \vfuzz\dimen@ii - \advance\dimen@ \ht - \ifdim\ht\@arstrutbox>\ht\tw@\@arstrutbox\else\tw@\fi - \advance\dimen@\dp - \ifdim\dp\@arstrutbox>\dp\tw@\@arstrutbox\else\tw@\fi - \advance\dimen@ -\pagegoal - \ifdim \dimen@>\z@\vfil\break\fi - \global\@colroom\@colht - \ifvoid\LT@foot\else - \advance\vsize-\ht\LT@foot - \global\advance\@colroom-\ht\LT@foot - \dimen@\pagegoal\advance\dimen@-\ht\LT@foot\pagegoal\dimen@ - \maxdepth\z@ - \fi - \ifvoid\LT@firsthead\copy\LT@head\else\box\LT@firsthead\fi -% \end{macrocode} -% At some point before version 4.11, the \cmd\nobreak\ was added. -% \begin{macrocode} -\nobreak -% \end{macrocode} -% -% \begin{macrocode} - \output{\LT@output}% -}% -\def\LT@start@new{% - \let\LT@start\endgraf - \endgraf - \markthr@@{}% - \LT@pre - \@ifvoid\LT@firsthead{\LT@top}{\box\LT@firsthead\nobreak}% - \mark@envir{longtable}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\LT@end} -% \begin{macrocode} -\def\LT@end@hd@ft@longtable#1{% - \LT@echunk - \ifx\LT@start\endgraf - \LT@err{Longtable head or foot not at start of table}{Increase LTchunksize}% - \fi - \setbox#1\box\z@ - \LT@get@widths\LT@bchunk -}% -\def\LT@end@hd@ft@new#1{% - \LT@echunk - \@ifx{\LT@start\endgraf}{% - \LT@err{Longtable head or foot not at start of table}{Increase LTchunksize}% - }% - \global\setbox#1\box\z@ - \LT@get@widths - \LT@bchunk -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\LT@array} -% -% -% \begin{macrocode} -\def\LT@array@longtable[#1]#2{% - \refstepcounter{table}\stepcounter{LT@tables}% - \if l#1% - \LTleft\z@ \LTright\fill - \else\if r#1% - \LTleft\fill \LTright\z@ - \else\if c#1% - \LTleft\fill \LTright\fill - \fi\fi\fi - \let\LT@mcol\multicolumn - \let\LT@@tabarray\@tabarray - \let\LT@@hl\hline - \def\@tabarray{% - \let\hline\LT@@hl - \LT@@tabarray}% - \let\\\LT@tabularcr\let\tabularnewline\\% - \def\newpage{\noalign{\break}}% - \def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT@no@pgbk-}4}% - \def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT@no@pgbk4}% - \let\hline\LT@hline \let\kill\LT@kill\let\caption\LT@caption - \@tempdima\ht\strutbox - \let\@endpbox\LT@endpbox - \ifx\extrarowheight\@undefined - \let\@acol\@tabacol - \let\@classz\@tabclassz \let\@classiv\@tabclassiv - \def\@startpbox{\vtop\LT@startpbox}% - \let\@@startpbox\@startpbox - \let\@@endpbox\@endpbox - \let\LT@LL@FM@cr\@tabularcr - \else - \advance\@tempdima\extrarowheight - \col@sep\tabcolsep - \let\@startpbox\LT@startpbox\let\LT@LL@FM@cr\@arraycr - \fi - \setbox\@arstrutbox\hbox{\vrule - \@height \arraystretch \@tempdima - \@depth \arraystretch \dp \strutbox - \@width \z@}% - \let\@sharp##\let\protect\relax - \begingroup - \@mkpream{#2}% - \xdef\LT@bchunk{% - \global\advance\c@LT@chunks\@ne - \global\LT@rows\z@\setbox\z@\vbox\bgroup - \LT@setprevdepth -% \end{macrocode} -% At some point before version 4.11, the \cmd\noexpand\ was added. -% We need not change our own version, because we did it right, back in 1998 (using \cmd\appdef). -% \begin{macrocode} - \tabskip\LTleft \noexpand\halign to\hsize\bgroup - \tabskip\z@ \@arstrut \@preamble \tabskip\LTright \cr}% - \endgroup - \expandafter\LT@nofcols\LT@bchunk&\LT@nofcols - \LT@make@row - \m@th\let\par\@empty - \everycr{}\lineskip\z@\baselineskip\z@ - \LT@bchunk}% -\def\LT@LR@l{\LTleft\z@ \LTright\fill}% -\def\LT@LR@r{\LTleft\fill \LTright\z@ }% -\def\LT@LR@c{\LTleft\fill \LTright\fill}% -\def\LT@array@new[#1]#2{% - \refstepcounter{table}\stepcounter{LT@tables}% - \table@hook - \LTleft\fill \LTright\fill - \csname LT@LR@#1\endcsname - \let\LT@mcol\multicolumn - \let\LT@@hl\hline - \prepdef\@tabarray{\let\hline\LT@@hl}% - \let\\\LT@tabularcr - \let\tabularnewline\\% - \def\newpage{\noalign{\break}}% - \def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT@no@pgbk-}4}% - \def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT@no@pgbk4}% - \let\hline\LT@hline - \let\kill\LT@kill - \let\caption\LT@caption - \@tempdima\ht\strutbox - \let\@endpbox\LT@endpbox - \@ifxundefined\extrarowheight{% - \let\@acol\@tabacol - \let\@classz\@tabclassz - \let\@classiv\@tabclassiv - \def\@startpbox{\vtop\LT@startpbox}% - \let\@@startpbox\@startpbox - \let\@@endpbox\@endpbox -% \end{macrocode} -% Because \classname{ltxutil} patches \LaTeX's \cmd\@tabularcr and \cmd\@xtabularcr, -% we must restore these procedures in the scope of \env{longtable}. -% Ironically, the patches in \classname{ltxutil} were for the purpose of extending -% the \env{tabular} environment to prevent pagebreaks with the *-form of \cmd\\, -% just the same as is being done here. But the two mechanisms conflict. -% \changes{4.1a}{2008/06/29}{Change \cs{LT@array@new}: restore \cs{@tabularcr} and \cs{@xtabularcr}} -% \begin{macrocode} - \let\LT@LL@FM@cr\@tabularcr@LaTeX - \let\@xtabularcr\@xtabularcr@LaTeX - }{% - \advance\@tempdima\extrarowheight - \col@sep\tabcolsep - \let\@startpbox\LT@startpbox -% \end{macrocode} -% \changes{4.1a}{2008/06/29}{Change \cs{LT@array@new}: set \cs{LT@LL@FM@cr} to \cs{@arraycr@array} instead of \cs{@arraycr}} -% \begin{macrocode} - \let\LT@LL@FM@cr\@arraycr@array - }% -% - \let\@acoll\@tabacoll - \let\@acolr\@tabacolr - \let\@acol\@tabacol -% - \setbox\@arstrutbox\hbox{% - \vrule - \@height \arraystretch \@tempdima - \@depth \arraystretch \dp \strutbox - \@width \z@ - }% - \let\@sharp##% - \let\protect\relax - \begingroup - \@mkpream{#2}% - \@mkpream@relax - \edef\@preamble{\@preamble}% - \prepdef\@preamble{% - \global\advance\c@LT@chunks\@ne - \global\LT@rows\z@ - \setbox\z@\vbox\bgroup - \LT@setprevdepth - \tabskip\LTleft - \halign to\hsize\bgroup - \tabskip\z@ - \@arstrut - }% - \appdef\@preamble{% - \tabskip\LTright - \cr - }% - \global\let\LT@bchunk\@preamble - \endgroup - \expandafter\LT@nofcols\LT@bchunk&\LT@nofcols - \LT@make@row - \m@th - \let\par\@empty - \everycr{}% - \lineskip\z@ - \baselineskip\z@ - \LT@bchunk -}% -\appdef\table@hook{}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\switch@longtable} -% -% Here is the switch from standard \classname{longtable} to the new, \classname{ltxgrid}-compatible values. -% -% At this point, we extend \env{longtable} with a \env{longtable*} form, which signifies that we want to -% use the full page width for setting the table. -% You can think this way: \env{longtable*} is to \env{longtable} as \env{table*} is to \env{table}. -% -% \begin{macrocode} -\def\switch@longtable{% - \@ifpackageloaded{longtable}{% - \@ifx{\longtable\longtable@longtable}{% - \@ifx{\endlongtable\endlongtable@longtable}{% - \@ifx{\LT@start\LT@start@longtable}{% - \@ifx{\LT@end@hd@ft\LT@end@hd@ft@longtable}{% - \@ifx{\LT@array\LT@array@longtable}{% - \true@sw - }{\false@sw}% - }{\false@sw}% - }{\false@sw}% - }{\false@sw}% - }{\false@sw}% - {% - \class@info{Patching longtable package}% - }{% - \class@info{Patching unrecognized longtable package. (Proceeding with fingers crossed)}% - }% - \let\longtable\longtable@new - \let\endlongtable\endlongtable@new - \let\LT@start\LT@start@new - \let\LT@end@hd@ft\LT@end@hd@ft@new - \let\LT@array\LT@array@new - \newenvironment{longtable*}{% - \onecolumngrid@push - \longtable - }{% - \endlongtable - \onecolumngrid@pop - }% -% \end{macrocode} -% Removed obsolete code. -% \begin{macrocode} - }{}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\LT@pre} -% \begin{macro}{\LT@bot} -% \begin{macro}{\LT@top} -% \begin{macro}{\LT@post} -% \begin{macro}{\LT@adj} -% Note that at the end of the longtable environment, we reestablish the \cmd\mark@envir\ of the -% containing environment. We have left \cmd\curr@envir\ alone, so this will work. -% \begin{macrocode} -\def\LT@pre{\penalty\z@\vskip\LTpre}% -\def\LT@bot{\nobreak\copy\LT@foot\vfil}% -\def\LT@top{\copy\LT@head\nobreak}% -\def\LT@post{\penalty\z@\addvspace\LTpost\mark@envir{\curr@envir}}% -\def\LT@adj{% - \setbox\z@\vbox{\null}\dimen@-\ht\z@ - \setbox\z@\vbox{\unvbox\z@\LT@bot}\advance\dimen@\ht\z@ - \global\advance\vsize-\dimen@ -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{output@init} -% \begin{macro}{output@prep} -% \begin{macro}{output@post} -% \begin{macrocode} -\def\output@init@longtable{\LT@adj}% -\def\output@prep@longtable{\setbox\@cclv\vbox{\unvbox\@cclv\LT@bot}}% -\def\output@post@longtable{\LT@top}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% -% \subsection{Patches for index processing}% -% -% Another feature that uses the output routine hooks occurs within -% an index, where one wishes to apply a ``continue head'' when a -% column breaks within a primary index entry. -% Some book designs call for the continue head to only be applied -% at a turnpage break. -% -% In any case, it is easy enough for \cmd\output@post@theindex\ -% to do this in conjunction with component marks. -% Only the bare outlines are shown here. -% -% \begin{macro}{\output@init} -% \begin{macro}{\output@prep} -% \begin{macro}{\output@post} -% \begin{macrocode} -\let\output@init@theindex\@empty -\let\output@prep@theindex\@empty -\def\output@post@theindex{% - \@ifodd\c@page{}{% - \@ifnum{\pagegrid@cur=\@ne}{% -% \end{macrocode} -% We have the leftmost column of a verso page: -% Insert the current top-level continued head. -% \begin{macrocode} - }% - }% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% -% \subsection{Checking the auxiliary file}% -% -% We relegate the checking of the auxiliary file to the output routine. -% This task must wait until the last page is shipped out, because otherwise -% the stream might get closed before the last page is shipped out. -% Obviously, we must use \cmd\do@output@MVL\ for the job. -% -% \begin{macro}{\check@aux} -% \begin{macrocode} -\def\check@aux{\do@output@MVL{\do@check@aux}}% -% \end{macrocode} -% \end{macro} -% -% -% -% \subsection{Dealing with stuck floats and stalled float dequeueing}% -% -% \LaTeX's float placement mechanism is fundamentally flawed, as evidenced by -% its warning message ``too many unprocessed floats'', which users understandably find frustrating. -% The \classname{ltxgrid} package provides tools for ameliorating the situation somewhat. -% -% Two cases require detection and rectification: -% \begin{enumerate} -% \item -% A float is ``stuck'' in the \cmd\@deferlist: for whatever reason, the float fails to be committed, -% even at the start of a fresh page. -% Once this condition prevails, following floats can never be committed, subsequently all of \LaTeX's -% float registers are used up. -% -% If this condition is detected, we reconsider float dequeueing under permissive (\cmd\clearpage-style) processing. -% -% \item -% The \cmd\@freelist\ is exhausted: -% a large concentration of floats, say, uses up all of \LaTeX's float registers all at once. -% This condition commonly occurs when the user collects floats at the end of the document, for some reason. -% -% When a float is encountered, \LaTeX\ uses a float register (allocated from a pool of free registers) to contain it until it can be placed. -% However, no further action is taken until the pagebuilder is visited, so floats can accumulate. -% Also, even after the pagebuilder is visited, deferred floats can accumulate, and these are not committed -% until a column (or page) of text is completed. -% -% Once the last free float register is used, action should be taken that will commit some of the deferred floats, -% even if this might require ending the page right where we are (resulting in a short page). -% -% Perhaps, committed floats should be stored using some mechanism other than a list, as is currently done. -% A feasible alternative storage method would be to use a \cmd\box\ register in place of -% \cmd\@toplist, -% \cmd\@botlist, and -% \cmd\@dbltoplist. -% This is probably just fine, since such committed floats are not reconsidered (I think). -% -% \end{enumerate} -% -% The emergency processing implemented here immediately ends the current page and begins to output float pages under (\cmd\clearpage-style) rules. -% It proceeds until all deferred floats have been flushed. -% -% Users should expect non-optimal page makeup under these circumstances. -% -% Note that there is a weakness in our approach that we have not attempted to repair: if floats are being -% added as part of a paragraph, we will not be able to take these remedial steps until the paragraph ends. -% This means that the approach implemented here cannot fix all \LaTeX\ documents. Users can still construct -% documents that exhaust \LaTeX's pool of float registers! -% -% \begin{macro}{\check@deferlist@stuck} -% \begin{macro}{\@outputpage@tail} -% \changes{4.1b}{2008/08/04}{Procedure \cs{@outputpage@tail} tailpatches \cs{@outputpage}}% -% We detect the case where, at the start of a fresh page, there are deferred floats, but none are -% committed. We memorize the \cmd\@deferlist\ at \cmd\shipout\ time, then examine it at the point where -% our efforts to commit floats to the new page are complete. -% If it has not changed, the first float must be stuck, and we -% attempt to fix things via \cmd\force@deferlist@stuck. -% -% This simple approach is comp[letely effective in for typical documents. -% -% Note that we try to avoid an infinite loop by examining the value of \cmd\clearpage@sw: -% if we come here with that boolean true, we are in a loop. -% \begin{macrocode} -\def\check@deferlist@stuck#1{% - \@ifx{\@deferlist@postshipout\@empty}{}{% - \@ifx{\@deferlist@postshipout\@deferlist}{% - \@fltstk - \clearpage@sw{% - \ltxgrid@warn{Deferred float stuck during \string\clearpage\space processing}% - }{% - \force@deferlist@stuck#1% - }% - }{% -% \end{macrocode} -% We have successfully committed float(s) -% \begin{macrocode} - }% - \global\let\@deferlist@postshipout\@empty - }% -}% -\def\@fltstk{% - \@latex@warning{A float is stuck (cannot be placed without \string\clearpage)}% -}% -\appdef\@outputpage@tail{% - \global\let\@deferlist@postshipout\@deferlist -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@next} -% \begin{macro}{\@xnext} -% We rewrite the \LaTeX\ kernel macros that dequeue float registers from, e.g., \cmd\@deferlist, -% providing a test for the condition where the pool of free registers is about to underflow. -% -% In this case, we attempt to fix things via \cmd\force@deferlist@empty. -% \begin{macrocode} -\def\@next#1#2{% - \@ifx{#2\@empty}{\false@sw}{% - \expandafter\@xnext#2\@@#1#2% - \true@sw - }% -}% -\def\@xnext\@elt#1#2\@@#3#4{% - \def#3{#1}% - \gdef#4{#2}% - \def\@tempa{#4}\def\@tempb{\@freelist}% - \@ifx{\@tempa\@tempb}{% - \@ifx{#4\@empty}{% - \force@deferlist@empty%{Float register pool exhausted}% - }{}% - }{}% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\force@deferlist@stuck} -% \begin{macro}{\force@deferlist@empty} -% \begin{macro}{\force@deferlist@sw} -% \begin{macro}{\do@forcecolumn@pen} -% \begin{macro}{\do@forcecolumn} -% The procedure \cmd\force@deferlist@empty\ is an attempt to rectify a situation where \LaTeX's float placement mechanism -% may fail (``too many unprocessed floats''). -% -% We put down interrupts that call for the float placement to be redone, but under permissive conditions, -% just the same as if \cmd\clearpage\ had been invoked. -% -% Note that the attempt to rectify the error is contingent on the setting of \cmd\force@deferlist@sw, -% default false. A document class using this package that wishes to enable this error recovery mechanism should -% set this boolean to true. -% -% The interrupt \cmd\do@forcecolumn@pen, which invokes the procedure \cmd\do@forcecolumn, -% does the same as \cmd\do@startcolumn, except under permissive conditions: -% we are trying to empty out the float registers completely. -% -% In order to properly with the case where there is material in \cmd\box\cmd\@cclv, -% \cmd\@toplist, \cmd\@botlist, \cmd\@dbltoplist, etc, -% we do what amounts to \cmd\newpage\ to get things rolling. -% -% In \cmd\force@deferlist@stuck, we take advantage of already being in the output routine: -% simply reinvoke \cmd\do@startcolumn\ under permissive conditions. -% -% \begin{macrocode} -\def\force@deferlist@stuck#1{% - \force@deferlist@sw{% - \@booleantrue\clearpage@sw - \@booleantrue\forcefloats@sw - #1% - }{% - }% -}% -\def\force@deferlist@empty{% - \force@deferlist@sw{% - \penalty-\pagebreak@pen - \protect@penalty\do@forcecolumn@pen - }{% - }% -}% -\@booleanfalse\force@deferlist@sw -\mathchardef\do@forcecolumn@pen=10009 -\@namedef{output@-\the\do@forcecolumn@pen}{\do@forcecolumn}% -\def\do@forcecolumn{% - \@booleantrue\clearpage@sw - \@booleantrue\forcefloats@sw -% \end{macrocode} -% \begin{verbatim} -%\unvbox\@cclv -%\vfil -%\penalty-\pagebreak@pen -% \end{verbatim} -% \begin{macrocode} - \do@startcolumn -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% A more thorough revision of \LaTeX's float placement mechanism would involve substituting a single \cmd\box\ -% register for the \cmd\@deferlist. This way, \LaTeX's ability to have latent floats would be limited by -% box memory alone. -% -% Because only the \cmd\box\ and \cmd\count\ components of the float box register are actually used by \LaTeX, -% our scheme can be accomplished if we can find a way to encode the information held in the \cmd\count\ component. -% -% A first-in, first-out mechanism exists, wherein a box-penalty pair is dequeued by \cmd\lastbox\cmd\lastpenalty\cmd\unpenalty\ and enqueued -% by \cmd\setbox\cmd\foo=\cmd\hbox\cmd\bgroup\cmd\penalty\cmd\floatpenalty\cmd\box\cmd\floatbox\cmd\unhbox\cmd\foo\cmd\egroup. -% -% Note that this scheme is made possible by our change to \LaTeX's float placement mechanism, -% wherein we consolidated the two \cmd\@deferlist s into one. -% -% \section{Support for legacy \LaTeX\ commands} -% -% We provide support for the \cmd\enlargethispage\ command. -% -% Note: using a command of this sort does not automatically enlarge both pages of a spread, which would be the convention in page composition. -% -% Timing Note: In a multicolumn page grid, the user should issue the \cmd\enlargethispage\ command -% while the first column of the page is being typeset. -% We provide a helpful message if the timing is wrong. -% -% This code can serve as a model for introducing commands that need to execute within the safety of the output routine. -% We ensure that the arguments are fully expanded, then execute \cmd\do@output@MVL\ to cause an output procedure, -% \cmd\@@enlargethispage, to execute. When it does execute, the MVL will be exposed. -% -% The \cmd\@@enlargethispage\ procedure simply adjusts the vertical dimensions of the page. -% The adjustment will persist until the column is committed, at which point the page dimension -% will revert to its standard value. -% \begin{macrocode} -\def\enlargethispage{% - \@ifstar{% - \@enlargethispage{}% - }{% - \@enlargethispage{}% - }% -}% -\def\@enlargethispage#1#2{% - \begingroup - \dimen@#2\relax - \edef\@tempa{#1}% - \edef\@tempa{\noexpand\@@enlargethispage{\@tempa}{\the\dimen@}}% - \expandafter\do@output@MVL\expandafter{\@tempa}% - \endgroup -}% -\def\@@enlargethispage#1#2{% - \def\@tempa{one}% - \@ifx{\thepagegrid\@tempa}{% - \true@sw - }{% - \def\@tempa{mlt}% - \@ifx{\thepagegrid\@tempa}{% - \@ifnum{\pagegrid@cur=\@ne}{% -% \end{macrocode} -% OK to adjust this page -% \begin{macrocode} - \gdef\enlarge@colroom{#2}% - \true@sw - }{% -% \end{macrocode} -% Can only adjust this column; give up -% \begin{macrocode} - \ltxgrid@warn{Too late to enlarge this page; move the command to the first column.}% - \false@sw - }% - }{% -% \end{macrocode} -% Unknown page grid -% \begin{macrocode} - \ltxgrid@warn{Unable to enlarge a page of this kind.}% - \false@sw - }% - }% - {% - \class@info{Enlarging page \thepage\space by #2}% - \global\advance\@colroom#2\relax - \set@vsize - }{% -% \end{macrocode} -% Could not adjust this page -% \begin{macrocode} - }% -}% -\let\enlarge@colroom\@empty -% \end{macrocode} -% The \cmd\@kludgeins\ insert register is now unneeded. -% Ensure that packages using this mechanism break (preferrable to subtle bugs). -% \begin{macrocode} -\let\@kludgeins\@undefined -% \end{macrocode} -% -% \subsubsection{Building the page for shipout} -% -% \begin{macro}{\@outputpage@head} -% We set \cmd\@outputpage@head\ to make the \cmd\@outputbox\ be of fixed height. -% \changes{4.1b}{2008/08/04}{Procedure \cs{@outputpage@head} headpatches \cs{@outputpage}}% -% \begin{macrocode} -\@booleantrue\textheight@sw -\prepdef\@outputpage@head{% - \textheight@sw{% - \count@\vbadness\vbadness\@M - \dimen@\vfuzz\vfuzz\maxdimen - \setbox\@outputbox\vbox to\textheight{\unvbox\@outputbox}% - \vfuzz\dimen@ - \vbadness\count@ - }{}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@outputpage@head} -% For compatibility with David Carlisle's \classname{lscape} package, we need to allow the -% \cmd\LS@rot\ procedure to mung \cmd\@outputbox. -% -% Implementation note: the \classname{lscape} package effectively tailpatches two \LaTeX\ internals to accomplish its purpose, -% an approach that is not robust. It is more robust to headpatch \cmd\@outputpage, which is what we do here. -% \changes{4.1o}{2010/02/02}{(AO, 576) Allow \classname{lscape} to act on \cs{@outputbox} at the right time}% -% \begin{macrocode} -\appdef\@outputpage@head{% - \@ifx{\LS@rot\@undefined}{}{\LS@rot}% -}% -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Warning message} -% -% \begin{macro}{\ltxgrid@info} -% \begin{macro}{\ltxgrid@warn} -% Something has happened that the user might be interested in. -% Print a message to the log, but only if the user selected the verbose option. -% \begin{macrocode} -\def\ltxgrid@info{% - \ltxgrid@info@sw{\class@info}{\@gobble}% -}% -\@booleanfalse\ltxgrid@info@sw -\def\ltxgrid@warn{% - \ltxgrid@warn@sw{\class@warn}{\@gobble}% -}% -\@booleantrue\ltxgrid@warn@sw -\@booleanfalse\ltxgrid@foot@info@sw -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \section{Line-wise processing}% -% Sometimes we wish to process each line of type that will be placed into the galley, -% for example, applying line numbering to a document. -% To accomplish the task, we have to force a visit to the output routine after each such line, whereupon -% we can process it accordingly (in the case of line numbering, we could do as \filename{lineno.sty} and -% append an appropriately formed box to the MVL). -% -% In implementing such a scheme, we will have to instantiate interrupts for the following cases: -% \begin{description} -% -% \item[\cmd\interlinepenalty\ and friends] These include \cmd\clubpenalty, \cmd\widowpenalty, \cmd\displaywidowpenalty, and \cmd\brokenpenalty. -% -% -% \item[Display math penalties] Includes \cmd\predisplaypenalty, \cmd\postdisplaypenalty, and \cmd\interdisplaylinepenalty. -% -% -% \item[\cs{par}] The penalty following the last line of the paragraph. -% -% -% \item[\cmd\vadjust] A trap for any \cmd\vadjust\ command that falls in the paragraph. -% -% \end{description} -% -% \begin{macro}{\def@next@handler} -% \begin{macro}{\def@line@handler} -% Utility procedures \cmd\def@next@handler\ and \cmd\def@line@handler\ help in the creation of -% interrupt handlers. -% -% \cmd\def@next@handler\ increments the scratch count register (argument 1), -% using this value to \cmd\mathchardef\ its second argument -% as the negative of the flag value to be used as a penalty for exciting the interrupt (argument 3). -% As a byproduct, it leaves the given scratch counter incremented. -% \begin{macrocode} -\def\def@next@handler#1#2#3{% - \advance#1\@ne\mathchardef#2\the#1% - \expandafter\def\csname output@-\the#1\endcsname{#3}% -% \end{macrocode} -% The following line is for diagnostic purposes. -% \begin{verbatim} -% \typeout{\string#2(\expandafter\string\csname output@\the#1\endcsname:\expandafter\meaning\csname output@\the#1\endcsname)}% -% \end{verbatim} -% \begin{macrocode} -}% -% \end{macrocode} -% \cmd\def@line@handler\ uses \cmd\int@parpenalty\ as a base. -% The interrupt is the sum of that base with the first argument, -% and the handler is the second argument. -% \begin{macrocode} -\def\def@line@handler#1#2{% - \begingroup - \@tempcnta\int@parpenalty - \advance\@tempcnta-#1% -% \end{macrocode} -% The following line is for diagnostic purposes. -% \begin{verbatim} -% \typeout{Defining: \expandafter\string\csname output@\the\linenopenalty\endcsname}% -% \end{verbatim} -% \begin{macrocode} - \aftergroup\def - \expandafter\aftergroup\csname output@-\the\@tempcnta\endcsname - \endgroup{#2}% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\int@parpenalty} -% \begin{macro}{\@handle@line@ltx} -% \begin{macro}{\@@handle@line@ltx} -% We first set \cmd\int@parpenalty\ to our chosen base value${}\le -11012$. -% We then define all the handlers for lines within a paragraph, of which there are 12 different cases. -% \begin{macrocode} -\mathchardef\int@parpenalty11012 -\def@line@handler\z@{\@handle@line@ltx{}{}{}}% -\def@line@handler\@ne{\@handle@line@ltx{}{}{\brokenpenalty@ltx}}% -\def@line@handler\tw@{\@handle@line@ltx{}{\clubpenalty@ltx}{}}% -\def@line@handler\thr@@{\@handle@line@ltx{\clubpenalty@ltx}{}{\brokenpenalty@ltx}}% -\def@line@handler\f@ur{\@handle@line@ltx{\widowpenalty@ltx}{}{}}% -\def@line@handler{5}{\@handle@line@ltx{\widowpenalty@ltx}{}{\brokenpenalty@ltx}}% -\def@line@handler{6}{\@handle@line@ltx{\widowpenalty@ltx}{\clubpenalty@ltx}{}}% -\def@line@handler{7}{\@handle@line@ltx{\widowpenalty@ltx}{\clubpenalty@ltx}{\brokenpenalty@ltx}}% -\def@line@handler{8}{\@handle@line@ltx{\displaywidowpenalty@ltx}{}{}}% -\def@line@handler{9}{\@handle@line@ltx{\displaywidowpenalty@ltx}{}{\brokenpenalty@ltx}}% -\def@line@handler{10}{\@handle@line@ltx{\displaywidowpenalty@ltx}{\clubpenalty@ltx}{}}% -\def@line@handler{11}{\@handle@line@ltx{\displaywidowpenalty@ltx}{\clubpenalty@ltx}{\brokenpenalty@ltx}}% -% \end{macrocode} -% -% The default handler for lines within a paragraph simply -% restores the value of the \cmd\penalty\ to the normal value. -% If something more useful needs to be done, we can change the definition of \cmd\@@handle@line@ltx. -% \begin{macrocode} -\def\@handle@line@ltx#1#2#3{% - \@@handle@line@ltx - \@tempcnta\lastpenalty - \@tempcntb\interlinepenalty@ltx\relax - \@if@empty{#1}{}{\advance\@tempcntb#1\relax}% - \@if@empty{#2}{}{\advance\@tempcntb#2\relax}% - \@if@empty{#3}{}{\advance\@tempcntb#3\relax}% - \penalty\@ifnum{\@tempcnta<\@tempcntb}{\@tempcntb}{\@tempcnta}% -}% -\let\@@handle@line@ltx\@empty -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\int@postparpenalty} -% \begin{macro}{\int@vadjustpenalty} -% \begin{macro}{\int@whatsitpenalty} -% \begin{macro}{\int@predisplaypenalty} -% \begin{macro}{\int@interdisplaylinepenalty} -% \begin{macro}{\int@postdisplaypenalty} -% \begin{macro}{\@handle@display@ltx} -% \begin{macro}{\@@handle@display@ltx} -% \begin{macro}{\handle@par@ltx} -% We herewith define all the handlers for cases relating to display math: -% last line before a display math, -% last line of a display math, and a line within a display math. -% We also handle the last line of a paragraph, a whatsit node, and a \cmd\vadjust. -% \begin{macrocode} -\@tempcnta\int@parpenalty -\def@next@handler\@tempcnta\int@postparpenalty{\reset@queues@ltx\handle@par@ltx}% -\def@next@handler\@tempcnta\int@vadjustpenalty{\handle@vadjust@ltx}% -\def@next@handler\@tempcnta\int@whatsitpenalty{\handle@whatsit@ltx}% -\def@next@handler\@tempcnta\int@predisplaypenalty{\reset@queues@ltx\@handle@display@ltx{\predisplaypenalty@ltx}}% -\def@next@handler\@tempcnta\int@interdisplaylinepenalty{\@handle@display@ltx{\interdisplaylinepenalty@ltx}}% -\def@next@handler\@tempcnta\int@postdisplaypenalty{\@handle@display@ltx{\postdisplaypenalty@ltx}}% -% \end{macrocode} -% The default handler for display math lines simply -% restores the value of the \cmd\penalty\ to the normal value. -% If something more useful needs to be done, we can change the definition of \cmd\@@handle@display@ltx. -% \begin{macrocode} -\def\@handle@display@ltx#1{% - \@@handle@display@ltx - \@tempcnta\lastpenalty - \@tempcntb#1% - \penalty\@ifnum{\@tempcnta<\@tempcntb}{\@tempcntb}{\@tempcnta}% -}% -\let\@@handle@display@ltx\@empty -% \end{macrocode} -% -% We provide stub definitions for the handlers for the last line of a paragraph, a \cmd\vadjust, and a whatsit node (e.g., \cmd\write, \cmd\special). -% There is no canonical penalty for such cases. -% \begin{macrocode} -\def\handle@par@ltx{}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% Note that a whatsit needs to be handled differently from a \cmd\vadjust: -% a whatsit node does not affect the (crucial) depth of \cmd\box\cmd\@cclv, while the more -% general \cmd\vadjust\ may cause any kind of vertical mode material to be interposed just below the line -% we are trying to trap, in particular \cmd\vskip s and \cmd\penalty s. -% -% \begin{macro}{\set@linepenalties} -% \begin{macro}{\restore@linepenalties} -% \begin{macro}{\set@displaypenalties} -% Now we define utility procedures that set up for a paragraph to be broken into lines, -% restoring the penalties afterwards. -% -% Utility procedure \cmd\set@linepenalties\ systematically sets the penalties of paragraph breaking -% to flag values, meanwhile storing away the normal values for access by the output routine. -% \begin{macrocode} -\def\set@linepenalties{% - \expandafter\def\expandafter\interlinepenalty@ltx\expandafter{\the\interlinepenalty}% - \interlinepenalty-\int@parpenalty - \expandafter\def\expandafter\brokenpenalty@ltx\expandafter{\the\brokenpenalty}% - \brokenpenalty\@ne - \expandafter\def\expandafter\clubpenalty@ltx\expandafter{\the\clubpenalty}% - \clubpenalty\tw@ - \expandafter\def\expandafter\widowpenalty@ltx\expandafter{\the\widowpenalty}% - \widowpenalty\f@ur - \expandafter\def\expandafter\displaywidowpenalty@ltx\expandafter{\the\displaywidowpenalty}% - \displaywidowpenalty8\relax -}% -% \end{macrocode} -% -% Utility procedure \cmd\restore@linepenalties\ restores the values of the penalty parameters that were -% modified by \cmd\set@linepenalties. -% \begin{macrocode} -\def\restore@linepenalties{% - \interlinepenalty\interlinepenalty@ltx - \brokenpenalty\brokenpenalty@ltx - \clubpenalty\clubpenalty@ltx - \widowpenalty\widowpenalty@ltx - \displaywidowpenalty\displaywidowpenalty@ltx - \relax -}% -% \end{macrocode} -% -% In the following, the first argument should be a boolean (either \cmd\true@sw\ or \cmd\false@sw). -% \begin{macrocode} -\def\set@displaypenalties#1{% - \expandafter\def\expandafter\predisplaypenalty@ltx\expandafter{\the\predisplaypenalty}% - \expandafter\def\expandafter\interdisplaylinepenalty@ltx\expandafter{\the\interdisplaylinepenalty}% - \expandafter\def\expandafter\postdisplaypenalty@ltx\expandafter{\the\postdisplaypenalty}% - \@ifhmode{\predisplaypenalty-\int@predisplaypenalty\relax}{}% - #1{\interdisplaylinepenalty-\int@interdisplaylinepenalty\relax}{}% - #1{\postdisplaypenalty-\int@postdisplaypenalty\relax}{}% -}% -% \end{macrocode} -% We provide no procedure to restore the respective penalties, because they are altered within a group: -% \TeX 's context stack will automatically restore things. -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\enqueue@whatsit@ltx}% -% \begin{macro}{\handle@whatsit@ltx}% -% \begin{macro}{\do@whatsit}% -% \begin{macro}{\@g@pop@ltx}% -% Here is a facility for dealing with whatsit nodes while we are trapping paragraph lines. -% We simply enqueue a macro that will create the desired whatsit node, dequeueing it in the output routine. -% \begin{macrocode} -\def\enqueue@whatsit@ltx#1{% - \gappdef\g@whatsit@queue{{#1}}% - \vadjust{\penalty-\int@whatsitpenalty}% -}% -\def\handle@whatsit@ltx{% - \unvbox\@cclv - \g@pop@ltx\g@whatsit@queue\@tempa - \expandafter\do@whatsit\expandafter{\@tempa}% -}% -\def\do@whatsit#1{}% -\def\g@pop@ltx#1#2{% - \expandafter\@g@pop@ltx#1{}{}\@@#1#2% -}% -\def\@g@pop@ltx#1#2\@@#3#4{% - \gdef#3{#2}% - \def#4{#1}% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\vspace}% -% \begin{macro}{\pagebreak}% -% \begin{macro}{\nopagebreak}% -% \begin{macro}{\\}% -% \begin{macro}{\@arrayparboxrestore}% -% We wish to prevent \filename{lineno.sty} from patching \cmd\vspace\ and \cmd\pagebreak, -% because that package does it through global assignments, which is prone to failure. -% -% We also wish to prevent that package from patching \cmd\@arrayparboxrestore, because -% it prevents us from \cmd\unvbox ing vertical mode material into the MVL and numbering those -% lines. -% -% We start by retaining the original definitions of these commands, so we can restore them -% if \filename{lineno.sty} does get loaded. -% \begin{macrocode} -\let\vspace@ltx\vspace -\let\pagebreak@ltx\pagebreak -\let\nopagebreak@ltx\nopagebreak -\let\endline@ltx\\ -\let\@arrayparboxrestore@ltx\@arrayparboxrestore -% \end{macrocode} -% -% Next, we provide for line-wise processing by patching the procedures associated with these same three commands. -% -% Depending on the running version of \LaTeX, these commands use \cs{vskip} (before 2020-10-01), or -% \cs{@vspace@calcify} to add \textsf{calc}-like support in the kernel. To avoid duplicating the tests, -% define a macro \cs{@tempa} that takes the right form of the primitive spacing command and defines \LaTeX's -% spacing macros accordingly. -% \begin{macrocode} -\def\@tempa#1{% -% \end{macrocode} -% -% There are exactly four core \LaTeX\ procedures that use \cmd\vadjust\ to insert vertical mode material -% into the main vertical list: \cmd\vspace, \cmd\pagebreak, \cmd\nopagebreak, and \cmd\\. -% Other commands may use \cmd\vadjust, but they are inserting an interrupt (via a penalty${}<10000$), -% and such a thing does not mask the depth of \cmd\box\cmd\@cclv, hence is permissible. -% -% In each case, we replace the core \LaTeX\ procedure with one that itself replaces \cmd\vadjust\ with -% \cmd\ex@vadjust@ltx. The meaning of this procedure can be left as \cmd\vadjust, or it can be changed to -% one that accomplishes the equivalent without masking the depth of \cmd\box\cmd\@cclv. -% -% The first procedure is \cmd\@vspace, here shown in original form and in the patched alternative form. -% This procedure and \cmd\@vspacer\ implement the \cmd\vspace\ command. -% -% \begin{macrocode} -\def\@vspace@org ##1{% - \ifvmode - #1% \vskip #1 - \vskip\z@skip - \else - \@bsphack - \vadjust{\@restorepar - #1% \vskip #1 - \vskip\z@skip - }% - \@esphack - \fi -}% -\def\@vspace@ltx##1{% - \@ifvmode{% - #1% \vskip #1 - \vskip\z@skip - }{% - \@bsphack - \ex@vadjust@ltx{% - \@restorepar - \nobreak - #1% \vskip #1 - \vskip\z@skip - }% - \@esphack - }% -}% -% \end{macrocode} -% -% The second procedure is \cmd\@vspacer. -% \begin{macrocode} -\def\@vspacer@org##1{% - \ifvmode - \dimen@\prevdepth - \hrule \@height\z@ - \nobreak - #1%\vskip #1 - \vskip\z@skip - \prevdepth\dimen@ - \else - \@bsphack - \vadjust{\@restorepar - \hrule \@height\z@ - \nobreak - #1%\vskip #1 - \vskip\z@skip}% - \@esphack -\fi -}% -\def\@vspacer@ltx##1{% - \@ifvmode{% - \dimen@\prevdepth - \hrule\@height\z@ - \nobreak - #1%\vskip#1 - \vskip\z@skip - \prevdepth\dimen@ - }{% - \@bsphack - \ex@vadjust@ltx{% - \@restorepar - \hrule\@height\z@ - \nobreak - #1%\vskip#1 - \vskip\z@skip - }% - \@esphack - }% -}% -% \end{macrocode} -% -% Now define the macros above conditionally depending on the \LaTeX version. -% \begin{macrocode} -} -\rvtx@ifformat@geq{2020/10/01}% - {\@tempa{\@vspace@calcify{#1}}}% - {\@tempa{\vskip #1 }}% -% \end{macrocode} -% -% The procedure \cmd\@no@pgbk\ implements both \cmd\pagebreak\ and \cmd\nopagebreak. -% \begin{macrocode} -\def\@no@pgbk@org #1[#2]{% - \ifvmode - \penalty #1\@getpen{#2}% - \else - \@bsphack - \vadjust{\penalty #1\@getpen{#2}}% - \@esphack - \fi -}% -\def\@no@pgbk@ltx#1[#2]{% - \@ifvmode{% - \penalty#1\@getpen{#2}% - }{% - \@bsphack - \ex@vadjust@ltx{% - \penalty#1\@getpen{#2}% - }% - \@esphack - }% -}% -% \end{macrocode} -% -% The command to end a line of type, \cmd\\, is defined via \cmd\DeclareRobustCommand, -% so we must proceed carefully: -% A procedure is defined whose \cmd\long\cmd\csname\ is contructed via the incantation: -% \cmd\csname\cmd\expandafter\cmd\@gobble\cmd\string\cmd\\ \cmd\endcsname. -% Note the non-trivial space character after the \cmd\\: it is incorporated into -% the \cmd\csname. -% -% Here is the original core \LaTeX\ definition for -% the procedure involved, along with our revised version. -% \changes{2020/09/30}{4.2d}{Conditionally use \cs{protected} or \cs{long} to track \LaTeX{} changes.} -% \begin{macrocode} -\rvtx@ifformat@geq{2020/02/02}% -{\protected}{\long}\def\end@line@org{% - \let\reserved@e\relax - \let\reserved@f\relax - \@ifstar{% - \let\reserved@e\vadjust - \let\reserved@f\nobreak - \@xnewline - }% - \@xnewline -}% -\rvtx@ifformat@geq{2020/02/02}% -{\protected}{\long}\def\end@line@ltx{% - \let\reserved@e\relax - \let\reserved@f\relax - \@ifstar{% - \let\reserved@e\ex@vadjust@ltx - \let\reserved@f\nobreak - \@xnewline - }{% - \@xnewline - }% -}% -% \end{macrocode} -% An additional procedure requiring patching has the following original core \LaTeX\ -% definition; we modify it correspondingly. -% \begin{macrocode} -\def\@tempa#1{% - \def\@newline@org[##1]{% - \let\reserved@e\vadjust - \@gnewline{#1}% \vskip#1 - }% - \def\@newline@ltx[##1]{% - \let\reserved@e\ex@vadjust@ltx - \@gnewline{#1}% \vskip#1 - }% -} -\rvtx@ifformat@geq{2020/10/01}% - {\@tempa{\@vspace@calcify{#1}}}% - {\@tempa{\vskip #1}}% -% \end{macrocode} -% We now install our patches. -% If some package overrides these macros, we will detect and complain. -% -% \begin{macrocode} - \@ifx{\@vspace\@vspace@org}{% - \@ifx{\@vspacer\@vspacer@org}{% - \@ifx{\@no@pgbk\@no@pgbk@org}{% - \@ifx{\@newline\@newline@org}{% - \expandafter\@ifx\expandafter{% - \csname\rvtx@ifformat@geq{2020/02/02}% - {\expandafter\@gobble\string\\}% - {\expandafter\@gobble\string\\ }\endcsname - \end@line@org - }{% - \true@sw - }{\false@sw}% - }{\false@sw}% - }{\false@sw}% - }{\false@sw}% - }{\false@sw}% - {% - \class@info{Overriding \string\@vspace, \string\@vspacer, \string\@no@pgbk, \string\@newline, and \string\\ }% - \let\@normalcr\end@line@ltx - \expandafter\let - \csname\rvtx@ifformat@geq{2020/02/02}% - {\expandafter\@gobble\string\\}% - {\expandafter\@gobble\string\\ }\endcsname\@normalcr - \let\@newline\@newline@ltx - \let\@vspace\@vspace@ltx - \let\@vspacer\@vspacer@ltx - \let\@no@pgbk\@no@pgbk@ltx - }{% - \class@warn{% - Failed to recognize \string\@vspace, \string\@vspacer, \string\@no@pgbk, \string\@newline, and \string\\; - no patches applied. Please get a more up-to-date class, - }% - }% -% \end{macrocode} -% Note that we have assigned the same meaning to \cmd\@normalcr, which is necessary to \LaTeX. -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\ex@vadjust@ltx} -% \begin{macro}{\enqueue@vadjust@ltx} -% \begin{macro}{\handle@vadjust@ltx} -% \begin{macro}{\g@vadjust@line} -% \begin{macro}{\reset@queues@ltx} -% Here we give the default definition for \cmd\ex@vadjust@ltx\ along with -% the definitions for the alternative version and its the associated handler. -% \begin{macrocode} -\let\ex@vadjust@ltx\vadjust -\def\enqueue@vadjust@ltx#1{% - \gappdef\g@vadjust@queue{{#1}}% - \vadjust{\penalty-\int@vadjustpenalty}% -}% -\def\handle@vadjust@ltx{% - \unvbox\@cclv - \g@pop@ltx\g@vadjust@queue\@tempa - \expandafter\gappdef\expandafter\g@vadjust@line\expandafter{\@tempa}% -}% -\let\g@vadjust@line\@empty -% \end{macrocode} -% Procedure \cmd\reset@queues@ltx\ resets the whatsit queue and the \cmd\vadjust\ queues -% to their empty state. This should be done whenever we leave horizontal mode and -% complete the processing of these queues: upon executing, effectively, primitive \cmd\par\ -% or interrupting a paragraph with display math. -% \begin{macrocode} -\def\reset@queues@ltx{% - \global\let\g@whatsit@queue\@empty - \global\let\g@vadjust@queue\@empty -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \section{Patching the lineno.sty package} -% -% \filename{lineno.sty} is a \LaTeX\ package that applies line numbering to a document. -% The basic method is to give \cmd\interlinepenalty\ and like penalties such a value as -% to force a visit to the output routine, where the line of type is given its number. -% In order to properly measure the depth of \cmd\box\cmd\@cclv, it defers \cmd\vadjust\ -% commands that may insert \cmd\vskip\ or \cmd\penalty\ nodes. -% -% The implementation of that package, however, manipulates \cmd\holdinginserts\ in a dangerous -% way: outside the safety of the output routine. It also alters the meaning of \cmd\vadjust\ -% using global assignments. We patch its code to avoid these problems. The \filename{ltxgrid} -% package already has the needed mechanisms in place to do these jobs correctly. -% -% The methods we use can accomodate any values of penalties like \cmd\clubpenalty, etc: -% we do not make assumptions about the range of values these penalty parameters could take. -% -% -% \begin{macro}{\linenomathWithnumbers} -% \begin{macro}{\linenomathNonumbers} -% \begin{macro}{\endlinenomath} -% \begin{macro}{\linenumberpar} -% Here are the definitions of procedures in \filename{lineno.sty} -% that alter \cmd\holdinginserts. They are current as of version v4.41, 2005/11/02. -% We patch them to avoid doing this: in ltxgrid-based classes like REVTeX, the output routine properly manages \cmd\holdinginserts, so packages should not attempt to do so. -% Also, we will want \cmd\linenumberpar\ to set \cmd\interlinepenaly\ to dispatch to \cmd\MakeLineNo. -% -% \begin{macrocode} -\newcommand\linenomathWithnumbers@LN{% - \ifLineNumbers - \ifnum\interlinepenalty>-\linenopenaltypar - \global\holdinginserts\thr@@ - \advance\interlinepenalty \linenopenalty - \ifhmode - \advance\predisplaypenalty \linenopenalty - \fi - \advance\postdisplaypenalty \linenopenalty - \advance\interdisplaylinepenalty \linenopenalty - \fi - \fi - \ignorespaces -}% -\newcommand\linenomathNonumbers@LN{% - \ifLineNumbers - \ifnum\interlinepenalty>-\linenopenaltypar - \global\holdinginserts\thr@@ - \advance\interlinepenalty \linenopenalty - \ifhmode - \advance\predisplaypenalty \linenopenalty - \fi - \fi - \fi - \ignorespaces -}% -\def\endlinenomath@LN{% - \ifLineNumbers - \global\holdinginserts\@LN@outer@holdins - \fi - \global\@ignoretrue -} -\def\linenumberpar@LN{% - \ifvmode \@@@par \else - \ifinner \@@@par \else - \xdef\@LN@outer@holdins{\the\holdinginserts}% - \advance \interlinepenalty \linenopenalty - \linenoprevgraf \prevgraf - \global \holdinginserts \thr@@ - \@@@par - \ifnum\prevgraf>\linenoprevgraf - \penalty-\linenopenaltypar - \fi - \@LN@parpgbrk - \global\holdinginserts\@LN@outer@holdins - \advance\interlinepenalty -\linenopenalty - \fi - \fi -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\class@documenthook} -% We patch only if we recognize the definitions of all the procedures we are to patch. -% \begin{macrocode} -\appdef\class@documenthook{% - \@ifpackageloaded{lineno}{% - \@ifx{\linenomathWithnumbers\linenomathWithnumbers@LN}{% - \@ifx{\linenomathNonumbers\linenomathNonumbers@LN}{% - \@ifx{\endlinenomath\endlinenomath@LN}{% - \@ifx{\linenumberpar\linenumberpar@LN}{% - \true@sw - }{\false@sw}% - }{\false@sw}% - }{\false@sw}% - }{\false@sw}% - {% - \class@info{Overriding lineo.sty, restoring output routine,}% -% \end{macrocode} -% We commence overriding the procedures of \filename{lineno.sty}. -% \begin{macrocode} - \let\linenumberpar\linenumberpar@ltx - \let\endlinenomath\endlinenomath@ltx - \expandafter\let\csname endlinenomath*\endcsname\endlinenomath@ltx - \let\linenomathWithnumbers\linenomathWithnumbers@ltx - \let\linenomathNonumbers\linenomathNonumbers@ltx -% \end{macrocode} -% Override \filename{lineno.sty}'s equipment for \cmd\vadjust\ and \cmd\linelabel: -% we have existing interrupts and handlers for these purposes. -% \begin{macrocode} - \let\ex@vadjust@ltx\ex@vadjust@line - \let\@LN@postlabel\enqueue@whatsit@ltx - \let\do@whatsit\write@linelabel -% \end{macrocode} -% Redirect handlers to those provided by \filename{lineno.sty}, and -% give an appropriate meaning to the respective headpatch within the handlers. -% \begin{macrocode} - \let\handle@par@ltx\handle@par@LN - \let\@@handle@line@ltx\Make@LineNo@ltx - \let\@@handle@display@ltx\Make@LineNo@ltx -% \end{macrocode} -% Next, we undo the action taken by \filename{lineno.sty} wherein it -% took over the output routine. Instead, we service \filename{lineno.sty} -% existing equipment of \filename{ltxgrid}. -% We also revert the core \LaTeX\ definitions of -% \cmd\vspace, \cmd\pagebreak, \cmd\nopagebreak, and \cmd\\, -% which that package takes over (we have our own ways of doing these things). -% \begin{macrocode} - \output@latex{\natural@output}% - \let\vspace\vspace@ltx - \let\pagebreak\pagebreak@ltx - \let\nopagebreak\nopagebreak@ltx - \let\@arrayparboxrestore\@arrayparboxrestore@ltx - \let\\\endline@ltx -% \end{macrocode} -% \changes{4.1f}{2009/07/07}{(AO, 515) Prevent line numbering within a footnote} -% When line numbering is in effect, we must avoid any attempt to number the lines of a footnote. -% \begin{macrocode} - \appdef\set@footnotefont{% - \let\par\@@@par - \let\@@par\@@@par - }% -% \end{macrocode} -% At last, we detect if the \cmd\linenumbers\ command has already been given; -% if so, we do its assignments again, because we have changed the meaning of \cmd\linenumberpar. -% \begin{macrocode} - \@if@sw\ifLineNumbers\fi{% - \class@info{Reinvoke \string\linenumbers}% - \let\@@par\linenumberpar - \@ifx{\@par\linenumberpar@LN}{\let\@par\linenumberpar}{}% - \@ifx{\par\linenumberpar@LN}{\let\par\linenumberpar}{}% - }{% - \class@info{Line numbering not turned on yet}% - }% -% \end{macrocode} -% Here ends the ``true branch'' of the patch code. -% \begin{macrocode} - }{% -% \end{macrocode} -% If the \filename{lineno.sty} package is loaded, but we fail to patch it, notify the user. -% \begin{macrocode} - \class@warn{Failed to recognize lineno.sty procedures; no patches applied. Please get a more up-to-date class.}% - }% - }{% -% \end{macrocode} -% \filename{lineno.sty} is not loaded, so no patches are needed. -% \begin{macrocode} - }% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\linenumberpar} -% \begin{macro}{\@linenumberpar} -% Procedure \cmd\linenumberpar\ takes the place of \cmd\par\ when line numbering is in effect; -% It executes the \cmd\par\ primitive if we are in vertical mode. -% Otherwise we are in horizontal mode in the MVL and wish to end the current paragraph, -% or we have \cmd\unvbox ed material onto the MVL. -% -% \begin{macrocode} -\def\linenumberpar@ltx{\@ifvmode{\@@@par}{\@linenumberpar}}% -% \end{macrocode} -% -% Procedure \cmd\@linenumberpar -% \begin{macrocode} -\def\@linenumberpar{% -% \end{macrocode} -% Prepare for our trip into the output routine by -% saving away the current value of \cmd\prevgraf. -% \begin{macrocode} - \linenoprevgraf\prevgraf -% \end{macrocode} -% The following will be used in the output routine dispatcher -% to sense that we came from here. -% \begin{macrocode} - \set@linepenalties -% \end{macrocode} -% Finally, call primitive \cmd\par\ with the signal value of \cmd\interlinepenalty\ and friends. -% \begin{macrocode} - \@@@par -% \end{macrocode} -% We are now in vertical mode. -% If lines of type were contributed to the MVL (non-trivial paragraph), -% we must force another trip into the output routine to apply -% line numbering to the last line of the paragraph. -% \begin{macrocode} - \@ifnum{\prevgraf>\linenoprevgraf}{ - \penalty-\int@postparpenalty - }{}% -% \end{macrocode} -% Execute procedure \cmd\@LN@parpgbrk, which has been set up in the -% output routine for us to invoke here. -% -% \begin{macrocode} - \@LN@parpgbrk -% \end{macrocode} -% To wrap things up, we restore the original value of \cmd\interlinepenalty\ and friends. -% -% Query: why not employ \TeX's context stack to do the restore? -% Would there be something wrong with executing primitive \cmd\par\ within a group? -% \begin{macrocode} - \restore@linepenalties -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\linenomathWithnumbers} -% \begin{macro}{\linenomathNonumbers} -% Here are the patched definitions for the commands enabling -% line numbering in display math. -% \begin{macrocode} -\newcommand\linenomathWithnumbers@ltx{\@linenomathnumbers@ltx\true@sw}% -\newcommand\linenomathNonumbers@ltx{\@linenomathnumbers@ltx\false@sw}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@linenomathnumbers} -% \begin{macro}{\endlinenomath} -% We have just begun a display math, and any paragraph we are setting will now end. -% We set all relevant penalties to interrupt values; in the visit to the output routine, -% we will replace the penalty with its normal value. -% \begin{macrocode} -\def\@linenomathnumbers@ltx#1{% - \@if@sw\ifLineNumbers\fi{% - \set@linepenalties - \set@displaypenalties#1% - }{}% - \ignorespaces -}% -\def\endlinenomath@ltx{% - \global\@ignoretrue -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% We provide a handler for the last line of a paragraph. -% \begin{macrocode} -\def\handle@par@LN{% - \Make@LineNo@ltx -% \end{macrocode} -% After setting the line number, we arrange for an appropriate penalty to -% be laid down after this visit to the output routine ends. -% -% Query: why not contribute the penalty right here in the visit to the output routine? -% \begin{macrocode} - \@tempcnta\lastpenalty - \@ifnum{\@tempcnta=\z@}{}{% - \expandafter\gdef - \expandafter\@LN@parpgbrk - \expandafter{% - \expandafter\penalty - \the\@tempcnta -% \end{macrocode} -% When \cmd\@LN@parpgbrk\ is executed, it resets itself to the default value, -% \cmd\@LN@screenoff@pen. -% -% Query: \cmd\@LN@screenoff@pen\ appears to try to restore the depth of the last box: -% why is this being done outside the safety of the output routine? -% \begin{macrocode} - \global\let\@LN@parpgbrk\@LN@screenoff@pen - }% - }% -}% -% \end{macrocode} -% -% \begin{macro}{\Make@LineNo} -% The procedure \cmd\Make@LineNo\ sets the box containing the line number itself. -% \begin{macrocode} -\def\Make@LineNo@ltx{% - \@LN@maybe@normalLineNumber -% \end{macrocode} -% We measure the depth of \cmd\box\cmd\@cclv\ and unbox it. -% At this point, it is crucial that that box have the same depth as that of the last -% box within it. -% -% In the simple case, \cmd\box\cmd\@cclv\ is -% a \cmd\vbox\ containing as its last box the \cmd\hbox\ of the paragraph we are processing. -% -% Query: under what circumstances will this \emph{not} be the case? -% \begin{macrocode} - \boxmaxdepth\maxdimen\setbox\z@\vbox{\unvbox\@cclv}% - \@tempdima\dp\z@ - \unvbox\z@ -% \end{macrocode} -% Then we create the box with the line number, setting its height to zero. -% \begin{macrocode} - \sbox\@tempboxa{\hb@xt@\z@{\makeLineNumber}}% - \ht\@tempboxa\z@ -% \end{macrocode} -% With these preparations, we invoke \cmd\@LN@depthbox, which -% lays that box down (with its depth appropriately set): -% this procedure depends on our having set \cmd\@tempdima\ and \cmd\@tempboxa -% (kinda kludgy way of passing arguments, really). -% \begin{macrocode} - \@LN@depthbox -% \end{macrocode} -% Now increment the line number. I have relocated this token past \cmd\@LN@depthbox: -% this may induce a bug, but I am going to hereby force the issue: -% why split up the procedure that lays down boxes with a procedure that sets a register value? -% \begin{macrocode} - \stepLineNumber -% \end{macrocode} -% Finally, execute the \cmd\vadjust s that fell within the line that we just handled. -% -% Note that \cmd\enqueue@vadjust@ltx\ had queued up all the \cmd\vadjust\ commands for the paragraph -% into \cmd\g@vadjust@queue, laying down an (\cmd\int@vadjustpenalty) interrupt in each ones' place. -% The interrupts associated with this line of the paragraph have now moved the tokens to \cmd\g@vadjust@line, -% which we now expand and execute. -% \begin{macrocode} - \g@vadjust@line - \global\let\g@vadjust@line\@empty -}% -% \end{macrocode} -% -% \begin{macrocode} -\def\write@linelabel#1{% - \protected@write\@auxout{}{% - \string\newlabel{#1}{{\theLineNumber}{\thepage}{}{}{}}% - }% -}% -% \end{macrocode} -% -% \begin{macrocode} -\def\ex@vadjust@line{% - \@if@sw\ifLineNumbers\fi{\enqueue@vadjust@ltx}{\vadjust}% -}% -% \end{macrocode} -% \end{macro} -% -% Note that the \cmd\linelabel\ commands use a mechanism different from \cmd\vadjust, -% embodied in the procedure \cmd\enqueue@vadjust@ltx, wherein the -% \cmd\write\ primitives are enqueued while the paragraph is being processed, each replaced with -% an interrupt, then dequeued and executed by the interrupt handler, leaving a \cmd\write\ node -% in place of the interrupt (just where the \cmd\vadjust 's vertical mode material would had been) -% just below the box containing the line of type. This \cmd\write, like all whatsits, -% does not affect the depth of \cmd\box\cmd\@cclv, unlike the case of general vertical mode material, -% which could have interfered. -% -% \section{End of the \file{ltxgrid} {\sc docstrip} module} -% Here ends the module. -% \begin{macrocode} -%</kernel> -% \end{macrocode} -% -% \Finale -% %Here ends the programmer's documentation. -% \endinput -% -\endinput -%%EOF diff --git a/macros/latex/contrib/revtex/source/ltxutil.dtx b/macros/latex/contrib/revtex/source/ltxutil.dtx deleted file mode 100644 index 4689c417a1..0000000000 --- a/macros/latex/contrib/revtex/source/ltxutil.dtx +++ /dev/null @@ -1,4461 +0,0 @@ -% \iffalse meta-comment balanced on line 107 -% ltxutil.dtx: utilities package -% Copyright (c) 2009 Arthur Ogawa -% -% Disclaimer -% This file is distributed WITHOUT ANY WARRANTY; -% without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -% License -% You may distribute this file under the conditions of the -% LaTeX Project Public License 1.3c or later -% (http://www.latex-project.org/lppl.txt). -% ReadMe -% For the documentation and more detailed instructions for -% installation, typeset this document with \LaTeX. -% Maintenance Status -% This work has the LPPL maintenance status "maintained"; -% Current Maintainer of this work is Arthur Ogawa -% changes for version 4.2d--4.2f by Phelype Oleinik. -% -% This work consists of the main source file ltxutil.dtx -% and the derived files -% ltxutil.sty, ltxutil.pdf -% Distribution: -% CTAN:macros/latex/contrib/revtex/ -% -% Unpacking: -% tex ltxutil.dtx -% -% Documentation: -% latex ltxutil.dtx; ... -% -% Program calls to get the documentation (example): -% pdflatex ltxutil.dtx -% makeindex -s gind.ist ltxutil.idx -% makeindex -s gglo.ist -o ltxutil.gls ltxutil.glo -% pdflatex ltxutil.dtx -% makeindex -s gind.ist ltxutil.idx -% pdflatex ltxutil.dtx -% -% Installation: -% TDS:doc/latex/revtex/ -% TDS:source/latex/revtex/ -% TDS:tex/latex/revtex/ -% -% Thanks, Heiko! -% This method of letting a single .dtx file serve as both -% documentation (via latex) and installer (via tex) follows -% the example of Heiko Oberdiek. Thanks! -%<*ignore> -\begingroup - \def\x{LaTeX2e}% -\expandafter\endgroup -\ifcase - 0\expandafter\ifx\csname processbatchFile\endcsname\relax\else1\fi\ifx\fmtname\x\else 1\fi - \relax -\else - \csname fi\endcsname -%</ignore> -%<*install> -\input docstrip -\preamble - -This is a generated file; -altering it directly is inadvisable; -instead, modify the original source file. -See the URL in the file README-LTXUTIL.tex. - -License - You may distribute this file under the conditions of the - LaTeX Project Public License 1.3c or later - (http://www.latex-project.org/lppl.txt). - - This file is distributed WITHOUT ANY WARRANTY; - without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. - -\endpreamble -\askforoverwritefalse -\keepsilent - \generate{% - %{ignore} - \file{ltxutil.sty}{% - \from{ltxutil.dtx}{package,kernel}% - }% - \file{ltxutil.krn}{% - \from{ltxutil.dtx}{kernel}% - }% - }% -\ifToplevel{ -\Msg{***********************************************************} -\Msg{*} -\Msg{* To finish the installation, please move} -\Msg{* ltxutil.sty} -\Msg{* into a directory searched by TeX;} -\Msg{* in a TDS-compliant installation:} -\Msg{* texmf/tex/macros/latex/revtex/.} -\Msg{*} -\Msg{* To produce the documentation, - run ltxutil.dtx through LaTeX.} -\Msg{*} -\Msg{* Happy TeXing} -\Msg{***********************************************************} -} -\endbatchfile -%</install> -%<*ignore> -\fi -%</ignore> -% \fi -% -% \GetFileInfo{ltxutil.dtx} -% -% \iffalse ltxdoc klootch -%<*package> -%%% @LaTeX-file{ -%%% filename = "ltxutil.dtx", -%%% version = "4.2f", -%%% date = "2022/06/05", -%%% author = "Arthur Ogawa (mailto:arthur_ogawa at sbcglobal.net), -%%% Phelype Oleinik (mailto:phelype.oleinik at latex-project.org), -%%% commissioned by the American Physical Society. Minor changes by Mark Doyle for version 4.2a-c. -%%% ", -%%% copyright = "Copyright (C) 1999, 2009 Arthur Ogawa, -%%% distributed under the terms of the -%%% LaTeX Project Public License 1.3c, see -%%% ftp://ctan.tug.org/macros/latex/base/lppl.txt -%%% ", -%%% address = "Arthur Ogawa, -%%% USA", -%%% telephone = "", -%%% FAX = "", -%%% email = "mailto colon arthur_ogawa at sbcglobal.net", -%%% codetable = "ISO/ASCII", -%%% keywords = "latex, page grid, main vertical list", -%%% supported = "yes", -%%% abstract = "utilities package", -%%% } -%</package> -% \fi -% -% \iffalse ltxdoc klootch -% The following references the \file{README-LTXUTIL} file, -% which contains basic information about this package. -% The contents of this file are generated when -% you typeset the programmer's documentation. -% Search on "{filecontents*}{README-LTXUTIL}" to locate it. -% \fi\input{README-LTXUTIL}% -% -% \subsection{Bill of Materials} -% -% Following is a list of the files in this distribution arranged -% according to provenance. -% -% \subsubsection{Primary Source}% -% One single file generates all. -%\begin{verbatim} -%ltxutil.dtx -%\end{verbatim} -% -% \subsubsection{Generated by \texttt{latex ltxutil.dtx}}% -% Typesetting the source file under pdflatex -% generates the readme and the documentation. -%\begin{verbatim} -%README-LTXUTIL ltxutil.pdf -%\end{verbatim} -% -% \subsubsection{Generated by \texttt{tex ltxutil.dtx}}% -% Typesetting this file with \TeX\ generates -% the package file. -%\begin{verbatim} -%ltxutil.sty -%\end{verbatim} -% -% \subsubsection{Auxiliary}% -% The following are auxiliary files generated -% in the course of running \LaTeX: -% \begin{verbatim} -%ltxutil.aux ltxutil.idx ltxutil.ind ltxutil.log ltxutil.toc -% \end{verbatim} -% -% \section{Code common to all modules}% -% -% We want to require only one place in this file -% where the version number is stated, -% and we also want to ensure that the version -% number is embedded into every generated file. -% -% Now we declare that -% these files can only be used with \LaTeXe. -% An appropriate message is displayed if -% a different \TeX{} format is used. -% \begin{macrocode} -%<*doc|package> -\NeedsTeXFormat{LaTeX2e}[1995/12/01]% -%</doc|package> -% \end{macrocode} -% As desired, the following modules all -% take common version information: -% \begin{macrocode} -%<kernel&!package&!doc>\typeout{% -%<*package|doc> -\ProvidesFile{% -%</package|doc> -%<*kernel|package|doc> -ltxutil% -%</kernel|package|doc> -%<*doc> -.dtx% -%</doc> -%<package>.sty% -%<*package|doc> -}% -%</package|doc> -% \end{macrocode} -% -% The following line contains, for once and for all, -% the version and date information. -% By various means, this information is reproduced -% consistently in all generated files and in the -% typeset documentation. -% Give credit where due. -% \begin{macrocode} -%<*doc|package|kernel> -%<version> - [2022/06/05 4.2f utilities package (portions licensed from W. E. Baxter web at superscript.com)]% \fileversion -%</doc|package|kernel> -%<kernel&!package&!doc>}% -% \end{macrocode} -% -% -% \section{The driver module \texttt{doc}} -% -% This module, consisting of the present section, -% typesets the programmer's documentation, -% generating the \file{README-LTXUTIL} as required. -% -% Because the only uncommented-out lines of code at the beginning of -% this file constitute the \file{doc} module itself, -% we can simply typeset the \file{.dtx} file directly, -% and there is thus rarely any need to -% generate the ``doc'' {\sc docstrip} module. -% Module delimiters are nonetheless required so that -% this code does not find its way into the other modules. -% -% The \enve{document} command concludes the typesetting run. -% -% \begin{macrocode} -%<*doc> -% \end{macrocode} -% -% \subsection{The Preamble} -% The programmers documentation is formatted -% with the \classname{ltxdoc} class with local customizations, -% and with the usual code line indexing. -% \begin{macrocode} -\documentclass{ltxdoc} -\RequirePackage{ltxdocext}% -\let\url\undefined -\RequirePackage[colorlinks=true,linkcolor=blue]{hyperref}% -\pdfstringdefDisableCommands{% - \let\file\relax - \let\sc\relax -} -%\expandafter\ifx\csname package@font\endcsname\@undefined\else -% \expandafter\RequirePackage\expandafter{\csname package@font\endcsname}% -%\fi -\CodelineIndex\EnableCrossrefs % makeindex -s gind.ist ltxutil -\RecordChanges % makeindex -s gglo.ist -o ltxutil.gls ltxutil.glo -% \end{macrocode} -% -% \subsubsection{Docstrip and info directives} -% We use so many {\sc docstrip} modules that we set the -% \texttt{StandardModuleDepth} counter to 1. -% \begin{macrocode} -\setcounter{StandardModuleDepth}{1} -% \end{macrocode} -% The following command retrieves the date and version information -% from this file. -% \begin{macrocode} -\expandafter\GetFileInfo\expandafter{\jobname.dtx}% -% \end{macrocode} -% -% \subsection{The ``Read Me'' File} -% As promised above, here is the contents of the -% ``Read Me'' file. That file serves a double purpose, -% since it also constitutes the beginining of the -% programmer's documentation. What better thing, after -% all, to have appear at the beginning of the -% typeset documentation? -% -% A good discussion of how to write a ReadMe file can be found in -% Engst, Tonya, ``Writing a ReadMe File? Read This'' -% \emph{MacTech} October 1998, p. 58. -% -% Note the appearance of the -% \cmd\StopEventually\ command, which marks the -% dividing line between the user documentation -% and the programmer documentation. -% -% The usual user will not be asked to -% do a full build, not to speak -% of the bootstrap. -% Instructions for carrying out these procedures -% begin the programmer's manual. -% -% \begin{macrocode} -\begin{filecontents*}{README-LTXUTIL} -\title{% - A \LaTeX\ Package of utility macros% - \thanks{% - This file has version number \fileversion, - last revised \filedate.% - }% - \thanks{% - Version \fileversion\ \copyright\ 2019--2022 American Physical Society - }% -}% -\author{% - Arthur Ogawa% - \thanks{\texttt{mailto:arthur\_ogawa at sbcglobal.net}}% -}% -%\iffalse -% For version number and date, -% search on "\fileversion" in the .dtx file, -% or see the end of the README-LTXUTIL file. -%\fi -\maketitle - -This file embodies the \classname{ltxutil} package, -the implementation and its user documentation. - -The distribution point for this work is -\url{journals.aps.org/revtex}, -which contains prebuilt runtime files, documentation, and full source, -ready to add to a TDS-compliant \TeX\ installation. - -The \classname{ltxutil} package was commissioned by the American Physical Society -and is distributed under the terms of the \LaTeX\ Project Public License 1.3c, -the same license under which all the portions of \LaTeX\ itself are distributed. -Please see \url{http://ctan.tug.org/macros/latex/base/lppl.txt} for details. - -To use this document class, you must have a working -\TeX\ installation equipped with \LaTeXe\ -and possibly pdftex and Adobe Acrobat Reader or equivalent. - -To install, retrieve the distribution, -unpack it into a directory on the target computer, -and move the file \file{ltxutil.sty} -into a location in your filesystem where it will be found by \LaTeX. - -To use, read the user documentation \file{ltxutil.pdf}. - -\tableofcontents - -\section{Processing Instructions} - -The package file \file{ltxutil.sty} -is generated from this file, \file{ltxutil.dtx}, -using the {\sc docstrip} facility of \LaTeX -via |tex ltxutil.dtx| (Note: do \emph{not} use \LaTeX\ for this task). -The typeset documentation that you are now reading is generated from -the same file by typesetting it with \LaTeX\ or pdftex -via |latex ltxutil.dtx| or |pdflatex ltxutil.dtx|. - -\subsection{Build Instructions} - -You may bootstrap this suite of files solely from \file{ltxutil.dtx}. -Prepare by installing \LaTeXe\ (and either tex or pdftex) on your computer, -then carry out the following steps: -\begin{enumerate} -\item -Within an otherwise empty directory, -typeset \file{ltxutil.dtx} with \LaTeX\ or pdflatex; -you will obtain the typeset documentation you are now reading, -along with the file \file{README-LTXUTIL}. - -Note: you will have to run \LaTeX, then -\file{makeindex} \texttt{-s gind.ist ltxutil.idx}, then -\file{makeindex} \texttt{-s gglo.ist -o ltxutil.gls ltxutil.glo}, then -\LaTeX\ again in order to obtain a valid index and table of contents. -\item -Now typeset \file{ltxutil.dtx} with \TeX (not \LaTeX), -thereby generating the package file \file{ltxutil.sty}. -\item -Install the following files into indicated locations within your -TDS-compliant \texttt{texmf} tree (you may need root access): -\begin{itemize} -\item -\file{$TEXMF/}\file{tex/}\file{latex/}\file{revtex/}\classname{ltxutil.sty} -\item -\file{$TEXMF/}\file{source/}\file{latex/}\file{revtex/}\classname{ltxutil.dtx} -\item -\file{$TEXMF/}\file{doc/}\file{latex/}\file{revtex/}\classname{ltxutil.pdf} -\end{itemize} -where \file{$TEXMF/} stands for \file{texmf-local/}, or some other \texttt{texmf} tree -in your installation. -\item -Run \texttt{mktexlsr} on \file{$TEXMF/} (you may need root access). -\item -Build and installation are now complete; -now put a \cmd\usepackage\texttt{\{ltxutil\}} in your document preamble! -\end{enumerate} - -\subsection{Change Log} -\changes{4.0b}{1999/06/20}{AO: Fixed spurious \texttt{CR} and (return) characters in output file. Also, if the document did not have the \cs{end}\texttt{figure} on a line of its own, the macro wouldn't work. Fixed.} -\changes{4.0b}{1999/06/20}{AO: Removed superfluous \cs{def}s, changed to using \cs{floats@sw} as the flag. Also stopped using DPC's \cs{if@twocolumn} flag: using \cs{floats@sw} instead. Also added \cs{par}\cs{vskip}\cs{z@skip} after the \cs{minipagefootnotes} so that the float box would have zero depth like the kernel one. } -\changes{4.0b}{1999/06/20}{only execute if there really were floats of the given type} -\changes{4.0b}{1999/06/20}{Support the hack with \cs{prepdef}, and delay until \cs{AtBeginDocument} time, since \classname{hyperref} clobbers \cs{caption}.} -\changes{4.0c}{1999/11/13}{(AO, 110) Install hooks for endfloats processing} -\changes{4.0c}{1999/11/13}{(AO, 116) Hyperref compatibility} -\changes{4.0c}{1999/11/13}{(AO, 130) Interference from array package} -\changes{4.0c}{1999/11/13}{*-form mandates pagebreak at each float; only print section head if there is something there.} -\changes{4.0d}{2000/04/10}{(AO, 127) Floats placed [h] to allow page breaks} -\changes{4.0d}{2000/04/10}{(AO, 174) kernel fix} -\changes{4.0d}{2000/05/19}{(AO, 224) Hyperref compatibility.} -\changes{4.0d}{2000/05/23}{Allow things to break over pages by setting array@default.} -\changes{4.0e}{2000/11/16}{(AO, 221) Remove samepage command from @xfloat@prep: If the float can break over pages, we want better control.} -\changes{4.0f}{2001/07/13}{(AO, 404) Hyperref compatibility} -\changes{4.1a}{2008/01/19}{(AO, 459) do not assume \cs{class@name} is defined}% -\changes{4.1a}{2008/01/19}{(AO, 461) Change the csname from \cs{@dotsep} to \cs{ltxu@dotsep}. The former is understood in mu. (What we wanted was a dimension.)}% -\changes{4.1a}{2008/01/19}{(AO, 475) I had not properly reproduced the LaTeX macro \cs{eqnarray}.}% -\changes{4.1a}{2008/01/19}{(AO, 479) Per: Dylan Thurston<dpt at math.harvard.edu>}% -\changes{4.1a}{2008/06/30}{(AO) Make \cs{addtocontents} a \cs{long} \cs{def}; gobble up \cs{footnote}}% -\changes{4.1a}{2008/06/30}{(AO) Remove code that avoided changes to \cs{@xfootnotemark}}% -\changes{4.1a}{2008/06/30}{(AO, 438) Complete rewrite of footnote macros.} -\changes{4.1a}{2008/07/07}{\cs{@xfloat@prep} calls \cs{ltx@footnote@pop} to restore the original \cs{ltx@footmark} and \cs{ltx@foottext} procedures, in case footnote processing has switched.} -\changes{4.1a}{2008/08/12}{\cs{class@documenthook} is the last \cs{AtBeginDocument} token now} -\changes{4.1a}{2008/08/12}{Class extension mechanism \cs{@pushfilename@ltx} and \cs{@p@pfilename@ltx}.} -\changes{4.1a}{2008/08/12}{Class extension mechanism \cs{class@extension}, \cs{class@extensionfile}, and \cs{class@ext@hook}.} -\changes{4.1a}{2008/08/12}{Get rid of \cs{set@typesize@hook} \cs{set@pica@hook} and the \cs{normalsize} directive}% -\changes{4.1b}{2008/08/12}{(AO, 487) Support for video figures and the \cs{setfloatlink} command}% -\changes{4.1b}{2008/08/12}{(AO, 505) try to accommodate \classname{colortbl}.} -\changes{4.1b}{2008/08/12}{Acquire \classname{hyperref} savoire} -\changes{4.1b}{2008/08/12}{Default assignment of \cs{float@sw} now, not at \cs{AtBeginDocument} time.}% -\changes{4.1b}{2008/08/12}{If class option \classoption{lengthcheck} is in effect, log the height of this float class.} -\changes{4.1b}{2008/08/12}{No need to protect against undefined \cs{float@sw}} -\changes{4.1b}{2008/08/12}{Patch the array package even later: after all package patches go in.} -\changes{4.1b}{2008/08/12}{Refine toc processing: provide default.}% -\changes{4.1b}{2008/08/12}{Tally and log the height of a float class} -\changes{4.1d}{2009/03/27}{(AO, 511) Compatability with lineno.sty's erroneous way of detecting fleqn.clo}% -\changes{4.1f}{2009/07/07}{(AO, 515) Hook for setting the font of a footnote} -\changes{4.1f}{2009/07/10}{(AO, 518) Tally register overflow when locument is long} -\changes{4.1g}{2009/10/06}{(AO, 532) Both arguments of \cs{href} get sanitized}% -\changes{4.1g}{2009/10/07}{(AO, 525) Remove phantom paragraph above display math that is given in vertical mode}% -\changes{4.1g}{2009/10/07}{(AO, 539) Use of double-backslash in argument of \cs{section} gives error. The \classname{textcase} package is involved.}% -\changes{4.1n}{2009/12/05}{(AO, 569) Use of \classname{hyperref} interferes with column balancing of last page}% -\changes{4.1n}{2009/12/06}{(AO) Incorporate change to ltmiscen.dtx v1.1i 2000/05/19}% -\changes{4.1n}{2009/12/09}{(AO, 569) execute \classname{atveryend}'s \cs{Call@AfterLastShipout} at the proper time}% -\changes{4.1n}{2009/12/13}{(AO, 574) protect against \classname{lineno.sty}, which forces a visit to the output routine, which appears to destroy the value of \cs{@tempdima}}% -\changes{4.1n}{2010/01/02}{(AO, 571) Interface \cs{set@footnotewidth} for determining the set width of footnotes}% -\changes{4.1n}{2010/01/02}{(AO, 571) allow split after last line of footnote}% -\changes{4.1n}{2010/01/06}{(AO, 572) title block footnotes numbered independently from body footnotes}% -\changes{4.1p}{2010/02/24}{(AO, 582) A patch of \classname{hyperref.sty} to provide backward compatibility to \TeX Live 2007's version 6.75r}% -\changes{4.2a}{2017/11/21}{(MD) Use updated best practice to use https and doi.org}% -\changes{4.2a}{2018/12/12}{(MD) Updated name of README file and use standard fonts when typesetting}% -\changes{4.2d}{2020/09/19}{(PHO) Adapt \cs{document} and \cs{enddocument} hooks to the 2020-10-01 \LaTeX{} release.}% - -\end{filecontents*} -% \end{macrocode} -% -% \subsection{The Document Body} -% -% Here is the document body, containing only a -% \cmd\DocInput\ directive---referring to this very file. -% This very cute self-reference is a common \classname{ltxdoc} idiom. -% \begin{macrocode} -\begin{document}% -\expandafter\DocInput\expandafter{\jobname.dtx}% -\end{document} -% \end{macrocode} -% -% \begin{macrocode} -%</doc> -% \end{macrocode} -% -% \section{Using this package} -% Once this package is installed on your filesystem, you can employ it in -% adding functionality to \LaTeX\ by invoking it in your document or document class. -% -% \subsection{Invoking the package} -% In your document, you can simply call it up in your preamble: -% \begin{verbatim} -%\documentclass{book}% -%\usepackage{ltxutil}% -%\begin{document} -%<your document here> -%\end{document}\end{verbatim} -% However, the preferred way is to invoke this package from within your -% customized document class: -% \begin{verbatim} -%\NeedsTeXFormat{LaTeX2e}[1995/12/01]% -%\ProvidesClass{myclass}% -%\RequirePackage{ltxutil}% -%\LoadClass{book}% -%<class customization commands> -%\endinput\end{verbatim} -% -% Once loaded, the package gives you acccess to certain procedures, -% usually to be invoked by a \LaTeX\ command or environment, but not at the document level. -% -% -% \section{Compatibility with \LaTeX's Required Packages} -% Certain packages, usually ones written by members of the -% \LaTeX\ Project itself, have been designated ``required'' and -% are distributed as part of standard \LaTeX. -% These packages have been placed in a priviledged position -% vis \'a vis the \LaTeX\ kernel in that they override the definitions of certain kernel macros. -% -% The \classname{ltxutil} package will be incompatible with any package that -% redefines any of the kernel macros that \classname{ltxutil} patches---if that -% package is loaded \emph{after} \classname{ltxutil}. This means that for -% greatest compatibility, \classname{ltxutil} should be loaded \emph{after}, -% say, \classname{ftnright}, which overwrites \LaTeX's kernel -% procedures \cmd\@outputdblcol, \cmd\@startcolumn, and \cmd\@makecol. -% -% Hereinafter follows some notes on specific \LaTeX\ packages. -% -% \subsection{array} -% This package alters the way tabular environments are done, -% therefore it could run afoul of the \LaTeX\ ``required'' package \classname{array} or any -% package that calls for it to be loaded. -% However, this package has provisions for remaining compatible with \classname{array}. -% So long as the version of \classname{array} that is used with this package has the appropriate -% meanings for the procedures it overwrites, all should be well. -% -% \subsection{longtable} -% David Carlisle's \classname{longtable} package modifies both the \LaTeX\ kernel and the -% \classname{array} package. This package must therefore alter \cmd\LT@array. -% For now, that job is handled by \classname{ltxgrid}. -% -% -%\StopEventually{} -% -% \section{Implementation of package} -% -% Special acknowledgment: this package uses concepts pioneered -% and first realized by William Baxter (mailto:web at superscript.com) -% in his SuperScript line of commercial typesetting tools, and -% which are used here with his permission. -% -% \subsection{Beginning of the \file{package} {\sc docstrip} module} -% \begin{macrocode} -%<*package> -\def\package@name{ltxutil}% -\expandafter\PackageInfo\expandafter{\package@name}{% - Utility macros for \protect\LaTeXe, - by A. Ogawa (arthur_ogawa at sbcglobal.net)% -}% -%</package> -% \end{macrocode} -% -% \subsection{Banner and beginning of the \file{kernel} {\sc docstrip} module}% -% \begin{macrocode} -%<*kernel> -% \end{macrocode} -% -% \subsection{Errors and warnings} -% -% \begin{macro}{\class@err} -% \begin{macro}{\class@warn} -% \begin{macro}{\class@info} -% A few shorthands for Class messages. -% Your document class should define \cmd\class@name. -% \begin{macrocode} -\def\class@err#1{\ClassError{\class@name}{#1}\@eha}% -\def\class@warn#1{\ClassWarningNoLine{\class@name}{#1}}% -\def\class@info#1{\ClassInfo{\class@name}{#1}}% -\def\obsolete@command#1{% - \class@warn@end{Command \string#1\space is obsolete.^^JPlease remove from your document}% - \global\let#1\@empty - #1% -}% -\def\replace@command#1#2{% - \class@warn@end{Command \string#1\space is obsolete;^^JUse \string#2\space instead}% - \global\let#1#2% - #1% -}% -\def\replace@environment#1#2{% - \class@warn@end{Environment #1 is obsolete;^^JUse #2 instead}% - \glet@environment{#1}{#2}% - \@nameuse{#1}% -}% -\def\incompatible@package#1{% - \@ifpackageloaded{#1}{% - \def\@tempa{I cannot continue. You must remove the \string\usepackage\ statement that caused that package to be loaded.}% - \ClassError{\class@name}{The #1 package cannot be used with \class@name}% - \@tempa\stop - }{% - \class@info{#1 was not loaded (OK!)}% - }% -}% -\def\class@warn@end#1{% - \gappdef\class@enddocumenthook{\class@warn{#1}}% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \changes{4.1a}{2008/01/19}{(AO, 459) do not assume \cs{class@name} is defined}% -% Give \cmd\class@name\ a meaning if it does not already have one. -% \begin{macrocode} -\ifx\undefined\class@name - \def\class@name{ltxutil}% - \class@warn{You should define the class name before reading in this package. Using default}% -\fi -% \end{macrocode} -% -% \subsection{New Tools}% -% -% \begin{macro}{\t@} -% \begin{macrocode} -\def\t@{to}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\dimen@iii} -% \begin{macrocode} -\dimendef\dimen@iii\thr@@ -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\halignt@} -% \begin{macrocode} -\def\halignt@{\halign\t@}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\f@ur} -% Analogous to \cmd\@ne, \cmd\tw@, and \cmd\thr@@. -% \begin{macrocode} -\chardef\f@ur=4\relax -\chardef\cat@letter=11\relax -\chardef\other=12\relax -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\let@environment} -% \begin{macro}{\glet@environment} -% The directive \cmd\let@environment\ takes care of a common programming -% idiom whereby one environment is made a synonym for another. -% \begin{macrocode} -\def\let@environment#1#2{% - \expandafter\let - \csname#1\expandafter\endcsname\csname#2\endcsname - \expandafter\let - \csname end#1\expandafter\endcsname\csname end#2\endcsname -}% -\def\glet@environment#1#2{% - \global\expandafter\let - \csname#1\expandafter\endcsname\csname#2\endcsname - \global\expandafter\let - \csname end#1\expandafter\endcsname\csname end#2\endcsname -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\tracingplain} -% The command \cmd\tracingplain\ causes \TeX's tracing parameters to -% return to the values set by default. This command is sometimes -% useful when you have said \cmd\tracingall\ somewhere and want to -% restore. -% The \cmd\traceoutput\ command causes \cmd\tracingoutput\ diagnostics -% upon \cmd\shipout. -% \begin{macrocode} -\newcommand\tracingplain{% - \tracingonline\z@\tracingcommands\z@\tracingstats\z@ - \tracingpages\z@\tracingoutput\z@\tracinglostchars\@ne - \tracingmacros\z@\tracingparagraphs\z@\tracingrestores\z@ - \showboxbreadth5\showboxdepth3\relax %\errorstopmode - }% -\newcommand\traceoutput{% - \appdef\@resetactivechars{\showoutput}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\say} -% \begin{macro}{\saythe} -% The commands \cmd\say\ and \cmd\saythe\ cause diagnostic messages in the -% \TeX\ log that give the value of a control sequence name or a register -% respectively. -% \begin{macrocode} -\newcommand\say[1]{\typeout{<\noexpand#1=\meaning#1>}}% -\newcommand\saythe[1]{\typeout{<\noexpand#1=\the#1>}}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\fullinterlineskip} -% Resets the \cmd\prevdepth\ so that the full amount of \cmd\baselineskip\ glue will be inserted by -% the \cmd\baselinesklip\ mechanism. -% Can be invoked just after a \cmd\hrule\ to undo its default suppression of base line skip. -% \begin{macrocode} -\def\fullinterlineskip{\prevdepth\z@}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\count@i} -% \begin{macro}{\count@ii} -% -% \begin{macrocode} -\countdef\count@i\@ne -\countdef\count@ii\tw@ -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% -% \subsection{Boolean Control}% -% We introduce just enough of the Boolean calculus for \TeX. -% Alan Jeffrey was the pioneer here, with an article in TUGboat -% (Vol. 11, No. 2, page 237). -% This implementation owes a debt to -% William Baxter (web at superscript.com). -% See articles by Baxter and Ogawa in the proceedings of the -% 1994 TUG meeting, TUGboat Vol.~15, No.~3. -% -% \begin{macro}{\prepdef} -% \begin{macro}{\appdef} -% \begin{macro}{\gappdef} -% -% Provide the capability of performing head- and tail patches. -% The procedure \cmd\prepdef\ prepends to the given macro -% the tokens specified in its second argument. -% Likewise for \cmd\appdef, except that it appends. -% Note that the first 10 toks registers are utility registers, -% and we simply make a control sequence name, \cmd\toks@ii, for one of -% them. -% \begin{macrocode} -\long\def\prepdef#1#2{% - \@ifxundefined#1{\toks@{}}{\toks@\expandafter{#1}}% - \toks@ii{#2}% - \edef#1{\the\toks@ii\the\toks@}% -}% -\long\def\appdef#1#2{% - \@ifxundefined#1{\toks@{}}{\toks@\expandafter{#1}}% - \toks@ii{#2}% - \edef#1{\the\toks@\the\toks@ii}% -}% -\long\def\gappdef#1#2{% - \@ifxundefined#1{\toks@{}}{\toks@\expandafter{#1}}% - \toks@ii{#2}% - \global\edef#1{\the\toks@\the\toks@ii}% -}% -\long\def\appdef@val#1#2{% - \appdef#1{{#2}}% -}% -\long\def\appdef@e#1#2{% - \expandafter\appdef - \expandafter#1% - \expandafter{#2}% -}% -\long\def\appdef@eval#1#2{% - \expandafter\appdef@val - \expandafter#1% - \expandafter{#2}% -}% -\toksdef\toks@ii=\tw@ -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@ifxundefined} -% \begin{macro}{\@ifnotrelax} -% \begin{macro}{\@argswap} -% \begin{macro}{\@argswap@val} -% -% Certain utility procedures use \cmd\@ifxundefined, -% which is defined here in terms of \cmd\@ifx. -% Others use \cmd\@ifnotrelax, namely when -% the control sequence name is manufactured by -% the use of \cmd\csname. -% -% The procedures \cmd\@argswap and \cmd\@argswap@val -% are used to facilitate control of expansion. -% -% \begin{macrocode} -\long\def\@ifxundefined#1{\@ifx{\undefined#1}}% -\long\def\@ifnotrelax#1#2#3{\@ifx{\relax#1}{#3}{#2}}% -\long\def\@argswap#1#2{#2#1}% -\long\def\@argswap@val#1#2{#2{#1}}% -\def\@ifxundefined@cs#1{\expandafter\@ifx\expandafter{\csname#1\endcsname\relax}}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\rvtx@ifformat@geq} -% Some changes in the \LaTeX{} kernel requires us to conditionally -% define some macros depending on the version of the kernel. -% \cmd\rvtx@ifformat@geq{} will check if the release date of the -% currently-running \LaTeXe{} kernel is greater or equal to the -% argument (the argument should be in the format \texttt{yyyy-mm-dd}). -% \changes{4.2d}{2020/09/17}{(PHO) Add \cs{rvtx@ifformat@geq}.}% -% \begin{macrocode} -\ifx\IfFormatAtLeastTF\undefined - \def\rvtx@ifformat@geq{\@ifl@t@r\fmtversion}% -\else - \let\rvtx@ifformat@geq\IfFormatAtLeastTF -\fi -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@boolean} -% \begin{macro}{\@boole@def} -% In order to define \cmd\@ifx, we first must create the -% ``defining word'' (term taken form our Forth vocabulary) -% \cmd\@boole@def, which employs \cmd\@boolean\ to do its job. -% \begin{macrocode} -\def\@boolean#1#2{% - \long\def#1{% - #2% \if<something> - \expandafter\true@sw - \else - \expandafter\false@sw - \fi - }% -}% -\def\@boole@def#1#{\@boolean{#1}}% Implicit #2 -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@booleantrue} -% \begin{macro}{\@booleanfalse} -% The procedures \cmd\@booleantrue\ and -% \cmd\@booleanfalse\ are assignment operators -% for Boolean flags. -% \begin{macrocode} -\def\@booleantrue#1{\let#1\true@sw}% -\def\@booleanfalse#1{\let#1\false@sw}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@ifx} -% \begin{macro}{\@ifx@empty} -% \begin{macro}{\@if@empty} -% \begin{macro}{\@ifcat}% -% \begin{macro}{\@ifdim}% -% \begin{macro}{\@ifeof}% -% \begin{macro}{\@ifhbox}% -% \begin{macro}{\@ifhmode}% -% \begin{macro}{\@ifinner}% -% \begin{macro}{\@ifmmode}% -% \begin{macro}{\@ifnum}% -% \begin{macro}{\@ifodd}% -% \begin{macro}{\@ifvbox}% -% \begin{macro}{\@ifvmode}% -% \begin{macro}{\@ifvoid}% -% We can now invoke the defining word to create -% the procedures \cmd\@ifx\ and friends. -% -% Compatibility Note: earlier versions of this package -% defined a procedure \cmd\@ifempty. However, for compatibility with AMS\LaTeX, -% we must avoid the following three names: -% \cmd\@ifempty, \cmd\@xifempty, and \cmd\@ifnotempty. -% -% \begin{macrocode} -\@boole@def\@ifx#1{\ifx#1}% -\@boole@def\@ifx@empty#1{\ifx\@empty#1}% -\@boole@def\@if@empty#1{\if!#1!}% -%\@boole@def\@if@sw#1{\csname if#1\endcsname}% -\def\@if@sw#1#2{#1\expandafter\true@sw\else\expandafter\false@sw#2}% -\@boole@def\@ifdim#1{\ifdim#1}% -\@boole@def\@ifeof#1{\ifeof#1}% -\@boole@def\@ifhbox#1{\ifhbox#1}% -\@boole@def\@ifhmode{\ifhmode}% -\@boole@def\@ifinner{\ifinner}% -\@boole@def\@ifmmode{\ifmmode}% -\@boole@def\@ifnum#1{\ifnum#1}% -\@boole@def\@ifodd#1{\ifodd#1}% -\@boole@def\@ifvbox#1{\ifvbox#1}% -\@boole@def\@ifvmode{\ifvmode}% -\@boole@def\@ifvoid#1{\ifvoid#1}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\true@sw} -% \begin{macro}{\false@sw} -% -% Note that when a Boolean operator expands, it -% employs two macros that act as selectors, defined here. -% -% \begin{macrocode} -\long\def\true@sw#1#2{#1}% -\long\def\false@sw#1#2{#2}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\loopuntil} -% \begin{macro}{\loopwhile} -% -% Loop control using the Boolean idiom. -% Superior to \cmd\loop\dots\cmd\repeat\ because these can be nested. -% The tail of the argument must have a Boolean predicate. -% -% \begin{macrocode} -\long\def\loopuntil#1{#1{}{\loopuntil{#1}}}% -\long\def\loopwhile#1{#1{\loopwhile{#1}}{}}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@provide} -% -% A defining word that refuses to clobber a prior meaning. -% -% \begin{macrocode} -\def\@provide#1{% - \@ifx{\undefined#1}{\true@sw}{\@ifx{\relax#1}{\true@sw}{\false@sw}}% - {\def#1}{\def\j@nk}% -}% -% \end{macrocode} -% \end{macro} -% -% -% \subsection{Begin Document Structure} -% The standard \LaTeX\ mechanism \cmd\AtBeginDocument\ -% is inadequate because the \cmd\vsize\ is bound much too early. -% We supply here a mechanism whereby decisions about the -% page layout can be deferred until \cmd\AtBeginDocument\ time. -% -% The problem we are working around is that the \cmd\AtBeginDocument\ -% hook in \cmd\document\ appears long after the calculation of -% \cmd\vsize\ and \cmd\hsize, that is, \LaTeX\ provides no mechanism -% for deferring the decision about the page grid until \cmd\AtBeginDocument\ time. -% We fix things by prepending a hook at the very beginning of \cmd\document. -% -% As it turns out, though, it appears feasible to simply invoke the desired -% column grid command at \cmd\AtBeginDocument\ time, since the MVL has nothing in it -% at that time that would be problematical. -% -% \begin{macro}{\document} -% We begin by installing hooks into \cmd\document\ that -% we will manage ourselves. -% -% The 2020-10-01 \LaTeX{} release got a new hook management system and -% several new hooks (several previously provided by \textsf{etoolbox}). -% The one we want here is \texttt{begindocument/before}, the first thing -% executed by \cmd\document{}, right after ending the group started by -% \cmd\begin{}. -% -% Thus, if the \LaTeX{} kernel date is 2020-10-01 we just add to that -% hook, otherwise resort to the old method, patching \cmd\document: -% end the group started by \cmd\begin, apply our hook, and -% conclude our shenanigans by absorbing -% the first token of the expansion of \cmd\document, which -% we assume to be \cmd\endgroup{} (true until the aforementioned release). -% \changes{4.1a}{2008/08/12}{Get rid of \cs{set@typesize@hook} \cs{set@pica@hook} and the \cs{normalsize} directive}% -% \changes{4.2d}{2020/09/17}{(PHO) Use \LaTeX's hook management system, if possible.}% -% \begin{macrocode} -\rvtx@ifformat@geq{2020/10/01}% - {% - \AddToHook{begindocument/before}{\document@inithook}% - }{% - \prepdef\document{% - \endgroup - \document@inithook - \true@sw{}% - }% - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\document@inithook} -% To use, simply \cmd\appdef\cmd\document@inithook\arg{your tokens here}. -% \begin{macrocode} -\let\document@inithook\@empty -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\class@documenthook} -% \begin{macro}{\class@enddocumenthook} -% \changes{4.1a}{2008/08/12}{\cs{class@documenthook} is the last \cs{AtBeginDocument} token now} -% We install the last \cmd\AtBeginDocument\ hook, namely the -% procedure \cmd\class@documenthook. Within the document class, -% we will use this hook exclusively, so as to avoid interference from other packages. -% Similarly with \cmd\class@enddocumenthook, installed via \cmd\AtEndDocument. -% -% A document class using this package should do as this package does and just say, -% \cmd\appdef\ \cmd\class@documenthook\ instead of \cmd\AtBeginDocument, -% and \cmd\appdef\ \cmd\class@enddocumenthook\ instead of \cmd\AtEndDocument. -% \begin{macrocode} -\appdef\document@inithook{% - \AtBeginDocument{\class@documenthook}% -}% -\AtEndDocument{% - \class@enddocumenthook -}% -\let\class@documenthook\@empty -\let\class@enddocumenthook\@empty -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\enddocument} -% \begin{macro}{\check@aux} -% \begin{macro}{\do@check@aux} -% \changes{4.1n}{2009/12/05}{(AO, 569) Use of \classname{hyperref} interferes with column balancing of last page}% -% The standard \LaTeX\ \enve{document} processing is a potential problem, -% particularly when the output routine has been changed by \classname{ltxgrid}. -% We separate out the procedure that checks the auxiliary file at the end of -% the job so that later it can be called from the safety of the output -% routine. -% We will do this to ensure that the \cmd\@mainaux\ stream is not closed until -% the last page of the job is shipped out, and that can only be done by coordinating -% with the output routine. -% -% \changes{4.2d}{2020/09/17}{(PHO) Only redefine \cs{enddocument} in older versions.}% -% This approach, however, will only be done for older versions of the -% \LaTeX{} kernel: -% \begin{macrocode} -\rvtx@ifformat@geq{2020/10/01}{% - % <definitions for newer LaTeX later> -}{% - % <definitions for older LaTeX> -\def\enddocument{% -% \end{macrocode} -% \changes{4.1n}{2009/12/06}{(AO) Incorporate change to ltmiscen.dtx v1.1i 2000/05/19}% -% The following line from \filename{ltmiscen.dtx} `resets \cmd\AtEndDocument for latex/3060'. -% \begin{macrocode} - \let\AtEndDocument\@firstofone -% \end{macrocode} -% \begin{macrocode} - \@enddocumenthook - \@checkend{document}% -% \end{macrocode} -% The \cmd\clear@document\ statement ends the current page (we must guarantee no further shipouts), -% then executes all cleanup procedures that must occur only after the last shipout. -% Clients will queue up their procedures via \cmd\AfterLastShipout, if it exists, otherwise by doing \cmd\appdef\cmd\clear@document. -% \begin{macrocode} - \clear@document -% \end{macrocode} -% We are very close to ending the \TeX\ run, now. -% \begin{macrocode} - \check@aux - \deadcycles\z@ - \@@end -}% -\def\check@aux{\do@check@aux}% -\def\do@check@aux{% - \@if@sw\if@filesw\fi{% - \immediate\closeout\@mainaux - \let\@setckpt\@gobbletwo - \let\@newl@bel\@testdef - \@tempswafalse - \makeatletter - \input\jobname.aux\relax - }{}% - \@dofilelist - \@ifdim{\font@submax >\fontsubfuzz\relax}{% - \@font@warning{% - Size substitutions with differences\MessageBreak - up to \font@submax\space have occured.\@gobbletwo - }% - }{}% - \@defaultsubs - \@refundefined - \@if@sw\if@filesw\fi{% - \@ifx{\@multiplelabels\relax}{% - \@if@sw\if@tempswa\fi{% - \@latex@warning@no@line{% - Label(s) may have changed. - Rerun to get cross-references right% - }% - }{}% - }{% - \@multiplelabels - }% - }{}% -}% -} -% \end{macrocode} -% -% \changes{4.2d}{2020/09/17}{(PHO) Patch \cs{enddocument} at runtime in newer versions.}% -% \begin{macro}{\rvtx@enddocument@patch} -% For newer \LaTeX{} we'll try to be a bit more future-proof -% (no miracle though). The code for \cmd\enddocument{} -% (in pre-2020-10-01 \LaTeX) is roughly: -% \begin{verbatim} -% \def\enddocument{% -% <hooks and bookkeeping> -% \clearpage -% <read main .aux and final checks> -% \@@end -% } -% \end{verbatim} -% and the patches above replace the \cmd\clearpage{} by its own -% \cmd\clear@document, and \verb|<read main .aux and final checks>| by -% \cmd\do@check@aux, which it can later control the timing. -% -% Now we will apply the same changes, but this time without redefining -% \cmd\enddocument: we will instead replace tokens on-the-fly, when -% \cmd\enddocument{} is expanded. This will grant us a slightly safer -% approach that won't depend so much on the internals of -% \cmd\enddocument. -% -% This entire patch should work with the previous definition of -% \cmd\enddocument{} as well (except it cannot be used in the hook), -% but for now leave previous versions untouched. -% -% The entire patching will reside in the \texttt{enddocument} hook: -% \begin{macrocode} -\rvtx@ifformat@geq{2020/10/01}{% - \AddToHook{enddocument}{\rvtx@enddocument@patch{}}% -}{} -% \end{macrocode} -% -% This macro will be executed after \cmd\enddocument{} has expanded, -% so all its tokens are now exposed. Here we will assume that -% \cmd\enddocument{} contains the tokens \verb|\@checkend{document}| -% and \cmd\endgroup, and use them as delimiters: -% \begin{macrocode} -\protected\long\def\rvtx@enddocument@patch#1#2\@checkend#3{% - \begingroup - \edef\x{\detokenize{#3}}% - \edef\y{\detokenize{document}}% - \expandafter\endgroup - \ifx\x\y - \expandafter\rvtx@enddocument@patch@end - \else - \expandafter\rvtx@enddocument@patch@more - \fi - {#1#2}{#3}} -\def\rvtx@enddocument@patch@more#1#2{% - \rvtx@enddocument@patch{#1\@checkend{#2}}} -% \end{macrocode} -% -% When the \verb|\@checkend{document}| is reached, use \cmd\clearpage{} -% and \cmd\enddocument{} as delimiters for the -% \verb|<read main .aux and final checks>| part, and save it in -% \cmd\do@check@aux{}: -% \begin{macrocode} -\long\def\rvtx@enddocument@patch@end#1#2\clearpage#3\endgroup{% - \def\do@check@aux{#3\endgroup}% -% \end{macrocode} -% Then execute the code consumed in the previous step: -% \begin{macrocode} - #1% - \@checkend{#2}% -% \end{macrocode} -% Do \cmd\clear@document{} instead of \cmd\clearpage{} and -% \cmd\check@aux{} instead of the code grabbed. -% \begin{macrocode} - \clear@document - \check@aux} -\def\check@aux{\do@check@aux}% -% \end{macrocode} -% \end{macro} -% -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\clear@document} -% \changes{4.1n}{2009/12/05}{(AO, 569) Use of \classname{hyperref} interferes with column balancing of last page}% -% The procedure \cmd\clear@document\ is responsible for flushing out the last page of the document, -% if not already done. -% The procedure then executes those procedures that must wait for execution until -% after the last page is shipped out. -% Clients of \classname{ltxutil}, such as \classname{ltxgrid} and \classname{revtex4} -% will queue these procedures up via \cmd\AfterLastShipout, if it exists, otherwise by doing \cmd\appdef\cmd\clear@document. -% -% The command \cmd\Call@AfterLastShipout\ is provided by Heiko Oberdiek's \classname{atveryend} package. -% This package is compatible with \classname{ltxutil}. -% -% Note on compatibility with \classname{atveryend}: -% we arrange for \cmd\Call@AfterLastShipout\ to be called from the safety of the output routine, -% thereby ensuring that all of the procedures queued up by that package's -% \cmd\AfterLastShipout\ are executed at the right time. -% We also ensure that \cmd\Call@AfterLastShipout\ has a default definition, in case the package was never loaded. -% \changes{4.1n}{2009/12/09}{(AO, 569) execute \classname{atveryend}'s \cs{Call@AfterLastShipout} at the proper time}% -% \begin{macrocode} -\def\clear@document{% - \clearpage - \do@output@cclv{% - \Call@AfterLastShipout - }% -}% -\appdef\class@documenthook{% - \providecommand\Call@AfterLastShipout{}% -}% -% \end{macrocode} -% \end{macro} -% -% \subsection{Class Extensions}% -% \changes{4.1a}{2008/08/12}{Class extension mechanism \cs{class@extension}, \cs{class@extensionfile}, and \cs{class@ext@hook}.} -% The \LaTeX\ procedure \cmd\@onefilewithoptions\ is the vehicle for reading in -% a \LaTeX\ class or package. -% The APS RevTeX class implements the use of what are called ``substyles'', -% actually extensions to the class itself. -% Any document class can do likewise. -% -% \begin{macro}{\class@extension} -% \begin{macro}{\class@extensionfile} -% \begin{macro}{\class@ext@hook} -% A procedure similar to \LaTeX's \cmd\@onefilewithoptions, but as an extension to the -% current document class. -% -% Read in the given file as if it were a document class file. -% Usage: \cmd\class@extensionfile\ \arg{class} \cmd\@extension, -% where \marg{class} is a file (similar to \file{aps.rtx}) and where \cmd\@extension\ is -% the file extension for \marg{class}. -% For instance, to read in the file \file{aps.rtx}, -% do \cmd\class@extensionfile\ \texttt{\{aps\}} \cmd\substyle@ext, -% where the latter has been define to expand to \file{.rtx}. -% -% Features supported include -% passing existing class options on to the class extension, -% \cmd\AtEndOfClass\ processing, -% a stack that restores \cmd\@currname, \cmd\@currext, \cmd\@clsextension, and the \cmd\catcode\ of `@', -% fall-back to a control sequence name (with leading `rtx@') if no file exists. -% -% Note that \cmd\LoadClass\ gives one the ability to write a class that calls in -% another class as a (sort of) module: this scheme is like \cmd\LoadClass, but -% turned inside out. -% \begin{macrocode} -\def\class@extension#1#2{% - \IfFileExists{#1.#2}{% - \expandafter\class@extensionfile\csname ver@\@currname.\@currext\endcsname{#1}#2% - }{% - \csname rtx@#1\endcsname - }% -}% -\def\class@extensionfile#1#2#3{% - \@pass@ptions#3\@unusedoptionlist{#2}% - \global\let\@unusedoptionlist\@empty - \expandafter\class@ext@hook\csname#2.#3-h@@k\endcsname#1{#2}#3% -}% -\def\class@ext@hook#1#2#3#4{% - \@pushfilename@ltx - \makeatletter - \let\CurrentOption\@empty - \@reset@ptions - \let#1\@empty - \xdef\@currname{#3}% - \global\let\@currext#4% - \global\let\@clsextension\@currext - \input{#3.#4}% - \@ifl@ter#4{#3}#2{% - \class@info{Class extension later than: #2}% - }{% - \class@info{Class extension earlier: #2}% - \@@end - }% - #1% - \let#1\@undefined - \expandafter\@p@pfilename@ltx\@currnamestack@ltx\@nil - \@reset@ptions -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@pushfilename} -% \begin{macro}{\@p@pfilename} -% \changes{4.1a}{2008/08/12}{Class extension mechanism \cs{@pushfilename@ltx} and \cs{@p@pfilename@ltx}.} -% But! \LaTeX\ does not provide for a class extension other than \file{.cls}, therefore we -% must extend \LaTeX's file name stack with the file extension of a class extension. -% This way, procedures like -% \cmd\ProvidesPackage, \cmd\OptionNotUsed, \cmd\ProcessOptions, \cmd\@reset@ptions\ -% will still work properly. -% \begin{macrocode} -\def\@pushfilename@ltx{% - \xdef\@currnamestack@ltx{% - {\@currname}% - {\@currext}% - {\@clsextension}% - {\the\catcode`\@}% - \@currnamestack@ltx - }% -}% -\def\@p@pfilename@ltx#1#2#3#4#5\@nil{% - \gdef\@currname{#1}% - \gdef\@currext{#2}% - \gdef\@clsextension{#3}% - \catcode`\@#4\relax - \gdef\@currnamestack@ltx{#5}% -}% -\global\let\@currnamestack@ltx\@empty -% \end{macrocode} -% \end{macro} -% \end{macro} -% We carefully patch \LaTeX\ so that the current value of \cmd\@clsextension\ can be -% restored after reading in a class file. -% -% \subsection{Type Tools}% -% -% \begin{macro}{\flushing} -% Undoes \cmd\centering. Should also undo \cmd\raggedleft\ and \cmd\raggedright. -% \begin{macrocode} -\def\flushing{% - \let\\\@normalcr - \leftskip\z@skip - \rightskip\z@skip - \@rightskip\z@skip - \parfillskip\@flushglue -}% -% \end{macrocode} -% \end{macro} -% -% \changes{4.1g}{2009/10/07}{(AO, 539) Use of double-backslash in argument of \cs{section} gives error. The \classname{textcase} package is involved.}% -% \begin{macro}{\@centercr} -% The \cmd\@centercr\ command is the replacement for \cmd\@normalcr\ when setting type centered or ragged. -% Normally, the meaning of \cmd\\ is \cmd\@normalcr, which \LaTeX\ defines via \cmd\DeclareRobustCommand. -% In centered or ragged typesetting, the meaning of \cmd\\ is \cmd\@centercr, -% therefore it ought to to be defined via \cmd\DeclareRobustCommand\ (but unfortunately is not). -% The fact that it is not is yet another of \LaTeX's early failures that will never get fixed. -% -% The following exemplar fails under \LaTeX\ version 2005/12/01, package \classname{textcase} 2004/10/07 v0.07: -% \begin{verbatim} -%\documentclass{article}% -%\usepackage[overload]{textcase} -%\begin{document} -%\centering -%\section{\MakeTextUppercase{Section\\title}} -%Text -%\end{document} -% \end{verbatim} -% The solution is to promote \cmd\@centercr\ to a robust command, just the same as \cmd\\. -% We do that here without needing to know the meaning of the command. -% \begin{macrocode} -\expandafter\DeclareRobustCommand\expandafter\@centercr\expandafter{\@centercr}% -% \end{macrocode} -% \end{macro} -% -% -% \subsection{Display Math}% -% -% \begin{macro}{\eqnarray@LaTeX} -% \begin{macro}{\eqnarray@fleqn@fixed} -% Team \LaTeX\ has stated they will never repair Leslie's broken definition of \env{eqnarray}. -% Let us be bold\dots. -% -% Note on \classname{hyperref} package compatibility: that package overrides -% \cmd\eqnarray\ by wrapping it up in a larger procedure, so its changes -% are compatible with this package's changes. -% -% \changes{4.1a}{2008/01/19}{(AO, 475) I had not properly reproduced the LaTeX macro \cs{eqnarray}.}% -% \changes{4.2f}{2022/06/05}{(PHO) Fix detection of \cs{eqnarray} in newer \LaTeX.}% -% \begin{macrocode} -\def\rvtx@tmpa#1{% -\def\eqnarray@LaTeX{% - \stepcounter{equation}% - \def\@currentlabel{\p@equation\theequation}% - #1% \def\@currentcounter{equation} on newer LaTeX - \global\@eqnswtrue - \m@th - \global\@eqcnt\z@ - \tabskip\@centering - \let\\\@eqncr - $$\everycr{}\halign to\displaywidth\bgroup - \hskip\@centering$\displaystyle\tabskip\z@skip{####}$\@eqnsel - &\global\@eqcnt\@ne\hskip \tw@\arraycolsep \hfil${####}$\hfil - &\global\@eqcnt\tw@ \hskip \tw@\arraycolsep - $\displaystyle{####}$\hfil\tabskip\@centering - &\global\@eqcnt\thr@@ \hb@xt@\z@\bgroup\hss####\egroup - \tabskip\z@skip - \cr -}% -\long\def\eqnarray@fleqn@fixed{% - \stepcounter{equation}\def\@currentlabel{\p@equation\theequation}% - #1% \def\@currentcounter{equation} on newer LaTeX - \global\@eqnswtrue\m@th\global\@eqcnt\z@ - \tabskip\ltx@mathindent - \let\\=\@eqncr - \setlength\abovedisplayskip{\topsep}% - \ifvmode\addtolength\abovedisplayskip{\partopsep}\fi - \addtolength\abovedisplayskip{\parskip}% - \setlength\belowdisplayskip{\abovedisplayskip}% - \setlength\belowdisplayshortskip{\abovedisplayskip}% - \setlength\abovedisplayshortskip{\abovedisplayskip}% - $$% - \everycr{}% - \halignt@\linewidth\bgroup - \hskip\@centering$\displaystyle\tabskip\z@skip{####}$\@eqnsel - &\global\@eqcnt\@ne - \hskip\tw@\eqncolsep - \hfil${{}####{}}$\hfil - &\global\@eqcnt\tw@ - \hskip\tw@\eqncolsep - $\displaystyle{####}$\hfil\tabskip\@centering - &\global\@eqcnt\thr@@\hb@xt@\z@\bgroup\hss####\egroup - \tabskip\z@skip - \cr -}% -} -\rvtx@tmpa{}% older LaTeX -\@ifx{\eqnarray\eqnarray@LaTeX}{\@firstofone} - {% - \rvtx@tmpa{\def\@currentcounter{equation}}% newer LaTeX - \@ifx{\eqnarray\eqnarray@LaTeX}{\@firstofone} - {\@gobble} - } -{% - \class@info{Repairing broken LaTeX eqnarray}% - \let\eqnarray\eqnarray@fleqn@fixed - \newlength\eqncolsep - \setlength\eqncolsep\z@ - \let\eqnarray@LaTeX\relax - \let\eqnarray@fleqn@fixed\relax -}% -% \end{macrocode} -% The macro \cmd\ltx@mathindent\ is assigned to the \cmd\tabskip\ glue just -% before the alignment preamble is expanded, the value therefore applying at the -% left of the first column. -% -% The below value specifies the display math to be set centered, as is common practice. -% Alternatively, \cmd\tabskip\ can be set to a different glue value, accomplishing -% flush-left display math. -% -% Note that the \filename{fleqn.clo} package provides its own meaning for -% the eqnarray environment, which is also broken. We do not patch that package, however. -% -% \changes{4.1d}{2009/03/27}{(AO, 511) Compatability with lineno.sty's erroneous way of detecting fleqn.clo}% -% Bug note: The \filename{lineno.sty} package detects \filename{fleqn.clo} -% by testing whether \cmd\mathindent\ is defined, instead of using correct \LaTeXe\ means. -% Even though our eqnarray environment is modelled after \filename{fleqn.clo}, -% we must program defensively here. -% \begin{macrocode} -\def\ltx@mathindent{\@centering}% -\def\set@eqnarray@skips{}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \changes{4.1g}{2009/10/07}{(AO, 525) Remove phantom paragraph above display math that is given in vertical mode}% -%\begin{macro}{\prep@math} -%\begin{macro}{\prep@math@patch} -% If we are in vertical mode when display math mode is entered (via \verb+$$+), -% \TeX\ will first enter horizontal mode, then display math mode; this results in a phantom paragraph -% containing a single \cmd\hbox\ consisting of the \cmd\parindent\ box followed by the \cmd\parskipfillskip\ glue. -% Of course, that \cmd\hbox\ is accompanied by \cmd\parskip\ glue and \cmd\baselineskip\ glue. -% -% The \cmd\prep@math\ procedure removes the \cmd\parindent\ box, thereby (magically) eliminating the phantom paragraph. -% The \cmd\prep@math@patch\ procedure headpatches the \env{equation} and \env{eqnarray} environments -% to accomplish this removal of the phantom paragraph. -% -% Note that there are three remaining ways to enter display math mode that we do not treat: -% the \env{displaymath} environment (equivalent to \cmd\[/\cmd\]), and the primitive the \verb+$$+ markup. -% I refrain from treating the first case because \env{displaymath} already detects the case -% where it is entered from vertical mode: I do not wish to engage in the dubious enterprise of attempting to correct a procedure that is ill conceived from the outset. -% As to the primitive \verb+$$+, there is no help for users who insist upon employing procedural markup in their documents. -% in their documents. -% \begin{macrocode} -\def\prep@math{% - \@ifvmode{\everypar{{\setbox\z@\lastbox}}}{}% -}% -\def\prep@math@patch{% - \prepdef\equation{\prep@math}% - \prepdef\eqnarray{\prep@math}% -}% -% \end{macrocode} -% A document class may invoke \cmd\prep@math@patch\ at any point it wishes to prevent the appearance -% of the phantom paragraph: it may be a global declaration or a local one. -% \end{macro} -% \end{macro} -% -% We fail to patch \cmd\[, \cmd\equation, however. -% -% \subsection{Footnotes} -% -% \changes{4.0d}{2000/04/10}{(AO, 174) kernel fix} -% -% \begin{macro}{\footnotemark} -% \begin{macro}{\footnotetest} -% \begin{macro}{\ltx@xfootnote} -% \begin{macro}{\ltx@footmark} -% \begin{macro}{\ltx@foottext} -% \begin{macro}{\ltx@make@current@footnote} -% We repair an error in the \LaTeX\ kernel (see \file{ltfloat.dtx}) involving footnotes. -% The symptom is that the \cmd\footnotemark\ command does not work properly within a \env{minipage} environment. -% The source of the problem is in the way the \cmd\footnotemark\ and \cmd\@xfootnotemark\ procedures are defined: -% they do not share the method, used by \cmd\footnote\ and other procedures, that allows a context switch to -% change the way footnotes behave within a minipage environment. -% This is a \LaTeX\ bug of long standing; our fix dates to 1987. -% -% While we are at it, we rewrite both the \cmd\footnote, \cmd\footnotemark\ and \cmd\footnotetext\ procedures, -% achieving a cleaner separation of syntax and semantics. -% Note that the \cmd\@footnotetext\ procedure is not involved in context switching; -% \classname{hyperref} will take over that procedure, substituting its own processing around -% its argument and passing this to \cmd\H@@footnotetext. -% We anticipate this, and do our context switching on \cmd\H@@footnotetext. -% -% The \cmd\@makefnmark\ continues as the method of formatting the footnote mark. -% -% A note about the context switch mentioned above: -% the \env{minipage} environment executes the following in order to alter the way footnotes -% behave:\begin{verbatim} -%\def\@mpfn{mpfootnote}% -%\def\thempfn{\thempfootnote}% -%\let\@footnotetext\@mpfootnotetext -%\let\@makefnmark\@mpmakefnmark -%\c@mpfootnote\z@\end{verbatim} -% This code changes the counter used in autonumbered footnotes, the choice of footnote marker, -% and the procedure used on the footnote text. Changing the counter is needed because minipage -% footnotes are in their own sequence, and the footnote marker is customarily different within -% a minipage. The procedure that works on the footnote text must be different because the footnotes -% are placed at the bottom of the minipage, not the bottom of the text column. -% -% Note that \LaTeX\ initially defines \cmd\@mpfn\ as \texttt{footnote} and \cmd\thempfn\ as \cmd\thefootnote, -% so we are initially doing general footnotes. -% -% Any procedure that establishes a minipage-like context (e.g., floats) can do the same as the mimipage context switch -% illustrated above. -% \changes{4.1a}{2008/06/30}{(AO, 438) Complete rewrite of footnote macros.} -% -% Three user-level command, \cmd\footnote, \cmd\footnotemark, and \cmd\footnotetext\ are defined (see the \LaTeX\ manual for user-level details). -% \begin{macro}{\footnote} -% The first user-level command is \cmd\footnote. -% A simple way to look at this command is to think of it as -% \cmd\footnotemark\ \oarg{number} \cmd\footnotetext\ \oarg{number} \arg{text}, -% where the optional argument is the same in both calls. -% We also define a syntactical helper procedure \cmd\ltx@xfootnote. -% -% We employ the procedures \cmd\ltx@stp@footproc\ and \cmd\ltx@def@footproc, -% passing in the procedure to execute, in this case \cmd\ltx@footmark, -% which sets the footnote mark. -% In any case, we end on the procedure \cmd\ltx@foottext, which sets the footnote text. -% \begin{macrocode} -\def\footnote{\@ifnextchar[\ltx@xfootnote\ltx@yfootnote}% -\def\ltx@xfootnote[#1]{% - \ltx@def@footproc\ltx@footmark[#1]% - \expandafter\ltx@foottext\expandafter{\the\csname c@\@mpfn\endcsname}% -}% -\def\ltx@yfootnote{% - \ltx@stp@footproc\ltx@footmark - \expandafter\ltx@foottext\expandafter{\the\csname c@\@mpfn\endcsname}% -}% -% \end{macrocode} -% The \cmd\footmark\ user-level command is next. -% Here we use the procedures \cmd\ltx@stp@footproc\ and \cmd\ltx@def@footproc\ again, -% but unlike \cmd\footnote, we do not set the footnote text. -% \begin{macrocode} -\def\footnotemark{\@ifnextchar[\ltx@xfootmark\ltx@yfootmark}% -\def\ltx@xfootmark{\ltx@def@footproc\ltx@footmark}% -\def\ltx@yfootmark{\ltx@stp@footproc\ltx@footmark}% -\def\ltx@footmark#1{% - \leavevmode - \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi - \begingroup - \expandafter\ltx@make@current@footnote\expandafter{\@mpfn}{#1}% - \expandafter\@argswap@val\expandafter{\Hy@footnote@currentHref}{\hyper@linkstart {link}}% - \@makefnmark - \hyper@linkend - \endgroup - \ifhmode\spacefactor\@x@sf\fi - \relax -}% -% \end{macrocode} -% The third user-level command is \cmd\footnotetext. -% As with \cmd\footnotemark, we use the procedures \cmd\ltx@stp@footproc\ and \cmd\ltx@def@footproc, -% this time passing in the procedure \cmd\ltx@foottext, which sets the footnote text. -% \begin{macrocode} -\def\footnotetext{\@ifnextchar[\ltx@xfoottext\ltx@yfoottext}% -\def\ltx@xfoottext{\ltx@def@footproc\ltx@foottext}% -\def\ltx@yfoottext{\ltx@stp@footproc\ltx@foottext}% -\long\def\ltx@foottext#1#2{% - \begingroup - \expandafter\ltx@make@current@footnote\expandafter{\@mpfn}{#1}% - \@footnotetext{#2}% - \endgroup -}% -% \end{macrocode} -% Here are the definitions of the procedures \cmd\ltx@stp@footproc\ and \cmd\ltx@def@footproc. -% The require argument is the procedure to execute afterwards, and -% \cmd\ltx@def@footproc\ parses a bracket-delimited argument (it is not optional). -% In each case the given procedure is executed with an argument prepared for it: -% the value of the footnote counter. -% \begin{macrocode} -\def\ltx@def@footproc#1[#2]{% - \begingroup - \csname c@\@mpfn\endcsname #2\relax - \unrestored@protected@xdef\@thefnmark{\thempfn}% - \expandafter\endgroup - \expandafter#1% - \expandafter{\the\csname c@\@mpfn\endcsname}% -}% -\def\ltx@stp@footproc#1{% - \expandafter\stepcounter\expandafter{\@mpfn}% - \protected@xdef\@thefnmark{\thempfn}% - \expandafter#1% - \expandafter{\the\csname c@\@mpfn\endcsname}% -}% -% \end{macrocode} -% Here we provide for our good friend \classname{hyperref} -% to enter in like a bull in a china shop. If it is not loaded, -% we do what it would have done, but gentlier and without hypertext functionality. -% \begin{macrocode} -\appdef\class@documenthook{% - \let\footnote@latex\footnote - \@ifpackageloaded{hyperref}{}{% - \let\H@@footnotetext\@footnotetext - \def\@footnotetext{\H@@footnotetext}% - \let\H@@mpfootnotetext\@mpfootnotetext - \def\@mpfootnotetext{\H@@mpfootnotetext}% - }% -}% -% \end{macrocode} -% In the following, we must use \LaTeX's rococco equipment in the form of \cmd\protected@edef, -% because of the presence of a font switch in the meaning of \cmd\thempfootnote. -% But, really, isn't this a sloppy conflation of semantics and presentation? -% \begin{macrocode} -\def\ltx@make@current@footnote#1#2{% - \csname c@#1\endcsname#2\relax - \protected@edef\Hy@footnote@currentHref{\@currentHref-#1.\csname the#1\endcsname}% -}% -\def\thempfootnote@latex{{\itshape \@alph \c@mpfootnote }}% -\def\ltx@thempfootnote{\@alph\c@mpfootnote}% -\@ifx{\thempfootnote\thempfootnote@latex}{% - \class@info{Repairing hyperref-unfriendly LaTeX definition of \string\mpfootnote}% - \let\thempfootnote\ltx@thempfootnote -}{}% -% \end{macrocode} -% -% Note on \classname{hyperref} compatibility: -% In its ``Automated \LaTeX\ hypertext cross-references'', -% the \classname{hyperref} package alters footnote processing, -% but it does nothing to address the several issues of concern to us. -% -% The \classname{hyperref} package takes over the \cmd\@mpfootnotetext\ and -% \cmd\@footnotetext\ procedures, wrapping the argument in its own code. -% It also rewrites \cmd\@footnotemark, making it a hyperlink, and -% \cmd\@xfootnotenext, removing from it all hypertext capabilities. -% -% However, if the \cmd\footnotemark\ command has been supplied with an optional argument, -% \classname{hyperref}'s changes do not apply: it punts in this case. -% -% At the same time, it attempts to turn off its changes during -% \cmd\maketitle\ processing, destroying one of the capabilities we desire. -% -% We make ourself \classname{hyperref} savvy: -% we re-implement footnote processing, using \classname{hyperref} capabilities if that -% package has been loaded. -% -% Any other package that rewrites \LaTeX's footnote macros will be incompatible -% with this package. -% \changes{4.1a}{2008/06/30}{(AO) Remove code that avoided changes to \cs{@xfootnotemark}}% -% -% Two thoughts about \classname{hyperref}: what for does it define \cmd\realfootnote? -% Apparently even SR himself cannot remember. -% -% Also: a document class that desires high hypertext capabilities might -% well wish to reimplement \cmd\maketitle\ so that footnotes called out from there -% are hypertext links: the \classname{hyperref} package's -% ``Automated \LaTeX\ hypertext cross-references'' -% does not do any of this: -%\begin{quotation} -% But the special footnotes in |\maketitle| are much too hard to deal with properly. -% Let them revert to plain behaviour. -%\end{quotation} -% Note that the document class, in reimplementing \cmd\maketitle, must ensure -% that the \classname{hyperref} package does not clobber its own definition! -% -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@footnotetext} -% \begin{macro}{\@mpfootnotetext} -% \begin{macro}{\@tpfootnotetext} -% \begin{macro}{\make@footnotetext} -% \begin{macro}{\set@footnotewidth} -% The two procedures \cmd\@footnotetext\ and \cmd\@mpfootnotetext\ share code. -% We make that explicit here. -% -% Note that the procedure calling \cmd\make@footnotetext\ will open a group -% with \cmd\bgroup\ which is then closed by \cmd\minipagefootnote@drop. -% -% Difference from \LaTeX: here we do not set \cmd\floatingpenalty\ to infinity. -% Doing this must date back to a time when \LaTeX\ could not accomodate split insertions (footnotes). -% I cannot think of any other reason to do have done this. -% At any rate, with the \classname{ltxgrid} package, split insertions are properly -% taken care of, so we allow it. -% -% We provide the hook \cmd\set@footnotewidth\ -% that sets the footnote on a particular measure. -% Some page grids are such as to set a footnote in a context where \cmd\columnwidth -% is not the right parameter to use for the set width of a footnote. -% In such a case, for the applicable scope, you should define -% \cmd\set@footnotewidth\ to perform this job correctly. -% -% If we are setting type on multiple page grids, we must still ensure that all footnotes that -% find their way into the \cmd\footins\ insert register are set on the same width. -% This implies the need for a document to have an ``overall'' page grid, which determines the set width of all footnotes -% with the exception of minipage footnotes. -% -% In general, remember that footnotes, like all insertions (including floats), -% are a step outside of the galley context, and all aspects of insertions need to be -% properly handled, including the set width. -% \begin{macrocode} -\def\@makefnmark{% - \hbox{% - \@textsuperscript{% - \normalfont\itshape\@thefnmark - }% - }% -}% -% \end{macrocode} -% \begin{macrocode} -\long\def\@footnotetext{% - \insert\footins\bgroup - \make@footnotetext -}% -% \end{macrocode} -% \begin{macrocode} -\long\def\@mpfootnotetext{% - \minipagefootnote@pick - \make@footnotetext -}% -% \end{macrocode} -% Procedure \cmd\make@footnotetext\ sets the footnote \verb+#1+ into type, with the proper -% font, color, leading, width, and label in effect. -% It also establishes a strut and null glue at the end of the last paragraph of the footnote; -% The strut helps compensate for the lack of \cmd\interlineskip\ glue between \cmd\insert s; -% the glue establishes a feasible \cmd\vsplit\ point between footnotes. -% -% Note that in the title block (\classname{ltxfront}), the alternative definition, under the name \cmd\frontmatter@footnotetext, is used. -% The only material difference there is the reference to \cmd\frontmatter@makefntext\ instead of \cmd\@makefntext. -% -% Dependency note: the \cmd\@makefntext\ procedure is used to further process the footnote text -% and to execute the \cmd\@makefnmark\ procedure to produce the footnote mark. -% The definition of the former is customarily found in the document class (hereunder that of \filename{article.cls}), -% the latter in \filename{latex.ltx}. They are as follows: -% \begin{verbatim} -%\newcommand\@makefntext[1]{% -% \parindent 1em\noindent -% \hb@xt@1.8em{\hss\@makefnmark}% -% #1% -%}% -%\def\@makefnmark{% -% \hbox{\@textsuperscript{\normalfont\@thefnmark}}% -%}% -% \end{verbatim} -% -% \changes{4.1n}{2010/01/06}{(AO, 572) title block footnotes numbered independently from body footnotes}% -% \begin{macrocode} -\long\def\make@footnotetext#1{% - \set@footnotefont -% \end{macrocode} -% As noted above, we do \emph{not} do \cmd\floatingpenalty\ \cmd\@MM, as in standard \LaTeX. -% \begin{macrocode} - \set@footnotewidth - \@parboxrestore - \protected@edef\@currentlabel{% -% \end{macrocode} -% Note that we employ \cmd\@mpfn\ as a level of redirection for the footnotecounter. -% \begin{macrocode} - \csname p@\@mpfn\endcsname\@thefnmark - }% - \color@begingroup - \@makefntext{% - \rule\z@\footnotesep\ignorespaces#1% -% \end{macrocode} -% \changes{4.1n}{2010/01/02}{(AO, 571) allow split after last line of footnote}% -% The following strut and glue are for spacing and splitting, as mentioned above. -% \begin{macrocode} - \@finalstrut\strutbox\vadjust{\vskip\z@skip}% - }% - \color@endgroup - \minipagefootnote@drop -}% -% \end{macrocode} -% \changes{4.1f}{2009/07/07}{(AO, 515) Hook for setting the font of a footnote} -% \cmd\set@footnotefont\ is the procedure for setting the font of a footnote. -% Other aspects of the environment may be set using this hook. -% \begin{macrocode} -\def\set@footnotefont{% - \reset@font\footnotesize - \interlinepenalty\interfootnotelinepenalty - \splittopskip\footnotesep - \splitmaxdepth\dp\strutbox -}% -% \end{macrocode} -% \cmd\set@footnotewidth\ is the procedure for setting the width of a footnote. -% The default page grid, a single, full-width column, sets footnotes on the width of the text. -% \changes{4.1n}{2010/01/02}{(AO, 571) Interface \cs{set@footnotewidth} for determining the set width of footnotes}% -% \begin{macrocode} -\def\set@footnotewidth{\set@footnotewidth@one}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% -% \subsection{Floats} -% -% \subsubsection{Usage notes}% -% We extend the \LaTeX\ kernel for three purposes: -% \begin{enumerate} -% -% \item -% When the \cmd\footnote\ command is used within the -% scope of a float, we do as \env{minipage} does. -% -% \item -% We provide a mechanism to write floats out to an external -% stream for temporary storage (deferred floats). -% -% \item -% We provide mechanism for placing a float \texttt{here} -% invariably, that is, floats are unfloated. -% This mechanism is used to read the external stream mentioned above. -% -% \end{enumerate} -% -% To use these mechanisms, the document class should -% define a float, say, \env{figure} as per usual, and in addition: -% \begin{enumerate} -% -% \item -% Optionally define an alternative, say \env{figure@write} as follows: -% \begin{verbatim}\newenvironment{figure@write}{% -% \write@float{figure}% -%}{% -% \endwrite@float -%}\end{verbatim} -% That is, the alternative environment executes \cmd\write@float\ -% instead of \cmd\@float. -% Note that this step is not needed if the float environment -% is defined in the simple way of \file{classes.dtx}. -% However, an environment like \env{longtable} will require it. -% -% \item -% Install into \cmd\AtBeginDocument\ a call to \cmd\do@if@floats, -% with the float name and an appropriate file extension as its arguments. -% \begin{verbatim}\appdef\class@documenthook{\do@if@floats{figure}{.fgx}}\end{verbatim} -% -% \item -% Optionally define a text entity \cmd\figuresname\ that will -% be the text of the head that is set over the -% deferred floats. -% If not defined, there will be no head. -% -% \item -% Optionally define a user-level command to allow -% the document to determine where the figures are printed out -% (default is to print at end of document). E.g., -% \begin{verbatim}\newcommand\printfigures{\print@float{figure}}\end{verbatim} -% \item -% Install into \cmd\appdef\cmd\class@enddocumenthook\ a call to \cmd\printfigures, -% or, if the latter is not defined, as follows: -% \begin{verbatim}\appdef\class@enddocumenthook{\print@float{figure}}\end{verbatim} -% Note that installing this command into \cmd\AtBeginDocument -% is best done earlier than calls that assume the last page of -% the document is at hand. -% -% \end{enumerate} -% -% \subsubsection{Robustifying fragile commands}% -% Certain of \LaTeX's commands cannot be written out to a file or appear within a \cmd\mark\ command argument -% because they do calculations during expansion. -% We provide for a little help, but without changing the meanings of these commands. -% -% \begin{macro}{\addtocontents} -% \begin{macro}{\robustify@contents} -% -% \changes{4.1a}{2008/06/30}{(AO) Make \cs{addtocontents} a \cs{long} \cs{def}; gobble up \cs{footnote}}% -% \begin{macrocode} -\def\robustify@contents{% - \let \label \@gobble - \let \index \@gobble - \let \glossary \@gobble - \let\footnote \@gobble - \def\({\string\(}% - \def\){\string\)}% - \def\\{\string\\}% -}% -\long\def\addtocontents#1#2{% - \protected@write\@auxout{\robustify@contents}{\string \@writefile {#1}{#2}}% -}% -% \end{macrocode} -% -% \end{macro} -% \end{macro} -% -% \subsubsection{Preparing for the \classname{hyperref package}}% -% -% \begin{macro}{\addcontentsline} -% \begin{macro}{\label} -% \begin{macro}{\ltx@contentsline} -% \changes{4.1b}{2008/08/12}{Refine toc processing: provide default.}% -% The \classname{hyperref} package assumes that the \cmd\contentsline\ command will be given four arguments. -% Therefore it cannot successfully process a \filename{.toc} file that had been written by standard \LaTeX. -% We fix things up by always writing that fourth argument and by supplying a \cmd\contentsline\ command that -% can read them. -% -% We also give the \cmd\newlabel\ command's second argument five tokens. -% -% Finally, we wrap \LaTeX's \cmd\contentsline\ command with code to detect the case -% where the expected procedure is not defined, and we give it a syntax with no semantics. -% -% We switch over to this new definition only after \classname{hyperref} has loaded. -% \begin{macrocode} -\def\addcontentsline#1#2#3{% - \addtocontents{#1}{% - \protect\contentsline{#2}{#3}{\thepage}{}% - }% -}% -\def\label#1{% - \@bsphack - \protected@write\@auxout{}{% - \string\newlabel{#1}{{\@currentlabel}{\thepage}{}{}{}}% - }% - \@esphack -}% -\def\ltx@contentsline#1{% - \expandafter\@ifnotrelax\csname l@#1\endcsname{}{% - \expandafter\let\csname l@#1\endcsname\@gobbletwo - }% - \contentsline@latex{#1}% -}% -\appdef\document@inithook{% - \let\contentsline@latex\contentsline - \let\contentsline\ltx@contentsline -}% -% \end{macrocode} -% -% \end{macro} -% \end{macro} -% \end{macro} -% -% \subsubsection{Footnotes within floats, unfloating floats, float font}% -% -% \begin{macro}{\caption} -% DPC: Er a bit of a hack, but seems best way of supporting normal -% \LaTeX\ syntax at this point: If a caption is used below a table, -% then put out the footnotes before the caption. -% \changes{4.0b}{1999/06/20}{Support the hack with \cs{prepdef}, and delay until \cs{AtBeginDocument} time, since \classname{hyperref} clobbers \cs{caption}.} -% \begin{macrocode} -\appdef\class@documenthook{% - \prepdef\caption{\minipagefootnote@here}% -}% -% \end{macrocode} -% -% Note on \classname{hyperref} compatibility: -% this change to the \cmd\caption\ command is compatible with the -% ``Automated \LaTeX\ hypertext cross-references'' patches of that package. -% -% All the same, I think Sebastian's changes to \cmd\caption\ and \cmd\@caption\ -% could bear with some improvement. -% The following implementation requires knowing only the pattern part of the -% \cmd\@caption\ macro: -%\begin{verbatim} -%\def\caption{% -% \H@refstepcounter\@captype -% \hyper@makecurrent{\@captype}% -% \@dblarg{\H@caption\@captype}% -%}% -%\def\H@caption#1[#2]#3{% -% \@caption{#1}[#2]{% -% \ifHy@nesting -% \hyper@@anchor{\@currentHref}{#3}% -% \else -% \hyper@@anchor{\@currentHref}{\relax}#3% -% \fi -% }% -%}\end{verbatim} -% -% \end{macro} -% -% \begin{macro}{\minipagefootnote@init} -% \begin{macro}{\minipagefootnote@here} -% \begin{macro}{\minipagefootnote@foot} -% \begin{macro}{\minipagefootnote@pick} -% \begin{macro}{\minipagefootnote@drop} -% Procedure to deal with footnotes accumulated within a minipage environment. -% These procedures encapsulate all uses of the \cmd\@mpfootins\ box. -% -% -% Note: \cmd\minipagefootnote@here\ must \emph{not} be executed within the MVL! -% \begin{macrocode} -\def\minipagefootnote@init{% - \setbox\@mpfootins\box\voidb@x -}% -\def\minipagefootnote@pick{% - \global\setbox\@mpfootins\vbox\bgroup - \unvbox\@mpfootins -}% -\def\minipagefootnote@drop{% - \egroup -}% -\def\minipagefootnote@here{% - \par - \@ifvoid\@mpfootins{}{% - \vskip\skip\@mpfootins - \fullinterlineskip - \@ifinner{% - \vtop{\unvcopy\@mpfootins}% - {\setbox\z@\lastbox}% - }{}% - \unvbox\@mpfootins - }% -}% -\def\minipagefootnote@foot{% - \@ifvoid\@mpfootins{}{% - \insert\footins\bgroup\unvbox\@mpfootins\egroup - }% -}% -\def\endminipage{% - \par - \unskip - \minipagefootnote@here - \@minipagefalse %% added 24 May 89 - \color@endgroup - \egroup - \expandafter\@iiiparbox\@mpargs{\unvbox\@tempboxa}% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\floats@sw} -% \changes{4.1b}{2008/08/12}{Default assignment of \cs{float@sw} now, not at \cs{AtBeginDocument} time.}% -% 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. -% Note that the assignment of this Boolean is to be overridden by -% the document class in response to user-selected options. -% \begin{macrocode} -\@booleantrue\floats@sw -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@xfloat} -% \begin{macro}{\@mpmakefntext} -% The float start-code is redefined to set up footnotes in the style of minipage. -% Also, the \cmd\floats@sw\ Boolean informs us that floats are to be -% all placed \texttt{here}. -% Note that, to protect against the Boolean being undefined -% at this late hour, we default it globally to true. -% -% \changes{4.0b}{1999/06/20}{AO: Removed superfluous \cs{def}s, changed to using \cs{floats@sw} as the flag. Also stopped using DPC's \cs{if@twocolumn} flag: using \cs{floats@sw} instead. Also added \cs{par}\cs{vskip}\cs{z@skip} after the \cs{minipagefootnotes} so that the float box would have zero depth like the kernel one. } -% \changes{4.0c}{1999/11/13}{(AO, 110) Install hooks for endfloats processing} -% \changes{4.0d}{2000/04/10}{(AO, 127) Floats placed [h] to allow page breaks} -% \changes{4.0d}{2000/05/19}{(AO, 224) Hyperref compatibility.} -% \changes{4.0e}{2000/11/16}{(AO, 221) Remove samepage command from @xfloat@prep: If the float can break over pages, we want better control.} -% \changes{4.1a}{2008/07/07}{\cs{@xfloat@prep} calls \cs{ltx@footnote@pop} to restore the original \cs{ltx@footmark} and \cs{ltx@foottext} procedures, in case footnote processing has switched.} -% \changes{4.1b}{2008/08/12}{No need to protect against undefined \cs{float@sw}} -% -% \begin{macrocode} -\let\@xfloat@LaTeX\@xfloat -\def\@xfloat#1[#2]{% - \@xfloat@prep - \@nameuse{fp@proc@#2}% - \floats@sw{\@xfloat@LaTeX{#1}[#2]}{\@xfloat@anchored{#1}[]}% -}% -\def\@xfloat@prep{% - \ltx@footnote@pop - \def\@mpfn{mpfootnote}% - \def\thempfn{\thempfootnote}% - \c@mpfootnote\z@ - \let\H@@footnotetext\H@@mpfootnotetext -}% -\let\ltx@footnote@pop\@empty -\def\@xfloat@anchored#1[#2]{% - \def\@captype{#1}% - \begin@float@pagebreak - \let\end@float\end@float@anchored - \let\end@dblfloat\end@float@anchored - \hsize\columnwidth - \@parboxrestore - \@floatboxreset - \minipagefootnote@init -}% -\def\end@float@anchored{% - \minipagefootnote@here - \par\vskip\z@skip - \par - \end@float@pagebreak -}% -\def\begin@float@pagebreak{\par\addvspace\intextsep}% -\def\end@float@pagebreak{\par\addvspace\intextsep}% -\def\@mpmakefntext#1{% - \parindent=1em - \noindent - \hb@xt@1em{\hss\@makefnmark}% - #1% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% -% \subsubsection{Writing floats out to a file}% -% -% \begin{macro}{\do@if@floats} -% \changes{4.1b}{2008/08/12}{No need to protect against undefined \cs{float@sw}} -% The procedure \cmd\do@if@floats\ should be executed at -% \cmd\class@documenthook\ time: it arranges to write out -% the floats of the given class to a temporary file, to be -% read back later (deferred floats), -% given that \cmd\floats@sw\ is false. -% Note that, to protect against the Boolean being undefined -% at this late hour, we default it globally to true. -% \begin{macrocode} -\def\do@if@floats#1#2{% - \floats@sw{}{% -% \end{macrocode} -% Open the stream to save out the document's floats of this class. -% \begin{macrocode} - \expandafter\newwrite - \csname#1write\endcsname - \expandafter\def - \csname#1@stream\endcsname{\jobname#2}% - \expandafter\immediate - \expandafter\openout - \csname#1write\endcsname - \csname#1@stream\endcsname\relax -% \end{macrocode} -% Swap environments. -% If the class writer has defined, e.g., \env{figure@write}, -% then we use this as the procedure to execute for writing -% the float out to the external stream. -% Otherwise, the replacement of \cmd\@float\ by \cmd\write@float\ -% should do the right thing for float environments defined -% in the simple way of \classname{classes.dtx}. -% \begin{macrocode} - \@ifxundefined\@float@LaTeX{% - \let\@float@LaTeX\@float - \let\@dblfloat@LaTeX\@dblfloat - \let\@float\write@float - \let\@dblfloat\write@floats - }{}% - \let@environment{#1@float}{#1}% - \let@environment{#1@floats}{#1*}% - \@ifxundefined@cs{#1@write}{}{% - \let@environment{#1}{#1@write}% - }% - }% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\print@float} -% The procedure \cmd\print@float\ prints out the -% deferred floats. -% \changes{4.0b}{1999/06/20}{only execute if there really were floats of the given type} -% \changes{4.0c}{1999/11/13}{*-form mandates pagebreak at each float; only print section head if there is something there.} -% \changes{4.0d}{2000/05/23}{Allow things to break over pages by setting array@default.} -% \changes{4.1b}{2008/08/12}{If class option \classoption{lengthcheck} is in effect, log the height of this float class.} -% -% Here, we make use of the \cmd\floats@sw\ Boolean to select -% the non-floating type of processing. -% \begin{macrocode} -\def\triggerpar{\leavevmode\@@par}% -\def\oneapage{\def\begin@float@pagebreak{\newpage}\def\end@float@pagebreak{\newpage}}% -\def\print@float#1#2{% - \lengthcheck@sw{% - \total@float{#1}% - }{}% - \@ifxundefined@cs{#1write}{}{% - \begingroup - \@booleanfalse\floats@sw - #2% - \raggedbottom - \def\array@default{v}% floats must - \let\@float\@float@LaTeX - \let\@dblfloat\@dblfloat@LaTeX - \let\trigger@float@par\triggerpar - \let@environment{#1}{#1@float}% - \let@environment{#1*}{#1@floats}% - \expandafter\prepdef\csname#1\endcsname{\trigger@float@par}% - \expandafter\prepdef\csname#1*\endcsname{\trigger@float@par}% - \@namedef{fps@#1}{h!}% - \expandafter\immediate - \expandafter\closeout - \csname#1write\endcsname - \everypar{% - \global\let\trigger@float@par\relax - \global\everypar{}\setbox\z@\lastbox - \@ifxundefined@cs{#1sname}{}{% - \begin@float@pagebreak - \expandafter\section - \expandafter*% - \expandafter{% - \csname#1sname\endcsname - }% - }% - }% - \input{\csname#1@stream\endcsname}% - \endgroup - \global\expandafter\let\csname#1write\endcsname\relax - }% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\tally@float} -% \begin{macro}{\total@float} -% \changes{4.1b}{2008/08/12}{Tally and log the height of a float class} -% If we are tallying column inches, \cmd\tally@float\ tallies a contribution to \cmd\ftype@\ \cmd\@captype, -% depending upon the width of \cmd\@currbox. -% In effect, each float class is tallied in two sections, one for narrow, one for wide floats. -% -% If statistics are wanted, \cmd\total@float\ logs the tally for the given float class. -% \changes{4.1f}{2009/07/10}{(AO, 518) Tally register overflow when locument is long} -% The quantity \cmd\@twopowerfourteen\ is $2^{14}$, \cmd\@twopowertwo\ is $2^{2}$. -% \begin{macrocode} -\chardef\@xvi=16\relax -\mathchardef\@twopowerfourteen="4000 -\mathchardef\@twopowertwo="4 -\def\tally@float#1{% - \begingroup -% \end{macrocode} -% We strip all but the least significant 5 bits from \cmd\count\ \cmd\@currbox, -% and put them into \cmd\@tempcnta. We then subtract 16 from \cmd\count\ \cmd\@currbox -% (unless this would make it negative), effectively reversing the process -% carried out in \cmd\@float. -% \begin{macrocode} - \@tempcnta\count\@currbox - \divide\@tempcnta\@xxxii - \multiply\@tempcnta\@xxxii - \advance\count\@currbox-\@tempcnta - \divide\@tempcnta\@xxxii - \@ifnum{\count\@currbox>\@xvi}{% - \advance\count\@currbox-\@xvi\@booleantrue\@temp@sw - }{% - \@booleanfalse\@temp@sw - }% -% \end{macrocode} -% If so desired, we log the characteristics of this float object: -% float class and float placement parameters, height, depth, and width. -% \begin{macrocode} - \show@box@size@sw{% - \class@info{Float #1 - (\the\@tempcnta)[\@temp@sw{16+}{}\the\count\@currbox]^^J% - (\the\ht\@currbox+\the\dp\@currbox)X\the\wd\@currbox - }% - }{}% - \endgroup -% \end{macrocode} -% Here we tally the height of this float object. -% \begin{macrocode} - \expandafter\let - \expandafter\@tempa - \csname fbox@\csname ftype@#1\endcsname\endcsname - \@ifnotrelax\@tempa{% - \@ifhbox\@tempa{% - \setbox\@tempboxa\vbox{\unvcopy\@currbox\hrule}% - \dimen@\ht\@tempboxa - \divide\dimen@\@twopowerfourteen - \@ifdim{\wd\@tempboxa<\textwidth}{% - \advance\dimen@\ht\@tempa - \global\ht\@tempa\dimen@ - }{% - \advance\dimen@\dp\@tempa - \global\dp\@tempa\dimen@ - }% - }{}% - }{}% -}% -\def\total@float#1{% - \expandafter\let - \expandafter\@tempa - \csname fbox@\csname ftype@#1\endcsname\endcsname - \@ifnotrelax\@tempa{% - \@ifhbox\@tempa{% - \@tempdima\the\ht\@tempa\divide\@tempdima\@twopowertwo\@tempcnta\@tempdima - \@tempdimb\the\dp\@tempa\divide\@tempdimb\@twopowertwo\@tempcntb\@tempdimb - \class@info{Total #1: Column(\the\@tempcnta pt), Page(\the\@tempcnta pt)}% - }{}% - }{}% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\write@float} -% \begin{macro}{\write@floats} -% \begin{macro}{\write@@float} -% Handles the case where the name of the float is the same as -% that of the stream. Note that -% \env{longtable} does \emph{not} fit this case. -% Note also: \cmd\write@float\ is \emph{not} a user-level environment, -% therefore it is properly not defined with \cmd\newenvironment. -% \begin{macrocode} -\def\write@float#1{\write@@float{#1}{#1}}% -\def\endwrite@float{\@Esphack}% -\def\write@floats#1{\write@@float{#1*}{#1}}% -\def\endwrite@floats{\@Esphack}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\write@@float} -% \changes{4.0b}{1999/06/20}{AO: Fixed spurious \texttt{CR} and (return) characters in output file. Also, if the document did not have the \cs{end}\texttt{figure} on a line of its own, the macro wouldn't work. Fixed.} -% \begin{macrocode} -\def\write@@float#1#2{% - \ifhmode - \@bsphack - \fi - \chardef\@tempc\csname#2write\endcsname - \toks@{\begin{#1}}% - \def\@tempb{#1}% - \expandafter\let\csname end#1\endcsname\endwrite@float - \catcode`\^^M\active - \@makeother\{\@makeother\}\@makeother\% - \write@floatline -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\write@floatline} -% \begin{macro}{\@write@floatline} -% \begin{macro}{\float@end@tag} -% The procedure \cmd\write@floatline\ only parses; -% it passes its result to \cmd\@write@floatline, which -% writes the line to output, then tests the line -% for the \cmd\end\arg{float} tokens with -% aid of the \cmd\float@end@tag\ procedure. -% \begin{macrocode} -\begingroup - \catcode`\[\the\catcode`\{\catcode`\]\the\catcode`\}\@makeother\{\@makeother\}% - \gdef\float@end@tag#1\end{#2}#3\@nul[% - \def\@tempa[#2]% - \@ifx[\@tempa\@tempb][\end[#2]][\write@floatline]% - ]% - \obeylines% - \gdef\write@floatline#1^^M[% - \begingroup% - \newlinechar`\^^M% - \toks@\expandafter[\the\toks@#1]\immediate\write\@tempc[\the\toks@]% - \endgroup% - \toks@[]% - \float@end@tag#1\end{}\@nul% - ]% -\endgroup -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% -% -% \subsection{Counters} -% The following definitions override those of the \LaTeX\ kernel, -% providing for a greater range of inputs. -% \begin{macrocode} -\def\@alph#1{\ifcase#1\or a\or b\or c\or d\else\@ialph{#1}\fi} -% \end{macrocode} -% -% \begin{macrocode} -\def\@ialph#1{\ifcase#1\or \or \or \or \or e\or f\or g\or h\or i\or j\or - k\or l\or m\or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or - y\or z\or aa\or bb\or cc\or dd\or ee\or ff\or gg\or hh\or ii\or jj\or - kk\or ll\or mm\or nn\or oo\or pp\or qq\or rr\or ss\or tt\or uu\or - vv\or ww\or xx\or yy\or zz\else\@ctrerr\fi} -% \end{macrocode} -% -% -% \subsection{Customization of Sections}% -% -% Patch the standard \LaTeX\ sectioning procedure to: -%\begin{itemize} -%\item -% Allow a sectioning command to trigger the title page, or more generally -% to recognize that it is the first object in the document, -% so we headpatch \cmd\@startsection. -% -%\item -% Allow a tail command in |#6| to uppercase the title, so we retain -% DPC's braces. -% -%\item -% Allow each type of sectioning command to format its number differently, -% so we generalize \cmd\@seccntformat. -% -%\item -% Allow each type of sectioning command to format its argument differently, -% so we generalize \cmd\@hangfrom. -% -%\item -% Allow the starred form of the command to -% mark (the running head) and -% make an entry in the TOC, -% so we put \cmd\@ssect\ on the same footing as \cmd\@sect. -% -% Note that the tokens passed to the TOC now are \emph{not} -% the optional argument of the command, but the required. -% This means that the user can no longer use the former -% to put variant content in to the TOC as the Manual says. -% -% Instead, the optional argument is used to put an alternative -% title into the running headers, a better choice. -% -%\end{itemize} -% -% \begin{macro}{\@startsection} -% Patch a head hook into the basic sectioning command. -% Treat \cmd\@sect\ and \cmd\@ssect\ on an equal footing: -% now their pattern parts are identical. -% \begin{macrocode} -\def\@startsection#1#2#3#4#5#6{% - \@startsection@hook - \if@noskipsec \leavevmode \fi - \par - \@tempskipa #4\relax - \@afterindenttrue - \ifdim \@tempskipa <\z@ - \@tempskipa -\@tempskipa \@afterindentfalse - \fi - \if@nobreak - \everypar{}% - \else - \addpenalty\@secpenalty\addvspace\@tempskipa - \fi - \@ifstar - {\@dblarg{\@ssect@ltx{#1}{#2}{#3}{#4}{#5}{#6}}}% - {\@dblarg{\@sect@ltx {#1}{#2}{#3}{#4}{#5}{#6}}}% -}% -\def\@startsection@hook{}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@sect} -% When defining \cmd\@svsec, do not expand \cmd\@seccntformat. -% Put brace characters back where they were before David Carlisle got at them -% (i.e., as if \cmd\@hangfrom\ had two arguments). -% Protect the mark mechanism from an undefined meaning. -% Pass |#8| to the TOC instead of |#7|. -% Remove \cmd\relax\ from the replacement part of \cmd\@svsec. -% -% The procedure \cmd\@hangfrom\ and \cmd\@runin@to\ can -% be used to process the argument of the head. -% The head can define, e.g., \cmd\@hangfrom@section, to -% do its own processing. -% -% In using \cmd\H@refstepcounter\ in place of \cmd\refstepcounter\ we rely on -% either loading before any package that patches the latter, or -% the convention that the former is the original \LaTeX\ procedure. -% -% \begin{macrocode} -\class@info{Repairing broken LateX \string\@sect}% -\def\@sect@ltx#1#2#3#4#5#6[#7]#8{% - \@ifnum{#2>\c@secnumdepth}{% - \def\H@svsec{\phantomsection}% - \let\@svsec\@empty - }{% - \H@refstepcounter{#1}% - \def\H@svsec{% - \phantomsection - }% - \protected@edef\@svsec{{#1}}% - \@ifundefined{@#1cntformat}{% - \prepdef\@svsec\@seccntformat - }{% - \expandafter\prepdef - \expandafter\@svsec - \csname @#1cntformat\endcsname - }% - }% - \@tempskipa #5\relax - \@ifdim{\@tempskipa>\z@}{% - \begingroup - \interlinepenalty \@M - #6{% - \@ifundefined{@hangfrom@#1}{\@hang@from}{\csname @hangfrom@#1\endcsname}% - {\hskip#3\relax\H@svsec}{\@svsec}{#8}% - }% - \@@par - \endgroup - \@ifundefined{#1mark}{\@gobble}{\csname #1mark\endcsname}{#7}% - \addcontentsline{toc}{#1}{% - \@ifnum{#2>\c@secnumdepth}{% - \protect\numberline{}% - }{% - \protect\numberline{\csname the#1\endcsname}% - }% - #8}% - }{% - \def\@svsechd{% - #6{% - \@ifundefined{@runin@to@#1}{\@runin@to}{\csname @runin@to@#1\endcsname}% - {\hskip#3\relax\H@svsec}{\@svsec}{#8}% - }% - \@ifundefined{#1mark}{\@gobble}{\csname #1mark\endcsname}{#7}% - \addcontentsline{toc}{#1}{% - \@ifnum{#2>\c@secnumdepth}{% - \protect\numberline{}% - }{% - \protect\numberline{\csname the#1\endcsname}% - }% - #8}% - }% - }% - \@xsect{#5}% -}% -\def\@hang@from#1#2#3{\@hangfrom{#1#2}#3}% -\def\@runin@to #1#2#3{#1#2#3}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@ssect} -% Put brace characters back where they were before David Carlisle got at them -% (as if \cmd\@hangfrom\ has two arguments). -% Possibly set a mark. -% Make a TOC entry. -% -% Note that, for compatibility with the \classname{hyperref} package, we -% need to provide the interface required by that package -% (actually required by \file{pdfmark.def} and \file{nameref.sty}), -% namely -% the definition of \cmd\@currentlabelname\ (but now removed), -% the insertion of the procedure \cmd\Sectionformat\ (but why is this needed?), and -% the call to \cmd\phantomsection\ (which must precede the call to \cmd\addcontentsline). -% We also have to sidestep the patch to \cmd\@ssect\ in that same file, therefore -% we use a different control sequence name in the call from \cmd\@startsection. -% \changes{4.0c}{1999/11/13}{(AO, 116) Hyperref compatibility} -% \changes{4.0f}{2001/07/13}{(AO, 404) Hyperref compatibility} -% \begin{macrocode} -\def\@ssect@ltx#1#2#3#4#5#6[#7]#8{% -% \end{macrocode} -% Removed |\def\@currentlabelname{#8}| -% \begin{macrocode} - \def\H@svsec{\phantomsection}% - \@tempskipa #5\relax - \@ifdim{\@tempskipa>\z@}{% - \begingroup - \interlinepenalty \@M - #6{% - \@ifundefined{@hangfroms@#1}{\@hang@froms}{\csname @hangfroms@#1\endcsname}% -% \end{macrocode} -% Removed |{\hskip#3\relax\H@svsec}{\Sectionformat{#8}{#1}}| -% \begin{macrocode} - {\hskip#3\relax\H@svsec}{#8}% - }% - \@@par - \endgroup - \@ifundefined{#1smark}{\@gobble}{\csname #1smark\endcsname}{#7}% - \addcontentsline{toc}{#1}{\protect\numberline{}#8}% - }{% - \def\@svsechd{% - #6{% - \@ifundefined{@runin@tos@#1}{\@runin@tos}{\csname @runin@tos@#1\endcsname}% -% \end{macrocode} -% Removed |{\hskip#3\relax\H@svsec}{\Sectionformat{#8}{#1}}| -% \begin{macrocode} - {\hskip#3\relax\H@svsec}{#8}% - }% - \@ifundefined{#1smark}{\@gobble}{\csname #1smark\endcsname}{#7}% - \addcontentsline{toc}{#1}{\protect\numberline{}#8}% - }% - }% - \@xsect{#5}% -}% -\def\@hang@froms#1#2{#1#2}% -\def\@runin@tos #1#2{#1#2}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\init@hyperref} -% \changes{4.1b}{2008/08/12}{Acquire \classname{hyperref} savoire} -% Document classes that incorporate this package will be \classname{hyperref}-savvy. -% (To accomplish this, we ensure that \cmd\hyperanchor\ and \cmd\hyper@last\ are both defined.) -% Being \classname{hyperref}-savvy levels some requirements on us, but the benefits are many. -% -% One is that the TOC will not get amnesia and require a full set of three typesetting runs before its formatting is stable. -% Instead, only two runs are required: the first updates the auxiliary file, the second the TOC. -% However, the formatting of the document does not change. -% -% Another aspect of being \classname{hyperref}-savvy is that the syntax of commands in the \file{.aux} file will not change -% if \classname{hyperref} is turned on or off. -% -% Note that \cmd\hyper@anchorstart\ and \cmd\hyper@anchorend\ constitute the programming interface -% for a hypertext anchor (the target of a hypertext link); \cmd\hyper@linkstart\ and \cmd\hyper@linkend\ -% are the interface for a hypertext link. -% \begin{macrocode} -\def\init@hyperref{% - \providecommand\phantomsection{}% - \providecommand\hyper@makecurrent[1]{}% - \providecommand\Hy@raisedlink[1]{}% - \providecommand\hyper@anchorstart[1]{}% - \providecommand\hyper@anchorend{}% - \providecommand\hyper@linkstart[2]{}% - \providecommand\hyper@linkend{}% - \providecommand\@currentHref{}% -}% -\let\H@refstepcounter\refstepcounter -\appdef\document@inithook{% - \init@hyperref -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\sec@upcase} -% Upper case for sections (optional upper case items). These are -% created so that some headings can be toggled between mixed case and -% upper case readily. -% Headings that might be changed can be wrapped in the style file in -% \cmd\sec@upcase\arg{text} constructs; -% the expansion of \cmd\sec@upcase\ is -% controlled here. It is \cmd\relax\ by default (mixed case heads), and -% can easily be changed to \cmd\uppercase\ if desired. -% If mixed-case headings are wanted by the editor, authors {\em must} -% supply mixed case text, although this is what authors should be doing -% anyway. -% (Mixed can be converted to upper, -% but the reverse transformation cannot be automated.) -% -% The following setting gives the \LaTeX\ default. -% \begin{macrocode} -\def\sec@upcase#1{\relax{#1}}% -% \end{macrocode} -% \end{macro} -% -% -% \subsection{Patch the \env{tabular} and \env{array} Environments} -% -% \begin{macro}{\endtabular} -% \begin{macro}{\endarray} -% \changes{4.1b}{2008/08/12}{Patch the array package even later: after all package patches go in.} -% We headpatch the begin processing and tailpatch the end processing -% of the \env{tabular} and \env{array} environments. -% A document class can define these hooks as needed. -% -% We proceed with care to make further patches to -% support tabulars that break over pages. -% Our patches will not necessarily be effective for -% other packages that replace the \LaTeX\ \env{array} and \env{tabular} -% environments. I know of none that do so. -% \begin{macrocode} -\appdef\document@inithook{% - \@ifpackageloaded{array}{\switch@array}{\switch@tabular}% - \prepdef\endtabular{\endtabular@hook}% - \@provide\endtabular@hook{}% - \prepdef\endarray{\endarray@hook}% - \@provide\endarray@hook{}% - \providecommand\array@hook{}% -% \end{macrocode} -% Install, effectively, a head patch to \cmd\tabular. -% In order to avoid interference from, e.g., the \classname{array} package, -% we must perform this patch only \emph{after} packages load. -% \changes{4.0c}{1999/11/13}{(AO, 130) Interference from array package} -% \begin{macrocode} - \prepdef\@tabular{\tabular@hook}% - \@provide\tabular@hook{}% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\switch@tabular} -% \begin{macro}{\switch@array} -% The two procedures \cmd\switch@tabular\ and \cmd\switch@array\ -% apply needed patches to the various tabular procedures, -% the former applying to the \LaTeX\ kernel, the latter to the -% required \classname{array} package (and to the number of other -% required packages that load it). -% -% \begin{macrocode} -\def\switch@tabular{% - \let\@array@sw\@array@sw@array - \@ifx{\@array\@array@LaTeX}{% - \@ifx{\multicolumn\multicolumn@LaTeX}{% - \@ifx{\@tabular\@tabular@LaTeX}{% - \@ifx{\@tabarray\@tabarray@LaTeX}{% - \@ifx{\array\array@LaTeX}{% - \@ifx{\endarray\endarray@LaTeX}{% - \@ifx{\endtabular\endtabular@LaTeX}{% - \@ifx{\@mkpream\@mkpream@LaTeX}{% - \@ifx{\@addamp\@addamp@LaTeX}{% - \@ifx{\@arrayacol\@arrayacol@LaTeX}{% - \@ifx{\@tabacol\@tabacol@LaTeX}{% - \@ifx{\@arrayclassz\@arrayclassz@LaTeX}{% - \@ifx{\@tabclassiv\@tabclassiv@LaTeX}{% - \@ifx{\@arrayclassiv\@arrayclassiv@LaTeX}{% - \@ifx{\@tabclassz\@tabclassz@LaTeX}{% - \@ifx{\@classv\@classv@LaTeX}{% - \@ifx{\hline\hline@LaTeX}{% - \@ifx{\@tabularcr\@tabularcr@LaTeX}{% - \@ifx{\@xtabularcr\@xtabularcr@LaTeX}{% - \@ifx{\@xargarraycr\@xargarraycr@LaTeX}{% - \@ifx{\@yargarraycr\@yargarraycr@LaTeX}{% - \true@sw - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - {% - \class@info{Patching LaTeX tabular.}% - }{% - \class@info{Unrecognized LaTeX tabular. Please update this document class! (Proceeding with fingers crossed.)}% - }% - \let\@array\@array@ltx - \let\multicolumn\multicolumn@ltx - \let\@tabular\@tabular@ltx - \let\@tabarray\@tabarray@ltx - \let\array\array@ltx - \let\endarray\endarray@ltx - \let\endtabular\endtabular@ltx - \let\@mkpream\@mkpream@ltx - \let\@addamp\@addamp@ltx - \let\@arrayacol\@arrayacol@ltx - \let\@tabacol\@tabacol@ltx - \let\@arrayclassz\@arrayclassz@ltx - \let\@tabclassiv\@tabclassiv@ltx - \let\@arrayclassiv\@arrayclassiv@ltx - \let\@tabclassz\@tabclassz@ltx - \let\@classv\@classv@ltx - \let\hline\hline@ltx - \let\@tabularcr\@tabularcr@ltx - \let\@xtabularcr\@xtabularcr@ltx - \let\@xargarraycr\@xargarraycr@ltx - \let\@yargarraycr\@yargarraycr@ltx -}% -% \end{macrocode} -% \changes{4.1b}{2008/08/12}{(AO, 505) Try to accommodate \classname{colortbl}.} -% \begin{macrocode} -\def\switch@array{% - \@ifpackageloaded{colortbl}{\let\switch@array@info\colortbl@message}{\let\switch@array@info\array@message}% - \let\@array@sw\@array@sw@LaTeX - \@ifx{\@array\@array@array}{% - \@ifx{\@tabular\@tabular@array}{% - \@ifx{\@tabarray\@tabarray@array}{% - \@ifx{\array\array@array}{% - \@ifx{\endarray\endarray@array}{% - \@ifx{\endtabular\endtabular@array}{% - \@ifx{\@mkpream\@mkpream@array}{% - \@ifx{\@classx\@classx@array}{% - \@ifx{\insert@column\insert@column@array}{% - \@ifx{\@arraycr\@arraycr@array}{% - \@ifx{\@xarraycr\@xarraycr@array}{% - \@ifx{\@xargarraycr\@xargarraycr@array}{% - \@ifx{\@yargarraycr\@yargarraycr@array}{% - \true@sw - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }% - }{% - \false@sw - }{% - \class@info{Patching array package.}% - }{% - \switch@array@info - }% - \let\@array \@array@array@new - \let\@@array \@array % Cosi fan tutti - \let\@tabular \@tabular@array@new - \let\@tabarray \@tabarray@array@new - \let\array \array@array@new - \let\endarray \endarray@array@new - \let\endtabular\endtabular@array@new - \let\@mkpream \@mkpream@array@new - \let\@classx \@classx@array@new - \let\@arrayacol\@arrayacol@ltx - \let\@tabacol \@tabacol@ltx - \let\insert@column\insert@column@array@new - \expandafter\let\csname endtabular*\endcsname\endtabular % Cosi fan tutti - \let\@arraycr \@arraycr@new - \let\@xarraycr \@xarraycr@new - \let\@xargarraycr\@xargarraycr@new - \let\@yargarraycr\@yargarraycr@new -}% -\def\array@message{% - \class@info{Unrecognized array package. Please update this document class! (Proceeding with fingers crossed.)}% -}% -\def\colortbl@message{% - \class@info{colortbl package is loaded. (Proceeding with fingers crossed.)}% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@array@sw} -% The Boolean \cmd\@array@sw\ must be different depending on -% whether the \classname{array} package is loaded. -% \begin{macrocode} -\def\@array@sw@LaTeX{\@ifx{\\\@tabularcr}}% -\def\@array@sw@array{\@ifx{\d@llarbegin\begingroup}}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@tabular} -% \changes{4.1b}{2008/08/12}{(AO, 505) try to accommodate \classname{colortbl}.} -% We provide the old versions of \cmd\@tabular\ along with the respective new versions. -% The change here is to avoid committing to LR mode. That will be done later (as late as possible, naturally). -% -% Compatibility note: I had done \cmd\let\ \cmd\col@sep\ \cmd\@undefined\ here, but -% this was not compatible with \classname{colortbl}. I have removed that statement. -% \begin{macrocode} -\def\@tabular@LaTeX{% - \leavevmode - \hbox\bgroup$% - \let\@acol\@tabacol - \let\@classz\@tabclassz - \let\@classiv\@tabclassiv - \let\\\@tabularcr - \@tabarray -}% -\def\@tabular@ltx{% - \let\@acoll\@tabacoll - \let\@acolr\@tabacolr - \let\@acol\@tabacol - \let\@classz\@tabclassz - \let\@classiv\@tabclassiv - \let\\\@tabularcr - \@tabarray -}% -\def\@tabular@array{% - \leavevmode - \hbox\bgroup$% - \col@sep\tabcolsep - \let\d@llarbegin\begingroup - \let\d@llarend\endgroup - \@tabarray -}% -\def\@tabular@array@new{% - \let\@acoll\@tabacoll - \let\@acolr\@tabacolr - \let\@acol\@tabacol -% \end{macrocode} -% \let\col@sep\@undefined -% \begin{macrocode} - \let\d@llarbegin\begingroup - \let\d@llarend\endgroup - \@tabarray -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@tabarray} -% Here we provide old and new versions of the \cmd\@tabarray\ procedure. -% The change here is to parametrize the default vertical alignment, -% which is 'c' in standard \LaTeX. -% Under some circumstances, we want to change this to, say, 'v'. -% -% \changes{4.1b}{2008/08/12}{(AO, 505) try to accommodate \classname{colortbl}.} -% FIXME: must decouple \env{array} and \env{tabular}. Done (it seems). -% -% Note on \classname{colortbl}: this package head-patches \cmd\@tabarray -% with its own command \cmd\CT@start, and tails onto \cmd\endarray\ with \cmd\CT@end. -% It fortuitously does the former at \cmd\AtBeginDocument\ time, and, fortuitously, -% we do not patch \cmd\endarray, which it overwrites. -% \begin{macrocode} -\def\@tabarray@LaTeX{% - \m@th\@ifnextchar[\@array{\@array[c]}% -}% -\def\@tabarray@ltx{% - \m@th\@ifnextchar[\@array{\expandafter\@array\expandafter[\array@default]}% -}% -\def\@tabarray@array{% - \@ifnextchar[{\@@array}{\@@array[c]}% -}% -\def\@tabarray@array@new{% - \@ifnextchar[{\@@array}{\expandafter\@@array\expandafter[\array@default]}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@tabularcr} -% \begin{macro}{\@tbpen} -% \begin{macro}{\@tabularcr} -% \begin{macro}{\@xtabularcr} -% \begin{macro}{\@xargarraycr} -% \begin{macro}{\@yargarraycr} -% \begin{macro}{\@arraycr} -% \begin{macro}{\@xarraycr} -% We provide for the \cmd\\ command within \env{tabular} to provide control over page breaking, just the same as -% that of \env{eqnarray}. -% -% The count register \cmd\intertabularlinepenalty\ is similar to \cmd\interdisplaylinepenalty: it is the penalty -% associated with each row of a tabular. When it is set to \cmd\@M, the tabular will cleave together. -% -% The count register \cmd\@tbpen\ is similar to \cmd\@eqpen: it memorizes the penalty to use after the current tabular row. -% If the \cmd\\ command is in its star form, then \cmd\@eqpen\ is set to \cmd\@M. -% -% We append code to \cmd\samepage\ so that a tabular within its scope will cleave together. -% -% We keep the standard definition of \cmd\@tabularcr\ in \cmd\@tabularcr@LaTeX\ for reference, -% and provide a new definition that works like \cmd\@eqncr: it sets \cmd\@tbpen\ to \cmd\@M\ if the star was given. -% -% We also provide new versions of \cmd\@xtabularcr, \cmd\@xargarraycr, and \cmd\@yargarraycr, all of which invoke \cmd\@tbpen. -% -% The \cmd\switch@tabular\ procedure switches in the new definitions. -% \begin{macrocode} -\newcount\intertabularlinepenalty -\intertabularlinepenalty=100 -\newcount\@tbpen -\appdef\samepage{\intertabularlinepenalty\@M}% -\def\@tabularcr@LaTeX{{\ifnum 0=`}\fi \@ifstar \@xtabularcr \@xtabularcr}% -\def\@tabularcr@ltx{{\ifnum 0=`}\fi \@ifstar {\global \@tbpen \@M \@xtabularcr }{\global \@tbpen \intertabularlinepenalty \@xtabularcr }}% -\def\@xtabularcr@LaTeX{\@ifnextchar [\@argtabularcr {\ifnum 0=`{\fi }\cr }}% -\def\@xtabularcr@ltx{\@ifnextchar [\@argtabularcr {\ifnum 0=`{\fi }\cr \noalign {\penalty \@tbpen }}}% -\def\@xargarraycr@LaTeX#1{\@tempdima #1\advance \@tempdima \dp \@arstrutbox \vrule \@height \z@ \@depth \@tempdima \@width \z@ \cr}% -\def\@xargarraycr@ltx#1{\@tempdima #1\advance \@tempdima \dp \@arstrutbox \vrule \@height \z@ \@depth \@tempdima \@width \z@ \cr \noalign {\penalty \@tbpen }}% -\def\@yargarraycr@LaTeX#1{\cr \noalign {\vskip #1}}% -\def\@yargarraycr@ltx#1{\cr \noalign {\penalty \@tbpen \vskip #1}}% -% \end{macrocode} -% -% If the \classname{array} package has been loaded, we must alter the meanings of -% \cmd\@arraycr, \cmd\@xarraycr, \cmd\@xargarraycr, and \cmd\@yargarraycr. -% In this case, it is \cmd\switch@array\ that switches in the new definitions. -% \begin{macrocode} -\def\@arraycr@array{% - \relax - \iffalse{\fi\ifnum 0=`}\fi - \@ifstar \@xarraycr \@xarraycr -}% -\def\@arraycr@new{% - \relax - \iffalse{\fi\ifnum 0=`}\fi - \@ifstar {\global \@tbpen \@M \@xarraycr }{\global \@tbpen \intertabularlinepenalty \@xarraycr }% -}% -\def\@xarraycr@array{% - \@ifnextchar [%] - \@argarraycr {\ifnum 0=`{}\fi\cr}% -}% -\def\@xarraycr@new{% - \@ifnextchar [%] - \@argarraycr {\ifnum 0=`{}\fi\cr \noalign {\penalty \@tbpen }}% -}% -\def\@xargarraycr@array#1{% - \unskip - \@tempdima #1\advance\@tempdima \dp\@arstrutbox - \vrule \@depth\@tempdima \@width\z@ - \cr -}% -\def\@xargarraycr@new#1{% - \unskip - \@tempdima #1\advance\@tempdima \dp\@arstrutbox - \vrule \@depth\@tempdima \@width\z@ - \cr - \noalign {\penalty \@tbpen }% -}% -\def\@yargarraycr@array#1{% - \cr - \noalign{\vskip #1}% -}% -\def\@yargarraycr@new#1{% - \cr - \noalign{\penalty \@tbpen \vskip #1}% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\array} -% We provide old and new versions of the \cmd\array\ procedure for both \LaTeX\ and the \classname{array} package. -% The change here is to accomodate the new procedures that will be called for the array boundaries, even -% though at present they are not special. -% A thought: here is where matrices can be readily accomodated. -% \begin{macrocode} -\def\array@LaTeX{% - \let\@acol\@arrayacol - \let\@classz\@arrayclassz - \let\@classiv\@arrayclassiv - \let\\\@arraycr - \let\@halignto\@empty - \@tabarray -}% -\def\array@ltx{% - \@ifmmode{}{\@badmath$}% - \let\@acoll\@arrayacol - \let\@acolr\@arrayacol - \let\@acol\@arrayacol - \let\@classz\@arrayclassz - \let\@classiv\@arrayclassiv - \let\\\@arraycr - \let\@halignto\@empty - \@tabarray -}% -\def\array@array{% - \col@sep\arraycolsep - \def\d@llarbegin{$}\let\d@llarend\d@llarbegin\gdef\@halignto{}% - \@tabarray -} -\def\array@array@new{% - \@ifmmode{}{\@badmath$}% - \let\@acoll\@arrayacol - \let\@acolr\@arrayacol - \let\@acol\@arrayacol -% \end{macrocode} -% \changes{4.1b}{2008/08/12}{(AO, 505) try to accommodate \classname{colortbl}.} -% Removed: \verb+\let\col@sep\@undefined+ -% \begin{macrocode} - \def\d@llarbegin{$}% - \let\d@llarend\d@llarbegin - \gdef\@halignto{}% - \@tabarray -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@array} -% Here we provide old and new versions of \cmd\@array. -% The change here is to provide a convenient, flexible, and extensible -% mechanism for new vertical alignment options. -% -% Instead of testing the optional argument with \cmd\if, we -% use a dispatcher based on \cmd\csname. -% -% We also refrain from using \cmd\ialign, which would set -% the \cmd\tabskip\ to the wrong value. -% -% Finally, the procedure to set the \cmd\@arstrutbox\ -% is broken out so that it can be patched. -% \begin{macrocode} -\def\@array@LaTeX[#1]#2{% - \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi\fi - \bgroup - \setbox\@arstrutbox\hbox{% - \vrule \@height\arraystretch\ht\strutbox - \@depth\arraystretch \dp\strutbox - \@width\z@}% - \@mkpream{#2}% - \edef\@preamble{% - \ialign \noexpand\@halignto - \bgroup \@arstrut \@preamble \tabskip\z@skip \cr}% - \let\@startpbox\@@startpbox \let\@endpbox\@@endpbox - \let\tabularnewline\\% - \let\par\@empty - \let\@sharp##% - \set@typeset@protect - \lineskip\z@skip\baselineskip\z@skip - \ifhmode \@preamerr\z@ \@@par\fi - \@preamble -}% -\def\@array@ltx[#1]#2{% - \@nameuse{@array@align@#1}% - \set@arstrutbox - \@mkpream{#2}% - \prepdef\@preamble{% - \tabskip\tabmid@skip - \@arstrut - }% - \appdef\@preamble{% - \tabskip\tabright@skip - \cr - \array@row@pre - }% -% \let\@startpbox\@@startpbox -% \let\@endpbox\@@endpbox - \let\tabularnewline\\% - \let\par\@empty - \let\@sharp##% - \set@typeset@protect - \lineskip\z@skip\baselineskip\z@skip - \tabskip\tableft@skip\relax - \ifhmode \@preamerr\z@ \@@par\fi - \everycr{}% - \expandafter\halign\expandafter\@halignto\expandafter\bgroup\@preamble -}% -% -\def\set@arstrutbox{% - \setbox\@arstrutbox\hbox{% - \vrule \@height\arraystretch\ht\strutbox - \@depth\arraystretch \dp\strutbox - \@width\z@ - }% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@array@array} -% -% \begin{macrocode} -\def\@array@array[#1]#2{% - \@tempdima \ht \strutbox - \advance \@tempdima by\extrarowheight - \setbox \@arstrutbox \hbox{\vrule - \@height \arraystretch \@tempdima - \@depth \arraystretch \dp \strutbox - \@width \z@}% - \begingroup - \@mkpream{#2}% - \xdef\@preamble{\noexpand \ialign \@halignto - \bgroup \@arstrut \@preamble - \tabskip \z@ \cr}% - \endgroup - \@arrayleft - \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi \fi - \bgroup - \let \@sharp ##\let \protect \relax - \lineskip \z@ - \baselineskip \z@ - \m@th - \let\\\@arraycr \let\tabularnewline\\\let\par\@empty \@preamble -}% -\def\@array@array@new[#1]#2{% - \@tempdima\ht\strutbox - \advance\@tempdima by\extrarowheight - \setbox\@arstrutbox\hbox{% - \vrule \@height\arraystretch\@tempdima - \@depth \arraystretch\dp\strutbox - \@width \z@ - }% - \begingroup - \@mkpream{#2}% - \xdef\@preamble{\@preamble}% - \endgroup - \prepdef\@preamble{% - \tabskip\tabmid@skip - \@arstrut - }% - \appdef\@preamble{% - \tabskip\tabright@skip - \cr - \array@row@pre - }% - \@arrayleft - \@nameuse{@array@align@#1}% - \m@th - \let\\\@arraycr - \let\tabularnewline\\% - \let\par\@empty - \let\@sharp##% - \set@typeset@protect - \lineskip\z@\baselineskip\z@ - \tabskip\tableft@skip - \everycr{}% - \expandafter\halign\expandafter\@halignto\expandafter\bgroup\@preamble -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\endarray} -% Here we provide old and new versions of \cmd\endarray. -% The change here is to use a single procedure to close -% out any array-like structure, namely \cmd\endarray@ltx. -% It merely closes out the \cmd\halign. -% \begin{macrocode} -\def\endarray@LaTeX{% - \crcr\egroup\egroup -}% -\def\endarray@ltx{% - \crcr\array@row@pst\egroup\egroup -}% -\def\endarray@array{% - \crcr \egroup \egroup \@arrayright \gdef\@preamble{}% -}% -\def\endarray@array@new{% - \crcr\array@row@pst\egroup\egroup % Same as \endarray@ltx - \@arrayright - \global\let\@preamble\@empty -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\endtabular} -% -% \begin{macrocode} -\def\endtabular@LaTeX{% - \crcr\egroup\egroup $\egroup -}% -\def\endtabular@ltx{% - \endarray -}% -\def\endtabular@array{% - \endarray $\egroup -}% -\def\endtabular@array@new{% - \endarray -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{endtabular*} -% Here we provide a proper definition for the star-form of \enve{endtabular}. -% It is one of the enduring curiosities that the \LaTeX\ kernel continues to use -% dangerously and inappropriately ``optimized'' definitions for such commands. -% \begin{macrocode} -\@namedef{endtabular*}{\endtabular}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\multicolumn} -% -% \begin{macrocode} -\long\def\multicolumn@LaTeX#1#2#3{% - \multispan{#1}\begingroup - \@mkpream{#2}% - \def\@sharp{#3}\set@typeset@protect - \let\@startpbox\@@startpbox\let\@endpbox\@@endpbox - \@arstrut \@preamble\hbox{}\endgroup\ignorespaces -}% -\long\def\multicolumn@ltx#1#2#3{% - \multispan{#1}% - \begingroup - \@mkpream{#2}% - \def\@sharp{#3}% - \set@typeset@protect - %\let\@startpbox\@@startpbox\let\@endpbox\@@endpbox - \@arstrut - \@preamble - \hbox{}% - \endgroup - \ignorespaces -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@array@align@} -% \begin{macro}{\array@default} -% Here are the various procedures for the vertical alignment options. -% The change from standard \LaTeX\ is that we do not go into math mode -% in every case: only when required by \cmd\vcenter. -% Also, we use \cmd\aftergroup\ to close out the boxes and modes we have started. -% It requires only that each procedure issue exactly one unmatched \cmd\bgroup. -% -% We establish here the default vertical alignment. -% \begin{macrocode} -\def\@array@align@t{\leavevmode\vtop\bgroup}% -\def\@array@align@b{\leavevmode\vbox\bgroup}% -\def\@array@align@c{\leavevmode\@ifmmode{\vcenter\bgroup}{$\vcenter\bgroup\aftergroup$\aftergroup\relax}}% -\def\@array@align@v{% - \@ifmmode{% - \@badmath - \vcenter\bgroup - }{% - \@ifinner{% - $\vcenter\bgroup\aftergroup$ - }{% - \@@par\bgroup - }% - }% -}% -\def\array@default{c}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\array@row@pre} -% \begin{macro}{\array@row@pst} -% \begin{macro}{\array@row@rst} -% The procedure \cmd\array@row@rst\ reestablishes a default context for -% an alignment, so that they can be nested. -% Any environment or procedure that alters the way alignments are formatted -% must patch this procedure to restore from that alteration. -% To start things off, we equate \cmd\@array@align@v\ to \cmd\@array@align@c, -% because it does not make sense to do the former in any context other -% than the MVL or in a list that will be unboxed onto the MVL. -% \begin{macrocode} -\def\array@row@rst{% - \let\@array@align@v\@array@align@c -}% -\def\array@row@pre{}% -\def\array@row@pst{}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\toprule} -% \begin{macro}{\colrule} -% \begin{macro}{\botrule} -% Default definitions for \cmd\toprule, \cmd\colrule, \cmd\botrule -% \begin{macrocode} -\newcommand\toprule{\tab@rule{\column@font}{\column@fil}{\frstrut}}% -\newcommand\colrule{\unskip\lrstrut\\\tab@rule{\body@font}{}{\frstrut}}% -\newcommand\botrule{\unskip\lrstrut\\\noalign{\hline@rule}{}}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\hline} -% \begin{macrocode} -\def\hline@LaTeX{% - \noalign{\ifnum0=`}\fi\hrule \@height \arrayrulewidth \futurelet - \reserved@a\@xhline -}% -\def\hline@ltx{% - \noalign{% - \ifnum0=`}\fi - \hline@rule - \futurelet\reserved@a\@xhline - % \noalign ended in \@xhline -}% -\def\@xhline@unneeded{% - \say\reserved@a - \ifx\reserved@a\hline - \vskip\doublerulesep - \vskip-\arrayrulewidth - \fi - \ifnum0=`{\fi}% -}% -\def\tab@rule#1#2#3{% - \crcr - \noalign{% - \hline@rule - \gdef\@arstrut@hook{% - \global\let\@arstrut@hook\@empty - #3% - }% - \gdef\cell@font{#1}% - \gdef\cell@fil{#2}% - }% -}% -\def\column@font{}% -\def\column@fil{}% -\def\body@font{}% -\def\cell@font{}% -\def\frstrut{}% -\def\lrstrut{}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@arstrut@hline} -% \begin{macro}{\@arstrut@org} -% \begin{macro}{\@arstrut@hook} -% \begin{macro}{\@arstrutbox@hline} -% \begin{macro}{\set@arstrutbox} -% \begin{macro}{\hline@rule} -% The procedure \cmd\@arstrut@hline\ is substantially the same as -% \cmd\@arstrut, except the strut copied in is \cmd\@arstrutbox@hline -% instead of \cmd\@arstrutbox. -% -% The procedure \cmd\@arstrut@hook\ is redefined in \cmd\tab@rule! -% -% The register \cmd\@arstrutbox@hline. -% -% We append to \cmd\set@arstrutbox\ the code necessary to set a strut following an \cmd\hline. -% -% The procedure \cmd\hline@rule\ lays down a rule, and changes the meaning of \cmd\@arstrut\ -% so that the next line will be correctly strutted. -% -% The \cmd\@arstrut@hline@clnc\ is a klootch, a magic number. -% \begin{macrocode} -\def\@arstrut@hline{% - \relax - \@ifmmode{\copy}{\unhcopy}\@arstrutbox@hline - \@arstrut@hook -}% -% -\let\@arstrut@org\@arstrut -\def\@arstrut@hook{% - \global\let\@arstrut\@arstrut@org -}% -% -\newbox\@arstrutbox@hline -\appdef\set@arstrutbox{% - \setbox\@arstrutbox@hline\hbox{% - \setbox\z@\hbox{$0^{0}_{}$}% - \dimen@\ht\z@\advance\dimen@\@arstrut@hline@clnc - \@ifdim{\dimen@<\arraystretch\ht\strutbox}{\dimen@=\arraystretch\ht\strutbox}{}% - \vrule \@height\dimen@ - \@depth\arraystretch \dp\strutbox - \@width\z@ - }% -}% -% -\def\hline@rule{% - \hrule \@height \arrayrulewidth - \global\let\@arstrut\@arstrut@hline -}% -\def\@arstrut@hline@clnc{2\p@}% % Klootch: magic number -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\tableft@skip} -% \begin{macrocode} -\def\tableft@skip{\z@skip}% -\def\tabmid@skip{\z@skip}%\@flushglue -\def\tabright@skip{\z@skip}% -\def\tableftsep{\tabcolsep}% -\def\tabmidsep{\tabcolsep}% -\def\tabrightsep{\tabcolsep}% -\def\cell@fil{}% -\def\pbox@hook{}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@arstrut} -% \begin{macrocode} -\appdef\@arstrut{\@arstrut@hook}% -\let\@arstrut@hook\@empty -\def\@addtopreamble{\appdef\@preamble}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@mkpream} -% \begin{macrocode} -\def\@mkpream@LaTeX#1{% - \@firstamptrue\@lastchclass6 - \let\@preamble\@empty - \let\protect\@unexpandable@protect - \let\@sharp\relax - \let\@startpbox\relax\let\@endpbox\relax - \@expast{#1}% - \expandafter\@tfor \expandafter - \@nextchar \expandafter:\expandafter=\reserved@a\do - {\@testpach\@nextchar - \ifcase \@chclass \@classz \or \@classi \or \@classii \or \@classiii - \or \@classiv \or\@classv \fi\@lastchclass\@chclass}% - \ifcase \@lastchclass \@acol - \or \or \@preamerr \@ne\or \@preamerr \tw@\or \or \@acol \fi -}% -\def\@mkpream@ltx#1{% - \@firstamptrue - \@lastchclass6 - \let\@preamble\@empty - \let\protect\@unexpandable@protect - \let\@sharp\relax -%\let\@startpbox\relax\let\@endpbox\relax - \@expast{#1}% - \expandafter\@tfor\expandafter\@nextchar\expandafter:\expandafter=\reserved@a - \do{% - \expandafter\@testpach\expandafter{\@nextchar}% - \ifcase\@chclass - \@classz - \or - \@classi - \or - \@classii - \or - \@classiii - \or - \@classiv - \or - \@classv - \fi - \@lastchclass\@chclass - }% - \ifcase\@lastchclass - \@acolr % right-hand column - \or - \or - \@preamerr\@ne - \or - \@preamerr\tw@ - \or - \or - \@acolr % right-hand column - \fi -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\insert@column} -% \begin{macrocode} -\def\insert@column@array{% - \the@toks \the \@tempcnta - \ignorespaces \@sharp \unskip - \the@toks \the \count@ \relax -}% -\def\insert@column@array@new{% - \the@toks\the\@tempcnta - \array@row@rst\cell@font - \ignorespaces\@sharp\unskip - \the@toks\the\count@ - \relax -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@mkpream@relax} -% The procedure \cmd\@mkpream@relax\ participates in a strange and wonderful -% method of binding the alignment procedure---but only certain parts thereof. -% -% Here is how it works: in \LaTeX, the \classname{array} package, and in the -% \classname{longtable} package alike, there is a need to create an alignment -% preamble (using \cmd\@mkpream) for use by the upcoming \cmd\halign. -% Then, in both \classname{array} and \classname{longtable}, \TeX's \cmd\edef\ -% is used to `compile in place' that alignment preamble. -% -% In the case of \classname{array}, -% the operation is done in order to pre-expand the use of \texttt{*}; -% in \classname{longtable}, it is to set the widths of the columns. -% -% Now, during this \cmd\edef, certain control sequence names must \emph{not} -% be expanded, and those are robustified by \cmd\@mkpream@relax. -% -% \begin{macrocode} -\def\@mkpream@relax{% - \let\tableftsep \relax - \let\tabmidsep \relax - \let\tabrightsep \relax - \let\array@row@rst\relax - \let\cell@font \relax - \let\@startpbox \relax -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@mkpream} -% We insert \cmd\@mkpream@relax\ at the head of the procedure. -% The robustifying of \cmd\@startpbox\ and \cmd\@endpbox\ is taken over by this mechanism. -% We also invoke \cmd\@acolr\ instead of \cmd\@acol\ when a right-hand column is at hand. -% -% \changes{4.1b}{2008/08/12}{(AO, 505) try to accommodate \classname{colortbl}.} -% Note on \classname{colortbl}: this package head-patches \cmd\@mkpream\ to robustify -% a number of its commands during the construction of the alignment preamble. -% The best we can do is to supplement the \cmd\@mkpream@relax\ procedure to perform this action. -% \begin{macrocode} -\def\@mkpream@array#1{% - \gdef\@preamble{}\@lastchclass 4 \@firstamptrue - \let\@sharp\relax \let\@startpbox\relax \let\@endpbox\relax - \@temptokena{#1}\@tempswatrue - \@whilesw\if@tempswa\fi{\@tempswafalse\the\NC@list}% - \count@\m@ne - \let\the@toks\relax - \prepnext@tok - \expandafter \@tfor \expandafter \@nextchar - \expandafter :\expandafter =\the\@temptokena \do - {\@testpach - \ifcase \@chclass \@classz \or \@classi \or \@classii - \or \save@decl \or \or \@classv \or \@classvi - \or \@classvii \or \@classviii - \or \@classx - \or \@classx \fi - \@lastchclass\@chclass}% - \ifcase\@lastchclass - \@acol \or - \or - \@acol \or - \@preamerr \thr@@ \or - \@preamerr \tw@ \@addtopreamble\@sharp \or - \or - \else \@preamerr \@ne \fi - \def\the@toks{\the\toks}% -}% -\def\@mkpream@array@new#1{% - \gdef\@preamble{}% - \@lastchclass\f@ur - \@firstamptrue - \let\@sharp\relax - \@mkpream@relax -%\let\@startpbox\relax\let\@endpbox\relax - \@temptokena{#1}\@tempswatrue - \@whilesw\if@tempswa\fi{\@tempswafalse\the\NC@list}% - \count@\m@ne - \let\the@toks\relax - \prepnext@tok - \expandafter\@tfor\expandafter\@nextchar\expandafter:\expandafter=\the\@temptokena - \do{% - \@testpach - \ifcase\@chclass - \@classz - \or - \@classi - \or - \@classii - \or - \save@decl - \or - \or - \@classv - \or - \@classvi - \or - \@classvii - \or - \@classviii - \or - \@classx - \or - \@classx - \fi - \@lastchclass\@chclass - }% - \ifcase\@lastchclass - \@acolr % right-hand column - \or - \or - \@acolr % right-hand column - \or - \@preamerr\thr@@ - \or - \@preamerr\tw@\@addtopreamble\@sharp - \or - \or - \else - \@preamerr\@ne - \fi - \def\the@toks{\the\toks}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@mkpream@relax} -% \changes{4.1b}{2008/08/12}{(AO, 505) try to accommodate \classname{colortbl}.} -% David P. Carlisle's \classname{colortbl} package headpatches \cmd\@mkpream\ in place -% during package loading, so it does not know whom it is working on. -% Let us try to accomodate this package by doing what it would have liked to have done. -% -% Note: it would be far better to break out this mechanism in the \classname{array} package. -% \begin{macrocode} -\appdef\@mkpream@relax{% - \let\CT@setup \relax - \let\CT@color \relax - \let\CT@do@color \relax - \let\color \relax - \let\CT@column@color\relax - \let\CT@row@color \relax - \let\CT@cell@color \relax -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@addamp} -% \begin{macrocode} -\def\@addamp@LaTeX{% - \if@firstamp\@firstampfalse\else\edef\@preamble{\@preamble &}\fi -}% -\def\@addamp@ltx{% - \if@firstamp\@firstampfalse\else\@addtopreamble{&}\fi -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@arrayacol} -% \begin{macrocode} -\def\@arrayacol@LaTeX{% - \edef\@preamble{\@preamble \hskip \arraycolsep}% -}% -\def\@arrayacol@ltx{% - \@addtopreamble{\hskip\arraycolsep}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@tabacol} -% \begin{macrocode} -\def\@tabacoll{% - \@addtopreamble{\hskip\tableftsep\relax}% -}% -\def\@tabacol@LaTeX{% - \edef\@preamble{\@preamble \hskip \tabcolsep}% -}% -\def\@tabacol@ltx{% - \@addtopreamble{\hskip\tabmidsep\relax}% -}% -\def\@tabacolr{% - \@addtopreamble{\hskip\tabrightsep\relax}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@arrayclassz} -% \begin{macrocode} -\def\@arrayclassz@LaTeX{% - \ifcase \@lastchclass \@acolampacol \or \@ampacol \or - \or \or \@addamp \or - \@acolampacol \or \@firstampfalse \@acol \fi - \edef\@preamble{\@preamble - \ifcase \@chnum - \hfil$\relax\@sharp$\hfil \or $\relax\@sharp$\hfil - \or \hfil$\relax\@sharp$\fi}% -}% -\def\@arrayclassz@ltx{% - \ifcase\@lastchclass - \@acolampacol - \or - \@ampacol - \or - \or - \or - \@addamp - \or - \@acolampacol - \or - \@firstampfalse\@acoll - \fi - \ifcase\@chnum - \@addtopreamble{% - \hfil\array@row@rst$\relax\@sharp$\hfil - }% - \or - \@addtopreamble{% - \array@row@rst$\relax\@sharp$\hfil - }% - \or - \@addtopreamble{% - \hfil\array@row@rst$\relax\@sharp$% - }% - \fi -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@tabclassz} -% \begin{macrocode} -\def\@tabclassz@LaTeX{% - \ifcase\@lastchclass - \@acolampacol - \or - \@ampacol - \or - \or - \or - \@addamp - \or - \@acolampacol - \or - \@firstampfalse\@acol - \fi - \edef\@preamble{% - \@preamble{% - \ifcase\@chnum - \hfil\ignorespaces\@sharp\unskip\hfil - \or - \hskip1sp\ignorespaces\@sharp\unskip\hfil - \or - \hfil\hskip1sp\ignorespaces\@sharp\unskip - \fi}}% -}% -\def\@tabclassz@ltx{% - \ifcase\@lastchclass - \@acolampacol - \or - \@ampacol - \or - \or - \or - \@addamp - \or - \@acolampacol - \or - \@firstampfalse\@acoll - \fi - \ifcase\@chnum - \@addtopreamble{% - {\hfil\array@row@rst\cell@font\ignorespaces\@sharp\unskip\hfil}% - }% - \or - \@addtopreamble{% - {\cell@fil\hskip1sp\array@row@rst\cell@font\ignorespaces\@sharp\unskip\hfil}% - }% - \or - \@addtopreamble{% - {\hfil\hskip1sp\array@row@rst\cell@font\ignorespaces\@sharp\unskip\cell@fil}% - }% - \fi -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@tabclassiv} -% \begin{macrocode} -\def\@tabclassiv@LaTeX{% - \@addtopreamble\@nextchar -}% -\def\@tabclassiv@ltx{% - \expandafter\@addtopreamble\expandafter{\@nextchar}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@arrayclassiv} -% \begin{macrocode} -\def\@arrayclassiv@LaTeX{% - \@addtopreamble{$\@nextchar$}% -}% -\def\@arrayclassiv@ltx{% - \expandafter\@addtopreamble\expandafter{\expandafter$\@nextchar$}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@classv} -% \begin{macrocode} -\def\@classv@LaTeX{% - \@addtopreamble{\@startpbox{\@nextchar}\ignorespaces - \@sharp\@endpbox}% -}% -\def\@classv@ltx{% - \expandafter\@addtopreamble - \expandafter{% - \expandafter \@startpbox - \expandafter {\@nextchar}% - \pbox@hook\array@row@rst\cell@font\ignorespaces\@sharp\@endpbox - }% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@classx} -% \begin{macrocode} -\def\@classx@array{% - \ifcase \@lastchclass - \@acolampacol \or - \@addamp \@acol \or - \@acolampacol \or - \or - \@acol \@firstampfalse \or - \@addamp - \fi -}% -\def\@classx@array@new{% - \ifcase \@lastchclass - \@acolampacol - \or - \@addamp \@acol - \or - \@acolampacol - \or - \or - \@firstampfalse\@acoll - \or - \@addamp - \fi -}% -% \end{macrocode} -% \end{macro} -% -% -% \subsection{Repair other broken parts of \LaTeX} -% -% \begin{macro}{\@xbitor} -% Expansion part has extraneous space token. Removed. -% \begin{macrocode} -\def\@xbitor@LaTeX #1{\@tempcntb \count#1 - \ifnum \@tempcnta =\z@ - \else - \divide\@tempcntb\@tempcnta - \ifodd\@tempcntb \@testtrue\fi - \fi}% -\def\@xbitor@ltx#1{% - \@tempcntb\count#1\relax - \@ifnum{\@tempcnta=\z@}{}{% - \divide\@tempcntb\@tempcnta - \@ifodd\@tempcntb{\@testtrue}{}% - }% -}% -\@ifx{\@xbitor\@xbitor@LaTeX}{% - \class@info{Repairing broken LaTeX \string\@xbitor}% -}{% - \class@info{Unrecognized LaTeX \string\@xbitor. Please update this document class! (Proceeding with fingers crossed.)}% -}% -\let\@xbitor\@xbitor@ltx -% \end{macrocode} -% \end{macro} -% -% -% \subsection{Syntax} -% \begin{macro}{\@gobble@opt@one} -% The \cmd\@gobble@opt@one\ command eats up an optional argument -% and one required argument. -% \begin{macrocode} -\newcommand*\@gobble@opt@one[2][]{}% -% \end{macrocode} -% \end{macro} -% -% \subsection{Auto-indented Contents} -% Facility to automatically determine the proper indentation of -% the TOC entries. -% -% Note on \classname{hyperref} compatibility: -% We must respect that -% \cmd\contentsline\ now has a fourth argument. -% So, instead of trying to override the meaning of \cmd\contentsline, -% we use the aux file to remember max values from one run to the next. -% -% In this respect, this package retains compatibility with -% \classname{hyperref}. -% -% \begin{macro}{\@starttoc} -% Install hooks at beginning and end of the TOC processing. -% \begin{macrocode} -\def\@starttoc#1{% - \begingroup - \toc@pre - \makeatletter - \@input{\jobname.#1}% - \if@filesw - \expandafter\newwrite\csname tf@#1\endcsname - \immediate\openout \csname tf@#1\endcsname \jobname.#1\relax - \fi - \@nobreakfalse - \toc@post - \endgroup -}% -\def\toc@pre{}% -\def\toc@post{}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\toc@@font} -% Interface for setting the formatting characteristics of this part -% of the TOC. -% -% Note: \cmd\toc@@font\ is the common font for all auto-sizing toc commands, -% although this, too, could become a dispatcher. -% \changes{4.1a}{2008/01/19}{(AO, 461) Change the csname from \cs{@dotsep} to \cs{ltxu@dotsep}. The former is understood in mu. (What we wanted was a dimension.)}% -% \begin{macrocode} -\def\toc@@font{}% -\def\ltxu@dotsep{\z@}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\l@section} -% Interface for determining which TOC elements are automatically indented. -% -% All of the \cmd\l@\dots\ commands simply go through the -% utility procedure \cmd\l@@sections. The calling convention is -% to pass the name of self and the name of parent. -% If you want to exclude any of these from the indentation -% scheme, simply leave the \cmd\l@\dots\ command undefined. -% -% Note that the parent of ``section'' is nil, so we have to define a stub. -% \begin{verbatim}\def\l@section{\l@@sections{}{section}}% Implicit #3#4\end{verbatim} -% \begin{verbatim}\def\tocleft@{\z@}%\end{verbatim} -% \begin{verbatim}\def\l@subsection{\l@@sections{section}{subsection}}% Implicit #3#4\end{verbatim} -% \begin{verbatim}\def\l@subsubsection{\l@@sections{subsection}{subsubsection}}% Implicit #3#4\end{verbatim} -% \begin{verbatim}\def\l@paragraph{\l@@sections{subsubsection}{paragraph}}% Implicit #3#4\end{verbatim} -% \begin{verbatim}\def\l@subparagraph#1#2{\l@@sections{paragraph}{subparagraph}}% Implicit #3#4\end{verbatim} -% \end{macro} -% -% Glom some \cmd\dimen\ registers. -% \begin{macrocode} -\let\tocdim@section \leftmargini -\let\tocdim@subsection \leftmarginii -\let\tocdim@subsubsection \leftmarginiii -\let\tocdim@paragraph \leftmarginiv -\let\tocdim@appendix \leftmarginv -\let\tocdim@pagenum \leftmarginvi -% \end{macrocode} -% -% \begin{macro}{\toc@pre@auto} -% \begin{macro}{\toc@post@auto} -% We patch \cmd\@starttoc\ to: -% 1) before TOC processing, -% initialize the max registers and -% set the needed dimensions from -% the values stored in the auxiliary file, and -% 2) after TOC processing, -% store out those max register values into the auxiliary file. -% -% Note that the font is set here: all other TOC entries must -% override these font settings. -% -% To activate this override of the standard \LaTeX\ processing, -% the substyle does: \cmd\let\cmd\toc@pre\cmd\toc@pre@auto\ -% and \cmd\let\cmd\toc@post\cmd\toc@post@auto. -% \begin{macrocode} -\def\toc@pre@auto{% - \toc@@font - \@tempdima\z@ - \toc@setindent\@tempdima{section}% - \toc@setindent\@tempdima{subsection}% - \toc@setindent\@tempdima{subsubsection}% - \toc@setindent\@tempdima{paragraph}% - \toc@letdimen{appendix}% - \toc@letdimen{pagenum}% -}% -\def\toc@post@auto{% - \if@filesw - \begingroup - \toc@writedimen{section}% - \toc@writedimen{subsection}% - \toc@writedimen{subsubsection}% - \toc@writedimen{paragraph}% - \toc@writedimen{appendix}% - \toc@writedimen{pagenum}% - \endgroup - \fi -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\toc@setindent} -% \begin{macrocode} -\def\toc@setindent#1#2{% - \csname tocdim@#2\endcsname\tocdim@min\relax - \@ifundefined{tocmax@#2}{\@namedef{tocmax@#2}{\z@}}{}% - \advance#1\@nameuse{tocmax@#2}\relax - \expandafter\edef\csname tocleft@#2\endcsname{\the#1}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\toc@letdimen} -% \begin{macrocode} -\def\toc@letdimen#1{% - \csname tocdim@#1\endcsname\tocdim@min\relax - \@ifundefined{tocmax@#1}{\@namedef{tocmax@#1}{\z@}}{}% - \expandafter\let\csname tocleft@#1\expandafter\endcsname\csname tocmax@#1\endcsname -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\toc@writedimen} -% \begin{macrocode} -\def\toc@writedimen#1{% - \immediate\write\@auxout{% - \gdef\expandafter\string\csname tocmax@#1\endcsname{% - \expandafter\the\csname tocdim@#1\endcsname - }% - }% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\l@@sections} -% The procedure for formatting the indented TOC entries. -% We use control sequence names such as \cmd\tocmax@section\ and -% \cmd\tocleft@section, the former being written to the auxiliary file -% and the latter only defined for the duration of the TOC processing. -% -% Note that the assignment of \cmd\box\cmd\@tempboxa\ by \cmd\set@tocdim@pagenum\ -% must endure over the invocation of |#3|: it contains the -% page number which will be set just before the \cmd\par. -% -% The arguments:\begin{enumerate} -% \item[\#1] superior section -% \item[\#2] this section -% \item[\#3] content, including possible \cmd\numberline -% \item[\#4] page number\end{enumerate} -% \begin{macrocode} -\def\l@@sections#1#2#3#4{% - \begingroup - \everypar{}% - \set@tocdim@pagenum\@tempboxa{#4}% - \global\@tempdima\csname tocdim@#2\endcsname - \leftskip\csname tocleft@#2\endcsname\relax - \dimen@\csname tocleft@#1\endcsname\relax - \parindent-\leftskip\advance\parindent\dimen@ - \rightskip\tocleft@pagenum plus 1fil\relax - \skip@\parfillskip\parfillskip\z@ - \let\numberline\numberline@@sections - \@nameuse{l@f@#2}% - \ignorespaces#3\unskip\nobreak\hskip\skip@ - \hb@xt@\rightskip{\hfil\unhbox\@tempboxa}\hskip-\rightskip\hskip\z@skip -% \end{macrocode} -% \changes{4.1n}{2009/12/13}{(AO, 574) protect against \classname{lineno.sty}, which forces a visit to the output routine, which appears to destroy the value of \cs{@tempdima}}% -% -% By side effect, set the value of, e.g., \cmd\tocdim@section. -% -% Note that the \cmd\par\ must not be executed before the value of \cmd\@tempdima\ is expanded (outside the current group). -% Otherwise, the \classname{lineno.sty} package may interfere (it unfortunately does a global assignment of \cmd\@tempdima). -% \begin{macrocode} - \expandafter\par - \expandafter\aftergroup\csname tocdim@#2% - \expandafter\endcsname - \expandafter\endgroup - \the\@tempdima\relax -}% -% \end{macrocode} -% \changes{4.1a}{2008/01/19}{(AO, 479) Per: Dylan Thurston<dpt at math.harvard.edu>}% -% In the call to \cmd\set@tocdim@pagenum, I am now exposing the use of the particular box register. -% \begin{macrocode} -\def\set@tocdim@pagenum#1#2{% - \setbox#1\hbox{\ignorespaces#2}% - \@ifdim{\tocdim@pagenum<\wd#1}{\global\tocdim@pagenum\wd#1}{}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\numberline@@sections} -% \changes{4.1a}{2008/01/19}{(AO, 461) Change the csname from \cs{@dotsep} to \cs{ltxu@dotsep}. The former is understood in mu. (What we wanted was a dimension.)}% -% The utility procedure for all \cmd\numberline\ processing in indented TOC entries. -% The first argument is self. -% -% We use \cmd\@tempdima\ to pass a value around (via global assignment) because -% \cmd\numberline\ executes inside a group if the -% \classname{hyperref} package is loaded. -% Would that it were not so! -% \begin{macrocode} -\def\numberline@@sections#1{% - \leavevmode\hb@xt@-\parindent{% - \hfil - \@if@empty{#1}{}{% - \setbox\z@\hbox{#1.\kern\ltxu@dotsep}% - \@ifdim{\@tempdima<\wd\z@}{\global\@tempdima\wd\z@}{}% - \unhbox\z@ - }% - }% - \ignorespaces -}% -\def\tocdim@min{\z@}% -% \end{macrocode} -% \end{macro} -% -% -% \subsection{Lists} -% \begin{macro}{\list} -% Using \cmd\parshape\ to implement lists was always suspect -% (can you get behind \cmd\parshape\cmd\@ne?) and we now see that -% it was a mistake all along. Why? Because \cmd\parshape, like -% \cmd\hangindent, achieves its effect via ``shifting'' the \cmd\hbox es -% in a paragraph -% instead of using \cmd\leftskip\ and \cmd\parindent, which is -% robust during column balancing. -% -% We introduce the alternative method with a hook into -% the \LaTeX\ kernel procedure \cmd\list, which is -% the implementation of all lists. -% -% \begin{macrocode} -\def\list#1#2{% - \ifnum \@listdepth >5\relax - \@toodeep - \else - \global\advance\@listdepth\@ne - \fi - \rightmargin\z@ - \listparindent\z@ - \itemindent\z@ - \csname @list\romannumeral\the\@listdepth\endcsname - \def\@itemlabel{#1}% - \let\makelabel\@mklab - \@nmbrlistfalse - #2\relax - \@trivlist - \parskip\parsep - \set@listindent - \ignorespaces -}% -\def\set@listindent@parshape{% - \parindent\listparindent - \advance\@totalleftmargin\leftmargin - \advance\linewidth-\rightmargin - \advance\linewidth-\leftmargin - \parshape\@ne\@totalleftmargin\linewidth -}% -\def\set@listindent@{% - \parindent\listparindent - \advance\@totalleftmargin\leftmargin - \advance\rightskip\rightmargin - \advance\leftskip\@totalleftmargin -}% -\let\set@listindent\set@listindent@parshape -% \end{macrocode} -% \end{macro} -% -% -% \subsection{Hypertext capabilities} -% -% \begin{macro}{\href} -% \begin{macro}{\url} -% \begin{macro}{\URL@prefix} -% \begin{macro}{\doi} -% \begin{macro}{\doibase} -% \changes{4.1b}{2008/08/12}{(AO, 487) Support for video figures and the \cs{setfloatlink} command}% -% We provide support for the \cmd\href, \cmd\url, and \cmd\doi\ commands. -% Packages, like \classname{hyperref}, may override these definitions -% and provide better semantics. -% \changes{4.1g}{2009/10/06}{(AO, 532) Both arguments of \cs{href} get sanitized}% -% \changes{4.1j}{2009/10/24}{(AO, 545) Provide definition for \cs{doi} that does hypertext}% -% \begin{macrocode} -\providecommand\href[0]{\begingroup\@sanitize@url\@href}% -\def\@href#1{\@@startlink{#1}\endgroup\@@href}% -\def\@@href#1{#1\@@endlink}% -\providecommand \url [0]{\begingroup\@sanitize@url \@url }% -\def \@url #1{\endgroup\@href {#1}{\URL@prefix#1}}% -\providecommand \URL@prefix [0]{URL }% -\providecommand\doi[0]{\begingroup\@sanitize@url\@doi}% -\def\@doi#1{\endgroup\@@startlink{\doibase#1}doi:\discretionary {}{}{}#1\@@endlink }% -%changes{4.2a}{2017/11/21}{(MD) Use updated best practice to use https and doi.org}% -\providecommand \doibase [0]{https://doi.org/}% -\providecommand \@sanitize@url[0]{\chardef\cat@space\the\catcode`\ \@sanitize\catcode`\ \cat@space}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@@startlink} -% \begin{macro}{\@@endlink} -% \begin{macro}{\pdfstartlink@attr} -% \begin{macro}{\hypertext@enable@ltx} -% How we define \cmd\@@startlink\ and \cmd\@@endlink\ will depend on -% whether we are running under \textsc{pdflatex}. -% If so, and if PDF output is requested, then we use its primitives -% to implement hypertext, -% breaking out the link attributes in \cmd\pdfstartlink@attr\ -% and using the \classname{hyperref} defaults; -% \cmd\pdfstartlink@attr\ can be redefined by a client package. -% Otherwise we fall back the Hyper\TeX\ standard and leave things to the DVI translator. -% \changes{4.1j}{2009/10/25}{(AO, 545) hypertext capabilities off by default; enable with \classoption{hypertext}} -% -% A class or package that wishes to employ hypertext capabilities should -% execute the \cmd\hypertext@enable@ltx\ procedure. -% \begin{macrocode} -\def\@@startlink#1{}% -\def\@@endlink{}% -\@ifxundefined \pdfoutput {\true@sw}{\@ifnum{\z@=\pdfoutput}{\true@sw}{\false@sw}}% -{% - \def\@@startlink@hypertext#1{\leavevmode\special{html:<a href="#1">}}% - \def\@@endlink@hypertext{\special{html:</a>}}% -}{% - \def\@@startlink@hypertext#1{% - \leavevmode - \pdfstartlink\pdfstartlink@attr - user{/Subtype/Link/A<</Type/Action/S/URI/URI(#1)>>}% - \relax - }% - \def\@@endlink@hypertext{\pdfendlink}% - \def\pdfstartlink@attr{attr{/Border[0 0 1 ]/H/I/C[0 1 1]}}% -}% -\def\hypertext@enable@ltx{% - \let\@@startlink\@@startlink@hypertext - \let\@@endlink\@@endlink@hypertext -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\href} -% \changes{4.1p}{2010/02/24}{(AO, 582) A patch of \classname{hyperref.sty} to provide backward compatibility to \TeX Live 2007's version 6.75r}% -% The \cmd\href\ command of \classname{hyperref} was extend somewhere -% between versions 6.75r and 6.80e. We apply a repair to the earlier -% version (if present) so that it works like the later version. -% -% The issue is the presence of whitespace, either following the \cmd\href\ token -% or following the first argument's closing brace character. -% -% \begin{macrocode} -\def\href@Hy{\hyper@normalise \href@ }% -\def\href@Hy@ltx{\@ifnextchar\bgroup\Hy@href{\hyper@normalise\href@}}% -\def\Hy@href#{\hyper@normalise\href@}% -\begingroup - \endlinechar=-1 % - \catcode`\^^A=14 % - \catcode`\^^M\active - \catcode`\%\active - \catcode`\#\active - \catcode`\_\active - \catcode`\$\active - \catcode`\&\active - \gdef\hyper@normalise@ltx{^^A - \begingroup - \catcode`\^^M\active - \def^^M{ }^^A - \catcode`\%\active - \let%\@percentchar - \let\%\@percentchar - \catcode`\#\active - \def#{\hyper@hash}^^A - \def\#{\hyper@hash}^^A - \@makeother\&^^A - \edef&{\string&}^^A - \edef\&{\string&}^^A - \edef\textunderscore{\string_}^^A - \let\_\textunderscore - \catcode`\_\active - \let_\textunderscore - \let~\hyper@tilde - \let\~\hyper@tilde - \let\textasciitilde\hyper@tilde - \let\\\@backslashchar - \edef${\string$}^^A - \Hy@safe@activestrue - \hyper@n@rmalise - }^^A - \catcode`\#=6 ^^A - \gdef\Hy@ActiveCarriageReturn@ltx{^^M}^^A - \gdef\hyper@n@rmalise@ltx#1#2{^^A - \def\Hy@tempa{#2}^^A - \ifx\Hy@tempa\Hy@ActiveCarriageReturn - \Hy@ReturnAfterElseFi{^^A - \hyper@@normalise{#1}^^A - }^^A - \else - \Hy@ReturnAfterFi{^^A - \hyper@@normalise{#1}{#2}^^A - }^^A - \fi - }^^A - \gdef\hyper@@normalise@ltx#1#2{^^A - \edef\Hy@tempa{^^A - \endgroup - \noexpand#1{\Hy@RemovePercentCr#2%^^M\@nil}^^A - }^^A - \Hy@tempa - }^^A - \gdef\Hy@RemovePercentCr@ltx#1%^^M#2\@nil{^^A - #1^^A - \ifx\limits#2\limits - \else - \Hy@ReturnAfterFi{^^A - \Hy@RemovePercentCr #2\@nil - }^^A - \fi - }^^A -\endgroup -\def\switch@hyperref@href{% - \expandafter\@ifx\expandafter{\csname href \endcsname\href@Hy}{ - \class@info{Repairing hyperref 6.75r \string\href}% - \let\hyper@normalise\hyper@normalise@ltx - \let\hyper@@normalise\hyper@@normalise@ltx - \let\hyper@n@rmalise\hyper@n@rmalise@ltx - \let\Hy@ActiveCarriageReturn\Hy@ActiveCarriageReturn@ltx - \let\Hy@RemovePercentCr\Hy@RemovePercentCr@ltx - \let\href\href@Hy@ltx - }{}% -}% -\appdef\document@inithook{\switch@hyperref@href}% -% \end{macrocode} -% \end{macro} -% -% -% \begin{macro}{\typeout} -% We make the \cmd\typeout\ procedure of \LaTeX\ be \cmd\long, -% because sometimes we are talking about \cmd\par. -% \begin{macrocode} -\def\typeout@org#1{% - \begingroup - \set@display@protect - \immediate\write\@unused{#1}% - \endgroup -}% -\long\def\typeout@ltx#1{% - \begingroup - \set@display@protect - \immediate\write\@unused{#1}% - \endgroup -}% -\@ifx{\typeout\typeout@org}{% - \let\typeout\typeout@ltx - \true@sw -}{% - \rvtx@ifformat@geq{2020/10/01}% - {\true@sw}{\false@sw}% -}% - {\class@info{Making \string\typeout\space \string\long}}% - {}% -% \end{macrocode} -% \end{macro} -% -% \subsection{End of the \file{kernel} {\sc docstrip} module} -% Here ends the module. -% \begin{macrocode} -%</kernel> -% \end{macrocode} -% -% \Finale -% \iffalse Here ends the programmer's documentation.\fi -% \endinput -% -\endinput -%%EOF diff --git a/macros/latex/contrib/revtex/source/revtex-bst.dtx b/macros/latex/contrib/revtex/source/revtex-bst.dtx deleted file mode 100644 index c486112370..0000000000 --- a/macros/latex/contrib/revtex/source/revtex-bst.dtx +++ /dev/null @@ -1,3873 +0,0 @@ -% \iffalse meta-comment balanced on line 122 -% revtex-bst.dtx: Package to extract .bst files for RevTeX -% Copyright (c) 2020--2022 American Physical Society. -% https://journals.aps.org/revtex/ -% mailto:revtex@aps.org -% -% Disclaimer -% This file is distributed WITHOUT ANY WARRANTY; -% without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -% License -% You may distribute this file under the conditions of the -% LaTeX Project Public License 1.3c or later -% (http://www.latex-project.org/lppl.txt). -% ReadMe -% For the documentation and more detailed instructions for -% installation, typeset this document with \LaTeX. -% Maintenance Status -% This work has the LPPL maintenance status "maintained"; -% Current Maintainer of this work is Phelype Oleinik. -% -% This work consists of the main source file revtex-bst.dtx -% and the derived files -% aapmrev4-2.bst, aipauth4-2.bst, aipnum4-2.bst, apsrev4-2.bst, apsrmp4-2.bst -% Distribution: -% CTAN:macros/latex/contrib/revtex/ -% -% Unpacking: -% tex revtex-bst.dtx -% -% Installation: -% TDS:bibtex/bst/revtex/ -% -%<*ignore> -\begingroup - \def\x{LaTeX2e}% -\expandafter\endgroup -\ifcase - 0\expandafter\ifx\csname processbatchFile\endcsname\relax\else1\fi\ifx\fmtname\x\else 1\fi - \relax -\else - \csname fi\endcsname -%</ignore> -%<*install> -%% This file will generate documentation and runtime files -%% from revtex4-2.dtx when run through TeX. -\input docstrip -\nopreamble -\edef\defaultpostamble{% - \MetaPrefix\space End of customized bst file^^J% - \MetaPrefix ^^J% - \MetaPrefix\space End of file `\outFileName'.% -} -\askforoverwritefalse -\keepsilent -\generate{% - \file{aapmrev4-2.bst}{\from{revtex-bst.dtx}{aapmrev}}% - \file{aipauth4-2.bst}{\from{revtex-bst.dtx}{aipauth}}% - \file{aipnum4-2.bst}{\from{revtex-bst.dtx}{aipnum}}% - \file{apsrev4-2.bst}{\from{revtex-bst.dtx}{apsrev}}% - \file{apsrmp4-2.bst}{\from{revtex-bst.dtx}{apsrmp}}% -}% -\ifToplevel{ -\Msg{***********************************************************} -\Msg{*} -\Msg{* To finish the installation, please move} -\Msg{* *.bst } -\Msg{* into a directory searched by TeX;} -\Msg{* in a TDS-compliant installation:} -\Msg{* texmf/bibtex/bst/revtex/.} -\Msg{*} -\Msg{* Happy BibTeXing} -\Msg{***********************************************************} -} -\endbatchfile -%</install> -%<*ignore> -\fi -%</ignore> -% \fi -% -% \GetFileInfo{revtex-bst.dtx} -% -% \StopEventually{} -% \iffalse ltxdoc klootch -%<*package> -%%% @LaTeX-file{ -%%% filename = "revtex-bst.dtx", -%%% version = "4.2f", -%%% date = "2022/06/05", -%%% author = "Phelype Oleinik (mailto: phelype.oleinik at latex-project.org), -%%% commissioned by the American Physical Society. -%%% ", -%%% copyright = "Copyright (C) 2020--2022 American Physical Society -%%% distributed under the terms of the -%%% LaTeX Project Public License 1.3c, see -%%% ftp://ctan.tug.org/macros/latex/base/lppl.txt -%%% ", -%%% email = "mailto colon revtex at aps.org", -%%% codetable = "ISO/ASCII", -%%% keywords = "", -%%% supported = "yes", -%%% abstract = "", -%%% } -%</package> -% \fi -% -% \subsection{Bill of Materials} -% -% Following is a list of the files in this distribution arranged -% according to provenance. -% -% \subsubsection{Primary Source}% -% One single file generates all. -%\begin{verbatim} -%revtex-bst.dtx -%\end{verbatim} -% -% \subsubsection{Generated by \texttt{tex revtex-bst.dtx}}% -% Typesetting ths file under \TeX\ itself runs the installer, -% which generates the bibliography style files. -%\begin{verbatim} -%aapmrev4-2.bst, aipauth4-2.bst, aipnum4-2.bst, -%apsrev4-2.bst, apsrmp4-2.bst -%\end{verbatim} -% -% \section{Code common to all modules}% -% -% \begin{macrocode} -%<*aapmrev|aipauth|aipnum|apsrev|apsrmp> -%% -%<aapmrev>%% This is file `aapmrev4-2.bst', and is a hand-edited version of aapmrev4-1.bst -%<aipauth>%% This is file `aipauth4-2.bst', and is a hand-edited version of aipauth4-1.bst -%<aipnum>%% This is file `aipnum4-2.bst', and is a hand-edited version of aipnum4-1.bst -%<apsrev>%% This is file `apsrev4-2.bst', and is a hand-edited version of apsrev4-1.bst -%<apsrmp>%% This is file `apsrmp4-2.bst', and is a hand-edited version of apsrmp4-1.bst - % =============================================================== - % IMPORTANT NOTICE: - % This file can be redistributed and/or modified under the terms - % of the LaTeX Project Public License Distributed from CTAN - % archives in directory macros/latex/base/lppl.txt; either - % version 1 of the License, or any later version. - % =============================================================== - %------------------------------------------------------------------- - % This bibliography style file is intended for texts in ENGLISH - % This is an author-year citation style bibliography. As such, it is - % non-standard LaTeX, and requires a special package file to function properly. - % Such a package is natbib.sty by Patrick W. Daly - % The form of the \bibitem entries is - % \bibitem[Jones et al.(1990)]{key}... - % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}... - % The essential feature is that the label (the part in brackets) consists - % of the author names, as they should appear in the citation, with the year - % in parentheses following. There must be no space before the opening - % parenthesis! - % With natbib v5.3, a full list of authors may also follow the year. - % In natbib.sty, it is possible to define the type of enclosures that is - % really wanted (brackets or parentheses), but in either case, there must - % be parentheses in the label. - % The \cite command functions as follows: - % \citet{key} ==>> Jones et al. (1990) - % \citet*{key} ==>> Jones, Baker, and Smith (1990) - % \citep{key} ==>> (Jones et al., 1990) - % \citep*{key} ==>> (Jones, Baker, and Smith, 1990) - % \citep[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2) - % \citep[e.g.][]{key} ==>> (e.g. Jones et al., 1990) - % \citep[e.g.][p. 32]{key} ==>> (e.g. Jones et al., p. 32) - % \citeauthor{key} ==>> Jones et al. - % \citeauthor*{key} ==>> Jones, Baker, and Smith - % \citeyear{key} ==>> 1990 - %--------------------------------------------------------------------- -%</aapmrev|aipauth|aipnum|apsrev|apsrmp> -% -% \subsection{The Frontmatter File} -% As promised above, here is the contents of the frontmatter file. -% This file doesn't have any documentation, so just stop early. -% \begin{macrocode} -%<*ignore> -\stop -\changes{4.2e}{2020/10/03}{(PHO) Initial version---Put all .bst files in a single .dtx} -%</ignore> -% \end{macrocode} -% -% \begin{macrocode} -%<*aapmrev|aipauth|aipnum|apsrev|apsrmp> -% \end{macrocode} -% -% \begin{macrocode} - -%<aapmrev>FUNCTION {id.bst} {"aapmrev4-2.bst 2019-01-14 (MD) hand-edited version of aapmrev4-1.bst"} -%<aipauth>FUNCTION {id.bst} {"aipnauth4-2.bst 2018-12-27 (MD) hand-edited version of apsauth4-1.bst"} -%<aipnum>FUNCTION {id.bst} {"aipnum4-2.bst 2019-01-14 (MD) hand-edited version of apsrev4-1.bst"} -%<apsrev>FUNCTION {id.bst} {"apsrev4-2.bst 2019-01-14 (MD) hand-edited version of apsrev4-1.bst"} -%<apsrmp>FUNCTION {id.bst} {"apsrmp4-2.bst 2018-12-27 (MD) hand-edited version of apsrmp4-1.bst"} -ENTRY -{ - address - archive - archivePrefix - author - bookaddress - booktitle - chapter - collaboration - doi - edition - editor - eid - eprint - howpublished - institution - isbn - issn - journal - key - language - month - note - number - organization - pages - primaryClass - publisher - school - SLACcitation - series - title - translation - type - url - volume - year -}{ -}{ - label - extra.label sort.label - short.list -} - -INTEGERS -{ - output.state before.all - after.word after.punctuation - after.sentence after.block -} - -INTEGERS -{ - punctuation.state punctuation.no punctuation.space punctuation.yes -} - -STRINGS { bibfield output.bibfield } - -FUNCTION {not} -{ { #0 } - { #1 } - if$ -} - -FUNCTION {and} -{ 'skip$ - { pop$ #0 } - if$ -} - -FUNCTION {or} -{ { pop$ #1 } - 'skip$ - if$ -} - -FUNCTION {non.stop} -{ duplicate$ - "}" * add.period$ - #-1 #1 substring$ "." = -} - -INTEGERS { arith.mulitplier arith.multiplicand } - -FUNCTION {multiply} -{ - 'arith.multiplicand := - 'arith.mulitplier := - #0 - { arith.mulitplier #0 > } - { arith.multiplicand + - arith.mulitplier #1 - 'arith.mulitplier := - } - while$ -} - -FUNCTION {chr.to.hex} -{ - chr.to.int$ - duplicate$ "0" chr.to.int$ - - duplicate$ duplicate$ #0 < swap$ #9 > or not - { swap$ pop$ } - { pop$ - duplicate$ "A" chr.to.int$ - - duplicate$ duplicate$ #0 < swap$ #5 > or not - { swap$ pop$ #10 + } - { pop$ - duplicate$ "a" chr.to.int$ - - duplicate$ duplicate$ #0 < swap$ #5 > or not - { swap$ pop$ #10 + } - { pop$ - pop$ #-1 - } - if$ - } - if$ - } - if$ -} - -INTEGERS { arith.accumulator } - -FUNCTION {str.to.hex} -{ #0 'arith.accumulator := - { duplicate$ empty$ not } - { duplicate$ #1 #1 substring$ chr.to.hex - duplicate$ #0 < - { pop$ pop$ "" - } - { arith.accumulator #16 multiply + 'arith.accumulator := - #2 global.max$ substring$ - } - if$ - } - while$ - pop$ arith.accumulator -} - -FUNCTION {diagn.cmntlog} -{ - duplicate$ top$ "%" swap$ * write$ newline$ -} - -INTEGERS { control.key control.author control.editor control.title control.pages control.eprint control.year } - -INTEGERS { control.author.jnrlst control.author.dotless control.author.nospace control.author.initials control.author.nocomma control.author.first control.author.reversed } - -FUNCTION { control.init } -{ - #0 - 'control.key := - #0 -%<aipauth> #1 + -%<apsrmp> #1 + -%<apsrmp> #2 + - #8 + -%<apsrev> #64 + -%<apsrmp> #64 + - 'control.author := -%<aapmrev> #0 -%<aipauth> #0 -%<aipnum> #0 -%<apsrev> #1 -%<apsrmp> #1 - 'control.author.jnrlst := - #0 - 'control.author.dotless := - #0 - 'control.author.nospace := - #1 - 'control.author.initials := - #0 - 'control.author.nocomma := -%<!apsrmp> #0 -%<apsrmp> #1 - 'control.author.first := -%<aapmrev> #0 -%<aipauth> #1 -%<aipnum> #0 -%<apsrev> #0 -%<apsrmp> #1 - 'control.author.reversed := -%<aapmrev> #1 -%<aipauth> #0 -%<aipnum> #1 -%<apsrev> #1 -%<apsrmp> #0 - 'control.editor := - #-1 - 'control.title := - #0 - 'control.pages := - #0 - 'control.eprint := - #1 - 'control.year := -} - -FUNCTION {warning.dependency} -{ - " (dependency: " * swap$ * ") set " * swap$ int.to.str$ * warning$ -} - -FUNCTION {control.check} -{ - control.editor - { - "editor formatted same as author" - control.author.reversed { - duplicate$ #0 swap$ "reversed" warning.dependency - #0 'control.author.reversed := - } 'skip$ if$ - control.author.first { - duplicate$ #0 swap$ "first" warning.dependency - #0 'control.author.first := - } 'skip$ if$ - control.author.nocomma { - duplicate$ #0 swap$ "nocomma" warning.dependency - #0 'control.author.nocomma := - } 'skip$ if$ - pop$ - } 'skip$ if$ - control.author.reversed 'skip$ - { - "not reversed" - control.author.nospace { - duplicate$ #0 swap$ "nospace" warning.dependency - #0 'control.author.nospace := - } 'skip$ if$ - control.author.jnrlst 'skip$ { - duplicate$ #1 swap$ "jnrlst" warning.dependency - #1 'control.author.jnrlst := - } if$ - control.author.initials { - duplicate$ ", initials" * - control.author.dotless { - duplicate$ #0 swap$ "dotless" warning.dependency - #0 'control.author.dotless := - } 'skip$ if$ - pop$ - } 'skip$ if$ - pop$ - } - if$ - control.author.initials 'skip$ { - "not initials" - control.author.nocomma { - duplicate$ #0 swap$ "nocomma" warning.dependency - #0 'control.author.nocomma := - } 'skip$ if$ - control.author.nospace { - duplicate$ #0 swap$ "nospace" warning.dependency - #0 'control.author.nospace := - } 'skip$ if$ - control.author.dotless 'skip$ { - duplicate$ #1 swap$ "dotless" warning.dependency - #1 'control.author.dotless := - } if$ - pop$ - } if$ -} - -FUNCTION {control.parse} -{ - duplicate$ duplicate$ missing$ - { - pop$ pop$ pop$ - } - { empty$ - { - pop$ #-1 - }{ - str.to.hex - } - if$ - swap$ := - } - if$ -} - -FUNCTION {control.dump} -{ - duplicate$ missing$ { pop$ "N/A" } 'skip$ if$ - "{" swap$ * "}, " * - * -} - -INTEGERS { decode.threshold } - -FUNCTION {control.decode} -{ - - duplicate$ - #0 < - { - skip$ pop$ swap$ #0 - } - { - swap$ pop$ swap$ #1 - } - if$ - swap$ := -} - -FUNCTION {control.author.decode} -{ - control.author - duplicate$ duplicate$ #0 < swap$ #128 < not or - { - int.to.str$ "(" swap$ * ")" * - "Control cannot interpret author " swap$ * - warning$ - }{ - 'control.author.jnrlst swap$ duplicate$ #64 control.decode - 'control.author.dotless swap$ duplicate$ #32 control.decode - 'control.author.nospace swap$ duplicate$ #16 control.decode - 'control.author.initials swap$ duplicate$ #8 control.decode - 'control.author.nocomma swap$ duplicate$ #4 control.decode - 'control.author.first swap$ duplicate$ #2 control.decode - 'control.author.reversed swap$ duplicate$ #1 control.decode - duplicate$ #0 = - 'skip$ - { - "Control: residue of author" - "(" swap$ * ")" * * - warning$ - } - if$ - pop$ - } - if$ -} - -FUNCTION {control.setup} -{ - type$ cite$ "{" swap$ * "}, " * * - "control.key" key control.dump * - "control.author" author control.dump * - "control.editor" editor control.dump * - "control.title" title control.dump * - "control.pages" pages control.dump * - "control.year" year control.dump * - "control.eprint" eprint control.dump * - top$ - 'control.key key control.parse - 'control.author author control.parse - 'control.editor editor control.parse - 'control.title title control.parse - 'control.pages pages control.parse - 'control.year year control.parse - 'control.eprint eprint control.parse - control.author.decode -} - -FUNCTION {control.pass} -{ type$ "control" = 'control.setup 'skip$ if$ -} - -FUNCTION {control.presort} -{ -} - -FUNCTION {control.forward} -{ -} - -FUNCTION {control.reverse} -{ -} - -FUNCTION {control.sort} -{ -} - -FUNCTION {control.longest.label} -{ -} - -FUNCTION {control.key.bib} -{ - "Control: key " - control.key - duplicate$ "(" swap$ int.to.str$ * ") " * swap$ - pop$ * - diagn.cmntlog -} - -FUNCTION {control.author.bib} -{ - "Control: author " - control.author "(" swap$ int.to.str$ * ")" * * - control.author.reversed { " reversed" * }{} if$ - control.author.first { " first" * }{} if$ - control.author.nocomma { " nocomma" * }{} if$ - control.author.initials { " initials" * }{} if$ - control.author.nospace { " nospace" * }{} if$ - control.author.dotless { " dotless" * }{} if$ - control.author.jnrlst { " jnrlst" * }{} if$ - diagn.cmntlog -} - -FUNCTION {control.editor.bib} -{ - "Control: editor formatted " - control.editor - duplicate$ "(" swap$ int.to.str$ * ") " * swap$ - duplicate$ #0 < { - pop$ - "disabled!" - } { - #0 > { - "identically to author" - } { - "differently from author" - } if$ - } if$ * * - diagn.cmntlog -} - -FUNCTION {control.title.bib} -{ - "Control: production of article title " - control.title - duplicate$ "(" swap$ int.to.str$ * ") " * swap$ - duplicate$ #0 < { - pop$ - "disabled" - } { - #0 > { - "required" - } { - "allowed" - } if$ - } if$ * * - diagn.cmntlog -} - -FUNCTION {control.pages.bib} -{ - "Control: page " - control.pages - duplicate$ "(" swap$ int.to.str$ * ") " * swap$ - duplicate$ #0 < { - pop$ - "none" - } { - #0 > { - "range" - } { - "single" - } if$ - } if$ * * - diagn.cmntlog -} - -FUNCTION {control.year.bib} -{ - "Control: year " - control.year - duplicate$ "(" swap$ int.to.str$ * ") " * swap$ - duplicate$ #0 < { - pop$ - "disabled!" - } { - #0 > { - "truncated" - } { - "verbatim" - } if$ - } if$ * * - diagn.cmntlog -} - -FUNCTION {control.eprint.bib} -{ - "Control: production of eprint " - control.eprint - duplicate$ "(" swap$ int.to.str$ * ") " * swap$ - #0 < { "disabled" } { "enabled" } if$ * * - diagn.cmntlog -} - -FUNCTION {control.bib} -{ - control.key.bib - control.author.bib - control.editor.bib - control.title.bib - control.pages.bib - control.year.bib - control.eprint.bib -} - -FUNCTION {init.state.consts} -{ - #0 'before.all := - #1 'after.word := - #2 'after.punctuation := - #3 'after.sentence := - #4 'after.block := - #0 'punctuation.no := - #1 'punctuation.space := - #2 'punctuation.yes := - "" 'bibfield := - "" 'output.bibfield := -} - -STRINGS { s t} -FUNCTION {block.punctuation} -{ "" - "," * -} - -FUNCTION {word.space} -{ - "\ " -} - -FUNCTION {show.stackstring.one}{ - "(" * - output.state int.to.str$ * - "," * punctuation.state int.to.str$ * - ")" * top$ - duplicate$ "1(" swap$ * ")" * top$ -} - -FUNCTION {show.stackstring.two}{ - "(" * - output.state int.to.str$ * - "," * punctuation.state int.to.str$ * - ")" * top$ - swap$ - duplicate$ "1(" swap$ * ")" * top$ - swap$ - duplicate$ "2(" swap$ * ")" * top$ -} - -FUNCTION {bibfield.command}{ "\bibfield "} - -FUNCTION {output.nonnull} -{ - swap$ - output.state after.word = - { - block.punctuation * - word.space * - } - { - output.state after.punctuation = - { - word.space * - } - { - output.state after.block = output.state after.sentence = or - { - add.period$ - "\EOS\ " * - }{ - } - if$ - } - if$ - } - if$ - output.bibfield duplicate$ empty$ 'pop$ - { - bibfield.command - " {" * swap$ * "} {" * swap$ * "}" * - } - if$ - write$ - bibfield 'output.bibfield := "" 'bibfield := - output.state after.block = - { - newline$ - "\newblock " write$ - } - 'skip$ - if$ - punctuation.state duplicate$ - punctuation.yes 'punctuation.state := - punctuation.no = - { pop$ before.all } - { punctuation.yes = { after.word }{ after.punctuation } if$ } - if$ - 'output.state := -} - -FUNCTION {output} -{ duplicate$ empty$ - { - pop$ - "" 'bibfield := - } - 'output.nonnull - if$ -} - -FUNCTION {output.nopunct} -{ - punctuation.no 'punctuation.state := - output.nonnull -} - -FUNCTION {output.check} -{ swap$ - duplicate$ empty$ - { pop$ "empty " swap$ * " in " * cite$ * warning$ } - { swap$ pop$ output.nonnull } - if$ -} - -FUNCTION {bbl.open} { "\BibitemOpen " } - -FUNCTION {bbl.shut} { "\BibitemShut " } - -FUNCTION {bibitem.shut.stop} { bbl.shut "{Stop}%" * } - -FUNCTION {bibitem.shut.nostop} { bbl.shut "{NoStop}%" * } - -FUNCTION {bibitem.shut} -{ - non.stop - { - bibitem.shut.nostop * - }{ - bibitem.shut.stop * - } - if$ -} - -FUNCTION {html.itag} { - "p" -} - -FUNCTION {html.ltag} { - "" -} - -FUNCTION {output.SLACcitation} -{ SLACcitation empty$ - 'skip$ - { - newline$ - SLACcitation write$ - } - if$ -} - -FUNCTION {fin.entry} -{ - bibitem.shut - write$ - output.SLACcitation -} - -FUNCTION {new.block} -{ output.state before.all = - 'skip$ - { after.block 'output.state := } - if$ -} - -FUNCTION {new.block.comma} -{ -} - -FUNCTION {new.sentence} -{ output.state after.block = output.state before.all = or - 'skip$ - { after.sentence 'output.state := } - if$ -} - -FUNCTION {new.sentence.comma} -{ -} - -FUNCTION {sentence.or.colon} -{ - new.sentence -} - -FUNCTION {add.blank} -{ - word.space * - before.all 'output.state := -} - -FUNCTION {no.blank.or.punct} -{ - "\hspace {0pt}" * - before.all 'output.state := -} - -FUNCTION {date.block} -{ - new.block.comma - skip$ -} - -STRINGS {z} -FUNCTION {remove.dots} -{ - control.author.dotless { - 'z := - "" - { z empty$ not } - { z #1 #1 substring$ - z #2 global.max$ substring$ 'z := - duplicate$ "." = 'pop$ - { * } - if$ - } - while$ - } 'skip$ if$ -} - -FUNCTION {new.block.checkb} -{ empty$ - swap$ empty$ - and - 'skip$ - 'new.block - if$ -} - -FUNCTION {field.or.null} -{ duplicate$ empty$ - { pop$ "" } - 'skip$ - if$ -} - -FUNCTION {emphasize} -{ - duplicate$ empty$ - { pop$ "" } - { - "\emph {" swap$ * "}" * - } - if$ -} - -FUNCTION {bolden} -{ duplicate$ empty$ - { pop$ "" } - { "\textbf {" swap$ * "}" * } - if$ -} - -FUNCTION {bib.name.font} -{ - duplicate$ empty$ - { pop$ "" } - { - "\bibnamefont {" swap$ * "}" * - } - if$ -} - -FUNCTION {bib.fname.font} -{ - duplicate$ empty$ - { pop$ "" } - { - "\bibfnamefont {" swap$ * "}" * - } - if$ -} - -FUNCTION {cite.name.font} -{ - duplicate$ empty$ - { pop$ "" } - { - "\citenamefont {" swap$ * "}" * - } - if$ -} - -FUNCTION {tie.or.space.prefix} -{ duplicate$ text.length$ #3 < - { "~" } - { word.space } - if$ - swap$ -} - -FUNCTION {capitalize} -{ - "u" change.case$ "t" change.case$ -} - -FUNCTION {space.word} -{ word.space swap$ * word.space * } - - % Here are the language-specific definitions for explicit words. - % Each function has a name bbl.xxx where xxx is the English word. - % The language selected here is ENGLISH - -FUNCTION {bbl.and} -{ - "and" -} - -FUNCTION {bbl.etal} -{ - "et~al." -} - -FUNCTION {bbl.editors} -{ - "eds." -} - -FUNCTION {bbl.editor} -{ - "ed." -} - -FUNCTION {bbl.edby} -{ "edited by" } - -FUNCTION {bbl.edition} -{ - "ed." -} - -FUNCTION {bbl.volume} -{ - "vol." -} - -FUNCTION {bbl.of} -{ "of" } - -FUNCTION {bbl.number} -{ - "no." -} - -FUNCTION {bbl.nr} -{ "no." } - -FUNCTION {bbl.in} -{ "in" } - -FUNCTION {bbl.pages} -{ - "pp." -} - -FUNCTION {bbl.page} -{ - "p." -} - -FUNCTION {bbl.eidpp} -{ "pages" } - -FUNCTION {bbl.chapter} -{ - "chap." -} - -FUNCTION {bbl.techrep} -{ - "Tech. Rep." -} - -FUNCTION {bbl.mthesis} -{ "Master's thesis" } - -FUNCTION {bbl.phdthesis} -{ "Ph.D. thesis" } - -FUNCTION {bbl.first} -{ - "1st" -} - -FUNCTION {bbl.second} -{ - "2nd" -} - -FUNCTION {bbl.third} -{ - "3rd" -} - -FUNCTION {bbl.fourth} -{ - "4th" -} - -FUNCTION {bbl.fifth} -{ - "5th" -} - -FUNCTION {bbl.st} -{ "st" } - -FUNCTION {bbl.nd} -{ "nd" } - -FUNCTION {bbl.rd} -{ "rd" } - -FUNCTION {bbl.th} -{ "th" } - -MACRO {jan} {"Jan."} - -MACRO {feb} {"Feb."} - -MACRO {mar} {"Mar."} - -MACRO {apr} {"Apr."} - -MACRO {may} {"May"} - -MACRO {jun} {"Jun."} - -MACRO {jul} {"Jul."} - -MACRO {aug} {"Aug."} - -MACRO {sep} {"Sep."} - -MACRO {oct} {"Oct."} - -MACRO {nov} {"Nov."} - -MACRO {dec} {"Dec."} - -FUNCTION {bbl.url.prefix} -{ - "\urlprefix " -} - -FUNCTION {eng.ord} -{ duplicate$ "1" swap$ * - #-2 #1 substring$ "1" = - { bbl.th * } - { duplicate$ #-1 #1 substring$ - duplicate$ "1" = - { pop$ bbl.st * } - { duplicate$ "2" = - { pop$ bbl.nd * } - { "3" = - { bbl.rd * } - { bbl.th * } - if$ - } - if$ - } - if$ - } - if$ -} - - %------------------------------------------------------------------- - % Begin module: - % \ProvidesFile{physjour.mbs}[2002/01/14 2.2 (PWD)] -MACRO {aa}{"Astron. \& Astrophys."} -MACRO {aasup}{"Astron. \& Astrophys. Suppl. Ser."} -MACRO {aj} {"Astron. J."} -MACRO {aph} {"Acta Phys."} -MACRO {advp} {"Adv. Phys."} -MACRO {ajp} {"Amer. J. Phys."} -MACRO {ajm} {"Amer. J. Math."} -MACRO {amsci} {"Amer. Sci."} -MACRO {anofd} {"Ann. Fluid Dyn."} -MACRO {am} {"Ann. Math."} -MACRO {ap} {"Ann. Phys. (NY)"} -MACRO {adp} {"Ann. Phys. (Leipzig)"} -MACRO {ao} {"Appl. Opt."} -MACRO {apl} {"Appl. Phys. Lett."} -MACRO {app} {"Astroparticle Phys."} -MACRO {apj} {"Astrophys. J."} -MACRO {apjsup} {"Astrophys. J. Suppl."} -MACRO {apss} {"Astrophys. Space Sci."} -MACRO {araa} {"Ann. Rev. Astron. Astrophys."} -MACRO {baas} {"Bull. Amer. Astron. Soc."} -MACRO {baps} {"Bull. Amer. Phys. Soc."} -MACRO {cmp} {"Comm. Math. Phys."} -MACRO {cpam} {"Commun. Pure Appl. Math."} -MACRO {cppcf} {"Comm. Plasma Phys. \& Controlled Fusion"} -MACRO {cpc} {"Comp. Phys. Comm."} -MACRO {cqg} {"Class. Quant. Grav."} -MACRO {cra} {"C. R. Acad. Sci. A"} -MACRO {fed} {"Fusion Eng. \& Design"} -MACRO {ft} {"Fusion Tech."} -MACRO {grg} {"Gen. Relativ. Gravit."} -MACRO {ieeens} {"IEEE Trans. Nucl. Sci."} -MACRO {ieeeps} {"IEEE Trans. Plasma Sci."} -MACRO {ijimw} {"Interntl. J. Infrared \& Millimeter Waves"} -MACRO {ip} {"Infrared Phys."} -MACRO {irp} {"Infrared Phys."} -MACRO {jap} {"J. Appl. Phys."} -MACRO {jasa} {"J. Acoust. Soc. America"} -MACRO {jcp} {"J. Comp. Phys."} -MACRO {jetp} {"Sov. Phys.--JETP"} -MACRO {jfe} {"J. Fusion Energy"} -MACRO {jfm} {"J. Fluid Mech."} -MACRO {jmp} {"J. Math. Phys."} -MACRO {jne} {"J. Nucl. Energy"} -MACRO {jnec} {"J. Nucl. Energy, C: Plasma Phys., Accelerators, Thermonucl. Res."} -MACRO {jnm} {"J. Nucl. Mat."} -MACRO {jpc} {"J. Phys. Chem."} -MACRO {jpp} {"J. Plasma Phys."} -MACRO {jpsj} {"J. Phys. Soc. Japan"} -MACRO {jsi} {"J. Sci. Instrum."} -MACRO {jvst} {"J. Vac. Sci. \& Tech."} -MACRO {nat} {"Nature"} -MACRO {nature} {"Nature"} -MACRO {nedf} {"Nucl. Eng. \& Design/Fusion"} -MACRO {nf} {"Nucl. Fusion"} -MACRO {nim} {"Nucl. Inst. \& Meth."} -MACRO {nimpr} {"Nucl. Inst. \& Meth. in Phys. Res."} -MACRO {np} {"Nucl. Phys."} -MACRO {npb} {"Nucl. Phys. B"} -MACRO {nt/f} {"Nucl. Tech./Fusion"} -MACRO {npbpc} {"Nucl. Phys. B (Proc. Suppl.)"} -MACRO {inc} {"Nuovo Cimento"} -MACRO {nc} {"Nuovo Cimento"} -MACRO {pf} {"Phys. Fluids"} -MACRO {pfa} {"Phys. Fluids A: Fluid Dyn."} -MACRO {pfb} {"Phys. Fluids B: Plasma Phys."} -MACRO {pl} {"Phys. Lett."} -MACRO {pla} {"Phys. Lett. A"} -MACRO {plb} {"Phys. Lett. B"} -MACRO {prep} {"Phys. Rep."} -MACRO {pnas} {"Proc. Nat. Acad. Sci. USA"} -MACRO {pp} {"Phys. Plasmas"} -MACRO {ppcf} {"Plasma Phys. \& Controlled Fusion"} -MACRO {phitrsl} {"Philos. Trans. Roy. Soc. London"} -MACRO {prl} {"Phys. Rev. Lett."} -MACRO {pr} {"Phys. Rev."} -MACRO {physrev} {"Phys. Rev."} -MACRO {pra} {"Phys. Rev. A"} -MACRO {prb} {"Phys. Rev. B"} -MACRO {prc} {"Phys. Rev. C"} -MACRO {prd} {"Phys. Rev. D"} -MACRO {pre} {"Phys. Rev. E"} -MACRO {ps} {"Phys. Scripta"} -MACRO {procrsl} {"Proc. Roy. Soc. London"} -MACRO {rmp} {"Rev. Mod. Phys."} -MACRO {rsi} {"Rev. Sci. Inst."} -MACRO {science} {"Science"} -MACRO {sciam} {"Sci. Am."} -MACRO {sam} {"Stud. Appl. Math."} -MACRO {sjpp} {"Sov. J. Plasma Phys."} -MACRO {spd} {"Sov. Phys.--Doklady"} -MACRO {sptp} {"Sov. Phys.--Tech. Phys."} -MACRO {spu} {"Sov. Phys.--Uspeki"} -MACRO {st} {"Sky and Telesc."} - % End module: physjour.mbs - %------------------------------------------------------------------- - % Begin module: - % \ProvidesFile{geojour.mbs}[2002/07/10 2.0h (PWD)] -MACRO {aisr} {"Adv. Space Res."} -MACRO {ag} {"Ann. Geophys."} -MACRO {anigeo} {"Ann. Geofis."} -MACRO {angl} {"Ann. Glaciol."} -MACRO {andmet} {"Ann. d. Meteor."} -MACRO {andgeo} {"Ann. d. Geophys."} -MACRO {andphy} {"Ann. Phys.-Paris"} -MACRO {afmgb} {"Arch. Meteor. Geophys. Bioklimatol."} -MACRO {atph} {"Atm\'osphera"} -MACRO {aao} {"Atmos. Ocean"} -MACRO {ass}{"Astrophys. Space Sci."} -MACRO {atenv} {"Atmos. Environ."} -MACRO {aujag} {"Aust. J. Agr. Res."} -MACRO {aumet} {"Aust. Meteorol. Mag."} -MACRO {blmet} {"Bound.-Lay. Meteorol."} -MACRO {bams} {"Bull. Amer. Meteorol. Soc."} -MACRO {cch} {"Clim. Change"} -MACRO {cdyn} {"Clim. Dynam."} -MACRO {cbul} {"Climatol. Bull."} -MACRO {cap} {"Contrib. Atmos. Phys."} -MACRO {dsr} {"Deep-Sea Res."} -MACRO {dhz} {"Dtsch. Hydrogr. Z."} -MACRO {dao} {"Dynam. Atmos. Oceans"} -MACRO {eco} {"Ecology"} -MACRO {empl}{"Earth, Moon and Planets"} -MACRO {envres} {"Environ. Res."} -MACRO {envst} {"Environ. Sci. Technol."} -MACRO {ecms} {"Estuarine Coastal Mar. Sci."} -MACRO {expa}{"Exper. Astron."} -MACRO {geoint} {"Geofis. Int."} -MACRO {geopub} {"Geofys. Publ."} -MACRO {geogeo} {"Geol. Geofiz."} -MACRO {gafd} {"Geophys. Astrophys. Fluid Dyn."} -MACRO {gfd} {"Geophys. Fluid Dyn."} -MACRO {geomag} {"Geophys. Mag."} -MACRO {georl} {"Geophys. Res. Lett."} -MACRO {grl} {"Geophys. Res. Lett."} -MACRO {ga} {"Geophysica"} -MACRO {gs} {"Geophysics"} -MACRO {ieeetap} {"IEEE Trans. Antenn. Propag."} -MACRO {ijawp} {"Int. J. Air Water Pollut."} -MACRO {ijc} {"Int. J. Climatol."} -MACRO {ijrs} {"Int. J. Remote Sens."} -MACRO {jam} {"J. Appl. Meteorol."} -MACRO {jaot} {"J. Atmos. Ocean. Technol."} -MACRO {jatp} {"J. Atmos. Terr. Phys."} -MACRO {jastp} {"J. Atmos. Solar-Terr. Phys."} -MACRO {jce} {"J. Climate"} -MACRO {jcam} {"J. Climate Appl. Meteor."} -MACRO {jcm} {"J. Climate Meteor."} -MACRO {jcy} {"J. Climatol."} -MACRO {jgr} {"J. Geophys. Res."} -MACRO {jga} {"J. Glaciol."} -MACRO {jh} {"J. Hydrol."} -MACRO {jmr} {"J. Mar. Res."} -MACRO {jmrj} {"J. Meteor. Res. Japan"} -MACRO {jm} {"J. Meteor."} -MACRO {jpo} {"J. Phys. Oceanogr."} -MACRO {jra} {"J. Rech. Atmos."} -MACRO {jaes} {"J. Aeronaut. Sci."} -MACRO {japca} {"J. Air Pollut. Control Assoc."} -MACRO {jas} {"J. Atmos. Sci."} -MACRO {jmts} {"J. Mar. Technol. Soc."} -MACRO {jmsj} {"J. Meteorol. Soc. Japan"} -MACRO {josj} {"J. Oceanogr. Soc. Japan"} -MACRO {jwm} {"J. Wea. Mod."} -MACRO {lao} {"Limnol. Oceanogr."} -MACRO {mwl} {"Mar. Wea. Log"} -MACRO {mau} {"Mausam"} -MACRO {meteor} {"``Meteor'' Forschungsergeb."} -MACRO {map} {"Meteorol. Atmos. Phys."} -MACRO {metmag} {"Meteor. Mag."} -MACRO {metmon} {"Meteor. Monogr."} -MACRO {metrun} {"Meteor. Rundsch."} -MACRO {metzeit} {"Meteor. Z."} -MACRO {metgid} {"Meteor. Gidrol."} -MACRO {mwr} {"Mon. Weather Rev."} -MACRO {nwd} {"Natl. Weather Dig."} -MACRO {nzjmfr} {"New Zeal. J. Mar. Freshwater Res."} -MACRO {npg} {"Nonlin. Proc. Geophys."} -MACRO {om} {"Oceanogr. Meteorol."} -MACRO {ocac} {"Oceanol. Acta"} -MACRO {oceanus} {"Oceanus"} -MACRO {paleoc} {"Paleoceanography"} -MACRO {pce} {"Phys. Chem. Earth"} -MACRO {pmg} {"Pap. Meteor. Geophys."} -MACRO {ppom} {"Pap. Phys. Oceanogr. Meteor."} -MACRO {physzeit} {"Phys. Z."} -MACRO {pps} {"Planet. Space Sci."} -MACRO {pss} {"Planet. Space Sci."} -MACRO {pag} {"Pure Appl. Geophys."} -MACRO {qjrms} {"Quart. J. Roy. Meteorol. Soc."} -MACRO {quatres} {"Quat. Res."} -MACRO {rsci} {"Radio Sci."} -MACRO {rse} {"Remote Sens. Environ."} -MACRO {rgeo} {"Rev. Geophys."} -MACRO {rgsp} {"Rev. Geophys. Space Phys."} -MACRO {rdgeo} {"Rev. Geofis."} -MACRO {revmeta} {"Rev. Meteorol."} -MACRO {sgp}{"Surveys in Geophys."} -MACRO {sp} {"Solar Phys."} -MACRO {ssr} {"Space Sci. Rev."} -MACRO {tellus} {"Tellus"} -MACRO {tac} {"Theor. Appl. Climatol."} -MACRO {tagu} {"Trans. Am. Geophys. Union (EOS)"} -MACRO {wrr} {"Water Resour. Res."} -MACRO {weather} {"Weather"} -MACRO {wafc} {"Weather Forecast."} -MACRO {ww} {"Weatherwise"} -MACRO {wmob} {"WMO Bull."} -MACRO {zeitmet} {"Z. Meteorol."} - % End module: geojour.mbs - %------------------------------------------------------------------- - % Begin module: - % \ProvidesFile{photjour.mbs}[1999/02/24 2.0b (PWD)] - -MACRO {appopt} {"Appl. Opt."} -MACRO {bell} {"Bell Syst. Tech. J."} -MACRO {ell} {"Electron. Lett."} -MACRO {jasp} {"J. Appl. Spectr."} -MACRO {jqe} {"IEEE J. Quantum Electron."} -MACRO {jlwt} {"J. Lightwave Technol."} -MACRO {jmo} {"J. Mod. Opt."} -MACRO {josa} {"J. Opt. Soc. America"} -MACRO {josaa} {"J. Opt. Soc. Amer.~A"} -MACRO {josab} {"J. Opt. Soc. Amer.~B"} -MACRO {jdp} {"J. Phys. (Paris)"} -MACRO {oc} {"Opt. Commun."} -MACRO {ol} {"Opt. Lett."} -MACRO {phtl} {"IEEE Photon. Technol. Lett."} -MACRO {pspie} {"Proc. Soc. Photo-Opt. Instrum. Eng."} -MACRO {sse} {"Solid-State Electron."} -MACRO {sjot} {"Sov. J. Opt. Technol."} -MACRO {sjqe} {"Sov. J. Quantum Electron."} -MACRO {sleb} {"Sov. Phys.--Leb. Inst. Rep."} -MACRO {stph} {"Sov. Phys.--Techn. Phys."} -MACRO {stphl} {"Sov. Techn. Phys. Lett."} -MACRO {vr} {"Vision Res."} -MACRO {zph} {"Z. f. Physik"} -MACRO {zphb} {"Z. f. Physik~B"} -MACRO {zphd} {"Z. f. Physik~D"} - -MACRO {CLEO} {"CLEO"} -MACRO {ASSL} {"Adv. Sol.-State Lasers"} -MACRO {OSA} {"OSA"} - % End module: photjour.mbs -%% Copyright 1994-2007 Patrick W Daly -MACRO {acmcs} {"ACM Comput. Surv."} -MACRO {acta} {"Acta Inf."} -MACRO {cacm} {"Commun. ACM"} -MACRO {ibmjrd} {"IBM J. Res. Dev."} -MACRO {ibmsj} {"IBM Syst.~J."} -MACRO {ieeese} {"IEEE Trans. Software Eng."} -MACRO {ieeetc} {"IEEE Trans. Comput."} -MACRO {ieeetcad} - {"IEEE Trans. Comput. Aid. Des."} -MACRO {ipl} {"Inf. Process. Lett."} -MACRO {jacm} {"J.~ACM"} -MACRO {jcss} {"J.~Comput. Syst. Sci."} -MACRO {scp} {"Sci. Comput. Program."} -MACRO {sicomp} {"SIAM J. Comput."} -MACRO {tocs} {"ACM Trans. Comput. Syst."} -MACRO {tods} {"ACM Trans. Database Syst."} -MACRO {tog} {"ACM Trans. Graphic."} -MACRO {toms} {"ACM Trans. Math. Software"} -MACRO {toois} {"ACM Trans. Office Inf. Syst."} -MACRO {toplas} {"ACM Trans. Progr. Lang. Syst."} -MACRO {tcs} {"Theor. Comput. Sci."} - -MACRO {jhep} {"J. High Energy Phys."} -MACRO {jcap} {"J. Cosmol. Astropart. Phys."} -MACRO {jinst} {"J. Instrum."} -MACRO {jstat} {"J. Stat. Mech.: Theory Exp."} - -FUNCTION {bibinfo.command} { "\bibinfo " } - -FUNCTION {bibinfo.check} -{ swap$ - duplicate$ missing$ - { - pop$ - pop$ "" - }{ - duplicate$ empty$ - { - swap$ pop$ - }{ - swap$ - bibinfo.command "{" * swap$ * "} {" * swap$ * "}" * - } - if$ - } - if$ -} - -FUNCTION {bibinfo.warn} -{ swap$ - duplicate$ missing$ - { - swap$ "missing " swap$ * " in " * cite$ * warning$ pop$ - "" - }{ - duplicate$ empty$ - { - swap$ "empty " swap$ * " in " * cite$ * warning$ - }{ - swap$ - bibinfo.command " {" * swap$ * "} {" * swap$ * "}" * - } - if$ - } - if$ -} - -FUNCTION {archiv.base} -{ - "https://arxiv.org/abs" -} - -FUNCTION {archiv.prefix.base} -{ - "arXiv" -} - -FUNCTION {eprint.command} -{ - "\Eprint " -} - -FUNCTION {format.eprint.controlled} -{ - eprint duplicate$ empty$ - control.eprint #1 = - or - { pop$ "" } - { - duplicate$ - "" - archive duplicate$ empty$ { pop$ archiv.base } 'skip$ if$ * - "/" * - swap$ * - "{" swap$ * "} " * - swap$ - "" - archivePrefix duplicate$ empty$ { pop$ "" } { ":" * } if$ * - swap$ * - primaryClass duplicate$ empty$ { pop$ "" } { " [" swap$ * "]" * } if$ * - "{" swap$ * "} " * - * - eprint.command swap$ * - } - if$ -} - -FUNCTION {format.eprint} -{ - eprint duplicate$ empty$ - { pop$ "" } - { - duplicate$ - "" - archive duplicate$ empty$ { pop$ archiv.base } 'skip$ if$ * - "/" * - swap$ * - "{" swap$ * "} " * - swap$ - "" - archivePrefix duplicate$ empty$ { pop$ "" } { ":" * } if$ * - swap$ * - primaryClass duplicate$ empty$ { pop$ "" } { " [" swap$ * "]" * } if$ * - "{" swap$ * "} " * - * - eprint.command swap$ * - } - if$ -} - -FUNCTION {format.translation} -{ translation duplicate$ empty$ - 'skip$ - { "" - "\translation{" * swap$ * "}" * - punctuation.space 'punctuation.state := - } - if$ -} - -FUNCTION {format.url} -{ - url duplicate$ empty$ - { pop$ "" } - { - "\url " - "{" * swap$ * "}" * - } - if$ -} - -INTEGERS { nameptr namesleft numnames } - -FUNCTION {check.speaker} -{ key empty$ 'skip$ - { key nameptr int.to.str$ = - { - bolden - } - 'skip$ - if$ - } - if$ -} - -STRINGS { bibinfo} - -FUNCTION {format.names.fname} -{ - control.author.initials { - control.author.dotless { - control.author.nospace { - "f{}" - } { - "f{~}" - } if$ - } { - control.author.nospace { - "f{.}." - } { - "f." - } if$ - } if$ - } { - "ff" - } if$ -} - -FUNCTION {bracify} -{ - "{" swap$ * "}" * -} - -FUNCTION {name.comma} -{ - control.author.nocomma 'skip$ { "," swap$ * } if$ -} - -FUNCTION {format.names.format.onefont} -{ - "{vv~}{ll}" - nameptr #1 > - control.author.first - and - control.author.reversed not - or - { - control.author.initials { - "f" - control.author.dotless 'skip$ { - "." * - } if$ - "~" * - } { - "ff" - } if$ - bracify - swap$ - } { - format.names.fname - " " swap$ * - name.comma - bracify - } - if$ - "jj" - " " swap$ * - name.comma - bracify - control.author.jnrlst 'skip$ 'swap$ if$ - * * -} - -FUNCTION {format.names.onefont} -{ - s nameptr format.names.format.onefont format.name$ - remove.dots - bib.name.font -} - -FUNCTION {format.names.morfont} -{ s nameptr - "{vv~}{ll}" format.name$ bib.name.font - nameptr #1 > - control.author.first - and - control.author.reversed not - or - { - s nameptr - control.author.initials { - "f" % default: name + surname + comma junior - } { - "ff" - } if$ - control.author.dotless 'skip$ { - "." * % nm-init % Initials. + surname (J. F. Smith) control.author.initials - } if$ - bracify - format.name$ duplicate$ empty$ 'skip$ - { tie.or.space.prefix bib.fname.font swap$ * } - if$ - swap$ - * - s nameptr - "{jj}" format.name$ duplicate$ empty$ 'skip$ - { bib.fname.font ", " swap$ * } - if$ - } { - "," * - s nameptr - format.names.fname - "jj" - " " - name.comma - control.author.jnrlst { - swap$ * skip$ - } { - skip$ * swap$ - } if$ - bracify swap$ bracify swap$ - * - format.name$ - remove.dots - duplicate$ empty$ 'skip$ - { bib.fname.font " " swap$ * } - if$ - } if$ - * -} - -FUNCTION {names.punctuate} -{ - "," * - " " * -} -%<*!aipauth&!apsrmp> - -FUNCTION {names.comma} -{ - "," * -} -%</!aipauth&!apsrmp> - -FUNCTION {format.names} -{ 'bibinfo := - duplicate$ empty$ { pop$ "" } { - duplicate$ num.names$ - duplicate$ 'numnames := - 'namesleft := - 's := - #1 'nameptr := - "" - { namesleft #0 > } - { - format.names.morfont - bibinfo bibinfo.check - type$ "presentation" = - 'check.speaker - 'skip$ - if$ - 't := - nameptr #1 > not - { - t * - } { - namesleft #1 > - { - names.punctuate - t * - } { - s nameptr "{ll}" format.name$ duplicate$ "others" = - { 't := } - { pop$ } - if$ -%<*!apsrmp> - numnames #2 > -%<!aipauth> 'names.comma -%<aipauth> 'names.punctuate - 'skip$ - if$ -%</!apsrmp> -%<apsrmp> names.punctuate - t "others" = - { - " " * - bbl.etal - emphasize - * - } { - bbl.and -%<aapmrev> space.word * -%<aipauth> word.space * * -%<aipnum> space.word * -%<apsrev> space.word * -%<apsrmp> word.space * * - t * - } - if$ - } - if$ - } - if$ - nameptr #1 + 'nameptr := - namesleft #1 - 'namesleft := - } - while$ - } if$ -} - -FUNCTION {format.names.ed.onefont} -{ - s nameptr - control.author.initials { - control.author.dotless { - control.author.nospace { - "{f{}~}{vv~}{ll}{ jj}" % nm-rvx|nm-rvcx - } { - "{f{~}~}{vv~}{ll}{ jj}" % nm-rv - } if$ - } { - control.author.nospace { - "{f{.}.~}{vv~}{ll}{ jj}" % nm-rvv|nm-rvvc - }{ - "{f.~}{vv~}{ll}{, jj}" % nm-init|nm-rev|nm-rev1 - } if$ - } if$ - } { - "{ff~}{vv~}{ll}{, jj}" - } if$ - format.name$ - remove.dots - bib.name.font -} - -FUNCTION {format.names.ed.morfont} -{ - control.author.reversed { % - control.author.initials { % - control.author.dotless { % - s nameptr - control.author.nospace { % nm-rvx nm-rvcx - "{f{}}" - } { % nm-rv - "{f{~}}" - } if$ - format.name$ duplicate$ empty$ 'skip$ - { tie.or.space.prefix bib.fname.font swap$ * } - if$ - s nameptr - "{vv~}{ll}" format.name$ bib.name.font * - s nameptr - "{jj}" format.name$ - remove.dots - duplicate$ empty$ 'skip$ - { bib.fname.font " " swap$ * } - if$ - } { % !control.author.dotless - s nameptr - control.author.nospace { % nm-rvv - "{ff}" - } { % nm-rev nm-rev1 - "{f.}" - } if$ - format.name$ duplicate$ empty$ 'skip$ - { tie.or.space.prefix bib.fname.font swap$ * } - if$ - s nameptr - "{vv~}{ll}" format.name$ bib.name.font * - s nameptr - "{jj}" format.name$ - duplicate$ empty$ 'skip$ - { bib.fname.font ", " swap$ * } - if$ - } if$ - } { % Full names !control.author.initials nm-revf nm-revv1 - s nameptr - "{ff}" - format.name$ duplicate$ empty$ 'skip$ - { tie.or.space.prefix bib.fname.font swap$ * } - if$ - s nameptr - "{vv~}{ll}" format.name$ bib.name.font * - s nameptr - "{jj}" format.name$ - duplicate$ empty$ 'skip$ - { bib.fname.font ", " swap$ * } - if$ - } if$ - } { % !control.author.reversed nm-init - s nameptr - "{f.}" - format.name$ duplicate$ empty$ 'skip$ - { tie.or.space.prefix bib.fname.font swap$ * } - if$ - s nameptr - "{vv~}{ll}" format.name$ bib.name.font * - s nameptr - "{jj}" format.name$ - duplicate$ empty$ 'skip$ - { bib.fname.font ", " swap$ * } - if$ - } if$ - * -} - -FUNCTION {format.names.ed} -{ - control.editor #0 > { - format.names - } { - 'bibinfo := - duplicate$ empty$ 'skip$ { - 's := - "" 't := - #1 'nameptr := - s num.names$ 'numnames := - numnames 'namesleft := - { namesleft #0 > } - { - format.names.ed.morfont - bibinfo bibinfo.check - 't := - nameptr #1 > - { - namesleft #1 > - { - names.punctuate - t * - }{ - s nameptr "{ll}" format.name$ duplicate$ "others" = - { 't := } - { pop$ } - if$ - numnames #2 > -%<aapmrev> 'names.comma -%<aipauth> 'names.punctuate -%<aipnum> 'names.comma -%<apsrev> 'names.comma -%<apsrmp> 'names.punctuate - 'skip$ - if$ - t "others" = - { - " " * bbl.etal emphasize * - }{ - bbl.and - space.word * t * - } - if$ - } - if$ - } - 't - if$ - nameptr #1 + 'nameptr := - namesleft #1 - 'namesleft := - } - while$ - } if$ - } if$ -} - -FUNCTION {format.key} -{ empty$ - { key field.or.null } - { "" } - if$ -} - -FUNCTION {format.authors} -{ author "author" format.names - duplicate$ empty$ 'skip$ - { collaboration "collaboration" bibinfo.check - duplicate$ empty$ 'skip$ - { " (" swap$ * ")" * } - if$ - * - } - if$ - "author" 'bibfield := -} - -FUNCTION {get.bbl.editor} -{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ -} - -FUNCTION {format.editors} -{ editor "editor" format.names duplicate$ empty$ 'skip$ - { - "," * - word.space * - get.bbl.editor -%<apsrmp> capitalize - * - } - if$ -} - -FUNCTION {format.isbn.output} -{ -} - -FUNCTION {format.issn.output} -{ -} - -FUNCTION {doi.base} -{ - "https://doi.org/" -} - -FUNCTION {doi.base.command} -{ - "\doibase " -} - -FUNCTION {noop.command} -{ - "\href@noop " -} - -FUNCTION {href.command} -{ - "\href " -} - -FUNCTION {link.tag.open} -{ - doi duplicate$ empty$ - { - pop$ - url duplicate$ empty$ - { - pop$ "" noop.command - }{ - href.command - } - if$ - } - { - "https://doi.org/" swap$ * - href.command - } - if$ - "{" * swap$ * "} {" * -} - -FUNCTION {link.tag.shut} -{ - "}" -} - -FUNCTION {link.open} -{ - link.tag.open output.nopunct -} - -FUNCTION {link.shut} -{ - link.tag.shut * -} - -FUNCTION {add.doi} -{ - link.tag.open swap$ * link.tag.shut * -} - -FUNCTION {select.language} -{ duplicate$ empty$ - 'pop$ - { language empty$ - 'skip$ - { "{\selectlanguage {" language * "}" * swap$ * "}" * } - if$ - } - if$ -} - -FUNCTION {format.note} -{ - note empty$ - { "" } - { note #1 #1 substring$ - duplicate$ "{" = - 'skip$ - { - output.state after.word = output.state after.punctuation = or - { "l" } - { "u" } - if$ change.case$ - } - if$ - note #2 global.max$ substring$ * "note" bibinfo.check - } - if$ -} - -FUNCTION {bbl.enquote} -{ - "\enquote " -} - -FUNCTION {string.enquote} -{ - punctuation.no 'punctuation.state := - non.stop { - block.punctuation - } { "" } if$ - swap$ pop$ - * - bbl.enquote "{" * swap$ * "}" * - word.space * -} - -FUNCTION {format.title} -{ title - duplicate$ empty$ 'skip$ { "t" change.case$ } if$ - duplicate$ "title" bibinfo.check swap$ - duplicate$ empty$ 'pop$ - { - punctuation.yes 'punctuation.state := -%<!apsrev> string.enquote -%<apsrev> pop$ - select.language - } - if$ -} - -FUNCTION {end.quote.title} -{ title empty$ - 'skip$ - { before.all 'output.state := } - if$ -} - -FUNCTION {format.name.apply} -{ - s nameptr - "{vv~}{ll}" - format.name$ - cite.name.font -} - -FUNCTION {format.full.names} -{ - 's := - "" 't := - #1 'nameptr := - s num.names$ 'numnames := - numnames 'namesleft := - { namesleft #0 > } - { format.name.apply - 't := - nameptr #1 > - { - namesleft #1 > - { ", " * t * } - { - s nameptr "{ll}" format.name$ duplicate$ "others" = - { - 't := - } - 'pop$ - if$ - t "others" = - { - " " * bbl.etal - emphasize * - }{ - numnames #2 > { "," * }{ skip$ } if$ - bbl.and - space.word * t * - } - if$ - } - if$ - } - 't - if$ - nameptr #1 + 'nameptr := - namesleft #1 - 'namesleft := - } - while$ -} - -FUNCTION {make.full.names} -{ - key editor author - type$ "proceedings" = - type$ "book" = - type$ "inbook" = - or { pop$ }{ { pop$ "" }{ swap$ pop$ "" swap$ } if$ } if$ - duplicate$ empty$ - { pop$ - duplicate$ empty$ - { pop$ - duplicate$ empty$ - { pop$ - cite$ #1 #3 substring$ - }{ - skip$ - } - if$ - } - { swap$ pop$ format.full.names } - if$ - } - { swap$ pop$ swap$ pop$ format.full.names } - if$ -} - -FUNCTION {year.bibitem} -{ - year duplicate$ empty$ - { pop$ "" -%<apsrmp> "????" * - }{ - skip$ - } if$ - extra.label * -} - -FUNCTION {output.bibitem} -{ - newline$ - "" - label - * ")" * - make.full.names duplicate$ short.list = - { pop$ }{ * } if$ - bracify - "[" swap$ * "]" * - cite$ bracify "%" * - * - "\bibitem " - swap$ * - write$ newline$ - " " - duplicate$ bbl.open * write$ newline$ - before.all 'output.state := - punctuation.yes 'punctuation.state := -} - -FUNCTION {n.dashify} -{ - 't := - "" - { t empty$ not } - { t #1 #1 substring$ "-" = - { t #1 #2 substring$ "--" = not - { "--" * - t #2 global.max$ substring$ 't := - }{ - { t #1 #1 substring$ "-" = } - { "-" * - t #2 global.max$ substring$ 't := - } - while$ - } - if$ - }{ - t #1 #1 substring$ * - t #2 global.max$ substring$ 't := - } - if$ - } - while$ -} - -FUNCTION {word.in} -{ - bbl.in - word.space * -} - -%<!apsrev>FUNCTION {date.encapsulate} -%<apsrev>FUNCTION {parenthesize} -{ - duplicate$ empty$ - 'skip$ - { - before.all 'output.state := - " (" swap$ * ")" * - } - if$ -} - -FUNCTION {format.date} -{ - year "year" bibinfo.check duplicate$ empty$ - { -%<*apsrmp> - "empty year in " cite$ * "; set to ????" * warning$ - pop$ "????" -%</apsrmp> - } - 'skip$ - if$ - extra.label * -%<!apsrev> date.encapsulate -%<apsrev> parenthesize -} - -FUNCTION {format.date.output.check} -{ - format.date - "year" output.check -} - -FUNCTION {format.date.output} -{ - format.date.output.check -} - -FUNCTION {format.btitle} -{ - booktitle duplicate$ empty$ { pop$ - title - } 'skip$ if$ - "title" bibinfo.check - duplicate$ empty$ 'skip$ - { - emphasize - select.language - } - if$ -} - -FUNCTION {either.or.check} -{ empty$ - 'pop$ - { "can't use both " swap$ * " fields in " * cite$ * warning$ } - if$ -} - -FUNCTION {editor.check.book} -{ editor empty$ 'skip$ - { - "can't use both author and editor fields in " cite$ * - ": try using @inbook instead" * - warning$ - } - if$ -} - -FUNCTION {format.bvolume} -{ volume duplicate$ empty$ - { pop$ "" } - { - "volume and number" number either.or.check - bbl.volume - capitalize - swap$ - tie.or.space.prefix "volume" bibinfo.check * * - series "series" bibinfo.check duplicate$ empty$ 'pop$ - { - ", " - * swap$ * - } - if$ - } - if$ -} - -FUNCTION {format.number} -{ - bbl.number - output.state after.word = output.state after.punctuation = or - #1 or - #0 and - 'skip$ - { capitalize } - if$ - number tie.or.space.prefix "number" bibinfo.check * * -} - -FUNCTION {format.number.series} -{ volume empty$ - { number empty$ - { series field.or.null } - { - series empty$ - { - number "number" bibinfo.check - }{ - format.number - series "series" bibinfo.check - word.space * swap$ * - } - if$ - } - if$ - } - { "" } - if$ -} - -FUNCTION {is.num} -{ chr.to.int$ - duplicate$ "0" chr.to.int$ < not - swap$ "9" chr.to.int$ > not and -} - -FUNCTION {extract.num} -{ duplicate$ 't := - "" 's := - { t empty$ not } - { t #1 #1 substring$ - t #2 global.max$ substring$ 't := - duplicate$ is.num - { s swap$ * 's := } - { pop$ "" 't := } - if$ - } - while$ - s empty$ - 'skip$ - { pop$ s } - if$ -} - -FUNCTION {convert.edition} -{ extract.num "l" change.case$ 's := - s "first" = s "1" = or - { bbl.first 't := } - { s "second" = s "2" = or - { bbl.second 't := } - { s "third" = s "3" = or - { bbl.third 't := } - { s "fourth" = s "4" = or - { bbl.fourth 't := } - { s "fifth" = s "5" = or - { bbl.fifth 't := } - { s #1 #1 substring$ is.num - { s - eng.ord - 't := } - { edition 't := } - if$ - } - if$ - } - if$ - } - if$ - } - if$ - } - if$ - t -} - -FUNCTION {format.edition} -{ edition duplicate$ empty$ 'skip$ - { - convert.edition - output.state after.word = output.state after.punctuation = or - { "l" } - { "t" } - if$ change.case$ - "edition" bibinfo.check - word.space * bbl.edition * - } - if$ -} - -INTEGERS { multiresult } -FUNCTION {multi.page.check} -{ 't := - #0 'multiresult := - { multiresult not - t empty$ not - and - } - { t #1 #1 substring$ - duplicate$ "-" = - swap$ duplicate$ "," = - swap$ "+" = - or or - { #1 'multiresult := } - { t #2 global.max$ substring$ 't := } - if$ - } - while$ - multiresult -} - -FUNCTION {format.pages} -{ pages duplicate$ empty$ - 'skip$ - { duplicate$ multi.page.check - { - bbl.pages swap$ - n.dashify - }{ - bbl.page swap$ - } - if$ - tie.or.space.prefix - "pages" bibinfo.check - * * - } - if$ -} - -FUNCTION {first.page} -{ 't := - "" - { t empty$ not t #1 #1 substring$ "-" = not and } - { t #1 #1 substring$ * - t #2 global.max$ substring$ 't := - } - while$ -} - -FUNCTION {format.book.pages} -{ - pages duplicate$ empty$ 'skip$ - { - "pages" bibinfo.check word.space bbl.pages * * - } - if$ -} - -FUNCTION {volnum.punct} -{ - "," - word.space * -} - -FUNCTION {format.journal.pages} -{ pages duplicate$ empty$ 'pop$ - { swap$ duplicate$ empty$ - { pop$ pop$ format.pages } - { volnum.punct * - swap$ - control.pages duplicate$ #0 < { - pop$ pop$ - }{ - #0 > - { - n.dashify - }{ - first.page - } if$ - } if$ - "pages" bibinfo.check - * - } - if$ - } - if$ -} - -FUNCTION {format.journal.eid} -{ eid "eid" bibinfo.check - duplicate$ empty$ 'pop$ - { swap$ duplicate$ empty$ 'skip$ - { volnum.punct * } - if$ - swap$ * - } - if$ -} - -FUNCTION {eid.or.pages} -{ - eid empty$ - { format.journal.pages } - { format.journal.eid } - if$ -} - -FUNCTION {format.ser.vol.num} -{ - series "series" bibinfo.check output - volume field.or.null - duplicate$ empty$ 'skip$ - { - "volume" bibinfo.check - } - if$ - bolden -%<*apsrmp> - number "number" bibinfo.check duplicate$ empty$ 'skip$ - { - swap$ duplicate$ empty$ - { "there's a number but no volume in " cite$ * warning$ } - 'skip$ - if$ - swap$ - "~(" swap$ * ")" * - } - if$ * -%</apsrmp> -} - -%<*apsrev> -FUNCTION {format.vol.num} -{ - volume field.or.null - duplicate$ empty$ 'skip$ - { - "volume" bibinfo.check - } - if$ - bolden -} - -%</apsrev> -FUNCTION {format.chapter.pages} -{ chapter empty$ - { -%<!apsrmp> format.pages -%<apsrmp> "" - } - { type empty$ - { - bbl.chapter - capitalize - }{ - type - capitalize - "type" bibinfo.check - } - if$ - chapter tie.or.space.prefix - "chapter" bibinfo.check - * * -%<*!apsrmp> - pages empty$ - 'skip$ - { ", " * format.pages * } - if$ -%</!apsrmp> - } - if$ -} - -FUNCTION {format.booktitle} -{ - booktitle duplicate$ "booktitle" bibinfo.check swap$ - duplicate$ empty$ 'pop$ - { - punctuation.yes 'punctuation.state := - pop$ emphasize - select.language - } - if$ -} - -FUNCTION {format.editor.in} -{ - editor "editor" format.names.ed duplicate$ empty$ 'skip$ - { - bbl.edby - word.space * swap$ * - } - if$ -} - -FUNCTION {output.article.booktitle} -{ - format.booktitle - "booktitle" 'bibfield := - output - bookaddress "address" bibinfo.check duplicate$ empty$ 'pop$ - { - "address" 'bibfield := - output.nonnull after.punctuation 'output.state := - } - if$ -} - -FUNCTION {format.in.ed.booktitle} -{ - format.booktitle duplicate$ empty$ 'pop$ - { - add.doi - word.in swap$ * output.nonnull - bookaddress "address" bibinfo.check output - format.number.series "series and number" bibinfo.check output - format.bvolume output - format.editor.in "editor" bibinfo.check output - } - if$ -} - -FUNCTION {format.in.ed.booktitle.inbook} -{ - format.booktitle duplicate$ empty$ 'pop$ - { - add.doi - word.in swap$ * output.nonnull - bookaddress "address" bibinfo.check output - format.number.series "series and number" bibinfo.check output - format.bvolume output - author empty$ 'skip$ - { format.editor.in "editor" bibinfo.check output } - if$ - } - if$ -} - -FUNCTION {format.thesis.type} -{ type duplicate$ empty$ - 'pop$ - { swap$ pop$ - "t" change.case$ "type" bibinfo.check - } - if$ -} - -FUNCTION {format.tr.number} -{ number "number" bibinfo.check - type duplicate$ empty$ - { pop$ bbl.techrep } - 'skip$ - if$ - "type" bibinfo.check - swap$ duplicate$ empty$ - { pop$ "t" change.case$ } - { tie.or.space.prefix * * } - if$ -} - -FUNCTION {format.article.crossref} -{ - word.in - " \cite{" * crossref * "}" * -} - -FUNCTION {format.book.crossref} -{ volume duplicate$ empty$ - { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ - pop$ word.in - } - { bbl.volume - swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word * - } - if$ - " \cite{" * crossref * "}" * -} - -FUNCTION {format.incoll.inproc.crossref} -{ - word.in - " \cite{" * crossref * "}" * -} - -FUNCTION {format.org.or.pub} -{ 't := - "" - address "address" bibinfo.check - duplicate$ empty$ - { pop$ t } - { t duplicate$ empty$ - { pop$ } - { - "," word.space * - * swap$ * - } - if$ - } - if$ - * -%<*!apsrmp> - year duplicate$ empty$ - { - "empty year in " cite$ * - warning$ - pop$ "" - } - 'skip$ - if$ - duplicate$ empty$ - { pop$ } - { - "year" bibinfo.check - swap$ - duplicate$ empty$ - { pop$ } - { - "," * - word.space * - swap$ * - } - if$ - } - if$ -%</!apsrmp> - duplicate$ empty$ 'skip$ { - "" - "(" * swap$ * ")" * - after.punctuation 'output.state := - punctuation.space 'punctuation.state := - } if$ -} - -FUNCTION {format.publisher.address} -{ publisher "publisher" bibinfo.warn format.org.or.pub -} - -FUNCTION {format.organization.address} -{ organization "organization" bibinfo.check format.org.or.pub -} - -FUNCTION {format.organization.publisher.address} -{ - publisher empty$ - { format.organization.address } - { organization "organization" bibinfo.check output - format.publisher.address - } - if$ -} - -FUNCTION {format.school.address.output} -{ - school "school" bibinfo.warn - address "address" bibinfo.check - duplicate$ empty$ 'skip$ - { - swap$ - duplicate$ empty$ 'skip$ - { - ", " * - } - if$ - swap$ - } - if$ - * -%<apsrmp> duplicate$ empty$ 'skip$ { "(" swap$ * ")" * } if$ after.punctuation 'output.state := - output -} - -FUNCTION {article.title.produce} -{ - control.title duplicate$ #0 < - { pop$ - }{ - format.title - "title" 'bibfield := - swap$ #0 > - { - "title" output.check - }{ - output - } if$ - new.block.comma - } if$ -} - -FUNCTION {control} -{ -} - -FUNCTION {article} -{ output.bibitem - format.authors - booktitle empty$ { - "author" output.check - }{ output } if$ - author format.key output -%<!apsrmp> new.block.comma -%<apsrmp> format.date.output.check date.block - article.title.produce - output.article.booktitle - crossref missing$ -%<apsrev>%% Handle special case of SISSA journals which require an issue number for unique citations and use volume/year interchangably - { -%<*!apsrev> - link.open - journal - "journal" bibinfo.warn - "journal" 'bibfield := - output - add.blank - format.ser.vol.num - output - eid.or.pages -%<!apsrmp> format.date.output.check - pages empty$ { - doi output - } 'skip$ if$ - link.shut -%</!apsrev> -%<*apsrev> - journal "J. High Energy Phys." = - journal "J. High Energ. Phys." = or - journal "JHEP" = or - journal "Journal of Cosmology and Astroparticle Physics" = or - journal "J. Cosmol. Astropart. Phys." = or - journal "JCAP" = or - journal "Journal of Instrumentation" = or - journal "J. Instrum." = or - journal "JINST" = or - journal "Journal of Statistical Mechanics" = or - journal "J. of Stat. Mech." = or - journal "J. Stat. Mech.: Theory Exp." = or - journal "JSTAT" = or - { - link.open - journal - "journal" bibinfo.warn - "journal" 'bibfield := - output - add.blank - format.vol.num output - number parenthesize - "number" bibinfo.warn - "number" 'bibfield := - output - eid.or.pages - link.shut - } - { - eid missing$ - pages missing$ and - doi missing$ not and - { - journal - "journal" bibinfo.warn - "journal" 'bibfield := - output - add.blank - format.ser.vol.num - output - link.open - doi output - link.shut - format.date.output.check - } - { - link.open - journal - "journal" bibinfo.warn - "journal" 'bibfield := - output - add.blank - format.ser.vol.num - output - eid.or.pages - format.date.output.check - link.shut - } if$ - } if$ -%</apsrev> - }{ - format.article.crossref output.nonnull -%<!apsrmp> format.pages output -%<apsrmp> eid.or.pages - } - if$ -%<!apsrev&!apsrmp> format.issn.output - new.block.comma - new.sentence.comma - format.note output - format.eprint.controlled output - format.translation output - fin.entry -} - -FUNCTION {book} -{ output.bibitem - author empty$ - { - format.editors "author and editor" output.check - editor format.key output - }{ - format.authors output.nonnull -%% crossref missing$ { editor.check.book } 'skip$ if$ - } - if$ -%<!apsrmp> new.block.comma -%<apsrmp> format.date.output.check date.block - link.open - format.btitle - "title" output.check - link.shut - format.edition output - author empty$ - { - } - { - format.editor.in output - editor format.key output - } - if$ - format.number.series output - crossref missing$ - { - format.bvolume output - new.block.comma - format.publisher.address output - }{ - new.block.comma - format.book.crossref output.nonnull -%<!apsrmp> format.date.output.check - } - if$ - format.isbn.output - format.chapter.pages - output - new.block.comma - new.sentence.comma - format.note output - format.eprint output - fin.entry -} - -FUNCTION {booklet} -{ output.bibitem - format.authors output - author format.key output -%<!apsrmp> new.block.comma -%<apsrmp> format.date.output date.block - link.open - format.title - "title" output.check - link.shut - new.block.comma - howpublished "howpublished" bibinfo.check output - address "address" bibinfo.check output -%<!apsrmp> format.date.output - format.isbn.output - format.book.pages output - new.block.comma - new.sentence.comma - format.note output - format.eprint output - fin.entry -} - -FUNCTION {footnote} -{ output.bibitem - format.note output - fin.entry -} - -FUNCTION {inbook} -{ output.bibitem - author empty$ - { - format.editors "editor" output.check - editor format.key output - }{ - format.authors output.nonnull - author format.key output - } - if$ -%<!apsrmp> new.block.comma -%<apsrmp> format.date.output.check date.block - - format.title output - new.block.comma - - crossref missing$ - { - format.in.ed.booktitle.inbook -%<!apsrmp> format.publisher.address output - format.chapter.pages -%<!apsrmp> "chapter and pages" -%<apsrmp> "chapter" - output.check - new.block.comma - format.edition output - new.block.comma -%<apsrmp> format.publisher.address output - }{ - format.chapter.pages -%<!apsrmp> "chapter and pages" -%<apsrmp> "chapter" - output.check - new.block.comma - format.book.crossref output.nonnull -%<!apsrmp> format.date.output.check - } - if$ - crossref missing$ - { format.isbn.output } - 'skip$ - if$ -%<apsrmp> format.pages "pages" output.check - new.block.comma - new.sentence.comma - format.note output - format.eprint output - fin.entry -} - -FUNCTION {incollection} -{ output.bibitem - format.authors "author" output.check - author format.key output -%<!apsrmp> new.block.comma -%<apsrmp> format.date.output.check date.block - article.title.produce - crossref missing$ - { - format.in.ed.booktitle -%<!apsrmp> format.publisher.address output - format.edition output - format.chapter.pages output -%<apsrmp> format.publisher.address output - format.isbn.output - }{ - format.incoll.inproc.crossref output.nonnull - format.chapter.pages output - } - if$ -%<apsrmp> format.pages "pages" output.check - new.block.comma - new.sentence.comma - format.note output - format.eprint output - fin.entry -} - -FUNCTION {inproceedings} -{ output.bibitem - format.authors "author" output.check - author format.key output -%<!apsrmp> new.block.comma -%<apsrmp> format.date.output.check date.block - article.title.produce - crossref missing$ - { - format.in.ed.booktitle - format.organization.publisher.address output -%<!apsrmp> format.chapter.pages output - format.isbn.output - format.issn.output - }{ - format.incoll.inproc.crossref output.nonnull -%<!apsrmp> format.chapter.pages output - } - if$ -%<apsrmp> format.chapter.pages "chapter and pages" output.check -%<apsrmp> format.pages "pages" output.check - new.block.comma - new.sentence.comma - format.note output - format.eprint output - fin.entry -} - -FUNCTION {conference} { inproceedings } -FUNCTION {manual} -{ output.bibitem - format.authors output - author format.key output -%<!apsrmp> new.block.comma -%<apsrmp> format.date.output date.block - link.open - format.btitle - "title" output.check - link.shut - organization "organization" bibinfo.check output - address "address" bibinfo.check output - format.edition output -%<!apsrmp> format.date.output - new.block.comma - new.sentence.comma - format.note output - format.eprint output - fin.entry -} - -FUNCTION {mastersthesis} -{ output.bibitem - format.authors "author" output.check - author format.key output -%<!apsrmp> new.block.comma -%<apsrmp> format.date.output.check date.block - format.btitle - output - new.block.comma - link.open - bbl.mthesis - format.thesis.type - output.nonnull - link.shut - format.school.address.output -%<!apsrmp> format.date.output.check - new.block.comma - new.sentence.comma - format.note output - format.eprint output - fin.entry -} - -FUNCTION {misc} -{ output.bibitem - format.authors output - author format.key output -%<apsrmp> format.date.output -%<!apsrmp> new.block.comma -%<apsrmp> date.block - link.open - format.title - output - link.shut - new.block.comma - howpublished "howpublished" bibinfo.check output -%<!apsrmp> format.date.output - new.block.comma - new.sentence.comma - format.note output - format.eprint output - fin.entry -} - -FUNCTION {phdthesis} -{ output.bibitem - format.authors "author" output.check - author format.key output -%<!apsrmp> new.block.comma -%<apsrmp> format.date.output.check date.block - format.btitle - output - new.block.comma - link.open - bbl.phdthesis - format.thesis.type - output.nonnull - link.shut - format.school.address.output -%<!apsrmp> format.date.output.check - new.block.comma - new.sentence.comma - format.note output - format.eprint output - fin.entry -} - -FUNCTION {presentation} -{ output.bibitem - format.authors output - author format.key output - new.block.comma - link.open - format.title - output - link.shut - new.block.comma - format.organization.address "organization and address" output.check - month "month" output.check - year "year" output.check - new.block.comma - new.sentence.comma - format.note output - new.sentence - type missing$ 'skip$ - {"(" type capitalize * ")" * output} - if$ - fin.entry -} - -FUNCTION {proceedings} -{ output.bibitem - format.editors output - editor format.key output -%<!apsrmp> new.block.comma -%<apsrmp> format.date.output.check date.block - link.open - format.btitle - "title" output.check - link.shut - bookaddress "address" bibinfo.check output - format.number.series output - format.bvolume output - format.organization.publisher.address output - format.isbn.output - format.issn.output - new.block.comma - new.sentence.comma - format.note output - format.eprint output - fin.entry -} - -FUNCTION {techreport} -{ output.bibitem - format.authors "author" output.check - author format.key output -%<!apsrmp> new.block.comma -%<apsrmp> format.date.output.check date.block - link.open -%<!apsrev&!apsrmp> format.title -%<apsrev|apsrmp> format.btitle - "title" output.check - link.shut - new.block.comma - format.tr.number - output.nonnull - institution "institution" bibinfo.warn - format.org.or.pub output - new.block.comma - new.sentence.comma - format.note output - format.eprint output - fin.entry -} - -FUNCTION {unpublished} -{ output.bibitem - format.authors "author" output.check - author format.key output -%<*!apsrev> -%<!apsrmp> new.block.comma -%<apsrmp> format.date.output date.block - link.open - format.title - "title" output.check - link.shut -%</!apsrev> -%<*apsrev> - article.title.produce - format.eprint output -%</apsrev> -%<!apsrmp> format.date.output - new.block.comma - new.sentence.comma - format.note "note" output.check -%<!apsrev> format.eprint output - fin.entry -} - -FUNCTION {dataset} -{ - output.bibitem - format.authors "author" output.check - author format.key output -%<apsrmp> format.date.output date.block - article.title.produce - doi missing$ - url missing$ not and - { - link.open - url "url" output.check - link.shut - } - { - link.open - doi "doi" output.check - link.shut - } if$ -%<!apsrmp> format.date.output - format.note output - fin.entry -} - -FUNCTION {default.type} { misc } - -READ - -EXECUTE {control.init} - -ITERATE {control.pass} - -EXECUTE {control.check} - -FUNCTION {sortify} -{ purify$ - "l" change.case$ -} - -INTEGERS { len } - -FUNCTION {chop.word} -{ 's := - 'len := - s #1 len substring$ = - { s len #1 + global.max$ substring$ } - 's - if$ -} - -FUNCTION {cite.name.font.apply} -{ - word.space * bbl.etal - emphasize - * -} - -%<*!apsrev&!apsrmp> -FUNCTION {format.lab.names} -{ 's := - "" 't := - #1 'nameptr := - s num.names$ 'numnames := - numnames 'namesleft := - { namesleft #0 > } - { - format.name.apply - 't := - nameptr #1 > - { - nameptr - #2 - = - numnames - #3 - > and - { - "others" 't := - #1 'namesleft := - } - 'skip$ - if$ - namesleft #1 > - { ", " * t * } - { - s nameptr "{ll}" format.name$ duplicate$ "others" = - { 't := } - { pop$ } - if$ - t "others" = - { - cite.name.font.apply - }{ - numnames #2 > { "," * } 'skip$ if$ - bbl.and - space.word * t * - } - if$ - } - if$ - } - 't - if$ - nameptr #1 + 'nameptr := - namesleft #1 - 'namesleft := - } - while$ -} - -%</!apsrev&!apsrmp> -%<*apsrev|apsrmp> -FUNCTION {format.lab.names} -{ 's := - "" 't := - #1 'nameptr := - format.name.apply - s num.names$ duplicate$ - #2 > - { pop$ - cite.name.font.apply - }{ - #2 < - 'skip$ - { - s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = - { - cite.name.font.apply - }{ - bbl.and space.word * - s #2 "{vv~}{ll}" format.name$ - cite.name.font - * - } - if$ - } - if$ - } - if$ -} - -%</apsrev|apsrmp> -FUNCTION {author.key.label} -{ author empty$ - { key empty$ - { cite$ #1 #3 substring$ } - 'key - if$ - } - { author format.lab.names } - if$ -} - -FUNCTION {author.editor.key.label} -{ author empty$ - { editor empty$ - { key empty$ - { cite$ #1 #3 substring$ } - 'key - if$ - } - { editor format.lab.names } - if$ - } - { author format.lab.names } - if$ -} - -FUNCTION {editor.key.label} -{ editor empty$ - { key empty$ - { cite$ #1 #3 substring$ } - 'key - if$ - } - { editor format.lab.names } - if$ -} - -FUNCTION {calc.short.authors} -{ type$ "book" = - type$ "inbook" = - or - 'author.editor.key.label - { type$ "proceedings" = - 'editor.key.label - 'author.key.label - if$ - } - if$ - 'short.list := -} - -FUNCTION {calc.label} -{ - calc.short.authors - short.list - year duplicate$ empty$ -%<apsrev|apsrmp> short.list key field.or.null = or - { - pop$ "" -%<apsrmp> "????" * - }{ - control.year #0 > { purify$ #-1 #4 substring$ } 'skip$ if$ - } - if$ - "(" swap$ * - * 'label := -} - -FUNCTION {sort.format.names} -{ 's := - #1 'nameptr := - "" - s num.names$ 'numnames := - numnames 'namesleft := - { namesleft #0 > } - { s nameptr - "{ll{ }}" - control.author.initials { - "{ f{ }}" * - }{ - "{ ff{ }}" * - } if$ - "{ jj{ }}" * - format.name$ 't := - nameptr #1 > - { - " " * - namesleft #1 = t "others" = and - { "zzzzz" * } - { - t sortify * - } - if$ - } - { t sortify * } - if$ - nameptr #1 + 'nameptr := - namesleft #1 - 'namesleft := - } - while$ -} - -FUNCTION {sort.format.title} -{ 't := - "A " #2 - "An " #3 - "The " #4 t chop.word - chop.word - chop.word - sortify - #1 global.max$ substring$ -} - -FUNCTION {author.sort} -{ author empty$ - { key empty$ - { "to sort, need author or key in " cite$ * warning$ - "" - } - { key sortify } - if$ - } - { author sort.format.names } - if$ -} - -FUNCTION {author.editor.sort} -{ author empty$ - { editor empty$ - { key empty$ - { "to sort, need author, editor, or key in " cite$ * warning$ - "" - } - { key sortify } - if$ - } - { editor sort.format.names } - if$ - } - { author sort.format.names } - if$ -} - -FUNCTION {year.sort.key} -{ - year -} - -FUNCTION {editor.sort} -{ editor empty$ - { key empty$ - { "to sort, need editor or key in " cite$ * warning$ - "" - } - { key sortify } - if$ - } - { editor sort.format.names } - if$ -} - -INTEGERS { seq.num } - -FUNCTION {init.seq} -{ #0 'seq.num :=} - -EXECUTE {init.seq} - -FUNCTION {int.to.fix} -{ "000000000" swap$ int.to.str$ * - #-1 #10 substring$ -} - -FUNCTION {label.presort} -{ - calc.label - label sortify - " " - * -%<*!aipauth&!apsrmp> - seq.num #1 + 'seq.num := - seq.num int.to.fix -%</!aipauth&!apsrmp> -%<*aipauth|apsrmp> - type$ "book" = - type$ "inbook" = - or - 'author.editor.sort - { type$ "proceedings" = - 'editor.sort - 'author.sort - if$ - } - if$ - #1 entry.max$ substring$ -%</aipauth|apsrmp> - 'sort.label := - sort.label - * - " " - * - title field.or.null sort.format.title - * - #1 entry.max$ substring$ - 'sort.key$ := -} - -FUNCTION {presort.pass} -{ type$ "control" = 'control.presort 'label.presort if$ -} - -ITERATE {presort.pass} - -SORT - -STRINGS { last.label next.extra } - -INTEGERS { last.extra.num number.label } - -FUNCTION {initialize.extra.label.stuff} -{ #0 int.to.chr$ 'last.label := - "" 'next.extra := - #0 'last.extra.num := - #0 'number.label := -} - -FUNCTION {label.forward} -{ - last.label label = - { last.extra.num #1 + 'last.extra.num := - last.extra.num int.to.chr$ 'extra.label := - } - { "a" chr.to.int$ 'last.extra.num := - "" 'extra.label := - label 'last.label := - } - if$ - number.label #1 + 'number.label := -} - -FUNCTION {label.reverse} -{ next.extra "b" = - { "a" 'extra.label := } - 'skip$ - if$ - extra.label 'next.extra := - extra.label - duplicate$ empty$ - 'skip$ - { "{\natexlab{" swap$ * "}}" * } - if$ - 'extra.label := - label extra.label * 'label := -} - -EXECUTE {initialize.extra.label.stuff} - -FUNCTION {forward.pass} -{ type$ "control" = 'control.forward 'label.forward if$ -} - -ITERATE {forward.pass} - -FUNCTION {reverse.pass} -{ type$ "control" = 'control.reverse 'label.reverse if$ -} - -REVERSE {reverse.pass} - -FUNCTION {sortkey.sort} -{ sort.label - " " - * - year.sort.key - field.or.null sortify - * - " " - * - title field.or.null sort.format.title - * - #1 entry.max$ substring$ - 'sort.key$ := -} - -FUNCTION {bib.sort.pass} -{ type$ "control" = 'control.sort 'sortkey.sort if$ -} - -ITERATE {bib.sort.pass} - -SORT - -FUNCTION {init.bib.eprint} -{ - "\texttt {" - pop$ - "\providecommand \url [0]{\begingroup\@sanitize@url \@url }%" write$ newline$ - "\providecommand \@url [1]{\endgroup\@href {#1}{" "}}%" bbl.url.prefix swap$ * * write$ newline$ - "\providecommand " " [0]{URL }%" bbl.url.prefix swap$ * * write$ newline$ - eprint.command "\providecommand " swap$ * "[0]{\href }%" * write$ newline$ -} - -FUNCTION {init.bib.doi} -{ - "\providecommand \doibase [0]{" doi.base "}%" * * write$ newline$ -} - -FUNCTION {init.bib.hypertex} -{ - "\providecommand " noop.command "[0]{\@secondoftwo}%" * * write$ newline$ - "\providecommand " href.command "[0]{\begingroup \@sanitize@url \@href}%" * * write$ newline$ - "\providecommand \@href[1]{\@@startlink{#1}\@@href}%" write$ newline$ - "\providecommand \@@href[1]{\endgroup#1\@@endlink}%" write$ newline$ - "\providecommand \@sanitize@url [0]{\catcode `\\12\catcode `\$12\catcode `\&12\catcode `\#12\catcode `\^12\catcode `\_12\catcode `\%12\relax}%" write$ newline$ - "\providecommand \@@startlink[1]{}%" write$ newline$ - "\providecommand \@@endlink[0]{}%" write$ newline$ -} - -FUNCTION {init.bib.namefont} -{ - "\providecommand \bibnamefont [1]{#1}%" write$ newline$ - "\providecommand \bibfnamefont [1]{#1}%" write$ newline$ - "\providecommand \citenamefont [1]{#1}%" write$ newline$ -} - -FUNCTION {init.bib.quote} -{ - "\providecommand " bbl.enquote * " [1]{" * - "``" "''" - "#1" swap$ "}%" * * * * write$ newline$ -} - -FUNCTION {init.bib.ay} -{ - "\providecommand \natexlab [1]{#1}%" - write$ newline$ -} - -FUNCTION {init.bib.bibinfo} -{ - bibinfo.command "\providecommand " swap$ * " [0]{\@secondoftwo}%" * write$ newline$ - bibfield.command "\providecommand " swap$ * " [0]{\@secondoftwo}%" * write$ newline$ -} - -FUNCTION {init.bib.lang} -{ - "\providecommand \selectlanguage [0]{\@gobble}%" write$ newline$ -} - -FUNCTION {init.bib.endbibitem} -{ - "\providecommand " bbl.open * "[0]{}%" * write$ newline$ - "\providecommand \bibitemStop [0]{}%" write$ newline$ - "\providecommand \bibitemNoStop [0]{.\EOS\space}%" write$ newline$ - "\providecommand \EOS [0]{\spacefactor3000\relax}%" write$ newline$ -} - -FUNCTION {init.bib.translation} -{ - "\providecommand \translation [1]{[#1]}%" write$ newline$ -} - -FUNCTION {warn.bib} -{ -} - -FUNCTION {init.bib} -{ - warn.bib - "\makeatletter" write$ newline$ - "\providecommand \@ifxundefined [1]{%" write$ newline$ - " \@ifx{#1\undefined}" write$ newline$ - "}%" write$ newline$ - "\providecommand \@ifnum [1]{%" write$ newline$ - " \ifnum #1\expandafter \@firstoftwo" write$ newline$ - " \else \expandafter \@secondoftwo" write$ newline$ - " \fi" write$ newline$ - "}%" write$ newline$ - "\providecommand \@ifx [1]{%" write$ newline$ - " \ifx #1\expandafter \@firstoftwo" write$ newline$ - " \else \expandafter \@secondoftwo" write$ newline$ - " \fi" write$ newline$ - "}%" write$ newline$ - init.bib.ay - init.bib.quote - init.bib.namefont - init.bib.hypertex - init.bib.eprint - init.bib.doi - init.bib.lang - init.bib.bibinfo - init.bib.translation - init.bib.endbibitem - "\providecommand " bbl.shut * " [1]{\csname bibitem#1\endcsname}%" * write$ newline$ - "\let\auto@bib@innerbib\@empty" write$ newline$ - "%</preamble>" write$ -} - -FUNCTION {begin.bib} -{ - id.bst diagn.cmntlog - control.bib - preamble$ empty$ - 'skip$ - { preamble$ write$ newline$ } - if$ - "\begin{thebibliography}{" - number.label int.to.str$ - * "}%" * - write$ newline$ - init.bib -} - -EXECUTE {begin.bib} - -EXECUTE {init.state.consts} - -ITERATE {call.type$} - -FUNCTION {end.bib} -{ newline$ - "\end{thebibliography}%" - write$ newline$ -} - -EXECUTE {end.bib} - -% \end{macrocode} -% -% \begin{macrocode} -%</aapmrev|aipauth|aipnum|apsrev|apsrmp> -% \end{macrocode} -% -% \endinput -% -% \Finale diff --git a/macros/latex/contrib/revtex/source/revtex4-2.dtx b/macros/latex/contrib/revtex/source/revtex4-2.dtx deleted file mode 100644 index 243266a709..0000000000 --- a/macros/latex/contrib/revtex/source/revtex4-2.dtx +++ /dev/null @@ -1,8384 +0,0 @@ -% \iffalse meta-comment balanced on line 122 -% revtex4-2.dtx: package to typeset APS, AIP, SOR, ASA, etc. journal articles -% Copyright (c) 2019 American Physical Society. -% https://journals.aps.org/revtex/ -% mailto:revtex@aps.org -% -% Disclaimer -% This file is distributed WITHOUT ANY WARRANTY; -% without even the implied warranty of -% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -% License -% You may distribute this file under the conditions of the -% LaTeX Project Public License 1.3c or later -% (http://www.latex-project.org/lppl.txt). -% ReadMe -% For the documentation and more detailed instructions for -% installation, typeset this document with \LaTeX. -% Maintenance Status -% This work has the LPPL maintenance status "maintained"; -% Current Maintainer of this work is Arthur Ogawa. -% -% This work consists of the main source file revtex4-2.dtx -% and the derived files -% revtex4-2.cls, revtex4-2.pdf -% Distribution: -% CTAN:macros/latex/contrib/revtex/ -% -% Unpacking: -% tex revtex4-2.dtx -% -% Documentation: -% latex revtex4-2.dtx; ... -% -% Programm calls to get the documentation (example): -% pdflatex revtex4-2.dtx -% makeindex -s gind.ist revtex4-2.idx -% makeindex -s gglo.ist -o revtex4-2.gls revtex4-2.glo -% pdflatex revtex4-2.dtx -% makeindex -s gind.ist revtex4-2.idx -% pdflatex revtex4-2.dtx -% -% Installation: -% TDS:bibtex/bst/revtex/ -% TDS:doc/latex/revtex/ -% TDS:tex/latex/revtex/ -% TDS:source/latex/revtex/ -% -% Thanks, Heiko! -% This method of letting a single .dtx file serve as both -% documentation (via latex) and installer (via tex) follows -% the example of Heiko Oberdiek. Thanks! -%<*ignore> -\begingroup - \def\x{LaTeX2e}% -\expandafter\endgroup -\ifcase - 0\expandafter\ifx\csname processbatchFile\endcsname\relax\else1\fi\ifx\fmtname\x\else 1\fi - \relax -\else - \csname fi\endcsname -%</ignore> -%<*install> -%% This file will generate documentation and runtime files -%% from revtex4-2.dtx when run through 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 - -Original version by David Carlisle -Modified by Arthur Ogawa (mailto:arthur_ogawa at sbcglobal dot net) - -Version (4.2a, unreleased) -Modified by Aptara on behalf of American Physical Society and American Institute of Physics - -Version (4.2b,4.2c) -Modified by Mark Doyle, American Physical Society (mailto:revtex at aps.org) - -Version (4.2d--4.2f) -Modified by Phelype Oleinik for the American Physical Society (mailto:phelype.oleinik at latex-project.org) - -Copyright (c) 2019--2022 American Physical Society. -https://journals.aps.org/revtex/ -mailto:revtex@aps.org - -See the REVTeX 4.2 README-REVTEX file for restrictions and more information. - -\endpreamble -\askforoverwritefalse -\keepsilent -\generate{% - \file{revtex4-2.cls}{% - \from{revtex4-2.dtx}{kernel}% - \from{ltxutil.dtx}{kernel}% - \from{ltxfront.dtx}{kernel}% - \from{ltxgrid.dtx}{kernel}% - \from{revtex4-2.dtx}{options}% - \from{ltxutil.dtx}{options}% - \from{ltxfront.dtx}{options}% - \from{ltxgrid.dtx}{options}% - \from{revtex4-2.dtx}{package}% - }% - \file{aps4-2.rtx}{\from{revtex4-2.dtx}{aps}}% - \file{apsrmp4-2.rtx}{\from{revtex4-2.dtx}{rmp}}% - \file{aps10pt4-2.rtx}{\from{revtex4-2.dtx}{10pt}}% - \file{aps11pt4-2.rtx}{\from{revtex4-2.dtx}{11pt}}% - \file{aps12pt4-2.rtx}{\from{revtex4-2.dtx}{12pt}}% - \file{revsymb4-2.sty}{\from{revtex4-2.dtx}{revsymb}}% -}% -\ifToplevel{ -\Msg{***********************************************************} -\Msg{*} -\Msg{* To finish the installation, please move} -\Msg{* *.cls, *.rtx, and *.sty } -\Msg{* into a directory searched by TeX;} -\Msg{* in a TDS-compliant installation:} -\Msg{* texmf/tex/macros/latex/revtex/.} -\Msg{*} -\Msg{* To produce the documentation, - run revtex4-2.dtx through LaTeX.} -\Msg{*} -\Msg{* Happy TeXing} -\Msg{***********************************************************} -} -\endbatchfile -%</install> -%<*ignore> -\fi -%</ignore> -% \fi -% -% \GetFileInfo{revtex4-2.dtx} -% -% \StopEventually{} -% \iffalse ltxdoc klootch -%<*package> -%%% @LaTeX-file{ -%%% filename = "revtex4-2.dtx", -%%% version = "4.2f", -%%% date = "2022/06/05", -%%% author = "Mark Doyle (mailto: revtex at aps.org), Arthur Ogawa (mailto:arthur_ogawa at sbcglobal.net), -%%% commissioned by the American Physical Society. -%%% ", -%%% copyright = "Copyright (C) 1999, 2009 Arthur Ogawa, Version 4.2 Copyright (C) 2019 American Physical Society -%%% distributed under the terms of the -%%% LaTeX Project Public License 1.3c, see -%%% ftp://ctan.tug.org/macros/latex/base/lppl.txt -%%% ", -%%% address = "Mark Doyle, -%%% USA", -%%% telephone = "", -%%% FAX = "", -%%% email = "mailto colon revtex at aps.org", -%%% codetable = "ISO/ASCII", -%%% keywords = "", -%%% supported = "yes", -%%% abstract = "", -%%% } -%</package> -% \fi -% -% \iffalse ltxdoc klootch -% The following references the \file{README-REVTEX.tex} file, -% which contains the frontmatter for the programmer's docs. -% The contents of this file are generated when -% you typeset this file with LaTeX. -% Search on "{filecontents*}{README-REVTEX.tex}" to locate it. -% \fi\input{README-REVTEX.tex}% -% -% \subsection{Bill of Materials} -% -% Following is a list of the files in this distribution arranged -% according to provenance. -% -% \subsubsection{Primary Source}% -% One single file generates all. -%\begin{verbatim} -%revtex4-2.dtx -%\end{verbatim} -% -% \subsubsection{Generated by \texttt{tex revtex4-2.dtx}}% -% Typesetting ths file under \TeX\ itself runs the installer, -% which generates the package files. -%\begin{verbatim} -%revtex4-2.cls, revtex4.ins, revtex4.drv, aps4-2.rtx, -%aps10pt4-2.rtx, aps11pt4-2.rtx, aps12pt4-2.rtx, revsymp.sty -%\end{verbatim} -% -% \subsubsection{Generated by \texttt{pdflatex revtex4-2.dtx}}% -% Typesetting the source file under \LaTeX\ -% generates the documentation. -%\begin{verbatim} -%revtex4.pdf, -%\end{verbatim} -% -% \subsubsection{Auxiliary}% -% The following are auxiliary files generated -% in the course of running \LaTeX: -% \begin{verbatim} -%revtex4.aux revtex4.idx revtex4.ind revtex4.log revtex4.toc -% \end{verbatim} -% -% \section{Code common to all modules}% -% -% The following may look a bit klootchy, but we -% want to require only one place in this file -% where the version number is stated, -% and we also want to ensure that the version -% number is embedded into every generated file. -% -% Now we declare that -% these files can only be used with \LaTeXe. -% An appropriate message is displayed if -% a different \TeX{} format is used. -% \begin{macrocode} -%<*doc|kernel|aps|rmp|revsymb> -\NeedsTeXFormat{LaTeX2e}[1996/12/01]% -%</doc|kernel|aps|rmp|revsymb> -%<kernel>\ProvidesClass{revtex4-2} -%<aps>\ProvidesFile{aps4-2} -%<rmp>\ProvidesFile{apsrmp4-2} -%<10pt>\ProvidesFile{aps10pt4-2} -%<11pt>\ProvidesFile{aps11pt4-2} -%<12pt>\ProvidesFile{aps12pt4-2} -%<revsymb>\ProvidesPackage{revsymb4-2} -%<*doc> -\ProvidesFile{revtex4-2.dtx} -%</doc> -%<*!package&!options> -%<version> - [2022/06/05 4.2f (https://journals.aps.org/revtex/ for documentation)]% \fileversion -%</!package&!options> -% \end{macrocode} -% The current class name is remembered in \cmd\class@name. -% This is something of a klootch, relying as it does on knowledge of the implementation of \cmd\ProvidesPackage. -% \begin{macrocode} -%<kernel>\let\class@name\@gtempa -% \end{macrocode} -% -% \section{The driver module \texttt{driver}} -% -% This module, consisting of the present section, -% typesets the programmer's documentation, -% generating the \file{README-REVTEX.txt} and sample document as needed. -% -% Because the only uncommented-out lines of code at the beginning of -% this file constitute the \file{driver} module itself, -% we can simply typeset the \file{.dtx} file directly, -% and there is thus rarely any need to -% generate the ``driver'' {\sc docstrip} module. -% Module delimiters are nonetheless required so that -% this code does not find its way into the other modules. -% -% The \enve{document} command concludes the typesetting run. -% -% \begin{macrocode} -%<*doc> -% \end{macrocode} -% The driver uses packages \file{ltxdoc.sty}, \file{ltxdocext.sty}, -% \file{hyperref.sty}, and whatever font package has been selected. -% \begin{macrocode} -\documentclass{ltxdoc} -\RequirePackage{ltxdocext}% -\let\url\undefined -\RequirePackage[colorlinks=true,linkcolor=blue]{hyperref}% -% \end{macrocode} -% We ask for the usual indices and glossaries. -% \begin{macrocode} -\CodelineIndex\EnableCrossrefs % makeindex -s gind.ist revtex4 -\RecordChanges % makeindex -s gglo.ist -o revtex4.gls revtex4.glo -% \end{macrocode} -% -% \subsubsection{Docstrip and info directives} -% We use so many {\sc docstrip} modules that we set the -% \texttt{StandardModuleDepth} counter to 1. -% \begin{macrocode} -\setcounter{StandardModuleDepth}{1} -% \end{macrocode} -% The following command retrieves the date and version information -% from this file. -% \begin{macrocode} -\expandafter\GetFileInfo\expandafter{\jobname.dtx}% -% \end{macrocode} -% -% \subsection{The Frontmatter File} -% As promised above, here is the contents of the frontmatter file. -% \begin{macrocode} -\begin{filecontents*}{README-REVTEX.tex} -\title{% - The \classname{revtex4-2} document class of the American Physical Society% - \protect\thanks{Work under hire to American Physical Society. Version \fileversion\ \copyright\ 2019 American Physical Society}% -}% -\author{Arthur Ogawa and Mark Doyle% - \protect\thanks{First revision of REV\TeX4.0 (unreleased) by David Carlisle, all released versions of 4.0 and 4.1 by Art Ogawa, 4.2a (unreleased) by Aptara, 4.2b,c by Mark Doyle}% -}% -\date{Version \fileversion, dated \filedate}% -\newcommand\revtex{REV\TeX} - -\maketitle - -This file embodies the implementation of the APS \revtex\ 4.2 document class -for electronic submissions to journals. - -The distribution point for this work is -\url{https://journals.aps.org/revtex/}, -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{auguide.tex}. - -The file \file{template.aps} is a boilerplate file. - -\changes{4.0a}{1998/01/16}{Initial version} -\changes{4.0a}{1998/01/31}{Move after process options, so \cs{clearpage} not in scope of twocolumn} -\changes{4.0a}{1998/01/31}{Rearrange the ordering so numerical ones come first. AO: David, what does this mean?} -\changes{4.0a}{1998/01/31}{use font-dependent spacing} -\changes{4.0a}{1998/01/31}{4.0d had twoside option setting twoside switch to false} -\changes{4.0a}{1998/01/31}{Move after process options, so the following test works} -\changes{4.0a}{1998/01/31}{print homepage} -\changes{4.0a}{1998/01/31}{protect against hyperref revtex kludges which are not needed now} -\changes{4.0a}{1998/06/10}{multiple preprint commands} -\changes{4.0a}{1998/06/10}{comma not space between email and homepage} -\changes{4.0a}{1998/06/10}{single space footnotes} -\changes{4.0b}{1999/06/20}{First modifications by Arthur Ogawa (mailto:arthur\_ogawa at sbcglobal dot net)} -\changes{4.0b}{1999/06/20}{Added localization of \cs{figuresname}} -\changes{4.0b}{1999/06/20}{Added localization of \cs{tablesname}} -\changes{4.0b}{1999/06/20}{AO: all code for \protect\classoption{10pt} is in this module.} -\changes{4.0b}{1999/06/20}{AO: all code for \protect\classoption{11pt} is in this module.} -\changes{4.0b}{1999/06/20}{AO: all code for \protect\classoption{12pt} is in this module.} -\changes{4.0b}{1999/06/20}{AO: made aps.rtx part of revtex4.dtx} -\changes{4.0b}{1999/06/20}{AO: remove duplicates} -\changes{4.0b}{1999/06/20}{call \cs{print@floats}} -\changes{4.0b}{1999/06/20}{Defer assignment until \cs{AtBeginDocument} time.} -\changes{4.0b}{1999/06/20}{Defer decision until \cs{AtBeginDocument} time} -\changes{4.0b}{1999/06/20}{Define three separate environments, defer assignment to \cs{AtBeginDocument} time.} -\changes{4.0b}{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.}% -\changes{4.0b}{1999/06/20}{Move this ``complex'' option to the front, where it can be overridden by ``simple'' options.} -\changes{4.0b}{1999/06/20}{New option} -\changes{4.0b}{1999/06/20}{One-line caption sets flush left.} -\changes{4.0b}{1999/06/20}{only execute if appropriate} -\changes{4.0b}{1999/06/20}{Processing delayed to \cs{AtBeginDocument} time} -\changes{4.0b}{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.)} -\changes{4.0b}{1999/06/20}{Restore all media size class option of \protect\file{classes.dtx}} -\changes{4.0b}{1999/06/20}{Stack \cs{preprint} args flush right at right margin.} -\changes{4.0c}{1999/11/13}{(AO, 115) If three or more preprints specified, set on single line, with commas.} -\changes{4.0c}{1999/11/13}{(AO, 129) section* within appendix was producing appendixname} -\changes{4.0c}{1999/11/13}{*-form mandates pagebreak} -\changes{4.0c}{1999/11/13}{also spelled ``acknowledgements''.} -\changes{4.0c}{1999/11/13}{Do not put by REVTeX in every page foot} -\changes{4.0c}{1999/11/13}{grid changes via ltxgrid procedures} -\changes{4.0c}{1999/11/13}{grid changes with ltxgrid} -\changes{4.0c}{1999/11/13}{Insert procedure \cs{checkindate}} -\changes{4.0c}{1999/11/13}{Lose compatability mode.} -\changes{4.0c}{1999/11/13}{New ltxgrid-based code, other bug fixes} -\changes{4.0c}{1999/11/13}{New option ``checkin''} -\changes{4.0c}{1999/11/13}{Prevent an inner footnote from performing twice} -\changes{4.0d}{2000/04/10}{Also alter how lists get indented.} -\changes{4.0d}{2000/04/10}{eprint takes an optional argument, syntactical only in this case.} -\changes{4.0d}{2000/04/10}{New option} -\changes{4.0d}{2000/05/10}{More features and bug fixes: compatability with longtable and array packages. Now certainly incompatible with multicol.} -\changes{4.0d}{2000/05/17}{make longtable trigger the head, too} -\changes{4.0d}{2000/05/18}{But alternative spelling is deprecated.} -\changes{4.0e}{2000/09/20}{New option showkeys} -\changes{4.0e}{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{4.0e}{2000/11/21}{adornments above and below.} -\changes{4.0f}{2001/02/13}{Last bug fixes before release.} -\changes{4.0rc1}{2001/06/17}{Running headers always as if two-sided} -\changes{4.0rc1}{2001/06/18}{grid changes with push and pop} -\changes{4.0rc1}{2001/06/18}{grid changes with push and pop} -\changes{4.0rc4}{2001/07/23}{hyperref is no longer loaded via class option: use a usepackage statement instead} -\changes{4.1a}{2008/01/18}{(AO, 457) Endnotes to be sorted in with numerical citations.}% -\changes{4.1a}{2008/01/18}{(AO, 451) ``Cannot have more than 256 cites in a document''}% -\changes{4.1a}{2008/01/18}{(AO, 457) Endnotes to be sorted in with numerical citations.}% -\changes{4.1a}{2008/01/18}{(AO, 460) ``Proper style is "FIG. 1. ..." (no colon)''}% -\changes{4.1a}{2008/01/18}{(AO, 478) \cs{ds@letterpaper}, so that ``letterpaper really is the default''}% -\changes{4.1a}{2008/01/18}{(AO, 488) Change processing of options to allow an unused option to specify society and journal}% -\changes{4.1a}{2008/01/19}{(AO, 461) Change the csname revtex uses from @dotsep to ltxu@dotsep. The former is understood in mu. (What we wanted was a dimension.)}% -\changes{4.1a}{2008/01/19}{For natbib versions before 8.21, \cs{NAT@sort} was consulted only as natbib was being read in. Now it is fully dynamic.} -\changes{4.1b}{2008/05/29}{The csname substyle@ext is now defined without a dot (.), to be compatible with \LaTeX usage (see @clsextension and @pkgextension).} -\changes{4.1b}{2008/06/01}{(AO) Implement bibnotes through \cs{frontmatter@footnote@produce} instead of \cs{bibnotes@sw}}% -\changes{4.1b}{2008/06/01}{Add option reprint, opposite of preprint, and preferred alternative to twocolumn} -\changes{4.1b}{2008/06/29}{(AO, 455) Be nice to a list within the abstract (assign \cs{@totalleftmargin}).} -\changes{4.1b}{2008/06/30}{(AO) Structure the Abstract using the \texttt{bibliography} environment} -\changes{4.1b}{2008/07/01}{(AO) coordinate \cs{if@twoside} with \cs{twoside@sw}} -\changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.} -\changes{4.1b}{2008/07/01}{(AO) No longer need to test \cs{chapter} as of \texttt{natbib} version 8.2} -\changes{4.1b}{2008/07/01}{(AO) No longer use \cs{secnumarabic@sw}, instead use \cs{setup@secnums}} -\changes{4.1b}{2008/07/01}{(AO) Provide more diagnostics when \cs{@society} is assigned.} -\changes{4.1b}{2008/07/01}{(AO) provide option longbibliography} -\changes{4.1b}{2008/07/01}{Add \cs{@hangfroms@section}} -\changes{4.1b}{2008/07/01}{Break out \cs{@caption@fignum@sep}} -\changes{4.1b}{2008/07/01}{Class option galley sets \cs{preprintsty@sw} to false} -\changes{4.1b}{2008/07/01}{Code relating to new syntax for frontmatter has been placed in \file{ltxfront.dtx}} -\changes{4.1b}{2008/07/01}{Package textcase is now simply a required package} -\changes{4.1b}{2008/07/01}{Procedures \cs{@parse@class@options@society} and \cs{@parse@class@options@journal} and friends} -\changes{4.1b}{2008/07/01}{Read in all required packages together} -\changes{4.1b}{2008/07/01}{Remove options newabstract and oldabstract} -\changes{4.1b}{2008/08/01}{Section numbering via procedures \cs{secnums@rtx} and \cs{secnums@arabic}.} -\changes{4.1b}{2008/08/04}{As with author formatting, rag the right more, and assign \cs{@totalleftmargin}. Also neutralize \cs{def@after@address}.}% -\changes{4.1b}{2008/08/04}{Rag the right even more: .8\cs{hsize}. Also, assign \cs{@totalleftmargin}.}% -\changes{4.1b}{2008/08/04}{The \texttt{rmp} journal substyle selects \texttt{groupedaddress} by default.}% -\changes{4.1b}{2008/08/04}{Use \cs{setup@hook} to initialize all.} -\changes{4.1c}{2008/08/15}{Document class option longbibliography via \cs{substyle@post}} -\changes{4.1d}{2009/03/27}{Definition of \cs{ @fnsymbol} follows fixltx2e.sty} -\changes{4.1e}{2008/06/29}{(AO, 455) be nice to a list within the abstract} -\changes{4.1f}{2009/07/07}{(AO, 513) Add class option linenumbers: number the lines a la \classname{lineno}} -\changes{4.1f}{2009/07/07}{(AO, 516) Merged references are separated with a semicolon} -\changes{4.1f}{2009/07/10}{(AO, 520) Automatically produce \cs{bibliography} command when needed}% -\changes{4.1f}{2009/07/11}{(AO, 521) Lonely bibliography head}% -\changes{4.1f}{2009/07/11}{(AO, 522) Warn if software is expired}% -\changes{4.1f}{2009/07/15}{(AO, 523) Add class option nomerge, to turn off new natbib 8.3 syntax} -\changes{4.1f}{2009/07/20}{(AO, 524) Makes no sense if citations are superscript numbers and so are footnotes} -\changes{4.1f}{2009/10/05}{(AO, 530) \cs{@fnsymbol}: Failed to import fixltx2e.sty technology. Return to LaTeX core.} -\changes{4.1g}{2009/10/07}{(AO, 525) Remove phantom paragraph above display math that is given in vertical mode}% -\changes{4.1g}{2009/10/07}{(AO, 538) \cs{MakeTextUppercase} inappropriately expands the double backslash} -\changes{4.1h}{2009/10/09}{(AO) Remove expiry code in the release software}% -\changes{4.1i}{2009/10/23}{(AO, 541) Defer assignment of \cs{cite} until after natbib loads} -\changes{4.1j}{2009/10/24}{(AO, 549) Repairing natbib's \cs{BibitemShut} and \cs{bibAnnote}} -\changes{4.1j}{2009/10/25}{(AO, 545) hypertext capabilities off by default; enable with \classoption{hypertext}} -\changes{4.1j}{2009/10/25}{(AO, 552) Repair spacing in \cs{onlinecite}} -\changes{4.1k}{2009/11/06}{(AO, 554) give the \cs{newlabel} command syntax appropriate to the hyperref package} -\changes{4.1n}{2009/11/06}{(AO, 565) restore 4.0 behavior: invoking class option preprint implies class option preprintnumbers} -\changes{4.1n}{2009/11/30}{(AO, 566) restore 4.0 behavior: flush column bottoms} -\changes{4.1n}{2009/12/05}{(AO, 569) Use of \classname{hyperref} interferes with column balancing of last page}% -\changes{4.1n}{2009/12/09}{(AO, 569) execute the after-last-shipout procedures from within the safety of the output routine}% -\changes{4.1n}{2010/01/02}{(AO, 571) Interface \cs{set@footnotewidth} for determining the set width of footnotes}% -\changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}% -\changes{4.1n}{2009/12/13}{(AO, 573) arrange to load \classname{lineno} after any other packages.}% -\changes{4.1n}{2010/01/04}{(AO, 575) the default for journal prstper is longbibliography}% -\changes{4.1n}{2010/01/04}{(AO, 576) In .bst files, remove support for the annote field}% -\changes{4.1n}{2010/01/02}{(AO) fine-tune spacing above and below widetext}% -\changes{4.1n}{2010/01/02}{(AO, 571) class file must set \cs{splittopskip}; fine tune \cs{skip}\cs{footins}; \cs{footnoterule} defined in terms of \cs{skip}\cs{footins}}% -\changes{4.1n}{2010/01/02}{(AO, 572) \cs{@makefntext} and \cs{frontmatter@makefntext} must be defined harmoniously}% -\changes{4.1o}{2010/02/02}{(AO, 575) Automatically incorporate the (Bib\TeX-generated) .bbl into an explicit \env{thebibliography}}% -\changes{4.1o}{2010/02/05}{(AO, 549) Remove patch to natbib, which is now at version 8.31a} -\changes{4.1o}{2010/02/07}{(AO, 578) accommodate the possible space character preceding \cs{BibitemShut}.} -\changes{4.1o}{2010/02/05}{(AO, 579) Endnote shall comprise their own Bib\TeX\ entry type: @FOOTNOTE.} -\changes{4.1o}{2010/02/10}{(AO, 580) Provide a document class option to turn off production of eprint field in bibliography.} -\changes{4.1o}{2010/02/12}{(AO, 580) Control .bst at run time.}% -\changes{4.1o}{2010/02/09}{(AO, 581) Handle case: merged references, with first ending in a stop character.} -\changes{4.1p}{2010/02/24}{(AO, 583) Provide interface to \classname{ltxgrid} \cs{onecolumn@grid@setup} and \cs{twocolumn@grid@setup}} -\changes{4.1p}{2010/02/24}{(AO, 584) Per MD, remove trailing space character from each journal abbreviation: it had caused an extraneous space in the .bbl} -\changes{4.1q}{2010/04/01}{(AO, 586) When .bbl is pasted into the document, prevent automatic bibliography inclusion.}% -\changes{4.1q}{2010/04/13}{(AO, 588) Only write \revtex-specific BibTeX .bib data if the .bst style is set by REVTeX.}% -\changes{4.1r}{2010/06/22}{(AO, 595) Provide \cs{lovname} along with other List of Videos definitions.}% -\changes{4.2a}{2014/12/31}{(Aptara, MD) Added initial support for SOR and AAPM journals, additional journals for APS, and additional journals and proceedings for AIP, unreleased.}% -\changes{4.2a}{2014/12/31}{(Aptara) Make prb style to follow other Phys. Rev. journals.}% -\changes{4.2a}{2014/12/31}{(Aptara) Corrected indentation for tableofcontents appearing along with listoffigure/listoftable.}% -\changes{4.2a}{2017/11/21}{(MD) Make long bibliography style the default now.}% -\changes{4.2a}{2017/11/28}{(MD) Add call to normalsize to be a good citizen and allow booktabs.sty to work properly}.% -\changes{4.2b}{2018/12/26}{(MD) Make titles in bibliography default, prb style to follow other Phys. Rev. journals, add a unified physrev option as well as prx and prapplied options. Corrected indentation for tableofcontents appearing along with listoffigure/listoftable.}% -\changes{4.2b}{2017/11/21}{(MD) Update options for new titles without "Special Topics" and make prper match style of other journal options}% -\changes{4.2b}{2017/11/21}{(MD) Add options for new APS journals and a generic physrev option for future-proofing}% -\changes{4.2b}{2017/11/22}{(MD) Change default to not use a title page - it seems antiquated}% -\changes{4.2b}{2017/11/22}{(MD) MD - not sure why these parameters were different previously. Made them match except for title.}% -\changes{4.2b}{2017/11/22}{(MD) PACS are obsolete altogether now}% -\changes{4.2b}{2018/12/26}{(MD) Improve control over display of e-print ids in bibliography.}% - -\end{filecontents*} -% \end{macrocode} -% -% \subsection{The Document Body} -% -% Here is the document body, containing only a -% \cmd\DocInput\ directive---referring to this very file. -% This very cute self-reference is a common \classname{ltxdoc} idiom. -% \begin{macrocode} -%%\newcommand\revtex{REV\TeX}% TeXSupport -\begin{document}% -\expandafter\DocInput\expandafter{\jobname.dtx}% -\PrintChanges -\end{document} -% \end{macrocode} -% And that is the end of the driver for the programmer's documentation. -% \begin{macrocode} -%</doc> -% \end{macrocode} -% -% \section{Overview}% -% \revtex\ is a \LaTeXe\ document class, somewhat 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}, \classname{hyperref}, -% 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. -% Any society may create a substyle; -% this file generates one for \classoption{aps}. -% -% FIXME: should always load the \classname{graphicx} package. No, allow user to load whichever graphics package is desired. -% -% QUERY: since \classname{amsfonts} and \classname{amssymb} extend -% syntax, why not load them in any case? -% -% Certain processing occurs at the endgame for reading in \revtex, thereby establishing -% precedence for assignments to \LaTeX's (and \revtex's) parameters: -% \begin{enumerate} -% \item -% Figure out which society is operative and read in the indicated \file{.rtx} file. -% \item -% Figure out which journal option is operative and execute the indicated journal command. This may lead to reading in a journal substyle \file{.rtx} file. -% \item -% Figure out which pointsize is operative and execute the indicateded pointsize command. This may lead to reading in a pointsize \file{.rtx} file. -% \item -% Execute all of the document's options, in the order declared within the document. -% \item -% Read in all required packages (like \classname{natbib}, \classname{amsfonts}, \classname{amssymb}), that were determined by class, society, and journal. -% \item -% The last required package, if existing, is the document's style file, the \file{.rty} file. -% Note that the \file{.rty} file can override the assignments of \revtex, society, journal, and required packages, and even load its own packages. -% It can also, via appendations to \cmd\setup@hook, override the setup code itself. -% \item -% Execute all of the setup code accumulated. Such code can be queued by \revtex\ itself, by the society, by the journal, or by the pointsize. -% \item -% At this point, \revtex\ has completed the process of inputting itself, -% and \LaTeX\ will now execute the \cmd\AtEndOfClass\ procedures. -% \end{enumerate} -% -% \revtex\ will have enqueued code to execute at \cmd\AtBeginDocument\ time, -% in two different queues. -% \cmd\document@inithook\ executes immediately upon encountering the \cmd\begin\env{document} statement, -% \cmd\class@documenthook\ at the end of all the code enqueued via \cmd\AtBeginDocument. -% \begin{enumerate} -% \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{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} -% Above, we took -% advantage of 1) the \LaTeX\ definition of \cmd\ProvidesPackage\ and -% 2) that the line of code immediately afterwards follows the \cmd\ProvidesClass\ statement above. -% \begin{macrocode} -%<*kernel> -% \end{macrocode} -% -% Print a banner in the log: -% \begin{macrocode} -\GenericInfo{}{\space - Copyright (c) 2019 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 <arthur_ogawa at sbcglobal dot net>^^J - Based on work by David Carlisle <david at dcarlisle.demon.co.uk>^^J - Version (4.2d--4.2f): Modified by Mark Doyle and Phelype Oleinik^^J - \@gobble -}% -% \end{macrocode} -% -% \subsection{Compatibility Processing} -% -% If the document has \cmd\documentstyle|{revtex4}|, -% then, instead of attempting to run in compatability mode, -% just complain and exit. -% \changes{4.0c}{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} -% -% \begin{macrocode} -%</kernel> -% \end{macrocode} -% -% Here, we incorporate the utility, frontmatter, and page grid packages. -% The \classname{ltxutil}, \classname{ltxfront}, and \classname{ltxgrid} source are distributed with -% \revtex. -% -% Here begins the \file{options} \textsc{docstrip} module. -% \begin{macrocode} -%<*options> -% \end{macrocode} -% -% \subsection{Hooks} -% -% \begin{macro}{\setup@hook} -% The procedure -% \cmd\setup@hook\ -% serves as the vehicle for all code that -% gives values to the class's parameters once all the -% society, journal, options, and packages have been processed. -% -% Arrange for journal substyles to set their own default values. -% \begin{macrocode} -\let\setup@hook\@empty -% \end{macrocode} -% \end{macro} -% -% After preamble processing is complete, -% detect whether package \classname{longtable} has been loaded and patch it. -% \begin{macrocode} -\appdef\document@inithook{% - \switch@longtable - \let\LT@makecaption\LT@makecaption@rtx -}% -% \end{macrocode} -% -% \begin{macro}{\LT@makecaption} -% We override the caption processing method of the \classname{longtable} package: -% space below the caption is created via strut instead of whitespace. -% \begin{macrocode} -\def\LT@makecaption@rtx#1#2#3{% - \LT@mcol\LT@cols c{% - \hbox to\z@{% - \hss - \parbox[t]\LTcapwidth{% - \sbox\@tempboxa{#1{#2: }#3\unskip\nobreak\vrule\@width\z@\@height\z@\@depth .5\baselineskip}% - \ifdim\wd\@tempboxa>\hsize - #1{#2: }#3\unskip\nobreak\vrule\@width\z@\@height\z@\@depth .5\baselineskip - \else - \hbox to\hsize{\hfil\box\@tempboxa\hfil}% - \fi - \endgraf - }% - \hss - }% - }% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\robust@boldmath} -% Robustify the \cmd\boldmath command. -% If Team \LaTeX\ (or any package) ever gets around to fixing this problem, -% we will bow out. (This fix relates to bug \#394.) -% \begin{macrocode} -\def\protectdef@boldmath{% - \expandafter\@ifnotrelax\csname boldmath \endcsname{}{% - \class@info{Robustifying \string\LaTeX's \string\boldmath\space command}% - \expandafter\let\csname boldmath \endcsname\boldmath - \expandafter\def\expandafter\boldmath\expandafter{\expandafter\protect\csname boldmath \endcsname}% - }% -}% -\appdef\document@inithook{% - \protectdef@boldmath -}% -% \end{macrocode} -% \end{macro} -% -% \section{Compatability with the geometry package} -% -% The \classname{geometry} package of Hideo Umeki provides a way to -% specify the metrics of the media and page layout. -% We want to ensure that \revtex\ does not foreclose on the use of -% this or any other such package, nor to interfere with -% explicit assignments of such metric parameters within the -% document preamble. -% -% The \LaTeX\ parameters (resp. \TeX\ primitives) set by \classname{geometry} are: -% \cmd\paperwidth, \cmd\paperheight, -% \cmd\textwidth, \cmd\textheight, -% \cmd\topmargin, \cmd\headheight, \cmd\headsep, -% \cmd\footskip, \cmd\skip\cmd\footins, -% \cmd\marginparwidth, \cmd\marginparsep, -% \cmd\oddsidemargin, \cmd\evensidemargin, -% \cmd\columnsep, -% \cmd\hoffset, \cmd\voffset, \cmd\mag, -% \cmd\if@twocolumn, \cmd\if@twoside, \cmd\if@mparswitch, \cmd\if@reversemargin, -% -% \revtex's assignments can be overridden by -% any package or other statement in the document preamble, -% so it should be compatible. -% -%FIXME: one parameter is rendered semantically void (by \file{ltxgrid.dtx}): -% \cmd\if@twocolumn. -% -% \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. -% An explicit document class option overrides an assignment made by a substyle. -% -% \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{4.0c}{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}% -% -% \begin{macro}{\preprintsty@sw} -% The boolean \cmd\preprintsty@sw\ signifies that -% the document is to be formatted in preprint style. -% \changes{4.0a}{1998/01/31}{Rearrange the ordering so numerical ones come first. AO: David, what does this mean?} -% \changes{4.0a}{1998/06/10}{comma not space between email and homepage} -% \changes{4.0b}{1999/06/20}{Move this ``complex'' option to the front, where it can be overridden by ``simple'' options.} -% \changes{4.1b}{2008/06/01}{Add option reprint, opposite of preprint, and preferred alternative to twocolumn} -% \begin{macrocode} -\DeclareOption{preprint}{% - \@booleantrue\preprintsty@sw - \ExecuteOptions{12pt}% -}% -\DeclareOption{reprint}{% -\@booleanfalse\preprintsty@sw -\@booleantrue\twocolumn@sw - \ExecuteOptions{10pt}% -}% -\DeclareOption{manuscript}{% - \class@warn{Document class option manuscript is obsolete; use preprint instead}% - \ExecuteOptions{preprint}% -}% -\@booleanfalse\preprintsty@sw -% \end{macrocode} -% \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. -% \subsubsection{Showing PACS and keywords}% -% \changes{4.0b}{1999/06/20}{New option} -% \changes{4.0e}{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 -}% -\@booleanfalse\showPACS@sw -\@booleanfalse\showKEYS@sw -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \subsubsection{Balance the last page when in two-column page grid}% -% -% \begin{macro}{\balancelastpage@sw} -% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.} -% 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 -}% -\@booleantrue\balancelastpage@sw -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Showing preprint numbers}% -% -% \begin{macro}{\preprint@sw} -% \changes{4.0d}{2000/04/10}{New option} -% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.} -% \changes{4.1n}{2009/11/06}{(AO, 565) restore 4.0 behavior: default value of \cs{preprint@sw} follows \cs{preprintsty@sw}} -% The boolean \cmd\preprint@sw\ signifies that -% the preprints (cf. \cmd\preprint) are to be formatted (usually on the title page). -% The option \classoption{preprintnumbers} declares to do so, -% \classoption{nopreprintnumbers} declares not to; -% the default is to follow \cmd\preprintsty@sw. -% \begin{macrocode} -\DeclareOption{nopreprintnumbers}{\@booleanfalse\preprint@sw}% -\DeclareOption{preprintnumbers}{\@booleantrue\preprint@sw}% -\appdef\setup@hook{% - \@ifxundefined\preprint@sw{\let\preprint@sw\preprintsty@sw}{}% -}% -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Hypertext Option}% -% -% \changes{4.0a}{1998/01/31}{protect against hyperref revtex kludges which are not needed now} -% \changes{4.0b}{1999/06/20}{Move this ``complex'' option to the front, where it can be overridden by ``simple'' options.} -% \changes{4.0rc4}{2001/07/23}{hyperref is no longer loaded via class option: use a usepackage statement instead} -% \begin{macrocode} -\DeclareOption{hyperref}{% -% \end{macrocode} -% The following code had been commented out, it is now truly a comment: -% \begin{verbatim} -%\AtEndOfClass{% -% \begingroup -% \edef\@tempa{% -% \let -% \noexpand\@clsextension -% \noexpand\@empty -% \noexpand\RequirePackage{hyperref}% -% \def\noexpand -% \@clsextension{\@clsextension}% -% }% -% \expandafter -% \endgroup -% \@tempa -%}% -% \def\@pointsize{10}% -% \end{verbatim} -% -% 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{4.0a}{1998/01/31}{print homepage} -% -% \begin{macrocode} - \class@warn{Class option "hyperref" is no longer supported.^^JEmploy \string\usepackage{hyperref} instead}% -}% -% \end{macrocode} -% -% \subsubsection{Type Size}% -% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.} -% Use \cmd\@pointsize|=10| rather than \cmd\@ptsize|=0| to allow easy extensions -% to 9pt or whatever. -% Note: the three alternatives are mutually exclusive. -% -% At this point, the parameter \cmd\@pointsize\ is set to \cmd\undefined: -% a society \emph{must} give it a definition. -% \begin{macrocode} -\DeclareOption{10pt}{\def\@pointsize{10}}% -\DeclareOption{11pt}{\def\@pointsize{11}}% -\DeclareOption{12pt}{\def\@pointsize{12}}% -\let\@pointsize\@undefined -% \end{macrocode} -% -% \subsubsection{Media Size}% -% -% \begin{macro}{\paperheight} -% \begin{macro}{\paperwidth} -% \changes{4.0b}{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} -% -% \changes{4.1a}{2008/01/18}{(AO, 478) \cs{ds@letterpaper}, so that ``letterpaper really is the default''}% -% Effectively select \classoption{letterpaper}. -% \begin{macrocode} -\ds@letterpaper -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \subsubsection{Bibnotes}% -% -% \begin{macro}{\frontmatter@footnote@produce} -% 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. -% \changes{4.1b}{2008/06/01}{(AO) Implement bibnotes through \cs{frontmatter@footnote@produce} instead of \cs{bibnotes@sw}}% -% \begin{macrocode} -\DeclareOption{bibnotes}{\let\frontmatter@footnote@produce\frontmatter@footnote@produce@endnote}% -\DeclareOption{nobibnotes}{\let\frontmatter@footnote@produce\frontmatter@footnote@produce@footnote}% -\let\frontmatter@footnote@produce\frontmatter@footnote@produce@footnote -\appdef\class@enddocumenthook{\auto@bib}% -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Footinbib}% -% -% \begin{macro}{\footinbib@sw} -% The boolean \cmd\footinbib@sw\ signifies that -% text footnotes are to be set in the bibliography, as endnotes. -% -% The document may set the value one way or the other via -% the following two class options. -% \begin{macrocode} -\DeclareOption{footinbib}{\@booleantrue\footinbib@sw} -\DeclareOption{nofootinbib}{\@booleanfalse\footinbib@sw} -% \end{macrocode} -% The default value is \cmd\false@sw, and the society or journal -% may override the default. -% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.} -% \begin{macrocode} -\@booleanfalse\footinbib@sw -% \end{macrocode} -% \end{macro} -% -% \subsubsection{altaffilletter}% -% -% \begin{macro}{\altaffilletter@sw} -% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.} -% Determine the procedure \cmd\thefootnote\ used in frontmatter: -% the footnote symbol used in titlepage footnotes. -% \begin{macrocode} -\DeclareOption{altaffilletter}{\@booleantrue\altaffilletter@sw}% -\DeclareOption{altaffilsymbol}{\@booleanfalse\altaffilletter@sw}% -\@booleanfalse\altaffilletter@sw -% \end{macrocode} -% \end{macro} -% -% \subsubsection{superbib}% -% -% \begin{macro}{\place@bibnumber} -% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.} -% The procedure \cmd\place@bibnumber\ produces the number -% at the head of the \cmd\bibitem, in the bibliography. -% By default, it has the \cmd\bibnumfmt\ meaning assigned by the \classname{natbib} package. -% It may be overridden by society, journal, or by the document options. -% -% \begin{macrocode} -\DeclareOption{superbib}{% - \let\place@bibnumber\place@bibnumber@sup -}% -\def\place@bibnumber{\NATx@bibnumfmt}% -% \end{macrocode} -% \end{macro} -% -% \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} -% -% \subsubsection{citeautoscript}% -% \begin{macro}{\citeautoscript@sw} -% 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} -% \end{macro} -% -% \subsubsection{Variants on the Bibliography Style}% -% \changes{4.1b}{2008/07/01}{(AO) provide option longbibliography} -% -% \revtex\ anticipates that a society or journal will provide two related Bib\TeX bibliography style variants, -% designating one as the default. -% A pair of document class options \classoption{longbibliography} and \classoption{nolongbibliography} -% allows the user to explicitly select between them. -% \begin{macro}{\longbibliography@sw} -% -%\changes{4.2a}{2017/11/21}{(MD) Make long bibliography style the default now.} -% \revtex's default for \cmd\longbibliography@sw\ is \cmd\true@sw. -% -% \begin{macrocode} -\DeclareOption{longbibliography}{\@booleantrue\longbibliography@sw}% -\DeclareOption{nolongbibliography}{\@booleanfalse\longbibliography@sw}% -\@booleantrue\longbibliography@sw -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\eprint@enable@sw} -% \changes{4.1o}{2010/02/10}{(AO, 580) Provide a document class option to turn off production of eprint field in bibliography.} -% -% The document class options \classoption{eprint} and \classoption{noeprint} -% give the user the ability to turn off production of the \texttt{eprint} field in the bibliography. -% \begin{macrocode} -\DeclareOption{eprint}{\@booleantrue\eprint@enable@sw}% -\DeclareOption{noeprint}{\@booleanfalse\eprint@enable@sw}% -\@booleantrue\eprint@enable@sw -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Simplex/Duplex Pages}% -% -% \begin{macro}{\twoside@sw} -% \changes{4.1b}{2008/07/01}{(AO) coordinate \cs{if@twoside} with \cs{twoside@sw}} -% The flag \cmd\twoside@sw\ signifies that the document is to be -% formatted for duplex printing. -% After the preamble is processed, we align the value -% of the kernel \cmd\newif\ switch \cmd\if@twoside\ -% to that of \cmd\twoside@sw. -% \cmd\if@twoside\ itself is used in the kernel's -% \cmd\cleardoublepage\ and \cmd\@outputpage\ procedures. -% \begin{macrocode} -\@booleanfalse\twoside@sw -\appdef\document@inithook{% - \twoside@sw{\@twosidetrue}{\@twosidefalse}% -}% -% \end{macrocode} -% \changes{4.0a}{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? -%FIXME: assign \cmd\if@mparswitch\ later (and protect the assignment, too). -% \begin{macrocode} -\DeclareOption{twoside}{\@booleantrue \twoside@sw\@mparswitchfalse}% -\DeclareOption{oneside}{\@booleanfalse\twoside@sw\@mparswitchtrue}% -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Two-Column Page Grid}% -% -% \begin{macro}{\twocolumn@sw} -% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.} -% \changes{4.1p}{2010/02/24}{(AO, 583) Provide interface to \classname{ltxgrid} \cs{onecolumn@grid@setup} and \cs{twocolumn@grid@setup}} -% 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. -% -% \classoption{onecolumn} specifies one-column page grid. -% The \classoption{twocolumn} class option employs the standard mechanism for -% changing the column grid: the \classname{ltxgrid} package. -% \begin{macrocode} -\DeclareOption{onecolumn}{\@booleanfalse\twocolumn@sw}% -\DeclareOption{twocolumn}{\@booleantrue\twocolumn@sw}% -\@booleanfalse\twocolumn@sw -% \end{macrocode} -% The column grid is determined by the state of the switch \cmd\twocolumn@sw -% and is effected at \cmd\class@documenthook\ time. -% The society or journal file may re-define \cmd\select@column@grid\ -% to accomodate, e.g., more than two choices for the page grid. -% -% Note that \cmd\open@column@two\ adds items to the Main Vertical List, -% so constitutes the true beginning of the document. -% -% Note also that if the selected column grid is a one-column grid, -% there is nothing to do, because \classname{ltxgrid} has already -% set that up via \cmd\@begindocumenthook. -% \begin{macrocode} -\def\select@column@grid{% - \twocolumn@sw{% - \twocolumn@grid@setup - \open@twocolumn - }{% - \onecolumn@grid@setup -% \end{macrocode} -% \begin{verbatim} -% \open@onecolumn -% \end{verbatim} -% \begin{macrocode} - }% -}% -\appdef\class@documenthook{% - \select@column@grid -}% -% \end{macrocode} -% -% \end{macro} -% -% \begin{macro}{\clear@document} -% \changes{4.1n}{2009/12/05}{(AO, 569) Use of \classname{hyperref} interferes with column balancing of last page}% -% -% We install into \cmd\class@enddocumenthook\ -% a trap for the procedure \cmd\clearpage\ that attempts to end the current page. -% This procedure needs to be headpatched with \cmd\close@column\ to end the current page grid. -% -% This procedure is executed after all typesetting is complete -% i.e., after items like \cmd\printtables, as well as all commands queued up by \cmd\AtEndDocument. -% -% \begin{macrocode} -\appdef\setup@hook{% - \let\clearpage@ltx\clearpage - \prepdef\clear@document{\let\clearpage\clearpage@ltx\let\clear@document\@empty\close@column}% - \appdef\class@documenthook{% - \appdef\class@enddocumenthook{% - \let\clearpage\clear@document - }% - }% -}% -% \end{macrocode} -% -% \end{macro} -% -% \begin{macro}{\authoryear@sw} -% \changes{4.1a}{2008/01/18}{(AO, 457) Endnotes to be sorted in with numerical citations.}% -% The boolean \cmd\authoryear@sw\ signifies that we are to use author-year citations rather than numerical citations. -% -% The \classoption{author-year} class option selects ``'author-year'' citations; -% \classoption{numerical} selectes ``numerical'' citations. -% The former is the default. -% \begin{macrocode} -\DeclareOption{author-year}{\@booleantrue\authoryear@sw}% -\DeclareOption{numerical}{\@booleanfalse\authoryear@sw}% -\@booleanfalse\authoryear@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} -% \end{macrocode} -% \classoption{galley} emulates setting the galleys of -% a two-column journal. -% CHANGED: this option should effectively set \cmd\preprintsty@sw\ false. -% NOTE: it makes no sense to assert both galley and twocolumn. -% \changes{4.1b}{2008/07/01}{Class option galley sets \cs{preprintsty@sw} to false} -% -% \begin{macrocode} -\DeclareOption{galley}{% - \ExecuteOptions{onecolumn}% - \@booleantrue\galley@sw - \@booleanfalse\preprintsty@sw - \appdef\setup@hook{% - \advance\textwidth-\columnsep - \textwidth.5\textwidth - }% -}% -\@booleanfalse\galley@sw -% \end{macrocode} -% \end{macro} -% -% \subsubsection{raggedbottom or flushbottom}% -% \begin{macro}{\raggedcolumn@sw} -% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.} -% 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} -\@booleanfalse\raggedcolumn@sw -\appdef\setup@hook{% - \raggedcolumn@sw{\raggedbottom}{\flushbottom}% -}% -% \end{macrocode} -% \end{macro} -% -% \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{macro}{\tightenlines@sw} -% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.} -% 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} -\DeclareOption{tightenlines}{\@booleantrue\tightenlines@sw} -\@booleanfalse\tightenlines@sw -% \end{macrocode} -% \end{macro} -% -% \subsubsection{lengthcheck}% -% -% \begin{macro}{\lengthcheck@sw} -% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.} -% 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} -\@booleanfalse\lengthcheck@sw -% \end{macrocode} -% 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. -% -%FIXME: society or journal may have its own definition of this option. -% \begin{macrocode} -\DeclareOption{lengthcheck}{% - \@booleantrue\lengthcheck@sw - \ExecuteOptions{reprint}% -}% -% \end{macrocode} -% In addition, if length checking is in effect, we will enable -% the tally of text length. -% \begin{macrocode} -\appdef\setup@hook{% - \lengthcheck@sw{\@booleantrue\tally@box@size@sw}{}% -}% -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Draft and Final}% -% -% \begin{macro}{\draft@sw} -% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.} -% The flag \cmd\draft@sw\ signifies that the document is to be -% formatted in draft mode. -% -% \begin{macrocode} -\appdef\setup@hook{% - \draft@sw{\overfullrule 5\p@}{\overfullrule\z@}% -}% -% \end{macrocode} -% -% Certain packages may pay attention to the -% class option \classoption{draft} that sets this Boolean. -% \begin{macrocode} -\DeclareOption{draft}{\@booleantrue\draft@sw}% -\DeclareOption{final}{\@booleanfalse\draft@sw}% -\@booleanfalse\draft@sw -% \end{macrocode} -% -% \end{macro} -% -% \subsubsection{eqsecnum}% -% -% \begin{macro}{\eqsecnum@sw} -% The flag \cmd\eqsecnum@sw\ signifies that equations are to be -% numbered with the section, e.g., ``Eq. (2.13)''. -% \begin{macrocode} -\appdef\setup@hook{% - \eqsecnum@sw{% - \@addtoreset{equation}{section}% - \def\theequation@prefix{\arabic{section}.}% - }{}% -}% -% \end{macrocode} -% -% The \classoption{eqsecnum} class option signifies that equations are -% to be numbered within sections. -% \begin{macrocode} -\DeclareOption{eqsecnum}{\@booleantrue\eqsecnum@sw}% -\@booleanfalse\eqsecnum@sw -% \end{macrocode} -% \end{macro} -% -% \subsubsection{secnumarabic}% -% \changes{4.1b}{2008/07/01}{(AO) No longer use \cs{secnumarabic@sw}, instead use \cs{setup@secnums}} -% The \classoption{secnumarabic} class option signifies that sectioning commands are -% to be numbered arabic: -% the procedure \cmd\secnums@arabic\ is executed as the default. -% Otherwise, the procedure \cmd\secnums@rtx\ determines things. -% The society or journal may redefine either procedure, -% and may change the definition of \cmd\setup@secnums\ itself, -% thereby establishing a different default. -% \begin{macrocode} -\appdef\setup@hook{% - \setup@secnums -}% -\DeclareOption{secnumarabic}{% - \def\setup@secnums{\secnums@arabic}% -}% -\def\setup@secnums{\secnums@rtx}% -% \end{macrocode} -% The code that defines \cmd\secnums@rtx\ and \cmd\secnums@arabic\ appears -% in Section~\ref{sec:secnumarabic}. -% -% \begin{macro}{fleqn} -% FIXME: model fleqn after amsfonts. I no longer understand why I said this. -% \file{fleqn.clo} is not a package, so it can simply be \cmd\input. -% \begin{macrocode} -\DeclareOption{fleqn}{% - \input{fleqn.clo}% -}% -% \end{macrocode} -% \end{macro} -% -% \subsubsection{floats/endfloats}% -% -% \begin{macro}{\floats@sw} -% \begin{macro}{\floatp@sw} -% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.} -% 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. -% -% 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. -% -% 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} -\@booleantrue\floats@sw -\@booleantrue\floatp@sw -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \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} -% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.} -% 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. -% -% \begin{macrocode} -\DeclareOption{titlepage}{\@booleantrue\titlepage@sw} -\DeclareOption{notitlepage}{\@booleanfalse\titlepage@sw} -\@booleanfalse\titlepage@sw -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Substyle and Sub-substyle}% -% -% \begin{macro}{\change@society} -% \begin{macro}{\change@journal} -% \changes{4.1b}{2008/07/01}{(AO) Provide more diagnostics when \cs{@society} is assigned.} -% If the society or, resp., journal has already been assigned, -% notify user whether it is being overridden. -% -% \begin{macrocode} -\def\change@society#1{% - \def\@tempa{#1}% - \@ifxundefined\@society{% - \class@info{Selecting society \@tempa}% - \let\@society\@tempa - }{% - \@ifx{\@tempa\@society}{}{% - \class@warn{Conflicting society \@tempa<>\@society; not selected}% - }% - }% -}% -\def\change@journal#1{% - \def\@tempa{#1}% - \@ifxundefined\@journal{% - \class@info{Selecting journal \@tempa}% - \let\@journal\@tempa - }{% - \@ifx{\@tempa\@journal}{}{% - \class@warn{Conflicting journal \@tempa<>\@journal; not selected}% - }% - }% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% Here had been the class options relating to the APS. -% Now that all societies are on an equal footing, this code is in the -% respective \file{.rtx} file. -% \begin{macrocode} -% \end{macrocode} -% -% \subsubsection{Optical Society of America}% -% Here are the class options relating to the Optical Society of America. -% -% Note: as of 2008, the only OSA module being distributed by ctan is \file{osajnl.rtx}. -% The class options declared here are, I think, unused. -% \begin{macrocode} -\DeclareOption{osa}{\change@society{osa}\let\@journal\@undefined}% -\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} -% -% \begin{macro}{\rtx@require@packages} -% \changes{4.1b}{2008/07/01}{Read in all required packages together} -% The procedure \cmd\rtx@require@packages\ accumulates all \cmd\RequirePackage\ statements -% in the course of loading the document class. -% Carrying out these operations at that time is needed: -% \cmd\ProcessOptions\ must be executed first. -% \begin{macrocode} -\let\rtx@require@packages\@empty -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\MakeUppercase} -% \begin{macro}{\MakeLowercase} -% \changes{4.1b}{2008/07/01}{Package textcase is now simply a required package} -% \changes{4.1b}{2008/07/01}{Read in all required packages together} -% \changes{4.1g}{2009/10/07}{(AO, 538) \cs{MakeTextUppercase} inappropriately expands the double backslash} -% We load the \classname{textcase} package of David Carlisle. -% Now that its bug of long standing has been repaired, we no longer need to doctor it up. -% And, because its loading has been deferred until \cmd\rtx@require@packages\ time, -% we no longer override \LaTeX\ here. Instead, the \classname{textcase} package -% will be asked to do that. -% \begin{macrocode} -\appdef\rtx@require@packages{% - \RequirePackage[overload]{textcase}% -}% -% \end{macrocode} -% The following code used to -% let the \classname{textcase} commands override those of \LaTeX: -% \begin{verbatim} -%\appdef\setup@hook{% -% \expandafter -% \let\csname MakeUppercase \expandafter\endcsname -% \csname MakeTextUppercase \endcsname -% \expandafter -% \let\csname MakeLowercase \expandafter\endcsname -% \csname MakeTextLowercase \endcsname -% }% -% \end{verbatim} -% \end{macro} -% \end{macro} -% -% \begin{macro}{amsfonts} -% \changes{4.1b}{2008/07/01}{Read in all required packages together} -% 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 -}% -\appdef\rtx@require@packages{% - \@ifxundefined\class@amsfonts{}{\class@amsfonts}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{amssymb} -% \changes{4.1b}{2008/07/01}{Read in all required packages together} -% 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 -}% -\appdef\rtx@require@packages{% - \@ifxundefined\class@amssymb{}{\class@amssymb}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{amsmath} -% \changes{4.1b}{2008/07/01}{Read in all required packages together} -% 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 -}% -\appdef\rtx@require@packages{% - \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{4.1b}{2008/07/01}{Code relating to new syntax for frontmatter has been placed in \file{ltxfront.dtx}} -% Class options for presenting authors and their affiliations are now defined in -% \file{ltxfront.dtx}. -% -% \begin{macrocode} -% \end{macrocode} -% -% \subsubsection{Typeset by \revtex}% -% -% \begin{macro}{\byrevtex@sw} -% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.} -% The flag \cmd\byrevtex@sw\ signifies that the document should -% bear an imprint to the effect that it was formatted by this document class. -% -% 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}% -\@booleanfalse\byrevtex@sw -% \end{macrocode} -% \end{macro} -% -% \subsection{Attempt to fix float placement failure}% -% -% \begin{macro}{\force@deferlist@sw} -% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.} -% \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}% -\@booleanfalse\force@deferlist@sw -% \end{macrocode} -% \end{macro} -% -% \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 -%\@booleantrue\ltxgrid@foot@info@sw -}% -\DeclareOption{outputdebug}{% - \@booleantrue\outputdebug@sw - \@booleantrue\ltxgrid@info@sw - \@booleantrue\ltxgrid@foot@info@sw - \traceoutput -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \subsection{Option to relax page height}% -% -% \begin{macro}{\textheight@sw} -% 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} -% \end{macro} -% -% \subsection{Selecting procedure for processing abstract}% -% \changes{4.1b}{2008/07/01}{Remove options newabstract and oldabstract} -% Code defining options \classoption{newabstract} and \classoption{oldabstract} has been removed. -% -% \subsection{Option to turn on diagnostics in the frontmatter}% -% -% \begin{macro}{\frontmatterverbose@sw} -% \changes{4.1b}{2008/07/01}{Code relating to new syntax for frontmatter has been placed in \file{ltxfront.dtx}} -% A diagnostic option, not for the average enduser, which reveals -% the workings of the frontmatter. -% This code interfaces to that of \file{ltxfront.dtx}. -% \begin{macrocode} -\DeclareOption{frontmatterverbose}{\@booleantrue\frontmatterverbose@sw}% -\@booleanfalse\frontmatterverbose@sw -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\linenumbers@sw} -% \changes{4.1f}{2009/07/07}{(AO, 513) Add class option linenumbers: number the lines a la \classname{lineno}} -% \changes{4.1n}{2009/12/13}{(AO, 573) arrange to load \classname{lineno} after any other packages.}% -% An option to number the lines of type in the output in the manner of \classname{lineno}. -% -% At present, we use that very package to implement this functionality. -% This means that users may modify the workings of that package per its documentation (which see). -% -% However, compatibility with \classname{amsmath} requires that \classname{lineno} be loaded afterwards. -% Therefore, we defer loading of this package until after the preamble is completed. -% \begin{macrocode} -\DeclareOption{linenumbers}{% - \appdef - \class@documenthook{% - \RequirePackage{lineno}[2005/11/02 v4.41]% - \linenumbersep4pt\relax - \linenumbers\relax - }% -}% -% \end{macrocode} -% By default, line numbering is off. -% \end{macro} -% -% \begin{macro}{\NAT@merge} -% \changes{4.1f}{2009/07/15}{(AO, 523) Add class option nomerge, to turn off new natbib 8.3 syntax} -% Add class option nomerge, to turn off natbib 8.3 syntax for citation key. -% The default value of REVTeX 4.1 for \cmd\NAT@merge is \cmd\thr@@, which turns on -% the new syntax along with its semantics. -% Legacy documents that would be incompatible with the new syntax can be successfully processed -% with class option \classoption{nomerge}. -% \begin{macrocode} -\DeclareOption{nomerge}{% - \appdef\setup@hook{% - \@ifnum{\NAT@merge>\z@}{\let\NAT@merge\z@}{}% - }% -}% -% \end{macrocode} -% \end{macro} -% -% \subsection{Default Option, Society, Journal, and pointsize}% -% -% \changes{4.1a}{2008/01/18}{(AO, 488) Change processing of options to allow an unused option to specify society and journal}% -% This change will not break OSA documents because that society is still built in to revtex4. -% -% \begin{macro}{\@parse@class@options@society} -% \begin{macro}{\@parse@class@options@} -% \changes{4.1b}{2008/07/01}{Procedures \cs{@parse@class@options@society} and \cs{@parse@class@options@journal} and friends} -% The procedure \cmd\@parse@class@options@society\ parses the options passed to this document class -% for the \cmd\@society. -% It is like \cmd\ProcessOptions*\ in that it accesses -% \cmd\@ptionlist\{\cmd\@currname.\cmd\@currext\}. -% Any undefined option is considered: if there is a corresponding \file{.rtx} file, -% it will change the society accordingly -% and define a placeholder class option for the society thus found -% (thus preventing a spurious "option not found" message). -% -% The procedure \cmd\@parse@class@options@\ parses the document's options -% for any that set the \cmd\csname\ provided. -% \begin{macrocode} -\def\@parse@class@options@society{% - \edef\@tempa{\@ptionlist{\@currname.\@currext}}% - \expandafter\@for\expandafter\CurrentOption\expandafter:\expandafter=\@tempa\do{% - \expandafter\@ifnotrelax\csname ds@\CurrentOption\endcsname{}{% - \IfFileExists{\CurrentOption\substyle@post.\substyle@ext}{% - \expandafter\change@society\expandafter{\CurrentOption}% - \expandafter\let\csname ds@\CurrentOption\endcsname\@empty - }{}% - }% - }% -}% -\def\@parse@class@options@#1{% - \edef\@tempa{\@ptionlist{\@currname.\@currext}}% - \expandafter\@for\expandafter\CurrentOption\expandafter:\expandafter=\@tempa\do{% - \expandafter\@ifnotrelax\csname ds@\CurrentOption\endcsname{% - \begingroup\csname ds@\CurrentOption\endcsname - \@ifxundefined#1{% - \endgroup - }{% - \expandafter\endgroup\expandafter\def\expandafter#1\expandafter{#1}% - }% - }{}% - }% -}% -\def\@parse@class@options@journal{% - \edef\@tempa{\@ptionlist{\@currname.\@currext}}% - \expandafter\@for\expandafter\CurrentOption\expandafter:\expandafter=\@tempa\do{% - \expandafter\@ifnotrelax\csname ds@\CurrentOption\endcsname{% - \begingroup - \csname ds@\CurrentOption\endcsname - \@ifxundefined\@journal{% - \endgroup - }{% - \expandafter\endgroup\expandafter\def\expandafter\@journal\expandafter{\@journal}% - }% - }{}% - }% -}% -\def\@parse@class@options{% - \edef\@tempa{\@ptionlist{\@currname.\@currext}}% - \expandafter\@for\expandafter\CurrentOption\expandafter:\expandafter=\@tempa\do{% - \expandafter\@ifnotrelax\csname ds@\CurrentOption\endcsname{% - \begingroup - \csname ds@\CurrentOption\endcsname - \@ifxundefined\@pointsize{% - \endgroup - }{% - \expandafter\endgroup\expandafter\def\expandafter\@pointsize\expandafter{\@pointsize}% - }% - }{% - \IfFileExists{\CurrentOption\substyle@post.\substyle@ext}{% - \expandafter\change@society\expandafter{\CurrentOption}% - \expandafter\let\csname ds@\CurrentOption\endcsname\@empty - }{}% - }% - }% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \changes{4.1j}{2009/10/25}{(AO, 545) hypertext capabilities off by default; enable with \classoption{hypertext}} -% The class option \classoption{hypertext} enables the built-in hypertext capabilities, -% which coincide with those of \classname{custom-bib}-generated BIBTeX styles -% using the guard code \texttt{hypertext}. -% -% Note that APS has these capabilities turned off by default; -% Loading the hyperref package turns them on. -% \begin{macrocode} -\DeclareOption{hypertext}{\hypertext@enable@ltx}% -\appdef\document@inithook{\@ifpackageloaded{hyperref}{\hypertext@enable@ltx}{}}% -% \end{macrocode} -% -% The default handling for a document class option depends upon whether the \cmd\@society\ is -% defined. -% -% If not, then hunt for a \file{.rtx} file with that name. -% If it exists, then we will take this option as the name of the society, -% otherwise, declare the option as not used. -% -% (This behavior is similar to the \LaTeX2.09 handling, where -% one looked for a \file{.sty} file, except that -% in this case, we must provide for journal substyles that may be -% defined in the society file, or have their own journal substyle file.) -% -% At the point where the class file is finished loading, -% we then read in the society file. -% That file can define further class options, such as the journal substyle. -% -% For users, this will mean that they can specify the society and journal simply -% by specifying first the former and then the latter among their document class options. -% The society \emph{must} have a corresponding \file{.rtx}. -% -% \changes{4.1b}{2008/05/29}{The csname substyle@ext is now defined without a dot (.), to be compatible with \LaTeX usage (see @clsextension and @pkgextension).} -% -% \begin{macrocode} -%</options> -% \end{macrocode} -% -% \begin{macrocode} -%<*package> -% \end{macrocode} -% -% \begin{macro}{\@process@society} -% \begin{macro}{\@process@journal} -% \begin{macro}{\@process@pointsize} -% \begin{macrocode} -\def\substyle@post{4-2}% -\def\substyle@ext{rtx}% -\DeclareOption*{\OptionNotUsed}% -% \end{macrocode} -% A society substyle may define its own options, via \cmd\DeclareOption. -% -% At the end of this document class, we process the society file, -% using \file{aps.rtx} if none has been specified in the document. -% \begin{macrocode} -\def\@process@society#1{% - \@ifxundefined\@society{% - \class@warn{No Society specified, using default society #1}% - \def\@society{#1}\let\@journal\@undefined - }{}% - \expandafter\input\expandafter{\@society\substyle@post.\substyle@ext}% -}% -% \end{macrocode} -% -% A society substyle can encompass any number of journal substyles; -% we use the following procedure to invoke the proper one. -% \begin{macrocode} -\def\@process@journal#1{% - \@ifxundefined\@journal{% - \class@warn{No journal specified, using default #1}% - \def\@journal{#1}% - }{}% - \expandafter\expandafter - \expandafter\rtx@do@substyle - \expandafter\expandafter - \expandafter{\expandafter\@society\@journal}% -}% -\def\rtx@do@substyle#1{% - \InputIfFileExists{#1\substyle@post.\substyle@ext}{}{\csname rtx@#1\endcsname}% -}% -% \end{macrocode} -% -% Document class options \classoption{10pt}, \classoption{11pt}, and \classoption{12pt} -% are implemented by \revtex\ itself and determine \cmd\@pointsize. -% These provide formatting settings appropriate to the society's journals. -% -% If not specified by the document, a value \cmd\@pointsize@default\ is used. -% This default can be set by the journal. Here, the society sets its default. -% \begin{macrocode} -\def\@process@pointsize#1{% - \@ifxundefined\@pointsize{% - \def\@pointsize{#1}% - \class@warn{No type size specified, using default \@pointsize}% - }{}% - \expandafter\expandafter - \expandafter\rtx@do@substyle - \expandafter\expandafter - \expandafter{\expandafter\@society\@pointsize pt}% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \subsection{Class-Asserted Options}% -% \changes{4.0b}{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. -% -% \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} -% \begin{macro}{\ps@article@final} -% \begin{macro}{\ps@preprint} -% \changes{4.0a}{1998/01/31}{Move after process options, so the following test works} -% \changes{4.0b}{1999/06/20}{Defer decision until \cs{AtBeginDocument} time} -% \changes{4.0c}{1999/11/13}{Insert procedure \cs{checkindate}} -% \changes{4.0rc1}{2001/06/17}{Running headers always as if two-sided} -% \begin{macrocode} -\def\ps@article{% - \def\@evenhead{\let\\\heading@cr\thepage\quad\checkindate\hfil{\leftmark}}% - \def\@oddhead{\let\\\heading@cr{\rightmark}\hfil\checkindate\quad\thepage}% - \def\@oddfoot{}% - \def\@evenfoot{}% - \let\@mkboth\markboth - \let\sectionmark\@gobble - \let\subsectionmark\@gobble -}% -\def\ps@article@final{% - \def\@evenhead{\let\\\heading@cr\thepage\quad\checkindate\hfil{\leftmark}}% - \def\@oddhead{\let\\\heading@cr{\rightmark}\hfil\checkindate\quad\thepage}% - \def\@oddfoot{}% - \def\@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% - }% - }% -}% -% \end{macrocode} -% -% \begin{macrocode} -\def\heading@cr{\unskip\space\ignorespaces}% -% \end{macrocode} -% -% \changes{4.0c}{1999/11/13}{Do not put by REVTeX in every page foot} -% \changes{4.0c}{1999/11/13}{Insert procedure \cs{checkindate}} -% \begin{macrocode} -\def\ps@preprint{% - \def\@oddfoot{\hfil\thepage\quad\checkindate\hfil}% - \def\@evenfoot{\hfil\thepage\quad\checkindate\hfil}% - \def\@oddhead{}% - \def\@evenhead{}% - \let\@mkboth\@gobbletwo - \let\sectionmark\@gobble - \let\subsectionmark\@gobble -}% -% \end{macrocode} -% -% \begin{macrocode} -\let\@oddhead\@empty -\let\@evenhead\@empty -\let\@oddfoot\@empty -\let\@evenfoot\@empty -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\lastpage@putlabel} -% Support the default meaning of \cmd\@endpage. -% \changes{4.0a}{1998/01/31}{Move after process options, so \cs{clearpage} not in scope of twocolumn} -% \changes{4.1k}{2009/11/06}{(AO, 554) give the \cs{newlabel} command syntax appropriate to the hyperref package} -% 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 procedure into document endgame processing 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 assume no further \cmd\shipout s will be done past this point. -% \changes{4.1n}{2009/12/09}{(AO, 569) execute the after-last-shipout procedures from within the safety of the output routine}% -% \begin{macrocode} -\appdef\clear@document{% - \do@output@cclv{% - \lastpage@putlabel - \tally@box@size@sw{\total@text}{}% - }% -}% -\providecommand\write@column@totals{}% -% \end{macrocode} -% \end{macro} -% -% -% \section{Required Packages} -% \url{CTAN:macros/latex/contrib/other/misc/url.sty}% -% \begin{macrocode} -\appdef\rtx@require@packages{% - \RequirePackage{url}% -}% -% \end{macrocode} -% -% \section{Incompatible Packages} -% -% We wait until after the preamble is processed, then check for any packages -% that might have been loaded which we know to be incompatible with \revtex. -% -% The \classname{multicol} package is incompatible with \classname{ltxgrid}, which replaces it. -% The \classname{cite} package is incompatible with \classname{natbib}, which replaces its functionality. -% The functionality of the \classname{mcite} package is provided by \classname{natbib}. -% \begin{macrocode} -\appdef\document@inithook{% - \incompatible@package{cite}% - \incompatible@package{mcite}% - \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\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{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} -% -% \changes{4.1b}{2008/06/30}{(AO) Structure the Abstract using the \texttt{bibliography} environment} -% \begin{macrocode} -\def\descriptionlabel#1{% - \hspace\labelsep \normalfont\bfseries #1\unskip:% -}% -% \end{macrocode} -% -% \begin{macrocode} -\newenvironment{description}{% - \list{}{% - \labelwidth\z@ \itemindent-\leftmargin - \let\makelabel\descriptionlabel - }% -}{% - \endlist -}% -% \end{macrocode} -% -% \subsection{Sectioning Commands\label{sec:secnumarabic}} -% -% \subsubsection{Sectioning Commands and Their Productions}% -% The following counters are defined by LaTeX's standard document classes. -% We do likewise, then assign flag values to the productions, awaiting -% overrides. -% \begin{macrocode} -\newcounter{part}% -\let\thepart\@undefined -\newcounter{section}% -\let\thesection\@undefined -\newcounter{subsection}[section]% -\let\thesubsection\@undefined -\newcounter{subsubsection}[subsection]% -\let\thesubsubsection\@undefined -\newcounter{paragraph}[subsubsection]% -\let\theparagraph\@undefined -\newcounter{subparagraph}[paragraph]% -\let\thesubparagraph\@undefined -% \end{macrocode} -% The procedure invoked by \cmd\setup@secnums\ provides meanings for these productions. -% -% \begin{macro}{\secnums@rtx} -% \begin{macro}{\secnums@arabic} -% These two procedures define the meanings of each of the productions -% of the counters of the sectioning commands, -% but only if nothing else has defined it. -% \begin{macrocode} -\def\secnums@rtx{% - \@ifxundefined\thepart{% - \def\thepart{\Roman{part}}% - }{}% - \@ifxundefined\thesection{% - \def\thesection {\Roman{section}}% - \def\p@section {}% - }{}% - \@ifxundefined\thesubsection{% - \def\thesubsection {\Alph{subsection}}% - \def\p@subsection {\thesection\,}% - }{}% - \@ifxundefined\thesubsubsection{% - \def\thesubsubsection {\arabic{subsubsection}}% - \def\p@subsubsection {\thesection\,\thesubsection\,}% - }{}% - \@ifxundefined\theparagraph{% - \def\theparagraph {\alph{paragraph}}% - \def\p@paragraph {\thesection\,\thesubsection\,\thesubsubsection\,}% - }{}% - \@ifxundefined\thesubparagraph{% - \def\thesubparagraph {\arabic{subparagraph}}% - \def\p@subparagraph {\thesection\,\thesubsection\,\thesubsubsection\,\theparagraph\,}% - }{}% -}% -\def\secnums@arabic{% - \@ifxundefined\thepart{% - \def\thepart {\Roman{part}}% - }{}% - \@ifxundefined\thesection{% - \def\thesection {\Roman{section}}% - \def\p@section {}% - }{}% - \@ifxundefined\thesubsection{% - \def\thesubsection {\thesection.\arabic{subsection}}% - \def\p@subsection {}% - }{}% - \@ifxundefined\thesubsubsection{% - \def\thesubsubsection {\thesubsection.\arabic{subsubsection}}% - \def\p@subsubsection {}% - }{}% - \@ifxundefined\theparagraph{% - \def\theparagraph {\thesubsubsection.\arabic{paragraph}}% - \def\p@paragraph {}% - }{}% - \@ifxundefined\thesubparagraph{% - \def\thesubparagraph {\theparagraph.\arabic{subparagraph}}% - \def\p@subparagraph {}% - }{}% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \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{4.0c}{1999/11/13}{also spelled ``acknowledgements''.} -% \changes{4.0d}{2000/05/18}{But alternative spelling is deprecated.} -% \begin{macrocode} -\newenvironment{acknowledgments}{% - \acknowledgments@sw{% - \expandafter\section\expandafter*\expandafter{\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} -% -% \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{4.0b}{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{macrocode} -\def\listoffigures{\print@toc{lof}}% -\def\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}% -% \end{macrocode} -% -% \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{4.0b}{1999/06/20}{One-line caption sets flush left.} -% \changes{4.0c}{1999/11/13}{Prevent an inner footnote from performing twice} -% \changes{4.1a}{2008/01/18}{(AO, 460) ``Proper style is "FIG. 1. ..." (no colon)''}% -% There is a hook \cmd\@caption@fignum@sep\ for determining -% the separator following the float number, e.g., ``Fig.1''. -% Formerly, we had defined it to be ``: '', now the colon has been replace by a period (full stop). -% \begin{macrocode} -\long\def\@makecaption#1#2{% - \par -% \nobreak - \vskip\abovecaptionskip - \begingroup - \small\rmfamily - \sbox\@tempboxa{% - \let\\\heading@cr - \@make@capt@title{#1}{#2}% - }% - \@ifdim{\wd\@tempboxa >\hsize}{% - \begingroup - \samepage - \flushing - \let\footnote\@footnotemark@gobble - \@make@capt@title{#1}{#2}\par - \endgroup - }{% - \global \@minipagefalse - \hb@xt@\hsize{\hfil\unhbox\@tempboxa\hfil}% - }% - \endgroup - \vskip\belowcaptionskip -}% -\def\@make@capt@title#1#2{% - \@ifx@empty\float@link{\@firstofone}{\expandafter\href\expandafter{\float@link}}% - {#1}\@caption@fignum@sep#2% -}% -\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% -}% -\def\@caption@fignum@sep{. }% -\def\setfloatlink{\def\float@link}% -\let\float@link\@empty -% \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} -% We allocate a box register for use in tallying the column inches of floats of this type. -% \begin{macrocode} -\expandafter\newbox\csname fbox@\ftype@figure\endcsname -\expandafter\setbox\csname fbox@\ftype@figure\endcsname\hbox{}% -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Deferring \env{figure} Floats}% -% -% We determine if figures are to float or be deferred until \cmd\printfigures\ time. -% If so, we open the stream that will receive the deferred document portions. -% \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{4.0b}{1999/06/20}{call \cs{print@floats}} -% \changes{4.0c}{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 -}% -% \end{macrocode} -% \end{macro} -% -% -% \subsection{Tables} -% \changes{4.0b}{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} -% We allocate a box register for use in tallying the column inches of floats of this type. -% \begin{macrocode} -\expandafter\newbox\csname fbox@\ftype@table\endcsname -\expandafter\setbox\csname fbox@\ftype@table\endcsname\hbox{}% -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\def\listoftables{\print@toc{lot}}% -\let\l@table\l@figure -% \end{macrocode} -% -% \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}% -% -% After all packages are loaded, we decide -% if tables will float or will be deferred until \cmd\printtables\ time. -% -% We also deal with the possibility of \env{longtable} environments. -% -% \begin{macrocode} -\def\set@table@environments{% - \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\document@inithook{% - \set@table@environments -}% -\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{4.0b}{1999/06/20}{only execute if appropriate} -% \changes{4.0c}{1999/11/13}{*-form mandates pagebreak} -% \changes{4.0d}{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} -% -% -% \subsection{Videos} -%\changes{4.1r}{2010/06/22}{(AO, 595) Provide \cs{lovname} along with other List of Videos definitions.}% -% -% \begin{environment}{video} -% We define the \env{video} environment analogously to the -% \env{figure} and \env{table} environments; it is intended to contain a video. -% -% \begin{macrocode} -\newenvironment{video} - {\@float{video}} - {\end@float}% -\newenvironment{video*} - {\@dblfloat{video}} - {\end@dblfloat}% -% \end{macrocode} -% \end{environment} -% -% \begin{macro}{\thevideo} -% The video counter, float placement defaults, strings. -% \begin{macrocode} -\newcounter{video} -\renewcommand \thevideo {\@arabic\c@video} -% \end{macrocode} -% -% File extension and localizable strings. -% \begin{macrocode} -\def\ext@video{lov}% -\def\fname@video{Video}% -\def\lovname{List of Videos}% -% \end{macrocode} -% -% Float type and default placement. -% \begin{macrocode} -\def\fps@video{tbp}% -\def\ftype@video{4}% -\def\fnum@video{\fname@video~\thevideo}% -\appdef\document@inithook{% - \@ifxundefined\c@float@type{}{% - \global\setcounter{float@type}{8}% - }% -}% -% \end{macrocode} -% We allocate a box register for use in tallying the column inches of floats of this type. -% \begin{macrocode} -\expandafter\newbox\csname fbox@\ftype@video\endcsname -\expandafter\setbox\csname fbox@\ftype@video\endcsname\hbox{}% -% \end{macrocode} -% The documentation for the \classname{hyperref} package, \file{hyperref.dtx} states: -% ``classes or package which introduce new elements need to define -% an equivalent \verb+\theH<name>+ for every \verb+\the<name>+'' -% We do accordingly here. -% \begin{macrocode} -\let\theHvideo\thevideo -% \end{macrocode} -% But \file{hyperref.dtx} goes on to say, -% ``We do make a trap to make \verb+\theH<name>+ be the same as \verb+\arabic{<name>}+, -% if \verb+\theH<name>+ is not defined\ldots'' -% However, it's not doing that right now (as of 6.77u), -% and I cannot find any such code in there anymore. -% \end{macro} -% -% \begin{macrocode} -\def\listofvideos{\print@toc{lov}}% -\let\l@video\l@figure -% \end{macrocode} -% -% \subsubsection{Deferring \env{video} Floats}% -% -% We determine if videos are to float or be deferred until \cmd\printvideos\ time. -% If so, we open the stream that will receive the deferred document portions. -% \begin{macrocode} -\appdef\class@documenthook{% - \do@if@floats{video}{.vdx}% -}% -\appdef\class@enddocumenthook{% - \printvideos\relax -}% -% \end{macrocode} -% -% \begin{macro}{\printvideos} -% The user-level command \cmd\printvideos\ determines -% where the videos 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\printvideos\ command, -% the videos 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. -% \begin{macrocode} -\newcommand\printvideos{% - \@ifstar{\true@sw}{\floatp@sw{\true@sw}{\false@sw}}% - {% - \print@float{video}{\oneapage}% - }{% - \print@float{video}{}% - }% -}% -% \end{macrocode} -% \end{macro} -% -% -% \section{Tabular} -% Every APS 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{}% -% \end{macrocode} -% \begin{verbatim} -%\RequirePackage{dcolumn}% -% \end{verbatim} -% \begin{macrocode} -\appdef\document@inithook{% - \@ifpackageloaded{dcolumn}{% - \expandafter\@ifnotrelax\csname NC@find@d\endcsname{}{% - \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{4.0a}{1998/06/10}{single space footnotes} -% \changes{4.0b}{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{macro}{\@makefnmark} -% We customize the presentation of the footnote mark: it will not be italic. -% \begin{macrocode} -\def\@makefntext#1{% - \def\baselinestretch{1}% - \parindent1em% - \noindent - \hb@xt@1.8em{% - \hss\@makefnmark - }% - #1% - \par -}% -\def\@makefnmark{% - \hbox{% - \@textsuperscript{% - \normalfont\@thefnmark - }% - }% -}% -% \end{macrocode} -% \end{macro} -% \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. -% -% 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 \cmd\let \cmd\NAT@sort\ to be \cmd\@ne. -% However, if you prefer the effect of having neither \classoption{sort} nor \classoption{sort\&compress}, -% you must \cmd\let \cmd\NAT@sort\ to be \cmd\z@ and you must also define -% \cmd\let\cmd\NAT@cmprs\ to be \cmd\z@. -% -% As of version 8.2, \classname{natbib} now no longer binds at the point where it is read in. -% This means that we can freely change \cmd\NAT@sort, \cmd\NAT@cmprs, and the new -% \cmd\NAT@merge. Henceforth, we require that this later version be used. -% -% 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{macro}{\rev@citet} -% \begin{macro}{\rev@citealp} -% \begin{macro}{\rev@citealpnum} -% We define variants on \classname{natbib}'s commands \cmd\citet, \cmd\citealp, and \cmd\citealpnum. -% \cmd\rev@citealpnum\ uses a numerical citation. -% \cmd\rev@citealp\ and \cmd\rev@citealpnum\ are the aliases of \cmd\onlinecite, -% \cmd\rev@citet\ that of \cmd\textcite. -% -% In each case, we invoke \cmd\rtx@swap@citea\ to effect different productions between -% multiple arguments to the \cmd\cite\ command. -% -% \cmd\rev@citealpnum\ provides textual citations where superscript citations are the default. -% 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. -% \begin{macrocode} -\expandafter\DeclareRobustCommand -\expandafter\rev@citet -\expandafter{% - \expandafter\begingroup - \expandafter\rtx@swap@citea - \expandafter\g@bblefirsttoken - \csname citet \endcsname -}% -\expandafter\DeclareRobustCommand -\expandafter\rev@citealp -\expandafter{% - \expandafter\begingroup - \expandafter\rtx@swap@citea - \expandafter\g@bblefirsttoken - \csname citealp \endcsname -}% -\expandafter\DeclareRobustCommand -\expandafter\rev@citealpnum -\expandafter{% - \expandafter\begingroup - \expandafter\rtx@swap@citenum - \expandafter\g@bblefirsttoken - \csname citealp \endcsname -}% -\def\rtx@swap@citenum{% - \rtx@swap@citea - \let\@cite\NAT@citenum - \let\NAT@mbox\mbox - \let\citeyear\NAT@citeyear - \let\NAT@space\NAT@spacechar -}% -\def\g@bblefirsttoken{% - \expandafter\true@sw - \expandafter\@empty -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\rtx@citesuper} -% We prepare to 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} -\newcommand\rtx@citesuper[3]{% - \ifNAT@swa - \leavevmode - \unskip -% \hspace{1\p@}% - \textsuperscript{\normalfont#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}{\rtx@bibsection} -% Prepare to override \classname{natbib}'s definition of \cmd\bibsection. -% \begin{macrocode} -\def\rtx@bibsection{% - \@ifx@empty\refname{% - \par - }{% -% \let\@hangfroms@section\@hang@froms - \expandafter\section\expandafter*\expandafter{\refname}% - \@nobreaktrue - }% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rtx@swap@citea} -% \begin{macro}{\rtx@def@citea} -% \begin{macro}{\rtx@def@citea@close} -% \begin{macro}{\rtx@def@citea@box} -% The procedures |\rtx@def@citea|, |\rtx@def@citea@close|, and |\rtx@def@citea@box| -% can take over the management of \classname{natbib}'s |\@citea| macro to effect more sophisticated -% behavior of the punctuation between textual citations. The switch is performed by \cmd\rtx@swap@citea. -% -% \changes{4.1j}{2009/10/25}{(AO, 552) Repair spacing in \cs{onlinecite}} -% In these procedures, we use \cmd\count@\ to count the number of arguments of the \cmd\cite\ command, -% and we use \cmd\c@NAT@ctr\ to keep track of which argument we are processing. -% The latter counter is created by \classname{natbib} and used there solely in bibliography processing, -% where it keeps track of the reference number. -% We take over its use in these macros, but only locally; therefore these procedures should work properly, even within the bibliography. -%FIXME: check whether this is true! -% -% Because we are using a scratch counter \cmd\count@, we are vulnerable to other \TeX\ programmers -% who patch in to \classname{natbib}'s processing and who might use that counter at the same time we are doing so. -% This is a potential source of trouble for us. -%FIXME: store the value of \cmd\count@\ in a private \cmd\csname! -% -% Note that \cmd\rtx@def@citea\ begins the same as \cmd\NAT@def@citea, which it replaces, -% then makes further decisions based on the values of the counters. -% -% Note also that, in \classname{natbib}, the replacement part of \cmd\NAT@def@citea@close\ could be rewritten as -% \cmd\NAT@def@citea\cmd\prepdef\cmd\@citea\verb+{+\cmd\NAT@@close\verb+}+, which -% would them obviate the need for us to override its meaning. -% -% Note, too, the effect of \cmd\rtx@def@citea@box, which replaces \cmd\NAT@def@citea@box, -% is almost the same as the latter, except the entire \cmd\@citea\ is given as the argument -% of \cmd\NAT@mbox. -% -% Finally, bear in mind that the English (and some American editors) do not place a comma -% before the ``and''; our procedures do (but they could be rewritten with that convention). -% \begin{macrocode} -\def\rtx@swap@citea{% - \let\NAT@def@citea\rtx@def@citea - \let\NAT@def@citea@close\rtx@def@citea@close - \let\NAT@def@citea@box\rtx@def@citea@box -}% -\def\rtx@def@citea{% - \def\@citea{\NAT@separator\NAT@space}% - \advance\c@NAT@ctr\@ne - \@ifnum{\count@>\tw@}{% - \@ifnum{\c@NAT@ctr=\count@}{\appdef\@citea{\NAT@conj\NAT@space}}{}% - }{% - \def\@citea{\NAT@space\NAT@conj\NAT@space}% - }% -}% -\def\rtx@def@citea@close{% - \rtx@def@citea - \prepdef\@citea{\NAT@@close}% -}% -\def\rtx@def@citea@box{% - \rtx@def@citea@close - \expandafter\def\expandafter\@citea\expandafter{\expandafter\NAT@mbox\expandafter{\@citea}}% -}% -\def\NAT@conj{and}% -% \end{macrocode} -% -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\BibitemShut} -% \begin{macro}{\bibAnnote} -% \changes{4.1j}{2009/10/24}{(AO, 549) Repairing natbib's \cs{BibitemShut} and \cs{bibAnnote}} -% \changes{4.1o}{2010/02/05}{(AO, 549) Remove patch to natbib, which is now at version 8.31a} -% \changes{4.1o}{2010/02/07}{(AO, 578) accommodate the possible space character preceding \cs{BibitemShut}.} -% We remember a temporary patch to \classname{natbib}'s definition of \cmd\BibitemShut. -% \begin{macrocode} -\def\NAT@BibitemShut#1{% - \def\@bibstop{#1}% - \let\bibitem@Stop\bibitemStop - \let\bibitem@NoStop\bibitemNoStop - \@ifx{\bibitemShut\relax}{\let\@bibitemShut\@empty}{% - \expandafter\def\expandafter\@bibitemShut\expandafter{\bibitemShut}% - }% -}% -% \end{macrocode} -% The following is a bug fix to \classname{natbib} version 8.31b. -% \begin{macrocode} -\def\BibitemShut@ltx#1{% - \unskip - \def\@bibstop{#1}% - \let\bibitem@Stop\bibitemStop - \let\bibitem@NoStop\bibitemNoStop - \@ifx{\bibitemShut\relax}{\let\@bibitemShut\@empty}{% - \expandafter\def\expandafter\@bibitemShut\expandafter{\bibitemShut}% - }% -}% -% \end{macrocode} -% -% \begin{verbatim} -%\providecommand{\bibAnnote}[3]{% -% \BibitemShut{#1}% -% \def\@tempa{#3}\@ifx{\@tempa\@empty}{}{% -% \begin{quotation}\noindent -% \textsc{Key:}\ #2\\\textsc{Annotation:}\ \@tempa -% \end{quotation}% -% }% -% \ignorespaces -%}% -%\def\@bibitemShut{}% -% \end{verbatim} -% \end{macro} -% \end{macro} -% -% -% \begin{macrocode} -\newenvironment{thebibliography}{}{}% -\let\@listi\@empty -\appdef\rtx@require@packages{% - \RequirePackage[sort&compress]{natbib}[2009/11/07 8.31a (PWD, AO)]% - \let@environment{NAT@thebibliography}{thebibliography}% - \let@environment{thebibliography}{rtx@thebibliography}% - \let\bibliographystyle@latex\bibliographystyle - \let\NAT@citesuper\rtx@citesuper -% \end{macrocode} -% -% \begin{macro}{\NAT@bibsetnum} -% \begin{macro}{\NAT@bibsetup} -% \begin{macro}{\bibpreamble} -% \begin{macro}{\newblock} -% \begin{macro}{\bibnumfmt} -% \begin{macro}{\NAT@merge} -% 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. -% -% We set \cmd\NAT@merge\ to \cmd\tw@, which turns on \classname{natbib}'s -% \classname{mcite} capabilities. This is the default setting. -% If numerical citations are not to be used, then \cmd\NAT@merge\ -% should be set to \cmd\@ne\ (syntax is still enabled, but semantics are turned off). -% \begin{macrocode} -\let\bibsection\rtx@bibsection -\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}% -\let\NAT@merge\thr@@ -\let\NAT@citeyear\citeyear -\let\onlinecite\rev@citealp -\let\textcite\rev@citet -% \end{macrocode} -% The following is needed until \classname{natbib} is at 8.31b. -% \begin{macrocode} -\@ifx{\BibitemShut\NAT@BibitemShut}{% - \class@info{Repairing natbib's \string\BibitemShut}% - \let\BibitemShut\BibitemShut@ltx -}{}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\bibliographystyle} -% \changes{4.1q}{2010/04/01}{(AO, 586) When .bbl is pasted into the document, prevent automatic bibliography inclusion.}% -% \changes{4.1q}{2010/04/13}{(AO, 588) Only write \revtex-specific BibTeX .bib data if the .bst style is set by REVTeX.}% -% 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 incompatible with -% any package that patches \cmd\bibliographystyle. -% Since \classname{natbib} does this, we need a fix. -% -% The Boolean \cmd\bibliographystyle@sw\ signifies that the document contains explicit -% \cmd\bibliographystyle\ markup. If, on the contrary, the bibliography style is set by -% the the society or the journal, then no explicit \cmd\bibliographystyle\ command appears in the document instance. -% In this case \cmd\bibliographystyle@sw\ will be \cmd\false@sw. -% \begin{macrocode} -\let\bibliographystyle@latex\bibliographystyle -\def\bibliographystyle{\@booleantrue\bibliographystyle@sw\def\@bibstyle}% -\@booleanfalse\bibliographystyle@sw -% \end{macrocode} -% \end{macro} -% -% \changes{4.1j}{2009/11/03}{(AO, 551) Punctuation at end of reference when optional arguments to the cite key are given.} -% The following had been bug fixes to \classname{natbib} version 8.31a. -% \begin{verbatim} -%\def\bibitemStop{\@bibitemShut}% -%\def\NAT@bibitem@cont{% -% \let\bibitem@Stop\bibitemContinue -% \let\bibitem@NoStop\bibitemContinue -%}% -% \end{verbatim} -% The following are alterations to \classname{natbib} version 8.31a to -% accommodate the possible space character preceding \cmd\BibitemShut, -% and to handle the case of merged references, where the first ends with a stop character. -% \changes{4.1o}{2010/02/07}{(AO, 578) accommodate the possible space character preceding \cs{BibitemShut}.} -% \changes{4.1o}{2010/02/09}{(AO, 581) Handle case: merged references, with first ending in a stop character.} -% \begin{macrocode} -\def\NAT@bibitem@cont{% - \let\bibitem@Stop\bibitemContinue@Stop - \let\bibitem@NoStop\bibitemContinue -}% -% \end{macrocode} -% \begin{macrocode} -\def\bibitemNoStop{% - \@ifx@empty\@bibitemShut{.\spacefactor\@mmm\space}{\@bibitemShut}% -}% -% \end{macrocode} -% \begin{macrocode} -\def\bibitemContinue{% - \@ifx@empty\@bibitemShut{;\spacefactor\@mmm\space}{\@bibitemShut}% -}% -% \end{macrocode} -% \begin{macrocode} -\def\bibitemContinue@Stop{% - \@ifx@empty\@bibitemShut{\spacefactor\@mmm\space}{\@bibitemShut}% -}% -% \end{macrocode} -% -% \changes{4.1k}{2009/11/11}{(AO, 561) remove dead code relating to \cs{bibitemContinue}} -% We used to customize one of the productions of \classname{natbib}, but no longer. -% \begin{verbatim} -%\let\bibitemContinue\bibitemContinue@rtx -% \end{verbatim} -% -% Here ends the code to be executed at \cmd\rtx@require@packages\ time. -% \begin{macrocode} -}% -% \end{macrocode} -% \changes{4.1f}{2009/07/07}{(AO, 516) Merged references are separated with a semicolon} -% Redefine a macro of \classname{natbib} so that merged references are separated with a semicolon. -% \changes{4.1k}{2009/11/11}{(AO, 561) remove dead code relating to \cs{bibitemContinue}} -% \begin{verbatim} -% \def\bibitemContinue@rtx{;\spacefactor\@mmm\space}% -% \end{verbatim} -% -% \begin{macro}{\onlinecite} -% \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. -% -% Note that the society or journal substyle override the meanings of \cmd\@onlinecite\ or -% \cmd\@textcite\ given here. -% -% \begin{macrocode} -\DeclareRobustCommand\onlinecite{\@onlinecite}% -\DeclareRobustCommand\textcite{\@textcite}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\bibliography} -% \changes{4.1a}{2008/01/18}{(AO, 457) Endnotes to be sorted in with numerical citations.}% -% Provide a hook for supplying Bib\TeX\ a bibliographic database that may contain, say, -% footnotes. -% -% Note that Bib\TeX\ chokes if the argument of the \cmd\bibdata\ command has null fields, -% hence these tests. -% \begin{macrocode} -\let\bibliography@latex\bibliography -\def\bibliography#1{% - \auto@bib@empty - \begingroup - \let\auto@bib@innerbib\@empty - \@ifx@empty{\pre@bibdata}{% - \bibliography@latex{#1}% - }{% - \@if@empty{#1}{% - \expandafter\bibliography@latex\expandafter{\pre@bibdata}% - }{% - \expandafter\bibliography@latex\expandafter{\pre@bibdata,#1}% - }% - }% - \endgroup -}% -\let\pre@bibdata\@empty -% \end{macrocode} -% \end{macro} -% -% \begin{environment}{rtx@thebibliography}% -% \begin{macro}{\present@bibnote}% -% \changes{4.1f}{2009/07/11}{(AO, 521) Lonely bibliography head}% -% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}% -% \changes{4.1o}{2010/02/02}{(AO, 575) Automatically incorporate the (Bib\TeX-generated) .bbl into an explicit \env{thebibliography}}% -% \changes{4.1q}{2010/04/01}{(AO, 586) When .bbl is pasted into the document, prevent automatic bibliography inclusion.}% -% We put a tail patch into \cmd\thebibliogrphy\ and -% a headpatch into \cmd\endthebibliography. -% -% 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. -% -% We make provisions for the case where there are no \cmd\bibitem s -% for the bibliography: we produce no bibliography head at all. -% -% \begin{macrocode} -\newenvironment{rtx@thebibliography}[1]{% - \NAT@thebibliography{#1}% - \let\@TBN@opr\present@bibnote - \@FMN@list -}{% -% \end{macrocode} -% The following line was commented out: -% \begin{verbatim} -%\@endnotesinbib -% \end{verbatim} -% The \cmd\auto@bib@innerbib\ directive has been moved from the begin processing to the end processing. -% This means that the content of the \env{thebibliography} environment can itself prevent the -% automatic reading in of the .bbl file. This would be needed when the user has pasted in the -% content of the .bbl file into the document itself, something required by APS and AIP editorial direction. -% \begin{macrocode} - \auto@bib@innerbib - \edef\@currentlabel{\arabic{NAT@ctr}}% - \label{LastBibItem}% - \endNAT@thebibliography - \aftergroup\auto@bib@empty -}% -\def\present@bibnote#1#2{% - \item[% - \textsuperscript{% - \normalfont - \Hy@raisedlink{\hyper@anchorstart{frontmatter.#1}\hyper@anchorend}% - \begingroup - \csname c@\@mpfn\endcsname#1\relax - \frontmatter@thefootnote - \endgroup - }% - ]#2\par -% \end{macrocode} -% The following line was commented out: -% \begin{verbatim} -%\global\let\NAT@bibitem@first@sw\@secondoftwo -% \end{verbatim} -% \begin{macrocode} -}% -% \end{macrocode} -% \end{macro} -% \end{environment} -% -% \begin{macro}{write@bibliographystyle} -% \changes{4.1q}{2010/04/13}{(AO, 588) Only write \revtex-specific BibTeX .bib data if the .bst style is set by REVTeX.}% -% 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. -% -% The \cmd\bibstyle\ command is allowed appear quite late in the \file{.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). -% -% If the document lacks explicit \cmd\bibliographystyle\ markup, we execute -% \cmd\@bibdataout@rev, a hook for \revtex-aware processing. -% \begin{macrocode} -\def\write@bibliographystyle{% - \@ifxundefined\@bibstyle{}{% - \expandafter\bibliographystyle@latex\expandafter{\@bibstyle}% - \bibliographystyle@sw{}{\@bibdataout@rev}% - }% - \global\let\write@bibliographystyle\relax -}% -\AtEndDocument{\write@bibliographystyle}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rtx@@citetp} -% \begin{macro}{\rtx@citex} -% \begin{macro}{\super@cite@let} -% \begin{macro}{\super@cite@end} -% \begin{macro}{\super@cite@swap} -% We wish to extend \classname{natbib} to move spaces and citations around -% a superscript-style citation, imitating Donald Arseneau's \classname{cite} package -% with the \classoption{super}. -% -% The \cmd\rtx@@citetp\ procedure is substituted for \cmd\NAT@@citetp; -% it then calls the \cmd\rtx@citex\ procedure and implements the features of the -% \classoption{citeautoscript} class option. -% In the end, \cmd\@citex\ is called with its customary parameters. -% -% 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. -% -% Only citations set as superscript are affected by this procedure, -% because we check \cmd\@cite\ against \cmd\NAT@citesuper. -% -% Here's a subtle point: when is the argument of \cmd\super@cite@swap\ not the same as the token \cmd\@let@token? -% Answer: when the latter is \cmd\@sptoken! This case has to be handled separately. -% -% Note that whether a punctuation is movable is determined by the definition -% of a particular control sequence name. -% A society or journal can alter things: to remove a character from the set, -% do, say, \cmd\expandafter \cmd\let \cmd\csname \texttt{rtx@automove;} \cmd\endcsname \cmd\relax. -% To add a character to the set, do, say, \cmd\expandafter \cmd\let \cmd\csname \texttt{rtx@automove;} \cmd\endcsname \cmd\@empty. -% -% Implementation note: due to a \TeX\ peculiarity, we have to check for the case -% where \cmd\@let@token\ is a space token \emph{before} we parse forward. -% At issue is the corner case where an end of file is at hand. If we -% were to let \cmd\super@cite@swap\ parse forward, we would encounter a \TeX\ end-of-file -% error. Note that the test will be true in many distinct cases: -% the file ends, the next character is a line terminator, the next character is a space. -% \begin{macrocode} -\def\rtx@@citetp[#1]{\@ifnextchar[{\rtx@citex[#1]}{\rtx@citex[][#1]}}% -\def\rtx@citex[#1][#2]#3{% - \begingroup - \def\@tempa{[#1][#2]{#3}}% - \@ifx{\@cite\NAT@citesuper}{% - \leavevmode - \skip@\lastskip - \unskip - \super@cite@let - }{% - \super@cite@end - }% -}% -\def\super@cite@let{% - \futurelet\@let@token\super@cite@check -}% -\def\super@cite@end{% - \aftergroup\@citex\expandafter\endgroup\@tempa -}% -\def\super@cite@check{% - \@ifx{\@let@token\@sptoken}{% - \super@cite@end - }{% - \super@cite@swap - }% -}% -\long\def\super@cite@swap#1{% - \expandafter\@ifx\expandafter{\csname rtx@automove#1\endcsname\@empty}{% - #1% - \super@cite@let - }{% - \super@cite@end - #1% - }% -}% -\expandafter\let\csname rtx@automove.\endcsname\@empty -\expandafter\let\csname rtx@automove,\endcsname\@empty -\expandafter\let\csname rtx@automove:\endcsname\@empty -\expandafter\let\csname rtx@automove;\endcsname\@empty -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% The following must execute only after \classname{natbib} is loaded and has set -% up its parameters (which it does at \cmd\AtBeginDocument\ time). -% If superscript citations have been selected, and -% if the \classoption{citeautoscript} class option has been selected, -% we patch into \classname{natbib}'s mechanism to migrate punctuation around the -% citation, as in class \classname{cite} with the \classoption{superscript} option. -% \begin{macrocode} -\appdef\class@documenthook{% - \citeautoscript@sw{% - \@ifx{\@cite\NAT@citesuper}{% - \let\NAT@@citetp\rtx@@citetp - }{}% - }{}% -}% -% \end{macrocode} -% -% 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. -% -% \changes{4.1b}{2008/07/01}{(AO) No longer need to test \cs{chapter} as of \texttt{natbib} version 8.2} -% \begin{verbatim} -%\@ifx{\chapter\relax}{\let\chapter\@undefined}{}% -% \end{verbatim} -% -% -% \subsubsection{\cs{endnote}s and \cs{rtx@bibnote}s} -% -% \begin{macro}{\mini@note} -% \begin{macro}{\save@note} -% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}% -% QUERY: how do footnotes get thrown to the bibliography. \cmd\footinbib@sw\ appears to be irrelevant. -% \begin{macrocode} -\def\mini@note{\save@note\mini@notes}%Implicit #2 -\def\save@note#1#2{% - \stepcounter\@mpfn - \protected@xdef\@thefnmark{\thempfn}% - \@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 in the bibliography, or where \cmd\printendnotes\ appears. -% \begin{verbatim} -%\def\@endnote{% -% \begingroup -% \aftergroup\@footnotemark -% \aftergroup\@endnotetext -% \@ifnextchar[{% -% \@xendnote -% }{% -% \stepcounter{footnote}% -% \protected@xdef\@tempa{\thefootnote}% -% \expandafter\@xendnote\expandafter[\the\c@footnote]% -% }% -%}% -% \end{verbatim} -% \end{macro} -% -% \begin{macro}{\@xendnote} -% \changes{4.1a}{2008/01/18}{(AO, 457) Endnotes to be sorted in with numerical citations.}% -% \begin{verbatim} -%\def\unused@xendnote[#1]{% -% \begingroup -% \c@footnote#1\relax -% \end{macrocode} -% New for 4.1 -% \begin{macrocode} -% \unrestored@protected@xdef\@endnotelabel{Note\thefootnote}% -% \authoryear@sw{% -% \unrestored@protected@xdef\@thefnmark{\noexpand\ref{\@endnotelabel}}% -% }{% -% \unrestored@protected@xdef\@thefnmark{\@endnotelabel}% -% }% -% \end{macrocode} -% Was: -% \unrestored@protected@xdef\@thefnmark{endnote\thefootnote}% -% End 4.1 changes -% \begin{macrocode} -% \endgroup -% \endgroup -%}% -%\def\@endnotemark{% -% \expandafter\cite\expandafter{\@thefnmark}% -%}% -% \end{verbatim} -% \begin{macrocode} -\def\rev@citemark#1{% - \expandafter\cite\expandafter{\@thefnmark}% -}% -\def\rev@endtext#1{% - \let\@endnotelabel\@thefnmark - \@endnotetext -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\endnote@ext} -% \begin{macro}{\bibdata@app} -% \begin{macro}{\bibdata@ext} -% The macro \cmd\endnote@ext\ is the file extension for the auxiliary file holding footnotes. -% The \cmd\bibdata@app\ and \cmd\bibdata@ext\ macros are used to form the name of a -% Bib\TeX\ database file holding footnotes. -% \begin{macrocode} -\def\endnote@ext{.end}% -\def\bibdata@app{Notes}% -\def\bibdata@ext{bib}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@endnotetext} -% \changes{4.1a}{2008/01/18}{(AO, 457) Endnotes to be sorted in with numerical citations.}% -% The procedure \cmd\@endnotetext\ writes a Bib\TeX\ .bib file for the purpose -% of insering a footnote into the (numbered, unsorted) bibliography. -% -% We need to define \cmd\pre@bibdata\ to be -% \cmd\jobname\cmd\endnote@ext, and we probably should define \cmd\endnote@ext\ to -% be something like ``Notes.bib''. -% -% In each case, the material to be written out requires robustification, provided by \cmd\endnote@relax. -% The commands \cmd\label, \cmd\index, and \cmd\glossary, -% which are robustified for \cmd\markright\ and \cmd\addcontentsline, -% are likewise robustified here. -% -% Procedure \cmd\@endnotetext@note\ is the alias for \cmd\@endnotetext\ when the endnotes are to be -% processed separately from the bibliography (generally true when citations are not sorted). -% \begin{verbatim} -%\long\def\unused@endnotetext@note#1{% -% \@ifxundefined\@endnoteout{% -% \newwrite\@endnoteout -% \gdef\endnote@stream{\jobname\endnote@ext}% -% \immediate\openout\@endnoteout\endnote@stream\relax -% }{}% -% \begingroup -% \endnote@relax -% \immediate\write\@endnoteout{\string\@doendnote{\@endnotelabel}{#1}}% -% \endgroup -%}% -% \end{verbatim} -% -% \cmd\@doendnote\ is obsolete. -% \begin{verbatim} -%\def\@doendnote#1#2{\bibitem{#1}#2}% -% \end{verbatim} -% -% \changes{4.1o}{2010/02/05}{(AO, 579) Endnote shall comprise their own Bib\TeX\ entry type: @FOOTNOTE.} -% Procedure \cmd\@endnotetext\ is the operative procedure\ when the endnotes are to be -% collated in with the other references, typically true when numerical citations are being used. -% The technique involves writing a .bib file (\cmd\@bibdataout) with each endnote typed as -% a \texttt{@FOOTNOTE} entry. -% -% Timing note: doing \cmd\openout\ should be deferred until the beginning of the document, -% as is done here. This allows one to make a format (\filename{.fmt}) file out of this class. -% \begin{macrocode} -\long\def\@endnotetext#1{% - \begingroup - \endnote@relax - \immediate\write\@bibdataout{% - @FOOTNOTE{% - \@endnotelabel,% -% \end{macrocode} -% The \texttt{key} field is recommended in cases where there is no author (see \filename{btxdoc}). -% \begin{macrocode} - key="\@endnotelabel",% -% \end{macrocode} -% The \texttt{note} field is simply the content of the footnote. -% \begin{macrocode} - note="#1"% - }% - }% - \endgroup -}% -\newwrite\@bibdataout -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\endnote@relax} -% At \cmd\AtBeginDocument\ time, we open the job's \filename{.bib} file. -% -% Procedure \cmd\endnote@relax\ robustifies commands that ought not to be expanded when -% the endnote is written out. -% Note the similarity between \cmd\endnote@relax\ and \cmd\protected@write. -% \begin{macrocode} -\def\endnote@relax{% - \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~\relax -% \end{macrocode} -% \begin{verbatim} -%\let\protect\noexpand -% \end{verbatim} -% \begin{macrocode} - \let \protect \@unexpandable@protect - \newlinechar`\^^M% -% \end{macrocode} -% \begin{verbatim} -%\newlinechar`\ % -% \end{verbatim} -% \begin{macrocode} - \let\begin\relax \let\end\relax -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@bibdataout@init} -% \begin{macro}{\@bibdataout@aps} -% \changes{4.1o}{2010/02/10}{(AO, 580) Provide a document class option to turn off production of eprint field in bibliography.} -% \changes{4.1o}{2010/02/12}{(AO, 580) Control .bst at run time.}% -% \changes{4.1q}{2010/04/13}{(AO, 588) Only write \revtex-specific BibTeX .bib data if the .bst style is set by REVTeX.}% -%\changes{4.2b}{2018/12/26}{(MD) Improve control over display of e-print ids in bibliography.}% -% At \cmd\AtBeginDocument\ time, we open the job's \filename{.bib} file. -% The hook is available for use by a society to place its own @CONTROL record in the \cmd\@bibdataout\ stream. -% \begin{macrocode} -\appdef\class@documenthook{\@bibdataout@init}% -\def\@bibdataout@init{% - \immediate\openout\@bibdataout\pre@bibdata.\bibdata@ext\relax -}% -\def\@bibdataout@rev{% - \immediate\write\@bibdataout{% -% \end{macrocode} -% The entry that controls processing of the \filename{.bst} file has entry type \texttt{@CONTROL}. -% The citation key (REVTEX42Control) is effectively a version number, -% which the \filename{.bst} can use to interpret the bib entry. -% \begin{macrocode} - @CONTROL{% - REVTEX42Control% -% \end{macrocode} -% Say if we want the \texttt{eprint} field disabled. Otherwise accept the default of the \filename{.bst}. -% \begin{macrocode} - \eprint@enable@sw{}{,eprint="1"}% - }% - }% -% \end{macrocode} -% Place a \cmd\citation\ into the auxiliary file corresponding to this entry. -% \begin{macrocode} - \if@filesw - \immediate\write\@auxout{\string\citation{REVTEX42Control}}% - \fi -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\printendnotes} -% \changes{4.1f}{2009/07/10}{(AO, 520) Automatically produce \cs{bibliography} command when needed}% -% We have removed the endnotes facility from REVTeX, so the \cmd\printendnotes\ command now does nothing. -% -% Moving footnotes to the bibliogrphy is now accomplished through -% the automatic generation of a job BiB\TeX\ database (called \cmd\pre@bibdata) containing the footnotes. -% \begin{macrocode} -\def\printendnotes{% - \class@warn{The \string\printendnotes\space command no longer serves any function. Please remove it from your document.}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@endnotesinbib} -% \begin{macro}{\@endnotesinbibliography} -% \changes{4.1a}{2008/01/18}{(AO, 457) Endnotes to be sorted in with numerical citations.}% -% 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. -% -% Note that this code make the assumption that -% the counter used in \env{thebibliography} is \cmd\c@NAT@ctr. -% \changes{4.1f}{2009/07/10}{(AO, 520) Automatically produce \cs{bibliography} command when needed}% -% -% Here is the sole place where \cmd\footinbib@sw\ has an effect, other code simple assigning its value. -% If it is false, or \cmd\authoryear@sw\ is true, then footnotes are handled by the default mechanism. -% \begin{macrocode} -\def\make@footnote@endnote{% - \footinbib@sw{% - \authoryear@sw{}{% - \ltx@footnote@push - \def\thempfn{Note\thefootnote}% - \let\ltx@footmark\rev@citemark - \let\ltx@foottext\rev@endtext -% \end{macrocode} -% The endnotes facility has been removed. -% Also, there is no need to queue up \cmd\auto@bib\ here, since it is always queued up elsewhere. -% \changes{4.1f}{2009/07/10}{(AO, 520) Automatically produce \cs{bibliography} command when needed}% -% \begin{verbatim} -% \appdef\class@enddocumenthook{\auto@bib}% -% \let\printendnotes\relax -% \end{verbatim} -% \begin{macrocode} - }% - }{}% -}% -% \end{macrocode} -% -% \begin{macrocode} -\def\ltx@footnote@push{% - \let\ltx@footmark@latex\ltx@footmark - \let\ltx@foottext@latex\ltx@foottext - \let\thempfn@latex\thempfn - \def\ltx@footnote@pop{% - \let\ltx@footmark\ltx@footmark@latex - \let\ltx@foottext\ltx@foottext@latex - \let\thempfn\thempfn@latex - }% -}% -% \end{macrocode} -% -% The switchover to setting footnotes in the bibliography -% changes the meaning of \cmd\footnote\ and -% substitutes the synonym for \cmd\@endnotesinbib. -% -% We arrange for the procedure \cmd\make@footnote@endnote\ to be executed -% at \cmd\class@documenthook\ time (we mustn't do this earlier because -% the meaning of \cmd\@footnotemark\ must not be changed before then, -% for the sake of \file{ltxutil.dtx}). -% \begin{macrocode} -\appdef\class@documenthook{% - \make@footnote@endnote -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\auto@bib} -% \begin{macro}{\auto@bib@empty} -% \begin{macro}{\test@bbl@sw} -% \begin{macro}{\bibitem@set} -% \begin{macro}{\auto@bib@innerbib} -% \begin{macro}{\thebibliography@nogroup} -% \changes{4.1f}{2009/07/10}{(AO, 520) Automatically produce \cs{bibliography} command when needed}% -% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}% -% \changes{4.1o}{2010/02/02}{(AO, 575) Automatically incorporate the (Bib\TeX-generated) .bbl into an explicit \env{thebibliography}}% -% Under some circumstances, we must typeset the bibliography automatically. -% If the document requires footnotes to be set in the bibliography (effectively, class option \texttt{footinbib}), -% or that frontmatter footnotes be set in the bibliography (effectively, class option \texttt{bibnotes}), -% but contains no explicit \cmd\bibliography\ statement. -% -% 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. -% -% In procedure \cmd\auto@bib, we first test for the presence of frontmatter footnotes deferred to the bibliography. -% If none, we further test for the presence of \cmd\bibitem\ commands in the job's \filename{.bbl} file. -% If either condition is met, we ask for a bibliography. -% We know that the document itself lacks a \cmd\bibliography\ statement, -% so we know the argument of the \cmd\bibliography\ that we will issue. -% \begin{macrocode} -\def\auto@bib{% - \@ifx@empty\@FMN@list{% - \footinbib@sw{% - \@ifnum{\csname c@\@mpfn\endcsname>\z@}{% - \true@sw - }{% - \test@bbl@sw - }% - }{% - \test@bbl@sw - }% - }{% - \true@sw - }% - {% - \bibliography{}% - }{}% -}% -\def\auto@bib@empty{% - \let\auto@bib\@empty -}% -% \end{macrocode} -% Testing the \filename{.bbl} file involves defanging all expected commands -% and processing that file inside a box register (that will be simply discarded). -% We provide a new meaning for the \cmd\bibitem\ command: it queues a Boolean. -% \begin{macrocode} -\def\test@bbl@sw{% - \setbox\z@\vbox\bgroup - \let\providecommand\providecommand@j@nk - \let\bibfield\@gobbletwo - \let\bibinfo\@gobbletwo - \let\translation\@gobble - \let\BibitemOpen\@empty - \let\bibitemStop\@empty - \let\bibitemNoStop\@empty - \let\EOS\@empty - \let\BibitemShut\@gobble - \let\bibAnnoteFile\@gobbletwo - \let\bibAnnote\@gobblethree - \let\textbf\@gobble - \let\emph\@gobble - \@booleanfalse\bibitem@sw - \let\bibitem\bibitem@set - \auto@bib@innerbib - \bibitem@sw{\aftergroup\true@sw}{\aftergroup\false@sw}% - \egroup -}% -% \end{macrocode} -% The \cmd\bibitem@set\ is an alias for \cmd\bibitem\ for the purpose of detecting a non-trivial bibliography. -% \begin{macrocode} -\newcommand\bibitem@set[1][]{% - \bibitem@sw{}{% - \@booleantrue\bibitem@sw - \aftergroup\@booleantrue\aftergroup\bibitem@sw - }% -}% -% \end{macrocode} -% The \cmd\auto@bib@innerbib\ procedure reads in the \filename{.bbl} file (if it exists) -% within a context where its \env{thebibliography} environment does nothing, not even establishing a group. -% \begin{macrocode} -\def\auto@bib@innerbib{% - \begingroup - \let@environment{thebibliography}{thebibliography@nogroup}% - \bibliography{}% - \endgroup -}% -% \end{macrocode} -% Environment \env{thebibliography@nogroup} is an alias of the \env{thebibliography} environment that cancels itself. -% It assumes that it is called within a \env{thebibliography} environment. -% \begin{macrocode} -\def\thebibliography@nogroup#1{% - \endgroup - \def\@currenvir{thebibliography}% -}% -\def\endthebibliography@nogroup{\begingroup}% -% \end{macrocode} -% The following should be part of \filename{ltxutil}. -% \begin{macrocode} -\long\def \@gobblethree #1#2#3{}% -\def\providecommand@j@nk#1[#2]{% - \@ifnum{#2=\z@}{\def\j@nk}{% - \@ifnum{#2=\@ne}{\def\j@nk##1}{% - \@ifnum{#2=\tw@}{\def\j@nk##1##2}{% - \@ifnum{#2=\thr@@}{\def\j@nk##1##2##3}{% - }% - }% - }% - }% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \section{Initial setup} -% -% The standard LaTeX document classes execute certain commands -% that are best deferred until \cmd\class@documenthook\ time. -% Here, we effectively split \cmd\pagenumbering\ into two halves, -% with a default definition for \cmd\thepage -% and an initialization of \cmd\c@page\ at \cmd\class@documenthook\ time. -% -% The meaning of \cmd\thepage\ can be overridden by society, journal, or -% anywhere within the document pramble, and the counter itself will be -% preset at the beginning of the document. -% \begin{macrocode} -\def\thepage{\@arabic\c@page}% -% \end{macrocode} -% \changes{4.0b}{1999/06/20}{Defer assignment until \cs{AtBeginDocument} time.} -% Note that this code is executed at \cmd\setup@hook\ time -% to allow for the possibility of overrides by packages like \classname{geometry}. -% \begin{macrocode} -\appdef\setup@hook{% - \tabbingsep \labelsep - \leftmargin\leftmargini - \labelwidth\leftmargin\advance\labelwidth-\labelsep - \let\@listi\@listI - \@listi -}% -% \begin{macrocode} -% -% We ensure that the ``environment'' component mark (implemented by \file{ltxgrid.dtx}) -% is initialized properly (via a hook, itself defined via \file{ltxutil.dtx}). -% \begin{macrocode} -\appdef\class@documenthook{% - \global\c@page\@ne - \def\curr@envir{document}% - \mark@envir{\curr@envir}% -}% -% \end{macrocode} -% -% \begin{macro}{\open@onecolumn}% -% \begin{macro}{\open@column@two}% -% \changes{4.0c}{1999/11/13}{Grid changes with ltxgrid} -% \changes{4.0d}{2000/04/10}{Also alter how lists get indented.} -% When setting the column grid, we have to override the procedure -% for formatting lists. -% Because \cmd\twocolumngrid\ requires rebalancing columns at some points, -% typesetting must employ only the manipulation of -% \cmd\leftskip\ and \cmd\rightskip, and must avoid the use of -% \cmd\moveleft, \cmd\moveright, and \cmd\parshape. -% -% It is one of the stranger features of \TeX\ that these two separate -% mechanisms exist. The latter three have the effect of adding things to the -% Main Vertical List that cannot be removed and later added back with all their -% properties intact. -% -% In detail, \cmd\moveleft, say, adds a box to the MVL with -% its reference point shifted horizontally by some amount relative to the -% reference point of the enclosing list. If that box is removed from the -% MVL (via a \cmd\lastbox\ operation in the output routine), and later -% thrown back to the MVL, the shift of the box will have been ``forgotten'' by \TeX. -% This is a bug, but not one ``acceptible to D. E. Knuth'', so it will never be fixed. -% -% \begin{macrocode} -\def\open@onecolumn{% - \open@column@one\@ne - \set@colht - \@floatplacement - \@dblfloatplacement -}% -\def\open@twocolumn{% - \open@column@mlt\tw@ - \set@colht - \@floatplacement - \@dblfloatplacement - \sloppy - \let\set@listindent\set@listindent@ -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \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{4.0b}{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}% -% \begin{macro}{\close@column}% -% Provide default meanings for \cmd\title@column\ and \cmd\close@column, -% in case they were never defined. -% Note that the society or journal substyle may define -% \cmd\title@column\ or \cmd\close@column: this code will not override. -% \begin{macrocode} -\def\title@column#1{% - \minipagefootnote@init - #1% - \minipagefootnote@foot -}% -\def\close@column{% - \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 that both \cmd\twocolumn@sw\ and \cmd\preprintsty@sw\ 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{4.0c}{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{4.0c}{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. -% \begin{macrocode} -\def\title@column@grid#1{% - \minipagefootnote@init - \onecolumngrid - \begingroup - \let\@footnotetext\frontmatter@footnotetext -%<ignore> \let\set@footnotewidth\set@footnotewidth@two - \ltx@no@footnote - #1% - \endgroup - \twocolumngrid - \minipagefootnote@foot -}% -\def\close@column@grid{% - \balancelastpage@sw{% - \onecolumngrid -%<ignore> \twocolumngrid - }{}% -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{environment}{widetext@grid} -% \changes{4.0c}{1999/11/13}{grid changes via ltxgrid procedures} -% \changes{4.0e}{2000/11/21}{adornments above and below.} -% \changes{4.1g}{2009/10/07}{(AO, 525) Remove phantom paragraph above display math that is given in vertical mode}% -% 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. -% \changes{4.1n}{2010/01/02}{(AO) fine-tune spacing above and below widetext}% -% \begin{macrocode} -\newenvironment{widetext@grid}{% - \par\ignorespaces - \setbox\widetext@top\vbox{% -%<ignore> \vskip15\p@ - \hb@xt@\hsize{% - \leaders\hrule\hfil - \vrule\@height6\p@ - }% -%<ignore> \vskip6\p@ - }% - \setbox\widetext@bot\hb@xt@\hsize{% - \vrule\@depth6\p@ - \leaders\hrule\hfil - }% - \onecolumngrid - \vskip10\p@ - \dimen@\ht\widetext@top\advance\dimen@\dp\widetext@top - \cleaders\box\widetext@top\vskip\dimen@ -%<ignore> \let\set@footnotewidth\set@footnotewidth@two - \vskip6\p@ - \prep@math@patch -}{% - \par - \vskip6\p@ - \setbox\widetext@bot\vbox{% - \hb@xt@\hsize{\hfil\box\widetext@bot}% -%<ignore> \vskip14\p@ - }% - \dimen@\ht\widetext@bot\advance\dimen@\dp\widetext@bot - \cleaders\box\widetext@bot\vskip\dimen@ - \vskip8.5\p@ - \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} -\def\set@page@grid{% - \twocolumn@sw{% -% \end{macrocode} -% The following two assignments determine what procedures are to be executed when -% the footnote set width is calculated, and how footnotes are to be composed at the bottom of the page. -% A society or journal wishing to do otherwise will override this code. -% \begin{macrocode} - \let\set@footnotewidth\set@footnotewidth@two - \let\compose@footnotes\compose@footnotes@two - \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 - }{}% - }% - }% -}% -\appdef\setup@hook{\set@page@grid}% -% \end{macrocode} -% -% \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\ had been used in \cmd\printendnotes. -% \changes{4.1f}{2009/07/10}{(AO, 520) Automatically produce \cs{bibliography} command when needed}% -% However, we have removed the endnotes facility from REVTeX. -% -% \begin{verbatim} -%\def\notesname{Notes} -% \end{verbatim} -% \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{4.0b}{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{4.0b}{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 define 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{4.0d}{2000/04/10}{eprint takes an optional argument, syntactical only in this case.} -%FIXME: \cmd\bibinfo? -% \begin{macrocode} -\let\text\REV@text -\let\bm\REV@bm -\appdef\setup@hook{% - \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} -\appdef\rtx@require@packages{% - \RequirePackage{revsymb4-2}% -}% -\appdef\class@documenthook{\revsymb@inithook}% -% \end{macrocode} -% -% -% \section{Corrected Indentation for \texttt{tableofcontents}} -% \changes{4.2a}{2014/12/31}{(MD, Aptara) Make titles in bibliography default, prb style to follow other Phys. Rev. journals, add a unified physrev option as well as prx, prapplied, prmaterials, prfluids, prab, and prper options. Corrected indentation for tableofcontents appearing along with listoffigure/listoftable.}% -% -% Corrected indentation for \texttt{tableofcontents}, when appearing with \texttt{listoffigure} or \texttt{listoftable}. -% -% \begin{macrocode} -%% -\def\@startflt#1{% - \begingroup - %\toc@pre - \makeatletter - \@input{\jobname.#1}% - \if@filesw - \expandafter\newwrite\csname tf@#1\endcsname - \immediate\openout \csname tf@#1\endcsname \jobname.#1\relax - \fi - \@nobreakfalse - %\toc@post - \endgroup -}% -\def\att@TOC{toc}% -\def\print@toc#1{% - \begingroup - \expandafter\section - \expandafter*% - \expandafter{% - \csname#1name\endcsname - }% - \let\appendix\appendix@toc - \def\tempa{#1}% - \ifx\tempa\att@TOC%% - \@starttoc{#1}% - \else%% - \@startflt{#1}%% - \fi%% - \endgroup -}% -%% -% \end{macrocode} -% -% -% \section{Patches for lineno.sty} -% -% The \classname{lineno} package detects the case where the package has been loaded -% and the document invokes \cmd\linelabel, but the \cmd\linenumbers\ command has not been -% issued: it treats this case as an error. -% -% It is wrong for validity of document syntax to be dependent upon package semantics: -% we make the condition a warning rather than an error. -% -% \begin{macrocode} -\def\@LN@LLerror@org{% - \PackageError{lineno}{% - \string\linelabel\space without \string\linenumbers - }{% - Just see documentation. (New feature v4.11)% - }% - \@gobble -}% -\def\@LN@LLerror@ltx{% - \PackageWarning{lineno}{% - To make the \string\linelabel\space command work, you must issue the \string\linenumbers\ command - }% - \@gobble -}% -% \end{macrocode} -% -% If appropriate, enable line numbering within the abstract. -% -% This mechanism applies generally: -% Create the box in a context in which the meaning of \cmd\par\ has been patched by \classname{lineno}, -% then \cmd\unvbox\ the box in a context where \cmd\set@linepenalties\ has been executed, and -% follow up with \cmd\@linenumberpar, which forces a visit to the output routine just there. -% Note that here, we have to de-fang \cmd\@LN@parpgbrk, which would otherwise causes the appearance -% of a box with depth -1000 points. Go figure. -% \begin{macrocode} -\appdef\class@documenthook{% - \@ifx{\@LN@LLerror\@LN@LLerror@org}{% - \class@info{Overriding \string\@LN@LLerror}% - \let\@LN@LLerror\@LN@LLerror@ltx - }{}% - \@ifpackageloaded{lineno}{% - \@ifxundefined{\set@linepenalties}{}{% - \def\prep@absbox{\set@linepenalties}% - \def\post@absbox{\let\@LN@parpgbrk\@empty\@linenumberpar}% - }% - }{}% -}% -% \end{macrocode} -% -% One may well ask: how to obtain line numbering within an alignment in a float? -% This objective, along with line numbering within footnotes, would require extraordinary measures. -% The float would have to be thrown onto the MVL in order to acquire its line numbers, but -% that fragment of MVL would then have to be protected from being shipped out. -% The question of how to coordinate those lines' numbers with those of lines in the MVL would -% also require dealing with. -% -% \section{Endgame for the Document Class} -% -% We provide for a ``job macro package'' that can override -% definitions and assignments made by the class or any other packages it loads. -% -% \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, -% \file{clsguide.tex} or read up on the subject -% in a book like the \LaTeX\ Companion. -% -% The file \file{template.rty} contains a template for -% creating your own job macro package. -% -% \begin{macrocode} -\appdef\rtx@require@packages{% - \InputIfFileExists{\jobname.rty}{}{}% -}% -% \end{macrocode} -% -% \subsection{Endgame Processing for the Document Class} -% -% The remaining steps in processing the document class involve -% determining the needed society, journal, and pointsize from -% the document's class options and inputting the needed files or -% executing the indicated procedures. -% -% Note that the society file is expected to declare options that will -% allow us to determine the journal involved, and the society and journal -% themselves determine the which pointsize options are declared, along with -% their meanings. -% -% Note also that required packages are read in only after the document options -% have been processed, because the latter can affect the former. -% -% Finally, the setup code is executed: this is code that depends on the -% meanings of the switches we define and on the code within the packages we load. -% -% Note that there are other hooks in use: \cmd\document@inithook, which is -% executed right at the beginning of the document, and \cmd\class@documenthook, -% which serves as a vehicle for any \cmd\AtBeginDocument\ code we might wish to -% execute. -% -%FIXME: use \cmd\class@documenthook\ only for things that bear on the MVL; -% use \cmd\document@inithook\ for all patches to procedures defined within the preamble. -% -% Remember that \classname{natbib} changes its state at \cmd\AtBeginDocument\ time, -% so we have to install our own code at a later point in the processing. -% -% We determine the proper \cmd\@society\ by examining the document's class options. -% \begin{macrocode} -\@parse@class@options@society -% \end{macrocode} -% -% Then, we input the society's substyle -% (which may in turn lead to loading a journal substyle or a pointsize substyle). -% The substyle should not assume the value of any class option: -% instead, it should install code into \cmd\setup@hook. -% \begin{macrocode} -\@process@society{aps}% -% \end{macrocode} -% -% Now that the society has defined the class options relating to journals, -% and has defined \cmd\@journal@default, we can process the journal substyle. -% We parse the options for one that sets \cmd\@journal. -% \begin{macrocode} -\@parse@class@options@\@journal -% \end{macrocode} -% And we process the journal. -% Note that \emph{it is an error} for a society file to fail to define -% \cmd\@journal@default. -% -% \begin{macrocode} -\expandafter\@process@journal\expandafter{\@journal@default}% -% \end{macrocode} -% -% Now that the society and journal have finished defining any options relating to -% point size, we process the class options for any that set \cmd\@pointsize. -% \begin{macrocode} -\@parse@class@options@\@pointsize -% \end{macrocode} -% And we process the pointsize. -% Note that it is an error for the society and journal to leave \cmd\@pointsize@default\ -% undefined at this point, however, the journal may have overriden the assignment of the society. -% -% \begin{macrocode} -\expandafter\@process@pointsize\expandafter{\@pointsize@default}% -% \end{macrocode} -% -% Next, we process the class options for once and all. -% Doing so sets values for some of the Booleans that were introduced along with -% the \cmd\DeclareOption\ statements above. -% -%CHANGE: We process the options in the order declared in the document; this -% gives the document greater control. -% -% \begin{macrocode} -\@options -% \end{macrocode} -% -% Now that the class options have been processed, we can load all the -% packages that we know need loading. -% \begin{macrocode} -\rtx@require@packages -% \end{macrocode} -% -% At this point, the society substyle, the journal substyle, and the -% pointsize have all been processed, along with the document class options. -% Some of these have left things for later; we do these now. -% -% \begin{macro}{\setup@hook} -% -% This portion of the code for this class file -% \emph{must} appear at the very end: -% The procedure -% \cmd\setup@hook\ -% should be executed at the very end of the class file. -% Any code that relies on the value of any of the \texttt{@sw} switches -% or will patch the code of one of the required packages -% should be executed here. -%\changes{4.2a}{2017/11/28}{(MD) Add call to \normalsize to be a good citizen and allow booktabs.sty to work properly} -% -% \begin{macrocode} -\appdef\setup@hook{\normalsize}% -\setup@hook -% \end{macrocode} -% \end{macro} -% -% -% Warn if past maturation date. This code to be enabled only in beta software. -% \changes{4.1f}{2009/07/11}{(AO, 522) Warn if software is expired}% -% \changes{4.1h}{2009/10/09}{(AO) Remove expiry code in the release software}% -% \begin{macrocode} -%<*ignore> - \def\rtx@fin@year{2010}% - \def\rtx@fin@month{01}% - \def\rtx@fin@day{01}% - \def\rtx@fin@warn{% - \@ifnum{\rtx@fin@year>\the\year\relax}{\true@sw}{% - \@ifnum{\rtx@fin@month>\the\month\relax}{\true@sw}{% - \@ifnum{\rtx@fin@day>\the\day\relax}{\true@sw}{% - \false@sw - }% - }% - }% - {% - \class@info{Beta software expires \rtx@fin@year-\rtx@fin@month-\rtx@fin@day; updates available at https://journals.aps.org/revtex/}% - }{% - \class@warn{Outdated software expired \rtx@fin@year-\rtx@fin@month-\rtx@fin@day; please retrieve an update at https://journals.aps.org/revtex/}% - }% - }% -%</ignore> -% \end{macrocode} -% In shipping (non-beta) software, the following line should be commented out. -% \changes{4.1f}{2009/07/11}{(AO, 522) Warn if software is expired}% -% \begin{verbatim} -%\appdef\class@enddocumenthook{\rtx@fin@warn}% -% \end{verbatim} -% -% End of the class file. -% \begin{macrocode} -%</package> -% \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{4.0a}{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{4.0b}{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}{\revsymb@inithook} -% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.} -% Package dependencies are taken care of at \cmd\setup@hook\ 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{4.0b}{1999/06/20}{AO: all code for \protect\classoption{10pt} is in this module.} -% The file \file{aps10pt.rtx} is read in by the \classname{revtex4} document class -% if \cmd\@pointsize\ has the value 10. -% -% \begin{macrocode} -%<*10pt> -% \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 - \class@info{RevTeX pointsize 10pt selected}% -% \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} -% -% The values of these margin parameters are dependent upon -% \cmd\twoside@sw; any society or journal that -% has its own preferences should override these assignments -% by doing \cmd\appdef\cmd\setup@hook. -% \begin{macrocode} -\appdef\setup@hook{% - \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} -% -% \changes{4.1n}{2010/01/02}{(AO, 571) class file must set \cs{splittopskip}; fine tune \cs{skip}\cs{footins}; \cs{footnoterule} defined in terms of \cs{skip}\cs{footins}}% -% \begin{macrocode} -\topskip 10pt -\splittopskip\topskip -% \end{macrocode} -% -% \begin{macrocode} -\footskip 30pt -% \end{macrocode} -% -% \begin{macrocode} - \textheight = 56pc -% \end{macrocode} -% -% \begin{macrocode} -\textwidth42.5pc -% \end{macrocode} -% -% \begin{macrocode} -\columnsep 1.5pc -\columnseprule 0pt -% \end{macrocode} -% -% \changes{4.1n}{2010/01/02}{(AO, 571) class file must set \cs{splittopskip}; fine tune \cs{skip}\cs{footins}; \cs{footnoterule} defined in terms of \cs{skip}\cs{footins}}% -% \begin{macrocode} -\footnotesep 1pt -\skip\footins 39pt plus 4pt minus 12pt -\def\footnoterule{% - \dimen@\skip\footins\divide\dimen@\tw@ - \kern-\dimen@\hrule width.5in\kern\dimen@ -}% -% \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{4.0b}{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} -% -% \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 - \class@info{RevTeX pointsize 11pt selected}% -% \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{4.0b}{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} -% -% \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 - \class@info{RevTeX pointsize 12pt selected}% -% \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\setup@hook{% - \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} -% -% \changes{4.1n}{2010/01/02}{(AO, 571) class file must set \cs{splittopskip}; fine tune \cs{skip}\cs{footins}; \cs{footnoterule} defined in terms of \cs{skip}\cs{footins}}% -% \begin{macrocode} -\topskip 10pt -\splittopskip\topskip -% \end{macrocode} -% -% \begin{macrocode} -\footskip 30pt -% \end{macrocode} -% -% \begin{macrocode} -\textheight=665.5\p@ -% \end{macrocode} -% -% \begin{macrocode} -\appdef\setup@hook{% - \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} -% -% \changes{4.1n}{2010/01/02}{(AO, 571) class file must set \cs{splittopskip}; fine tune \cs{skip}\cs{footins}; \cs{footnoterule} defined in terms of \cs{skip}\cs{footins}}% -% \begin{macrocode} -\footnotesep 1pt -\skip\footins 25.25pt plus 4pt minus 12pt -\def\footnoterule{% - \dimen@\skip\footins\divide\dimen@\f@ur - \kern-\dimen@\hrule width.5in\kern\dimen@ -}% -% \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 extension: the \texttt{aps} module} -% \changes{4.0b}{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.) -% -% This class extension file is a model for a class extension you might write yourself. -% -% First, incorporate a \cmd\ProvidesFile\ command with an optional argument giving -% the version information, e.g., -% \begin{verbatim} -% \ProvidesFile{foo}[2001/09/11 v1.1 Docinfo]% -% \end{verbatim} -% -% Within the society substyle, there are two things we must do as well: -% define the default journal, -% \begin{verbatim} -% \def\@journal@default{pra}% -% \end{verbatim} -% And do likewise for the point size: -% \begin{verbatim} -% \def\@pointsize@default{10}% -% \end{verbatim} -% -% We first define some text entities (amounting to journal abbreviations), -% then some APS-specific initializations, -% then code for particular APS journals. -% In the latter case, the choice is -% keyed off the macro \cmd\@journal. -% -% \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 - \class@info{RevTeX society APS selected}% -% \end{macrocode} -% -% Here are the class options relating to the APS: -% \begin{macrocode} -\DeclareOption{pra}{\change@journal{pra}}% -\DeclareOption{prb}{\change@journal{prb}}% -\DeclareOption{prc}{\change@journal{prc}}% -\DeclareOption{prd}{\change@journal{prd}}% -\DeclareOption{pre}{\change@journal{pre}}% -\DeclareOption{prl}{\change@journal{prl}}% -%\changes{4.2b}{2017/11/21}{(MD) Update options for new titles without "Special Topics" and make prper match style of other journal options} -\DeclareOption{prab}{\change@journal{prab}}% -\DeclareOption{prper}{\change@journal{prper}}% -\DeclareOption{rmp}{\change@journal{rmp}}% -%\changes{4.2b}{2017/11/21}{(MD) Add options for new APS journals and a generic physrev option for future-proofing} -\DeclareOption{prx}{\change@journal{prx}}% -\DeclareOption{prapplied}{\change@journal{prapplied}}% -\DeclareOption{prmaterials}{\change@journal{prmaterials}}% -\DeclareOption{prfluids}{\change@journal{prfluids}}% -\DeclareOption{physrev}{\change@journal{physrev}}% -% \end{macrocode} -% -% \subsection{Abbreviations}% -% \changes{4.1p}{2010/02/24}{(AO, 584) Per MD, remove trailing space character from each journal abbreviation: it had caused an extraneous space in the .bbl} -% The following macros constitute typing shortcuts for -% certain journal names. -% \begin{macrocode} -\def\adv{AIP Advances}% -\def\ao{Appl.\ Opt.}% -\def\ap{Appl.\ Phys.}% -\def\apl{Appl.\ Phys.\ Lett.}% -\def\apm{Appl.\ Phys.\ Lett.\ Mater.}% -\def\apj{Astrophys.\ J.}% -\def\bell{Bell Syst.\ Tech.\ J.}% -\def\bmf{Biomicrofluidics}% -\def\cha{Chaos}% -\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\jap{J.\ Appl.\ Phys.}% -\def\jmp{J.\ Math.\ 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\jpr{J.\ Phys.\ Chem.\ Ref.\ Data}% -\def\ltp{Low.\ Temp.\ Phys.}% -\def\nat{Nature (London)}% -\def\oc{Opt.\ Commun.}% -\def\ol{Opt.\ Lett.}% -\def\pl{Phys.\ Lett.}% -\def\pop{Phys.\ Plasmas}% -\def\pof{Phys.\ Fluids}% -\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\rsi{Rev.\ Sci.\ Instrum.}% -\def\rse{J.\ Renewable Sustainable Energy}% -\def\pspie{Proc.\ Soc.\ Photo-Opt.\ Instrum.\ Eng.}% -\def\sjqe{Sov.\ J.\ Quantum Electron.}% -\def\vr{Vision Res.}% -\def\sd{Structural\ Dynamics}% -\def\jor{J.\ Rheol.}% -\def\cp{AIP\ Conference\ Proceedings}% -% \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. -% The definition in \filename{fixltx2e.sty} serves as a guide to the new way to symbol, -% working in both text- and math modes. -% -% \filename{fixltx2e.sty} duplicates some features of \filename{ltxgrid} and \filename{ltxutil}, -% however, so it may be incompatible with \revtex. -% In case it is not loaded, we must provide a meaning for \cmd\TextOrMath, -% which that package makes robust. -% I believe that it is \cmd\@fnsymbol\ itself that ought to be robustified. -% e\TeX\ further complicates matters; we do not especially accomodate it. -% -% \changes{4.1d}{2009/03/27}{Definition of \cs{ @fnsymbol} follows fixltx2e.sty} -% -% Not! \cmd\TextOrMath\ must be made robust in any case (Bug 530). I return things to follow -% core \LaTeXe\ (\filename{latex.ltx}). -% \changes{4.1f}{2009/10/05}{(AO, 530) \cs{@fnsymbol}: Failed to import fixltx2e.sty technology. Return to LaTeX core.} -% \changes{4.2f}{2022/06/05}{(PHO) \cs{@fnsymbol}: Correct \cs{ifcase} nesting logic.} -% \begin{macrocode} -\def\@fnsymbol#1{% - \ensuremath{% - \ifcase#1\or - *\or - \dagger\or - \ddagger\or - \mathsection\or - \mathparagraph\or -% \|\or - **\or - \dagger\dagger\or - \ddagger\ddagger\or - \mathsection\mathsection\or - \mathparagraph\mathparagraph\or - ***\or - \dagger\dagger\dagger\or - \ddagger\ddagger\ddagger\or - \mathsection\mathsection\mathsection\or - \mathparagraph\mathparagraph\mathparagraph - \else - \@ctrerr - \fi - }% -}% -\appdef\document@inithook{% - \@ifxundefined\TextOrMath{% - \DeclareRobustCommand\TextOrMath{\@ifmmode{\false@sw}{\true@sw}}% - }{}% -}% -\let\thefootnote@latex\thefootnote -% \end{macrocode} -% \end{macro} -% -% We assign the default titlepage style for APS; a journal or document instance -% may override by invoking one of the other \cmd\clo@... procedures defined in \revtex. -% \begin{macrocode} -\clo@groupedaddress -% \end{macrocode} -% -% \begin{macro}{\titlepage} -% \begin{macrocode} -\renewenvironment{titlepage}{% - \let\wastwocol@sw\twocolumn@sw - \onecolumngrid - \newpage - \thispagestyle{titlepage}% - \c@page\z@ -% \end{macrocode} -% A comment: ``article.cls sets this to one not zero?'' -% \begin{macrocode} -}{% - \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{4.0c}{1999/11/13}{(AO, 123) add parskip to the abstract.} -% \changes{4.1e}{2008/06/29}{(AO, 455) be nice to a list within 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@ - }% - \@totalleftmargin\leftskip -}% -% \end{macrocode} -% \end{macro} -% -%\changes{4.2b}{2017/11/22}{(MD) Change default to not use a title page - it seems antiquated} -% All APS journal preprints use separate titlepage and full-width abstract. -% -% In effect, we establish a society default value for \cmd\preprintsty@sw, -% and for \cmd\titlepage@sw. -% \begin{macrocode} -\@booleanfalse\preprintsty@sw -\@booleanfalse\titlepage@sw -% \end{macrocode} -% -% We choose the page style for all APS journals. -% The journal may override by inserting its own code in \cmd\setup@hook. -% Users wishing to customize their documents will be able to invoke a \cmd\pagestyle\ -% command anywhere in the preamble; it will override the assignments here. -% -% Here is the big switch for APS preprints. Note that \cmd\preprintsty@sw -% is also consulted in various procedures, but we assume its value does -% not change after \cmd\setup@hook\ time. -% \begin{macrocode} -\appdef\setup@hook{% - \preprintsty@sw{% - \ps@preprint - \def\frontmatter@abstractwidth{\textwidth}% - \def\frontmatter@affiliationfont{\it}% - \let\section\section@preprintsty -% \end{macrocode} -% The following line of code had been commented out at this point. -% \begin{verbatim} -% \let\@hangfrom@section\@hangfrom@section@preprintsty -% \end{verbatim} -% \begin{macrocode} - \let\subsection\subsection@preprintsty - \let\subsubsection\subsubsection@preprintsty - }{% - \ps@article - }% -}% -% \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@ -% \end{macrocode} -% The following line of code had been commented out at this point. -% \begin{verbatim} -%\preprintsty@sw{}{% -% \addvspace{0\p@}% -%}% -% \end{verbatim} -% \begin{macrocode} -}% -% \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{% -% \end{macrocode} -% The following line of code had been commented out at this point. -% \begin{verbatim} -%\preprintsty@sw{}{% -% \addvspace{11\p@}% -%}% -% \end{verbatim} -% \begin{macrocode} -}% -% \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{}{% -% \end{macrocode} -% The following line of code had been commented out at this point. -% \begin{verbatim} -% \addvspace{12\p@}% -% \end{verbatim} -% \begin{macrocode} - }% -}% -% \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} -% -% \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 -% \end{macrocode} -% The following line of code had been commented out at this point. -% \begin{verbatim} -% \preprintsty@sw{}{\parskip.5ex\relax}% -% \end{verbatim} -% \begin{macrocode} - \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{4.0a}{1998/06/10}{multiple preprint commands} -% \changes{4.0b}{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{4.0c}{1999/11/13}{Insert procedure \cs{checkindate}} -% \begin{macrocode} -\def\ps@titlepage{% - \def\@oddhead{% - \hfill - \preprint@sw{% - \expandafter\produce@preprints\expandafter{\@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{4.0c}{1999/11/13}{(AO, 115) If three or more preprints specified, set on single line, with commas.} -% \begin{macrocode} -\def\produce@preprints#1{% - \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}}% -\def\@hangfroms@section#1#2{#1\MakeTextUppercase{#2}}% -% \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} -% -% By default, APS journals set titlepage notes as footnotes. -% \begin{verbatim} -\let\frontmatter@footnote@produce\frontmatter@footnote@produce@footnote -% \end{verbatim} -% -% \subsubsection{Table of Contents}% -% The toc will itself make an entry in the toc, -% but we temporarily turn off toc formatting for the duration. -% \changes{4.1a}{2008/01/19}{(AO, 461) Change the csname revtex uses from @dotsep to ltxu@dotsep. The former is understood in mu. (What we wanted was a dimension.)}% -% \begin{macrocode} -\def\@pnumwidth{1.55em}% -\def\@tocrmarg {2.55em}% -\def\@dotsep{2}% -\def\ltxu@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} -% -% The following definition of \cmd\l@part\ is a variant on -% the definition of \cmd\l@@sections\ in \file{ltxutil.dtx}. -% \begin{macrocode} -\def\l@part#1#2{\addpenalty{\@secpenalty}% - \begingroup - \set@tocdim@pagenum\@tempboxa{#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\@tempboxa}\hskip-\rightskip\hskip\z@skip - \par - \nobreak % - \endgroup -}% -% \end{macrocode} -% -% \begin{macro}{\l@section} -% Determine which TOC elements are automatically indented. -% -% We set the TOC to the standard of RMP. -% If APS has its own specification, we will code it, and RMP must override. -% \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} -% -% \subsubsection{Default column bottom}% -% All APS journal styles have flush bottoms. -%\changes{4.1n}{2009/11/30}{(AO, 566) restore 4.0 behavior: flush column bottoms} -% \begin{macrocode} -\@booleanfalse\raggedcolumn@sw -% \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}% -% \changes{4.1n}{2010/01/02}{(AO, 572) \cs{@makefntext} and \cs{frontmatter@makefntext} must be defined harmoniously}% -% We customize the formatting of footnotes for all APS journals. -% \begin{macro}{\@makefntext} -% \begin{macrocode} -\long\def\@makefntext#1{% - \def\baselinestretch{1}% - \leftskip1em% - \parindent1em% - \noindent - \nobreak\hskip-\leftskip - \hb@xt@\leftskip{% - \hss\@makefnmark\ % - }% - #1% - \par -}% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\frontmatter@makefntext} -% We ensure that frontmatter footnotes format similarly to body footnotes. -% But we provide our own hypertext anchor, otherwise not provided. -% \changes{4.1n}{2010/01/02}{(AO, 572) Independent footnote counter for title block. Abstract footnote counter shared with body.}% -% \begin{macrocode} -\long\def\frontmatter@makefntext#1{% - \def\baselinestretch{1}% - \leftskip1em% - \parindent1em% - \noindent - \nobreak\hskip-\leftskip - \Hy@raisedlink{\hyper@anchorstart{frontmatter.\expandafter\the\csname c@\@mpfn\endcsname}\hyper@anchorend}% - \hb@xt@\leftskip{% - \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{4.0c}{1999/11/13}{(AO, 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}% -% \changes{4.1n}{2010/01/04}{(AO, 576) In .bst files, remove support for the annote field}% -% -% Customize \revtex\ for the journal substyle; -% this task requires three components: -% the \BibTeX\ \file{apsrev.bst} and \file{apsrmp.bst} style files, 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{apsrev.bst}, use \classname{custom-bib} version 4.21 or later. -% Run the \file{.bst} generator, \file{makebst.tex}, and -% accept all defaults, with the following exceptions: -% -% \def\QandA#1#2#3{\item#1: \textbf{#2}: \texttt{#3}---}% -% \def\CandE#1{\item\relax\texttt{#1}---}% -% \begin{enumerate} -% \QandA{LANGUAGE FIELD}{l}{lang}Use language field to switch hyphenation patterns for title -% \QandA{PRESENTATIONS}{b}{pres,pres-bf}Presentation, speaker bold face -% \QandA{ORDERING OF REFERENCES}{c}{seq-no}Citation order (unsorted, like unsrt.bst) -% \QandA{ORDER ON VON PART}{x}{vonx}Sort without von part (de la Maire after Mahone) -% \QandA{AUTHOR NAMES}{i}{nm-init,ed-au}Initials + surname (J. F. Smith) -% \QandA{POSITION OF JUNIOR}{*}{jnrlst}Junior comes last as Smith, John, Jr. -% \QandA{TYPEFACE FOR AUTHORS IN LIST OF REFERENCES}{u}{nmft,nmft-def}User defined author font (\cmd\bibnamefont) -% \QandA{FONT FOR FIRST NAMES}{u}{fnm-def}First names in user defined font (\cmd\bibfnamefont) -% \QandA{EDITOR NAMES IN INCOLLECTION ETC}{a}{nmfted}Editors incollection like authors font -% \QandA{FONT FOR `AND' IN LIST}{r}{nmand-rm}`And' in normal font (JONES and JAMES) -% \QandA{FONT OF CITATION LABELS IN TEXT}{u}{lab,lab-def}User defined citation font (\cmd\citenamefont) -% \QandA{FONT FOR `AND' IN CITATIONS}{r}{and-rm}Cited `and' in normal font -% \QandA{DATE FORMAT}{*}{yr-par}Date in parentheses as (May 1993) -% \QandA{DATE EMPTY}{-}{date-nil-x}If date is empty, then do not produce the surrounding punctuation (parens, brackets, colon, comma) -% \QandA{TITLE OF ARTICLE}{d}{tit-qq}Title and punctuation in double quotes (``Title,'' ..) -% \QandA{INPROCEEDINGS CHAPTER AND PAGES, LIKE INBOOK}{-}{inproceedings-chapter}produce pages after chapter, just as in InBook -% \QandA{TITLE PRESENT IN ARTICLE, INCOLLECTION, AND INPROCEEDINGS}{x}{jtit-x}Title is ignored -% \QandA{INPROCEEDINGS CHAPTER AND PAGES, LIKE INBOOK}{y}{inproceedings-chapter}produce pages after chapter, just as in InBook -% \QandA{ARTICLE BOOKTITLE PRESENT}{}{article-booktitle}format booktitle -% \QandA{ARTICLE SERIES PRESENT}{}{article-series}article can has series -% \QandA{JOURNAL NAME FONT}{r}{jttl-rm}Journal name normal font -% \QandA{JOURNAL NAME WITH ADDRESS}{y}{journal-address}Include address field (in parentheses) along with journal name -% \QandA{BOOK TITLE FIELDS}{y}{book-bt}Field `booktitle', or if absent field `title', is book title -% \QandA{THESIS TITLE OPTIONAL}{}{thesis-title-o}Title is optional: no warning issued if empty -% \QandA{TECHNICAL REPORT TITLE}{b}{trtit-b}Tech. report title like books -% \QandA{TECHNICAL REPORT INSTITUTION}{}{techreport-institution-par}format tech report institution like book publisher -% \QandA{JOURNAL VOLUME}{b}{vol-bf}Volume bold as {\bf vol}(num) -% \QandA{JOURNAL VOL AND NUMBER}{x}{vnum-x}Journal vol, without number as 34 -% \QandA{VOLUME PUNCTUATION}{c}{volp-com}Volume with comma as vol(num), ppp -% \QandA{PAGE NUMBERS}{f}{jpg-1}Only start page number -% \QandA{BOOK EDITOR W/O AUTHOR}{}{book-editor-booktitle}Book permits empty author, produces title before editor in this case -% \QandA{INBOOK PERMITS TITLE, BOOKTITLE, AUTHOR, EDITOR}{a}{inbook-editor-booktitle}Allow using both title/booktitle, both author/editor -% \QandA{CONFERENCE ADDRESS FOR BOOK, INBOOK, INCOLLECTION, INPROCEEDINGS, PROCEEDINGS}{a}{bookaddress}Italic booktitle followed by bookaddress in roman -% \QandA{NUMBER AND SERIES FOR BOOK, INBOOK, INCOLLECTION, INPROCEEDINGS, PROCEEDINGS}{*}{num-xser}Allows number without series and suppresses word "number" -% \QandA{WORD NUMBER CAPITALIZED FOR NUMBER AND SERIES}{c}{number-cap}Capitalize word `number' as: "Number 123" -% \QandA{WORD CHAPTER CAPITALIZED}{c}{chapter-cap}Capitalize word `chapter' as: `Chapter 42' -% \QandA{COMBINING NUMBER AND SERIES}{x}{series-number}Series number as: `Springer Lecture Notes No. 125' -% \QandA{POSITION OF NUMBER AND SERIES}{b}{numser-booktitle}After book title and conference address, and before editors -% \QandA{VOLUME AND SERIES FOR BOOKS/COLLECTIONS}{s}{ser-vol}Series, vol. 23 -% \QandA{VOLUME AND SERIES FORMATTING}{y}{ser-rm}format series roman , even when used with volume -% \QandA{WORD VOLUME CAPITALIZED FOR VOLUME AND SERIES}{y}{volume-cap}Capitalize word `volume', as: `Volume 7 in Lecture Series' -% \QandA{POSITION OF VOLUME AND SERIES FOR INCOLLECTION, INBOOK, AND INPROCEEDINGS}{e}{ser-ed}Series and volume after booktitle and before editors -% \QandA{JOURNAL NAME PUNCTUATION}{x}{jnm-x}Space after journal name -% \QandA{PAGES IN BOOK}{*}{pg-bk,book-chapter-pages}As chapter and page: chapter 42, page 345 -% \QandA{PUBLISHER IN PARENTHESES}{d}{pub-date}Publisher with address and date in parentheses (Oxford, 1994) -% \QandA{EMPTY PUBLISHER PARENTHESES}{y}{ay-empty-pub-parens-x}eliminate parentheses altogether if nothing inside -% \QandA{PUBLISHER POSITION}{}{pre-pub}Publisher before volume, chapter, pages -% \QandA{}{}{pre-edn}Edition before publisher -% \QandA{}{p}{pre-pub,pre-edn}Edition, publisher, volume, chapter, pages -% \QandA{ISBN NUMBER}{*}{isbn}Include ISBN for books, booklets, etc. -% \QandA{ISSN NUMBER}{*}{issn}Include ISSN for periodicals -% \QandA{DOI NUMBER}{a}{doi-link,doi}Doi forms a link to the publication, anchored to the volume or title -% \QandA{EDITOR IN COLLECTIONS}{b}{edby}In booktitle, edited by .. (where .. is names) -% \QandA{PUNCTUATION BETWEEN SECTIONS (BLOCKS)}{c}{blk-com}Comma between blocks -% \QandA{FINAL PUNCTUATION}{c}{fin-endbibitem}Command at end instead of period -% \QandA{ABBREVIATE WORD `PAGES'}{a}{pp}`Page' abbreviated as p. or pp. -% \QandA{ABBREVIATE WORD `EDITORS'}{a}{ed}`Editor' abbreviated as ed. or eds. -% \QandA{OTHER ABBREVIATIONS}{a}{abr}Abbreviations of such words -% \QandA{ABBREVIATION FOR `EDITION'}{a}{ednx}`Edition' abbreviated as `ed' -% \QandA{EDITION NUMBERS}{n}{ord}Numerical editions as 1st, 2nd, 3rd, etc -% \QandA{STORED JOURNAL NAMES}{a}{jabr}Abbreviated journal names -% \QandA{FONT OF `ET AL'}{i}{etal-it}Italic et al -% \QandA{ADDITIONAL REVTeX DATA FIELDS}{r}{revdata,eprint,url,url-blk,translation}Include REVTeX data fields collaboration, eid, eprint, archive, url, translation -% \QandA{SLACcitation FIELD}{}{SLACcitation}Produce SLACcitation field -% \QandA{NUMPAGES DATA FIELD}{*}{numpages-x}Do not include numpages field -% \QandA{URL ADDRESS}{*}{url,url-prefix-x}URL without prefix (default: `URL ') -% \QandA{REFERENCE COMPONENT TAGS}{b}{bibinfo}Reference component tags like \cmd\bibinfo in the content of \cmd\bibitem -% \QandA{ELEMENT TAGS}{b}{bibfield}Element tags like \cmd\bibfield in the content of \cmd\bibitem -% \QandA{COMPATIBILITY WITH PLAIN TEX}{*}{nfss}Use LaTeX commands which may not work with Plain TeX -% \end{enumerate} -% -% A file \file{apsrev.dbj} file equivalent to the following should result: -% \begin{verbatim} -%\input docstrip -%\preamble -%---------------------------------------- -%*** REVTeX-compatible Phys Rev 2010-02-12 *** -%\endpreamble -%\postamble -%End of customized bst file -%\endpostamble -%\keepsilent -%\askforoverwritefalse -%\def\MBopts{\from{merlin.mbs}{% -% head,\MBopta} -%\from{physjour.mbs}{\MBopta} -%\from{geojour.mbs}{\MBopta} -%\from{photjour.mbs}{\MBopta} -%\from{merlin.mbs}{tail,\MBopta}} -%\def\MBopta{% -% ay,%: Author-year with some non-standard interface -% nat,%: Natbib for use with natbib v5.3 or later -% lang,%: Use language field to switch hyphenation patterns for title -% pres,pres-bf,%: Presentation, speaker bold face -% seq-no,%: Citation order (unsorted, only meaningful for numericals) -% vonx,%: Sort without von part (de la Maire after Mahone) -% nm-init,ed-au,%: Initials + surname (J. F. Smith) -% jnrlst,%: Junior comes last as Smith, John, Jr. -% 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) -% and-rm,%: Cited `and' in normal font -% keyxyr,%: Year blank when KEY replaces missing author (for natbib 7.0) -% blkyear,%: Missing date left blank -% yr-par,%: Year in parentheses as (1993) -% dtrev,%: Date as year month -% date-nil-x,%: If date is empty, then do not produce the surrounding punctuation (parens, brackets, colon, comma) -% tit-qq,%: Title and punctuation in double quotes (``Title,'' ..) -% inproceedings-chapter,%: produce pages after chapter, just as in InBook -% jtit-x,%: Title is ignored -% inproceedings-chapter,%: produce pages after chapter just as in InBook -% article-booktitle,%: format booktitle -% article-series,%: article can has series -% jttl-rm,%: Journal name normal font -% journal-address,%: Include address field (in parentheses) along with journal name -% book-bt,%: Field `booktitle', or if absent field `title', is book title -% thesis-title-o,%: Title is optional: no warning issued if empty -% trtit-b,%: Tech. report title like books -% techreport-institution-par,%: format tech report institution like book publisher -% vol-bf,%: Volume bold as {\bf vol}(num) -% vnum-x,%: Journal vol, without number as 34 -% volp-com,%: Volume with comma as vol(num), ppp -% jpg-1,%: Only start page number -% book-editor-booktitle,%: Book permits empty author, produces title before editor in this case -% inbook-editor-booktitle,%: Allow using both title/booktitle, both author/editor -% bookaddress,%: Italic booktitle followed by bookaddress in roman -% num-xser,%: Allows number without series and suppresses word "number" -% number-cap,%: Capitalize word `number' as: "Number 123" -% chapter-cap,%: Capitalize word `chapter' as: `Chapter 42' -% series-number,%: Series number as: `Springer Lecture Notes No. 125' -% numser-booktitle,%: After book title and conference address, and before editors -% ser-vol,%: Series, vol. 23 -% ser-rm,%: format series roman , even when used with volume -% volume-cap,%: Capitalize word `volume', as: `Volume 7 in Lecture Series' -% ser-ed,%: Series and volume after booktitle and before editors -% jnm-x,%: Space after journal name -% pg-bk,book-chapter-pages,%: As chapter and page: chapter 42, page 345 -% pub-date,%: Publisher with address and date in parentheses (Oxford, 1994) -% ay-empty-pub-parens-x,%: eliminate parentheses altogether if nothing inside -% pre-pub,pre-edn,%: Edition, publisher, volume, chapter, pages -% isbn,%: Include ISBN for books, booklets, etc. -% issn,%: Include ISSN for periodicals -% doi-link,doi,%: Doi forms a link to the publication, anchored to the volume or title -% edby,%: In booktitle, edited by .. (where .. is names) -% blk-com,%: Comma between blocks -% fin-endbibitem,%: Command at end instead of period -% 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,translation,%: Include REVTeX data fields collaboration, eid, eprint, archive, url, translation -% SLACcitation,%: Produce SLACcitation field -% numpages-x,%: Do not include numpages field -% url,url-prefix-x,%: URL without prefix (default: `URL ') -% bibinfo,%: Reference component tags like \bibinfo in the content of \bibitem -% bibfield,%: Element tags like \bibfield in the content of \bibitem -% nfss,%: Use LaTeX commands which may not work with Plain TeX -%,{% -% }} -%\generate{\file{apsrev4-2.bst}{\MBopts}} -%\endbatchfile -% \end{verbatim} -% -% \subsubsection{Comparing apsrev.bst and apsrmp.bst}\label{sec:CompRevRmp} -% These two bibliographic styles differ as follows: -% \file{apsrev.dbj} has the following guard codes, which \file{apsrmp.dbj} does not: -% \begin{itemize} -% \CandE{seq-no}% -% Citation order (unsorted, like unsrt.bst) -% \CandE{nm-init,ed-au}% -% Initials + surname (J. F. Smith) -% \CandE{blkyear}% -% Missing date left blank -% \CandE{date-nil-x}% -% If date is empty, then do not produce the surrounding punctuation (parens, brackets, colon, comma) -% \CandE{inproceedings-chapter}% -% produce pages after chapter, just as in InBook -% \CandE{techreport-institution-par}% -% format tech report institution like book publisher -% \CandE{vnum-x}% -% Journal vol, without number as `34' -% \CandE{pub-date}% -% Publisher with address and date in parentheses (Oxford, 1994) -% \CandE{pre-pub}% -% Edition, publisher, volume, chapter, pages. Note that both use guard code pre-edn. -% \end{itemize} -% -% \file{apsrmp.dbj} has the following guard codes, which \file{apsrev.dbj} does not: -% \begin{itemize} -% \CandE{nm-rev1}% -% Only first name reversed, initials (AGU style: Smith, J. F., H. K. Jones) -% \CandE{dt-beg}% -% Date after authors -% \CandE{vnum-sp}% -% Journal vol (num) as `34 (2)' -% \CandE{pp-last}% -% Pages at end, but before any notes -% \CandE{pub-par}% -% Publisher in parentheses -% \CandE{school-par}% -% School/address in parens: `(school, address)' -% \CandE{bkedcap}% -% `Name Editor,' as above, editor upper case -% \CandE{and-com}% -% Comma even with 2 authors as `Tom, and Harry' -% -% \end{itemize} -% -% 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}{\authoryear@sw} -% \changes{4.1a}{2008/01/18}{(AO, 457) Endnotes to be sorted in with numerical citations.}% -% Numerical citations: default value of \cmd\authoryear@sw\ is false. -% \begin{macrocode} -\@booleanfalse\authoryear@sw -% \end{macrocode} -% \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 APS numerical citations (once the packages are loaded). -% The journal substyle can override these choices. -% -% Note that, prior to \classname{natbib} version 8.21, changing \cmd\NAT@sort\ at this late hour would not be totally effective; -% you would have to give \classname{natbib} the relevant options at load time. -% From version 8.21 on, \cmd\NAT@sort\ and \cmd\NAT@cmprs\ are not bound at all. -% \changes{4.1a}{2008/01/19}{For natbib versions before 8.21, \cs{NAT@sort} was consulted only as natbib was being read in. Now it is fully dynamic.} -% \begin{macrocode} -\appdef\setup@hook{% - \bibpunct{[}{]}{,}{n}{}{,}% -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\pre@bibdata} -% -% Set up to write endnotes to a .bib file; its data will be incorporated into the bibliography. -% \begin{macrocode} - \def\pre@bibdata{\jobname\bibdata@app}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bibsection} -% We define the sectioning command to use when starting the bibliography. -% -% \changes{4.0rc1}{2001/06/18}{grid changes with push and pop} -% \begin{macrocode} -\appdef\setup@hook{% - \def\bibsection{% - \par - \onecolumngrid@push - \begingroup - \baselineskip26\p@ - \bib@device{\textwidth}{245.5\p@}% - \endgroup - \nobreak\@nobreaktrue - \addvspace{19\p@}% - \par - \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@\z@{% - \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 - }% - \hss - }% -}% -\appdef\setup@hook{% - \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} -\appdef\setup@hook{% - \def\bibfont{% - \small - \@clubpenalty\clubpenalty - }% -}% -% \end{macrocode} -% \end{macro} -% -% -% \subsubsection{Index}% -% FIXME: the following call to \cmd\twocolumn\ appears wrong if we were in two-column grid. -% \changes{4.0c}{1999/11/13}{grid changes with ltxgrid} -% \changes{4.0rc1}{2001/06/18}{grid changes with push and pop} -% \begin{macrocode} -\newenvironment{theindex}{% - \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 - \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- and Pointsize-Specific Code}% -% -% After this substyle is read in, we will execute the code specific to the selected -% journal: execute the society/journal \file{.rtx} file if it exists, or -% execute the society/journal macro (if the latter is not defined, it will \cmd\relax\ out). -% Here we define the default journal. -% \begin{macrocode} -\def\@journal@default{pra}% -% \end{macrocode} -% -% \subsection{Typesize-Specific Code}% -% -% After this society file is read in, we will process the \cmd\@pointsize-specific -% code. Here we define the default. -% \begin{macrocode} -\def\@pointsize@default{10}% -% \end{macrocode} -% -% Note: the convention in \revtex\ and its substyles 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 the APS, we supply code specific to journals PRA, PRB, PRC, PRD, PRE, PRL, PRX, PRAPPLIED, PRMATERIALS, PRFLUIDS, PRAB (was PRSTAB), PRPER (was PRSTPER), and RMP. -% At present, they are identical, -% with the exception of PRL and RMP. -% We also introduce a new generic physrev style now that all of the Phys. Rev. journals -% are identical -% In 4.2, we make the inclusion of titles in the bibliography the default -% -% 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}}% -% There is no code specific to \classoption{pra}. -% \begin{macrocode} -\def\rtx@apspra{% - \class@info{APS journal PRA selected}% -}% -% \end{macrocode} -% -% \subsubsection{\classoption{prb}}% -% There is no code specific to \classoption{prb}. -% \begin{macrocode} -\def\rtx@apsprb{% - \class@info{APS journal PRB selected}% -}% -% \end{macrocode} -% -% \subsubsection{\classoption{prc}}% -% There is no code specific to \classoption{prc}. -% \begin{macrocode} -\def\rtx@apsprc{% - \class@info{APS journal PRC selected}% -}% -% \end{macrocode} -% -% \subsubsection{\classoption{prd}}% -% There is no code specific to \classoption{prd}. -% \begin{macrocode} -\def\rtx@apsprd{% - \class@info{APS journal PRD selected}% -}% -% \end{macrocode} -% -% \subsubsection{\classoption{pre}}% -% There is no code specific to \classoption{pre}. -% \begin{macrocode} -\def\rtx@apspre{% - \class@info{APS journal PRE selected}% -}% -% \end{macrocode} -% -% \subsubsection{\classoption{prl}}% -% \begin{macrocode} -\def\rtx@apsprl{% - \class@info{APS journal PRL selected}% -% \end{macrocode} -% In PRL, the default is the \classoption{bibnotes} option, -% and the Acknowledgments section has no head. -% -% 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. -%FIXME: this code may confound \classname{geometry} -% \begin{macrocode} - \let\frontmatter@footnote@produce\frontmatter@footnote@produce@endnote - \@booleanfalse\acknowledgments@sw - \appdef\setup@hook{% - \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. -% -% \begin{macrocode} -\appdef\setup@hook{% - \lengthcheck@sw{% - \RequirePackage{times}% -% \end{macrocode} -% Wait. Do not use mathtime after all. APS has their own way of doing math pi, involving -% Adobe Mathematical Pi and other fonts. -% \begin{verbatim} -% \RequirePackage{mathtime}% -% \end{verbatim} -% \begin{macrocode} - }{}% -}% -% \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\setup@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 - }% - }% - }{}% - }% - \textheight = 694.0\p@ -% \end{macrocode} -% -% End of \classoption{prl} code. -% \begin{macrocode} -}% -% \end{macrocode} -% -% \subsubsection{\classoption{prper}}% -% There is no code specific to \classoption{prper} -% \begin{macrocode} -\def\rtx@apsprper{% - \class@info{APS journal PRPER selected}% -}% -% \end{macrocode} -% -% \subsubsection{\classoption{prab}}% -% There is no code specific to \classoption{prab}. -% \begin{macrocode} -\def\rtx@apsprab{% - \class@info{APS journal PRAB selected}% -}% -% \end{macrocode} -% -% \subsubsection{\classoption{prx}}% -% There is no code specific to \classoption{prx}. -% \begin{macrocode} -\def\rtx@apsprx{% - \class@info{APS journal PRX selected}% -}% -% \end{macrocode} -% -% \subsubsection{\classoption{prapplied}}% -% There is no code specific to \classoption{prapplied}. -% \begin{macrocode} -\def\rtx@apsprapplied{% - \class@info{APS journal PRApplied selected}% -}% -% \end{macrocode} -% -% \subsubsection{\classoption{prmaterials}}% -% There is no code specific to \classoption{prmaterials}. -% \begin{macrocode} -\def\rtx@apsprmaterials{% - \class@info{APS journal PRMaterials selected}% -}% -% \end{macrocode} -% -% \subsubsection{\classoption{prfluids}}% -% PRFluids uses a one-column format for journal format, but if authors want this, they should use the onecolumn option and not the reprint option. -% Parsing of documentclass options is rather involved and hard to control precisely enough to have the correct behavior using the reprint option. -% \begin{macrocode} -\def\rtx@apsprfluids{% - \class@info{APS journal PRFluids selected}% - \@booleanfalse\titlepage@sw -}% -% \end{macrocode} -% -% \subsubsection{\classoption{physrev}}% -% There is no code specific to \classoption{physrev}. -% \begin{macrocode} -\def\rtx@apsphysrev{% - \class@info{APS unified Physical Review journal style selected}% -% \begin{macrocode} -}% -% \end{macrocode} -% -% \subsubsection{\classoption{rmp}}% -% If this option has been selected, we will read in the needed code from the file \file{apsrmp.rtx}. -% -% \subsection{Establish APS Defaults}\label{sec:aps-defaults} -% -% \begin{macro}{\footinbib@sw} -% All APS journals except RMP effectively invoke the \classoption{footinbib} option. -% We rely on the RMP-specific code to override this assignment. -% \begin{macrocode} -\@booleantrue\footinbib@sw -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@bibdataout@init} -% \begin{macro}{\@bibdataout@aps} -% \changes{4.1o}{2010/02/12}{(AO, 580) Control .bst at run time.}% -% Procedure \cmd\@bibdataout@aps\ has the job of writing the control record into the -% job's \cmd\jobname\filename{.bib} file, where it will adjust the options to \filename{.bst} processing. -% It is installed into the initialization procedure \cmd\@bibdataout@init, and its meaning -% is set by the society (APS) and journal. -% For all but RMP, we select the Physical Review style. -% For the latter case, we change the meaning, per the code in \file{apsrmp.rtx}. -% -% \begin{macrocode} -\appdef\@bibdataout@rev{\@bibdataout@aps}% -\def\@bibdataout@aps{% - \immediate\write\@bibdataout{% -% \end{macrocode} -% An entry that controls processing of the \filename{.bst} file has entry type \texttt{@CONTROL}. -% \begin{macrocode} - @CONTROL{% - apsrev42Control% -% \end{macrocode} -% Say whether we want long bibliography style (the default), or the abbreviated style. -% \changes{4.2b}{2017/11/22}{(MD) MD - not sure why these parameters were different previously. Made them match except for title.}% -% Use binary flags on control.* flags in bst file to set appropriate parameters -% author = 08 corresponds to initials, jrnlst -% editor = 1 corresponds to format identical to authors -% title = 0 means to include title in journal references if present; title ="" means omit the title even if present (this should be the only difference between long and short bib styles) -% year = 1 corresponds to truncate -% page = 0 corresponds to using single page number rather than a range -% \begin{macrocode} - \longbibliography@sw{% - ,author="08",editor="1",pages="0",title="0",year="1"% - }{% - ,author="08",editor="1",pages="0",title="",year="1"% - }% - }% - }% -% \end{macrocode} -% Place a \cmd\citation\ into the auxiliary file corresponding to this entry. -% \begin{macrocode} - \if@filesw - \immediate\write\@auxout{\string\citation{apsrev42Control}}% - \fi -}% -% \end{macrocode} -% \end{macro} -% \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. -% \begin{macrocode} -\let\place@bibnumber\place@bibnumber@inl -\def\@bibstyle{apsrev\substyle@post}% -% \end{macrocode} -% \begin{verbatim} -%\appdef\setup@hook{% -% \longbibliography@sw{% -% \appdef\@bibstyle{long}% -% }{}% -%}% -% \end{verbatim} -% \end{macro} -% \end{macro} -% -% \subsection{APS Sanity Checking}\label{sec:aps-sanity} -% \changes{4.1f}{2009/07/20}{(AO, 524) Makes no sense if citations are superscript numbers and so are footnotes} -% -% Rule: if \cmd\place@bibnumber\ is \cmd\place@bibnumber@sup\ -% (citations are numbered and set superscript), -% then it makes no sense for \cmd\footinbib@sw\ to be \cmd\false@sw\ -% (footnotes set in the bibliography, as endnotes). -% If both conditions prevailed, then the document would have footnotes -% and citations both as superscript arabic numbers, but independently numbered, -% which would be confusing. -% -% Any society that provides for both superscript numbered citations as well as for -% numbered footnotes should check for this same condition, and deal with it. -% -% Note: an alternative would be for footnotes to use the same sequence of footnote devices -% that are used by the frontmatter footnotes -% (\cmd\frontmatter@thefootnote\ instead of arabic numbers). -% -% In this case, we would want to refrain from resetting \cmd\c@footnote\ at the end of -% the title page formatting. -% We would also want to treat body footnotes identically to frontmatter footnotes: -% the assignments in \cmd\titleblock@produce\ would persist throughout the document. -% -% But APS do not choose to go that route. -% \begin{macrocode} -\appdef\setup@hook{% - \@ifx{\place@bibnumber\place@bibnumber@sup}{% - \footinbib@sw{}{% - \class@warn{Citations are superscript numbers: footnotes must be endnotes; changing to that configuration}% - \@booleantrue\footinbib@sw - }% - }{}% -}% -% \end{macrocode} -% -% Here ends the substyle for society APS. -% \begin{macrocode} -%</aps> -% \end{macrocode} -% -% -% \section{The \classoption{rmp} journal substyle: the \texttt{rmp} module} -% -% The file \file{apsrmp.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 \file{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 undefined. -% \begin{macrocode} -\@ifxundefined\@journal{% -% \end{macrocode} -% One alternative: abort the document. -% Another alternative: try to recover: force load the aps society file -% \begin{macrocode} - \class@warn{Please specify the REVTeX options [aps,rmp]!}% - \@@end -}{}% -% \end{macrocode} -% Log the journal substyle. -% \begin{macrocode} - \class@info{APS journal RMP selected}% -% \end{macrocode} -% -% \subsection{Frontmatter}% -% -% We assign the titlepage style for RMP; a document instance -% may override by invoking one of the class options of \revtex. -% \begin{macrocode} -\clo@groupedaddress -% \end{macrocode} -% -% \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. -%\changes{4.2b}{2017/11/22}{(MD) PACS are obsolete altogether now}% -% \begin{macrocode} -\def\PACS@warn{RMP documents do not display PACS and PACS are obsolete. 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} -% \changes{4.1b}{2008/08/04}{Rag the right even more: .8\cs{hsize}. Also, assign \cs{@totalleftmargin}.}% -% \changes{4.1b}{2008/06/29}{(AO, 455) Be nice to a list within the abstract (assign \cs{@totalleftmargin}).} -% 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@ plus.8\hsize - \raggedright\advance\leftskip.5in\relax - \@flushglue\@tempskipa - \parskip\z@skip - \@totalleftmargin\leftskip -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\frontmatter@affiliationfont} -% \changes{4.1b}{2008/08/04}{As with author formatting, rag the right more, and assign \cs{@totalleftmargin}. Also neutralize \cs{def@after@address}.}% -% \changes{4.1b}{2008/06/29}{(AO, 455) Be nice to a list within the abstract (assign \cs{@totalleftmargin}).} -% 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@ plus.8\hsize - \raggedright\advance\leftskip.5in\relax - \@flushglue\@tempskipa - \@totalleftmargin\leftskip - \let\def@after@address\def@after@address@empty -}% -\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. -% We assign the titlepage style for RMP; a document instance -% may override by invoking one of the class options of \revtex. -% \changes{4.1b}{2008/08/04}{The \texttt{rmp} journal substyle selects \texttt{groupedaddress} by default.}% -% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.} -% -% This command should override the effect of the -% corresponding command in the society substyle, -% and any document class option bearing on same will in turn override. -% \begin{macrocode} -\clo@groupedaddress -% \end{macrocode} -% -% \begin{macro}{\frontmatter@RRAP@format} -% \changes{4.1b}{2008/06/29}{(AO, 455) Be nice to a list within the abstract (assign \cs{@totalleftmargin}).} -% 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 - \@totalleftmargin\leftskip -}% -\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 -% \changes{4.1b}{2008/06/29}{(AO, 455) Be nice to a list within the abstract (assign \cs{@totalleftmargin}).} -% \begin{macrocode} -\def\frontmatter@abstractfont{% - \footnotesize - \hsize360\p@ - \leftskip=0.5in - \parindent\z@ - \@totalleftmargin\leftskip -}% -% \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}% -% -% \changes{4.1b}{2008/07/01}{(AO) make settings at class time instead of deferring them to later.} -% If not in preprint mode, RMP sets the type size to 10/12 point. Note: s/b 11.6bp leading -%FIXME: define \cmd\normalsize\ only if nobody else has done so. -% \begin{macrocode} - \appdef\setup@hook{% - \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: -% \changes{4.1n}{2010/01/02}{(AO, 571) class file must set \cs{splittopskip}; fine tune \cs{skip}\cs{footins}; \cs{footnoterule} defined in terms of \cs{skip}\cs{footins}}% -% \begin{macrocode} - \footnotesep 9.25pt - \skip\footins 36pt plus 4pt minus 12pt - \def\footnoterule{% - \dimen@\skip\footins\divide\dimen@\thr@@ - \kern-\dimen@\hrule width.5in\kern\dimen@ - }% -% \end{macrocode} -% -% -% \subsection{Sectioning} -% \changes{4.1b}{2008/08/04}{Use \cs{setup@hook} to initialize all.} -% \changes{4.1b}{2008/08/01}{Section numbering via procedures \cs{secnums@rtx} and \cs{secnums@arabic}.} -% -% We override the meaning of \cmd\secnums@rtx. -% The class option \classoption{secnumarabic} will continue to work. -% \begin{macrocode} -\def\secnums@rtx{% - \@ifxundefined\thepart{% - \def\thepart{\Roman{part}}% - }{}% - \@ifxundefined\thesection{% - \def\thesection {\Roman{section}}% - \def\p@section {}% - }{}% - \@ifxundefined\thesubsection{% - \def\thesubsection {\Alph{subsection}}% - \def\p@subsection {\thesection.}% - }{}% - \@ifxundefined\thesubsubsection{% - \def\thesubsubsection {\arabic{subsubsection}}% - \def\p@subsubsection {\thesection.\thesubsection.}% - }{}% - \@ifxundefined\theparagraph{% - \def\theparagraph {\alph{paragraph}}% - \def\p@paragraph {\thesection.\thesubsection.\thesubsubsection.}% - }{}% - \@ifxundefined\thesubparagraph{% - \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. -% \changes{4.1b}{2008/07/01}{Add \cs{@hangfroms@section}} -% \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\@hangfroms@section#1#2{#1\MakeTextUppercase{#2}}% - \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} -% \changes{4.1b}{2008/07/01}{Add \cs{@hangfroms@section}} -% \begin{macrocode} -\appdef\appendix{% - \let\@hangfrom@section\@hangfrom@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} -% \changes{4.1b}{2008/07/01}{Break out \cs{@caption@fignum@sep}} -% -% \begin{macrocode} -\setlength\belowcaptionskip{2\p@} -\long\def\@makecaption#1#2{% - \vskip\abovecaptionskip - \vbox{% - \flushing - \small\rmfamily - \noindent - #1\@caption@fignum@sep#2\par - }% - \vskip\belowcaptionskip -}% -\def\@caption@fignum@sep{\nobreak\hskip.5em plus.2em\ignorespaces}% -% \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: -% -% \def\QandA#1#2#3{\item#1: \textbf{#2}: \texttt{#3}---}% -% \def\CandE#1{\item\relax\texttt{#1}---}% -% \begin{enumerate} -% \QandA{STYLE OF CITATIONS}{a}{ay}Author-year with some non-standard interface -% \QandA{AUTHOR}{*}{nat}Natbib for use with natbib v5.3 or later -% \QandA{LANGUAGE FIELD}{l}{lang}Use language field to switch hyphenation patterns for title -% \QandA{PRESENTATIONS}{b}{pres,pres-bf}Presentation, speaker bold face -% \QandA{ORDER ON VON PART }{x}{vonx}Sort without von part (de la Maire after Mahone) -% \QandA{AUTHOR NAMES}{a}{nm-rev1}Only first name reversed, initials (AGU style: Smith, J. F., H. K. Jones) -% \QandA{POSITION OF JUNIOR }{*}{jnrlst}Junior comes last as Smith, John, Jr. -% \QandA{TYPEFACE FOR AUTHORS IN LIST OF REFERENCES}{u}{nmft,nmft-def}User defined author font (\cmd\bibnamefont) -% \QandA{FONT FOR FIRST NAMES }{u}{fnm-def}First names in user defined font (\cmd\bibfnamefont) -% \QandA{EDITOR NAMES IN INCOLLECTION ETC}{a}{nmfted}Editors incollection like authors font -% \QandA{FONT FOR `AND' IN LIST}{r}{nmand-rm}`And' in normal font (JONES and JAMES) -% \QandA{FONT OF CITATION LABELS IN TEXT }{u}{lab,lab-def}User defined citation font (\cmd\citenamefont) -% \QandA{FONT FOR `AND' IN CITATIONS }{r}{and-rm}Cited `and' in normal font -% \QandA{LABEL WHEN AUTHORS MISSING }{*}{keyxyr}Year blank when KEY replaces missing author (for natbib 7.0) -% \QandA{DATE POSITION}{b}{dt-beg}Date after authors -% \QandA{DATE FORMAT }{m}{yr-com}Date preceded by comma as `, 1993' -% \QandA{INCLUDE MONTHS}{m}{aymth}Include month in date -% \QandA{REVERSED DATE }{r}{dtrev}Date as year month -% \QandA{TRUNCATE YEAR }{*}{note-yr}Year text full as 1990--1993 or `in press' -% \QandA{TITLE OF ARTICLE}{d}{tit-qq}Title and punctuation in double quotes (``Title,'' ..) -% \QandA{TITLE PRESENT IN ARTICLE, INCOLLECTION, AND INPROCEEDINGS}{x}{jtit-x}Title is ignored -% \QandA{INPROCEEDINGS CHAPTER AND PAGES, LIKE INBOOK}{y}{inproceedings-chapter}produce pages after chapter just as in InBook -% \QandA{ARTICLE BOOKTITLE PRESENT}{?}{article-booktitle}format booktitle -% \QandA{ARTICLE SERIES PRESENT}{?}{article-series}article can has series -% \QandA{JOURNAL NAME FONT}{r}{jttl-rm}Journal name normal font -% \QandA{JOURNAL NAME WITH ADDRESS}{y}{journal-address}Include address field (in parentheses) along with journal name -% \QandA{BOOK TITLE FIELDS}{y}{book-bt}Field `booktitle', or if absent field `title', is book title -% \QandA{THESIS TITLE OPTIONAL}{?}{thesis-title-o}Title is optional: no warning issued if empty -% \QandA{TECHNICAL REPORT TITLE}{b}{trtit-b}Tech. report title like books -% \QandA{JOURNAL VOLUME}{b}{vol-bf}Volume bold as {\bf vol}(num) -% \QandA{JOURNAL VOL AND NUMBER}{s}{vnum-sp}Journal vol (num) as 34 (2) -% \QandA{VOLUME PUNCTUATION}{c}{volp-com}Volume with comma as vol(num), ppp -% \QandA{PAGE NUMBERS}{f}{jpg-1}Only start page number -% \QandA{POSITION OF PAGES}{e}{pp-last}Pages at end but before any notes -% \QandA{BOOK EDITOR W/O AUTHOR}{}{book-editor-booktitle}Book permits empty author, produces title before editor in this case -% \QandA{INBOOK PERMITS TITLE, BOOKTITLE, AUTHOR, EDITOR}{a}{inbook-editor-booktitle}Allow using both title/booktitle, both author/editor -% \QandA{CONFERENCE ADDRESS FOR BOOK, INBOOK, INCOLLECTION, INPROCEEDINGS, PROCEEDINGS}{a}{bookaddress}Italic booktitle followed by bookaddress in roman -% \QandA{NUMBER AND SERIES FOR BOOK, INBOOK, INCOLLECTION, INPROCEEDINGS, PROCEEDINGS}{*}{num-xser}Allows number without series and suppresses word "number" -% \QandA{WORD NUMBER CAPITALIZED FOR NUMBER AND SERIES}{c}{number-cap}Capitalize word `number' as: "Number 123" -% \QandA{WORD CHAPTER CAPITALIZED}{c}{chapter-cap}Capitalize word `chapter' as: `Chapter 42' -% \QandA{COMBINING NUMBER AND SERIES}{x}{series-number}Series number as: `Springer Lecture Notes No. 125' -% \QandA{POSITION OF NUMBER AND SERIES}{b}{numser-booktitle}After book title and conference address, and before editors -% \QandA{VOLUME AND SERIES FOR BOOKS}{s}{ser-vol}Series, vol. 23 -% \QandA{VOLUME AND SERIES FORMATTING}{y}{ser-rm}format series roman , even when used with volume -% \QandA{WORD VOLUME CAPITALIZED FOR VOLUME AND SERIES}{y}{volume-cap}Capitalize word `volume', as: `Volume 7 in Lecture Series' -% \QandA{POSITION OF VOLUME AND SERIES FOR INCOLLECTION, INBOOK, AND INPROCEEDINGS}{e}{ser-ed}Series and volume after booktitle and before editors -% \QandA{JOURNAL NAME PUNCTUATION}{x}{jnm-x}Space after journal name -% \QandA{PAGES IN BOOK}{*}{pg-bk,book-chapter-pages}As chapter and page: chapter 42, page 345 -% \QandA{PUBLISHER IN PARENTHESES}{p}{pub-par}Publisher in parentheses -% \QandA{EMPTY PUBLISHER PARENTHESES}{y}{ay-empty-pub-parens-x}eliminate parentheses altogether if nothing inside -% \QandA{PUBLISHER POSITION}{e}{pre-edn}Edition before publisher -% \QandA{SCHOOL}{p}{school-par}school/address in parens: `(school, address)' -% \QandA{ISBN NUMBER}{*}{isbn}Include ISBN for books, booklets, etc. -% \QandA{ISSN NUMBER}{*}{issn}Include ISSN for periodicals -% \QandA{DOI NUMBER}{a}{doi-link,doi}Doi forms a link to the publication, anchored to the volume or title -% \QandA{`EDITOR' AFTER NAMES}{a}{bkedcap}`Name Editor,' as above, editor upper case -% \QandA{EDITOR IN COLLECTIONS}{b}{edby}In booktitle, edited by .. (where .. is names) -% \QandA{PUNCTUATION BETWEEN SECTIONS }{c}{blk-com}Comma between blocks -% \QandA{FINAL PUNCTUATION}{c}{fin-endbibitem}Command at end instead of period -% \QandA{ABBREVIATE WORD `PAGES' }{a}{pp}`Page' abbreviated as p. or pp. -% \QandA{ABBREVIATE WORD `EDITORS'}{a}{ed}`Editor' abbreviated as ed. or eds. -% \QandA{OTHER ABBREVIATIONS}{a}{abr}Abbreviations of such words -% \QandA{ABBREVIATION FOR `EDITION' }{a}{ednx}`Edition' abbreviated as `ed' -% \QandA{EDITION NUMBERS}{n}{ord}Numerical editions as 1st, 2nd, 3rd, etc -% \QandA{STORED JOURNAL NAMES}{a}{jabr}Abbreviated journal names -% \QandA{COMMA BEFORE `AND'}{c}{and-com}Comma even with 2 authors as `Tom, and Harry' -% \QandA{FONT OF `ET AL'}{i}{etal-it}Italic et al -% \QandA{ADDITIONAL REVTeX DATA FIELDS}{r}{revdata,eprint,url,url-blk,translation}Include REVTeX data fields collaboration, eid, eprint, archive, url, translation -% \QandA{SLACcitation FIELD}{?}{SLACcitation}Produce SLACcitation field -% \QandA{NUMPAGES DATA FIELD}{*}{numpages-x}Do not include numpages field -% \QandA{REFERENCE COMPONENT TAGS}{b}{bibinfo}Reference component tags like \cmd\bibinfo\ in the content of \cmd\bibitem -% \QandA{ELEMENT TAGS}{b}{bibfield}Element tags like \cmd\bibfield\ in the content of \cmd\bibitem -% \QandA{COMPATIBILITY WITH PLAIN TEX}{*}{nfss}Use LaTeX commands which may not work with Plain TeX -% \end{enumerate} -% -% A file \file{apsrmp.dbj} file equivalent to the following should result: -% \begin{verbatim} -%\input docstrip -%\preamble -%---------------------------------------- -%*** REVTeX-compatible RMP 2010-02-12 *** -%\endpreamble -%\postamble -%End of customized bst file -%\endpostamble -%\keepsilent -%\askforoverwritefalse -%\def\MBopts{\from{merlin.mbs}{% -% head,\MBopta} -%\from{physjour.mbs}{\MBopta} -%\from{geojour.mbs}{\MBopta} -%\from{photjour.mbs}{\MBopta} -%\from{merlin.mbs}{tail,\MBopta}} -%\def\MBopta{% -% ay,%: Author-year with some non-standard interface -% nat,%: Natbib for use with natbib v5.3 or later -% lang,%: Use language field to switch hyphenation patterns for title -% pres,pres-bf,%: Presentation, speaker bold face -% 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. -% 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) -% and-rm,%: Cited `and' in normal font -% keyxyr,%: Year blank when KEY replaces missing author (for natbib 7.0) -% dt-beg,%: Date after authors -% yr-par,%: Year in parentheses as (1993) -% dtrev,%: Date as year month -% date-nil-x,%: If date is empty, then do not produce the surrounding punctuation (parens, brackets, colon, comma) -% tit-qq,%: Title and punctuation in double quotes (``Title,'' ..) -% inproceedings-chapter,%: produce pages after chapter, just as in InBook -% jtit-x,%: Title is ignored -% inproceedings-chapter,%: produce pages after chapter just as in InBook -% article-booktitle,%: format booktitle -% article-series,%: article can has series -% jttl-rm,%: Journal name normal font -% journal-address,%: Include address field (in parentheses) along with journal name -% book-bt,%: Field `booktitle', or if absent field `title', is book title -% thesis-title-o,%: Title is optional: no warning issued if empty -% trtit-b,%: Tech. report title like books -% techreport-institution-par,%: format tech report institution like book publisher -% vol-bf,%: Volume bold as {\bf vol}(num) -% vnum-sp,%: Journal vol (num) as 34 (2) -% volp-com,%: Volume with comma as vol(num), ppp -% jpg-1,%: Only start page number -% pp-last,%: Pages at end but before any notes -% book-editor-booktitle,%: Book permits empty author, produces title before editor in this case -% inbook-editor-booktitle,%: Allow using both title/booktitle, both author/editor -% bookaddress,%: Italic booktitle followed by bookaddress in roman -% num-xser,%: Allows number without series and suppresses word "number" -% number-cap,%: Capitalize word `number' as: "Number 123" -% chapter-cap,%: Capitalize word `chapter' as: `Chapter 42' -% series-number,%: Series number as: `Springer Lecture Notes No. 125' -% numser-booktitle,%: After book title and conference address, and before editors -% ser-vol,%: Series, vol. 23 -% ser-rm,%: format series roman , even when used with volume -% volume-cap,%: Capitalize word `volume', as: `Volume 7 in Lecture Series' -% ser-ed,%: Series and volume after booktitle and before editors -% jnm-x,%: Space after journal name -% pg-bk,book-chapter-pages,%: As chapter and page: chapter 42, page 345 -% pub-par,%: Publisher in parentheses -% ay-empty-pub-parens-x,%: eliminate parentheses altogether if nothing inside -% pre-edn,%: Edition before publisher -% school-par,%: school/address in parens: `(school, address)' -% isbn,%: Include ISBN for books, booklets, etc. -% issn,%: Include ISSN for periodicals -% doi-link,doi,%: Doi forms a link to the publication, anchored to the volume or title -% bkedcap,%: `Name Editor,' as above, editor upper case -% edby,%: In booktitle, edited by .. (where .. is names) -% blk-com,%: Comma between blocks -% fin-endbibitem,%: Command at end instead of period -% 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 -% and-com,%: Comma even with 2 authors as `Tom, and Harry' -% etal-it,%: Italic et al -% revdata,eprint,url,url-blk,translation,%: Include REVTeX data fields collaboration, eid, eprint, archive, url, translation -% SLACcitation,%: Produce SLACcitation field -% numpages-x,%: Do not include numpages field -% url,url-prefix-x,%: URL without prefix (default: `URL ') -% bibinfo,%: Reference component tags like \bibinfo in the content of \bibitem -% bibfield,%: Element tags like \bibfield in the content of \bibitem -% nfss,%: Use LaTeX commands which may not work with Plain TeX -%,{% -% }} -%\generate{\file{apsrmp4-2.bst}{\MBopts}} -%\endbatchfile -% \end{verbatim} -% -% For a comparison between apsrmp.bst and apsrev.bst, see Section~\ref{sec:CompRevRmp}. -% -% \changes{4.1c}{2008/08/15}{Document class option longbibliography via \cs{substyle@post}} -% \begin{macrocode} -\def\@bibstyle{apsrmp\substyle@post}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\authoryear@sw} -% \changes{4.1a}{2008/01/18}{(AO, 457) Endnotes to be sorted in with numerical citations.}% -% Author-year citations: default value of \cmd\authoryear@sw\ is true. -% \begin{macrocode} -\@booleantrue\authoryear@sw -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@bibdataout@rmp} -% \changes{4.1o}{2010/02/12}{(AO, 580) Control .bst at run time.}% -% When the journal is RMP, the meaning of the procedure \cmd\@bibdataout@aps\ needs to be different -% because of the way the author names are formatted. In other respects, it is the same. -% \begin{macrocode} -\def\@bibdataout@aps{% - \immediate\write\@bibdataout{% -% \end{macrocode} -% An entry that controls processing of the \filename{.bst} file has entry type \texttt{@CONTROL}. -% This entry's cite key is \texttt{apsrmp41Control}, which serves as a version number. -% \begin{macrocode} - @CONTROL{% - apsrmp41Control% -% \end{macrocode} -% Say whether we want long bibliography style (the default), or the abbreviated style. -% \begin{macrocode} - \longbibliography@sw{% - ,author="03",editor="0",pages="1",title="0",year="0"% - }{% - ,author="0B",editor="0",pages="0",title="0",year="1"% TeXSupport - }% - }% - }% -% \end{macrocode} -% Place a \cmd\citation\ into the auxiliary file corresponding to this entry. -% \begin{macrocode} - \if@filesw - \immediate\write\@auxout{\string\citation{apsrmp41Control}}% - \fi -}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bibpunct} -% \begin{macro}{\bibsection} -% \begin{macro}{\bibpreamble} -% \begin{macro}{\newblock} -% \begin{macro}{\bibhang} -% \begin{macro}{\bibsep} -% \begin{macro}{\cite} -% 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 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). -% -% Incidently, this \cmd\bibpunct\ command specifies the \classname{natbib} default values. -% -% We define the sectioning command to use when starting the bibliography. -% -% We change \classname{natbib}'s \cmd\NAT@def@citea\ procedure to effect more elaborate -% punctuation for RMP: see item 473: -% \cmd\cite\ order punctuation: ``If possible, \cmd\textcite should put the word 'and' between two citations and before the last citation in a list of 3 or more.'' -% -% \begin{macrocode} -\appdef\setup@hook{% -% \end{macrocode} -% -% We define the punctuation to use in the \cmd\cite\ command's production. -% -% \begin{macrocode} - \bibpunct{(%) - }{%( - )}{;}{a}{,}{,}% -% \end{macrocode} -% -% We define the sectioning command to use when starting the bibliography. -% -% \begin{macrocode} - \def\bibsection{% - \expandafter\section\expandafter*\expandafter{\refname}% - \@nobreaktrue - }% - \let\bibpreamble\@empty - \def\newblock{\ }% - \bibhang10\p@ - \bibsep\z@ -% \end{macrocode} -% -% Per Mark Doyle, \cmd\cite\ is mapped to \cmd\citep\ in RMP. -% \changes{4.1i}{2009/10/23}{(AO, 541) Defer assignment of \cs{cite} until after natbib loads} -% \begin{macrocode} - \let\cite\citep -% \end{macrocode} -% -% End of code to be delayed until after \classname{natbib} loads. -% \begin{macrocode} -}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\footinbib@sw} -% Footnotes in bibliography are consistent only with numbered citations, -% and are particularly nasty 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. -% The same is quietly done with -% \classname{natbib}'s \classoption{mcite} and \classoption{compress} options. -% -% \changes{4.1f}{2009/07/15}{(AO, 523) Add class option nomerge, to turn off new natbib 8.3 syntax} -% (AO 523) I changed the code that alters \cmd\NAT@merge\ so that it will not override -% when \cmd\NAT@merge\ has been set to \cmd\z@. -% \begin{macrocode} -\@booleanfalse\footinbib@sw -\appdef\setup@hook{% - \footinbib@sw{% - \class@warn{% - Footnotes in bibliography are incompatible with RMP.^^J% - Undoing the footinbib option. - }% - \@booleanfalse\footinbib@sw - }{}% - \@ifnum{\NAT@merge>\@ne}{\let\NAT@merge\@ne}{}% - \def\NAT@cmprs{\z@}% -}% -% \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 the definitions for -% the default TOC font (\cmd\toc@@font), -% 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} -% \changes{4.1a}{2008/01/19}{(AO, 461) Change the csname revtex uses from @dotsep to ltxu@dotsep. The former is understood in mu. (What we wanted was a dimension.)}% -% Set the formatting characteristics of the auto-indenting part -% of the TOC. -% \begin{macrocode} -\def\toc@@font{% - \footnotesize\rmfamily - \def\\{\space\ignorespaces}% -}% -\def\ltxu@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 |