DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T a

⟦d43b3b90f⟧ TextFile

    Length: 117172 (0x1c9b4)
    Types: TextFile
    Names: »amsppt.doc«

Derivation

└─⟦52210d11f⟧ Bits:30007239 EUUGD2: TeX 3 1992-12
    └─⟦3e090b388⟧ »amstex/amstex.tar.Z« 
        └─⟦46c320f69⟧ 
            └─⟦this⟧ »amstex/doc/amsppt.doc« 
└─⟦52210d11f⟧ Bits:30007239 EUUGD2: TeX 3 1992-12
    └─⟦115023888⟧ »unix3.0/ams.tar.Z« 
        └─⟦dcce43fb1⟧ 
            └─⟦this⟧ »ams/amstex/doc/amsppt.doc« 

TextFile

% AMSPPT.DOC							February 1990
%
% This is the technical documentation for AMSPPT.STY.
% American Mathematical Society, Technical Support Group, P. O. Box 6248,
%        Providence, RI 02940
% 800-321-4AMS or 401-455-4080;  Internet: Tech-Support@Math.AMS.com
%
% Copyright (C) 1990, 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.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% -0- CONTENTS                                                             %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%      -0- Contents                                                        %%
%%      -1- Preliminary                                                     %%
%%      -2- Hyphenation exceptions                                          %%
%%      -3- Utility definitions                                             %%
%%      -4- Fonts                                                           %%
%%      -5- Page dimensions and other global settings                       %%
%%      -6- Top matter definitions                                          %%
%%      -7- Section headings                                                %%
%%      -8- Theorem environments and similar structures                     %%
%%      -9- Rosters                                                         %%
%%     -10- Footnotes                                                       %%
%%     -11- Tables                                                          %%
%%     -12- Figure spaces and captions                                      %%
%%     -13- Miscellaneous formatting macros                                 %%
%%     -14- References/Bibliography                                         %%
%%     -15- End of document                                                 %%
%%     -16- Output routine                                                  %%
%%     -17- Notes                                                           %%
%%                                                                          %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%\f


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% -1- PRELIMINARY                                                          %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% AMSPPT.DOC contains all the code for AMSPPT.STY, with additional
%% comments.  All such comments begin with %%, making it easy to recognize
%% single % signs that sometimes appear in AMSPPT.STY.  AMSPPT.STY is
%% produced by removing from AMSPPT.DOC all blank lines and lines beginning
%% with a double percent sign.  This is done to allow it to be loaded
%% faster by TeX.
%%
%% As in AMSTEX.DOC, TB refers to the TeXbook.  For better understanding,
%% readers of this file should have already read AMSTEX.DOC (although many
%% parts will be understandable enough per se).
%%
%% The style produced by AMSPPT.STY is based on the style of the Journal
%% of the American Mathematical Society (as of December 1989), but is
%% not intended to reproduce it exactly.  For one thing, most users of
%% AMSPPT.STY will probably have Computer Modern fonts, while the
%% Journal of the AMS uses Times Roman fonts licensed from Autologic,
%% Inc.  This means that line breaks and page breaks are sure to change
%% when a paper is submitted to the AMS.  For another thing, preprints
%% naturally differ in some respects from articles in final published form:
%% published articles generally have the journal name, volume and year of
%% publication somewhere on the first page, a ``received by the editors''
%% date, subject classification numbers, perhaps key words and phrases, and
%% an abstract, none of which are necessary in a preprint (though the last
%% few are sometimes present).  In addition, the Journal of the AMS has
%% a few idiosyncrasies such as placement of the abstract at the end of an
%% article rather than at the beginning, and a non-zero value of
%% \mathsurround, which were deemed inappropriate for inclusion in the
%% preprint style (in particular, a non-zero \mathsurround would require
%% the user to do extra typing in certain situations to cancel unwanted
%% side effects).  Since we are not matching the style of the Journal of the
%% AMS exactly, we sometimes have rounded off measurements in AMSPPT.STY to
%% convenient amounts such as \bigskipamount and \medskipamount or the
%% nearest whole or half pica.  For example \belowheadskip is 7pt in the
%% Journal of the AMS, but AMSPPT.STY uses 6pt (half a pica).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% It probably isn't necessary to prevent reading in amsppt.sty twice, but
%% we do it anyway, just to save time if it happens to be called twice.

\def\next{AMSPPT}\ifx\styname\next \endinput\fi

%% As in plain.tex and amstex.tex, we make the @ sign a letter for use
%% in private control sequences, to keep them from being changed
%% accidentally by the user.  In AMSPPT.STY we follow the convention
%% in amstex.tex of appending @ signs at the end of control sequences,
%% rather than substituting @ signs for vowels as in plain.tex.

\catcode`\@=11

%% We record the style name in \styname and the version in \styversion,
%% and then print them to the screen and log file.

\def\styname{AMSPPT}
\def\styversion{2.0}
{\W@{\styname.STY - Version \styversion}\W@{}}

%%\f


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% -2- HYPHENATION EXCEPTIONS                                               %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% Add some common hyphenation exceptions, from TUGboat files, 20-NOV-1989.
%% For more details see 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 removed 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: The hyphenation rules of British English differ in some
%% particulars from the U.S. rules.

\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-ics 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 Brown-ian
Eng-lish Euler-ian Feb-ru-ary Gauss-ian Grothen-dieck Hamil-ton-ian
Her-mit-ian Jan-u-ary Japan-ese Kor-te-weg Le-gendre Lip-schitz
Lip-schitz-ian Mar-kov-ian Noe-ther-ian No-vem-ber Rie-mann-ian
Schwarz-schild Sep-tem-ber}

%%\f


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% -3- UTILITY DEFINITIONS                                                  %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% \Invalid@ defines \nofrills and \usualspace to give an error message if
%% they are used out of context.

\Invalid@\nofrills
\Invalid@\usualspace

%% \nofrills@ is the control sequence that does the work of making
%% \nofrills work correctly.
%% \nofrills@ is defined in terms of \next@ and \nextii@ because
%% it is used in constructions that end \futurelet\next\next@, use
%% \nofrills@ to define \next@, and then define \nextii@ appropriately.
%% \nofrills@ also sets a flag \ifnofrills@, for use with \usualspace@.

%% As an example of all this, consider \keywords, which creates
%% \thekeywords@.  Normally \keywords makes \thekeywords@ begin with
%% {\it Key words and phrases.\enspace}.  But \keywords\nofrills{...}
%% makes it begin with ... instead. Moreover, \usualspace will then be
%% defined as {\it\enspace}.

\newif\ifnofrills@
\def\nofrills@#1#2{\relaxnext@
  \DN@{\ifx\next\nofrills
%% When \nofrills appears, #2 is just relax, and \next@
%% must kill off \nofrills before calling \nextii@.
    \nofrills@true\let#2\relax\DN@\nofrills{\nextii@}%
%% When \nofrills doesn't appear, #2 is defined to be #1.
  \else
    \nofrills@false\def#2{#1}\let\next@\nextii@\fi
\next@}}

%% \usualspace@ simply defines \usualspace when no frills have been specified
%% (and otherwise does nothing).  When saving up something for later
%% typesetting (e.g. \thekeywords@), \def\usualspace{<whatever>} must be
%% be included in the definition of \thekeywords@, because the
%% nofrills flag might be changed before the typesetting is done.

\def\usualspace@#1{\ifnofrills@\def\usualspace{#1}\fi}

%% Facility for adding to a token list, providing it was named with the
%% particular naming convention that we require: an additional @ sign
%% at the end of the control sequence name.
%% Usage: \addto\tenpoint{...}

\def\addto#1#2{\csname \expandafter\eat@\string#1@\endcsname
  \expandafter{\the\csname \expandafter\eat@\string#1@\endcsname#2}}

%% Fix Plain's \big, \Big, etc. macros so that they can scale with
%% size changes.  The relations in \tenpoint are:
%%
%%        total         height above
%%        height        baseline
%% --------------------------------------------------------------------
%% \big:   12pt          8.5   (12/2 = 6, + 2.5 (height of math axis))
%% \Big:   18pt          11.5  (18/2 = 9, + 2.5 (height of math axis))
%% \bigg:  24pt          14.5  (24/2 = 12, + 2.5 (height of math axis))
%% \Bigg:  30pt          17.5  (30/2 = 15, + 2.5 (height of math axis))

%% In \tenpoint \bigsize@ will be set to 12pt, the height of an
%% ordinary parenthesis in the roman font, x 1.2
\newdimen\bigsize@

%% Using \vcenter automatically factors the height of the math axis into
%% our sizing.  We set \nulldelimiterspace to zero, since we only want the
%% delimiterspace from the \left delimiter.

\def\big@#1#2{{\hbox{$\left#2\vcenter to#1\bigsize@{}%
  \right.\nulldelimiterspace\z@\m@th$}}}
\def\big{\big@\@ne}
\def\Big{\big@{1.5}}
\def\bigg{\big@\tw@}
\def\Bigg{\big@{2.5}}

%% Definition almost verbatim from TeXbook p. 317.  This is used in
%% several places, currently (28-DEC-1989) including \head, \title,
%% \author, \dedicatory, \affil, and \topcaption.

\def\raggedcenter@{\leftskip\z@ plus.4\hsize \rightskip\leftskip
 \parfillskip\z@ \parindent\z@ \spaceskip.3333em \xspaceskip.5em
 \pretolerance9999\tolerance9999 \exhyphenpenalty\@M
 \hyphenpenalty\@M \let\\\linebreak}

%% We now define a version of \uppercase that sidesteps any math, to
%% prevent uppercasing math variables.  In order to be handled properly
%% the $..$ must be on the outer level (not enclosed in braces) but this
%% is the usual case in our applications of \uppercasetext@. Also we
%% increase inter-word space in the uppercase text.  Hyphens are also
%% converted to en-dashes (according to ``Words into Type'') by
%% \endash@.  One thing to note, if \uppercasetext@ is ever applied to
%% paragraphed text: where hyphenation is allowed (\hyphenpenalty <
%% 10000), hyphens added by TeX's automatic hyphenation will not be
%% en-dashes unless \hyphenchar is set to the character position
%% of the en-dash (normally "7B) for each font used within the
%% uppercased text.

%% Footnotes are not handled by \uppercasetext@---a footnote within a
%% \title would have to be done by using \footnotemark within the title and
%% \footnotetext after In most cases footnotes within a title are something
%% for which the author should use \thanks or \affil or \address instead.

%% One other little problem: uppercasing of a few special characters
%% like the German "ss" and the undotted i and j (\i and \j), used
%% sometimes with accents.  We define a macro \upperspecialchars
%% to handle these.  We don't worry about restoring the
%% lowercase special characters within math---it's conceivable that
%% someone might want to use them there, but too unlikely to
%% need providing for.  (Undotted i and j in math would be typed
%% as \imath and \jmath, not as \i and \j.)

%% This is what plain.tex has for the special characters:

%% \chardef\ss="19 \chardef\ae="1A \chardef\oe="1B \chardef\o="1C
%% \chardef\AE="1D \chardef\OE="1E \chardef\O="1F
%% \chardef\i="10 \chardef\j="11 % dotless letters
%% \def\aa{\accent23a}
%% \def\AA{\leavevmode\setbox0\hbox{h}\dimen@\ht0\advance\dimen@-1ex%
%%   \rlap{\raise.67\dimen@\hbox{\char'27}}A}
%% \def\l{\char32l}
%% \def\L{\leavevmode\setbox0\hbox{L}\hbox to\wd0{\hss\char32L}}

\def\upperspecialchars{\def\ss{SS}\let\i=I\let\j=J\let\ae\AE\let\oe\OE
  \let\o\O\let\aa\AA\let\l\L}

\def\uppercasetext@#1{%
%% Note the extra level of braces to localize changes:
  {\spaceskip1.2\fontdimen2\the\font plus1.2\fontdimen3\the\font
   \upperspecialchars\uctext@#1$\m@th\aftergroup\eat@$}}
\def\uctext@#1$#2${\endash@#1-\endash@$#2$\uctext@}

%% \endash@ uppercases text and converts hyphens to en-dashes at the same
%% time.  If the argument text contains an en-dash or an em-dash (-- or
%% ---) they will have to be enclosed in braces to keep them from being
%% hashed into separate en-dashes for each hyphen. Conversely hyphens that
%% occur inside braces will not be converted to en-dashes.  The first call
%% to \endash@, in \uctext@, ends with -\endash@ in case the argument
%% contains no hyphens.  But note that the next call of \endash@
%% doesn't add any more hyphens because doing so would cause an infinite
%% loop.

\def\endash@#1-#2\endash@{\uppercase{#1}\if\notempty{#2}--\endash@#2\endash@\fi}

%% macro to check for missing \endsomething

\def\runaway@#1{\DN@{#1}\ifx\envir@\next@
  \Err@{You seem to have a missing or misspelled \string\end#1 ...}%
  \let\envir@\empty\fi}

%% Test to see whether a given argument is empty or not.
%% Maybe put \iftemp@ in amstex.tex, as suggested by Frank Mittelbach,
%% instead of several \if's that are only used within a limited
%% scope that doesn't intersect with any other if's.  Only call it
%% \ifglobaltemp@, probably.

\newif\iftemp@
\def\notempty#1{TT\fi\def\test@{#1}\ifx\test@\empty\temp@false
  \else\temp@true\fi \iftemp@}

%%\f


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% -4- FONTS                                                                %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% Load some fonts that are not loaded in plain.tex, or only preloaded
%% (which means that the font information is in TeX's memory but a
%% control sequence name for the font still needs to be assigned).
%% plain.tex only loads cmex10, because originally that was the only
%% size available.  So we load cmex7 and later cmex8, but we don't
%% load any smaller sizes, in order to conserve font memory; a need
%% for the extension font in sizes smaller than 7-point is most
%% unusual.  For subscript sums or other extension symbols in
%% eightpoint text we will use cmex7 rather than cmex6, to allow
%% us to get away without loading cmex6.
%%
%% We use \font@, not simply \font, so that these fonts will be
%% handled properly by AMS-TeX's syntax check.

\font@\tensmc=cmcsc10
\font@\sevenex=cmex7

%% We need cmti7 in case \italic is used in a subscript or superscript.
%% Once again we will conserve font space by not loading cmti6 or
%% cmti5, and declare the \scriptfont in \eightpoint to be cmti7
%% rather than cmti6.  At least until we know that users actually
%% are using \italic in sub-subscript size.

\font@\sevenit=cmti7

%% We have to load a lot of other fonts for eight-point text (footnotes,
%% abstracts, bibliography).  Note that cmti and cmsl in sizes 5, 6 don't
%% get loaded, since they may not exist (cmti7 is one of the standard 75
%% Computer Modern fonts, but cmti5 and cmti6 aren't, nor are any of cmsl5,
%% cmsl6, cmsl7).  AMSPPT provides for ten-point and eight-point font sets;

\font@\eightrm=cmr8 % preloaded in plain.tex
\font@\sixrm=cmr6 % preloaded in plain.tex
\font@\eighti=cmmi8     \skewchar\eighti='177 % preloaded
\font@\sixi=cmmi6       \skewchar\sixi='177   % preloaded
\font@\eightsy=cmsy8    \skewchar\eightsy='60 % preloaded
\font@\sixsy=cmsy6      \skewchar\sixsy='60   % preloaded
\font@\eightex=cmex8
\font@\eightbf=cmbx8 % preloaded in plain.tex
\font@\sixbf=cmbx6   % preloaded in plain.tex
\font@\eightit=cmti8 % preloaded in plain.tex
\font@\eightsl=cmsl8 % preloaded in plain.tex
\font@\eightsmc=cmcsc8
\font@\eighttt=cmtt8 % preloaded in plain.tex

%% Nine-point fonts are not needed but are included here, commented out,
%% to make it easier for a user to add them if they are needed.

%\font@\ninerm=cmr9
%\font@\ninei=cmmi9    \skewchar\ninei='177
%\font@\ninesy=cmsy9   \skewchar\ninesy='60
%\font@\nineex=cmex9
%\font@\ninebf=cmbx9
%\font@\nineit=cmti9
%\font@\ninesl=cmsl9
%\font@\ninesmc=cmcsc9

%\font@\ninemsa=msam9
%\font@\ninemsb=msbm9
%\font@\nineeufm=eufm9

%% We will load the basic sizes of the msam, msbm and eufm fonts as
%% well as the names of all the symbols (from AMSSYM.TEX).  If these
%% are really not needed, or if space is a problem, a user can comment
%% out these four lines without making any other changes.
%% \UseAMSsymbols inputs the file amssym.tex, which defines all the
%% symbol names of the extra math symbols in msam and msbm, as well as
%% defining \frak and \goth for eufm.  If memory space is tight for
%% control sequence names, the first thing to do is comment out the
%% line "\UseAMSsymbols", and load special symbols only as needed,
%% with \newsymbol.

\loadmsam
\loadmsbm
\loadeufm
\UseAMSsymbols

%% Now we define \tenpoint and \eightpoint for regular text and footnotes,
%% similarly to TB, p. 414.  We not only change the \baselineskip, but also
%% change the glue above and below displayed formulas, in case an abstract or
%% footnote happens to have them.  We also need to set not only \strutbox, but
%% also \strutbox@. The height of \strutbox@ is the height of \strutbox, minus
%% the value of \normallineskiplimit.  And we will set \ex@ in each case (for
%% \tenpoint it is supposed to be equivalent to 1pt, while for \eightpoint it
%% will then presumably be equivalent to .8pt).

%% When \ifsyntax@ is true, so that we are checking syntax, then we won't
%% bother specifying fonts (since we would only change them all to \dummyft@
%% anyway), and we simply let \big and its variants gobble up things with the
%% proper syntax, instead of worrying about getting the right sizes.

%% \tenpoint@ is a hook where new material can be added.  \topmatter makes
%% use of this.  Note that to change the baselineskip to say 14pt, one
%% should say
%%
%% \addto\tenpoint{\normalbaselineskip14pt\normalbaselines}
%%
%% rather than just \addto\tenpoint{\baselineskip14pt}

\newtoks\tenpoint@

\def\tenpoint{\normalbaselineskip12\p@
 \abovedisplayskip12\p@ plus3\p@ minus9\p@
 \belowdisplayskip\abovedisplayskip
 \abovedisplayshortskip\z@ plus3\p@
 \belowdisplayshortskip7\p@ plus3\p@ minus4\p@
 \textonlyfont@\rm\tenrm \textonlyfont@\it\tenit
 \textonlyfont@\sl\tensl \textonlyfont@\bf\tenbf
 \textonlyfont@\smc\tensmc \textonlyfont@\tt\tentt
 \ifsyntax@ \def\big##1{{\hbox{$\left##1\right.$}}}%
  \let\Big\big \let\bigg\big \let\Bigg\big
 \else
  \textfont\z@=\tenrm  \scriptfont\z@=\sevenrm  \scriptscriptfont\z@=\fiverm
  \textfont\@ne=\teni  \scriptfont\@ne=\seveni  \scriptscriptfont\@ne=\fivei
  \textfont\tw@=\tensy \scriptfont\tw@=\sevensy \scriptscriptfont\tw@=\fivesy
  \textfont\thr@@=\tenex \scriptfont\thr@@=\sevenex
        \scriptscriptfont\thr@@=\sevenex
  \textfont\itfam=\tenit \scriptfont\itfam=\sevenit
        \scriptscriptfont\itfam=\sevenit
  \textfont\bffam=\tenbf \scriptfont\bffam=\sevenbf
        \scriptscriptfont\bffam=\fivebf
  \setbox\strutbox\hbox{\vrule height8.5\p@ depth3.5\p@ width\z@}%
%% The height of \strutbox@ is supposed to be the height of \strutbox
%% minus \normallineskip.  We take half from the top and half from the
%% bottom.
  \setbox\strutbox@\hbox{\lower.5\normallineskiplimit\vbox{%
        \kern-\normallineskiplimit\copy\strutbox}}%
%% We set \bigsize@ to the height of a parenthesis, times 1.2.  \bigsize@
%% controls the height of \big, \Big, \bigg and \Bigg delimiters.
 \setbox\z@\vbox{\hbox{$($}\kern\z@}\bigsize@=1.2\ht\z@
 \fi
%% \ex@ is supposed to come out to 1pt; multiplication factor
%% may need to be changed if Computer Modern is not being used.
%% \jot, a dimen register usually used for extra spacing between lines
%% of a multi-line displayed equation or similar structure,
%% is reset to 3\ex@ (in plain.tex it is always 3pt, but in AMSPPT it
%% may be reduced by \eightpoint).
 \normalbaselines\rm\ex@.2326ex\jot3\ex@\the\tenpoint@}

%% Like \tenpoint@, \eightpoint@ is a hook where extra material
%% can be added to the definition of \eightpoint.

\newtoks\eightpoint@

\def\eightpoint{\normalbaselineskip10\p@
 \abovedisplayskip10\p@ plus2.4\p@ minus7.2\p@
 \belowdisplayskip\abovedisplayskip
 \abovedisplayshortskip\z@ plus2.4\p@
 \belowdisplayshortskip5.6\p@ plus2.4\p@ minus3.2\p@
 \textonlyfont@\rm\eightrm \textonlyfont@\it\eightit
 \textonlyfont@\sl\eightsl \textonlyfont@\bf\eightbf
 \textonlyfont@\smc\eightsmc \textonlyfont@\tt\eighttt
 \ifsyntax@\def\big##1{{\hbox{$\left##1\right.$}}}%
  \let\Big\big \let\bigg\big \let\Bigg\big
 \else
  \textfont\z@=\eightrm \scriptfont\z@=\sixrm \scriptscriptfont\z@=\fiverm
  \textfont\@ne=\eighti \scriptfont\@ne=\sixi \scriptscriptfont\@ne=\fivei
  \textfont\tw@=\eightsy \scriptfont\tw@=\sixsy \scriptscriptfont\tw@=\fivesy
%% The smallest size of the extension font currently available
%% is 7-point.
  \textfont\thr@@=\eightex \scriptfont\thr@@=\sevenex
   \scriptscriptfont\thr@@=\sevenex
  \textfont\itfam=\eightit \scriptfont\itfam=\sevenit
   \scriptscriptfont\itfam=\sevenit
  \textfont\bffam=\eightbf \scriptfont\bffam=\sixbf
   \scriptscriptfont\bffam=\fivebf
 \setbox\strutbox\hbox{\vrule height7\p@ depth3\p@ width\z@}%
%% The height of \strutbox@ is supposed to be the height of \strutbox
%% minus \normallineskip.  We take half from the top and half from the
%% bottom.
 \setbox\strutbox@\hbox{\raise.5\normallineskiplimit\vbox{%
   \kern-\normallineskiplimit\copy\strutbox}}%
%% We set \bigsize@ to the height of a parenthesis, times 1.2.  \bigsize@
%% controls the height of \big, \Big, \bigg and \Bigg delimiters.
 \setbox\z@\vbox{\hbox{$($}\kern\z@}\bigsize@=1.2\ht\z@
 \fi
%% \ex@ is supposed to come out to .8pt; multiplication factor
%% may need to be changed if Computer Modern is not being used.
%% \jot, a dimen register usually used for extra spacing between lines
%% of a multi-line displayed equation or similar structure,
%% is reset to 3\ex@ (in plain.tex it is 3pt).
 \normalbaselines\eightrm\ex@.2326ex\jot3\ex@\the\eightpoint@}

%%\f


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% -5- PAGE DIMENSIONS AND OTHER GLOBAL SETTINGS                            %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% First we set up some basic parameters, which are different than in
%% plain.  These values are the ones currently in use (November 1989)
%% in the Journal of the AMS.

\parindent1pc
\normallineskiplimit\p@

%% We use a common indent value for setting leftskip and rightskip
%% for abstract, table of contents, figure captions, and block environments.
%% The name is chosen as if we are going to have several levels
%% of indent, called \indenti, \indentii, ...; such names can
%% be constructed using \csname and \romannumeral with a count
%% register, which might be useful some time.

\newdimen\indenti \indenti=2pc

%% Provide a way to change the page height and width; changing the page
%% width automatically adjusts the caption width as well.  \pagewidth
%% is in AMSTEX.TEX but it sets the caption width to a different value
%% than the one we want.  The height we use here is the height of the
%% ``text block'', not including the running heads, rather than the
%% the height of the ``type block'', the total type area on the page.
%% Thus from the Journal of the AMS type block measurement of 49pc  we
%% subtract 22.5pt for the running head  (see the plain.tex definition
%% of \makeheadline)  and round to the nearest pica.

\def\pageheight#1{\vsize#1}
\def\pagewidth#1{\hsize#1%
   \captionwidth@\hsize \advance\captionwidth@-2\indenti}

\pagewidth{30pc} \pageheight{47pc}

%%\f


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% -6- TOP MATTER DEFINITIONS                                               %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% If the user has specified \loadeufb, \loadbold, \loadeusm, \loadeusm,
%% \loadeurm, \loadeurb, we need to add eightpoint fonts.  We do this in
%% \topmatter, and the user documentation instructs the user to include any
%% \load... command between \documentstyle and \topmatter.  After it's first
%% called, since we do not need \topmatter any longer, we define it to be
%% empty, to release the memory that the definition takes up.

\def\topmatter{%
 \ifx\undefined\msafam
 \else\font@\eightmsa=msam8 \font@\sixmsa=msam6
   \ifsyntax@\else \addto\tenpoint{\textfont\msafam=\tenmsa
              \scriptfont\msafam=\sevenmsa \scriptscriptfont\msafam=\fivemsa}%
     \addto\eightpoint{\textfont\msafam=\eightmsa \scriptfont\msafam=\sixmsa
              \scriptscriptfont\msafam=\fivemsa}%
   \fi
 \fi
 \ifx\undefined\msbfam
 \else\font@\eightmsb=msbm8 \font@\sixmsb=msbm6
   \ifsyntax@\else \addto\tenpoint{\textfont\msbfam=\tenmsb
         \scriptfont\msbfam=\sevenmsb \scriptscriptfont\msbfam=\fivemsb}%
     \addto\eightpoint{\textfont\msbfam=\eightmsb \scriptfont\msbfam=\sixmsb
         \scriptscriptfont\msbfam=\fivemsb}%
   \fi
 \fi
 \ifx\undefined\eufmfam
 \else \font@\eighteufm=eufm8 \font@\sixeufm=eufm6
   \ifsyntax@\else \addto\tenpoint{\textfont\eufmfam=\teneufm
       \scriptfont\eufmfam=\seveneufm \scriptscriptfont\eufmfam=\fiveeufm}%
     \addto\eightpoint{\textfont\eufmfam=\eighteufm
       \scriptfont\eufmfam=\sixeufm \scriptscriptfont\eufmfam=\fiveeufm}%
   \fi
 \fi
 \ifx\undefined\eufbfam
 \else \font@\eighteufb=eufb8 \font@\sixeufb=eufb6
   \ifsyntax@\else \addto\tenpoint{\textfont\eufbfam=\teneufb
      \scriptfont\eufbfam=\seveneufb \scriptscriptfont\eufbfam=\fiveeufb}%
    \addto\eightpoint{\textfont\eufbfam=\eighteufb
      \scriptfont\eufbfam=\sixeufb \scriptscriptfont\eufbfam=\fiveeufb}%
   \fi
 \fi
 \ifx\undefined\eusmfam
 \else \font@\eighteusm=eusm8 \font@\sixeusm=eusm6
   \ifsyntax@\else \addto\tenpoint{\textfont\eusmfam=\teneusm
       \scriptfont\eusmfam=\seveneusm \scriptscriptfont\eusmfam=\fiveeusm}%
     \addto\eightpoint{\textfont\eusmfam=\eighteusm
       \scriptfont\eusmfam=\sixeusm \scriptscriptfont\eusmfam=\fiveeusm}%
   \fi
 \fi
 \ifx\undefined\eusbfam
 \else \font@\eighteusb=eusb8 \font@\sixeusb=eusb6
   \ifsyntax@\else \addto\tenpoint{\textfont\eusbfam=\teneusb
       \scriptfont\eusbfam=\seveneusb \scriptscriptfont\eusbfam=\fiveeusb}%
     \addto\eightpoint{\textfont\eusbfam=\eighteusb
       \scriptfont\eusbfam=\sixeusb \scriptscriptfont\eusbfam=\fiveeusb}%
   \fi
 \fi
 \ifx\undefined\eurmfam
 \else \font@\eighteurm=eurm8 \font@\sixeurm=eurm6
   \ifsyntax@\else \addto\tenpoint{\textfont\eurmfam=\teneurm
       \scriptfont\eurmfam=\seveneurm \scriptscriptfont\eurmfam=\fiveeurm}%
     \addto\eightpoint{\textfont\eurmfam=\eighteurm
       \scriptfont\eurmfam=\sixeurm \scriptscriptfont\eurmfam=\fiveeurm}%
   \fi
 \fi
 \ifx\undefined\eurbfam
 \else \font@\eighteurb=eurb8 \font@\sixeurb=eurb6
   \ifsyntax@\else \addto\tenpoint{\textfont\eurbfam=\teneurb
       \scriptfont\eurbfam=\seveneurb \scriptscriptfont\eurbfam=\fiveeurb}%
    \addto\eightpoint{\textfont\eurbfam=\eighteurb
       \scriptfont\eurbfam=\sixeurb \scriptscriptfont\eurbfam=\fiveeurb}%
   \fi
 \fi
 \ifx\undefined\cmmibfam
 \else \font@\eightcmmib=cmmib8 \font@\sixcmmib=cmmib6
   \ifsyntax@\else \addto\tenpoint{\textfont\cmmibfam=\tencmmib
       \scriptfont\cmmibfam=\sevencmmib \scriptscriptfont\cmmibfam=\fivecmmib}%
    \addto\eightpoint{\textfont\cmmibfam=\eightcmmib
       \scriptfont\cmmibfam=\sixcmmib \scriptscriptfont\cmmibfam=\fivecmmib}%
   \fi
 \fi
 \ifx\undefined\cmbsyfam
 \else \font@\eightcmbsy=cmbsy8 \font@\sixcmbsy=cmbsy6
   \ifsyntax@\else \addto\tenpoint{\textfont\cmbsyfam=\tencmbsy
      \scriptfont\cmbsyfam=\sevencmbsy \scriptscriptfont\cmbsyfam=\fivecmbsy}%
    \addto\eightpoint{\textfont\cmbsyfam=\eightcmbsy
      \scriptfont\cmbsyfam=\sixcmbsy \scriptscriptfont\cmbsyfam=\fivecmbsy}%
   \fi
 \fi
 \let\topmatter\relax}

%% \overlong, in version 1 of amsppt, has been removed from \title,
%% \author, \affil, and \heading.

%% \chapter is used within \title...\endtitle to produce something
%% such as "CHAPTER II", centered above the main text of the chapter
%% title. We do a little trickery with \afterassignment so that the
%% user can remove not only the word "CHAPTER" but also the
%% uppercasing and romannumeralizing by \nofrills.   Note that we
%% can't use \ignorespaces after \chapter@ in the usual way because it
%% would get in the way of the \count@ assignment.  In fact spaces
%% will be ignored by the assignment operation, the only
%% problem would be when \nofrills is used.

\def\chapterno@{\uppercase\expandafter{\romannumeral\chaptercount@}}

\newcount\chaptercount@

%% In order to avoid interfering with \topskip, we put the \chapter
%% material in the first line of the title, and do some box and glue
%% tricks to get it in position.

%% Perhaps need a test to make sure #1 is a number---if the user
%% does \chapter{IV} instead of \chapter{4} they may not understand
%% the error message they get.

%% \chaptercount@ assignment needs to be global because we are working
%% from inside the first line of \title.

\def\chapter{\nofrills@{\afterassignment\chapterno@
                        CHAPTER \global\chaptercount@=}\chapter@
 \DNii@##1{\leavevmode\hskip-\leftskip
%% Put the \chapter stuff in an \rlap so it doesn't affect centering
%% of the title, and in an "uplap" so it is placed above where we want it.
   \rlap{\vbox to\z@{\vss\centerline{\eightpoint
%% We do a baselineskip of 2pc from the base of the "CHAPTER"
%% banner to the base of the first title line.  (The baseline of the
%% \null will coincide with the baseline of the first title line.)
   \chapter@##1\unskip}\baselineskip2pc\null}}\hskip\leftskip
   \nofrills@false}%
 \FN@\next@}

%% We store the title in a box using a \setbox.  It could also be done
%% by defining \thetitle@.  One advantage of \setbox is that syntax
%% errors within the title (say for math) are reported immediately
%% instead of during the processing of \endtopmatter.  The title box
%% is always put on the page by \endtopmatter, even if it's empty.
%% (With other pieces of the topmatter we check first to see whether
%% there's any text to typeset and skip to the next item if not.) The
%% text of the title is stored up for the running heads, unless
%% \rightheadtoks is nonempty---then presumably the user has already
%% used \rightheadtext to set the right-hand running head, in which
%% case we leave it unchanged.

%% The default for titles is uppercasing.  From a design standpoint it
%% might be preferable to do titles in 14-point text with initial caps, but
%% since titles may potentially contain any kind of math, doing this would
%% require a full-fledged \fourteenpoint analogous to \tenpoint.  So to
%% give the title extra prominence we use uppercasing instead.  The
%% uppercasing can be removed by \nofrills.

\newbox\titlebox@

\def\title{\nofrills@{\uppercasetext@}\title@%
%% We use a \vtop here because we want to know the height of the first
%% line of the title when we start typesetting the topmatter.  In order
%% to get the correct sinkage from the top of the page.
 \DNii@##1\endtitle{\global\setbox\titlebox@\vtop{\tenpoint\bf
 \raggedcenter@\ignorespaces
%% Increased \baselineskip is because of the uppercasing.  We do it like
%% this instead of putting it inside the \uppercasetext@ macro partly because
%% of technical complications (a blank line after the \endgraf, containing
%% only the empty math formula at the end of \uctext@).
 \baselineskip1.3\baselineskip\title@{##1}\endgraf}%
%% Check to see if right and left hand running heads have been already
%% assigned by the user---if so, don't override.
 \ifmonograph@ \edef\next{\the\leftheadtoks}\ifx\next\empty
    \leftheadtext{##1}\fi
 \fi
 \edef\next{\the\rightheadtoks}\ifx\next\empty \rightheadtext{##1}\fi
 }\FN@\next@}

%% Currently \author has no need for a \nofrills option, unlike \title,
%% since uppercasing is not done.

\newbox\authorbox@
\def\author#1\endauthor{\global\setbox\authorbox@
 \vbox{\tenpoint\smc\raggedcenter@\ignorespaces
 #1\endgraf}\relaxnext@ \edef\next{\the\leftheadtoks}%
 \ifx\next\empty\leftheadtext{#1}\fi}

\newbox\affilbox@
\def\affil#1\endaffil{\global\setbox\affilbox@
 \vbox{\tenpoint\raggedcenter@\ignorespaces#1\endgraf}}

%% Since \address can be used any number of times, we have to store the
%% different addresses in control sequences that we manufacture as needed.
%% We use \addresscount@ to store the number of times \address is used.

\newcount\addresscount@
\addresscount@\z@
\def\address#1\endaddress{\global\advance\addresscount@\@ne
%% The first address is `\address1', the next is `\address2', etc.
  \expandafter\gdef\csname address\number\addresscount@\endcsname
%% The unusually large shrinkability in the vskip before the
%% address is there because we don't want the addresses to fall
%% on a separate page at the end of a paper, and extra
%% shrinkability may help them to fit on the previous page
%% in borderline cases.
  {\vskip12\p@ minus6\p@\noindent\eightpoint\smc\ignorespaces#1\par}}

%% \email uses the same counter as \address, since they should pair
%% up.

\def\email{\nofrills@{\eightpoint{\it E-mail\/}:\enspace}\email@
  \DNii@##1\endemail{%
  \expandafter\gdef\csname email\number\addresscount@\endcsname
  {\def\usualspace{{\it\enspace}}\smallskip\noindent\eightpoint\email@
  \ignorespaces##1\par}}%
 \FN@\next@}

\def\thedate@{}
\def\date#1\enddate{\gdef\thedate@{\tenpoint\ignorespaces#1\unskip}}

\def\thethanks@{}
\def\thanks#1\endthanks{\gdef\thethanks@{\eightpoint\ignorespaces#1.\unskip}}

\def\thekeywords@{}
\def\keywords{\nofrills@{{\it Key words and phrases.\enspace}}\keywords@
 \DNii@##1\endkeywords{\def\thekeywords@{\def\usualspace{{\it\enspace}}%
 \eightpoint\keywords@\ignorespaces##1\unskip.}}%
 \FN@\next@}

%% \subjclass is exactly analogous.

\def\thesubjclass@{}
\def\subjclass{\nofrills@{{\rm1980 {\it Mathematics Subject
   Classification\/} (1985 {\it Revision\/}).\enspace}}\subjclass@
 \DNii@##1\endsubjclass{\def\thesubjclass@{\def\usualspace
  {{\rm\enspace}}\eightpoint\subjclass@\ignorespaces##1\unskip.}}%
 \FN@\next@}

%% Put the abstract in a box with margins at each side equal to
%% \indenti, obtained by reducing \hsize within a vbox centered by
%% $$...$$.  Notice that the \noindent is not erased by \nofrills and
%% that's what we want.

\newbox\abstractbox@
\def\abstract{\nofrills@{{\smc Abstract.\enspace}}\abstract@
 \DNii@{\setbox\abstractbox@\vbox\bgroup\noindent$$\vbox\bgroup
  \def\envir@{abstract}\advance\hsize-2\indenti
  \usualspace@{{\enspace}}\eightpoint \noindent\abstract@\ignorespaces}%
 \FN@\next@}

%% Finish the box.  The \unskip is here in case the abstract ends with
%% something that adds vertical space, such as a \proclaim.

\def\endabstract{\par\unskip\egroup$$\egroup}

%% \widestnumber used to reset hanging indention in a table of
%% contents or bibliography.  Other applications may also be added
%% later.

%% The outerness of \head and \subhead cause problems.  Setting the
%% widths globally from within a group where \head and \subhead
%% are let to non-outer macros is one solution but \global assignments are
%% always a little dangerous so we may want to change this when
%% we have a chance.  Note that letting both \head and \subhead to
%% \relax is a mistake, as we found out by experience---it crosses
%% up the \ifx tests.

\def\widestnumber#1#2{\begingroup\let\head\null\let\subhead\empty
%% \widestnumber\subsubhead should do the same thing as
%% \widestnumber\subhead, according to current JAMS style so we just
%% let them equal at this point (since we're inside a group).
   \let\subsubhead\subhead
   \ifx#1\head\global\setbox\tocheadbox@\hbox{#2.\enspace}%
   \else\ifx#1\subhead\global\setbox\tocsubheadbox@\hbox{#2.\enspace}%
   \else\ifx#1\key\bgroup\let\endrefitem@\egroup
        \key#2\endrefitem@\global\refindentwd\wd\keybox@
   \else\ifx#1\no\bgroup\let\endrefitem@\egroup
        \no#2\endrefitem@\global\refindentwd\wd\nobox@
   \else\ifx#1\page\global\setbox\pagesbox@\hbox{\quad\bf#2}%
   \else\ifx#1\item\setboxz@h{#2}\global\rosteritemwd\wdz@
        \global\advance\rosteritemwd by.5\parindent
   \else\message{\string\widestnumber is not defined for this option
   (\string#1)}%
\fi\fi\fi\fi\fi\fi\endgroup}

%% \Monograph is capitalized by analogy with \NoRunningHeads and
%% \UseAMSsymbols because of its global scope.  We don't use  \global's
%% because if the user puts \Monograph in the preamble area as instructed
%% it will automatically have global effect, and in some special
%% applications (e.g. documentation) it may be nice to be able to localize
%% the effect. \Monograph changes paragraph indention from none to normal
%% for certain structures (subhead, proclaim, definition, ...) via
%% \varindent@; it also changes fonts for \head, \proclaim, \definition,
%% \example, \demo, and \remark.

%% The \ifmonograph@ test is used to decide whether to save a \toc in a box
%% or typeset it immediately, as well as whether to typeset \thanks,
%% \subjclass, and \keywords footnotes .

\newif\ifmonograph@

\def\Monograph{\monograph@true \let\headmark\rightheadtext
  \let\varindent@\indent \def\headfont@{\bf}\def\proclaimfont@{\smc}%
  \def\demofont@{\smc}}

\let\varindent@\noindent

\newbox\tocheadbox@    \newbox\tocsubheadbox@
\newbox\tocbox@
\def\toc{\toc@{Contents}}

%% We make a separate macro that just redefines \title, \chapter,
%% \specialhead, \head, \subhead, \subsubhead, to simplify the
%% code of \toc.  This also makes it a little easier to work
%% around the outerness that most of them have.

\def\newtocdefs{%
%% The space after "\def" in these redefinitions is a convenience for
%% someone who wants to look for the main definitions---if they search
%% for "\def\title" the search will pass over "\def \title" and find
%% the main definition further down.
   \def \title##1\endtitle
       {\penaltyandskip@\z@\smallskipamount
        \hangindent\wd\tocheadbox@\noindent{\bf##1}}%
   \def \chapter##1{%
        Chapter \uppercase\expandafter{\romannumeral##1.\unskip}\enspace}%
   \def \specialhead##1\endspecialhead
       {\par\hangindent\wd\tocheadbox@ \noindent##1\par}%
   \def \head##1 ##2\endhead
       {\par\hangindent\wd\tocheadbox@ \noindent
        \if\notempty{##1}\hbox to\wd\tocheadbox@{\hfil##1\enspace}\fi
        ##2\par}%
%% Since \subhead and \subsubhead change the \leftskip, we need to do
%% a \par before closing the group that localizes the change. Unlike
%% \head, we do not try to right-align the numbers.  This is merely
%% because we asked the Editorial dept. and that's what they said
%% to do.
   \def \subhead##1 ##2\endsubhead
       {\par\vskip-\parskip {\normalbaselines
        \advance\leftskip\wd\tocheadbox@
        \hangindent\wd\tocsubheadbox@ \noindent
        \if\notempty{##1}\hbox to\wd\tocsubheadbox@{##1\unskip\hfil}\fi
         ##2\par}}%
   \def \subsubhead##1 ##2\endsubsubhead
       {\par\vskip-\parskip {\normalbaselines
        \advance\leftskip\wd\tocheadbox@
        \hangindent\wd\tocsubheadbox@ \noindent
        \if\notempty{##1}\hbox to\wd\tocsubheadbox@{##1\unskip\hfil}\fi
        ##2\par}}}

\def\toc@#1{\relaxnext@
%% The \hfilneg at the end is to cancel the \parfillskip; the \penalty
%% is to keep the \hfilneg from being removed (normal processing at the
%% end of a paragraph removes the last skip).
   \def\page##1%
       {\unskip\penalty0\null\hfil
        \rlap{\hbox to\wd\pagesbox@{\quad\hfil##1}}\hfilneg\penalty\@M}%
 \DN@{\ifx\next\nofrills\DN@\nofrills{\nextii@}%
      \else\DN@{\nextii@{{#1}}}\fi
      \next@}%
 \DNii@##1{%
%% If we're doing a book table of contents, we avoid setting the whole thing
%% in a box because if it's several pages long we might run out of memory.
\ifmonograph@\bgroup\else\setbox\tocbox@\vbox\bgroup
   \centerline{\headfont@\ignorespaces##1\unskip}\nobreak
   \vskip\belowheadskip \fi
   \setbox\tocheadbox@\hbox{0.\enspace}%
   \setbox\tocsubheadbox@\hbox{0.0.\enspace}%
   \leftskip\indenti \rightskip\leftskip
%% Increase \rightskip to move in the right margin to leave room for
%% page numbers (which will hang over into the right margin).
%% We use the \pagesbox@ which is conveniently provided by the reference
%% macros to store the width of the page numbers.  The \bf is for
%% taking into account page numbers for chapter titles, which are
%% bold.  A little extra width shouldn't hurt for toc's without chapter
%% titles.
   \setbox\pagesbox@\hbox{\bf\quad000}\advance\rightskip\wd\pagesbox@
%% Redefine all the heading macros to be their table-of-contents
%% versions.
   \newtocdefs
 }%
 \FN@\next@}

%% The \egroup closes the \vbox; or if we're in a monograph, just
%% matches the beginning \bgroup.

\def\endtoc{\par\egroup}

%% \pretitle, ..., \prepaper are entry points between the other parts of
%% the \topmatter so that users can insert things if necessary.  If
%% \pretitle is used to put any kind of box on the page, it will throw off
%% the sinkage of the title and everything will have to be recalculated.

\let\pretitle\relax
\let\preauthor\relax
\let\preaffil\relax
\let\predate\relax
\let\preabstract\relax
\let\prepaper\relax

%% Now \dedicatory shows how to make use of the \pre... entry points
%% defined above.

\def\dedicatory #1\enddedicatory{\def\preabstract{{\medskip
  \eightpoint\it \raggedcenter@#1\endgraf}}}

%% A hook is provided for a translator name, for translations. \eightpoint
%% is used instead of just \eightrm, to be on the safe side.  For instance,
%% in transliteration some Russian names have a ``prime'' symbol to
%% represent the Russian ``soft sign''.  If we didn't use \eightpoint we'd
%% get a 10-point prime symbol.

\def\thetranslator@{}
\def\translator#1\endtranslator{\def\thetranslator@{\nobreak\medskip
 \line{\eightpoint\hfil Translated by \uppercase{#1}\qquad\qquad}\nobreak}}

%% \endtopmatter now puts all of these things together on the page. We
%% start by checking to see if the left-hand running head has been defined;
%% if not, presumably it's because \author has not been used, and
%% presumably that means we are in a book chapter rather than in an
%% article. So we define it to be the same as the right-hand running head,
%% which will usually be the text of the title.
%%
%% When doing chapters in a book, \subjclass, \keywords and \thanks
%% should not print at the bottom of the page.
%%
%% The baseline of the title should always fall at a fixed distance from
%% the top of the page, so we do the spacing with \topskip instead of
%% \vskip.

%% The spacing between elements of the topmatter in AMSPPT is intended to
%% be the same as in the Journal of the AMS; however the actual spacing
%% currently used in the latter is the rather idiosyncratic result of
%% a couple of years of piecemeal changes, so that rather than follow it
%% blindly we have opted to come as close as possible by choosing whole
%% or half-pica amounts.  The situation is further complicated by the
%% fact that the documentstyle for the Journal of the AMS uses a different
%% method for putting running heads on the page, so that we cannot
%% measure distance from the top of the page in the same way; and
%% the date, affiliation, and abstract are handled differently as well.
%%
%% In this diagram the first measurement is from the top of the type
%% block to the baseline of the first line of the title.  In the Journal
%% of the AMS the value is 5.5pc rather than 4pc, because it's measured
%% to the top of the running head (which extends above the type block).
%% The rest of the measurements are approximate visual space, done in
%% \endtopmatter by \vskip's; the effective base-to-base distance is
%% approximately half a pica more than the amount of the \vskip.
%%
%% ______________________________ top of type area (according to \pageheight)
%%   |
%%   | 4pc baselineskip
%%   |   |----------------------|
%% __|___|_______ TITLE ________|__
%%       | WHICH MAY BE SEVERAL |
%%       |      LINES LONG      |
%%       |----------------------|
%%                 2.5pc
%%              |--------|
%%              | AUTHOR |
%%              |--------|
%%                  1pc
%%              |--------|
%%              | AFFIL  |
%%              |--------|
%%                  1pc
%%               |------|
%%               | DATE |
%%               |------|
%%                  1pc
%%            |------------|
%%            | DEDICATORY |
%%            |------------|
%%                 1.5pc
%%   |------------------------------|
%%   |           ABSTRACT           |
%%   |------------------------------|
%%                 1.5pc
%%   |------------------------------|
%%   |       TABLE OF CONTENTS      |
%%   |------------------------------|
%%                  2pc
%% |-----------------------------------|
%% |           START OF TEXT           |
%% |                                   |
%%

%% Make this \outer to catch missing or misspelled \end... in the
%% topmatter.  It doesn't work with \abstract though because that uses
%% the \setbox\vbox\bgroup ... \egroup mechanism, so we use \runaway@
%% to catch missing \endabstract's.

\outer\def\endtopmatter{\runaway@{abstract}%
 \edef\next{\the\leftheadtoks}\ifx\next\empty
  \expandafter\leftheadtext\expandafter{\the\rightheadtoks}\fi
 \ifmonograph@\else
   \ifx\thesubjclass@\empty\else \makefootnote@{}{\thesubjclass@}\fi
   \ifx\thekeywords@\empty\else \makefootnote@{}{\thekeywords@}\fi
   %% If \thanks given, treat it as a footnote text (with no footnote mark).
   \ifx\thethanks@\empty\else \makefootnote@{}{\thethanks@}\fi
 \fi
%% We want a sinkage of 4pc from the top of the page (= the top of  the
%% text area, not including the running heads) for articles, and 7pc for
%% monograph chapters.
  \pretitle
  \ifmonograph@ \topskip7pc \else \topskip4pc \fi
%% We don't unvbox the titlebox because we don't expect footnotes to ever
%% appear in the title, so we don't need to worry about
%% allowing them to migrate to the outer level.  (Some journals use
%% footnotes in titles to give acknowledgments of research support;
%% in AMSPPT this is an unnumbered footnote, done with \thanks, outside
%% of the title.)
  \box\titlebox@
  \topskip10pt% reset to normal value
  \preauthor
  \ifvoid\authorbox@\else \vskip2.5pc plus1pc \unvbox\authorbox@\fi
  \preaffil
  \ifvoid\affilbox@\else \vskip1pc plus.5pc \unvbox\affilbox@\fi
  \predate
  \ifx\thedate@\empty\else \vskip1pc plus.5pc \line{\hfil\thedate@\hfil}\fi
  \preabstract
  \ifvoid\abstractbox@\else \vskip1.5pc plus.5pc \unvbox\abstractbox@ \fi
  \ifvoid\tocbox@\else\vskip1.5pc plus.5pc \unvbox\tocbox@\fi
  \prepaper
  \vskip2pc plus1pc
}

\def\document{\let\fontlist@\relax\let\alloclist@\relax
%% Start out in \tenpoint
  \tenpoint}

%%\f


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% -7- SECTION HEADINGS                                                     %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% In accordance with conventional design principles, the space below
%% headings is not given any stretchability or shrinkability.  (This
%% is a change from version 1.0 of AMSPPT.)

\newskip\aboveheadskip       \aboveheadskip\bigskipamount
\newdimen\belowheadskip      \belowheadskip6\p@
\def\headfont@{\smc}

%% Since we often want to do a penalty and vskip, and since there are extra
%% complications involved if there is a preceding vskip from something else, we
%% define a macro to do it.  Normally it is used while we're working on the
%% main vertical list, so we have to use \removelastskip (which does a negative
%% skip) rather than \unskip (which REALLY removes the last skip).  If the last
%% thing on the main vertical list is anything other than a vskip, say a
%% penalty from \pagebreak, the value returned by \lastskip will be 0, but the
%% potential complications are a whole other subject.  This macro handles the
%% straightforward cases.

%% In some cases we may not want to put a penalty at all---this is something
%% that needs further thought, to determine if it will ever make a difference
%% for our purposes to have \penalty0 rather than no penalty, in the main
%% vertical list; at present, we refrain from doing any penalty if the first
%% argument of \penaltyandskip@ is 0; the essential effect of an explicit
%% \penalty0 can be gotten by doing a penalty of 1 instead.

%% We use \penalty@ instead of \penalty, so that we can redefine
%% \penalty@ in \nobreak, to prevent page breaks between certain pairs
%% such as \head \subhead or \head \proclaim or \nopagebreak \proclaim
%% ---for example, in
%%
%% "... which leads to this theorem:
%% \proclaim{Theorem 8.2} ..."
%%
%% a page break after the colon would be bad, and a user might want
%% to be able to add a \nopagebreak.
%%
%% Note: \penalty@ is also used in the reference macros, but it's internal
%% within each \ref...\endref group so using the same name here should
%% cause no problems.
%%
%% The sequence
%%      \subhead Text...\endsubhead
%%      \subsubhead Text...\endsubsubhead
%% will still have the weakness of allowing a pagebreak between the two
%% headings, because \endsubhead doesn't do a \nobreak (since it's a
%% run-in heading.

\def\penaltyandskip@#1#2{\relax\ifdim\lastskip<#2\relax\removelastskip
      \ifnum#1=\z@\else\penalty@#1\relax\fi\vskip#2%
  \else\ifnum#1=\z@\else\penalty@#1\relax\fi\fi}

\def\nobreak{\penalty\@M
%% Change the definition of \penalty@ so that the following number
%% will be gobbled (by assigning it to the scratch register \count@@@).
  \ifvmode\def\penalty@{\let\penalty@\penalty\count@@@}%
%% If the next piece of the document after \nobreak is something like
%% \subhead or \proclaim that calls \penaltyandskip@, then \penalty@ will
%% reset itself in the way that we want.  But if not, then we still want to
%% reset \penalty@; so we use \everypar.  There are probably some unusual
%% cases that will still have problems, but at the moment this is the best
%% solution we have.
  \everypar{\let\penalty@\penalty\everypar{}}\fi}

\let\penalty@\penalty

%% We equate the old form of the headings to the new form, for
%% backward compatibility.  It's easier to do this now rather than
%% later because \head and \subhead are going to be outer.

\def\heading#1\endheading{\head#1\endhead}
\def\subheading#1{\subhead#1\endsubhead}

%% One more heading level, for occasional use.  This is the next level ABOVE
%% \head.  The default style is ragged right; otherwise it's the same
%% as \head.

\def\specialheadfont@{\bf}
\outer\def\specialhead{\par\penaltyandskip@{-200}\aboveheadskip
  \begingroup\interlinepenalty\@M\rightskip\z@ plus\hsize \let\\\linebreak
  \specialheadfont@\noindent\ignorespaces}
\def\endspecialhead{\par\endgroup\nobreak\vskip\belowheadskip}

%% penalty-200 is the penalty amount used by plain.tex's \bigbreak.

\outer\def\head#1\endhead{\par\penaltyandskip@{-200}\aboveheadskip
 {\headfont@\raggedcenter@\interlinepenalty\@M
 \ignorespaces#1\endgraf}\nobreak
 \vskip\belowheadskip
 \headmark{#1}}

%% \headmark will be redefined to be \rightheadtext by \Monograph.

\let\headmark\eat@

%% \subhead and \subsubhead are simpler, though they allow \nofrills.
%% (\head, being centered, does not have automatic punctuation put in at
%% the end and so \nofrills doesn't have anything to do.) The syntax of
%% \subhead is changed from \subheading{...} (version 1) to
%% \subhead...\endsubhead (version 2). This was done for the following
%% reasons: (1) to be consistent with \head...\endhead (we could have
%% changed \head instead of \subhead, but the \x...\endx syntax is the one
%% currently in  use in AMS production); (2) if someone (perhaps us) ever
%% wants to do something tricky with the headings, having the \end... may
%% help them avoid technical complications.

\newskip\subheadskip       \subheadskip\medskipamount
\def\subheadfont@{\bf}
\outer\def\subhead{\nofrills@{.\enspace}\subhead@
 \DNii@##1\endsubhead{\par\penaltyandskip@{-100}\subheadskip
  \varindent@{\usualspace@{{\subheadfont@\enspace}}%
 \subheadfont@\ignorespaces##1\unskip\subhead@}\ignorespaces}%
 \FN@\next@}

%% In version 2.0 of amsppt.sty we also add a third level of heading,
%% \subsubhead.

\outer\def\subsubhead{\nofrills@{.\enspace}\subsubhead@
 \DNii@##1\endsubsubhead{\par\penaltyandskip@{-50}\medskipamount
      {\usualspace@{{\it\enspace}}%
  \it\ignorespaces##1\unskip\subsubhead@}\ignorespaces}%
 \FN@\next@}

%%\f


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% -8- THEOREM ENVIRONMENTS AND SIMILAR STRUCTURES                          %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% \proclaim records "proclaim" as the current environment in
%% \envir@ so that we can give an error message if an \endproclaim
%% is missing or misspelled.  \runaway@ is what does the checking.

\def\proclaimheadfont@{\bf}
\outer\def\proclaim{\runaway@{proclaim}\def\envir@{proclaim}%
  \nofrills@{.\enspace}\proclaim@
%% penalty-100 is the penalty amount used by plain.tex's \medbreak.
 \DNii@##1{\penaltyandskip@{-100}\medskipamount\varindent@
   \usualspace@{{\proclaimheadfont@\enspace}}\proclaimheadfont@
   \ignorespaces##1\unskip\proclaim@
  \sl\ignorespaces}% %% After printing the name of the theorem, switch to \sl.
 \FN@\next@}

%% \endproclaim resets \envir@, ends the paragraph, switches back to \rm
%% and adds spacing. (This means that if, for some strange reason, a whole
%% section of text happens to be in italics, then the user must type \it
%% again after each \endproclaim, but that seems too special a case to
%% need providing for.)  The penalty of 55 is just the plain.tex penalty
%% for \endproclaim, carried over without change.

\outer\def\endproclaim{\let\envir@\relax\par\rm
  \penaltyandskip@{55}\medskipamount}

%% In \demo, we take the opportunity again to issue an error message if a
%% previous \proclaim has no matching \endproclaim.

\def\demoheadfont@{\it}
\def\demo{\runaway@{proclaim}\nofrills@{.\enspace}\demo@
     \DNii@##1{\par\penaltyandskip@\z@\medskipamount
  {\usualspace@{{\demoheadfont@\enspace}}%
  \varindent@\demoheadfont@\ignorespaces##1\unskip\demo@}\rm
  \ignorespaces}\FN@\next@}

%% \enddemo is easy.

\def\enddemo{\par\medskip}


\def\qed{\ifhmode\unskip\nobreak\fi\quad\ifmmode\square\else$\m@th\square$\fi}

%% Remarks are to be the same as Proofs (\demo), except there is no \medskip
%% after a Remark.

\let\remark\demo
\def\endremark{}

%% \definition uses \proclaimheadfont@ because normally the two use
%% the same font for the head font, with \definition using \rm for
%% the text as opposed to the \sl used for \proclaim.

\def\definition{\runaway@{proclaim}%
%% \proclaimheadfont@ comes after the period here because sometimes
%% Editorial wants the period to be roman rather than bold, e.g. when
%% the preceding thing is a math formula or a citation, set in roman
%% type.
  \nofrills@{.\proclaimheadfont@\enspace}\definition@
        \DNii@##1{\penaltyandskip@{-100}\medskipamount
        {\usualspace@{{\proclaimheadfont@\enspace}}%
        \varindent@\proclaimheadfont@\ignorespaces##1\unskip\definition@}%
        \rm \ignorespaces}\FN@\next@}
\def\enddefinition{\par\medskip}


\let\example\definition
\let\endexample\enddefinition

%%\f


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% -9- ROSTERS                                                              %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% In version 2 of amsppt we provide a more convenient way of changing the
%% indention of roster items.  (This needs to be redone using \widestnumber

\newdimen\rosteritemwd

%% \roster uses \rostercount@ to store the \item number. The first item is
%% treated specially, because of the extra space before it, so we need a flag
%% \iffirstitem@ to identify it.

\newcount\rostercount@
\newif\iffirstitem@

%% Since \item in \roster differs from in \plain, we store plain's \item in
%% \plainitem@, so that we can restore the definition after the \roster is
%% over.

\let\plainitem@\item

%% In order for our \roster's to work, we will also have to be sure that
%% \everypar is {}.  Just in case \everypar already has a value, as it might
%% in some format, we store those values in the token list \everypartoks@, so
%% that we can restore them at the end.  \par@ does this storing, and sets
%% \everypar{}.

\newtoks\everypartoks@
\def\par@{\everypartoks@\expandafter{\the\everypar}\everypar{}}

%% Compressed format is used for \roster, and even for one of the \def's made
%% within the \def of \roster !

\def\roster{\edef\leftskip@{\leftskip\the\leftskip}%
  %% We also have to store the \leftskip, since it will be changed.
 \relaxnext@
 \rostercount@\z@  %% Initialize \rostercount@ to 0.
 \def\item{\FN@\rosteritem@}% %% \item, now redefined, has
   %% to look ahead for [ and ", since we allow optional and literal
   %% arguments. \rosteritem@ itself is defined below.  The following
   %% \next@ (in \DN@) is the one called at the very end of this \def.
 \DN@{\ifx\next\runinitem\let\next@\nextii@\else
  \let\next@\nextiii@\fi\next@}%
  %% First we look to see whether \roster is followed by \runinitem,
  %% since this requires different processing.
 \DNii@\runinitem  %% If \runinitem occurs, \nextii@ must kill it off.
  {\unskip  %% This unskips any space before the original \roster.
    %% Our definition of \nextii@\runinitem itself uses compressed format
    %% and a \futurelet\next\next@, because we still have to allow
    %% [ or " to come next.
   \DN@{\ifx\next[\let\next@\nextii@\else
    \ifx\next"\let\next@\nextiii@\else\let\next@\nextiv@\fi\fi\next@}%
    %% The following \nextii@ is the one created by \nextii@\runinitem;
    %% there is no conflict of names, since the first calls the second.
   \DNii@[####1]{\rostercount@####1\relax
    \enspace{\rm(\number\rostercount@)}~\ignorespaces}%
    %% If [...] comes next, we use (...) but we explicitly do this by
    %% setting \rostercount@ equal to ... so that succeeding \item's
    %% will have the right numbers (use of something other than a
    %% number will give an error message).
   \def\nextiii@"####1"{\enspace{\rm####1}~\ignorespaces}%
    %% If "..." comes next, we use ... exactly as typed.
   \def\nextiv@{\enspace{\rm(1)}\rostercount@\@ne~}%
    %% Otherwise just use (1).
   \par@\firstitem@false  %% Before doing any of this we still change
     %% \everypar, if necessary, which is normally done elsewhere, and set
     %% \firstitem@false, since this \runinitem counts as the first.
   \FN@\next@}% %% End of definition of \nextii@\runinitem.
   %% The following \nextiii@ will be used if we didn't have \runinitem.
 \def\nextiii@{\par\par@  %% End the present paragraph, change \everypar
    %% if necessary, prohibit a break, add a small skip, but add something
    %% to offset any \parskip, if there is any, which would be contributed
    %% when the next paragraph is begun by the next \item.
  \penalty\@m\smallskip\vskip-\parskip
  \firstitem@true}%  %% And set \firstitem@true for use with \item.
 \FN@\next@}

%% Remember that \rosteritem@ is called by \futurelet\next\rosteritem@.

\def\rosteritem@{\iffirstitem@\firstitem@false\else\par\vskip-\parskip\fi
   %% Except at the first \item, we end the paragraph (consisting of the
   %% previous \item), and subtract any space that might be added by the
   %% next \item.
 \leftskip3\parindent\noindent  %% Set the indention.
 \DNii@[##1]{\rostercount@##1\relax
  \llap{\hbox to2.5\parindent{\hss\rm(\number\rostercount@)}%
   \hskip.5\parindent}\ignorespaces}%
   %% If [...] follows \item, we use ... as the number, again by setting
   %% \rostercount@, so that succeeding \items will have the right number.
 \def\nextiii@"##1"{%
  \llap{\hbox to2.5\parindent{\hss\rm##1}\hskip.5\parindent}\ignorespaces}%
   %% If "..." follows  \item, we use ... exactly as typed.
 \def\nextiv@{\advance\rostercount@\@ne
  \llap{\hbox to2.5\parindent{\hss\rm(\number\rostercount@)}%
   \hskip.5\parindent}}%
   %% Otherwise we print the \rostercount@ in parentheses.
 \ifx\next[\let\next@\nextii@\else\ifx\next"\let\next@\nextiii@\else
  \let\next@\nextiv@\fi\fi\next@}

%% \therosteritem is just a convenience for the user.

\def\therosteritem#1{{\rm(\ignorespaces#1\unskip)}}

%% We want to save \Runinitem for last, but it is relevant even to the
%% definition of \endroster, since we have to worry whether \endroster is
%% followed by another \Runinitem.  We will use a flag \ifnextRunin@ to tell
%% us.

\newif\ifnextRunin@

\def\endroster{\relaxnext@
 \par\leftskip@  %% End the paragraph, and restore the \leftskip.
 \penalty-50 \vskip-\parskip\smallskip  %% Add a good break and
   %% subtract any space that will be started by next paragraph,
   %% but add a \smallskip.
 \DN@{\ifx\next\Runinitem\let\next@\relax
    %% Don't do anything else if \Runinitem comes next.
  \else\nextRunin@false\let\item\plainitem@  %% Otherwise, set
    %% \nextRunin@false, and restore \item to its definition in plain;
   \ifx\next\par %% moreover, if the \endroster is followed by a new paragraph,
    \DN@\par{\everypar\expandafter{\the\everypartoks@}}%
   %% delete that instruction (since we've already put in a \par), and
   %% restore \everypar,
   \else  %% but if the \endroster isn't followed by a new paragraph,
    \DN@{\noindent\everypar\expandafter{\the\everypartoks@}}%
   %% start the next paragraph unindented, and restore \everypar.
  \fi\fi\next@}%
 \FN@\next@}

%% Finally, for \Runinitem ... \roster\runinitem we have the usual junk for
%% worrying about [ or " coming next, and then more interesting things:  We
%% have to find out how many lines of text we had before the \roster; we
%% will store this in \rosterhangafter@.

\newcount\rosterhangafter@
\def\Runinitem#1\roster\runinitem{\relaxnext@
 \rostercount@\z@ %% Initialize \rostercount@ to 0.
 \def\item{\FN@\rosteritem@}%  %% Define \item as before.
 \def\runinitem@{#1}%  %% Store everything up to the roster in \runinitem@.
 \DN@{\ifx\next[\let\next\nextii@\else\ifx\next"\let\next\nextiii@
  \else\let\next\nextiv@\fi\fi\next}%
 \DNii@[##1]{\rostercount@##1\relax
  \def\item@{{\rm(\number\rostercount@)}}\nextv@}%
   %% If [...] follows \runinitem, we proceed as before, except we call
   %% this first instance \item@, and we let \nextv@, defined below, take
   %% care of everything.
 \def\nextiii@"##1"{\def\item@{{\rm##1}}\nextv@}%
   %% If "..." follows \runinitem, we define \item@ to use it.
 \def\nextiv@{\advance\rostercount@\@ne
  \def\item@{{\rm(\number\rostercount@)}}\nextv@}%
   %% Otherwise, we use the proper \rostercount@.
   %% Now comes \nextv@, which has to properly typeset things.
 \def\nextv@{\setbox\z@\vbox  %% First store things in \box0 .
  {\ifnextRunin@\noindent\fi  %% Start unindented if we have
    %% \ifnextRunin@true.  This will happen only if we had
    %% \Runinitem...\endroster right before.
  \runinitem@\unskip\enspace\item@~\par  %% Add the stored things in
    %% \runinitem@, and then \item@.
  \global\rosterhangafter@\prevgraf}% %% This sets \rosterhangafter@
    %% to the number of lines in \box0 , i.e., of the material so far; see
    %% TB, p. 103. We need to say \global since this is set within \box0 .
    %% Now we're done with \box0 !
  \firstitem@false  %% Set \firstitem@false for future \item's.
  \ifnextRunin@\else\par\fi  %% End previous paragraph unless
    %% we had \Runinitem ...\endroster right before.
    %%
    %% Now comes the good part: we \hangindent3\parindent, as before,
    %% but we do it for \rosterhangafter@ lines, the number that already
    %% appeared in the material we set in \box0 .
  \hangafter\rosterhangafter@\hangindent3\parindent
  \ifnextRunin@\noindent\fi  %% Start unindented if we had a
     %% \Runinitem ... \endroster right before.
  \runinitem@\unskip\enspace %% Put in all the stored stuff \Runinitem@
  \item@~\ifnextRunin@\else\par@\fi  %% and the \item@, and
    %% end the paragraph, unless we had a \Runinitem ... \endroster before.
  \nextRunin@true\ignorespaces}%  %% Here's where we set \nextRunin@true.
 \FN@\next@}

%%\f


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% -10- FOOTNOTES                                                           %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% \footmarkform@ tells how to treat a general type of footnote marker.  And
%% \thefootnotemark is for the user, analogous to \thetag in AMSTEX.TEX.

\def\footmarkform@#1{$\m@th^{#1}$}
\let\thefootnotemark\footmarkform@

%% \makefootnote@ takes care of the general problem of creating a
%% footnote whose marker is #1 and whose text is #2, so that we can
%% concentrate separately on the problem of how the marker is
%% determined.  It is essentially \vfootnote from TB, p. 363, except
%% that we don't do fancy things to worry about category code changes,
%% and instead of adding a \strut at the end, we will just add the
%% lower part of the strut.

\def\makefootnote@#1#2{\insert\footins
 {\interlinepenalty\interfootnotelinepenalty
 \eightpoint\splittopskip\ht\strutbox\splitmaxdepth\dp\strutbox
 \floatingpenalty\@MM\leftskip\z@\rightskip\z@\spaceskip\z@\xspaceskip\z@
 \leavevmode{#1}\footstrut\ignorespaces#2\unskip\lower\dp\strutbox
 \vbox to\dp\strutbox{}}}

%% Before version 2.0 \footmarkcount@ was declared in amstex.tex.

\newcount\footmarkcount@
\footmarkcount@\z@

%% \footnotemark basically just advances \footmarkcount@ by 1 and then uses
%% \footmarkform@{\number\footmarkcount@}---we still have to worry about the
%% space factor as in the definition of \footnote in TB, p. 363.  However, we
%% are allowing both an `optional' argument [#1], where we instead use
%% \footmarkform@{#1}, and a `literal' argument "#1", where we instead use #1
%% exactly as typed, so we need to use a \futurelet to look at the next
%% symbol. Compressed format is used.

\def\footnotemark{\let\@sf\empty\relaxnext@
 \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
 \DN@{\ifx[\next\let\next@\nextii@\else
  \ifx"\next\let\next@\nextiii@\else
  \let\next@\nextiv@\fi\fi\next@}%
 \DNii@[##1]{\footmarkform@{##1}\@sf}%
 \def\nextiii@"##1"{{##1}\@sf}%
 \def\nextiv@{\iffirstchoice@\global\advance\footmarkcount@\@ne\fi
  \footmarkform@{\number\footmarkcount@}\@sf}%
 \FN@\next@}

%% \footnotetext essentially applies \makefootnote@ to the next group, using
%% \footmarkcount@ for the marker that goes before the footnote text.
%% However, we once again allow optional and literal arguments.  Compressed
%% format is used.

\def\footnotetext{\relaxnext@
 \DN@{\ifx[\next\let\next@\nextii@\else
  \ifx"\next\let\next@\nextiii@\else
  \let\next@\nextiv@\fi\fi\next@}%
 \DNii@[##1]##2{\makefootnote@{\footmarkform@{##1}}{##2}}%
 \def\nextiii@"##1"##2{\makefootnote@{##1}{##2}}%
 \def\nextiv@##1{\makefootnote@{\footmarkform@{\number\footmarkcount@}}{##1}}%
 \FN@\next@}

%% Finally, \footnote is basically \footnotemark\footnote, but we can't write
%% it directly that way because it, too, can take optional and literal
%% arguments.  Compressed format again.

\def\footnote{\let\@sf\empty\relaxnext@
 \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi
 \DN@{\ifx[\next\let\next@\nextii@\else
  \ifx"\next\let\next@\nextiii@\else
  \let\next@\nextiv@\fi\fi\next@}%
 \DNii@[##1]##2{\footnotemark[##1]\footnotetext[##1]{##2}}%
 \def\nextiii@"##1"##2{\footnotemark"##1"\footnotetext"##1"{##2}}%
 \def\nextiv@##1{\footnotemark\footnotetext{##1}}%
 \FN@\next@}

%% \adjustfootnotemark just allows the user to change \footmarkcount@.

\def\adjustfootnotemark#1{\advance\footmarkcount@#1\relax}

%% We use the definition of \footnoterule provided by plain, but change
%% its width from 2 truein to 5pc.

\def\footnoterule{\kern-3\p@
  \hrule width 5pc\kern 2.6\p@} %% the \hrule is .4pt high

%%\f


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% -11- TABLES                                                              %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% At the present time no table macros are provided.  Tables are so varied
%% anyway that people are probably better off learning how to use plain
%% TeX \halign and \settabs.  Captions can be gotten using \topcaption
%% or \botcaption.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% -12- FIGURE SPACES AND CAPTIONS                                          %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\def\captionfont@{\smc}

%% These captions are designed for use within \topinsert's and
%% \midinsert's.  \nofrills is not currently an option, though
%% probably it should be added eventually.
%%
%% Need to check on the specs for spacing between topcaption
%% and what follows.  Currently topcaption and botcaption both
%% use \bigskip as separation between them and the object they
%% apply to.

\def\topcaption#1#2\endcaption{%
%% The captionwidth may have been changed by the user so we don't
%% make the assumption that it is equal to \hsize - 2\indenti.
  {\dimen@\hsize \advance\dimen@-\captionwidth@
%% \raggedcenter@ uses the em so we set the font before calling it.
%% \leftskip and \rightskip are changed by \raggedcenter so the
%% modifications of \leftskip and \rightskip must come after.
   \rm\raggedcenter@ \advance\leftskip.5\dimen@ \rightskip\leftskip
  {\captionfont@#1}%
  \if\notempty{#2}.\enspace\ignorespaces#2\fi
  \endgraf}\nobreak\bigskip}

%% For whatever reason, the style in current AMS production has figure
%% captions (= \botcaption) set in a block while table captions are set
%% ragged center style.

\def\botcaption#1#2\endcaption{%
%% The previous vskip may be blank space for a figure, so we can't use
%% \penaltyandskip@ here, otherwise the \bigskip would not be added
%% (assuming the preceding vskip is greater than \bigskipamount):
  \nobreak\bigskip
%% Measure how wide the caption is.  Maybe it's only "Figure 1", or
%% maybe it's "Figure 1. Blah blah blah ... for 10 lines."  In the
%% first case center it, in the second case put it in paragraph form.
  \setboxz@h{\captionfont@#1\if\notempty{#2}.\enspace\rm#2\fi}%
  {\dimen@\hsize \advance\dimen@-\captionwidth@
   \leftskip.5\dimen@ \rightskip\leftskip
   \noindent \ifdim\wdz@>\captionwidth@ %% long caption---set it in a paragraph
   \else\hfil\fi %% short caption---add \hfil to balance with \parfillskip.
  {\captionfont@#1}\if\notempty{#2}.\enspace\rm#2\fi\endgraf}}

%% Redefine plain TeX \@ins to add definition of \vspace (locally) for use
%% with caption macros.  Also \captionwidth.

\def\@ins{\par\begingroup\def\vspace##1{\vskip##1\relax}%
  \def\captionwidth##1{\captionwidth@##1\relax}%
  \setbox\z@\vbox\bgroup} % start a \vbox

%% CASE 1: \topcaption plus a table typed by the author.
%%
%% \topinsert
%% \topcaption{Table 1}This is a table caption.\endcaption
%% \halign{ ...
%%  ...
%% }
%% \endinsert
%%
%% CASE 2: \topcaption plus some blank space.
%%
%% \midinsert
%% \topcaption{Table 2}This is another table caption.\endcaption
%% \vspace{13pc}
%% \endinsert
%%
%% CASE 3: \botcaption plus some blank space.
%%
%% \topinsert
%% \vspace{7pc}
%% \botcaption{Figure 1}\endcaption
%% \endinsert
%%
%% Use of \captionwidth:
%%
%% \topinsert
%% \captionwidth{14pc}
%% \topcaption{Table 1}Text ...
%% \endcaption
%% \endinsert

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% -13- MISCELLANEOUS FORMATTING MACROS                                     %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% \block is intended for typing long quotes in a block, indented on both
%% margins. If we're not in horizontal mode, we do a \noindent to avoid
%% getting an extra blank line before the display.

\def\block{\RIfMIfI@\nondmatherr@\block\fi
       \else\ifvmode\vskip\abovedisplayskip\noindent\fi
        $$\def\endblock{\par\egroup$$}\fi
  \vbox\bgroup\advance\hsize-2\indenti\noindent}
\def\endblock{\par\egroup}

%% In version 1 of amsppt \cite did some parsing to locate a comma in its
%% argument and if one was found the font was switched from \citefont to
%% \rm.  In version 2 we no longer do this because if a \cite deviates too
%% much from the expected form we run into problems:  The expected form was
%% either \cite{13}, or \cite{13, Theorem 2.2}.  But if for example the
%% user wants to cite two references together, \cite{13,15}, we don't want
%% to switch off \citefont after the comma.  And since authors tend to invent
%% even more imaginative variations than this, we just did away with the
%% parsing altogether.
%%
%% \m@th is in case the author uses subscripts in his citation codes.

\def\cite#1{{\rm[{\citefont@\m@th#1}]}}

%% In version 1 of amsppt \citefont was \bf.

\def\citefont@{\rm}

%%\f


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% -14- BIBLIOGRAPHY                                                        %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\def\refsfont@{\eightpoint}

%% \Refs is supposed to allow \nofrills to allow a different heading to be
%% printed.  We use the same general scheme as before, but can't use
%% \nofrills@ directly, since now we want one thing to appear when \nofrills
%% isn't used, and something else when it is.

%% Beyond that, \Refs will change to eight point type, in which all the
%% references will be set, and change the space factor code of a period to
%% 1000, so that normal interword spaces occur after periods (because the
%% overwhelming majority of periods in the references will be
%% for abbreviations, not the ends of sentences).

%% We enclose the entire References section in a group, to provide for
%% the rare case where they do not fall at the very end of a document.
%% Among other things, this means that \enddocument no longer needs to
%% worry about resetting the \sfcode of the period afterwards.

\outer\def\Refs{\runaway@{proclaim}%
 \relaxnext@ \DN@{\ifx\next\nofrills\DN@\nofrills{\nextii@}\else
  \DN@{\nextii@{References}}\fi\next@}%
 \DNii@##1{\penaltyandskip@{-200}\aboveheadskip
  \line{\hfil\headfont@\ignorespaces##1\unskip\hfil}\nobreak
  \vskip\belowheadskip
  \begingroup\refsfont@\sfcode`.=\@m}%
 \FN@\next@}

\def\endRefs{\par\endgroup}


%% The following macros to set the references are based on the original version
%% written by Michael Spivak, but have been modified to make them conform
%% to the current style in use at the AMS and add a few refinements.
%% The comments below are a mixture of Spivak's original comments and
%% comments by the AMS technical staff.

%% These macros are perhaps more of a tour de force than anything else.
%% Various people dislike them for various reasons, and some one will
%% always be able find some special kind of reference formatting that
%% isn't included here. However, one can always simply type out a
%% reference as one wants it to appear as a last resort.  The value of
%% these macros is that they at least do allow the various parts of the
%% reference to be specified without having to worry about the
%% particular way the style file will format them, and thus they can
%% easily be modified for other style files.

%% The real TeXnical finesse was to allow the various parts of the reference
%% to be specified in an arbitrary order.

%% We begin by allocating boxes to hold the various possible bits of
%% information. A few of these can be used by different constructions: \bybox@
%% is used by both \by and \bysame; \bookbox@ holds the book title, whether
%% called by \book, or by \inbook; \pagesbox@ holds the pages, whether called
%% by \pages or by \page; \edsbox@ may be called by \ed (one editor) or \eds
%% (multiple editors)

\newbox\nobox@            \newbox\keybox@           \newbox\bybox@
\newbox\paperbox@         \newbox\paperinfobox@     \newbox\jourbox@
\newbox\volbox@           \newbox\issuebox@         \newbox\yrbox@
\newbox\pagesbox@         \newbox\bookbox@          \newbox\bookinfobox@
\newbox\publbox@          \newbox\publaddrbox@      \newbox\finalinfobox@
\newbox\edsbox@           \newbox\langbox@

%% Certain flags will be needed to get the processing
%% right.

\newif\iffirstref@        \newif\iflastref@
\newif\ifprevjour@        \newif\ifbook@            \newif\ifprevinbook@

%% The flags \ifbookquotes@ and \ifpaperquotes@ would be set true by
%% some journal-specific documentstyles (in the basic AMSPPT style they
%% are false), to get quotes around paper titles or book titles
%% respectively.  The flag \ifquotes@ is set locally by \paper or \book,
%% provided \ifpaperquotes@ or \ifbookquotes@ is true.  The reason we
%% need \ifquotes@ is that when we set the box containing say the paper
%% title, we can't put in the closing '' immediately, because we will
%% need either a period or comma, depending on whether any other
%% information follows.  So we set \quotes@true and \prepunct@ will then
%% check the flag and add the closing quotes. (Of course, things would
%% be much easier if we used `logical' punctuation and typed things
%% like:
%%%       ``Title of Book'', pg. 367. Publisher.
%% But most journals prefer having the punctuation inside the right quotes,
%% and since this is the harder case we might as well do it, to show how it's
%% done.

\newif\ifquotes@          \newif\ifbookquotes@      \newif\ifpaperquotes@

%% The horizontal rule used for repeated author names is set to 3 ems wide.
%% We take care to get the em from the \refsfont@, which is 8-point
%% instead of 10-point.

\newdimen\bysamerulewd@
\setboxz@h{\refsfont@\kern3em}
\bysamerulewd@\wdz@

%% \refindentwd controls the indention from the left margin of the ref
%% item numbers or key labels.  The initial setting is to 2 decimal
%% digits; numbers up to 99 will be aligned on the right within a box
%% the width of \refindentwd.  \key labels will be aligned on the LEFT
%% within a box of the same width; but when \key's are being used, the
%% indention may need to be increased if it's required that the labels
%% remain clear from the text.  The \widestnumber macro can be used to
%% do this: \widestnumber\key{MNOPQ} will increase \refindentwd to the
%% width of a box containing "[MNOPQ]. " (note the final space).
%% \widestnumber can also be used with \no: \widestnumber\no{000} for
%% 3-digit numbers, \widestnumber\no{0} for 1-digit numbers, and so on.

\newdimen\refindentwd
\setboxz@h{\refsfont@ 00. }
\refindentwd\wdz@

%% Each \ref ... \endref construction is enclosed by \begingroup ...
%% \endgroup to localize changes to the \ifbook@, \ifprevjour@,
%% \ifprevinbook@ flags, as well as changes to the contents of the
%% various boxes \bybox@ \paperbox@ etc.  We set \firstref@true; it has
%% to do with the processing of \moreref and \transl.  When \iffirstref@
%% is true \endref@ will typeset \no (or \key) and \by; \moreref and
%% \transl set \firstref@false so that a subsequent \endref@ will not
%% repeat the \no and \by information.  \iflastref@ controls whether
%% \endref@ typesets a period (because this \ref is finished) or a
%% semicolon (because we're doing a \moreref or \transl). \endref sets
%% \lastref@true just before it calls \endref@.

%% \nofrills is redefined by \ref to cause a kern of 3sp to be added at
%% the end of the current box; this is a signal that causes \prepunct@
%% to leave out the automatic punctuation that would normally be added
%% when the various part boxes are concatenated.

\outer\def\ref{\begingroup \noindent\hangindent\refindentwd
 \firstref@true \def\nofrills{\def\refkern@{\kern3sp}}%
 \ref@}

%% We don't want \book@true to carry over to a \moreref so \ref@ sets it
%% to false.  We add a \bgroup and  let \endrefitem@ = \egroup because
%% the first thing after \ref (usually \no or \key) will contribute an
%% \endrefitem@.  We don't simply let \endrefitem@ = \relax because it
%% would override the default definition of \endrefitem@ for the
%% remainder of the current \ref; the \bgroup ... \egroup localizes the
%% temporary definition.

\def\ref@{\book@false \bgroup\let\endrefitem@\egroup \ignorespaces}

%% \moreref ends the previous setbox operation, does \endref@ to
%% typeset any information gathered so far, sets \firstref@false
%% and then prepares to start the equivalent of a new \ref.
%% Note that \moreref is practically the same as \endref, defined below,
%% followed by \ref again, except that certain flags are set differently, and
%% we don't start another group or a new paragraph.

\def\moreref{\endrefitem@\endref@\firstref@false\ref@}%

%% \transl is like \moreref, except that we allow text to be specified
%% between \transl and the first subsequent item; this text will usually
%% be something like "English transl."

\def\transl{\endrefitem@\endref@\firstref@false
%% Instead of doing a \ref@ here, like \moreref, we use only one part
%% of \ref@:
  \book@false
%% Unlike \moreref, we need to do a \prepunct@ here because \transl
%% is followed by text, set in box 0, instead of by another ref
%% command like \paper or \vol or \pages.
  \prepunct@
%% Set the text in box 0 and then immediately unbox it.  But we use
%% \aftergroup's because we haven't got the text yet.  The \egroup that
%% closes box 0 is going to be contributed by the next ref macro.  We
%% can unbox immediately because we already know that this information
%% goes right here.
  \setboxz@h\bgroup \aftergroup\unhbox\aftergroup\z@
    \def\endrefitem@{\unskip\refkern@\egroup}\ignorespaces}%

%% Whenever we finish setting a part box, we check to see if it is
%% empty, taking into account any material that might have been
%% added automatically, such as the "[]" for \key.  This is
%% primarily to allow users to type references using templates that contain
%% one instance of each possible \ref command, and not have to delete
%% the commands that are not used.

\def\emptyifempty@{\dimen@\wd\currbox@
  \advance\dimen@-\wd\z@ \advance\dimen@-.1\p@
  \ifdim\dimen@<\z@ \setbox\currbox@\copy\voidb@x \fi}

%% \refkern@ is usually \relax but may be redefined under special
%% circumstances to control the eventual application of punctuation.

\let\refkern@\relax

\def\endrefitem@{\unskip\refkern@\egroup
  \setboxz@h{\refkern@}\emptyifempty@}\ignorespaces

%% The basic idea behind all the following constructions is the
%% following. If we type \no 3 \anothercontrolsequence, then this must
%% set \nobox@ to be \hbox{3. }, with a period and a space added
%% after the 3.  (The \endref will then take all these various boxes,
%% and unbox them, in the proper order.)  To get the box set, we let \no
%% end with \setbox\nobox@\bgroup, and let \anothercontrolsequence
%% contribute the closing \egroup, via \endrefitem@.  (The important
%% point here is that a construction like \hbox\bgroup ... \egroup is
%% allowed [even though something like \toks0=\bgroup ... \egroup
%% isn't]. That is because \hbox\bgroup causes tokens to be expanded,
%% since the material actually has to be typeset, so the \egroup can be
%% noticed when it occurs.)

%% Of course, \no itself must therefore begin by contributing an
%% \endrefitem@, if we are going to stick to our goal of allowing the
%% various parts to be specified in any order. That is why \ref@
%% starts with \bgroup\let\endrefitem@\egroup \ignorespaces, so that
%% the first \endrefitem@ that comes along will merely finish off an
%% an empty group.  Note that having \ref@ simply do
%% \let\endrefitem@\relax, with no \bgroup,  would be a mistake
%% because there's a default definition of \endrefitem@ that we want
%% to preserve (more on this below).

%% Instead of typing lots of definitions that all look almost exactly
%% alike, we have a general construction \refdef@ which can be applied
%% to most. The first argument of \refdef@ will be a control sequence,
%% like \no, \key, etc., and we want to define this control sequence to
%% set the appropriate \nobox@, \keybox@, or whatever. The second
%% argument of \refdef@ will be material to be added at the beginning of
%% the current box (often a font change), and the third argument will be
%% material to be added at the end of the current box. The maneuvering
%% with \toks@ is to save a little token memory for definitions made
%% using \refdef@.  I.e., without it, the definition of \no would
%% contain things like
%% "\csname\expandafter\eat@\string\no box@\endcsname"
%% instead of "\nobox@"; we choose to do the processing
%% in \refdef@ instead of at run-time.

\def\refdef@#1#2#3{\edef\next@{\noexpand\endrefitem@
  \let\noexpand\currbox@\csname\expandafter\eat@\string#1box@\endcsname
    \noexpand\setbox\noexpand\currbox@\hbox\bgroup}%
  \toks@\expandafter{\next@}%
%% If both #2 and #3 are empty, we let the default definition of
%% \endrefitem@ prevail; otherwise we redefine it to add extra ending
%% material (#3) and also put #2#3 inside box0 when we are testing to
%% see if any actual text was provided by the user.
  \if\notempty{#2#3}\toks@\expandafter{\the\toks@
  \def\endrefitem@{\unskip#3\refkern@\egroup
  \setboxz@h{#2#3\refkern@}\emptyifempty@}#2}\fi
%% add \ignorespaces in any event
  \toks@\expandafter{\the\toks@\ignorespaces}%
  \edef#1{\the\toks@}}

%% All the complicated maneuvering above is designed to produce a definition
%% such as the following, which is the result of \refdef\key{[\m@th}{]}:
%%
%% \key=macro:
%%      %% End the previous box.
%% \endrefitem@
%%      %% Give \currbox@ a value---it will be needed by \emptyifempty@
%%      %% and at the time \emptyifempty@ is called we won't know the name
%%      %% of the last box that was boxed up unless we pass the value
%%      %% through \currbox@.
%% \let\currbox@\keybox@
%%      %% Start setting the box for \key; the \egroup for this box will
%%      %% be contributed by the next \endrefitem@.
%% \setbox\currbox@\hbox\bgroup
%%      %% Change the definition of \endrefitem@; this will be local inside
%%      %% the box that we're currently setting, so it won't erase the
%%      %% default definition of \endrefitem@, which we want to remain
%%      %% in effect for some of the other ref items. The reason we
%%      %% redefine \endrefitem@ here is the [\m@th that we want to
%%      %% add at the beginning of \key and the ] at the end.  There is
%%      %% a word space after the ], by the way.
%% \def\endrefitem@{\unskip]
%%      %% \refkern@ is used in some cases to set a special kern whose
%%      %% numerical value is significant in later processing by \prepunct@
%%      %% and \endref@.  And the \egroup ends the setting of \keybox@.
%% \refkern@\egroup
%%      %% In order to find out if there was any user-specified data
%%      %% in this ref item, we set the material predetermined by
%%      %% the AMSPPT style for \key in box 0 and compare the width with
%%      %% the width of \currbox@.  If the width of \currbox@ is not
%%      %% greater than the width of box 0 then we empty out currbox@
%%      %% so that \endref@ can use \ifvoid\keybox@ to decide whether
%%      %% we need to typeset anything.  All of the processing that
%%      %% is invariant is put into the macro \emptyifempty@ to
%%      %% save token space and make definitions produced by
%%      %% \refdef@ a little easier to read.
%%   \setboxz@h{[\m@th] \refkern@}\emptyifempty@}%
%%      %% Now that we have defined \endrefitem@, we put down the
%%      %% [ that precedes a \key label and proceed with the setting
%%      %% of the contents of the box, calling in \ignorespaces as
%%      %% a precaution to remove leading spaces, which should normally
%%      %% not show up anyway because spaces will be ignored after
%%      %% \key by virtue of the fact that it is a control word.
%%      %% The user would have to do something odd to render the
%%      %% \ignorespaces necessary.
%%   [\m@th \ignorespaces .

%% In version 1.0 of AMSPPT empty arguments to \refdef@ were signified by
%% \relax instead of {}.  But this was changed to allow us to do
%% the \ifx\next@\empty tests in \refdef@.

\refdef@\no{}{. }
\refdef@\key{[\m@th}{] }
\refdef@\by{}{}

%% \bysame just uses \by, since the two of them are mutually exclusive
%% within an individual ref.

\def\bysame{\by\hbox to\bysamerulewd@{\hrulefill}\thinspace
%% We add \kern0sp to prevent the \thinspace from being removed eventually
%% by \prepunct@.
   \kern0sp}

%% \manyby used to set a box the width of an author's name, and then
%% following \bysame's pertaining to the same author would have a
%% rule as wide as the box.  But what we do now is have \bysame set
%% a rule of a fixed width, independent of the width of the author's
%% name, so \manyby gives an informational message and then just
%% calls \by.

\def\manyby{\message{\string\manyby is no longer necessary; \string\by
  can be used instead, starting with version 2.0 of \styname.STY}\by}

%% At the beginning of the \paper box we need to add opening quotes
%% if prescribed by the documentstyle.  A few of the journals produced
%% at the AMS set \paperquotes@true; the majority do not.

\refdef@\paper{\ifpaperquotes@``\fi\it}{}

\refdef@\paperinfo{}{}

%% We don't use \refdef@ here because we need to stick in \prevjour@true.
%% And we add an extra \ifvoid test so that we set it to true only if
%% actual text was given for \jour.  This is to allow people to use a
%% standard \ref template and not have to go to the trouble of removing
%% unused items.

\def\jour{\endrefitem@\let\currbox@\jourbox@
  \setbox\currbox@\hbox\bgroup
  \def\endrefitem@{\unskip\refkern@\egroup
    \setboxz@h{\refkern@}\emptyifempty@
    \ifvoid\jourbox@\else\prevjour@true\fi}%
\ignorespaces}

%% Current AMS style has journal volume numbers in boldface and book
%% volume numbers in lightface. If the user types \book before \vol
%% the \if clause here will get the  font right; if they're out of
%% order, no such luck.

\refdef@\vol{\ifbook@\else\bf\fi}{}

%% \issue adds "no. " in front of the issue number.  \yr is
%% straightforward, except that if the reference is for a journal
%% article, parentheses will be added around the year later, by
%% \endref@.  \issue will not print at all if \jour is not used.

\refdef@\issue{no. }{}
\refdef@\yr{}{}

%% \pages is straightforward, except that like \yr it will be handled
%% differently by \endref@ depending on whether the current reference
%% is to a journal or a book.  For books "pp." is added before the page
%% numbers ("p." if only one page number is given).

\refdef@\pages{}{}

%% When \page comes along we redefine \pp@ to be "p.~" with one p, instead
%% of "pp.~".  Then it redefines itself to the default definition
%% again.

\def\page{\endrefitem@\def\pp@{\def\pp@{pp.~}p.~}\let\currbox@\pagesbox@
  \setbox\currbox@\hbox\bgroup\ignorespaces}

%% The default value of \pp@:

\def\pp@{pp.~}

%% As with \jour, we can't use \refdef@ here because of the \book@true
%% and \previnbook@true that we want to add.  And we do the same sort
%% of \ifvoid testing to see whether we actually want to set \book@true
%% and \previnbook@true.

\def\book{\endrefitem@ \let\currbox@\bookbox@
 \setbox\currbox@\hbox\bgroup\def\endrefitem@{\unskip\refkern@\egroup
  \setboxz@h{\ifbookquotes@``\fi}\emptyifempty@
  \ifvoid\bookbox@\else\book@true\fi}%
  \ifbookquotes@``\fi\it\ignorespaces}

\def\inbook{\endrefitem@
  \let\currbox@\bookbox@\setbox\currbox@\hbox\bgroup
  \def\endrefitem@{\unskip\refkern@\egroup
  \setboxz@h{\ifbookquotes@``\fi}\emptyifempty@
  \ifvoid\bookbox@\else\book@true\previnbook@true\fi}%
  \ifbookquotes@``\fi\ignorespaces}

%% The format provided for editor names is "(J. Smith and R. Jones, eds.)"

\refdef@\eds{(}{, eds.)}

%% Can't use \refdef@ for \ed because it uses \edsbox@, not \edbox@.

\def\ed{\endrefitem@\let\currbox@\edsbox@
 \setbox\currbox@\hbox\bgroup
 \def\endrefitem@{\unskip, ed.)\refkern@\egroup
  \setboxz@h{(, ed.)}\emptyifempty@}(\ignorespaces}

%% These are straightforward:

\refdef@\bookinfo{}{}
\refdef@\publ{}{}
\refdef@\publaddr{}{}
\refdef@\finalinfo{}{}

%% \lang will be set in parentheses; it is intended for use with languages
%% like Russian or Chinese, where the title has been translated
%% instead of rendered verbatim, because of practical difficulties
%% in printing the non-Latin alphabets.  In the AMSPPT style this information
%% will come at the very end after \finalinfo.

\refdef@\lang{(}{)}

%% Since "(to appear)" is mutually exclusive with most of the kinds of
%% things that we expect to be done with \finalinfo (some examples:
%% "preprint", "submitted", "in preparation"), we use \finalinfo instead
%% of doing something separate.  If a user needs both "(to appear)" and
%% other final info, they can do it by saying
%%
%% \finalinfo other info (to appear)
%%
%% or   \toappear other info
%%
%% if they want the other info after the "(to appear)".

\def\toappear{\nofrills\finalinfo(to appear)}

\let\refdef@\relax %% Since we no longer need it; this saves a little memory

\def\ppunbox@#1{\ifvoid#1\else\prepunct@\unhbox#1\fi}

%% \nocomma@ is a different form of \ppunbox@.

\def\nocomma@#1{\ifvoid#1\else\changepunct@3\prepunct@\unhbox#1\fi}

%% The \ifnum test here means that nothing will be done if \lastkern
%% is 3 or more, which might be from \nofrills or from the internal
%% nofrills kern 4sp which turns off the space in addition to the
%% comma.  For example before \by.

\def\changepunct@#1{\ifnum\lastkern<3 \unkern\kern#1sp\fi}

%% \prepunct@ examines the last kern in a just-unboxed part box to
%% see what kind of punctuation is being signaled for.  If no kern is
%% present, \lastkern will return a value of 0, and this will be
%% interpreted as the normal case where we should typeset a comma;
%% if \nofrills was used for this particular part, the kern will be
%% greater than 2sp and no punctuation will be added.  If the kern
%% is 4sp the following space will also be omitted.

%% We have to handle penalties carefully to prevent linebreaks from
%% separating the punctuation added by \prepunct@ from the previous
%% text.  And \nolinebreak will have no effect unless we carry the
%% penalty forward to a spot after the punctuation.  So if \lastpenalty
%% is not 0, we save it in \penalty@ and reinsert it later.

\def\prepunct@{\count@\lastkern\unkern
  \ifnum\lastpenalty=0
    \let\penalty@\relax
  \else
%% The \relax at the end is needed because \the\lastpenalty is just
%% a number.
    \edef\penalty@{\penalty\the\lastpenalty\relax}%
  \fi
%% We do an unpenalty even in the case where \lastpenalty=0, because
%% of the possibility that there might be an explicit penalty 0
%% from \allowlinebreak, and we don't want to allow a break before
%% the punctuation that we're about to add.  Although it's
%% an awfully farfetched possibility that it will ever make a
%% difference.
  \unpenalty
  \let\refspace@\ \ifcase\count@,% usual case, do a comma
%% we can't just do a \  in case 3 of the \ifcase without
%% going to extra trouble because of the quotes possibility.
\or;\or.\or % do nothing; this case is from nofrills.
  \or\let\refspace@\relax
%% An else branch, just in case we somehow get some other kind of kern
  \else,\fi
  \ifquotes@''\quotes@false\fi \penalty@ \refspace@
}

%% \transferpenalty@ is used by \endref@ to carry a line-breaking penalty
%% forward around material added by \endref@ (other than the usual
%% \prepunct@ punctuation).  The only current example is the parentheses
%% added around \yr for journals.

\def\transferpenalty@#1{\dimen@\lastkern\unkern
  \ifnum\lastpenalty=0\unpenalty\let\penalty@\relax
  \else\edef\penalty@{\penalty\the\lastpenalty\relax}\unpenalty\fi
  #1\penalty@\kern\dimen@}

\def\endref{\endrefitem@\lastref@true\endref@
  \par\endgroup \prevjour@false \previnbook@false }

%% The top-level structure of \endref@ is:
%%
%% \iffirstref@ NO KEY BY \fi
%% PAPER PAPERINFO JOUR BOOK EDS
%% BOOKINFO BOOKVOL PUBL PUBLADDR BOOK+ FINALINFO LANG
%%
%% where each label in capitals stands for unboxing the corresponding box,
%% handling punctuation and possibly linebreaks in an appropriate way.
%% Some of the labels stand for more complex operations, however:
%%
%% JOUR = if we have a jour, typeset
%%          JOUR VOL ISSUE YR PAGES
%%        else maybe we're in a moreref and the jour info is not
%%        repeated, but we still need to do
%%          VOL ISSUE YR PAGES
%%
%% BOOK+ = typeset YR PAGES
%%
%% The structure of \endref@ is not as simple as you might first expect
%% because some parts (vol, yr, pages) may belong to a book or a journal,
%% and they are handled differently depending on which one they belong to.

\def\endref@{%
\iffirstref@
  \ifvoid\nobox@\ifvoid\keybox@\indent\fi
  \else\hbox to\refindentwd{\hss\unhbox\nobox@}\fi
  \ifvoid\keybox@
  \else\ifdim\wd\keybox@>\refindentwd
         \box\keybox@
       \else\hbox to\refindentwd{\unhbox\keybox@\hfil}\fi\fi
%% The kern4sp is a signal to \prepunct@ to leave out the usual comma and space.
%% It will be removed by the first \prepunct@ to come along
  \kern4sp\ppunbox@\bybox@
\fi %% matches iffirstref@
%% Can't use \ppunbox@ here because of the \ifpaperquotes@ part.
  \ifvoid\paperbox@
  \else\prepunct@\unhbox\paperbox@
    \ifpaperquotes@\quotes@true\fi\fi
  \ppunbox@\paperinfobox@
  \ifvoid\jourbox@
    \ifprevjour@ \nocomma@\volbox@
      \nocomma@\issuebox@
      \ifvoid\yrbox@\else\changepunct@3\prepunct@(\unhbox\yrbox@
%% Have to be careful here with the possibility of a linebreak penalty.
        \transferpenalty@)\fi
      \ppunbox@\pagesbox@
    \fi %% matches ifprevjour@
  \else \prepunct@\unhbox\jourbox@
    \nocomma@\volbox@
    \nocomma@\issuebox@
    \ifvoid\yrbox@\else\changepunct@3\prepunct@(\unhbox\yrbox@
%% Again have to handle linebreaks
      \transferpenalty@)\fi
    \ppunbox@\pagesbox@
  \fi %% matches ifvoid\jourbox@
  \ifbook@\prepunct@\unhbox\bookbox@ \ifbookquotes@\quotes@true\fi \fi
  \nocomma@\edsbox@
  \ppunbox@\bookinfobox@
  \ifbook@\ifvoid\volbox@\else\prepunct@ vol.~\unhbox\volbox@
  \fi\fi
  \ppunbox@\publbox@ \ppunbox@\publaddrbox@
  \ifbook@ \ppunbox@\yrbox@
    \ifvoid\pagesbox@
    \else\prepunct@\pp@\unhbox\pagesbox@\fi
  \else
    \ifprevinbook@ \ppunbox@\yrbox@
      \ifvoid\pagesbox@\else\prepunct@\pp@\unhbox\pagesbox@\fi
    \fi \fi
  \ppunbox@\finalinfobox@
%% If we're at the end of the current \ref, we set a period.  We still
%% have to worry about quotes, but, if there's no \lang, not about
%% line breaks.  Note that \lang comes after the period.  If we're in
%% a \moreref or \transl situation, we set a semicolon.  If a \lang
%% occurs in a \moreref situation, it comes before the semicolon, and,
%% assuming the default situation where \lang is in parentheses, the
%% punct value of 3 prevents the usual comma from preceding the \lang,
%% since a comma followed immediately by a parenthesis is poor style.
  \iflastref@
    \ifvoid\langbox@.\ifquotes@''\fi
    \else\changepunct@2\prepunct@\unhbox\langbox@\fi
  \else
    \ifvoid\langbox@\changepunct@1%
    \else\changepunct@3\prepunct@\unhbox\langbox@
      \changepunct@1\fi
  \fi
}

%%\f


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% -15- END OF DOCUMENT                                                     %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% The \address's get printed at the end of the paper, so we take care of this
%% with \enddocument.  Also the translator name, if any.  We don't need to do
%% an \ifx\thetranslator@\empty, as we did with \thesubjclass@ and other items
%% in \endtopmatter, because we're not constructing a footnote, just slapping
%% the material on the page.

\outer\def\enddocument{%
%% Normally a runaway proclaim environment would be caught by \Refs but
%% some documents won't have a \Refs section so we check here also.
 \runaway@{proclaim}%
%% In a monograph we expect the translator name and author addresses
%% to be handled in the front matter rather than at the end of the
%% individual chapters:
\ifmonograph@ % do nothing
\else
%% No break between the References and the final matter.
 \nobreak
 \thetranslator@
%% Print all the \address's, including e-mail addresses if present.
%% If any of the \email's are undefined the \csname will just evaluate
%% to \relax.
 \count@\z@ \loop\ifnum\count@<\addresscount@\advance\count@\@ne
 \csname address\number\count@\endcsname
 \csname email\number\count@\endcsname
 \repeat
\fi
 \vfill\supereject\end}

%%\f


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% -16- OUTPUT ROUTINE                                                      %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% Extra braces are added in \folio to localize \foliofont@; this is merely a
%% precaution, since in our basic style it will be localized anyway by being
%% put in an \llap or \rlap.  We provide a \foliofont@ separate from
%% \headlinefont@ because it is not uncommon for documentstyles to have the
%% folios in a different font, although in our basic style this is not the
%% case.  \foliofont@ is \eightrm instead of \eightpoint merely for efficiency;
%% we don't expect to need for example math family assignments in order to
%% typeset the folio.  On the other hand we need full math capability for
%% \headlinefont@ since running heads may contain math (from a title or a
%% section head).  From a design standpoint it might be preferable to have
%% seven-point running heads (compare a \head that falls at the top of a page
%% with the running head above it) but it is more convenient to use the already
%% available \eightpoint macro, and this saves a bit of overhead.

\def\folio{{\foliofont@\ifnum\pageno<\z@ \romannumeral-\pageno
 \else\number\pageno \fi}}
\def\foliofont@{\eightrm}
\def\headlinefont@{\eightpoint}

%% \leftheadline and \rightheadline use the method described in TB, p.
%% 260 for selecting different pieces of the topmark or botmark.  The
%% necessary \else is inserted by \leftheadtext and \rightheadtext.

\def\leftheadline{\rlap{\folio}\hfill \iftrue\topmark\fi \hfill}
\def\rightheadline{\hfill \expandafter\iffalse\botmark\fi
  \hfill \llap{\folio}}

\newtoks\leftheadtoks
\newtoks\rightheadtoks

%% \leftheadtext and \rightheadtext have a \nofrills option to
%% turn off uppercasing.  They also set their argument in a
%% box, during a syntax check, because otherwise syntax errors
%% in the argument would not be caught (because the output routine,
%% and hence \headline, is never called during a syntax check).

\def\leftheadtext{\nofrills@{\uppercasetext@}\lht@
  \DNii@##1{\leftheadtoks\expandafter{\lht@{##1}}%
    \mark{\the\leftheadtoks\noexpand\else\the\rightheadtoks}
    \ifsyntax@\setboxz@h{\def\\{\unskip\space\ignorespaces}%
        \headlinefont@##1}\fi}%
  \FN@\next@}
\def\rightheadtext{\nofrills@{\uppercasetext@}\rht@
  \DNii@##1{\rightheadtoks\expandafter{\rht@{##1}}%
    \mark{\the\leftheadtoks\noexpand\else\the\rightheadtoks}%
    \ifsyntax@\setboxz@h{\def\\{\unskip\space\ignorespaces}%
        \headlinefont@##1}\fi}%
  \FN@\next@}

%% In the output routine, we redefine \chapter so that it only does a roman
%% numeral (via \chapterno@) rather than "CHAPTER " + roman numeral. And we
%% redefine \\ because if the running head is taken from a title or section
%% head it might possibly contain a \\ from the line-breaking done in the
%% original text.

\headline={\def\chapter#1{\chapterno@. }%
  \def\\{\unskip\space\ignorespaces}\headlinefont@
  \ifodd\pageno \rightheadline \else \leftheadline\fi}

%% Capitalization is used to indicate global scope of \NoRunningHeads
%% and \NoPageNumbers, as is done by amstex.tex for \TagsOnLeft, etc.

\def\NoRunningHeads{\global\runheads@false\global\let\headmark\eat@}
\def\NoPageNumbers{\gdef\folio{}}

%% A user wishing to turn off the logo@ must \def\logo@{}.  We don't
%% provide an easier way to do this because the logo should not
%% normally be turned off.

\def\logo@{\baselineskip2pc \hbox to\hsize{\hfil\eightpoint Typeset by
 \AmSTeX}}

%% Finally, we are ready for the \output routine. It is based on
%% the \plainoutput routine, but the first page normally has the
%% `Typeset by AmS-TeX' logo attached, and we add a switch for
%% running heads.  The default for running heads is "true".

\newif\iffirstpage@     \firstpage@true
\newif\ifrunheads@      \runheads@true

\output={\output@}
\def\output@{\shipout\vbox{%
 \iffirstpage@ \global\firstpage@false
  \pagebody \logo@ \makefootline%
 \else \ifrunheads@ \makeheadline \pagebody
       \else \pagebody \makefootline \fi
 \fi}%
 \advancepageno \ifnum\outputpenalty>-\@MM\else\dosupereject\fi}

%% We begin with ten-point type.

\tenpoint

%% Now we make @ active once again.

\catcode`\@=\active

%% And that's it.

%%\f


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% -17- NOTES                                                               %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% Abbreviations used in this file:                                         %%
%%                                                                          %%
%% From plain.tex:                                                          %%
%%                                                                          %%
%% \p@             1pt, dimen register                                      %%
%% \z@             0pt, dimen register, can be used also as a number        %%
%% \m@ne           -1, count register                                       %%
%%                                                                          %%
%% Chardefs and mathchardefs (these control sequences can be used as        %%
%% numbers):                                                                %%
%% \@ne            1                                                        %%
%% \tw@            2                                                        %%
%% \thr@@          3                                                        %%
%% \active         13                                                       %%
%% \sixt@@n        16                                                       %%
%% \@cclv          255                                                      %%
%% \@cclvi         256                                                      %%
%% \@m             1000                                                     %%
%% \@M             10000                                                    %%
%% \@MM            20000                                                    %%
%%                                                                          %%
%% Scratch registers:                                                       %%
%%                                                                          %%
%% \countdef\count@=255                                                     %%
%% \dimendef\dimen@=0                                                       %%
%% \dimendef\dimen@i=1 % global only                                        %%
%% \dimendef\dimen@ii=2                                                     %%
%% \skipdef\skip@=0                                                         %%
%% \toksdef\toks@=0                                                         %%
%%                                                                          %%
%% Other:                                                                   %%
%%                                                                          %%
%% \m@th           sets \mathsurround=0pt                                   %%
%% \z@skip         0pt plus 0pt minus 0pt, skip register                    %%
%% \hideskip       -1000pt plus 1fill, negative but can grow, skip register %%
%% \centering      0pt plus 1000pt minus 1000pt, skip register              %%
%% \voidb@x        permanently void box register                            %%
%% \endgraf        same as \par, but will be accepted in arguments where    %%
%%                   \par would cause an error.                             %%
%%                                                                          %%
%% \space          a space token                                            %%
%% \empty          a defined macro with a null expansion                    %%
%% \null           an \hbox with null contents                              %%
%%                                                                          %%
%% From amstex.tex:                                                         %%
%%                                                                          %%
%% \W@             \immediate\write16                                       %%
%% \eat@           gobbles next token or group in braces                    %%
%% \strip@         gets rid of trailing space from given argument           %%
%% \hashtoks@      token register, containing #                             %%
%% \centering@     skip register, 0pt plus 1000pt                           %%
%% \rightappend@ ... \to ...       Append to a token list.                  %%
%% \space@         a blank space token.  Not the same as plain.tex \space   %%
%% \relaxnext@     \let\next=\relax                                         %%
%% \ex@            dimen, related to x-height, roughly equal to 1pt         %%
%% \hexnumber@     convert a hex digit from decimal form to hex equivalent  %%
%% \font@          font assignment, like \font but modified to make syntax  %%
%%                   check work                                             %%
%%                                                                          %%
%% \def\FN@{\futurelet\next}
%% \def\DN@{\def\next@}
%% \def\DNii@{\def\nextii@}
%% \def\RIfM@{\relax\ifmmode}
%% \def\RIfMIfI@{\relax\ifmmode\ifinner}
%% \def\setboxz@h{\setbox\z@\hbox}
%% \def\wdz@{\wd\z@}
%% \def\boxz@{\box\z@}
%% \def\setbox@ne{\setbox\@ne}
%% \def\wd@ne{\wd\@ne}
%%
%% More scratch registers:                                                  %%
%%                                                                          %%
%% \toks@@                                                                  %%
%% \count@@                                                                 %%
%% \count@@@                                                                %%
%%                                                                          %%
%%\f



%%%                                                                         %%
%% Someone interested in doing major modifications to AMSPPT.STY, for some
%% use other than submission of papers to the AMS, might want to change
%% the following:
%%%                                                                        %%%
%% \parindent
%% \parskip
%% \pagewidth
%% \pageheight
%% \normallineskiplimit
%%
%% In \tenpoint and \eightpoint:
%% \normalbaselineskip, \normallineskip,
%% \abovedisplayskip, \belowdisplayskip,
%% \abovedisplayshortskip, \belowdisplayshortskip
%%
%% Topmatter:
%% \title, \chapter, \author, \affil, \address, \date, \thanks,
%% \keywords, \subjclass, \abstract, \toc, \email, \dedicatory, \translator
%% --spacing and order of all the above.
%%
%% \proclaim, \endproclaim,
%% \demo, \enddemo, \qed
%% \definition, \enddefinition,
%% \example, \endexample,
%% \remark, \endremark
%%
%% Enddocument:
%% \translator, \address, \email spacing and order
%%
%% \specialhead
%% \head
%% \subhead
%% \subsubhead
%%
%% \footmarkform@, \makefootnote
%% \cite
%% spacing and formatting of the \items in \roster
%% \indenti (used by \block, \caption, \abstract)
%%
%% \Refs (including the default heading)
%% \ifpaperquotes@ and \ifbookquotes@, in refs
%% order and formatting of elements in each \ref
%% \output routine: spacing of running heads, and the footnotes at the
%%      bottom of the first page of an article.
%%
%%%
%% Finally, in style files meant for journals, etc., rather than for
%% preprints, it may be desirable to disable some of the constructions
%% from AMSTEX.TEX that allow style changes.  For example, one might
%%%                                                                         %%
%%   \def\taboo@#1{\errmessage                                              %%
%%    {Sorry, \string#1 can't be used in this style}}                       %%
%%   \def\default@#1{\immediate\write\sixt@@n                               %%
%%    {\string#1\space is unnecessary; it is the default for this style.}}  %%
%%%                                                                         %%
%% and then type things like                                                %%
%%%                                                                         %%
%%   \taboo@\pageheight                                                     %%
%%   \taboo@\TagsOnRight                                                    %%
%%   \default@\TagsOnLeft                                                   %%
%%%                                                                         %%
%% The constructions in question are                                        %%
%%%                                                                         %%
%%   \pageheight, \pagewidth                                                %%
%%   \hcorrection, \vcorrection                                             %%
%%   \LimitsOnSums, \NoLimitsOnSums                                         %%
%%   \LimitsOnInts, \NoLimitsOnInts                                         %%
%%   \LimitsOnNames, \NoLimitsOnNames                                       %%
%%   \ChangeBuffer, \ResetBuffer                                            %%
%%   \TagsOnLeft, \TagsOnRight                                              %%
%%   \CenteredTagsOnSplits, \TopOrBottomTagsOnSplits                        %%
%%   \MultlineGap                                                           %%
%%%                                                                         %%
%%   \TagAsMath and \TagsAsText probably should be allowed, because they    %%
%%   don't change the style, only the input.                                %%
%%%                                                                         %%
\endinput