%%% ====================================================================
%%% @LaTeX-file{
%%% filename = "amsclass.dtx",
%%% version = "1.2q",
%%% date = "1996/11/05",
%%% time = "11:55:19 EST",
%%% checksum = "63668 3423 13546 125878",
%%% author = "American Mathematical Society",
%%% copyright = "Copyright (C) 1996 American Mathematical Society,
%%% all rights reserved. Copying of this file is
%%% authorized only if either:
%%% (1) you make absolutely no changes to your copy,
%%% including name; OR
%%% (2) if you do make changes, you first rename it
%%% to some other name.",
%%% address = "American Mathematical Society,
%%% Technical Support,
%%% Electronic Products and Services,
%%% P. O. Box 6248,
%%% Providence, RI 02940,
%%% USA",
%%% telephone = "401-455-4080 or (in the USA and Canada)
%%% 800-321-4AMS (321-4267)",
%%% FAX = "401-331-3842",
%%% email = "tech-support@ams.org (Internet)",
%%% codetable = "ISO/ASCII",
%%% keywords = "latex, amslatex, ams-latex",
%%% supported = "yes",
%%% abstract = "This is part of the AMS-\LaTeX{} distribution.
%%% It produces output conforming to the style
%%% conventions of American Mathematical Society
%%% publications. The file \fn{amsclass.dtx} is
%%% converted by the installation procedure
%%% into three document classes:
%%% \cls{amsart}, \cls{amsproc}, and \cls{amsbook},
%%% which are intended, respectively,
%%% for articles and books containing mathematical
%%% research; both class files will also carry this
%%% heading, and the particular class should be
%%% determined from the external file name.",
%%% docstring = "The checksum field above contains a CRC-16
%%% checksum as the first value, followed by the
%%% equivalent of the standard UNIX wc (word
%%% count) utility output of lines, words, and
%%% characters. This is produced by Robert
%%% Solovay's checksum utility.",
%%% }
%%% ====================================================================
%
% \iffalse
%<*driver>
\documentclass{amsdtx}
\begin{document}
\title{The \cls{amsart}, \cls{amsproc}, and \cls{amsbook} document classes}
\author{American Mathematical Society\\Michael Downes}
\date{Version \fileversion, \filedate}
\hDocInput{amsclass.dtx}
\end{document}
%
% \fi
%
% \maketitle
%
% \MakeShortVerb\|
% \section{Introduction}
% This file (\fn{amsclass.dtx}) is the master file for three \latex/
% document classes, \cls{amsart}, \cls{amsproc}, and \cls{amsbook},
% which are intended for articles and books containing mathematical
% research. They produce output that follows the style conventions of
% American Mathematical Society publications.
%
% \StopEventually{}
%
% \section{Implementation}
% The usual name, date, and version information. (Note: the reason
% each \cs{ProvidesClass} command is placed on a line by itself, with
% separate begin and end guards for docstripping, is to make
% automatic update of file date and version slightly easier and more
% robust.)
%
% If this documentclass is not loaded by a parent class, then we will
% define \cs{@parentclass} here for use in class error and warning
% messages.
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}% LaTeX 2.09 can't be used (nor non-LaTeX)
[1994/12/01]% LaTeX date must December 1994 or later
%<*amsart>
\ProvidesClass{amsart}[1996/11/05 v1.2q]
%
%<*amsproc>
\ProvidesClass{amsproc}[1996/11/05 v1.2q]
%
%<*amsbook>
\ProvidesClass{amsbook}[1996/11/05 v1.2q]
%
% \end{macrocode}
%
% If there is a parent documentclass that is loading this class,
% then we want to use the name of the parent class. Otherwise the
% name of the current class file.
% \begin{macrocode}
\def\@tempa#1#2\@nil{\edef\@classname{#1}}
\expandafter\@tempa\@currnamestack{}{}{}\@nil
\ifx\@classname\@empty \edef\@classname{\@currname}\fi
% \end{macrocode}
%
% \section{Options}
% \subsection{Notes}
% Note: Options will be processed in the order they are declared;
% cf.~\cs{ProcessOptions}.
%
% \subsection{Paper size}
%
% The option \opt{letterpaper} (default) sets the target paper width
% and height to U.S. letter size, 8.5 in x 11 in. An option
% \opt{a4paper} is also supported, but we don't include some of the
% more unusual paper options (\opt{legalpaper}, \opt{a5paper},
% \opt{executivepaper}) of the generic \cls{article} class. For A4
% paper we not only change the paper size but also add 4pc to the
% normal textheight of 50.5pc (the difference between 297mm and 11in
% is 50pt).
% \begin{macrocode}
\DeclareOption{a4paper}{\paperheight 297mm\paperwidth 210mm
\textheight 54.5pc }
\DeclareOption{letterpaper}{\paperheight 11in\paperwidth 8.5in }
% \end{macrocode}
%
% The options \opt{landscape} and \opt{portrait} swap paper height
% and width.
% \begin{macrocode}
\DeclareOption{landscape}{\@tempdima\paperheight
\paperheight\paperwidth \paperwidth\@tempdima}
\DeclareOption{portrait}{}
% \end{macrocode}
%
% \subsection{Two-side or one-side printing}
%
% For two-sided printing we set the switch \cs{if@twoside} which
% will cause the margins to be adjusted so that the type blocks of
% back-to-back pages will line up. The \cs{if@mparswitch} makes margin
% paragraphs print in the outside margin.
% \begin{macrocode}
\DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse}
\DeclareOption{twoside}{\@twosidetrue \@mparswitchtrue}
% \end{macrocode}
%
% \subsection{Draft or final version}
%
% The \opt{draft} option causes overfull lines to be marked with
% a black slug in the right margin.
% \begin{macrocode}
\DeclareOption{draft}{\overfullrule5\p@ }
\DeclareOption{final}{\overfullrule\z@ }
% \end{macrocode}
%
% \subsection{E-only journal}
%
% Electronic-only journals (for \cls{amsart} only) have different
% information in the series logo than paper-only or dual journals.
% Only the volume number is reported (no issue or year), and the
% posting date is added following the page numbers. [bnb, 1996/10/31]
%
% This option will be invoked only from publication-specific \fn{.cls}
% files.
% \begin{macrocode}
%<*amsart>
\def\dateposted#1{\def\@dateposted{\ (#1)}}%
\let\@dateposted\@empty
\DeclareOption{e-only}{%
\def\volinfo{Volume \currentvolume}%
\dateposted{Xxxx XX, XXXX}%
}
%
% \end{macrocode}
%
% \subsection{Title page}
%
% The title and related information can optionally be printed on a
% separate page.
% \begin{macrocode}
\newif\if@titlepage
\DeclareOption{titlepage}{\@titlepagetrue}
\DeclareOption{notitlepage}{\@titlepagefalse}
% \end{macrocode}
%
% \subsection{Start on right- or left-hand page}
%
% For some book series, it's permissible to start chapters on a
% left-hand page.
% \begin{macrocode}
\newif\if@openright
\DeclareOption{openright}{\@openrighttrue}
\DeclareOption{openany}{\@openrightfalse}
% \end{macrocode}
%
% \subsection{Two-column printing}
%
% Two-column layout is handled through a predefined internal switch.
% \begin{macrocode}
\DeclareOption{onecolumn}{\@twocolumnfalse}
\DeclareOption{twocolumn}{\@twocolumntrue}
% \end{macrocode}
%
% \subsection{The nomath option}
%
% The `nomath' option causes most of the extra math features to be
% omitted. Some utility functions will be defined below if this
% option is specified.
% \begin{macrocode}
\DeclareOption{nomath}{}
% \end{macrocode}
%
% \subsection{Some font options}
%
% The `noamsfonts' option means to avoid declaring math alphabets or
% symbol fonts for the extra math fonts in the AMSFonts set. If these
% fonts are declared, it means that the corresponding \fn{.tfm} files
% are required even for documents that do not use any symbols from
% those fonts. So we allow optionally to not declare them, for
% convenience of users who don't have those fonts on their system and
% don't want the hassle of getting them.
% \begin{macrocode}
\def\mathfrak{needed}
\DeclareOption{noamsfonts}{\let\mathfrak\relax}
% \end{macrocode}
% The `psamsfonts' option, passed on the amsfonts package, means that
% alternative \fn{.fd} files should be used that do not refer to
% \fn{.tfm} files for sizes 6,8,9 (which are not present in the
% PostScript AMS fonts set from Y\&Y/Blue Sky Research). This should
% also trigger the \opt{cmex10} option of \pkg{amsmath}, to avoid
% trying to load sizes 7--9 of \fn{cmex}.
% \begin{macrocode}
\DeclareOption{psamsfonts}{%
\PassOptionsToPackage{psamsfonts}{amsfonts}%
\PassOptionsToPackage{cmex10}{amsmath}}
% \end{macrocode}
%
% \subsection{Equation numbering on the left or right}
%
% The option \opt{leqno}---equation numbers on the left---is the
% default in AMS styles. Therefore we provide also a \opt{reqno}
% option.
% \begin{macrocode}
\newif\iftagsleft@
\DeclareOption{leqno}{%
\tagsleft@true \PassOptionsToPackage{leqno}{amsmath}}
\DeclareOption{reqno}{%
\tagsleft@false \PassOptionsToPackage{reqno}{amsmath}}
% \end{macrocode}
%
% \subsection{Vertical centering of equation numbers}
% For multiline equations the equation number is by default centered
% vertically on the total height of the equation. To make the
% equation number print on the first line (for left-hand
% numbers) or the last line (right-hand numbers), there is a tbtags
% option `top/bottom tags'.
% \begin{macrocode}
\newif\ifctagsplit@
\DeclareOption{centertags}{%
\ctagsplit@true \PassOptionsToPackage{centertags}{amsmath}}
\DeclareOption{tbtags}{%
\ctagsplit@false \PassOptionsToPackage{tbtags}{amsmath}}
% \end{macrocode}
%
% \subsection{Flush left displays}
%
% The option \opt{fleqn} causes displayed equations to print
% aligned on the left instead of centered, with an indentation
% of \cs{mathindent} from the prevailing left margin. If the
% \pkg{amsmath} package is loaded, most of this code will be
% overridden, but it seems we need it anyway because of the
% possibility of the `nomath' class option.
%
% Note: These definitions for \opt{fleqn} differ greatly from
% those in \pkg{amsmath}, where \cs{mathindent} is not used, but
% deprecated with copious documentation. This is an area for
% future examination. [bnb, 1996/10/10]
% \begin{macrocode}
\DeclareOption{fleqn}{%
\def\[{\relax
\ifmmode\@badmath
\else
\begin{trivlist}%
\@beginparpenalty\predisplaypenalty
\@endparpenalty\postdisplaypenalty
\item[]\leavevmode
\hbox to\linewidth\bgroup$\displaystyle
% \end{macrocode}
% Note that the \cs{m@th} should go at the end in \cs{]} just in
% case an embedded small math formula inside \cn{text} occurs in
% the display.
%
% Why the extra bgroup here? I think it's not needed.
% [mjd,3-Feb-1994]
% \begin{macrocode}
\hskip\mathindent\bgroup
\fi}%
\def\]{\relax
\ifmmode
\egroup \m@th$\hfil \egroup
\end{trivlist}%
\else \@badmath
\fi}%
\renewenvironment{equation}{%
\@beginparpenalty\predisplaypenalty
\@endparpenalty\postdisplaypenalty
\refstepcounter{equation}%
\@topsep\abovedisplayskip \trivlist
\item[]\leavevmode
\hbox to\linewidth\bgroup\hskip\mathindent$\displaystyle
}{%
\m@th$\hfil \displaywidth\linewidth \hbox{\@eqnnum}\egroup
\endtrivlist
}%
\renewenvironment{eqnarray}{%
\stepcounter{equation}\let\@currentlabel\theequation
\global\@eqnswtrue \global\@eqcnt\z@ \tabskip\mathindent
\let\\=\@eqncr \abovedisplayskip\topsep
\ifvmode \advance\abovedisplayskip\partopsep \fi
\belowdisplayskip\abovedisplayskip
\belowdisplayshortskip\abovedisplayskip
\abovedisplayshortskip\abovedisplayskip
$$\everycr{}\halign to\linewidth\bgroup
\hskip\@centering
$\displaystyle\tabskip\z@skip####\m@th$&%
\@eqnsel \global\@eqcnt\@ne
\hfil${}####{}\m@th$\hfil&%
\global\@eqcnt\tw@
$\displaystyle ####\m@th$\hfil\tabskip\@centering&%
\global\@eqcnt\thr@@
\hbox to \z@\bgroup\hss####\egroup\tabskip\z@skip\cr
}{%
\@@eqncr \egroup \global\advance\c@equation\m@ne$$%
\global\@ignoretrue
}%
\newdimen\mathindent \mathindent\leftmargini
}
% \end{macrocode}
%
% \subsection{Dealing with font sizes}
%
% \begin{macro}{\@mainsize}
% \begin{macro}{\@ptsize}
% Instead of the miserly \cs{@ptsize} variable from \latex/'s
% ancient history that only contained the last digit of the main
% typesize, we set up a proper variable \cs{@mainsize} that
% contains all the digits of the main typesize. Just in case it is
% needed for someone using an old package, we will keep
% \cs{@ptsize} also.
% \begin{macrocode}
\newcommand{\@mainsize}{10}
\newcommand{\@ptsize}{0}
% \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\larger}
% \begin{macro}{\smaller}
% This function is an easy byproduct of the work done to fold
% typesize-specific code into the main class file. The range of font
% sizes is \cn{normalsize}, \cn{small}, \cn{Small}, \cn{SMALL},
% \cn{tiny}, \cn{Tiny}, \cn{large}, \cn{Large}, \cn{LARGE},
% \cn{huge}, \cn{Huge}. Spaces are left at either end of the case
% statement to accommodate adding \cn{TINY} and \cn{HUGE} in the
% future but it's not clear that they're really needed.
% \begin{macrocode}
\newcommand{\larger}[1][1]{%
\count@\@currsizeindex \advance\count@#1\relax
\ifnum\count@<\z@ \count@\z@ \else\ifnum\count@>12 \count@12 \fi\fi
% \end{macrocode}
% The various size-changing commands \cn{normalsize}, etc. will take
% care of updating \cs{@currsizeindex}.
% \begin{macrocode}
\ifcase\count@
\Tiny\or\Tiny\or\tiny\or\SMALL\or\Small\or\small
\or\normalsize
\or\large\or\Large\or\LARGE\or\huge\or\Huge\else\Huge
\fi
}
\newcommand{\smaller}[1][1]{\larger[-#1]}
% \end{macrocode}
% \end{macro}
% \end{macro}
%
% The \cs{@adjustvertspacing} function adapts some vertical spacing
% amounts to the current type size. We don't expect large sections of
% vertical text to occur in the extraordinarily small or large type
% sizes, so the \cs{@adjustvertspacing} function is only called in
% the range between `footnote' size and `Large' size. Notice that no
% shrinkability is used.
% \begin{macrocode}
\def\@adjustvertspacing{%
% \end{macrocode}
% \cs{big/med/smallskipamount} are generic space values that will be
% used by the commands \cs{bigskip}, \cs{medskip}, \cs{smallskip}. We
% also link the spacing around displayed equations to these amounts.
% \begin{macrocode}
\bigskipamount.7\baselineskip plus.7\baselineskip
\medskipamount\bigskipamount \divide\medskipamount\tw@
\smallskipamount\medskipamount \divide\smallskipamount\tw@
\abovedisplayskip\medskipamount
\belowdisplayskip \abovedisplayskip
% \end{macrocode}
% The above-display short space is zero but with the same
% stretchability as the above-display normal space. And the
% below-display short space is similar, but has a base value equal to
% \cs{smallskipamount}. Use of the multiplier |1| is an arcane \TeX{}
% trick that coerces the skip value to a dimen value, i.e., gives us
% the base value of the skip register without the stretch or shrink
% values.
% \begin{macrocode}
\abovedisplayshortskip\abovedisplayskip
\advance\abovedisplayshortskip-1\abovedisplayskip
\belowdisplayshortskip\abovedisplayshortskip
\advance\belowdisplayshortskip 1\smallskipamount
% \end{macrocode}
% The traditional value for \cs{jot} is 3pt, which we generalize
% to \cs{baselineskip}/4. This is used to adjust interline spacing in
% multiline displayed equations.
% \begin{macrocode}
\jot\baselineskip \divide\jot 4 \relax
}
% \end{macrocode}%
%
% We fill out the range of typesize changing commands to a full
% eleven: five large/huge commands and five small/tiny commands. (The
% capitalization of the command names suggests that there should
% actually be thirteen---add \cn{TINY} and \cn{HUGE}---but let's be
% conservative and leave those out until a real need for them is
% known to exist.) An unavoidable side effect is that \cn{tiny} now
% selects 6pt instead of 5pt by default.
%
% In version 1.1 of \cls{amsart} and \cls{amsbook} \cn{small} was
% the same as \cn{footnotesize} (\cls{amsproc} didn't exist in v. 1.1).
%
% The only size-changing command that is predefined by \latex/ is
% \cn{normalsize}; that's why it's the only one for which we use
% \cn{renewcommand} below.
% \begin{macrocode}
\renewcommand\normalsize{\@xsetfontsize\normalsize 6%
\@adjustvertspacing \let\@listi\@listI}
%\newcommand\TINY{\@xsetfontsize\TINY 0}
\newcommand\Tiny{\@xsetfontsize\Tiny 1}
\newcommand\tiny{\@xsetfontsize\tiny 2}
\newcommand\SMALL{\@xsetfontsize\SMALL 3}
\newcommand\Small{\@xsetfontsize\Small 4%
\@adjustvertspacing
\def\@listi{\topsep\smallskipamount \parsep\z@skip \itemsep\z@skip}}
\newcommand\small{\@xsetfontsize\small 5\@adjustvertspacing}
% \end{macrocode}
% For backward compatibility we had better define \cn{footnotesize}
% and \cn{scriptsize}. Also there is the small discrepancy with
% \cn{tiny} to worry about.
% \begin{macrocode}
\def\footnotesize{\Small}
\def\scriptsize{\SMALL}
% \end{macrocode}
%
% The sizes above 10pt use magstep values, stored in the functions
% \cs{@xipt}, \cs{@xiipt}, etc.
% \begin{macrocode}
\newcommand\large{\@xsetfontsize\large 7\@adjustvertspacing}
\newcommand\Large{\@xsetfontsize\Large 8\@adjustvertspacing}
\newcommand\LARGE{\@xsetfontsize\LARGE 9}
\newcommand\huge{\@xsetfontsize\huge{10}}
\newcommand\Huge{\@xsetfontsize\Huge{11}}
%\newcommand\HUGE{\@xsetfontsize\HUGE{12}}
% \end{macrocode}
%
% So now we had better define the \cs{@xsetfontsize} function.
% The size-changing commands use \cs{@setfontsize} instead of
% \cs{fontsize} to (a)~give an error message if used in math mode and
% (b)~set the \cs{@currsize} variable.
% \begin{macrocode}
\def\@xsetfontsize#1#2{%
\chardef\@currsizeindex#2\relax
\edef\@tempa{\@nx\@setfontsize\@nx#1%
\@xp\ifcase\@xp\@currsizeindex\@typesizes
% \end{macrocode}
% Add nonsense values 99/99 at the end just in case some extreme
% error turns up.
% \begin{macrocode}
\else{99}{99}\fi}%
\@tempa
}
% \end{macrocode}
% For the record let's initialize \cs{@currsizeindex}.
% \begin{macrocode}
\chardef\@currsizeindex=6
% \end{macrocode}
%
% Set page-breaking penalties to prevent all widows, orphans, and
% hyphens at the end of a page.
% \begin{macrocode}
\widowpenalty=10000
\clubpenalty=10000
\brokenpenalty=10000
% \end{macrocode}
%
% Set some default linespacing values. The variable \cs{linespacing}
% is usually the normal interline space in the main text. It is used
% to specify vertical space for elements such as section heads and
% theorems in proportion to the normal interline space.
% \begin{macrocode}
\newdimen\linespacing
\lineskip=1pt \lineskiplimit=1pt
\normallineskip=1pt \normallineskiplimit=1pt
\let\baselinestretch=\@empty
% \end{macrocode}
%
% Settings for \cn{textheight} and \cn{textwidth}. We start with the
% value 50.5pc specified in AMS journal specifications as the total
% height of the type block and then subtract the running head height
% and adjust for \cs{topskip} to get the proper value for the text
% block.
% \begin{macrocode}
\headheight=5pt \headsep=14pt
%\footskip=18pt
%\footskip=12pt
\textheight=50.5pc \topskip=10pt
\textwidth=30pc
\columnsep=10pt \columnseprule=0pt
% \end{macrocode}
% Some settings for marginpars.
% \begin{macrocode}
\marginparwidth=90pt
\marginparsep=11pt
\marginparpush=5pt
% \end{macrocode}
% To avoid setting text before begin-document, we postpone the
% setting of \cs{footnotesep} using \cs{AtBeginDocument}.
% \begin{macrocode}
\AtBeginDocument{\settoheight{\footnotesep}{\footnotesize M$^1$}}
% \end{macrocode}
%
% \begin{macrocode}
\skip\footins=7pt plus11pt
\skip\@mpfootins=\skip\footins
% \end{macrocode}
%
% \begin{macrocode}
\fboxsep=3pt \fboxrule=.4pt
% \end{macrocode}
%
% \begin{macrocode}
\arrayrulewidth=.4pt \doublerulesep=2pt
\labelsep=5pt \arraycolsep=\labelsep
\tabcolsep=\labelsep \tabbingsep=\labelsep
% \end{macrocode}
%
% \begin{macrocode}
\floatsep=15pt plus 12pt \dblfloatsep=15pt plus 12pt
\textfloatsep=\floatsep \dbltextfloatsep=15pt plus 12pt
\intextsep=\floatsep
% \end{macrocode}
%
% \begin{macrocode}
\@fptop=0pt plus1fil \@dblfptop=0pt plus1fil
\@fpbot=0pt plus1fil \@dblfpbot=0pt plus1fil
\@fpsep=8pt plus2fil \@dblfpsep=8pt plus2fil\relax
% \end{macrocode}
% Note that \cs{parskip} gets no stretch; this is at variance with
% the generic \latex/ classes.
% \begin{macrocode}
\parskip=0pt \relax
% \end{macrocode}
%
% \cs{@parboxrestore}, used by \cs{@footnotetext}, sets
% \cs{parindent} to |0pt|; since this is not what we want, we
% make a new dimen \cs{normalparindent} and after calling
% \cs{@parboxrestore}, \cs{@footnotetext} resets
% \cs{parindent} back to normal.
% \begin{macrocode}
\newdimen\normalparindent
%\normalparindent=12pt
%\normalparindent=18pt
\parindent=\normalparindent
% \end{macrocode}
%
% \begin{macrocode}
\partopsep=0pt \relax \parsep=0pt \relax \itemsep=0pt \relax
% \end{macrocode}
%
% \begin{macrocode}
\@lowpenalty=51 \@medpenalty=151 \@highpenalty=301
\@beginparpenalty=-\@lowpenalty
\@endparpenalty=-\@lowpenalty
\@itempenalty=-\@lowpenalty
% \end{macrocode}
%
% \subsection{Typesize-specific code}
%
% The class option \opt{12pt} sets the main typesize to 12 pt and
% makes various adaptations, primarily sliding the size-changing
% commands up the scale of magsteps. This makes it more likely that
% someone with bitmapped fonts will have all the fonts and sizes
% that they need. The \opt{8pt} option is for those who like to
% conserve paper.
%
% By parameterizing some aspects it is possible to make a great deal
% of the typesize-specific code automatically adapt to the selected
% size. Then there is so little typesize-specific code remaining
% that it no longer makes sense to put the code in separate \fn{.clo}
% files. So instead of analogs for the generic \fn{size10,11,12.clo}
% files we have the code for those options entirely contained in the
% \fn{.cls} file in the form of declared options.
%
% Some miscellaneous remarks.
%
% ---If PostScript fonts are used, it may seem a little strange to
% use fonts following the magstep'd point sizes 10.95, 14.4, 17.28,
% 20.74, 24.88 instead of simply 11, 14, 17, 21, 25. But it is not
% easy for us to make that distinction here in the documentclass
% definitions of the fontsize changing commands. So we don't try.
%
% \begin{macrocode}
\DeclareOption{10pt}{\def\@mainsize{10}\def\@ptsize{0}%
\def\@typesizes{%
% \end{macrocode}
% There should be 11 typesize/baselineskip pairs: five below
% \cn{normalsize} and five above.
% \begin{macrocode}
\or{5}{6}\or{6}{7}\or{7}{8}\or{8}{10}\or{9}{11}%
\or{10}{12}% normalsize
\or{\@xipt}{13}\or{\@xiipt}{14}\or{\@xivpt}{17}%
\or{\@xviipt}{20}\or{\@xxpt}{24}}%
\normalsize \linespacing=\baselineskip
}
%
\DeclareOption{11pt}{\def\@mainsize{11}\def\@ptsize{1}%
\def\@typesizes{%
\or{6}{7}\or{7}{8}\or{8}{10}\or{9}{11}\or{10}{12}%
\or{\@xipt}{13}% normalsize
\or{\@xiipt}{14}\or{\@xivpt}{17}\or{\@xviipt}{20}%
\or{\@xxpt}{24}\or{\@xxvpt}{30}}%
\normalsize \linespacing=\baselineskip
}
%
\DeclareOption{12pt}{\def\@mainsize{12}\def\@ptsize{2}%
\def\@typesizes{%
\or{7}{8}\or{8}{10}\or{9}{11}\or{10}{12}\or{\@xipt}{13}%
\or{\@xiipt}{14}% normalsize
\or{\@xivpt}{17}\or{\@xviipt}{20}\or{\@xxpt}{24}%
\or{\@xxvpt}{30}\or{\@xxvpt}{30}}%
\normalsize \linespacing=\baselineskip
}
%
\DeclareOption{8pt}{\def\@mainsize{8}\def\@ptsize{8}%
\def\@typesizes{%
\or{5}{6}\or{5}{6}\or{5}{6}\or{6}{7}\or{7}{8}%
\or{8}{10}% normalsize
\or{9}{11}\or{10}{12}\or{\@xipt}{13}%
\or{\@xiipt}{14}\or{\@xivpt}{17}}%
\normalsize \linespacing=\baselineskip
}
%
\DeclareOption{9pt}{\def\@mainsize{9}\def\@ptsize{9}%
\def\@typesizes{%
\or{5}{6}\or{5}{6}\or{6}{7}\or{7}{8}\or{8}{10}%
\or{9}{11}% normalsize
\or{10}{12}\or{\@xipt}{13}\or{\@xiipt}{14}%
\or{\@xivpt}{17}\or{\@xviipt}{20}}%
\normalsize \linespacing=\baselineskip
}
% \end{macrocode}
%
% \subsection{Running heads}
% The normal application of pagestyle functions \cs{ps@xxx} is to
% determine the contents of running heads and feet. The function
% \cs{@mkboth} is used internally by commands \cn{chapter},
% \cn{section}, and the like to set the running heads.
% \begin{macrocode}
\def\ps@empty{\let\@mkboth\@gobbletwo
\let\@oddhead\@empty \let\@evenhead\@empty
\let\@oddfoot\@empty \let\@evenfoot\@empty
% \end{macrocode}
% The current implementation in amsart/amsproc/amsbook of the vertical
% space at the top of an opening page uses \cs{topskip}, which
% means that we need to do some resetting here.
% \begin{macrocode}
\global\topskip\normaltopskip}
% \end{macrocode}
% Pagestyle `plain' has the page numbers in the running feet.
% \begin{macrocode}
\def\ps@plain{\ps@empty
\def\@oddfoot{\normalfont\scriptsize \hfil\thepage\hfil}%
\let\@evenfoot\@oddfoot}
% \end{macrocode}
%
% Pagestyle `headings' uses text from sectioning commands for
% running heads. Empty running feet.
% \begin{macrocode}
\def\ps@headings{\ps@empty
\def\@evenhead{\normalfont\scriptsize
\rlap{\thepage}\hfil \leftmark{}{}\hfil}%
\def\@oddhead{\normalfont\scriptsize \hfil
\rightmark{}{}\hfil \llap{\thepage}}%
\let\@mkboth\markboth
%<*amsbook>
\def\partmark{\@secmark\markboth\partrunhead\partname}%
\def\chaptermark{%
\@secmark\markboth\chapterrunhead{}}%
\def\sectionmark{%
\@secmark\markright\sectionrunhead\sectionname}%
%
}
% \end{macrocode}
%
% \begin{macro}{\sectionname}
% \begin{macro}{\subsectionname}
% \begin{macro}{\subsubsectionname}
% \begin{macro}{\paragraphname}
% \begin{macro}{\subparagraphname}
% Initialize section headings.
% \begin{macrocode}
\let\sectionname\@empty
\let\subsectionname\@empty
\let\subsubsectionname\@empty
\let\paragraphname\@empty
\let\subparagraphname\@empty
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% The default definitions of \cs{leftmark}, \cs{rightmark} are not
% what we want: the section title (or whatever) reported in the
% right-hand running head should report the section that is current
% at the bottom of the right-hand page. And the left-hand running
% head should report the status at the top of the page.
% Cf.~\fn{amsppt.sty}.
% \begin{macrocode}
\def\leftmark{\expandafter\@firstoftwo\topmark{}{}}
\def\rightmark{\expandafter\@secondoftwo\botmark{}{}}
% \end{macrocode}
%
% Journal and Proceedings articles require an indication of the first
% page so the logo and copyright line can appear.
% \begin{macrocode}
%<*amsart|amsproc>
\def\ps@firstpage{\ps@plain
\def\@oddfoot{\normalfont\scriptsize \hfil\thepage\hfil
% \end{macrocode}
% Stick in the reset of topskip here so it only gets executed after
% the first page is completed.
% \begin{macrocode}
\global\topskip\normaltopskip}%
\let\@evenfoot\@oddfoot
\def\@oddhead{\@serieslogo\hss}%
\let\@evenhead\@oddhead % in case an article starts on a left-hand page
}
%
% \end{macrocode}
%
% \begin{macro}{\@nilgobble}
% Something that apparently doesn't exist in the kernel?
% \begin{macrocode}
\long\def\@nilgobble#1\@nil{}
% \end{macrocode}
% \end{macro}
%
% A general section-marking function. Arg 1 is either \cn{markright}
% or \cn{markboth} indicating which kind of marking action is desired
% (this gives us some string pool/hash table savings by allowing the
% \cs{@secmark} function to serve for both cases). Arg 2 is the
% function that should be called in the running head to process the
% remaining three args. Arg 3 is normally \cs{xxxname} (but could be
% empty). Arg 4 is the section-title text. Assumption: whenever
% \cs{@secmark} is called, the section-number variable
% \cs{@secnumber} has been set to the value of the current section
% number (possibly empty, in the case of a |*| section for example).
% \begin{macrocode}
%<*amsbook>
\def\@secmark#1#2#3#4{%
% \end{macrocode}
% We want to apply expansion to xxxname and thexxx but not to the
% other elements.
% \begin{macrocode}
\begingroup \let\protect\@unexpandable@protect
\edef\@tempa{\endgroup \toks@{\@nx#2{#3}{\@secnumber}}}%
\@tempa
\toks@\@xp{\the\toks@{#4}}%
% \end{macrocode}
% If a \cn{markright} operation is called for, use the current
% left-mark via \cs{@temptokena}.
% \begin{macrocode}
\afterassignment\@nilgobble\@temptokena\@themark{}\@nil
\edef\@tempa{\@nx\@mkboth{%
\ifx\markright#1\the\@temptokena\else\the\toks@\fi}{\the\toks@}}%
\@tempa}
% \end{macrocode}
% Init \cs{@secnumber}.
% \begin{macrocode}
\let\@secnumber\@empty
%
% \end{macrocode}
%
% Fix \cn{markboth} so that \cs{@secmark} can work without too much
% thrashing.
% \begin{macrocode}
\def\markboth#1#2{%
\begingroup
\@temptokena{{#1}{#2}}\xdef\@themark{\the\@temptokena}%
\mark{\the\@temptokena}%
\endgroup
\if@nobreak\ifvmode\nobreak\fi\fi}
% \end{macrocode}
%
% With the myheadings pagestyle, no automatic running heads will be
% provided by the documentclass; only running heads specified by
% the user through explicit \cn{markboth} or \cn{markright}
% commands will be used.
% \begin{macrocode}
\def\ps@myheadings{\ps@headings \let\@mkboth\@gobbletwo}
% \end{macrocode}
%
% Save normal topskip value in a skip register.
% \begin{macrocode}
\newskip\normaltopskip
\normaltopskip=10pt \relax
% \end{macrocode}
%
% We also want to turn off all section marks. First-level section
% heads will be defined in ps@headings.
% \begin{macrocode}
\let\sectionmark\@gobble
\let\subsectionmark\@gobble
\let\subsubsectionmark\@gobble
\let\paragraphmark\@gobble
% \end{macrocode}
% \subsection{Unrecognized options}
%
% The \opt{makeidx} option is redundant; everything that it does in
% the generic \latex/ classes is already done anyway in this class.
% \begin{macrocode}
\DeclareOption{makeidx}{}
% \end{macrocode}
%
% \subsection{Process options}
% Install the default options. First, however, we'd better install
% the \pkg{amsgen} function set.
% \begin{macrocode}
\input{amsgen.sty}
\ExecuteOptions{leqno,centertags,letterpaper,portrait,%
10pt,twoside,onecolumn,final}
% \end{macrocode}
% Options will be processed in the order of the associated
% \cs{DeclareOption} commands.
% \begin{macrocode}
\ProcessOptions\relax
% \end{macrocode}
%
% In compatibility mode, we want to load the frozen version of
% \fn{amstex.sty} instead of the \pkg{amsmath} package. This is
% rather a horrible kluge but I can't see anything better at the
% moment. [mjd,1995/01/27]
% \begin{macrocode}
\if@compatibility
\def\@tempa#1{\let\mathfrak\relax
\RequirePackage{amstex}\relax}\expandafter\@tempa
\else
\expandafter\@iden
\fi
{% if native mode
% \end{macrocode}
% If the \opt{nomath} option was specified, then \cn{numberwithin}
% must be defined; otherwise, we will call the \pkg{amsmath} package.
% \begin{macrocode}
\@ifclasswith{\@classname}{nomath}{%
\def\numberwithin#1#2{\@ifundefined{c@#1}{\@nocounterr{#1}}{%
\@ifundefined{c@#2}{\@nocounterr{#2}}{%
\@addtoreset{#1}{#2}%
\toks@\@xp\@xp\@xp{\csname the#1\endcsname}%
\@xp\xdef\csname the#1\endcsname
{\@xp\@nx\csname the#2\endcsname
.\the\toks@}}}}%
}{%
\RequirePackage{amsmath}\relax
}
% \end{macrocode}
%
% If the \opt{noamsfonts} option was requested, then \cn{mathfrak} is
% now \cs{relax}: so kill the \pkg{amsfonts} package load. Otherwise
% set \cn{mathfrak} = \cs{relax} to avoid error message from
% \cs{DeclareMathAlphabet}.
% \begin{macrocode}
\@ifclasswith{\@classname}{noamsfonts}{%
}{%
\let\mathfrak\relax
\IfFileExists{Umsa.fd}{%
\RequirePackage{amsfonts}\relax
}{%
\ClassError{\@classname
}{%
Font description files Umsa.fd et al. not found; amsfonts.sty
not loaded.
}{%
A font description (.fd) file is needed for every font being used;
these files may be in the inputs area along with other style and
class files, or in a dedicated subdirectory if your system uses
a TDS structure.
}%
}%
}
}% end native mode branch
% \end{macrocode}
%
% Now a utility macro to do \cn{uppercase} but sidestep any math, to
% prevent uppercasing math variables. In order to be handled properly
% the |$...$| or |\(...\)| must be on the outer level (not
% enclosed in braces). We did not try to handle the possibility
% |\begin{math}| |...| |\end{math}| in a title at the present time (too
% complicated). Also we increase inter-word space in the uppercase
% text.
%
% One other little problem: uppercasing of a few special characters
% like the German {\ss} (\cn{ss}) and the undotted i and j (\cn{i}
% and \cn{j}), used sometimes with accents. We redefine to be upper
% case equivalents. (Undotted \cn{i} and \cn{j} in math would be
% typed as \cn{imath} and \cn{jmath}.)
%
% Spaceskip is changed in accordance with recommendations for
% increased interword spacing in all-caps text by e.g.\ `Words into
% Type'.
% \begin{macrocode}
\newcommand{\uppercasenonmath}[1]{\toks@\@emptytoks
% Insert an extra \@empty to avoid removing braces around arg \arg{1}.
\@xp\@skipmath\@xp\@empty#1$$%
\edef#1{\@nx\@upprep\the\toks@}%
}
% \end{macrocode}
%
% \begin{macro}{\@upprep}
% Preparations for printing all-cap text.
% \begin{macrocode}
\newcommand{\@upprep}{%
\spaceskip1.3\fontdimen2\font plus1.3\fontdimen3\font
\upchars@}
% \end{macrocode}
% \end{macro}
%
% In all-caps text, eszet should print as SS, dotless i should print
% as normal cap I, Mc should print with a small-caps (not lowercase)
% c, and so forth.
% \begin{macrocode}
\newcommand{\upchars@}{%
\def\ss{SS}\def\i{I}\def\j{J}\def\ae{\AE}\def\oe{\OE}%
\def\o{\O}\def\aa{\AA}\def\l{\L}\def\Mc{M{\scshape c}}}
% \end{macrocode}
%
% \begin{macro}{\@skipmath}
% \begin{macro}{\@xskipmath}
% \cs{@skipmath} searches for |$...$| in order to keep from applying
% \cn{uppercase} to the contents. Then it calls \cs{@xskipmath} to
% search for |\(...\)|.
% \begin{macrocode}
\newcommand{\@skipmath}{}
\long\def\@skipmath#1$#2${%
\@xskipmath#1\(\)%
\@ifnotempty{#2}{\toks@\@xp{\the\toks@$#2$}\@skipmath\@empty}}%
%
\newcommand{\@xskipmath}{}
\long\def\@xskipmath#1\(#2\){%
% Expand away the added \@empty
\uppercase{\toks@\@xp\@xp\@xp{\@xp\the\@xp\toks@#1}}%
\@ifnotempty{#2}{\toks@\@xp{\the\toks@\(#2\)}\@xskipmath\@empty}}%
% \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\today}
% The command \cn{today} produces today's date in the form most
% commonly used in the U.S.
% \begin{macrocode}
\newcommand{\today}{%
\relax\ifcase\month\or
January\or February\or March\or April\or May\or June\or
July\or August\or September\or October\or November\or December\fi
\space\number\day, \number\year}
% \end{macrocode}
% \end{macro}
%
% \subsection{Old text font commands}
% The \cn{em} command is not redefined here (let's say, to give an
% `obsolete' warning and recommend instead \cn{emph}) because there
% is no alternative internal command \cs{emshape}.
% \begin{macrocode}
\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
% \end{macrocode}
%
% \subsection{Top matter}
% For the \cn{title} command, we support an optional argument to give
% a shortened version of the title for running heads.
% \begin{macrocode}
\renewcommand*{\title}[2][]{\gdef\shorttitle{#1}\gdef\@title{#2}}
% \end{macrocode}
% The default value for the optional argument is `same as the
% mandatory arg' but there doesn't seem to be an easy way to get that
% effect with \ncn{[re]newcommand}. Here is how to use \cs{@dblarg}
% in conjunction with the preceding \cn{newcommand}:
% \begin{macrocode}
\edef\title{\@nx\@dblarg
\@xp\@nx\csname\string\title\endcsname}
% \end{macrocode}
% The \cn{author} command accepts an optional argument similar to
% that of the \cn{title} command.
% Moved update of \cn{addresses} within scope of \cs{else} to avoid adding
% anything if no authors, and thus avoiding output of "Author address"
% on monograph titlepage. [bnb, 1996/11/03]
% \begin{macrocode}
\renewcommand{\author}[2][]{%
\ifx\@empty\authors
\gdef\shortauthors{#1}\gdef\authors{#2}%
\else
\g@addto@macro\shortauthors{\and#1}%
\g@addto@macro\authors{\and#2}%
\g@addto@macro\addresses{\author{}}%
\fi
}
\edef\author{\@nx\@dblarg
\@xp\@nx\csname\string\author\endcsname}
% \end{macrocode}
% Initialize some variables.
% \begin{macrocode}
\let\shortauthors\@empty \let\authors\@empty
\let\addresses\@empty \let\thankses\@empty
% \end{macrocode}
%
% The optional arguments of \cn{address}, \cn{curraddr}, \cn{email}
% are to indicate which author the address applies to, if a document
% has multiple authors and there is not a normal one-to-one
% correspondence between authors and addresses.
% \begin{macrocode}
\newcommand{\address}[2][]{\g@addto@macro\addresses{\address{#1}{#2}}}
\newcommand{\curraddr}[2][]{\g@addto@macro\addresses{\curraddr{#1}{#2}}}
\newcommand{\email}[2][]{\g@addto@macro\addresses{\email{#1}{#2}}}
\newcommand{\urladdr}[2][]{\g@addto@macro\addresses{\urladdr{#1}{#2}}}
\renewcommand{\thanks}[1]{\g@addto@macro\thankses{\thanks{#1}}}
% \end{macrocode}
%
% The following example of addresses for three authors of a
% tri-author paper illustrates the kind of complications that need to
% be handled.
% \begin{verbatim}
% \author{Roland Campbell}
% \address{Department of Mathematics\\
% Pennsylvania State University\\
% Pittsburgh, Pennsylvania 13593}
% \email[R.~Campbell]{campr@@galois.psu.edu}
%
% \author{Mark M. Dane}
% % Same address as R. Campbell
% \curraddr[M.~Dane]{Atmospheric Research Station\\
% Pala Lundi, Fiji}
% \email[M.~Dane]{DaneMark@@ffr.choice}
%
% \author{Jeremiah Jones}
% \address[J.~Jones]{Department of Philosophy\\
% Freedman College\\
% Periwinkle, Colorado 84320}
% \email[J.~Jones]{id739e@@oseoi44 (Bitnet)}
% \end{verbatim}
% In an article, typesetting of the address information is done at
% the end of the document, by calling \cs{@setaddresses}. This is done
% through a parent function \cs{enddoc@text}, because some AMS journals
% also print the abstract there instead of at the beginning, and it's
% easier to redefine \cs{enddoc@text} than to try undoing material
% already added to the \cs{AtEndDocument} hook.
% \begin{macrocode}
%<*amsart|amsproc>
\def\enddoc@text{\ifx\@empty\@translators \else\@settranslators\fi
\ifx\@empty\addresses \else\@setaddresses\fi}
\AtEndDocument{\enddoc@text}
%
%
\def\@setaddresses{\par
\nobreak \begingroup
%\footnotesize
\def\author##1{\nobreak\addvspace\bigskipamount}%
% \end{macrocode}
% Address is supposed to go all on one line, so we redefine |\\|
% to just insert a comma instead of doing a line break.
% \begin{macrocode}
\def\\{\unskip, \ignorespaces}%
% \end{macrocode}
% No page breaks in the address section is accomplished by
% |\interlinepenalty\@M| and by the \cn{nobreak} before the \cs{bigskip}.
% \begin{macrocode}
\interlinepenalty\@M
\def\address##1##2{\begingroup
% \end{macrocode}
% If there are two addresses for the same author, add a \cs{bigskip}
% between them.
% \begin{macrocode}
\par\addvspace\bigskipamount\indent
% \end{macrocode}
% If the name of the author to whom this address applies
% was given, typeset it
% \begin{macrocode}
\@ifnotempty{##1}{(\ignorespaces##1\unskip) }%
% \end{macrocode}
% Now the main part of the address:
% \begin{macrocode}
{\scshape\ignorespaces##2}\par\endgroup}%
% \end{macrocode}
% Current address:
% \begin{macrocode}
\def\curraddr##1##2{\begingroup
\@ifnotempty{##2}{\nobreak\indent{\itshape Current address}%
\@ifnotempty{##1}{, \ignorespaces##1\unskip}\/:\space
##2\par\endgroup}}%
% \end{macrocode}
% And then email. In versions 1.0 and 1.1 |@@| was required to print
% a single \qc{\@} character; for bulletproofing we convert doubled
% \qc{\@} characters if found.
% \begin{macrocode}
\def\email##1##2{\begingroup
\@ifnotempty{##2}{\nobreak\indent{\itshape E-mail address}%
\@ifnotempty{##1}{, \ignorespaces##1\unskip}\/:\space
\ttfamily##2\par\endgroup}}%
% \end{macrocode}
% URLaddr is simply a replica of the email address.
% \begin{macrocode}
\def\urladdr##1##2{\begingroup
\@ifnotempty{##2}{\nobreak\indent{\itshape URL}%
\@ifnotempty{##1}{, \ignorespaces##1\unskip}\/:\space
\ttfamily##2\par\endgroup}}%
\addresses
\endgroup
}
% \end{macrocode}
%
% Some other administrative info. For \cn{date} we can just use the
% default definition provided by \latex/. Except that we initialize the
% date to empty instead of to \cn{today}.
% \begin{macrocode}
\let\@date\@empty
\def\dedicatory#1{\def\@dedicatory{#1}}
\let\@dedicatory=\@empty
\def\keywords#1{\def\@keywords{#1}}
\let\@keywords=\@empty
\def\subjclass#1{\def\@subjclass{#1}}
\let\@subjclass=\@empty
%\def\commby#1{\def\@commby{(Communicated by #1)}}
%\let\@commby=\@empty
% \end{macrocode}
%
% We handle translator names like author names, just in case there is
% more than one translator. [mjd,1994/10/19]
% \begin{macrocode}
\def\translator#1{%
\ifx\@empty\@translators \def\@translators{#1}%
\else\g@addto@macro\@translators{\and#1}\fi}
\let\@translators=\@empty
% \end{macrocode}
%
% \begin{macrocode}
%<*amsart|amsproc>
\def\@settranslators{\par\begingroup
\addvspace{6\p@\@plus9\p@}%
\hbox to\columnwidth{\hss\normalfont\normalsize
Translated by %
\andify\@translators \uppercasenonmath\@translators
\@translators}
\endgroup
}
%
% \end{macrocode}
%
% The general function to convert a list of items in the form
% \begin{verbatim}
% A\and B\and C\and D
% \end{verbatim}
% to the form `A, B, C, and D' is \cs{xandlist}:
% \begin{verbatim}
% \xandlist{, }{ and }{, and }{A\and B\and C\and D}
% \end{verbatim}
% This is a completely expandable macro, with the return value being
% the converted list. There is also a `no-execute' version whose
% fourth argument should be a macro; the text to be converted will be
% taken from that macro and after conversion will be put back as the
% macro's new replacement text.
% \begin{verbatim}
% \nxandlist{, }{ and }{, and }\result
% \end{verbatim}
% I don't think I want to explain this except by recommending that
% you watch it in operation with \cs{tracingmacros} if you're
% interested. [mjd,1994/10/19]
% \begin{macrocode}
\newcommand{\xandlist}[4]{\@andlista{{#1}{#2}{#3}}#4\and\and}
\def\@andlista#1#2\and#3\and{\@andlistc{#2}\@ifnotempty{#3}{%
\@andlistb#1{#3}}}
\def\@andlistb#1#2#3#4#5\and{%
\@ifempty{#5}{%
\@andlistc{#2#4}%
}{%
\@andlistc{#1#4}\@andlistb{#1}{#3}{#3}{#5}%
}}
\let\@andlistc\@iden
\newcommand{\nxandlist}[4]{%
\def\@andlistc##1{\toks@\@xp{\the\toks@##1}}%
\toks@{\toks@\@emptytoks \@andlista{{#1}{#2}{#3}}}%
\the\@xp\toks@#4\and\and
\edef#4{\the\toks@}%
\let\@andlistc\@iden}
% \end{macrocode}
%
% The \cs{andify} function is provided as a convenient abbreviation
% for the most common case.
% \begin{macrocode}
\newcommand{\andify}{%
\nxandlist{\unskip, }{\unskip{} and~}{\unskip, and~}}
% \end{macrocode}
% Override the funny default definition of \cn{and} from \latex/.
% This is not actually used by AMS classes, however.
% \begin{macrocode}
\def\and{\unskip{ }and \ignorespaces}
% \end{macrocode}
%
% Set up the style of an article opening page. For books, see below.
% For articles, we must add the copyright info footnote.
% \begin{macrocode}
%<*amsart|amsproc>
\def\maketitle{\par
\@topnum\z@ % this prevents figures from falling at the top of page 1
\@setcopyright
% \end{macrocode}
% Do some setup for the running heads here. If there are no author names,
% we set the left-hand running head to the value of the right-hand running
% head.
% \begin{macrocode}
\uppercasenonmath\shorttitle
\ifx\@empty\shortauthors \let\shortauthors\shorttitle
\else \andify\shortauthors \uppercasenonmath\shortauthors \fi
% \end{macrocode}
% The following hook is used to activate the writing of author and
% title information to an `issue table of contents' when multiple
% articles are being processed for a journal issue or a proceedings
% volume.
% \begin{macrocode}
\@maketitle@hook
\begingroup
\@maketitle
\toks@\@xp{\shortauthors}\@temptokena\@xp{\shorttitle}%
\edef\@tempa{\@nx\markboth{\the\toks@}{\the\@temptokena}}\@tempa
\endgroup
\thispagestyle{firstpage}% this sets first page specifications
\c@footnote\z@
\def\do##1{\let##1\relax}%
\do\maketitle \do\@maketitle \do\title \do\@xtitle \do\@title
\do\author \do\@xauthor \do\address \do\@xaddress
\do\email \do\@xemail \do\curraddr \do\@xcurraddr
% \do\commby \do\@commby
\do\dedicatory \do\@dedicatory \do\thanks \do\thankses
\do\keywords \do\@keywords \do\subjclass \do\@subjclass
}
%
% \end{macrocode}
%
% The hook \cs{@maketitle@hook} is placed into \cn{maketitle} rather
% than \cs{@maketitle} because the latter tends to get redefined by
% derived classes using this one as a base. The initial motivation
% for this hook is to extract title and author information to an
% external file, so we can't do it with \cs{AtBeginDocument}:
% \cn{title} and \cn{author} commands might occur between
% \verb'\begin{document}' and \cn{maketitle}.
%
% \begin{macrocode}
%<*amsart|amsproc>
\def\@maketitle@hook{\global\let\@maketitle@hook\@empty}
%
% \end{macrocode}
%
% Set up the style of an article opening page.
% \begin{macrocode}
%<*amsart|amsproc>
\def\@maketitle{%
% \end{macrocode}
% Set font to normal, just in case.
% \begin{macrocode}
\normalfont\normalsize
% \end{macrocode}
%
% Special footnotes are put here to ensure that they come first at
% the bottom of the page.
% \begin{macrocode}
\let\@makefnmark\relax \let\@thefnmark\relax
% \ifx\@empty\@date\else \@footnotetext{\@setdate}\fi
\ifx\@empty\@subjclass\else \@footnotetext{\@setsubjclass}\fi
\ifx\@empty\@keywords\else \@footnotetext{\@setkeywords}\fi
\ifx\@empty\thankses\else \@footnotetext{%
% \end{macrocode}
% In order to make multiple thanks footnotes work inside a single
% \cs{@footnotetext} argument we need to make the first \cn{par} be
% ignored. Cf.~\cs{@setthanks}.
% \begin{macrocode}
\def\par{\let\par\@par}\@setthanks}\fi
% \end{macrocode}
% If |\pagestyle{myheadings}| was specified, \cs{@mkboth} will be a no-op.
% \begin{macrocode}
\@mkboth{\@nx\shortauthors}{\@nx\shorttitle}%
% \global\topskip8pc\relax % 10pc to base of first title line
% \global\topskip42\p@\relax % 5.5pc " " " " "
\@settitle
\ifx\@empty\authors \else \@setauthors \fi
% \end{macrocode}
% Likewise with \cs{@dedicatory} and \cs{@date}.
% \begin{macrocode}
\ifx\@empty\@dedicatory
\else
% \baselineskip26\p@
% \baselineskip18\p@
\vtop{\centering{\footnotesize\itshape\@dedicatory\@@par}%
\global\dimen@i\prevdepth}\prevdepth\dimen@i
\fi
\@setabstract
% \end{macrocode}
% Space before the main text should be 32 + 14 base-to-base; we
% accomplish this by doing a vskip of that amount with \cs{baselineskip}
% subtracted.
% \begin{macrocode}
\normalsize
\if@titlepage
\newpage
\else
\dimen@34\p@ \advance\dimen@-\baselineskip
\vskip\dimen@\relax
\fi
} % end \@maketitle
%
% \end{macrocode}
%
% \subsection{Journal/series logo for articles}
%
% \cs{publname} will either be defined by a parent class that is calling
% \cls{amsart} or \cls{amsproc} as a base class, or will be absent, in
% which case this can be used as a signal to omit the \cs{@serieslogo}.
% A typical value for \cs{publname} would be
% \begin{verbatim}
% \def\publname{JOURNAL OF THE\newline
% AMERICAN MATHEMATICAL SOCIETY}
% \end{verbatim}
%
% Initialize \cs{publname} and \cs{@serieslogo} to no-op if
% \cs{publname} is not already defined.
% \begin{macrocode}
%<*amsart|amsproc>
\AtBeginDocument{%
\@ifundefined{publname}{%
\let\publname\@empty
\let\@serieslogo\@empty
}{%
\def\@serieslogo{%
\vbox to\headheight{%
\parindent\z@ \fontsize{6}{7\p@}\selectfont
\noindent\publname\newline
% \volinfo\endgraf
% \volinfo, \pageinfo \@dateposted\newline \@PII\endgraf
\vss
}%
}%
}%
}
%
% \end{macrocode}
%
% The \cs{number} prefix on current issue is to work around
% inconsistencies in the form of issue numbers as passed in from
% system level. Sometimes they will get passed in with a leading
% zero, which we don't want to print if it happens to occur.
% The |0| prevents an error if \cs{currentissue} happens to be empty.
% \begin{macrocode}
%<*amsart>
\AtBeginDocument{%
\@ifundefined{volinfo}{%
\def\volinfo{%
Volume \currentvolume, Number \number0\currentissue,
\currentmonth\ \currentyear
}%
}{}%
}
%
%<*amsproc>
\@ifundefined{volinfo}{\let\volinfo\@empty}{}
%
% \end{macrocode}
%
% Default values for information such as volume, year, and so on are
% provided as follows.
% \begin{macrocode}
%<*amsart|amsproc>
\def\issueinfo#1#2#3#4{\def\currentvolume{#1}\def\currentissue{#2}%
\def\currentmonth{#3}\def\currentyear{#4}}
\issueinfo{00}% volume number
{0}% % issue number
{Xxxx}% % month
{XXXX}% % year
%
% \end{macrocode}
%
% Copyright year may be different from issue year. Allow it to be
% specified separately. It is probably more natural anyway, from the
% user's perspective, to give the copyright year in the same command
% when giving the name of the copyright holder.
% \begin{macrocode}
\def\copyrightinfo#1#2{\def\copyrightyear{#1}\def\copyrightholder{#2}}
\copyrightinfo{0000}{(copyright holder)}
% \end{macrocode}
%
% Provide page span information. If negative number is given, convert
% to roman numeral form.
% \begin{macrocode}
%<*amsart|amsproc>
\def\pagespan#1#2{\setcounter{page}{#1}%
\ifnum\c@page<\z@ \pagenumbering{roman}\setcounter{page}{-#1}\fi
\def\start@page{#1}\def\end@page{#2}}
\pagespan{000}{000}
%
% \end{macrocode}
%
% Formatting instructions are provided for journal paging. [bnb, 1996/09/11]
% \begin{macrocode}
%<*amsart>
\@ifundefined{pageinfo}{%
\def\pageinfo{%
\ifnum\start@page=\z@
Pages 000--000
\else
\ifx\start@page\end@page
Page \start@page
\else
Pages \start@page--\end@page
\fi
\fi}%
}{}
%
% \end{macrocode}
%
% Publisher Item Identifier (we started using them in journal logos
% as of January 1997).
% \begin{macrocode}
%\@ifundefined{ISSN}{\def\ISSN{0000-0000}}{}
%\newcommand\PII[1]{\def\@PII{#1}}
%\PII{S \ISSN(XX)0000-0}
% \end{macrocode}
%
% \subsection{Copyright block}
%
% Doing the copyright info on the first page is a little tricky. We
% want it to come at the bottom, after any footnotes and floating
% inserts, but before the page number. If we simply put it into
% \cs{@oddfoot} (in \cs{ps@plain}) its height will not be subtracted
% from the height of the text and then the page number will be lower
% than we want. So we do it as an insert.
% \begin{macrocode}
%<*amsart|amsproc>
\newinsert\copyins
% \end{macrocode}
% We set the skip register associated with this insert to the
% \emph{base-to-base} distance from the bottom of the page contents
% to the base of the first line in the copyright info. See the
% definition of \cs{@setcopyright}.
% \begin{macrocode}
\skip\copyins=1.5pc
\count\copyins=1000 % magnification factor, 1000 = 100%
\dimen\copyins=.5\textheight % maximum allowed per page
% \end{macrocode}
% Put the contents into a \tex/ insert. This information is omitted
% unless \cs{@serieslogo} is non-null. In other words it will
% normally not print except when an AMS publication-specific document
% class such as \cls{tran-l} is used.
% And even if the series logo is printed, omit the copyright line
% if requested by |\coprightinfo{}{}|. [bnb, 1996/10/17]
% \begin{macrocode}
\def\@setcopyright{%
\ifx\@empty\@serieslogo
\else\ifx\@empty\copyrightyear
\else
\insert\copyins{\hsize\textwidth
\parfillskip\z@ \leftskip\z@\@plus.9\textwidth
\fontsize{6}{7\p@}\normalfont\upshape
% \end{macrocode}
% The spacing between the preceding text and the copyright info is
% done with a strut of height |\skip\copyins|. (Note that
% \cs{lineskip} and \cs{baselineskip} are 0 in the \latex/ output
% routine.) The negative vskip gives an effective distance of 0 from
% the top of the box to the base of the first line (assuming
% |\skip\copyins| is greater than the height of that line). Then the
% apparent total height of the box will work well with \tex/'s
% calculations involving |\skip\copyins| for how much room to leave
% for this object.
% \begin{macrocode}
\everypar{}%
\vskip-\skip\copyins \nointerlineskip
\noindent\vrule\@width\z@\@height\skip\copyins
\copyright\copyrightyear\ \copyrightholder
\par
% \end{macrocode}
% This kern of 0pt forces the depth of the last line (if any) to be
% added to the height of the box.
% \begin{macrocode}
\kern\z@}%
\fi\fi
}
% \end{macrocode}
%
% When \cs{@combinefloats} is called, the box \cs{@outputbox} already
% contains the main text of the page and any footnotes. Then \latex/
% adds top and bottom figures. We want to add our copyright info at
% the very bottom, but still inside of the vbox.
% \begin{macrocode}
\def\@combinefloats{%
\ifx \@toplist\@empty \else \@cflt \fi
\ifx \@botlist\@empty \else \@cflb \fi
\ifvoid\copyins \else \@cflci \fi
}
% \end{macrocode}
% In the twocolumn,firstcolumn case, postpone adding the copyright
% note. Actually for the twocolumn case more work is necessary:
% \begin{macrocode}
\def\@cflci{%
\if\if@twocolumn \if@firstcolumn F\else T\fi\else T\fi T%
\setbox\@outputbox\vbox{%
\unvbox\@outputbox
\vskip\skip\copyins
\hbox to\columnwidth{%
\hss\vbox to\z@{\vss\unvbox\copyins}}}%
\fi
}
%
% \end{macrocode}
%
% Some name setup.
% \begin{macrocode}
\newcommand{\abstractname}{Abstract}
\newcommand{\keywordsname}{Key words and phrases}
\newcommand{\subjclassname}{\textup{1991} Mathematics Subject
Classification}
% \end{macrocode}
% For the date we have a special little problem: We only want to add
% the `Received by the editors' text for publication-specific
% documentclasses such as \cls{tran-l}.
% \begin{macrocode}
%\def\@tempb{amsbook}
%\def\@tempb{amsproc}
%\def\@tempb{amsart}
\ifx\@classname\@tempb
\newcommand{\datename}{\textit{Date}:}
\else
\newcommand{\datename}{Received by the editors}
\fi
% \end{macrocode}
%
% \begin{macrocode}
%<*amsart|amsproc>
\def\@settitle{\begin{center}%
%
% \baselineskip14\p@\relax
% \Large
%<*amsart|amsproc>
\bfseries
%\uppercasenonmath\@title
\@title
\end{center}%
}
%
% \end{macrocode}
%
% For multiple authors we need to combine the author names into a
% list of the form Author One, Author Two, \dots, and Author Last.
% \begin{macrocode}
%<*amsart|amsproc>
\def\@setauthors{%
\begingroup
\trivlist
%
% \centering\footnotesize \@topsep30\p@\relax
% \advance\@topsep by -\baselineskip
% \centering \fontsize{11}{13\p@}\selectfont\@topsep13\p@\relax
%<*amsart|amsproc>
\item\relax
% \end{macrocode}
% Here \cs{uppercasenonmath} instead of just \cn{uppercase} is a bit of
% overkill but it gives us the uppercase special chars and handles
% potential exotic cases without further work.
% \begin{macrocode}
\andify\authors
%\uppercasenonmath\authors
\authors
\endtrivlist
\endgroup
}
%
% \end{macrocode}
% The following definitions suffice for both the \cls{amsart} and
% \cls{amsbook} classes.
% \begin{macrocode}
\def\@setdate{\datename\ \@date\@addpunct.}
\def\@setsubjclass{%
{\itshape\subjclassname.}\enspace\@subjclass\@addpunct.}
\def\@setkeywords{%
{\itshape \keywordsname.}\enspace \@keywords\@addpunct.}
\def\@setthanks{\def\thanks##1{\par##1\@addpunct.}\thankses}
% \end{macrocode}
%
% `Abstract' can be changed to say `R\'esum\'e' (French) by
% redefining \cn{abstractname}. This and other control sequence names
% (\cn{refname}, \cn{contentsname}, \cn{appendixname}, and so on) are
% compatible with the \pkg{babel} package (the AMS sometimes
% publishes articles in languages other than English.)
%
% In AMS documentclasses, the abstract should be placed before
% \cn{maketitle} (otherwise the desired ordering of frontmatter
% elements cannot be ensured in all cases).
% \begin{macrocode}
\newbox\abstractbox
%
\newenvironment{abstract}{%
% \end{macrocode}
% We start by checking whether \cn{maketitle} has already been used
% (in which case it was reset to \cs{relax}); if so, we give a
% warning that the abstract should be placed before \cn{maketitle}.
% \begin{macrocode}
\ifx\maketitle\relax
\ClassWarning{\@classname}{Abstract should precede
\protect\maketitle\space in AMS documentclasses; reported}%
\fi
\global\setbox\abstractbox=\vtop \bgroup
% \normalfont\Small
% \normalsize
\Small
\list{}{\labelwidth\z@
\leftmargin3pc \rightmargin\leftmargin
\listparindent\normalparindent \itemindent\z@
\parsep\z@ \@plus\p@
% \end{macrocode}
% In order to get equation numbers indented with the rest of the
% abstract, we have to do this:
% \begin{macrocode}
\let\fullwidthdisplay\relax
}%
\item[\hskip\labelsep\scshape\abstractname.]%
}{%
\endlist\egroup
% \end{macrocode}
% If the abstract was supposed to be typeset earlier, then
% \cs{@setabstract} is now equal to \cs{relax}, and we had better
% drop the contents of the abstract box onto the page immediately, to
% salvage the situation as best we can.
% \begin{macrocode}
\ifx\@setabstract\relax \@setabstracta \fi
}
% \end{macrocode}
%
% Because the abstract might be postponed until the end of an
% article, we cannot simply use the fact of a preceding
% \cn{maketitle} to tell whether \cs{endabstract} should immediately
% put the abstract box contents on the page. So we use an auxiliary
% function that will be reset to no-op once we have passed the point
% where the abstract should normally be typeset.
% \begin{macrocode}
\def\@setabstract{\@setabstracta \global\let\@setabstract\relax}
\def\@setabstracta{%
\ifvoid\abstractbox
\else
\skip@20\p@ \advance\skip@-\lastskip
\advance\skip@-\baselineskip \vskip\skip@
\box\abstractbox
\prevdepth\z@ % because \abstractbox is a vtop
\fi
}
% \end{macrocode}
%
% Title page environment does nothing much; information and
% formatting to be provided by the user.
% \begin{macrocode}
\def\titlepage{%
% \cleardoublepage
% \clearpage
\thispagestyle{empty}\setcounter{page}{0}}
\def\endtitlepage{\newpage}
% \end{macrocode}
%
% \subsection{Macros for list labels}
% \begin{macrocode}
\def\labelenumi{\theenumi.}
\def\theenumi{\@arabic\c@enumi}
\def\labelenumii{(\theenumii)}
\def\theenumii{\@alph\c@enumii}
\def\p@enumii{\theenumi}
\def\labelenumiii{(\theenumiii)}
\def\theenumiii{\@roman\c@enumiii}
\def\p@enumiii{\theenumi(\theenumii)}
\def\labelenumiv{(\theenumiv)}
\def\theenumiv{\@Alph\c@enumiv}
\def\p@enumiv{\p@enumiii\theenumiii}
%
\def\labelitemi{$\m@th\bullet$}
\def\labelitemii{\bfseries --}% \upshape already done by \itemize
\def\labelitemiii{$\m@th\ast$}
\def\labelitemiv{$\m@th\cdot$}
% \end{macrocode}
%
% \subsection{Verse and quotation environments}
% \begin{macrocode}
\newenvironment{verse}{\let\\\@centercr
\list{}{\itemsep\z@ \itemindent -1.5em\listparindent\itemindent
\rightmargin\leftmargin \advance\leftmargin 1.5em}\item[]%
}{%
\endlist
}
\let\endverse=\endlist % for efficiency
% \end{macrocode}
% The left/right margins of the quotation environment are supposed to
% be the same as for the abstract environment.
% \begin{macrocode}
\newenvironment{quotation}{\list{}{%
\leftmargin3pc \listparindent\normalparindent
\itemindent\z@
\rightmargin\leftmargin \parsep\z@ \@plus\p@}%
\item[]%
}{%
\endlist
}
\let\endquotation=\endlist % for efficiency
\newenvironment{quote}{%
\list{}{\rightmargin\leftmargin}\item[]%
}{%
\endlist
}
\let\endquote=\endlist % for efficiency
% \end{macrocode}
%
% \subsection{List environments}
% Changed definition of \cs{trivlist}, \cn{enumerate}, and
% \cn{itemize} in order to have \cn{makelabel} apply \cn{upshape}.
% \begin{macrocode}
\def\trivlist{\parsep\parskip\@nmbrlistfalse
\@trivlist \labelwidth\z@ \leftmargin\z@
\itemindent\z@
\let\@itemlabel\@empty
\def\makelabel##1{\upshape##1}}
%
\renewenvironment{enumerate}{%
\ifnum \@enumdepth >3 \@toodeep\else
\advance\@enumdepth \@ne
\edef\@enumctr{enum\romannumeral\the\@enumdepth}\list
{\csname label\@enumctr\endcsname}{\usecounter
{\@enumctr}\def\makelabel##1{\hss\llap{\upshape##1}}}\fi
}{%
\endlist
}
\let\endenumerate=\endlist % for efficiency
%
\renewenvironment{itemize}{%
\ifnum\@itemdepth>3 \@toodeep
\else \advance\@itemdepth\@ne
\edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
\list{\csname\@itemitem\endcsname}%
{\def\makelabel##1{\hss\llap{\upshape##1}}}%
\fi
}{%
\endlist
}
\let\enditemize=\endlist % for efficiency
%
\newcommand{\descriptionlabel}[1]{\hspace\labelsep \upshape\bfseries #1:}
\newenvironment{description}{\list{}{%
% \end{macrocode}
% Adjust the indent of the first line to the desired value:
% \begin{macrocode}
\advance\leftmargini6\p@ \itemindent-12\p@
\labelwidth\z@ \let\makelabel\descriptionlabel}%
}{
\endlist
}
\let\enddescription=\endlist % for efficiency
% \end{macrocode}
%
% \begin{macro}{\upn}
% The command \cn{upn} can be used to force upright font for
% punctuation or digits in italic text. For example
% \begin{verbatim}
% ... as numbered by \upn{``A''} or \upn{``1''} hereafter\upn{)}
% \end{verbatim}
% \begin{macrocode}
\let\upn=\textup
% \end{macrocode}
% \end{macro}
%
% Since these margin settings are dependent on the fonts used, we
% postpone them until begin-document. (This means that we cannot use
% the values directly for calculations before begin-document.)
% \begin{macrocode}
\AtBeginDocument{%
\settowidth\leftmargini{\labelenumi\hskip\labelsep}%
\advance\leftmargini by \normalparindent
\settowidth\leftmarginii{\labelenumii\hskip\labelsep}%
% \advance\leftmarginii by 15pt
% \advance\leftmarginii by 6pt
\settowidth\leftmarginiii{\labelenumiii\hskip\labelsep}%
% \advance\leftmarginiii by 12pt
% \advance\leftmarginiii by 6pt
\settowidth\leftmarginiv{\labelenumiv\hskip\labelsep}%
\advance\leftmarginiv by 10pt
\leftmarginv=10pt
\leftmarginvi=10pt
\leftmargin=\leftmargini
\labelsep=5pt
\labelwidth=\leftmargini \advance\labelwidth-\labelsep
\@listi}
% \end{macrocode}
%
% In some contexts the space above/below lists needs to be
% suppressed. So we put it into a variable \cs{listisep}.
% \begin{macrocode}
\newskip\listisep
\listisep\smallskipamount
\def\@listI{\leftmargin\leftmargini \parsep\z@skip
\topsep\listisep \itemsep\z@skip
\listparindent\normalparindent}
\let\@listi\@listI
% \end{macrocode}
%
% Is it necessary to reset \cs{parsep}, \cs{partopsep}, \cs{itemsep}
% to their default values (0) in each of the subordinate list
% setup functions? I don't believe so, but I leave the settings in
% the listii function just in case some unusual nesting of
% environments might cause trouble. [mjd,1994/09/22]
% \begin{macrocode}
\def\@listii{\leftmargin\leftmarginii
\labelwidth\leftmarginii \advance\labelwidth-\labelsep
\topsep\z@skip \parsep\z@skip \partopsep\z@skip \itemsep\z@skip}
\def\@listiii{\leftmargin\leftmarginiii
\labelwidth\leftmarginiii \advance\labelwidth-\labelsep}
\def\@listiv{\leftmargin\leftmarginiv
\labelwidth\leftmarginiv \advance\labelwidth-\labelsep}
\def\@listv{\leftmargin\leftmarginv
\labelwidth\leftmarginv \advance\labelwidth-\labelsep}
\def\@listvi{\leftmargin\leftmarginvi
\labelwidth\leftmarginvi \advance\labelwidth-\labelsep}
% \end{macrocode}
%
% \subsection{Redefined internal sectioning commands}
%
% In amsart.sty \cs{@startsection}, \cs{@sect},
% and a couple of other things are redefined to fix a few hard-coded
% things that would interfere with the desired style. The most
% noteworthy difference is that all section headings will go into the
% table of contents (governed by secnumdepth as usual), EVEN WHEN THE
% |*| FORM IS USED. The only section heading not listed in the table of
% contents is the heading for the toc itself.
% \begin{macrocode}
\def\@startsection#1#2#3#4#5#6{%
% \end{macrocode}
% Section titles, if they are run-in with the following text, are
% stored in a box instead of being typeset right away. They will be
% typeset by \cs{everypar}, but if one section heading follows
% right after another, this won't happen. So by doing
% \cs{leavevmode} we force this to happen. (\cs{if@noskipsec}
% is true if the previous section title has not yet been typeset.)
% \begin{macrocode}
\if@noskipsec \leavevmode \fi
\par \@tempskipa #4\relax
\@afterindenttrue
\ifdim \@tempskipa <\z@ \@tempskipa -\@tempskipa \@afterindentfalse\fi
\if@nobreak \everypar{}\else
\addpenalty\@secpenalty\addvspace\@tempskipa\fi
% Don't call \@ssect in the ifstar case:
\@ifstar{\@dblarg{\@sect{#1}{\@m}{#3}{#4}{#5}{#6}}}%
{\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}%
}
% \end{macrocode}
%
% Some journals require a different font for section numbers. (As coded
% here, this option permits only a change of weight, to \cn{bfseries}.)
% \begin{macrocode}
%\def\@secnumfont{\mdseries}
% \end{macrocode}
%
% For reference, here is the argument list for \cs{@sect}.
% \begin{verbatim}
% % #1 #2 #3 #4 #5 #6 #7 #8
% {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}[SHORTT]{TITLE}
% \end{verbatim}
% \begin{macrocode}
\def\@sect#1#2#3#4#5#6[#7]#8{%
% \end{macrocode}
% Define \cs{@toclevel} for for \cs{@tocwrite} (to
% \cs{@tochangmeasure}).
% \begin{macrocode}
\edef\@toclevel{\ifnum#2=\@m 0\else\number#2\fi}%
\ifnum #2>\c@secnumdepth \let\@secnumber\@empty
\else \@xp\let\@xp\@secnumber\csname the#1\endcsname\fi
% \end{macrocode}
% \cs{@svsec} will be the section number plus some formatting if
% the star form was not used and if the depth of numbering extends to
% the current level. The user can change secnumdepth to control how
% many levels of sectioning will be numbered.
% \begin{macrocode}
\ifnum #2>\c@secnumdepth
\let\@svsec\@empty
\else
\refstepcounter{#1}%
% \end{macrocode}
% If the |*|-form was not used (\arg{2} less than 1000), we add
% \cn{sectionname} or whatever as a prefix, separated by a space.
% We need the ifundefined test in order to know whether the space
% should be added or not. There must be a better way to do this
% but I haven't thought of it yet.
% \begin{macrocode}
\edef\@svsec{\ifnum#2<\@m
\@ifundefined{#1name}{}{%
\ignorespaces\csname #1name\endcsname\space}\fi
% \end{macrocode}
% We add \cn{textup} here in order to make section
% numbers always roman, even if the rest of the section head is
% italic.
% \begin{macrocode}
\@nx\textup{%
% \@nx\@secnumfont
\csname the#1\endcsname.}\enspace
}%
\fi
\@tempskipa #5\relax
\ifdim \@tempskipa>\z@ % then this is not a run-in section heading
\begingroup #6\relax
\@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty\@M #8\par}%
\endgroup
% \end{macrocode}
%
% Section headings don't set marks for the running heads in the article
% style, only in the amsbook style. Assumption: \cs{sectionmark} is
% defined to call \cs{@secnumber} as its penultimate argument.
% \begin{macrocode}
%<*amsbook>
\csname #1mark\endcsname{#7}%
%
% \end{macrocode}
% If \arg{2} (level) is greater than 1000 then we don't do a table
% of contents entry. This happens only for the section heading above
% the table of contents itself.
% \begin{macrocode}
\ifnum#2>\@m \else \@tocwrite{#1}{#8}\fi
\else
% \end{macrocode}
% Otherwise we're doing a run-in heading; it is stored as \cs{@svsechd},
% which will be typeset by \cs{everypar} as soon as some text is
% encountered.
% \begin{macrocode}
\def\@svsechd{#6\hskip #3\@svsec
% \end{macrocode}
% To allow for the possibility that the user wants an empty section
% title, leaving just the section number, we check whether \arg{8}
% is nonempty before adding the period.
% \begin{macrocode}
\@ifnotempty{#8}{\ignorespaces#8\unskip
% \end{macrocode}
% The following test is to prevent a period being added if the
% section title ended in a question mark or other punctuation.
% \begin{macrocode}
\@addpunct.}%
\ifnum#2>\@m \else \@tocwrite{#1}{#8}\fi
}%
\fi
% \end{macrocode}
% In a previous version of \cls{amsart} \cs{@nobreaktrue} was added to
% \cs{@xsect} for some reason. Let's keep that just in case it was done to
% prevent a certain kind of bug. [mjd,17-Aug-1994]
% \begin{macrocode}
\global\@nobreaktrue
% \end{macrocode}
% \cs{@xsect} does some more stuff based on whether this is a run-in
% heading or not.
% \begin{macrocode}
\@xsect{#5}}
% \end{macrocode}
%
% Undefine \cs{@ssect} to save memory; it's not needed in \cls{amsart}.
% \begin{macrocode}
\let\@ssect\relax
% \end{macrocode}
%
% Allocate counters for sectioning commands. Paragraph counter is
% allocated but normally not used. Subparagraph counter is not
% allocated.
% \begin{macrocode}
\newcounter{part}
%\newcounter{chapter}
%\newcounter{section}
%\newcounter{section}[chapter]
%\def\thesection{\arabic{section}}
\newcounter{subsection}[section]
\newcounter{subsubsection}[subsection]
\newcounter{paragraph}[subsubsection]
% \end{macrocode}
% Set numbering style for sectioning commands. In a couple of cases
% resetting is unnecessary but we include the full list here for
% completeness.
% \begin{macrocode}
\renewcommand\thepart {\arabic{part}}
%\renewcommand\thechapter {\arabic{chapter}}
\renewcommand\thesection {\arabic{section}}
\renewcommand\thesubsection {\thesection.\arabic{subsection}}
\renewcommand\thesubsubsection {\thesubsection .\arabic{subsubsection}}
\renewcommand\theparagraph {\thesubsubsection.\arabic{paragraph}}
% \end{macrocode}
% Depth of section numbering; if \fn{secnumdepth} were 2 instead of
% 3, \cn{subsubsection} would not be numbered.
% \begin{macrocode}
\setcounter{secnumdepth}{3}
% \end{macrocode}
%
% The arguments of \cs{@startsection} are given for reference:
% \begin{verbatim}
% % #1 #2 #3 #4 #5 #6
% {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}
% \end{verbatim}
%
% \begin{macrocode}
\def\partname{Part}
%<*amsart|amsproc>
\def\part{\@startsection{part}{0}%
\z@{\linespacing\@plus\linespacing}{.5\linespacing}%
{\normalfont\bfseries\raggedright}}
%
% \end{macrocode}
%
% Specialsection correlates to our inhouse Z-head.
% \begin{macrocode}
\def\specialsection{\@startsection{section}{1}%
% \z@{\linespacing\@plus\linespacing}{.5\linespacing}%
% \z@{2\linespacing\@plus\linespacing}{.5\linespacing}%
% {\normalfont\centering}}
% {\large\scshape\centering}}
% \end{macrocode}
%
% In the book class \cn{part} puts the part title on a separate
% page.
% \begin{macrocode}
%<*amsbook>
\def\part{\cleardoublepage \thispagestyle{empty}%
\null\vfil \markboth{}{}\secdef\@part\@spart}
%
\def\@part[#1]#2{%
\ifnum \c@secnumdepth >-2\relax \refstepcounter{part}%
\addcontentsline{toc}{part}{\partname\ \thepart.
\protect\enspace\protect\noindent#1}%
\else
\addcontentsline{toc}{part}{#1}\fi
\begingroup\centering
\ifnum \c@secnumdepth >-2\relax
{\fontsize{\@xviipt}{22}\bfseries
\partname\ \thepart} \vskip 20\p@ \fi
\fontsize{\@xxpt}{25}\bfseries
#1\vfil\vfil\endgroup \newpage\thispagestyle{empty}}
\def\@spart#1{\addcontentsline{toc}{part}{\protect\noindent#1}%
\begingroup\centering
\fontsize{\@xxpt}{25}\bfseries
#1\vfil\vfil\endgroup \newpage\thispagestyle{empty}}
%
% \end{macrocode}
%
% The arguments of \cs{partrunhead} are \cs{partname},
% \cs{thepart}, and the text of the part title. The first two were
% fully expanded during the marking process. Use of a mere
% interword space between the first two args makes it possible
% to apply \cn{ignorespaces} and \cn{unskip} as shown here
% to produce the desired results if one or the other is empty.
% \begin{macrocode}
%<*amsbook>
\def\partrunhead#1#2#3{%
\@ifnotempty{#2}{\uppercase{#1 #2}\@ifnotempty{#3}{. }}%
\def\@tempa{#3}%
\ifx\@empty\@tempa\else\uppercasenonmath\@tempa\@tempa\fi}
\let\chapterrunhead\partrunhead
\let\sectionrunhead\partrunhead
%
% \end{macrocode}
%
% Section headings in the amsbook style differ from the amsart
% style in a couple of ways: The ones that aren't centered are
% indented on the left, instead of flush left; and the first
% level, \cn{section}, is not small caps but bold.
% Cf.~the definition of \cn{appendix}.
% \begin{macrocode}
\def\section{\@startsection{section}{1}%
\z@{.7\linespacing\@plus\linespacing}{.5\linespacing}%
% {\normalfont\scshape\centering}}
% {\normalfont\bfseries\centering}}
% \end{macrocode}
%
% Negative value for \arg{5} is a signal to make a run-in heading instead
% of doing a vskip after the heading.
% \begin{macrocode}
\def\subsection{\@startsection{subsection}{2}%
% \z@{.5\linespacing\@plus.7\linespacing}{-.5em}%
% \normalparindent{.5\linespacing\@plus.7\linespacing}{-.5em}%
{\normalfont\bfseries}}
% \end{macrocode}
%
% \begin{macrocode}
\def\subsubsection{\@startsection{subsubsection}{3}%
% \z@{.5\linespacing\@plus.7\linespacing}{-.5em}%
% \normalparindent\z@{-.5em}%
{\normalfont\itshape}}
% \end{macrocode}
%
% Fontdimen 2 of the current font is the ideal interword space of the
% font. Thus the following spec says that the space after the
% paragraph heading should be a normal interword space (but
% nonstretching and nonshrinking).
% \begin{macrocode}
\def\paragraph{\@startsection{paragraph}{4}%
% \z@\z@{-\fontdimen2\font}%
% \normalparindent\z@{-\fontdimen2\font}%
\normalfont}
% \end{macrocode}
%
% \begin{macrocode}
\def\subparagraph{\@startsection{subparagraph}{5}%
\z@\z@{-\fontdimen2\font}%
\normalfont}
% \end{macrocode}
%
% \begin{macrocode}
%<*amsart|amsproc>
\def\appendix{\par\c@section\z@ \c@subsection\z@
\let\sectionname\appendixname
\def\thesection{\@Alph\c@section}}
\def\appendixname{Appendix}
%
% \end{macrocode}
%
% A slower, but fully expandable definition of \cs{@Roman} to avoid
% the nonexpandable \cn{uppercase} which is undesirable in certain
% circumstances.
% \begin{macrocode}
\def\@Roman#1{\@xp\@slowromancap
\romannumeral#1@}%
%
\def\@slowromancap#1{\ifx @#1% then terminate
\else
% \end{macrocode}
% Note: \cs{if} is required here, not \cs{ifx}, because
% \cs{romannumeral} returns category 12 letters!
% \begin{macrocode}
\if i#1I\else\if v#1V\else\if x#1X\else\if l#1L\else\if
c#1C\else\if m#1M\else#1\fi\fi\fi\fi\fi\fi
\@xp\@slowromancap
\fi
}
% \end{macrocode}
%
% \subsection{Book features}
% Books (monographs) comprise three distinct sections,
% \cn{frontmatter}, \cn{mainmatter}, and \cn{backmatter}. The
% \cn{frontmatter} would consist of the title page, copyright page,
% table of contents, preface, etc. The \cn{mainmatter} would
% be the body of the book. The \cn{backmatter} would include the
% appendix, bibliography, glossary, and index.
% \begin{macrocode}
%<*amsbook>
\def\frontmatter{\cleardoublepage\pagenumbering{roman}}
\def\mainmatter{\cleardoublepage\pagenumbering{arabic}}
\def\backmatter{\cleardoublepage}
%
% \end{macrocode}
%
% Book proceedings and monographs allow a signature to print at the
% end of a preface.
% \begin{macrocode}
%<*!amsart>
\def\aufm#1{\par\vspace*{12pt}{\flushright #1\par}}
%!amsart>
% \end{macrocode}
%
% Monographs can have a special exercise environment.
% \begin{macrocode}
%<*amsbook>
\newenvironment{xcb}{%
\settowidth{\leftmargini}{0.\hskip\labelsep}%
\settowidth{\leftmarginii}{(d.)\hskip\labelsep}%
\@startsection{section}% counter name; ignored because of the
% * below
{1}% sectioning level
{\z@}% indent to the left of the section title
{18\p@\@plus2\p@}% vertical space above *** added 12 more points space!!
{1sp}% Space below of 13pt base-to-base, so none needs to be added
% here; but \z@ would cause the following text to be run-in, so we
% use 1sp instead.
{\bfseries}% The font of the subsection title
*% always unnumbered
}{%
\par
}
%
% \end{macrocode}
%
% \subsection{Book chapters}
% The \cn{chapter} command is provided only in the amsbook class, not
% in the amsart class.
% \begin{macrocode}
%<*amsbook>
\def\chapter{\cleardoublepage \thispagestyle{plain}\global\@topnum\z@
\@afterindenttrue \secdef\@chapter\@schapter}
% \end{macrocode}
% \cs{@chapter} for numbered chapters.
% \begin{macrocode}
\def\@chapter[#1]#2{\refstepcounter{chapter}%
\ifnum\c@secnumdepth<\z@ \let\@secnumber\@empty
\else \let\@secnumber\thechapter \fi
\typeout{\chaptername\space\@secnumber}%
\def\@toclevel{0}%
\ifx\chaptername\appendixname \@tocwriteb\tocappendix{chapter}{#2}%
\else \@tocwriteb\tocchapter{chapter}{#2}\fi
\chaptermark{#1}%
\addtocontents{lof}{\protect\addvspace{10\p@}}%
\addtocontents{lot}{\protect\addvspace{10\p@}}%
\@makechapterhead{#2}\@afterheading}
% \end{macrocode}
% \cs{@schapter} for unnumbered chapters.
% \begin{macrocode}
\def\@schapter#1{\typeout{#1}%
\let\@secnumber\@empty
\def\@toclevel{0}%
\ifx\chaptername\appendixname \@tocwriteb\tocappendix{chapter}{#1}%
\else \@tocwriteb\tocchapter{chapter}{#1}\fi
\chaptermark{#1}%
\addtocontents{lof}{\protect\addvspace{10\p@}}%
\addtocontents{lot}{\protect\addvspace{10\p@}}%
\@makeschapterhead{#1}\@afterheading}
% \end{macrocode}
%
% \begin{macrocode}
\def\chaptername{Chapter}
\def\thechapter{\@arabic\c@chapter}
\def\appendixname{Appendix}
% \end{macrocode}
%
% \begin{macrocode}
\def\@makechapterhead#1{\global\topskip 7.5pc\relax
\begingroup
\fontsize{\@xivpt}{18}\bfseries\centering
% \end{macrocode}
% In order to keep the chapter number ``CHAPTER III'' from
% getting in the way of the \cs{topskip} we put it inside
% the paragraph containing the main title. Then we have to
% do some laborious \cs{rlap}ing and \cs{hskip}ing to
% position it correctly.
% \begin{macrocode}
\ifnum\c@secnumdepth>\m@ne
\leavevmode \hskip-\leftskip
\rlap{\vbox to\z@{\vss
\centerline{\normalsize\mdseries
\uppercase\@xp{\chaptername}\enspace\thechapter}
\vskip 3pc}}\hskip\leftskip\fi
#1\par \endgroup
\skip@34\p@ \advance\skip@-\normalbaselineskip
\vskip\skip@ }
% \end{macrocode}
%
% \begin{macrocode}
\def\@makeschapterhead#1{\global\topskip 7.5pc\relax
\begingroup
\fontsize{\@xivpt}{18}\bfseries\centering
#1\par \endgroup
\skip@34\p@ \advance\skip@-\normalbaselineskip
\vskip\skip@ }
%
% \end{macrocode}
% The \cn{appendix} command, following the \latex/ book, marks the
% start of a division after \cn{mainmatter} and before
% \cn{backmatter} that consists of appendixes.
% \begin{macrocode}
%<*amsbook>
\def\appendix{\par
\c@chapter\z@ \c@section\z@
\let\chaptername\appendixname
\def\thechapter{\@Alph\c@chapter}}
%
% \end{macrocode}
%
% \subsection{Table of contents macros}
%
% \cn{tableofcontents} is like \cn{chapter} or \cn{section} except
% for no number and no table of contents entry.
%
% \cs{@pnumwidth} is the maximum width for page numbers in a table of
% contents. |1.6em| allows enough room for three digits.
% \begin{macrocode}
\newcommand{\@pnumwidth}{1.6em}
% \end{macrocode}
% \cs{@tocrmarg} is \cs{@pnumwidth} plus the desired minimum
% space (|1em|) between page numbers and the preceding text.
% \begin{macrocode}
\newcommand{\@tocrmarg}{2.6em}
%\setcounter{tocdepth}{2}
%\setcounter{tocdepth}{1}
% \end{macrocode}
%
% Since table of contents, list of figures and list of figures
% are identical in design as far as the chapter heading and other
% preliminaries go, we redefine \cs{@starttoc} to do the necessary
% work, rather than defining a new macro (which would use up another
% control sequence name).
%
% We define first the article form of \cs{@starttoc}, then the book
% form.
% \begin{macrocode}
%<*amsart|amsproc>
\def\@starttoc#1#2{\begingroup
% \end{macrocode}
% Remove the skip after the abstract so that we can substitute another.
% \begin{macrocode}
\par\removelastskip\vskip\z@skip
% \end{macrocode}
% The first two arguments of \cs{@startsection} here are special values
% that cause different internal branches to be taken.
% \begin{verbatim}
% Arguments: {} = name = empty
% \@M = no number should be used and no table of contents entry
% \z@ = indent amount
% 12pt + 12pt = vskip before
% 6pt = vskip after
% \centering\scshape = format
% \end{verbatim}
% \begin{macrocode}
\@startsection{}\@M\z@{\linespacing\@plus\linespacing}%
{.5\linespacing}{\centering\scshape}{#2}%
% \end{macrocode}
% If we have a list of figures or list of tables we want to put
% them in the main table of contents, but we don't want to put an
% entry there for the main table of contents itself. So we check
% to see if argument 2 is \cn{contentsname} and if it is then
% we refrain from doing \cn{addcontentsline}.
% \begin{macrocode}
\ifx\contentsname#2%
\else \addcontentsline{toc}{section}{#2}\fi
\makeatletter
\@input{\jobname.#1}%
\if@filesw
\@xp\newwrite\csname tf@#1\endcsname
\immediate\@xp\openout\csname tf@#1\endcsname \jobname.#1\relax
\fi
\global\@nobreakfalse \endgroup
\addvspace{32\p@\@plus14\p@}%
\let\tableofcontents\relax
}
%
% \end{macrocode}
% And here is the book form of \cs{@starttoc}.
% \begin{macrocode}
%<*amsbook>
\def\@starttoc#1#2{%
\begingroup
% \end{macrocode}
% Inside this group we change \cs{secdef} so that we can call
% \cn{chapter} and only get the preliminary part of its definition
% that we need.
% \begin{macrocode}
\let\secdef\@gobbletwo \chapter
% \end{macrocode}
% If we have a list of figures or list of tables we want to put
% them in the main table of contents, but we don't want to put an
% entry there for the main table of contents itself. So we check
% to see if argument 2 is \cn{contentsname} and if it is then
% we refrain from doing \cn{addcontentsline}.
% \begin{macrocode}
\let\@secnumber\@empty % for \@tocwrite and \chaptermark
\ifx\contentsname#2%
\else \@tocwrite{chapter}{#2}\fi
% \end{macrocode}
% Now we do the equivalent of \cs{@schapter}. Expand \arg{2} so that
% it will be easy to apply uppercasing to it. (For \cs{@starttoc} we
% assume that \arg{2} is always a control such as \cn{contentsname}.)
% \begin{macrocode}
\typeout{#2}\@xp\chaptermark\@xp{#2}%
\@makeschapterhead{#2}\@afterheading
% \end{macrocode}
% And finally we read in the \fn{.toc} (or whatever) file.
% \begin{macrocode}
\makeatletter
\@input{\jobname.#1}%
\if@filesw
\@xp\newwrite\csname tf@#1\endcsname
\immediate\@xp\openout\csname tf@#1\endcsname \jobname.#1\relax
\fi
\global\@nobreakfalse \endgroup
\newpage
}
%
% \end{macrocode}
%
% Now it is easy to define \cn{tableofcontents} and its relatives.
% \begin{macrocode}
\def\contentsname{Contents}
\def\listfigurename{List of Figures}
\def\listtablename{List of Tables}
\def\tableofcontents{\@starttoc{toc}\contentsname}
\def\listoffigures{\@starttoc{lof}\listfigurename}
\def\listoftables{\@starttoc{lot}\listtablename}
% \end{macrocode}
%
% In order to automatically leave enough space for the `number' part
% of toc entries, we compute the maximum width of the `number' part
% for each sectioning level and pass that information to
% \cs{@tocline} through the \fn{.aux} file.
%
% Init the tocindents if they are not yet set (first run).
% \begin{macrocode}
\AtBeginDocument{%
\@for\@tempa:=-1,0,1,2,3\do{%
\@ifundefined{r@tocindent\@tempa}{%
\@xp\gdef\csname r@tocindent\@tempa\endcsname{0pt}}{}%
}%
}
% \end{macrocode}
%
% \begin{macro}{\@writetocindents}
% This function writes out the max toc indents to the aux file.
% \begin{macrocode}
\def\@writetocindents{%
\begingroup
\@for\@tempa:=-1,0,1,2,3\do{%
\immediate\write\@auxout{%
\string\newlabel{tocindent\@tempa}{%
\csname r@tocindent\@tempa\endcsname}}%
}%
\endgroup}
%
\AtEndDocument{\@writetocindents}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\indentlabel}
% This function is a no-op except in \cs{@tocwrite} where it is a
% pointer to \cs{@tochangmeasure}.
% \begin{macrocode}
\let\indentlabel\@empty
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@tochangmeasure}
% This function measures the hangindent part of a toc entry and
% updates the current max for the given sectioning level, if
% necessary. The max's at the end of the document will be written
% in the form of a pseudo-label to the \fn{.aux} file by
% \cs{@writetocindents}.
%
% We can assume that \cs{@tochangmeasure} is already inside a group
% when called.
% \begin{macrocode}
\def\@tochangmeasure#1{\sbox\z@{#1}%
\ifdim\wd\z@>\csname r@tocindent\@toclevel\endcsname\relax
\@xp\xdef\csname r@tocindent\@toclevel\endcsname{\the\wd\z@}%
\fi
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\@toclevel}
% Initialize, for the record.
% \begin{macrocode}
\def\@toclevel{0}
% \end{macrocode}
% \end{macro}
%
% Since we don't have leader dots, we have \cs{@tocline} instead of
% \cs{@dottedtocline}.
% \begin{macrocode}
\def\@tocline#1#2#3#4#5#6#7{\relax
\ifnum #1>\c@tocdepth % then omit
\else
\par \addpenalty\@secpenalty\addvspace{#2}%
\begingroup \hyphenpenalty\@M
\@ifempty{#4}{%
\@tempdima\csname r@tocindent\number#1\endcsname\relax
}{%
\@tempdima#4\relax
}%
\parindent\z@ \leftskip#3\relax \advance\leftskip\@tempdima\relax
\rightskip\@pnumwidth plus1em \parfillskip-\@pnumwidth
#5\leavevmode\hskip-\@tempdima #6\relax
\hfil\hbox to\@pnumwidth{\@tocpagenum{#7}}\par
\nobreak
\endgroup
\fi}
% \end{macrocode}
%
% \begin{macrocode}
\def\@tocpagenum#1{\hss{\mdseries #1}}
% \end{macrocode}
%
% The function \cs{@tocwrite} writes the information of a section
% heading to the \fn{.toc} file in a standard form. It allows
% different functions to be substituted for \cs{numberline}, to get
% greater control of toc formatting.
% \begin{macrocode}
\def\@tocwrite#1{\@xp\@tocwriteb\csname toc#1\endcsname{#1}}
% \end{macrocode}
% The \cn{chapter} command uses \cs{@tocwriteb} directly because of
% the need to write slightly different things to the toc file
% depending on the current value of \cn{chaptername}.
% \begin{macrocode}
\def\@tocwriteb#1#2#3{%
\begingroup
\def\@tocline##1##2##3##4##5##6{%
\ifnum##1>\c@tocdepth
\else \sbox\z@{##5\let\indentlabel\@tochangmeasure##6}\fi}%
\csname l@#2\endcsname{#1{\csname#2name\endcsname}{\@secnumber}{}}%
\endgroup
\addcontentsline{toc}{#2}%
{\protect#1{\csname#2name\endcsname}{\@secnumber}{#3}}}
% \end{macrocode}
%
% Specs for monograph toc are as follows (tocdepth is 1, i.e.,
% subsections and lower are not listed in toc).
% \begin{verbatim}
% Part: Space above 12pt plus2pt, indent 0pt, "Part" + wordspace +
% number + "." + 1em + title (raggedright, no hangindent) + 1em +
% page number in column 1.6em wide.
%
% Chapter: Space above 8pt, hangindent on ("Chapter 0" + "." + 1em),
% + title (raggedright) + 1em + page number in column 1.6em wide.
%
% Appendix: Same as Chapter except for epithet "Appendix M"
%
% Section: Space above 0pt, hangindent on (1pc + "0.0" + "." + 1em),
% + title (raggedright) + 1em + page number in column 1.6em wide.
% \end{verbatim}
%
% Specs for article toc are as follows (tocdepth 2):
% \begin{verbatim}
% Section: Same as for monograph.
%
% Subsection: Space above 0pt, hangindent 6pc (number + "." + 1em),
% + title (raggedright) + 1em + page number in column 1.6em wide.
%
% Subsubsection: Same as subsection but hangindent 8pc
% \end{verbatim}
%
% Typical invocation of \cs{l@chapter}:
% \begin{verbatim}
% \contentsline{chapter}{%
% \tocchapter{Chapter}{3}{Some title stuff}}{103}
% -->\l@chapter-->
% #1 #2 #3 #4 #5
% \@tocline{0}{8pt}{0pt}{} {\bfseries}
% #6 6a 6b 6c #7
% {\tocchapter{Chapter}{3}{Some title stuff}}{103}
% \end{verbatim}
% The \cs{tocchapter} is a slightly more useful form than
% \cs{numberline} that allows control for optionally omitting strings
% like `Chapter' or changing fonts for subcomponents of the toc
% entry. Note that it is allowed to have appendix and chapter at the
% same toc level, with \cs{tocappendix} instead of \cs{tocchapter}
% written in the \fn{.toc} file.
%
% The arguments of \cs{@tocline} are as follows:
% \begin{verbatim}
% \@tocline{LEVEL}{VSPACE}{INDENT}{NUMBERWIDTH}{EXTRA}%
% {TEXT}{PAGENUM}
% \end{verbatim}
% where `numberwidth' is the width of the box allotted to contain the
% section number, including any preceding word like `Chapter' or
% `Part'. If this width arg is empty then an automatically computed
% width (max over TOC of the numberwidths for this level) is used.
% The `extra' argument is formatting such as font changes.
% The `text' argument contains a section-command specific function
% like \cs{tocsection} or \cs{tocchapter} which takes in turn three
% arguments: epithet, number, topic.
% \begin{macrocode}
\def\l@section{\@tocline{1}{0pt}{1pc}{}{}}
% \end{macrocode}
% The use of \cn{ignorespaces} in \cs{tocsection} and its relatives
% means that if \arg{1} is empty, the following space will be also
% removed.
% \begin{macrocode}
\newcommand{\tocsection}[3]{%
\indentlabel{\@ifnotempty{#2}{\ignorespaces#1 #2.\quad}}#3}
\def\l@subsection{\@tocline{2}{0pt}{1pc}{5pc}{}}
\let\tocsubsection\tocsection
\def\l@subsubsection{\@tocline{3}{0pt}{1pc}{7pc}{}}
\let\tocsubsubsection\tocsection
%
\def\l@part{\@tocline{-1}{12pt plus2pt}{0pt}{}{\bfseries}}
\let\tocpart\tocsection
\def\l@chapter{\@tocline{0}{8pt plus1pt}{0pt}{}{}}
\let\tocchapter\tocsection
\let\tocappendix\tocchapter
% \end{macrocode}
%
% \begin{macrocode}
\def\l@figure{\@tocline{0}{3pt plus2pt}{0pt}{}{}}
\let\l@table=\l@figure
% \end{macrocode}
%
% \subsection{Bibliography section or chapter}
%
% Following the \pkg{babel} package, we use \cn{refname} in articles
% and \cn{bibname} in books.
% \begin{macrocode}
\def\refname{References}
\def\bibname{Bibliography}
% \end{macrocode}
%
% Restudy the following code; \cs{bibsetup} isn't used anywhere
% although it's defined for the three different bibstyles.
% \begin{macrocode}
\def\bibliographystyle#1{%
\if@filesw\immediate\write\@auxout
{\string\bibstyle{#1}}\fi
\def\@tempa{#1}%
\def\@tempb{amsplain}%
\def\@tempc{}%
\ifx\@tempa\@tempb
\def\@biblabel##1{##1.}%
\def\bibsetup{}%
\else
\def\bibsetup{\labelsep6\p@}%
\ifx\@tempa\@tempc
\def\@biblabel##1{}%
\def\bibsetup{\labelwidth\z@ \leftmargin24\p@
\itemindent-24\p@
\labelsep\z@ }%
\fi
\fi}
\newenvironment{thebibliography}[1]{%
% \@xp\section\@xp*\@xp{\refname}%
% \@xp\chapter\@xp*\@xp{\bibname}%
\normalfont\footnotesize\labelsep .5em\relax
\renewcommand\theenumiv{\arabic{enumiv}}\let\p@enumiv\@empty
\list{\@biblabel{\theenumiv}}{\settowidth\labelwidth{\@biblabel{#1}}%
\leftmargin\labelwidth \advance\leftmargin\labelsep
\usecounter{enumiv}}%
\sloppy \clubpenalty\@M \widowpenalty\clubpenalty
\sfcode`\.=\@m
}{%
% \end{macrocode}
% Change error for empty list (no items) to warning, to allow authors
% to leave their bibliography temporarily empty during writing:
% \begin{macrocode}
\def\@noitemerr{\@latex@warning{Empty `thebibliography' environment}}%
\endlist
}
% \end{macrocode}
%
% The \cn{bysame} command prints a horizontal dash indicating
% repetition of the author's name in consecutive bibliography
% entries.
% \begin{macrocode}
\def\bysame{\leavevmode\hbox to3em{\hrulefill}\thinspace}
% \end{macrocode}
% We define \cn{newblock} even though it's not needed for AMS
% publication style, just to avoid error messages when a non-AMS
% \fn{.bst} file is used. This is a convenience for users; use of
% \cn{newblock} is not recommended for submissions to the AMS.
% \begin{macrocode}
\def\newblock{}
% \end{macrocode}
%
% \begin{macro}{\MR}
% Provide an MR number for a bibliography item. At the moment
% [mjd,1995/08/07] this only prints the MR number, but later
% we expect to extend it to write an HTML \cs{special} to the
% \fn{.dvi} file.
%
% Specs from AMS editorial dept [1995/08/10]: Set MR number at end of
% reference (following the period) in this form:
%
% intersentence space, "MR", word space, bold volume number, bold ":",
% review number
%
% \begin{macrocode}
\newcommand\MR[1]{\relax\ifhmode\unskip\spacefactor3000 \space\fi
\def\@tempa##1:##2:##3\@nil{%
\ifx @##2\@empty##1\else\textbf{##1:}##2\fi}%
\MRhref{#1}{MR \@tempa#1:@:\@nil}}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\URL}
% \begin{macro}{\URLhref}
% \begin{macro}{\@URL}
% Allows sticking in an arbitrary URL in a bibliography. Leading
% "http" is not assumed. Call \cn{verb} to ensure that special
% characters in the URL don't cause trouble.
% \begin{macrocode}
\newcommand\URL{\begingroup
\def\@sverb##1{%
\def\@tempa####1##1{\@URL{####1}\egroup\endgroup}%
\@tempa}%
\verb}
% \end{macrocode}
%
% \begin{macrocode}
\let\URLhref\@gobble
\def\@URL#1{\URLhref{#1}#1}
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \subsection{Index section or chapter}
%
% Chapter or section heading for an index. Index is set up to be two
% columns.
% \begin{macrocode}
\newif\if@restonecol
% \end{macrocode}
%
% \begin{macrocode}
%<*amsbook>
\def\indexchap#1{\global\topskip 7.5pc\relax
\twocolumn[\fontsize{\@xivpt}{18}%
\vskip\topskip\vskip-\baselineskip\hbox{}% adjust top space
\bfseries\centering #1\par]%
% \end{macrocode}
% After \cs{twocolumn} finishes operating, the top material is left in an
% insert register, and topskip will now be applied above the
% following material. So we should set it to the normal
% after-chapter-title space (34pt)---cf.~\cs{@makeschapterhead}.
% [mjd,1995/03/21]
% \begin{macrocode}
\global\topskip 34\p@
}
%
% \end{macrocode}
%
% \begin{macrocode}
\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
\columnseprule\z@ \columnsep 35\p@
%<*amsbook>
\let\@makeschapterhead\indexchap
\@xp\chapter\@xp*\@xp{\indexname}%
%
% \twocolumn[\@xp\section\@xp*\@xp{\indexname}]%
\thispagestyle{plain}%
\let\item\@idxitem
\parindent\z@ \parskip\z@\@plus.3\p@\relax
\footnotesize}
% \end{macrocode}
%
% \begin{macrocode}
\def\indexname{Index}
% \end{macrocode}
%
% \begin{macrocode}
\def\@idxitem{\par\hangindent 2em}
\def\subitem{\par\hangindent 2em\hspace*{1em}}
\def\subsubitem{\par\hangindent 3em\hspace*{2em}}
\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
\def\indexspace{\par\bigskip}
% \end{macrocode}
%
% \subsection{Footnotes}
% In books the footnote counter should reset to 0 at the beginning of
% each chapter:
% \begin{macrocode}
%\@addtoreset{footnote}{chapter}
% \end{macrocode}
%
% Rule above footnotes is 5 picas wide.
% \begin{macrocode}
\def\footnoterule{\kern-.4\p@
\hrule\@width 5pc\kern11\p@\kern-\footnotesep}
%
\def\@makefnmark{\hbox{$\m@th^{\@thefnmark}$}}
%
\def\@makefntext{\indent\@makefnmark}
% \end{macrocode}
% Add \cn{normalfont} before \cn{footnotesize} so that
% fonts will come out properly using the new font selection scheme.
% \begin{macrocode}
\long\def\@footnotetext#1{\insert\footins{%
\normalfont\footnotesize
\interlinepenalty\interfootnotelinepenalty
\splittopskip\footnotesep \splitmaxdepth \dp\strutbox
\floatingpenalty\@MM \hsize\columnwidth
% \end{macrocode}
% Mostly \cs{@parboxrestore} does what we want; but not with
% respect to \cs{parindent} and \cs{tolerance}.
% \begin{macrocode}
\@parboxrestore \parindent\normalparindent \sloppy
\edef\@currentlabel{\p@footnote\@thefnmark}%
\@makefntext{\rule\z@\footnotesep\ignorespaces#1\unskip\strut\par}}}
% \end{macrocode}
% We change \cn{sloppy} to keep it from overriding our normal value of
% 1pt for \cs{hfuzz} and \cs{vfuzz} with a LESS sloppy value (.5pt).
% \begin{macrocode}
\hfuzz=1pt \vfuzz=\hfuzz
\def\sloppy{\tolerance9999 \emergencystretch 3em\relax}
% \end{macrocode}
%
% \section{Float placement parameters}
% These control the placing of floating objects like tables and
% figures. We use much more tolerant values than the \latex/ defaults;
% the \latex/ defaults are geared to fussier page breaks, at a price of
% requiring more manual intervention to deal with difficult page
% breaking problems.
%
% When using \latex/'s twocolumn option, `page' really means `column',
% for the parameters that don't have a dbl prefix: that is, topnumber
% is then the maximum number of top figures allowed in each column,
% and so forth.
% \begin{description}
% \item[topnumber] maximum number of top figures allowed per page
% \item[bottomnumber] maximum number of bottom figures allowed per page
% \item[totalnumber] maximum number of figures (top and bottom) allowed
% per page
% \item[dbltopnumber] same as topnumber, but for two-column wide
% figures, when double-column format is used
% \end{description}
% \begin{macrocode}
\setcounter{topnumber}{4}
\setcounter{bottomnumber}{4}
\setcounter{totalnumber}{4}
\setcounter{dbltopnumber}{4}
% \end{macrocode}
% Float fraction parameters.
% \begin{description}
% \item[\cs{topfraction}] maximum part of the page allowed for top
% figures, expressed as a decimal fraction. The value of .97 means
% roughly `accept pages that have only two lines of text, and the
% rest figures'.
% \item[\cs{bottomfraction}] same as \cs{topfraction}, but for bottom
% figures
% \item[\cs{textfraction}] \emph{minimum} part of the page that must be
% occupied by text, if the page is to have any text at all. If this
% value cannot be achieved, \latex/ will turn the current figure or
% figures into a ``float page'', i.e., a page of figures without any
% text.
% \item[\cs{floatpagefraction}] minimum amount (that is, total combined
% height) of figures needed before \latex/ will make a float page. This
% is expressed as a fraction of the normal page height.
% \item[\cs{dbltopfraction}] like \cs{topfraction}, but applies only to
% figures that are two columns wide, when double-column format is
% used.
% \item[\cs{dblfloatpagefraction}] minimum amount of double-column
% figure material needed before \latex/ will make a two-column wide
% ``float page''
% \end{description}
% \begin{macrocode}
\renewcommand{\topfraction}{.97}
\renewcommand{\bottomfraction}{.97}
\renewcommand{\textfraction}{.03}
\renewcommand{\floatpagefraction}{.9}
\renewcommand{\dbltopfraction}{.97}
\renewcommand{\dblfloatpagefraction}{.9}
% \end{macrocode}
%
% We also modify the default values for spacing around floating
% figures: (A) so that figures on a float page will not be
% vertically centered on the total page height but will
% be flush at the top of the page, and (B) so that there will
% be slightly more stretchability around figures, to help find better
% page breaks in difficult situations.
%
% \begin{description}
% \item[\cs{floatsep}] Space between consecutive figures
% \item[\cs{textfloatsep}] Space between text and top or bottom figures
% \item[\cs{intextsep}] Space above and below a figure in the middle of
% the text (i.e., placed with the |[h]| option)
% \item[\cs{dblfloatsep}] Space between consecutive figures that are
% two columns wide (when two-column format is used)
% \item[\cs{dbltextfloatsep}] Space between double-column figures and text
% \item[\cs{@fptop}] Space above the first figure on a float page
% \item[\cs{@fpsep}] Space between figures on a float page
% \item[\cs{@fpbot}] Space below the last figure on a float page
% \item[\cs{@dblfptop}] Space above the first double-column figure on a
% two-column wide float page
% \item[\cs{@dblfptop}] Space between double-column figures on a two-column
% wide float page
% \item[\cs{@dblfptop}] Space below the last double-column figure on a
% two-column wide float page
% \end{description}
% \begin{macrocode}
\setlength{\floatsep}{12pt plus 6pt minus 4pt}
\setlength{\textfloatsep}{15pt plus 8pt minus 5pt}
\setlength{\intextsep}{12pt plus 6pt minus 4pt}
\setlength{\dblfloatsep}{12pt plus 6pt minus 4pt}
\setlength{\dbltextfloatsep}{15pt plus 8pt minus 5pt}
\setlength{\@fptop}{0pt}% removed ``plus 1fil''
\setlength{\@fpsep}{8pt}% removed ``plus 2fil''
\setlength{\@fpbot}{0pt plus 1fil}
\setlength{\@dblfptop}{0pt}% removed ``plus 1fil''
\setlength{\@dblfpsep}{8pt}% removed ``plus 2fil''
\setlength{\@dblfpbot}{0pt plus 1fil}
% \end{macrocode}
%
% \cs{fps@figure}, \cs{fps@table}: placement specifications for
% \env{figure} and \env{table} environments. `|tbp|' means that a
% figure will be placed at the top or bottom of a page, or on a
% separate page with no text. This might be changed to `|tp|', for
% example, if you never want figures to appear at the bottom of a
% page.
% \begin{macrocode}
\newcommand{\fps@figure}{tbp}
\newcommand{\fps@table}{tbp}
% \end{macrocode}
%
% Some more setup for figures.
% \begin{macrocode}
%\newcounter{figure}
%\newcounter{figure}[chapter]
\def\@captionheadfont{\scshape}
\def\@captionfont{\normalfont}
\def\ftype@figure{1}
\def\ext@figure{lof}
\def\fnum@figure{\figurename\ \thefigure}
\def\figurename{Figure}
\newenvironment{figure}{%
\@float{figure}%
}{%
\end@float
}
% \end{macrocode}
% And similar for tables.
% \begin{macrocode}
%\newcounter{table}
%\newcounter{table}[chapter]
\def\ftype@table{2}
\def\ext@table{lot}
\def\fnum@table{\tablename\ \thetable}
\def\tablename{Table}
\newenvironment{table}{%
\@float{table}%
}{%
\end@float
}
% \end{macrocode}
%
% Change \cs{@floatboxreset} to add \cn{centering}. Centering is
% always applied to tables and figures in AMS publications. It should
% not be necessary to throw in |\begin{center}| \ldots |\end{center}|
% in every instance to achieve this.
% \begin{macrocode}
\def\@floatboxreset{\global\@minipagefalse \centering}
% \end{macrocode}
%
% This is what we want \cs{@makecaption} to do: If the total width is
% greater than normal columnwidth we want to break the caption into
% lines using a line width of $W$ = (columnwidth - 6pc), and center the
% resulting block between the margins. Otherwise we want to set the
% caption as a single line, centered between the margins.
%
% To do this we set the caption as a vbox with line width $W$,
% except that we allow the last line (which may be the only line) to
% have width up to full columnwidth by adding a kern of -6pc. If the
% result is a single hbox (i.e., a single line) we need to unpack the
% hbox, remove rightskip, parfillskip, and the -6pc kern, and center
% the remaining material. If the caption is more than one line, then
% box 1 contains the last line, which we need to unpack in the same
% way, and run through the paragraphing process again (because this
% last line may be up to 6 picas wider than the desired width).
%
% Finally, if the caption is for a figure, it will be set below the
% figure, so the separating space goes above the caption; otherwise
% the separating space goes below the caption.
% \begin{macrocode}
\long\def\@makecaption#1#2{%
% \end{macrocode}
% Measure the contents of the caption. If \arg{2} is not
% empty, then we must add a period and an en-space before
% typesetting it. The \cs{@caption} macro adds an extra
% \cn{ignorespaces} at the beginning of \arg{2}, so in order
% to find out if the user-typed portion is empty we use
% \cs{@cdr} to pull off the \cn{ignorespaces}.
% \begin{macrocode}
% Use color-safe commands
\setbox\@tempboxa\vbox{\color@setgroup
\advance\hsize-2\captionindent\noindent
\@captionfont\@captionheadfont#1\@xp\@ifnotempty\@xp
{\@cdr#2\@nil}{.\@captionfont\upshape\enspace#2}%
\unskip\kern-2\captionindent\par
\global\setbox\@ne\lastbox\color@endgroup}%
\ifhbox\@ne % the normal case
\setbox\@ne\hbox{\unhbox\@ne\unskip\unskip\unpenalty\unkern}%
\fi
% \end{macrocode}
% If \cs{@tempboxa} is not empty at this point then the caption was
% more than one line long or there was extra vertical mode material,
% maybe a \cs{write} (from \cn{index} or something).
% Interestingly, we can't use \cs{ifvoid} to see if
% \cs{@tempboxa} is empty, because empty is not the same thing
% as void (as far as the \cs{ifvoid} test is concerned). So
% instead we measure the width of \cs{@tempboxa}
% to see if it's zero; this should suffice for non-bizarre cases.
% \begin{macrocode}
\ifdim\wd\@tempboxa=\z@ % this means caption will fit on one line
\setbox\@ne\hbox to\columnwidth{\hss\kern-2\captionindent\box\@ne\hss}%
\else % tempboxa contained more than one line
\setbox\@ne\vbox{\unvbox\@tempboxa\parskip\z@skip
\noindent\unhbox\@ne\advance\hsize-2\captionindent\par}%
\fi
\ifnum\@tempcnta<64 % if the float IS a figure...
\addvspace\abovecaptionskip
\moveright\captionindent\box\@ne
\else % if the float IS NOT a figure...
\moveright\captionindent\box\@ne
\nobreak
\vskip\belowcaptionskip
\fi
\relax
}
% \end{macrocode}
% Allocate the skip registers for above and below caption space.
% \begin{macrocode}
\newskip\abovecaptionskip \abovecaptionskip=12pt \relax
\newskip\belowcaptionskip \belowcaptionskip=12pt \relax
\newdimen\captionindent \captionindent=3pc
% \end{macrocode}
%
% \subsection{Theorems and related structures}
%
% The handling of theorem environments is broken out into a separate
% package so that it can be used independently of the
% \pkg{amsart}/\pkg{amsbook} document classes.
% \begin{macrocode}
\RequirePackage{amsthm}[1996/09/24]
% \end{macrocode}
%
% We need to make a couple of small modifications in theorem style:
% the default style provided by the \pkg{amsthm} package is tailored
% a little bit to the generic \cls{article} and \cls{book} document
% classes.
%
% Use a wider space after the number if it is swapped to the left.
% \begin{macrocode}
\def\@swapped#1#2{#2%
\@ifnotempty{#1}{\@addpunct{.}\quad#1\unskip}}
% \end{macrocode}
%
% Some theorem style parameters that vary from the defaults of the
% \pkg{amsthm} package are set here.
% \begin{macrocode}
\def\thmhead@plain#1#2#3{%
\thmname{#1}\thmnumber{\@ifnotempty{#1}{ }\@upn{#2}}%
\thmnote{ \textmd{\upshape(#3)}}}
\def\swappedhead@plain#1#2#3{%
\thmnumber{\@upn{#2}}\thmname{\@ifnotempty{#2}{. }#1}%
\thmnote{ \textmd{\upshape(#3)}}}
% \end{macrocode}
%
% \begin{macrocode}
\def\th@plain{%
% \let\thm@indent\indent
% \thm@headfont{\scshape}% heading font small caps
\let\thmhead\thmhead@plain \let\swappedhead\swappedhead@plain
\thm@preskip.5\baselineskip\@plus.2\baselineskip
\@minus.2\baselineskip
\thm@postskip\thm@preskip
\itshape
}
% \end{macrocode}
%
% \begin{macrocode}
\def\th@definition{%
% \let\thm@indent\indent
% \thm@headfont{\scshape}% heading font small caps
\let\thmhead\thmhead@plain \let\swappedhead\swappedhead@plain
\thm@preskip.5\baselineskip\@plus.2\baselineskip
\@minus.2\baselineskip
\thm@postskip\thm@preskip
\upshape
}
% \end{macrocode}
%
% \begin{macrocode}
\def\th@remark{%
% \let\thm@indent\indent
% \thm@headfont{\scshape}% heading font small caps
% \thm@headfont{\itshape}% heading font bold
\let\thmhead\thmhead@plain \let\swappedhead\swappedhead@plain
\thm@preskip.5\baselineskip\@plus.2\baselineskip
\@minus.2\baselineskip
\thm@postskip\thm@preskip
\upshape
}
% \end{macrocode}
%
% In the book style the \env{proof} environment uses paragraph
% indent, and small caps instead of italic for the word ``Proof''.
% \begin{macrocode}
%<*amsbook|amsproc>
\renewenvironment{proof}[1][\proofname]{\par \normalfont
\topsep6\p@\@plus6\p@ \trivlist \itemindent\normalparindent
\item[\hskip\labelsep\scshape
#1\@addpunct{.}]\ignorespaces
}{%
\qed\endtrivlist
}
%
% \end{macrocode}
%
% For backward compatibility with version 1.1 of \cls{amsart}, we
% define \env{pf}, \env{pf*} environments. And undefine \cn{proof}
% just in case an existing document contains a \cn{newenvironment} or
% \cn{newcommand} for it, as that would now cause an error.
% \begin{macrocode}
\if@compatibility
\let\@newpf\proof \let\proof\relax \let\endproof\relax
\newenvironment{pf}{\@newpf[\proofname]}{\qed\endtrivlist}
\newenvironment{pf*}[1]{\@newpf[#1]}{\qed\endtrivlist}
\fi
% \end{macrocode}
%
% \subsection{Miscellaneous}
%
% \begin{macro}{\nonbreakingspace}
% Change \qc{\~} to be more forgiving of accidental adjacent spaces.
% Note that this means multiple |~~~...| cannot be used to get
% multiple spaces in the output.
% \begin{macrocode}
\def\nonbreakingspace{\unskip\nobreak\ \ignorespaces}
\def~{\protect\nonbreakingspace}
% \end{macrocode}
% \end{macro}
%
% Redefine \cs{@biblabel} to do nothing if the argument is empty. We
% don't really care what the previous definition was so we don't
% check it.
% \begin{macrocode}
\def\@biblabel#1{\@ifnotempty{#1}{[#1]}}
% \end{macrocode}
% Changed \cs{@cite} to always use roman/upright, nonbold font, even
% in italic or bold text (following AMS style).
% \begin{macrocode}
\def\@cite#1#2{{%
% \end{macrocode}
% Turn off mathsurround just in case there are subscripts in the cite
% numbers.
% \begin{macrocode}
% \m@th\upshape\mdseries[{#1\if@tempswa, #2\fi}]}}
% \m@th\upshape\mdseries[{\bfseries #1}{\if@tempswa, #2\fi}]}}
% \end{macrocode}
%
% Make \cn{cite} robust if it isn't already. Too many unsuspecting
% users get problems from this in a figure or table caption.
% \begin{macrocode}
\@ifundefined{cite }{%
\expandafter\let\csname cite \endcsname\cite
\edef\cite{\@nx\protect\@xp\@nx\csname cite \endcsname}%
}{}
% \end{macrocode}
%
% \begin{macro}{\fullwidthdisplay}
% The function \cs{fullwidthdisplay} makes a displayed equation take
% up the full column width even if the current context is an indented
% list.
% \begin{macrocode}
\def\fullwidthdisplay{\displayindent\z@ \displaywidth\columnwidth}
% \end{macrocode}
% And we insert the \cs{fullwidthdisplay} function at the beginning of
% \cs{everydisplay} just in case any later code in \cs{everydisplay}
% needs to use the values of \cs{displayindent} or \cs{displaywidth}.
% \begin{macrocode}
\edef\@tempa{\noexpand\fullwidthdisplay\the\everydisplay}
\everydisplay\expandafter{\@tempa}
% \end{macrocode}
% \end{macro}
%
% A few odds and ends for indexes:
% \begin{macrocode}
\newcommand\seename{see also}%
\newcommand\see[2]{{\em \seename\/} #1}%
\newcommand\printindex{\@input{\jobname.ind}}%
% \end{macrocode}
%
% \begin{macro}{\textprime}
% A text prime symbol, for applying primes to numbers such as list
% numbers or equation numbers that are not really math. Furthermore
% Cyrillic myagkii znak, or soft sign, is represented by a prime
% symbol in Russian names when they are transliterated into English.
%
% \cn{textprime} uses the prime symbol from math, but because it's
% intended specifically for nonmath use, we avoid going through math
% mode with \verb'$...$'. We must therefore call \cs{check@mathfonts}
% to ensure that \verb'scriptfont2' is actually defined. Otherwise,
% if \cn{textprime} were used in a document before the first math
% formula, there would be no adequate assignment yet for
% \verb'\scriptfont2'.
%
% The raise value of \verb'.8ex' is just a reasonable guess at making
% the bottom of the prime symbol fall near the top of a preceding
% lowercase letter but still not fall too low on an uppercase letter.
% We could look up the \cs{fontdimen} values used in math mode for
% superscripts but I don't think it's worth the bother.
% \begin{macrocode}
\DeclareRobustCommand\textprime{\leavevmode
\raise.8ex\hbox{\check@mathfonts\the\scriptfont2 \char48 }}
% \end{macrocode}
% \end{macro}
%
% \subsection{Book style variations}
% Here is the layout for a \cn{maketitle} in the \cls{amsbook} class.
% \begin{macrocode}
%<*amsbook>
\def\maketitle{\par
\@topnum\z@ % this prevents figures from falling at the top of page 1
\begingroup
\@maketitle
\endgroup
\c@footnote\z@
\def\do##1{\let##1\relax}%
\do\maketitle \do\@maketitle \do\title \do\@xtitle \do\@title
\do\author \do\@xauthor \do\address \do\@xaddress
\do\email \do\@xemail \do\curraddr \do\@xcurraddr
\do\dedicatory \do\@dedicatory \do\thanks \do\thankses
\do\keywords \do\@keywords \do\subjclass \do\@subjclass
}
%
% \end{macrocode}
%
% \begin{macrocode}
%<*amsbook>
\def\@maketitle{%
\cleardoublepage \thispagestyle{empty}%
\begingroup \topskip\z@skip
\null\vfil
\begingroup
\LARGE\bfseries \centering
\openup\medskipamount
\@title\par\vspace{24pt}%
\def\and{\par\medskip}\centering
\mdseries\authors\par\bigskip
\endgroup
\vfil
\ifx\@empty\addresses
\else
Author address:
\@setaddresses
\fi
\vfill
\newpage\thispagestyle{empty}
\begin{center}
\ifx\@empty\@subjclass\else\@setsubjclass\fi
\ifx\@empty\@translators\else\vfil\@settranslators\fi
\ifx\@empty\thankses\else\vfil\@setthanks\fi
\end{center}
\vfil
\@setabstract
\endgroup}
%
% \end{macrocode}
%
% Define the desired form for translator names.
% \begin{macrocode}
%<*amsbook>
\def\@settranslators{\par
\begingroup
Translated by: \andify\@translators \uppercasenonmath\@translators
\@translators \@@par
\endgroup}
%
% \end{macrocode}
%
% \section{Hyphenation exceptions}
% Some common hyphenation exceptions, based on the listing in
% TUGboat vol 10, no 3, November 1989, pp.~336--341. Many words from
% the TUGboat list that seemed less likely to occur in mathematical
% text have been omitted because hyphenation exceptions use up memory
% (most versions of \tex/ currently have a limit of 307 on hyphenation
% exceptions; each added hyphenation exception uses up something like
% 2 extra words of main memory as well). The list of hyphenations for
% proper names could be expanded forever if room permitted; we
% restrict ourselves to a rather short, extremely arbitrary list.
% Note that the hyphenation rules of British English differ in some
% particulars from the US rules, so some of the hyphenations
% given below may need to be overridden for proper UK hyphenation.
%
% \begin{macrocode}
\hyphenation{acad-e-my acad-e-mies af-ter-thought anom-aly anom-alies
an-ti-deriv-a-tive an-tin-o-my an-tin-o-mies apoth-e-o-ses
apoth-e-o-sis ap-pen-dix ar-che-typ-al as-sign-a-ble as-sist-ant-ship
as-ymp-tot-ic asyn-chro-nous at-trib-uted at-trib-ut-able bank-rupt
bank-rupt-cy bi-dif-fer-en-tial blue-print busier busiest
cat-a-stroph-ic cat-a-stroph-i-cally con-gress cross-hatched data-base
de-fin-i-tive de-riv-a-tive dis-trib-ute dri-ver dri-vers eco-nom-ics
econ-o-mist elit-ist equi-vari-ant ex-quis-ite ex-tra-or-di-nary
flow-chart for-mi-da-ble forth-right friv-o-lous ge-o-des-ic
ge-o-det-ic geo-met-ric griev-ance griev-ous griev-ous-ly
hexa-dec-i-mal ho-lo-no-my ho-mo-thetic ideals idio-syn-crasy
in-fin-ite-ly in-fin-i-tes-i-mal ir-rev-o-ca-ble key-stroke
lam-en-ta-ble light-weight mal-a-prop-ism man-u-script mar-gin-al
meta-bol-ic me-tab-o-lism meta-lan-guage me-trop-o-lis
met-ro-pol-i-tan mi-nut-est mol-e-cule mono-chrome mono-pole
mo-nop-oly mono-spline mo-not-o-nous mul-ti-fac-eted mul-ti-plic-able
non-euclid-ean non-iso-mor-phic non-smooth par-a-digm par-a-bol-ic
pa-rab-o-loid pa-ram-e-trize para-mount pen-ta-gon phe-nom-e-non
post-script pre-am-ble pro-ce-dur-al pro-hib-i-tive pro-hib-i-tive-ly
pseu-do-dif-fer-en-tial pseu-do-fi-nite pseu-do-nym qua-drat-ic
quad-ra-ture qua-si-smooth qua-si-sta-tion-ary qua-si-tri-an-gu-lar
quin-tes-sence quin-tes-sen-tial re-arrange-ment rec-tan-gle
ret-ri-bu-tion retro-fit retro-fit-ted right-eous right-eous-ness
ro-bot ro-bot-ics sched-ul-ing se-mes-ter semi-def-i-nite
semi-ho-mo-thet-ic set-up se-vere-ly side-step sov-er-eign spe-cious
spher-oid spher-oid-al star-tling star-tling-ly sta-tis-tics
sto-chas-tic straight-est strange-ness strat-a-gem strong-hold
sum-ma-ble symp-to-matic syn-chro-nous topo-graph-i-cal tra-vers-a-ble
tra-ver-sal tra-ver-sals treach-ery turn-around un-at-tached
un-err-ing-ly white-space wide-spread wing-spread wretch-ed
wretch-ed-ly Eng-lish Euler-ian Feb-ru-ary Gauss-ian
Hamil-ton-ian Her-mit-ian Jan-u-ary Japan-ese Kor-te-weg
Le-gendre Mar-kov-ian Noe-ther-ian No-vem-ber Rie-mann-ian Sep-tem-ber}
% \end{macrocode}
%
% \subsection{Initialization}
% We define a function to do the normal calculations that we want for
% \cn{textheight} and \cn{textwidth}
%
% \begin{macro}{\calclayout}
% Subtract the height of the running heads:
% \begin{macrocode}
\def\calclayout{\advance\textheight -\headheight
\advance\textheight -\headsep
% \end{macrocode}
% We set \cn{oddsidemargin} and \cn{evensidemargin} to
% center the text on the page.
% \begin{macrocode}
\oddsidemargin\paperwidth
\advance\oddsidemargin -\textwidth
\divide\oddsidemargin\tw@
% \end{macrocode}
% Now we subtract the default margin provided by standard DVI
% drivers. But first we make sure that the final margin will
% be at least .5 inch.
% \begin{macrocode}
\ifdim\oddsidemargin<.5truein \oddsidemargin.5truein \fi
\advance\oddsidemargin -1truein
\evensidemargin\oddsidemargin
% \end{macrocode}
% And we set \cn{topmargin} to get vertical centering as well.
% \begin{macrocode}
\topmargin\paperheight \advance\topmargin -\textheight
\advance\topmargin -\headheight \advance\topmargin -\headsep
% \end{macrocode}
% Height of running foot ignored: not present.
% \begin{macrocode}
\divide\topmargin\tw@
% \end{macrocode}
% We provide a minimum of .5in (after compensating for the default
% margin---see next step).
% \begin{macrocode}
\ifdim\topmargin<.5truein \topmargin.5truein \fi
% \end{macrocode}
% Now subtract the default margin provided by standard DVI
% drivers.
% \begin{macrocode}
\advance\topmargin -1truein\relax
}
% \end{macrocode}
% \end{macro}
%
% Initialize the page numbering, etc.
% \begin{macrocode}
\calclayout % initialize
\pagenumbering{arabic}
\pagestyle{headings}
\thispagestyle{plain}
% \end{macrocode}
%
% Some back-compatibility definitions.
%
% If we are in compatibility mode, add some backward compatibility
% stuff below. Otherwise quit here.
% \begin{macrocode}
\if@compatibility \else\endinput\fi
% \end{macrocode}
%
% Compensate for changed meaning of \cn{tiny}:
% \begin{macrocode}
\def\tiny{\Tiny}
% \end{macrocode}
%
% The macro \cs{defaultfont} was provided in version 1.1 of amsart;
% retained for compatibility as a synonym of \cn{normalfont}. Resets
% everything except for size.
% \begin{macrocode}
\def\defaultfont{\normalfont}
% \end{macrocode}
%
% Macro for making non-slanted numbers and punctuation in italic
% or slanted text. This is to avoid visual inconsistencies
% between numbers or parentheses in math and adjacent numbers or
% parentheses in text.
% \begin{macrocode}
\def\rom{\textup}
% \end{macrocode}
%
% The usual \cn{endinput} to ensure that random garbage at the end of
% the file doesn't get copied by \fn{docstrip}.
% \begin{macrocode}
\endinput
% \end{macrocode}
%
% \changes{v1.2a}{1995/02/01}{Added global init for @secnumber}
% \changes{v1.2a}{1995/02/01}{Made psamsfonts option pass cmex10 to
% amsmath}
% \changes{v1.2a}{1995/02/01}{Added missing endpar after authors in
% amsbook @maketitle}
%
% \changes{v1.2b}{1995/02/20}{Improve handling of abstract}
% \changes{v1.2b}{1995/02/20}{Allow titlepage option for articles}
% \changes{v1.2b}{1995/02/20}{Suppress logo and copyright info for
% generic AMS classes}
% \changes{v1.2b}{1995/02/20}{Use `Date' instead of `Received by...' in
% the generic AMS classes}
%
% \CheckSum{3961}
% \Finale