summaryrefslogtreecommitdiff
path: root/macros/amstex/doc/amsppt.txt
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/amstex/doc/amsppt.txt
Initial commit
Diffstat (limited to 'macros/amstex/doc/amsppt.txt')
-rw-r--r--macros/amstex/doc/amsppt.txt1447
1 files changed, 1447 insertions, 0 deletions
diff --git a/macros/amstex/doc/amsppt.txt b/macros/amstex/doc/amsppt.txt
new file mode 100644
index 0000000000..87023e00e7
--- /dev/null
+++ b/macros/amstex/doc/amsppt.txt
@@ -0,0 +1,1447 @@
+% AMSPPT.STY VERSION 2.0
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% %%
+%% This is the documentation for AMSPPT.STY, the AmS-TeX `preprint style'. %%
+%% It 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. %%
+%% %%
+%% Some explanations given earlier in the file will be required at later %%
+%% points. Boxes like this are sometimes used for such explanations. %%
+%% %%
+%% Material from AMSTEX.DOC, the documentation file for AMSTEX.TEX may also %%
+%% be used. %%
+%% %%
+%% As in AMSTEX.DOC, TB refers to The Texbook. %%
+%% %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\catcode`\@=11
+
+%% We record the style name in \styname and the version in \styversion,
+!!!%% and then report them to the screen and log file.
+
+\def\styname{amsppt}
+\def\styversion{2.0}
+{\W@{}\W@{AMSPPT.STY - Version \styversion}\W@{}}
+
+%% 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.
+
+\ifx\amspptloaded@\relax\catcode`\@=\active
+ \endinput\else\let\amspptloaded@\relax\fi
+
+%% First we set up some basic parameters, which are different than in
+%% plain. The values are common to several AMS journals, including the
+%% Journal of the AMS.
+
+\parindent1pc \hsize30pc \vsize47.5pc \normallineskiplimit\p@
+
+%% As mentioned in AMSTEX.DOC, \captionwidth@ has to be reset for the new
+%% \hsize.
+
+\def\setcaptionwidth@{\captionwidth@\hsize \advance\captionwidth@-6pc}
+\setcaptionwidth@
+
+!!%% Provide a way to change the page height and width; changing the page
+!!%% width automatically adjusts the caption width as well. (\pagewidth
+!!%% in AMSTEX.TEX resets the caption width to a different value than is
+!!%% used in AMS journals.)
+!!
+!!\def\changepageheight#1{\vsize=#1}
+!!\def\changepagewidth#1{\hsize=#1\setcaptionwidth@}
+
+%% We need the cmcsc10 font. Although \tensmc appears in AMSTEX.TEX, it
+%% never actually got declared. Supply the cmcsc8 font too; it will be
+%% included in the AMSFonts collection. We use \font@, not simply \font,
+%% as already explained in AMSTEX.DOC.
+
+\font@\tensmc=cmcsc10
+\font@\eightsmc=cmcsc8
+
+%% We have to load a lot of other fonts for the eight-point footnotes. Note
+%% that cmti and cmsl in sizes 5, 6, 7 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). Instructions for
+!!%% loading nine-point fonts are present, but commented out, as they are not
+!!%% required in the preprint style; however, if a user wishes to use nine-point
+!!%% fonts, the comment characters can be removed and \ninepoint defined on the
+!!%% model of \tenpoint and \eightpoint below.
+
+%\font@\ninerm=cmr9
+\font@\eightrm=cmr8
+\font@\sixrm=cmr6
+%\font@\ninei=cmmi9 \skewchar\ninei='177
+\font@\eighti=cmmi8 \skewchar\eighti='177
+\font@\sixi=cmmi6 \skewchar\sixi='177
+%\font@\ninesy=cmsy9 \skewchar\ninesy='60
+\font@\eightsy=cmsy8 \skewchar\eightsy='60
+\font@\sixsy=cmsy6 \skewchar\sixsy='60
+%\font@\ninebf=cmbx9
+\font@\eightbf=cmbx8
+\font@\sixbf=cmbx6
+%\font@\nineit=cmti9
+\font@\eightit=cmti8
+%\font@\ninesl=cmsl9
+\font@\eightsl=cmsl8
+
+%% We will load the basic sizes of the msam, msbm and eufm fonts as well
+%% as the names of all the symbols. If these are really not needed, or
+%% space is a problem, a user can comment out these lines without making
+%% any other changes.
+
+\loadmsam
+\loadmsbm
+\loadeufm
+\UseAMSsymbols
+
+%% We will only load the additional point sizes for the msam, msbm, and
+%% eufm families if the flags \ifmsamloaded@, etc., are true (since
+%% presumably this was done by a user who has the proper families).
+%% As above, instructions for nine-point fonts are present but commented out.
+
+\ifmsamloaded@
+% \font@\ninemsa=msam9
+ \font@\eightmsa=msam8
+ \font@\sixmsa=msam6
+\fi
+ \ifmsbmloaded@
+% \font@\ninemsb=msbm9
+ \font@\eightmsb=msbm8
+ \font@\sixmsb=msbm6
+\fi
+
+\ifeufmloaded@
+% \font@\nineeufm=eufm9
+ \font@\eighteufm=eufm8
+ \font@\sixeufm=eufm6
+\fi
+
+%% In order to be able to load additional sizes of the Euler fonts that
+%% are not included automatically, we need to be able to test whether the
+%% basic sizes have been loaded, and if they haven't, create a new switch.
+%% Since this will be performed inside another macro, we need a \newif that
+%% isn't outer. We repeat the definition of \@if from plain, for completeness.
+
+% from plain.tex; we need a \newif that isn't outer.
+\def\@newif#1{\count@\escapechar \escapechar\m@ne
+ \expandafter\expandafter\expandafter
+ \edef\@if#1{true}{\let\noexpand#1=\noexpand\iftrue}%
+ \expandafter\expandafter\expandafter
+ \edef\@if#1{false}{\let\noexpand#1=\noexpand\iffalse}%
+ \@if#1{false}\escapechar\count@} % the condition starts out false
+\def\@if#1#2{\csname\expandafter\if@\string#1#2\endcsname}
+
+%% We define a test that will determine whether or not a \cs is defined
+%% (TB, p. 308).
+
+\def\ifundefined#1{\expandafter\ifx\csname#1\endcsname\relax }
+
+%% We define a routine to create a new \if... if a tested \if... name
+%% is not already defined, and apply it to all the Euler fonts that are
+%% not loaded automatically.
+
+\def\makeflag#1{\expandafter\@newif\csname if#1\endcsname
+ \csname #1false\endcsname}
+\ifundefined{ifeufbloaded@}\makeflag{eufbloaded@}\fi
+\ifundefined{ifeusmloaded@}\makeflag{eusmloaded@}\fi
+\ifundefined{ifeusbloaded@}\makeflag{eusbloaded@}\fi
+\ifundefined{ifeurmloaded@}\makeflag{eurmloaded@}\fi
+\ifundefined{ifeurbloaded@}\makeflag{eurbloaded@}\fi
+
+%% Now we define \tenpoint and \eightpoint for regular text and footnotes,
+%% similarly to TB, p. 414. We keep track of the point size in a control
+%% sequence \pointsize@, because a couple of constructions need to know the
+%% point size we are in (and other constructions added later, or in other
+%% styles, might need this). We not only change the \baselineskip, but also
+%% change the glue above and below displayed formulas, in case the footnotes
+%% happen to have them. We also need to set not only \strutbox, but also
+%% \strutbox@. 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 gobble up things with the proper syntax,
+%% instead of worrying about getting the right sizes. In general, \big is
+%% \tenbig or \eightbig, which are defined immediately afterwards.
+
+\def\tenpoint{\def\pointsize@{10}%
+ \normalbaselineskip12\p@
+ \abovedisplayskip12\p@ plus3\p@ minus9\p@
+ \belowdisplayskip12\p@ plus3\p@ minus9\p@
+ \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
+ \ifsyntax@\def\big##1{{\hbox{$\left##1\right.$}}}\else
+ \let\big\tenbig@
+ \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@@=\tenex
+ \scriptscriptfont\thr@@=\tenex
+ \textfont\itfam=\tenit %% \scriptfont and \scriptscriptfont for \itfam
+ %% are already set by AMSTEX.TEX, and there's no point trying to make
+ %% changes, since we probably don't have the right sizes.
+ \textfont\slfam=\tensl %% Similarly for \slfam.
+ \textfont\bffam=\tenbf \scriptfont\bffam=\sevenbf
+ \scriptscriptfont\bffam=\fivebf
+ \ifmsamloaded@
+ \textfont\msafam=\tenmsa \scriptfont\msafam=\sevenmsa
+ \scriptscriptfont\msafam=\fivemsa
+ \fi
+ \ifmsbmloaded@
+ \textfont\msbfam=\tenmsb \scriptfont\msbfam=\sevenmsb
+ \scriptscriptfont\msbfam=\fivemsb
+ \fi
+ \ifeufmloaded@
+ \textfont\eufmfam=\teneufm \scriptfont\eufmfam=\seveneufm
+ \scriptscriptfont\eufmfam=\fiveeufm
+ \fi
+ \ifeufbloaded@
+ \textfont\eufbfam=\teneufb \scriptfont\eufbfam=\seveneufb
+ \scriptscriptfont\eufbfam=\fiveeufb
+ \fi
+ \ifeusmloaded@
+ \textfont\eusmfam=\teneusm \scriptfont\eusmfam=\seveneusm
+ \scriptscriptfont\eusmfam=\fiveeusm
+ \fi
+ \ifeusbloaded@
+ \textfont\eusbfam=\teneusb \scriptfont\eusbfam=\seveneusb
+ \scriptscriptfont\eusbfam=\fiveeusb
+ \fi
+ \ifeurmloaded@
+ \textfont\eurmfam=\teneurm \scriptfont\eurmfam=\seveneurm
+ \scriptscriptfont\eurmfam=\fiveeurm
+ \fi
+ \ifeurbloaded@
+ \textfont\eurbfam=\teneurb \scriptfont\eurbfam=\seveneurb
+ \scriptscriptfont\eurbfam=\fiveeurb
+ \fi
+ \ifcmmibloaded@
+ \textfont\cmmibfam=\tencmmib \scriptfont\cmmibfam=\sevencmmib
+ \scriptscriptfont\cmmibfam=\fivecmmib
+ \fi
+ \ifcmbsyloaded@
+ \textfont\cmbsyfam=\tencmbsy \scriptfont\cmbsyfam=\sevencmbsy
+ \scriptscriptfont\cmbsyfam=\fivecmbsy
+ \fi
+ \fi %% Matches \ifsyntax@.
+ \setbox\strutbox\hbox{\vrule height8.5\p@ depth3.5\p@ width\z@}%
+ \setbox\strutbox@\hbox{\vrule height8\p@ depth3\p@ width\z@}%
+ \normalbaselines\tenrm\ex@=.2326ex}
+
+%% For \eightpoint we don't change the assignments of \scriptscriptstyle,
+%% since these don't change from \tenpoint (and we call \tenpoint near the
+%% end). \textfont3 also doesn't change (an \eightex font will be included
+%% in the AMSFonts collection, and can be added by the user).
+
+\def\eightpoint{\def\pointsize@{8}%
+ \normalbaselineskip10\p@
+ \abovedisplayskip10\p@ plus2.4\p@ minus7.2\p@
+ \belowdisplayskip10\p@ plus2.4\p@ minus7.2\p@
+ \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
+ \ifsyntax@\def\big##1{{\hbox{$\left##1\right.$}}}\else
+ \let\big\eightbig@
+ \textfont\z@=\eightrm \scriptfont\z@=\sixrm
+ \textfont\@ne=\eighti \scriptfont\@ne=\sixi
+ \textfont\tw@=\eightsy \scriptfont\tw@=\sixsy
+ %% Although we don't have smaller fonts for \itfam or \slfam, we reset
+ %% the \scriptfont and \scriptscriptfonts to the text size so that they
+ %% won't appear in ten-point if they are used.
+ \textfont\itfam=\eightit \scriptfont\itfam=\eightit
+ \scriptscriptfont\itfam=\eightit
+ \textfont\slfam=\eightsl \scriptfont\slfam=\eightsl
+ \scriptscriptfont\slfam=\eightsl
+ \textfont\bffam=\eightbf \scriptfont\bffam=\sixbf
+ \ifmsamloaded@
+ \textfont\msafam=\eightmsa \scriptfont\msafam=\sixmsa
+ \fi
+ \ifmsbmloaded@
+ \textfont\msbfam=\eightmsb \scriptfont\msbfam=\sixmsb
+ \fi
+ \ifeufmloaded@
+ \textfont\eufmfam=\eighteufm \scriptfont\eufmfam=\sixeufm
+ \fi
+ \fi
+ \setbox\strutbox\hbox{\vrule height7\p@ depth3\p@ width\z@}%
+ \setbox\strutbox@\hbox{\vrule height6.5\p@ depth2.5\p@ width\z@}%
+ \normalbaselines\eightrm\ex@.2326ex}
+
+%% Fix Plain's \bigl, \Bigl, etc. macros so that they try to scale with
+%% size changes. This uses the fact that \tenpoint and \eightpoint
+%% set \ht\strutbox to be 70% of the normal unstretched baselineskip.
+%% from John Hobby
+
+\def\big#1{{\hbox{$\m@th
+ \left#1\vcenter to1.428\ht\strutbox{}\right.\n@space$}}}
+\def\Big#1{{\hbox{$\m@th
+ \left#1\vcenter to2.142\ht\strutbox{}\right.\n@space$}}}
+\def\bigg#1{{\hbox{$\m@th
+ \left#1\vcenter to2.857\ht\strutbox{}\right.\n@space$}}}
+\def\Bigg#1{{\hbox{$\m@th
+ \left#1\vcenter to3.571\ht\strutbox{}\right.\n@space$}}}
+
+%% Although the counter \footmarkcount@ is declared in AMSTEX.TEX, the rest
+%% of \footnote has to be done here. \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; our footnotes will begin
+%% unindented, and instead of adding a \strut at the end, we will just add
+%% the lower part of the strut. (And, of course, we will be in eight point
+%% type.)
+
+\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@
+ \noindent{#1}\footstrut\ignorespaces#2\unskip\lower\dp\strutbox
+ \vbox to\dp\strutbox{}}}
+
+%% We need a counter for footnotes; initialize it.
+
+\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@{\global\advance\footmarkcount@\@ne
+ \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}
+
+%% The \topmatter ... \endtopmatter syntax was created to go along with
+%% LaTeX, but \topmatter actually has no function.
+
+\let\topmatter\relax
+
+!!!!!!!!!!
+
+%% The constructions \title, \author, \affil and \heading use `\z@\filhss@'
+%% instead of \hfil or \hss glue explicitly, so that if they are followed by
+%% \overlong they can let \filhss@ be `plus1000pt minus1000pt' (so that a
+%% line longer than \hsize will just be centered outside the margins), but
+%% otherwise they let \filhss@ simply be `plus1000pt' (so that a line longer
+%% than \hsize will actually be reported as Overfull). Like \vspace, etc.,
+%% in AMSTEX.TEX, this should give an error message when used incorrectly,
+%% and we abbreviate the proper definition. The definition involves \next@
+%% and \nextii@, because \overlong@ is always used in constructions with
+%% compressed format that end \futurelet\next\next@, use \overlong to define
+%% \next@, and then define \nextii@ appropriately.
+
+
+\Invalid@\overlong
+\def\overlong@{\DN@{\ifx\next\overlong
+ \def\filhss@{plus\@m\p@ minus\@m\p@}\DN@\overlong{\nextii@}%
+ %% When \overlong appears [the new value of] \next@ must
+ %% kill \overlong and then call \nextii@.
+ \else\def\filhss@{plus\@m\p@\relax}\let\next@\nextii@\fi
+ \next@}}
+
+%% We need a box to store the title. We make it empty if no title appears,
+%% so that at least some space appears for the title (presumably the author
+%% simply hasn't decided on the title yet).
+
+\newbox\titlebox@
+\setbox\titlebox@\vbox{}
+
+%% Although we use the syntax \author ... \endauthor, we simply use
+%% \endauthor as a delimiter for the argument, as with \align, rather than
+%% doing \bgroup and \egroup tricks, as with \aligned. And we simply say
+%% \let\\=\cr, since we shouldn't have to worry about any of the problems
+%% that make \Let@ necessary. But there is a particular reason, beyond
+%% convenience, for writing things this way. If one wanted to have a \TITLE
+%% construction, that applied \uppercase to everything, then \TITLE would
+%% have to be written this way. [\TITLE is a nice idea, because then the
+%% title can appear in upper- and lowercase in the input file (for automatic
+%% indexing, for example), but all uppercase in the paper. However, there
+%% would actually be some horrible problems involved in writing TITLE
+%% correctly. For example, math formulas might appear in a title, and we'd
+%% have to arrange not to uppercase them. Moreover, footnotes might appear,
+%% since some styles use footnotes on authors for the affiliation, etc., and
+%% then the footnotes mustn't be uppercased either! Any one who wants this
+%% can do it Eirself.]
+
+\def\title{\relaxnext@
+ \DNii@##1\endtitle{{\let\\=\cr
+ \global\setbox\titlebox@\vbox{\tabskip\z@\filhss@
+ \halign to\hsize{\tenpoint\bf\hfil\ignorespaces####\unskip\hfil\cr##1\cr}}}}%
+ \overlong@
+ \futurelet\next\next@}
+
+%% \author@ is almost exactly the same, except that instead of having
+%% \authorbox@ empty when no \author appears, we have a flag to tell if it
+%% appears.
+
+\newif\ifauthor@
+\newbox\authorbox@
+\def\author{\relaxnext@
+ \DNii@##1\endauthor{{\let\\=\cr
+ \global\setbox\authorbox@\vbox{\tabskip\z@\filhss@
+ \halign to\hsize{\tenpoint\smc\hfil\ignorespaces####\unskip\hfil\cr##1\cr
+ }}}}\overlong@\global\author@true
+ \futurelet\next\next@}
+
+%% \affil, on the other hand, is written in the \bgroup ... \egroup style,
+%% since one presumably wouldn't ever want to uppercase everything here.
+
+\newif\ifaffil@
+\newbox\affilbox@
+\def\affil{\relaxnext@
+ \DNii@{\bgroup\let\\=\cr
+ \global\setbox\affilbox@\vbox\bgroup\tabskip\z@\filhss@
+ \halign to\hsize\bgroup\tenpoint\hfil\ignorespaces####\unskip\hfil\cr}%
+ \overlong@
+ \global\affil@true
+ \futurelet\next\next@}
+
+\def\endaffil{\cr\egroup\egroup\egroup}
+
+%% 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{\global\advance\addresscount@\@ne
+ \expandafter\gdef\csname address\number\addresscount@\endcsname
+ %% The first address is `\address1', the next is `\address2', etc.
+ {\noindent\eightpoint\ignorespaces#1\par}}
+
+%% We use flags to tell if \date and \thanks have been used, in which case
+%% \date@ and \thanks@, respectively, have been defined.
+
+\newif\ifdate@
+
+\def\date#1{\global\date@true\gdef\date@{\tenpoint\ignorespaces#1\unskip}}
+
+\newif\ifthanks@
+
+\def\thanks#1{\global\thanks@true
+ \gdef\thanks@{\eightpoint\ignorespaces#1\unskip}}
+
+%% \nofrills and \usualspace are subsidiary features that some constructions
+%% can have, but which should give error message if used otherwise.
+
+\Invalid@\nofrills
+\Invalid@\usualspace
+
+%% \nofrills@ is the control sequence that does the work of making \nofrills
+%% work correctly. \nofrills@ will take two arguments; the first represents
+%% the text that should be typeset `without frills', while the second is just
+%% a convenient control sequence name, which we put at the beginning of the
+%% construction in question. This control sequence will be defined to be the
+%% first argument of \nofrills@ if \nofrills follows the construction, but
+%% simply \relax otherwise. (We choose different control sequences for each
+%% construction in case one occurs within another.)
+
+%% Like \overlong, \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@.
+
+\newif\ifnofrills@
+\def\nofrills@#1#2{\DN@{\ifx\next\nofrills\nofrills@true\let#2\relax
+ \DN@\nofrills{\nextii@}%
+ %% When \nofrills appears, the control sequence #2 is just relax, and
+ %% \next@ must kill off \nofrills before calling \nextii@.
+ \else\nofrills@false
+ \def#2{#1}%
+ %% When \nofrills doesn't appear, the control sequence #2 is #1.
+ \let\next@\nextii@\fi\next@}}
+
+%% \usualspace@ simply defines \usualspace when no frills have been specified
+%% (and otherwise does nothing).
+
+\def\usualspace@#1{\ifnofrills@\def\usualspace{#1}\fi}
+
+%% As an example of all this, consider \keywords, which creates
+%% \thekeywords@. Normally \keywords makes \thekeywords@ begin with {\it
+%% Keywords.\enspace}. But \keywords\nofrills{...} makes it begin with ...
+%% instead. Moreover, \usualspace will then be defined as {\it\enspace}.
+
+\def\thekeywords@{}
+\def\keywords{\relaxnext@
+ \nofrills@{{\it Keywords.\enspace}}\keywords@
+ \DNii@##1{\def\thekeywords@{\usualspace@{{\it\enspace}}\noindent
+ \eightpoint\keywords@\ignorespaces##1\par}}%
+ \futurelet\next\next@}
+
+%% \subjclass is exactly analogous.
+
+\def\thesubjclass@{}
+\def\subjclass{\relaxnext@
+ \nofrills@{{\rm1980 {\it Mathematics subject
+ classifications\/}: }}\subjclass@
+ \DNii@##1{\def\thesubjclass@{\usualspace@
+ {{\rm\spacefactor2000 \space}}\noindent\eightpoint
+ \subjclass@\ignorespaces##1\par}}%
+ \futurelet\next\next@}
+
+%% \proclaim and \endproclaim have a special problem: We want them to be
+%% allowed within \abstract{...} but we want them to be \outer afterwards. So
+%% we will actually define \innerproclaim@ and \innerendproclaim@ (later) and
+%% temporarily use these for \proclaim and \endproclaim, until \endtopmatter
+%% (which naturally should appear after any \abstract), which will make them
+%% outer again.
+
+\def\proclaim{\innerproclaim@}
+\def\endproclaim{\innerendproclaim@}
+
+%% \abstract is similar to the constructions above, but we need a \long\def
+%% since an abstract can be more than one paragraph.
+
+\newif\ifabstract@
+\def\abstract{\relaxnext@
+ \nofrills@{{Abstract.\enspace}}\abstract@
+ \long\DNii@##1{\long\gdef\theabstract@{\usualspace@
+ {{\eightpoint\enspace}}\eightpoint\abstract@\ignorespaces##1\par}}%
+ \global\abstract@true
+ \futurelet\next\next@}
+
+%% We create empty entries \pretitle, ..., \prepaper among the other parts of
+%% the \topmatter so that users can insert things between them if necessary.
+
+\let\pretitle\relax
+\let\preauthor\relax
+\let\preaffil\relax
+\let\predate\relax
+\let\preabstract\relax
+\let\prepaper\relax
+
+%% \endtopmatter now puts all of these things together on the page.
+
+\def\endtopmatter{\hrule height\z@\vskip-\topskip %% Go to very top of page.
+ \pretitle
+ \vskip24\p@ plus12\p@ minus12\p@
+ \unvbox\titlebox@ %% Title (or empty box).
+ \preauthor
+ \ifauthor@\vskip12\p@ plus6\p@ minus3\p@\unvbox\authorbox@\fi
+ %% Put in \author, and spacing, if specified.
+ \preaffil
+ \ifaffil@\vskip10\p@ plus5\p@ minus2\p@\unvbox\affilbox@\fi
+ %% Put in \affil, and spacing, if specified.
+ \predate
+ \ifdate@\vskip6\p@ plus2\p@ minus\p@\hbox to\hsize{\hfil\date@\hfil}\fi
+ %% Put in \date, and spacing, if specified.
+ \preabstract
+ \ifthanks@\makefootnote@{}{\thanks@}\fi
+ %% If \thanks given, treat it as a footnote text (with no footnote mark).
+ \ifabstract@\vskip15\p@ plus12\p@ minus12\p@
+ %% If \abstract given, put in spacing and then print \theabstract@ with
+ %% 24pt margins at each side. In order for \tag's to come out at the
+ %% new margins, we have to have \displaywidth decreased by 48pt and
+ %% \displayindent set to 24pt (see the rules in TB, pp. 188--189). Since
+ %% \displaywidth and \displayindent are normally set at each $$, we
+ %% have to use \everydisplay to get the desired values.
+ {\leftskip24\p@\rightskip24\p@
+ \everydisplay{\advance\displaywidth-48\p@\displayindent20\p@}
+ \noindent\theabstract@}\fi
+ \prepaper
+ %% Now make \proclaim and \endproclaim \outer.
+ \outer\def\proclaim{\innerproclaim@}%
+ \outer\def\endproclaim{\innerendproclaim@}%
+ \vskip18\p@ plus12\p@ minus6\p@\tenpoint}
+
+%% The \address's get printed at the end of the paper, so we take care of this
+%% with \enddocument.
+
+\outer\def\enddocument{\nobreak %% No break between the References and
+ %% the final matter.
+ \sfcode`\.=3000 %% Return space factor code of period (changed by \Refs).
+ \vskip12\p@ minus6\p@
+ \thekeywords@\thesubjclass@ %% Keywords and subject classifications,
+ %% if they exist.
+ \nobreak\vskip12\p@ minus6\p@
+ \count@\z@
+ \loop\ifnum\count@<\addresscount@\advance\count@\@ne
+ \csname address\number\count@\endcsname\repeat
+ %% Print all the \address's.
+ \vfill\supereject\end}
+
+%% \heading ... \endheading is similar to \affil .. \endaffil, except that
+%% \bigbreak is added at the beginning, and \endheading actually prints the
+%% \headingbox@, followed by \nobreak\medskip. We \unvbox the \headingbox@,
+%% so that a footnote within it will migrate properly.
+
+\newbox\headingbox@
+
+\outer\def\heading{\relaxnext@
+ \DNii@{\bigbreak\bgroup\let\\=\cr
+ \global\setbox\headingbox@\vbox\bgroup\tabskip\z@\filhss@
+ \halign to\hsize\bgroup\tenpoint\smc\hfil\ignorespaces####\unskip\hfil\cr}%
+ \overlong@
+ \futurelet\next\next@}
+
+\def\endheading{\cr\egroup\egroup\egroup\unvbox\headingbox@
+ \nobreak\medskip}
+
+%% \subheading is simpler, though it allows \nofrills.
+
+\def\subheading{\relaxnext@
+ \nofrills@{.\enspace}\subheading@
+ \DNii@##1{\medbreak\noindent{\usualspace@{{\bf\enspace}}%
+ \tenpoint\bf\ignorespaces##1\unskip\subheading@}\ignorespaces}%
+ \futurelet\next\next@}
+
+%% \innerproclaim@ (the guy behind \proclaim), sets a flag so that we can
+%% give an error message if a previous \proclaim has occurred without an
+%% \endproclaim (surely an error, since the \endproclaim would be needed to
+%% turn off the \sl font). If we are in eight point type (probably because we
+%% are in the abstract, rather than in a footnote), we replace the \smc font
+%% by \uppercase{\rm...} as the nearest substitute. Instead of writing the
+%% test as \ifnum\pointsize@=8 we use a construction that will work even if
+%% \pointsize@ has other values (say, for fractional point sizes) in other
+%% formats.
+
+%% Note that in the error message we say \string\\proclaim instead of
+%% \string\proclaim. That is because \proclaim will usually be \outer, so
+%% can't appear in \Err@, while \\ always can. We then have to \eat@ the
+%% first \ of the \\, requiring an \expandafter\eat@\string\\ construction.
+
+\newif\ifproclaim@
+
+\def\innerproclaim@{\relaxnext@
+ \nofrills@{.\enspace}\proclaim@
+ \DNii@##1{\medbreak\noindent
+ \DN@{8}\ifx\pointsize@\next@ %% If \pointsize@ is 8,
+ \uppercase{\usualspace@{{\rm\enspace}}\rm\ignorespaces##1\unskip\proclaim@}%
+ %% use an \uppercase construction.
+ \else
+ \usualspace@{{\smc\enspace}}\smc\ignorespaces##1\unskip\proclaim@\fi
+ %% After printing the name of the theorem, switch to \sl.
+ \sl
+ \ifproclaim@\Err@{Previous \expandafter\eat@\string\\proclaim
+ has no matching \expandafter\eat@\string\\endproclaim}\else
+ \proclaim@true\fi\ignorespaces}%
+ \futurelet\next\next@}
+
+%% \innerendproclaim@ (the guy behind \endproclaim) resets the \ifproclaim@
+%% flag, 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 hardly seems a problem worth worrying about.)
+
+\def\innerendproclaim@{\proclaim@false\par\rm
+ \ifdim\lastskip<\medskipamount\removelastskip\penalty55 \medskip\fi}
+
+%% \demo, like \innerproclaim@, replaces the \smc font by \uppercase{\rm...}
+%% (I didn't expect any one to use \demo in eight point type, but some one
+%% has already claimed that he did). We also take the opportunity again to
+%% issue an error message if a previous \proclaim has no matching
+%% \endproclaim.
+
+\def\demo{\relaxnext@
+ \nofrills@{:\enspace}\demo@
+ \DNii@##1{\par\ifdim\lastskip<\smallskipamount\removelastskip
+ \smallskip\fi\noindent
+ \DN@{8}\ifx\pointsize@\next@
+ \uppercase{\usualspace@{{\rm\enspace}}\rm\ignorespaces##1\unskip\demo@}%
+ \else
+ \usualspace@{{\smc\enspace}}\smc\ignorespaces##1\unskip\demo@\fi
+ \rm
+ \ifproclaim@\Err@{Previous \expandafter\eat@\string\\proclaim
+ had no matching \expandafter\eat@\string\\endproclaim}\fi
+ \ignorespaces}%
+ \futurelet\next\next@}
+
+%% \enddemo is easy.
+
+\def\enddemo{\par\smallskip}
+
+%% \qed adjusts the spacing for use within a displayed formula (the proper
+%% usage when the displayed formula ends the \demo). However, it looks as if
+%% the proper spacing won't be made when we use \qed as the last line of an
+%% \align, so something should probably be done about this.
+
+\def\qed{\ifhmode\unskip\nobreak\fi\ifmmode\ifinner\else\hskip5\p@\fi\fi
+ \hbox{\hskip5\p@\vrule width4\p@ height6\p@ depth1.5\p@\hskip\p@}}
+
+%% \cite has to see if a comma appears.
+
+\def\cite#1{\DNii@##1,##2\end@{{\rm[{\bf##1}, ##2]}}%
+ \in@,{#1}\ifin@\DN@{\nextii@#1\end@}\else
+ \DN@{{\rm[{\bf#1}]}}\fi\next@}
+
+%% \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{\futurelet\next\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@ 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.
+ \futurelet\next\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.
+ \futurelet\next\next@}
+
+%% Rember 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 indentation.
+ \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@}%
+ \futurelet\next\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{\futurelet\next\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.
+ \futurelet\next\next@}
+
+%% \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. In addition,
+%% \refskip@ will be defined as \hskip 1sp \hskip-1sp. Recall that \refskip@
+%% appears in the definition of \nolinebreak in AMSTEX.TEX, although it
+%% simply has the value \relax there. The exact reasons for redefining
+%% \refskip@ will appear later, but the main point is that it is easy to
+%% recognize, since presumably no user would actually use an \hskip-1sp.
+%% The change to eight point type is preceded by a \bgroup, which will be
+%% closed by an \egroup in \endRefs.
+
+\outer\def\Refs{\relaxnext@\def\refskip@{\hskip\@ne sp\hskip\m@ne sp}%
+ %% The next two lines are the substitute for \nofrills@.
+ \DN@{\ifx\next\nofrills\DN@\nofrills{\nextii@}\else
+ \DN@{\nextii@{References}}\fi\next@}%
+ \DNii@##1{\bigbreak\hbox to\hsize{\hfil\tenpoint
+ \smc\ignorespaces##1\unskip\hfil}\nobreak
+ \bigskip\bgroup\eightpoint\sfcode`.=\@m}%
+ \futurelet\next\next@}
+
+%% The following macros to set the references 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@ holds the author, whether called by \by or by \manyby; \bookbox@
+%% holds the book title, whether called by \book, or by \inbook; \pagesbox@
+%% holds the pages, whether called by \pages or by \page.
+
+\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@
+
+%% We also need a box to store the author's name for later use when
+%% it has been called by \bymany.
+
+\newbox\bysamebox@
+
+%% Next we define flags to tell if various bits of information have been
+%% specified.
+
+\newif\ifno@
+\newif\ifkey@
+\newif\ifby@
+\newif\ifmanyby@
+\newif\ifbysame@
+\newif\ifpaper@
+\newif\ifpaperinfo@
+\newif\ifjour@
+\newif\ifvol@
+\newif\ifissue@
+\newif\ifyr@
+\newif\iftoappear@
+\newif\ifpages@
+\newif\ifpage@
+\newif\ifbook@
+\newif\ifinbook@
+\newif\ifbookinfo@
+\newif\ifpubl@
+\newif\ifpubladdr@
+\newif\iffinalinfo@
+
+%% In addition, certain other flags will be needed to get the processing
+%% right.
+
+%% \ifafterbook@ is needed to tell if we've just finished typesetting a book
+%% title, so that right double quotes '' should go after it; we can't put in
+%% the '' immediately, because we will need either a period or comma,
+%% depending on whether any other information follows. (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\ifafterbook@
+
+%% Other flags are needed because of the \moreref construction, which
+%% requires subsequent parts of the \ref to be treated somewhat differently.
+
+\newif\iffirstref@
+\newif\iflastref@
+\newif\ifprevjour@
+\newif\ifprevbook@
+\newif\ifprevinbook@
+\newif\ifnojourinfo@
+
+%% When \bysame is used, the author's name will be replaced by a rule having
+%% the same width as the author's name that was specified by the previous
+%% \manyby. However, we want to put a maximum limit on this size, which we
+%% store in \maxbysamerule@.
+
+\newdimen\maxbysamerule@
+\maxbysamerule@1in
+
+%% Each \ref has to initialize various things; we abbreviate all these by
+%% \ref@, which will also add a \bgroup, whose role we will see later.
+
+\def\ref@{\global\no@false \global\key@false \global\by@false
+ \global\bysame@false \global\paper@false \global\paperinfo@false
+ \global\jour@false \global\vol@false \global\issue@false
+ \global\yr@false \global\toappear@false \global\pages@false \global\page@false
+ \global\book@false \global\inbook@false
+ \global\bookinfo@false \global\publ@false \global\publaddr@false
+ \global\finalinfo@false
+ \bgroup\ignorespaces}
+
+%% \moreref should have a meaning only if used properly within a \ref.
+
+\Invalid@\moreref
+
+%% Each \ref will be \outer. We start with \begingroup, just to be on the
+%% safe side, and make things easy; begin a nonindented paragraph; initialize
+%% \iffirstref@ and \iflastref@, which are special, and aren't handled by
+%% \ref@, but specially by \moreref and \endref; and then do the
+%% initializations of \ref@ --- remember that this adds \bgroup\ignorespaces.
+
+\outer\def\ref{\begingroup
+ \noindent\hangindent20\p@\hangafter\@ne\firstref@true
+ \lastref@false\def\moreref{\egroup\endref@\global\firstref@false\ref@}\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 noindented paragraph.
+
+%% The basic idea behind all the following constructions is the following.
+%% If we type \no 3 \anothercontrolsequence, then this must somehow set
+%% \ifno@ true and set \nobox@ to be \hbox{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. (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 \egroup.
+%% That is why \ref@ starts with \bgroup\ignorespaces, so that the first of
+%% the control sequences called simply creates an empty group.
+
+%% 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 it will have to set \no@true, \key@true and boxes \nobox@,
+%% \keybox@, etc. So we have to use plenty of \csname's to define \refdef@.
+%% The second argument of \refdef@ will be either \relax or a font change,
+%% like \it, for those cases where this new font is to be used for the
+%% element in question.
+
+\def\refdef@#1#2{\def#1{\egroup
+ \csname\expandafter\eat@\string#1@true\endcsname
+ \expandafter\setbox
+ \csname\expandafter\eat@\string#1box@\endcsname\hbox\bgroup#2}}
+
+%% \no and \key are defined immediately by \refdef@.
+
+\refdef@\no\relax
+\refdef@\key\relax
+
+%% \by, \manyby and \bysame are all a little different. In order to get them
+%% to work together, they each have to set certain other flags.
+
+%% In \manyby, the \by@true isn't made \global, since it is needed only by
+%% the current \ref, but the \manyby@true is needed by the succeeding \ref's,
+%% so it must be \global.
+
+\def\manyby{\egroup\global\manyby@true\by@true\setbox\bybox@\hbox\bgroup}
+
+%% Similarly, in \by, the \bysame@false is needed by the current \ref, while
+%% the \global \manyby@false is needed by the succeeding \ref's.
+
+\def\by{\egroup\by@true\bysame@false\global\manyby@false
+ \setbox\bybox@\hbox\bgroup}
+
+%% All \bysame has to do is set \bysame@true for the current \ref.
+
+\def\bysame{\egroup\bysame@true\bgroup}
+
+%% \paper and \paperinfo are straightforward \refdef@'s.
+
+\refdef@\paper\it
+\refdef@\paperinfo\relax
+
+%% \jour is a little more complicated because it has to set \prevjour@true
+%% (this is used for \moreref, for a succeeding paper in the same journal).
+
+\def\jour{\egroup\jour@true\prevjour@true\setbox
+ \jourbox@\hbox\bgroup}
+
+%% \vol, \issue, \yr are straightforward.
+
+\refdef@\vol\bf
+\refdef@\issue\relax
+\refdef@\yr\relax
+
+%% \toappear doesn't set a box, but only sets \toappear@true.
+
+\def\toappear{\egroup\toappear@true\bgroup}
+
+%% \pages is straightforward.
+
+\refdef@\pages\relax
+
+%% \page, for just a single-page reference, uses the same box \pagesbox@, as
+%% \pages, but sets a different flag.
+
+\def\page{\egroup\page@true\setbox\pagesbox@\hbox\bgroup}
+
+%% \book is straightforward.
+
+\refdef@\book\relax
+
+%% \inbook uses the same box, \bookbox@, but has to set an extra flag.
+
+\def\inbook{\egroup\inbook@true\previnbook@true\setbox
+ \bookbox@\hbox\bgroup}
+
+%% \bookinfo, \publ, \publaddr, \finalinfo are all straightforward.
+
+\refdef@\bookinfo\relax
+\refdef@\publ\relax
+\refdef@\publaddr\relax
+\refdef@\finalinfo\relax
+
+%% The worst problems are caused by the commas that come after various bits
+%% of information, since the comma mustn't be supplied if something happens to
+%% be the last element. We elect instead to supply the commas that come
+%% BEFORE things. To do this, instead of simply \unbox'ing the relevant
+%% \box's (and then \unskip'ing, in case extra spaces crept in), we will
+%% usually `\ppunbox@' them (prepunctuate and then \unbox and \unskip).
+
+\def\ppunbox@#1{\prepunct@\unhbox#1\unskip}
+
+%% Here \prepunct@ will be \relax when we have just typeset elements that
+%% shouldn't have commas after them, and will then be changed when we get to
+%% other elements. The construction that changes them will be called
+%% \setpunct@, which is defined below.
+
+%% There are two special problems in having \setpunct@ define \prepunct@
+%% correctly. The first involves the penalties \linebreak and \nolinebreak,
+%% which the user might want to type at certain points. These \penalty's
+%% will of course generally be absorbed into various boxes, but since these
+%% boxes get unboxed, they will appear again in the proper places. However,
+%% if a line break is specified after an element that gets a comma after it,
+%% we'd better be sure that the comma gets put in before the penalty! The
+%% second problem involves book titles, as previously mentioned.
+
+\def\setpunct@{\def\prepunct@{\ifnum\lastpenalty<\z@
+ %% If \linebreak, and hence a negative penalty appears,
+ \edef\penalty@{\penalty\the\lastpenalty}%
+ %% first save the penalty in \penalty@,
+ \unpenalty,% %% then delete the penalty and add the comma.
+ \ifafterbook@''\fi %% If we've just finished a book title, add the quotes.
+ \penalty@\relax\space %% Finally, put back the penalty, and then a space;
+ %% \relax added after \penalty@ since \the\lastpenalty is just a number.
+ \else %% If a negative penalty doesn't appear, we still want to check
+ %% for \nolinebreak. If it was typed, it has contributed
+ %% \penalty10000 \hskip1sp\hskip-1sp. However, the \hskip-1sp has
+ %% been removed by the previous \unskip (in \ppunbox@ or \unbox\unskip),
+ %% so \lastskip is 1sp.
+ \ifdim\lastskip=\@ne sp\unskip\unskip
+ %% In this case, \unskip the \hskip-1sp also, and then any previous space.
+ \edef\penalty@{\penalty\the\lastpenalty}\unpenalty,\ifafterbook@''\fi
+ \penalty@\relax\space
+ %% Then proceed as before.
+ \else,\ifafterbook@''\fi\space %% Otherwise just add the comma
+ %% (and quotes) and a space.
+ \fi\fi\afterbook@false}} %% And reset \ifafterbook@.
+
+%% Now all \endref has to do is add the final \egroup, globally set
+%% \lastref@true again, for succeeding \ref's, call \endref@, to put things
+%% together, reset certain flags used by \moreref, end the paragraph, and
+%% then the group.
+
+\def\endref{\egroup\global\lastref@true\endref@ \global\prevjour@false
+ \global\previnbook@false\par\endgroup}
+
+%% Here is how \endref@ puts things together.
+
+\def\endref@{\let\prepunct@\relax %% No commas added to begin with.
+ \iffirstref@ %% (I) First assume we're not doing a \moreref.
+ \ifno@\hbox to20\p@{\hss\unhbox\nobox@\unskip. }\else\hbox to10\p@{}\fi
+ %% A \no gets put into a box of width 20pt. Otherwise add 10pts of space.
+ \ifkey@\unhbox\keybox@\unskip\ \fi
+ %% Add the key, if any, followed by a space.
+ \ifmanyby@ %% (1) Suppose this is one of the papers governed by \manyby.
+ \ifby@ %% (1a) Suppose we're at the first one.
+ \hbox{\unhcopy\bybox@\unskip}%
+ %% Then we add a box with the author's name (we keep the author's name
+ %% in a box so that the glue can't stretch or shrink, so that the
+ %% subsequent rules will be exactly the right length),
+ \global\setbox\bysamebox@\hbox{\unhcopy\bybox@\unskip}%
+ %% and we set \bysamebox@ to this box,
+ \setpunct@ %% and we \setpunct@, since commas will subsequently be needed.
+ \else %% This \else goes with \ifby@, giving the alternative for (1a).
+ %% Suppose instead we're at a subsequent instance of a \bymany.
+ \ifbysame@ %% (1ai) If we still have \bysame,
+ \ifdim\wd\bysamebox@>\maxbysamerule@
+ \hbox to\maxbysamerule@{\leaders\hrule\hfill}\else
+ \hbox to \wd\bysamebox@{\leaders\hrule\hfill}\fi
+ %% we add a rule the length of \bysamebox@, unless this is too long,
+ %% in which case we use \maxbysamerule@ as the length.
+ \setpunct@ %% and we \setpunct@
+ \fi %% This \fi matches \ifbysame@, finishing (1ai).
+ \fi %% This \fi matches the \ifby@, finishing (1a).
+ \else %% This \else goes with \ifmanyby@, giving the alternative for (1).
+ %% Suppose instead this paper isn't governed by \manyby.
+ \ifby@ %% Suppose, however, that there is a \by.
+ \unhcopy\bybox@\unskip\setpunct@ %% Then just use \bybox@ and \setpunct@.
+ \fi %% This \fi matches \ifby@.
+ \fi %% This \fi matches \ifmanyby@, finishing (1).
+ \fi %% This \fi [which could also be written \else\fi]
+ %% matches \iffirstref@, and finishes (I).
+ %% [None of this is done for \moreref's.]
+ %% Having done the first stuff, involving the author, we can now get to
+ %% the paper.
+ \ifpaper@\ppunbox@\paperbox@\setpunct@\fi
+ %% If there's a \paper, put it in, with proper punctuation before it, and
+ %% get set up for commas on next element.
+ \ifpaperinfo@\ppunbox@\paperinfobox@\setpunct@\fi
+ %% Similarly for \paperinfo.
+ %% The journal is a little more complicated.
+ \ifjour@ %% (2) Suppose there's a \jour.
+ \ppunbox@\jourbox@\setpunct@ %% Put in journal name.
+ \ifvol@\ \unhbox\volbox@\unskip\setpunct@\fi %% Then volume, if given.
+ \ifissue@\ \unhbox\issuebox@\unskip\setpunct@\fi %% Then issue, if given.
+ \ifyr@\ (\unhbox\yrbox@\unskip)\setpunct@\fi %% Then year, if given, but
+ %% don't put comma before it.
+ \iftoappear@\ (to appear)\setpunct@\fi %% If \toappear was given instead,
+ %% typeset `(to appear)'.
+ \ifpages@\ppunbox@\pagesbox@\setpunct@\fi %% Then \pages, if given.
+ \ifpage@\prepunct@ p.~\unhbox\pagesbox@\unskip\setpunct@\fi
+ %% If \page given instead, type p.~ before it.
+ \else %% This \else goes with \ifjour@, giving the alternative to (2).
+ %% Suppose instead there's no \jour.
+ \ifprevjour@ %% (2a) But suppose there's a \prevjour@ (because
+ %% this part comes from \moreref).
+ \unskip\nojourinfo@false %% Begin by assuming there is
+ %% additional journal information to be set (\nojourinfo@false).
+ \ifvol@\else\ifissue@\else\ifyr@\else\nojourinfo@true\fi\fi\fi
+ %% If \vol, \issue or \yr was specified in this \moreref, nothing
+ %% changes (hence \nojourinfo@false). But if none were specified, there
+ %% is no additional journal information to be set (\nojourinfo@true).
+ \ifnojourinfo@\else,\fi
+ %% If there is additional journal information to be set, first put
+ %% in the comma.
+ %% Then put in volume, issue, etc., as before.
+ \ifvol@\ \unhbox\volbox@\unskip\setpunct@\fi
+ \ifissue@\ \unhbox\issuebox@\unskip\setpunct@\fi
+ \ifyr@\ (\unhbox\yrbox@\unskip)\setpunct@\fi
+ \iftoappear@\ (to appear)\setpunct@\fi
+ \ifpages@\ppunbox@\pagesbox@\setpunct@\fi
+ \ifpage@\prepunct@ p.~\unhbox\pagesbox@\unskip\setpunct@\fi
+ \fi %% This \fi [which could also be written \else\fi]
+ %% matches \ifprevjour@, and finishes (2a).
+ \fi %% This \fi mathces \ifjour@, and finishes (2).
+ %% Having finished worrying about journals, we tackle books.
+ \ifbook@\prepunct@``\unhbox\bookbox@\unskip\afterbook@true\setpunct@\fi
+ %% If there was a \book, set it with `` at the beginning,
+ %% and preceded by punctuation and penalties as already determined; also
+ %% set \afterbook@true, so we'll know that we've just typeset a book title.
+ \ifinbook@\prepunct@\unskip\ in ``\unhbox\bookbox@\unskip\afterbook@true
+ \setpunct@\global\book@true\fi
+ %% If \inbook, (which will initially have \ifbook@false), set the book
+ %% title preceded by in ``; also set \book@true so that subsequent
+ %% information will be printed. (It's \global, since it might be needed
+ %% later for a \moreref.)
+ \ifbookinfo@\ppunbox@\bookinfobox@\setpunct@\fi
+ %% Put in any \bookinfo.
+ \ifpubl@\ppunbox@\publbox@\setpunct@\fi
+ %% Put in \publ.
+ \ifpubladdr@\ppunbox@\publaddrbox@\setpunct@\fi
+ %% Put in \publaddr.
+ \ifbook@ %% (3) Moreover, if there was a book, we also add other things.
+ \ifyr@\prepunct@\unhbox\yrbox@\unskip\setpunct@\fi
+ %% Add the \yr, if any.
+ \iftoappear@\ifafterbook@''\fi\ (to appear)\afterbook@false
+ \setpunct@\fi
+ %% If \toappear appears, and we haven't typeset anything after the
+ %% title, so that \ifafterbook@ is still true, add the '' and then
+ %% `(to appear)'.
+ \ifpages@\prepunct@ pp.~\unhbox\pagesbox@\unskip\setpunct@\fi
+ %% If there is \pages, add pp.~and the pages.
+ \ifpage@\prepunct@ p.~\unhbox\pagesbox@\unskip\setpunct@\fi
+ %% If there is \page, add only p.~ before it.
+ \else %% This \else goes with \ifbook@, giving the alternative to (3).
+ %% Even if there wasn't a \book, we might want to add things.
+ \ifprevinbook@ %% (3a) Suppose we have \previnbook@true.
+ \unskip %% Then we still have to add all this information.
+ \ifyr@\prepunct@\unhbox\yrbox@\unskip\setpunct@\fi
+ \iftoappear@\ (to appear)\setpunct@\fi
+ \ifpages@\prepunct@ pp.~\unhbox\pagesbox@\unskip\setpunct@\fi
+ \ifpage@\prepunct@ p.~\unhbox\pagesbox@\unskip\setpunct@\fi
+ \fi %% This \fi matches \ifprevinbook, and finishes (3a).
+ \fi %% This \fi matches \ifbook@ and finishes (3).
+ %% Now we add the finishing touches.
+ \iffinalinfo@.\ifafterbook@''\fi\afterbook@false
+ \spacefactor3000\relax\space\unhbox\finalinfobox@
+ %% (4) If there is \finalinfo, add a period, and quotes if still setting
+ %% the title, and then add a space and the final info, first setting
+ %% \spacefactor to 3000, so that the space before the final info will be
+ %% an intersentence space. (However, if the final info has more than one
+ %% sentence, it will still be necessary to use @. instead of . at ends
+ %% of sentences for proper spacing.)
+ \else %% This \else goes with \iffinalinfo@, giving alternative to (4).
+ \iflastref@.\ifafterbook@''\fi\afterbook@false
+ %% (4a) If we're at the last ref (i.e., there isn't a \moreref),
+ %% add a period, and quotes if still setting the title.
+ \else;\ifafterbook@''\fi\afterbook@false\space
+ %% but if we're not at the last ref (i.e., there's a \moreref),
+ %% add a semicolon, and quotes if necessary, and a space.
+ \fi %% This \fi matches \iflastref@ and finishes (4a)
+ \fi} %% This \fi matches \iffinalinfo@ and finishes (4).
+
+%% The Refs are ended with an \egroup, in case some ordinary text follows them.
+
+\def\endRefs{\egroup}
+
+%% We use \iflogo@ as a flag to tell if the user has typed \nolog.
+
+\newif\iflogo@
+\def\nologo{\logo@false}
+\logo@true
+
+%% Finally, we are ready for the \output routine. It is hardly different from
+%% the \plainoutput routine, except that the first page normally has the
+%% `Typeset by AmS-TeX' logo attached.
+
+\output={\output@}
+
+\def\output@{%
+ \ifnum\pageno=\@ne\shipout\vbox{\makeheadline\vbox to\vsize
+ {\boxmaxdepth\maxdepth\pagecontents}\baselineskip2pc
+ \iflogo@\hbox to\hsize{\hfil\eightpoint Typeset by \AmSTeX}\fi
+ \makefootline}%
+ \else
+ \shipout\vbox{\makeheadline\pagebody\makefootline}%
+ \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.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% %%
+%% HERE IS A SUMMARY OF ALL PLACES WHERE SPECIFIC VALUES USED IN THIS FILE %%
+%% MIGHT NEED TO BE REPLACED, BECAUSE OF DIFFERENT FONTS, STYLES, ETC. %%
+%% %%
+%% \parindent %%
+%% \hsize %%
+%% \vsize %%
+%% \normalbaselineskip, \normallineskip, \normallineskiplimit %%
+%% \abovedisplayskip, \belowdisplayskip, \abovedisplayshortskip , %%
+%% \belowdisplayshortskip (for different point sizes) %%
+%% \big (for different point sizes) %%
+%% \strutbox, \strutbox@ (for different point sizes) %%
+%% \ex@ (for different point sizes) %%
+%% \footmarkfrom@ %%
+%% \makefootnote format %%
+%% \title, \author, \affil, \address, \date, \thanks, %%
+%% \keywords, \subjclass, \innerproclaim@, \innerendproclaim@, \abstract %%
+%% (including the \nofrills and \usualspace for these) %%
+%% spacing, and order, in \endtopmatter %%
+%% \leftskip, \rightskip (and then the \everydisplay) for \abstract %%
+%% spacing, and order, in \enddocument %%
+%% \heading (including the \nofrills and \usualspace) %%
+%% \subheading %%
+%% \demo (including the \nofrills and \usualspace) %%
+%% \enddemo %%
+%% \qed %%
+%% \cite %%
+%% spacing and formatting of the \items in \roster %%
+%% \Refs (including the default heading) %%
+%% order and formatting of elements in each \ref %%
+%% \logo (probably eliminated) %%
+%% \output routine %%
+%% %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% %%
+%% Finally, style files meant for journals, etc., rather than for %%
+%% preprints, probably ought 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. %%
+%% %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%