diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/revtex/ltxfront.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/revtex/ltxfront.dtx | 3599 |
1 files changed, 3599 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/revtex/ltxfront.dtx b/Master/texmf-dist/source/latex/revtex/ltxfront.dtx new file mode 100644 index 00000000000..b9432481136 --- /dev/null +++ b/Master/texmf-dist/source/latex/revtex/ltxfront.dtx @@ -0,0 +1,3599 @@ +% \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.3 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 00readme.tex. + +License + You may distribute this file under the conditions of the + LaTeX Project Public License 1.3 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}\CheckSum{2012} +% +% \iffalse ltxdoc klootch +%<*package> +%%% @LaTeX-file{ +%%% filename = "ltxfront.dtx", +%%% version = "4.1h", +%%% date = "2009/10/09", +%%% time = "11:23:00 GMT+8", +%%% checksum = "2012", +%%% 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, 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", +%%% docstring = "The checksum field above generated by ltxdoc", +%%% } +%</package> +% \fi +% +% \iffalse ltxdoc klootch +% The following references the \file{00readme} 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*}{00readme}" to locate it. +% \fi\input{00readme}% +% +% \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}00readme\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} +%<*driver|package> +\NeedsTeXFormat{LaTeX2e}[1995/12/01]% +%</driver|package> +% \end{macrocode} +% As desired, the following modules all +% take common version information: +% \begin{macrocode} +%<package>\ProvidesFile{ltxfront.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} +%<*driver|package> + [2009/10/09 4.1h frontmatter package]% \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{00readme} 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} +%<*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}% +\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*}{00readme.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\ 2009 The 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 00readme file. +%\fi +\maketitle + +This file embodies the \classname{ltxfront} package, +the implementation and its user documentation. + +The distribution point for this work is +\url{http://publish.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, +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{00readme}. + +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}% + +\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} +%</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{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. These 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)% +}% +%</package> +% \end{macrocode} +% +% \subsection{Banner}% +% Credit where due. +% \begin{macrocode} +%<*kernel> +\typeout{% + ltxfront [2009/10/06/20:20 4.1g]: Arthur Ogawa (after David P. Carlisle)% +}% +%</kernel> +% \end{macrocode} +% +% \subsection{Prerequisites}% +% +% This package requires the use of the \classname{ltxutil} package. +% \begin{macrocode} +%<*package> +\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. +% \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 amalgamated +% 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. +% This affects the meaning of \cmd\@author@present\ and \cmd\@tempaffil. +% FIXME: apparently \cmd\@tempaffil\ and its aliases are never used. +% +% 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 false. +% +% \classoption{groupedaddress}, the default, 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 +}% +\def\@author@def#1#2{% + \move@AU\move@AF\move@AUAF + \let\@AF@join\@author@join + #1% + \def\@author{{#2}{}}% +}% +\def\@author@join@#1#2#3{% + \def\@author{{#1}{\@join{\@separator}{#2}{#3}}}% +}% +\def\@author@join{\expandafter\@author@join@\@author}% +% \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} +% +% We first finish off any author- or affiliation groups in progress. +% Next, we detect the case where there is an author group in progress, but no affiliation group. +% If so, we emit a diagnositic message and act as if a \cmd\noaffiliation\ command had been given. +% In any case, we finish off any author/affiliation pair that may remain. +% Formatting of the title block may now proceed. +% \begin{macrocode} +\def\@author@finish{% + \move@AU\move@AF + \@ifx{\AU@grp\@empty}{}{% + \@ifx{\AF@grp\@empty}{% + \begingroup + \frontmatterverbose@sw{\say\AU@grp}{}% + \let\href\@secondoftwo + \let\AU@opr\@secondofthree + \let\CO@opr\@secondofthree + \let\footnote\@gobble + \class@warn{Assuming \string\noaffiliation\space for \AU@grp}% + \endgroup + \@affil@def{}\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 similarity and (if using the \classoption{superscriptaddress} option) only print the +% affiliation once, reusing the superscript marker. +% +% When the \cmd\affiliation\ command is encountered, the current author and author group (if any) are at an end. +% Also, the current affiliation is at an end. +% +% FIXME: changes to catcode required elsewhere now? +% \begin{macrocode} +\def\cat@comma@active{\catcode`\,\active}% +{\cat@comma@active\gdef,{\active@comma}}% +\def\active@comma{,\penalty-300\relax}% +\newcommand\affiliation{% + \move@AU\move@AF + \begingroup + \cat@comma@active + \@affiliation +}% +\def\@affiliation#1{% + \endgroup + \let\@AF@join\@affil@join + \@affil@def{#1}% +}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\noaffiliation} +% \changes{4.1b}{2008/08/02}{Use \cs{@affil@def} for all access to \cs{@affil}} +% User-level command \cmd\noaffiliation\ signifies that the current group of authors has \emph{no} affiliation. +% +% This is implemented by acting as if the \cmd\affiliation\ command has been given, and using a +% flag value of \{\}, which adds an element to the affiliation group of this author, +% albeit a nil one (\cmd\AFF@opr\ \{\cmd\z@\} \{\}). +% \begin{macrocode} +\newcommand\frontmatter@noaffiliation{% + \move@AU\move@AF + \@affil@def{}\move@AF + \move@AUAF +}% +\def\blankaffiliation{{}}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@affil@cleared} +% \begin{macro}{\@affil@init} +% \begin{macro}{\@affilclear@sw} +% \begin{macro}{\@affil@def} +% \begin{macro}{\@affil@join@} +% \begin{macro}{\@affil@join} +% \changes{4.1b}{2008/08/02}{Use \cs{@affil@def} for all access to \cs{@affil}} +% +% 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{{{}}{}}% +\appdef\frontmatter@init{% + \@affil@init +}% +\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} +% +% \begin{macro}{\move@AF} +% \changes{4.1b}{2008/08/02}{(AO, 486) \cs{collaboration} to work with \texttt{groupedaddress}} +% 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, +% \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 positive 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 it on the first instance% + }% + }% + }% +% \end{macrocode} +% Removed code +% \cmd\appdef@eval\ \cmd\AF@grp\ \cmd\@tempc, +% which appears to have added the affiliation number even in this case. +% \begin{macrocode} + }% +% \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. +% +% With the expanded syntax of \cmd\collaboration, we need to label each address with +% its associated collaboration. +% \begin{macrocode} + {% + \@if@empty{\expandafter\@firstoftwo\@affil}{% + \def\@tempc{\z@}% + \@argswap@val{\z@}% + }{% + \advance\c@affil\@ne + \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 + }% + }% + }% + \appdef@eval\AF@grp{\the\c@affil}% + }% +% \end{macrocode} +% Append the footnote number of the affiliation to the affiliation group of the current author group. +% \begin{macrocode} + \@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 definition for the \cmd\AFF@opr, the intercollated operator for \cmd\@AFF@list, +% when adding a new affiliation: seeks a match with any earlier affiliation. +% When the affiliation list is executed, this procedure tests each entry against +% the `new' affiliation (which has been stored in \cmd\@tempa) 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 not such a 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, +% \begin{macrocode} +\def\move@AUAF{% + \@ifx{\AF@grp\@empty}% + {% + \@ifx{\@empty\CO@grp}{}{% + \appdef@e \@AAC@list{\CO@grp}% + \appdef@e \@AFG@list{\CO@grp}% + \let\CO@grp\@empty + }% + }{% +% \end{macrocode} +% First, append current affiliation group (expansion of \cmd\AF@grp) +% to the author/affiliation list (\cmd\@AAC@list), +% using \cmd\AF@opr\ as the intercollated operator; +% also append the current authors (\cmd\AU@grp). +% \begin{macrocode} + \appdef \@AAC@list{\AF@opr}% + \appdef@eval\@AAC@list{\AF@grp}% + \appdef@e \@AAC@list{\AU@grp}% + \frontmatterverbose@sw{\say\@AAC@list}{}% +% \end{macrocode} +% Next, 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} + \@ifx{\@empty\AU@grp}{% + \@ifx{\@empty\CO@grp}{% + \false@sw + }{% + \true@sw + }% + }{% + \true@sw + }% + {% + \@ifx{\@empty\AF@grp}{}{% + \@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}% + }% + }% + \@ifx{\@empty\CO@grp}{}{% + \appdef@e \@AFG@list{\CO@grp}% + \let\CO@grp\@empty + }% + }{% + }% +% \end{macrocode} +% Finally, null out the macros holding the author group and affiliation group, respectively. +% \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. +% 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. +% +% 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. +% +% Here is a precis of these lists, their syntax, and the usage of their associated operators: +% \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@err +% +%\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}.} +% \begin{macrocode} +\newcommand*\homepage[1][]{\begingroup\sanitize@url\@homepage{#1}}% +\def\@homepage#1#2{% + \endgroup + \@AF@join{#1\url{#2}}% +}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\url} +% \begin{macro}{\href} +% 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\url{}% + \providecommand\href[1]{}% +}% +% \end{macrocode} +% \end{macro} +% \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@err} +% This command will be executed if are in a \classoption{groupedaddress} situation and +% the document contained a \cmd\collaboration\ command. +% +% There already has been issued a warning message explaining that \cmd\collaboration\ is wrong in this case, +% so here we simply gobble. +% \begin{macrocode} +\def\@collaboration@err#1#2{% +%\class@warn{An illegal \string\collaboration\ command has been entered!}% +}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\doauthor} +% \changes{4.1b}{2008/08/04}{Provide facility \cs{affil@cutoff}: if there is only one affiliation on the title page, no superscript}% +% 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. +% +% \begin{macrocode} +\def\doauthor#1#2#3{% + \ignorespaces#1\unskip\@listcomma + \begingroup + \def\@tempifx{#3}% + \@ifx{\@tempifx\@empty}{% + \false@sw + }{% + \@ifnum{\c@affil<\affil@cutoff}{% + \false@sw + }{% + \true@sw + }% + }% + {% + #3\aftergroup\true@sw + }{% + \aftergroup\false@sw + }% + \@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 + \temp@sw{% + \expandafter\frontmatter@footnotemark + \expandafter{\@tempb}% + }{% + \stepcounter\@mpfn + \protected@xdef\@tempb{\the\csname c@\@mpfn\endcsname}% + \expandafter\frontmatter@footnotemark + \expandafter{\@tempb}% + \expandafter\g@addto@macro + \expandafter\@FMN@list + \expandafter{% + \expandafter \@TBN@opr + \expandafter {\@tempb}{#1}% + }% + }% + \endgroup +}% +\appdef\frontmatter@init{% + \global\let\@FMN@list\@empty +}% +\def\frontmatter@footnotemark#1{% + \leavevmode + \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi + \begingroup + \hyper@linkstart {link}{frontmatter.#1}% + \csname c@\@mpfn\endcsname#1\relax + \def\@thefnmark{\thempfn}% + \@makefnmark + \hyper@linkend + \endgroup + \ifhmode\spacefactor\@x@sf\fi + \relax +}% +% \end{macrocode} +% \end{macro} +% +% +% +% \subsection{The keywords command}% +% \begin{macro}{\keywords} +% \begin{macro}{\@keywords} +% Usual game, save text in a macro for processing by \cmd\maketitle. +% \begin{macrocode} +\def\keywords#1{% + \aftermaketitle@chk{\keywords}% + \gdef\@keywords{#1}% +}% +\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}. +% +% The user can elect to use this new mechanism via the \classoption{newabstract}; +% likewise the old mechanism via the \classoption{oldabstract}. +% +% 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 + \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 \texttt{p@mpfootnote} instead of \texttt{p@mpfootnote}, and +% \cmd\frontmatter@makefntext\ instead of \cmd\@makefntext. +% +% \changes{4.1f}{2009/07/07}{(AO, 515) Use \cs{set@footnotefont}, which is defined in ltxutil} +% \begin{macrocode} +\long\def\frontmatter@footnotetext#1{% + \minipagefootnote@pick + \set@footnotefont + \set@footnotewidth + \@parboxrestore + \protected@edef\@currentlabel{\csname p@mpfootnote\endcsname\@thefnmark}% + \color@begingroup + \frontmatter@makefntext{% + \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox + }% + \color@endgroup + \minipagefootnote@drop +}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\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. +% \begin{macrocode} + \ltx@footnote@pop + \let\thefootnote\frontmatter@thefootnote + \let\@makefnmark\frontmatter@makefnmark + \global\c@footnote\z@ + \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. +% \begin{macrocode} +\def\frontmatter@author@produce@script{% + \begingroup + \let\@author@present\@author@present@script + \frontmatterverbose@sw{\say\@AAC@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. +% +% 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 + \frontmatterverbose@sw{\say\@AFF@list}{}% + \@AFF@list + \frontmatter@footnote@produce + \par + \endgroup + \endgroup +}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@author@count} +% This version of \cmd\AU@opr\ counts the number of authors it processes. +% \begin{macrocode} +\def\@author@count#1{% + \advance#1\@ne + \@author@gobble +}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@collaboration@present} +% Format a collaboration. +% Note that we immediately end the paragraph thus begun, because we only support +% \classoption{superscriptaddress}-style processing. +% +% Note also that the execution of the production procedures takes place inside of a group; +% for reasons of protective programming. +% +% Bug note: originally, the number of authors in each collaboration was stored in \cmd\@tempa, +% but this exposed us to procedures in our production that modified the meaning of \cmd\@tempa. +% +% The last action done in this procedure is to assign \cmd\@listcomma\ based on the number of authors in the next collaboration. +% \begin{macrocode} +\def\@collaboration@present#1#2#3#4{% + \par + \begingroup + \frontmatter@collaboration@above + \@affilID@def{}% + \@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 \cmd\@AFG@list\ and 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 +% |#2|---Collaboration ID +% |#3|---Affiliation address +% |#4|---Auxiliary info +% \begin{macrocode} +\def\@affil@script#1#2#3#4{% + \@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} +% 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}{% + \let\@tempa\@empty + \expandafter\@affil@present@script\@affilID@temp\relax + }% + \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}% + }% + }% + }% +}% +\def\@affil@present@script#1{% + \@ifx{\relax#1}{% + \@ifx{\@tempa\@empty}{}{% + \textsuperscript{\expandafter\@affilcomma\@tempa\relax\relax}% + }% + }{% + \@ifx{\z@#1}{}{\appdef\@tempa{{#1}}}% + \@affil@present@script + }% +}% +\@provide\@author@parskip{\z@skip}% +% \end{macrocode} +% \end{macro} +% +% +% \subsubsection{Authors and affiliations in groupedaddress style} +% +% \begin{macro}{\frontmatter@author@produce@group} +% \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. +% \begin{macrocode} +\def\frontmatter@author@produce@group{% + \begingroup + \let\@author@present\@author@present@group + \frontmatter@authorformat + \frontmatterverbose@sw{\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 + \frontmatterverbose@sw{\say\@AAC@list}{}% + \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{% + }{% + \parskip\z@ %space between affilations in grouped mode + }% + \appdef\after@address\par + }% + \let\AFF@opr \@affil@group + \do@affil@fromgroup\@AFF@list#1\relax + \endgroup +% \end{macrocode} +% End of branch handling authors. +% \begin{macrocode} + }% +% \end{macrocode} +% +% \begin{macrocode} + \par + \endgroup +}% +% \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@err +}% +\def\@affilID@match#1#2{% + \def\@tempifx{#2}% + \@ifx{\@tempifx#1}{% + \let\AU@opr \@author@present + }{% + \let\AU@opr \@author@gobble + }% + \let\CO@opr \@collaboration@err +}% +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\do@affil@fromgroup} +% Executes iteratively: +% selects the next address ID to print, +% and then re-execute the list of addresses to print the text of that address. +% +% Note: an argument of \cmd\relax\ breaks out of this iteration, +% while an argument of \cmd\z@\ (\cmd\noaffiliation) is a no-op. +% +% Note: we have 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} +% \changes{4.0d}{1998/01/31}{\cs{comma@space}} +% This version of \cmd\AU@opr\ applies to the \classoption{groupedaddress} class option. +% Traverse the list calling the \cmd\doauthor\ hook on each author. +% \begin{macrocode} +\def\@author@present@group#1#2#3{% + \gdef\comma@space{\gdef\comma@space{\textsuperscript{,\,}}}% + \doauthor{#2}{#3}{}% + \advance\@tempcnta\m@ne +}% +% \end{macrocode} +% \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 +}% +\def\present@FM@footnote#1#2{% + \begingroup + \csname c@\@mpfn\endcsname#1\relax + \def\@thefnmark{\thempfn}% + \frontmatter@footnotetext{#2}% + \endgroup +}% +\def\frontmatter@footnote@produce@endnote{% +}% +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \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} +% 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}\c@footnote +}% +\@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. +% \begin{macrocode} +\long\def\frontmatter@makefntext#1{% + \parindent 1em + \noindent + \Hy@raisedlink{\hyper@anchorstart{frontmatter.\the\c@footnote}\hyper@anchorend}% + \@makefnmark + #1% +}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\frontmatter@setup} +% The default type specification for the title page. +% 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. +% +% FIXME: \cmd\noaffiliation\ should not be necessary! +% +% FIXME: footnotes not working! +% +% \begin{verbatim} +% \@maketitle: \frontmatter@footnote@produce +% \end{verbatim} +% \begin{macrocode} +\def\thanks@latex#1{% + \footnotemark + \expandafter\gappdef + \expandafter\@thanks + \expandafter{% + \expandafter\footnotetext + \expandafter[\the\c@footnote]{#1}}% +}% +\@booleanfalse\altaffilletter@sw +% \end{macrocode} +% \begin{macrocode} +\@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}% +\def\frontmatter@footnotetext{\footnotetext[\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 |