diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-09 00:40:28 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-09 00:40:28 +0000 |
commit | fd423d0bb64fe29a2be1fbae5baaf4bc386cc274 (patch) | |
tree | 6bf20bbdf3d9741134f6ea40b30c1b3722fa0cd1 /Master/texmf-dist/doc/amstex/base/amsppt.doc | |
parent | 0afd1aaf73fc909c6604939dcaf4ccc983b7277e (diff) |
doc 1
git-svn-id: svn://tug.org/texlive/trunk@77 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/amstex/base/amsppt.doc')
-rw-r--r-- | Master/texmf-dist/doc/amstex/base/amsppt.doc | 3399 |
1 files changed, 3399 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/amstex/base/amsppt.doc b/Master/texmf-dist/doc/amstex/base/amsppt.doc new file mode 100644 index 00000000000..2338453d289 --- /dev/null +++ b/Master/texmf-dist/doc/amstex/base/amsppt.doc @@ -0,0 +1,3399 @@ +%%% ==================================================================== +%%% @AMSTeX-style-file{ +%%% filename = "amsppt.sty", +\def\filename{amsppt.sty} +% filename = "amsppt.doc", +%%% version = "2.2", +\def\fileversion{2.2} +%%% date = "2001/08/07", +\def\filedate{2001/08/07} +%%% time = "13:47:28 EDT", +%%% checksum = "45523 3399 17317 143562", +%%% author = "American Mathematical Society", +%%% copyright = "Copyright 2001 American Mathematical Society, +%%% all rights reserved. Copying of this file is +%%% authorized only if either: +%%% (1) you make absolutely no changes to your copy +%%% including name; OR +%%% (2) if you do make changes, you first rename it +%%% to some other name.", +%%% address = "American Mathematical Society, +%%% Technical Support, +%%% Publications Technical Group, +%%% P. O. Box 6248, +%%% Providence, RI 02940, +%%% USA", +%%% telephone = "401-455-4080 or (in the USA and Canada) +%%% 800-321-4AMS (321-4267)", +%%% FAX = "401-331-3842", +%%% email = "tech-support@ams.org (Internet)", +%%% codetable = "ISO/ASCII", +%%% supported = "yes", +%%% keywords = "amstex, ams-tex, tex", +%%% abstract = "This file is a documentstyle for use with +%%% AMS-TeX 2.2. It exists in two forms: amsppt.doc, +%%% which is the full form containing all technical +%%% documentation, and amsppt.sty, which is identical +%%% except that all lines beginning with a single percent +%%% sign are removed, to make the file more rapid-loading +%%% when processed by TeX.", +%%% docstring = "The checksum field above contains a CRC-16 checksum +%%% as the first value, followed by the equivalent of +%%% the standard UNIX wc (word count) utility output of +%%% lines, words, and characters. This is produced by +%%% Robert Solovay's checksum utility.", +%%% } +%%% ==================================================================== +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% -0- CONTENTS +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% -0- Contents +% -1- Preliminary +% -2- Utility definitions +% -3- Fonts +% -4- Global variable settings +% -5- Top matter definitions +% -6- Section headings +% -7- Theorem environments and similar structures +% -8- Rosters +% -9- Footnotes +% -10- Tables +% -11- Figure spaces and captions +% -12- Miscellaneous formatting macros +% -13- References/Bibliography +% -14- End of document +% -15- Output routine +% -16- Hyphenation exceptions +% -17- Notes +% -18- Appendix: Notes on version 2.1 +% -19- Appendix: Notes on versions 2.1a, 2.1b, ... +% -20- Appendix: Notes on versions 2.2 +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% -1- PRELIMINARY +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% AMSPPT.DOC contains all the code for AMSPPT.STY, with +% additional comments. AMSPPT.STY is produced by removing from +% AMSPPT.DOC all blank lines and lines beginning with a percent +% sign. This is done to allow it to be loaded faster by TeX. +% +% For the most part the internals of AMSPPT.STY aren't closely +% related to AMSTEX.TEX: AMSTEX.TEX handles mathematics, +% AMSPPT.STY handles visual design and overall structure of +% documents. But some parts of AMSTEX.DOC are relevant, e.g., +% the standard abbreviations \DN@, \RIfM@, etc., the description +% of "compressed format", the remarks about the "K-method", and +% the allocation of scratch registers and variables such as +% \toks@@. +% +% The style produced by AMSPPT.STY is based on the style of the +% Journal of the American Mathematical Society (as of December +% 1990), 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 in 1990 used Times +% Roman fonts licensed from Autologic, Inc. This means that line +% breaks and page breaks were sure to change when a paper was +% 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 work 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). +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% Bug in amsppt.sty version 2.1 left \amsppt.sty = \endinput +% after the file was loaded. This will fix it if amsppt.sty +% was put in the format file. +% +\expandafter\ifx\csname amsppt.sty\endcsname\endinput + \expandafter\def\csname amsppt.sty\endcsname{2.2 (2001/08/07)}\fi +% +% Check to see if this file was previously loaded and, if so, +% if the version numbers agree. +% +\xdef\fileversiontest{\fileversion\space(\filedate)} +\expandafter\ifx\csname\filename\endcsname\fileversiontest +% Then file is already loaded, and versions agree. Quit here. +% \endinput and \fi MUST be on the same line: + \message{[already loaded]}\endinput\fi +% +% If the file versions disagree, we generate an error message, +% but we don't do an \endinput: maybe the user will want to +% continue, inputting the new version, and see what happens. +% +\expandafter\ifx\csname\filename\endcsname\relax % file not yet loaded + \else\errmessage{Discrepancy in `\filename' file versions: + version \csname\filename\endcsname\space already loaded, trying + now to load version \fileversiontest}\fi +% +% Since we are about to change the catcode of @, we define +% \csname\filename\endcsname to set the catcode back to its previous +% value. Furthermore, it then redefines itself to record the file +% version number for future reference (e.g., the test above). +% +\expandafter\xdef\csname\filename\endcsname{% + \catcode`\noexpand\@=\the\catcode`\@ + \expandafter\gdef\csname\filename\endcsname{% + \fileversion\space(\filedate)}} +% +% Add @ to the plain list of \dospecials, to make it behave +% better in verbatim, e-mail addresses, and URL's. +% +\def\dospecials{\do\ \do\\\do\{\do\}\do\$\do\&% + \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~\do\@} +% +% Enable the use of @ as letter in `private' control sequence names. +% Cf. TeXbook, p. 344 (above the \mathcode table). +% +\catcode`\@=11 +% +% For convenience in loading other files of definitions, provide +% commands to save and restore the catcode value of any character, +% most commonly @. +% +\def\savecat#1{% + \expandafter\xdef\csname\string#1savedcat\endcsname{\the\catcode`#1}} +\def\restorecat#1{\catcode`#1=\csname\string#1savedcat\endcsname} +% +% Besides putting the file version on screen, this message also +% records it in the transcript/log file (which is useful for +% troubleshooting). The file name was already given on screen and in +% the transcript file by TeX, as part of the automatic processing +% surrounding file input. +% +\message{version \fileversion\space(\filedate):} +% +% If another documentstyle inputs amsppt.sty, it should define +% \styname and \styversion appropriately. We use an `ifundefined' +% test to avoid overriding the definitions, in that case. +\expandafter\ifx\csname styname\endcsname\relax + \def\styname{AMSPPT}\def\styversion{2.2} +\fi +% +% 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 is frequently done in +% plain.tex. +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% -2- UTILITY DEFINITIONS +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\message{Loading utility definitions,} +% +% For several macros, e.g., \title, we want to allow the user the +% following two options: +% +% \title xxx\endtitle +% \title\nofrills xxx\endtitle +% +% In the first case, we want the text of the title to be stored +% in a box for later use. In the second case, we want certain +% parts of the typesetting to be omitted when constructing the +% box. Internally this is done by prefixing them with \frills@, +% which in the normal cases is simply an identity function +% (\let\frills@\identity@), whereas in the nofrills case it +% gobbles its argument (\let\frills@\eat@). +% +% In order to test for \nofrills we have to use \futurelet +% (because if \nofrills is absent, we don't want to do anything +% that might affect the actual text of the title, such as +% stripping braces or adding an unwanted extra pair around the +% first token or group). +% +\def\identity@#1{#1} +% +\def\nofrills@@#1{% +% This extra step in defining \next@ is a precaution in case #1 +% might be more than one token. + \DN@{#1}% + \ifx\next\nofrills \let\frills@\eat@ + \expandafter\expandafter\expandafter\next@\expandafter\eat@ + \else \let\frills@\identity@\expandafter\next@\fi} +% +\def\nofrillscheck#1{\def\nofrills@{\nofrills@@{#1}}% + \futurelet\next\nofrills@} +% +% Typical use: if we want to execute a macro called \title, but +% check to see if \nofrills is coming up next, we do this: +% +% ... \nofrillscheck\title +% +% If indeed the next thing is \nofrills, then we will execute +% \nofrills@@ before calling \title again. This involves some +% shuffling around in order for us to get back the ``real'' +% definition of \title afterwards and yet still be able to use a +% control sequence named \title to read the argument. This is +% important in giving the user a useful error message if they +% accidentally omit or misspell the matching \endtitle or +% whatever. We could use instead the trick used with \align of +% adding a space onto the \csname with which we read the +% argument, but that would increase the use of hash size. +% +% We define \usualspace to give a warning message if used in +% a place where it's not intended to be used: +% +\Invalid@\usualspace +% +% 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. 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 do some reassignments +% here to handle these. We don't worry about restoring the +% lowercase special characters within math embedded in the text +% being uppercased---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\uppercasetext@#1{% + {\spaceskip1.3\fontdimen2\the\font plus1.3\fontdimen3\the\font + \def\ss{SS}\let\i=I\let\j=J\let\ae\AE\let\oe\OE + \let\o\O\let\aa\AA\let\l\L + \skipmath@#1$\skipmath@$}} +% +\def\skipmath@#1$#2${\uppercase{#1}% + \ifx\skipmath@#2\else$#2$\expandafter\skipmath@\fi} +% +% Macro to check for missing \endsomething. +\def\add@missing#1{\expandafter\ifx\envir@end#1% + \Err@{You seem to have a missing or misspelled + \expandafter\string\envir@end ...}% +% It is useful to supply the necessary missing piece, especially +% in the case of \endref. + \envir@end +\fi} +% +% \revert@ and \envir@stack are for use by any environments that +% don't enclose their text in a group, e.g., \proclaim, +% \definition, \roster. +% +\newtoks\revert@ +% +\def\envir@stack#1{\toks@\expandafter{\envir@end}% + \edef\next@{\def\noexpand\envir@end{\the\toks@}% + \revert@{\the\revert@}}% + \revert@\expandafter{\next@}% + \def\envir@end{#1}} +% +% Some special trickery is necessary to get around the outerness +% of \enddocument +\begingroup +\catcode`\ =11 +\gdef\revert@envir#1{\expandafter\ifx\envir@end#1% +% restore previous \envir@end: +\the\revert@% +% The space after \enddocument is significant: +\else\ifx\envir@end\enddocument \Err@{Extra \string#1}% +\else\expandafter\add@missing\envir@end\revert@envir#1% +\fi\fi} +% This definition can be made here because \enddocument has not +% yet been declared \outer. +% The space at the end of \enddocument is necessary: +\xdef\enddocument {\string\enddocument}% +% The space at the end of \enddocument is necessary here also: +\global\let\envir@end\enddocument %%%%%% don't remove the final space! +\endgroup\relax +% +\def\first@#1#2\end{#1} +\def\true@{TT} +\def\false@{TF} +\def\empty@{} +% +% Test to see whether a given argument is empty or not. If the +% argument = a single space, it will test the same as empty, +% which is in fact what we want. +% +\begingroup \catcode`\-=3 +\long\gdef\notempty#1{% +% \empty@ is needed if we want the case #1 = {} to work properly: + \expandafter\ifx\first@#1-\end-\empty@ \false@\else \true@\fi} +\endgroup +% +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% -3- FONTS +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\message{more 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 \relax +% +% \sevenex, and \eightex below, must be able to be interpreted +% as math fonts for certain initialization (e.g. establishing +% the height of the strut in \eightpoint) that may be requested +% before \topmatter is invoked, and the fonts are actually loaded. +% +\let\sevenex=\tenex % needs special handling in \PSAMSFonts +% +% 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 \relax +% +% 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 \relax % preloaded in plain.tex +\font@\sixrm=cmr6 \relax % preloaded in plain.tex +\font@\eighti=cmmi8 \relax \skewchar\eighti='177 % preloaded +\font@\sixi=cmmi6 \relax \skewchar\sixi='177 % preloaded +\font@\eightsy=cmsy8 \relax \skewchar\eightsy='60 % preloaded +\font@\sixsy=cmsy6 \relax \skewchar\sixsy='60 % preloaded +\let\eightex=\tenex % needs special handling in \PSAMSFonts +\font@\eightbf=cmbx8 \relax % preloaded in plain.tex +\font@\sixbf=cmbx6 \relax % preloaded in plain.tex +\font@\eightit=cmti8 \relax % preloaded in plain.tex +\font@\eightsl=cmsl8 \relax % preloaded in plain.tex +\font@\eighttt=cmtt8 \relax % preloaded in plain.tex +\let\eightsmc=\nullfont % needs special handling in \PSAMSFonts +% +% Now we define \tenpoint and \eightpoint for regular text and +% footnotes, similarly to the TeXbook, 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\dotsspace@1.5mu\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\dotsspace@1.5mu\ex@.2326ex\jot3\ex@ + \the\eightpoint@} +% +% \linespacing command to introduce a factor by which +% \normalbaselineskip will be multiplied. Multiplying by the +% factor will cause any stretch or shrink to be lost; normally +% that's not a problem. +\def\linespacing#1{% + \addto\tenpoint{\normalbaselineskip=#1\normalbaselineskip + \normalbaselines +% Reset the strut boxes. + \setbox\strutbox=\hbox{\vrule height.7\normalbaselineskip + depth.3\normalbaselineskip width\z@}% + \setbox\strutbox@\hbox{\raise.5\normallineskiplimit + \vbox{\kern-\normallineskiplimit\copy\strutbox}}% + }% + \addto\eightpoint{\normalbaselineskip=#1\normalbaselineskip + \normalbaselines +% Reset the strut boxes. + \setbox\strutbox=\hbox{\vrule height.7\normalbaselineskip + depth.3\normalbaselineskip width\z@}% + \setbox\strutbox@\hbox{\raise.5\normallineskiplimit + \vbox{\kern-\normallineskiplimit\copy\strutbox}}% + }% +} +% +\def\extrafont@#1#2#3{\font#1=#2#3\relax} +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Postscript versions of the math fonts from the AMSFonts +% package, done jointly by Blue Sky Research and Y&Y, come only +% in sizes 10, 7 and 5, i.e. sizes 9, 8 and 6 are not included. +% +% \PSAMSFonts can be called in the initialization, or by a user +% before \document and \topmatter, to specify that sizes 9,8,6 of +% AMS fonts should be scaled from nearby PS sizes. +% +\newif\ifPSAMSFonts +\def\PSAMSFonts{% + \def\extrafont@##1##2##3{% + \font##1=##2% +% Concatenate the proper size spec to the preceding letters + \ifnum##3=9 10 at9pt% + \else\ifnum##3=8 10 at8pt% + \else\ifnum##3=6 7 at6pt% +% Sizes other than 9, 8 or 6 are not expected, so this branch might +% generate an error: + \else ##3\fi\fi\fi\relax}% + \font@\eightsmc=cmcsc10 at 8pt + \font@\eightex=cmex10 at 8pt + \font@\sevenex=cmex10 at 7pt + \PSAMSFontstrue +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% 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. +% +% At the same time, if PSAMSFonts has not been specified, add the +% regular versions of the three fonts that need special handling. +% +\def\loadextrasizes@#1#2#3#4#5#6#7{% + \ifx\undefined#1% + \else \extrafont@{#4}{#2}{8}\extrafont@{#6}{#2}{6}% + \ifsyntax@ + \else + \addto\tenpoint{\textfont#1#3\scriptfont#1#5% + \scriptscriptfont#1#7}% + \addto\eightpoint{\textfont#1#4\scriptfont#1#6% + \scriptscriptfont#1#7}% + \fi + \fi +} +% +% Provide a mechanism for delaying additional font loading, which +% may be necessary for some publications. +% +\newtoks\loadextrafonts@@ +\def\loadextrafonts@{% + \loadextrasizes@\msafam{msam}% + \tenmsa\eightmsa\sevenmsa\sixmsa\fivemsa + \loadextrasizes@\msbfam{msbm}% + \tenmsb\eightmsb\sevenmsb\sixmsb\fivemsb + \loadextrasizes@\eufmfam{eufm}% + \teneufm\eighteufm\seveneufm\sixeufm\fiveeufm + \loadextrasizes@\eufbfam{eufb}% + \teneufb\eighteufb\seveneufb\sixeufb\fiveeufb + \loadextrasizes@\eusmfam{eusm}% + \teneusm\eighteusm\seveneusm\sixeusm\fiveeusm + \loadextrasizes@\eusbfam{eusb}% + \teneusb\eighteusb\seveneusb\sixeusb\fiveeusb + \loadextrasizes@\eurmfam{eurm}% + \teneurm\eighteurm\seveneurm\sixeurm\fiveeurm + \loadextrasizes@\eurbfam{eurb}% + \teneurb\eighteurb\seveneurb\sixeurb\fiveeurb + \loadextrasizes@\cmmibfam{cmmib}% + \tencmmib\eightcmmib\sevencmmib\sixcmmib\fivecmmib + \loadextrasizes@\cmbsyfam{cmbsy}% + \tencmbsy\eightcmbsy\sevencmbsy\sixcmbsy\fivecmbsy + \let\loadextrafonts@\empty@ + \ifPSAMSFonts + \else + \font@\eightsmc=cmcsc8 \relax + \font@\eightex=cmex8 \relax + \font@\sevenex=cmex7 \relax + \fi + \the\loadextrafonts@@ +} +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% -4- GLOBAL VARIABLE SETTINGS +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\message{page dimension 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 +\newdimen\normalparindent \normalparindent\parindent +\normallineskiplimit\p@ +% +% We use a common indent value for setting left and right margins +% 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 +% +% Change \magnification (from plain.tex) so that it doesn't reset the +% page dimensions to 6.5 x 9 true inches. +\let\magnification=\mag +% +\topskip10pt \relax +% +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% -5- TOP MATTER DEFINITIONS +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\message{top matter,} +% 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{\loadextrafonts@ \let\topmatter\relax} +% +% \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{\let\savedef@\chapter + \def\chapter##1{\let\chapter\savedef@ + \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.) + \frills@{CHAPTER\space\afterassignment\chapterno@ + \global\chaptercount@=}% + ##1\unskip}\baselineskip2pc\null}}\hskip\leftskip}% + \nofrillscheck\chapter} +% +% 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{\let\savedef@\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. + \def\title##1\endtitle{\let\title\savedef@ + \global\setbox\titlebox@\vtop{\tenpoint\bf + \raggedcenter@ +% Increased \baselineskip is because of the uppercasing. We do +% it like this instead of putting it inside the \uppercasetext@ +% macro, because it only applies where an entire paragraph is +% made up of uppercase text. + \baselineskip1.3\baselineskip + \frills@\uppercasetext@{##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 + }% + \nofrillscheck\title} +% +% 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@ #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@#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\addressfont@{\eightpoint} +\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. + {\nobreak\vskip12\p@ minus6\p@\indent\addressfont@\smc#1\par}} +% +% \curraddr was added in version 2.1. It uses the address count +% without advancing it, to add to the most recent address macro. +% Ignore empty element; all optional elements are ignored if empty. +% +\def\curraddr{\let\savedef@\curraddr + \def\curraddr##1\endcurraddr{\let\curraddr\savedef@ + \if\notempty{##1}% + \toks@\expandafter\expandafter\expandafter{% + \csname address\number\addresscount@\endcsname}% + \toks@@{##1}% + \expandafter\xdef\csname address\number\addresscount@\endcsname + {\the\toks@\endgraf\noexpand\nobreak + \indent\noexpand\addressfont@{\noexpand\rm + \frills@{{\noexpand\it Current address\noexpand\/}:\space}% + \def\noexpand\usualspace{\space}\the\toks@@\unskip}}% + \fi}% + \nofrillscheck\curraddr} +% +% \email uses the same counter as \address, since they should +% pair up. +% +% Email patch to get tt font +\def\email{\let\savedef@\email + \def\email##1\endemail{\let\email\savedef@ + \if\notempty{##1}% + \toks@{\def\usualspace{{\it\enspace}}\endgraf\indent\addressfont@}% + \toks@@{{\tt##1}\par}% + \expandafter\xdef\csname email\number\addresscount@\endcsname + {\the\toks@\frills@{{\noexpand\it E-mail address\noexpand\/}:% + \noexpand\enspace}\the\toks@@}% + \fi}% + \nofrillscheck\email} +% +% \urladdr the same as \email, with the addition that \tildechar +% is provided for printing this character in a URL. +\def\tildechar{{\tt\char`\~}} +\def\urladdr{\let\savedef@\urladdr + \def\urladdr##1\endurladdr{\let\urladdr\savedef@ + \if\notempty{##1}% + \toks@{\def\usualspace{{\it\enspace}}\endgraf\indent\eightpoint}% + \toks@@{\tt##1\par}% + \expandafter\xdef\csname urladdr\number\addresscount@\endcsname + {\the\toks@\frills@{{\noexpand\it URL\noexpand\/}:% + \noexpand\enspace}\the\toks@@}% + \fi}% + \nofrillscheck\urladdr} +% +\def\thedate@{} +\def\date#1\enddate{\gdef\thedate@{\tenpoint#1\unskip}} +% +\def\thethanks@{} +\def\thanks#1\endthanks{% + \if\notempty{#1}% + \ifx\thethanks@\empty@ \gdef\thethanks@{\eightpoint#1}% + \else + \expandafter\gdef\expandafter\thethanks@\expandafter{% + \thethanks@\endgraf#1}% + \fi + \fi} +% +\def\thekeywords@{} +\def\keywords{\let\savedef@\keywords + \def\keywords##1\endkeywords{\let\keywords\savedef@ + \if\notempty{##1}% + \toks@{\def\usualspace{{\it\enspace}}\eightpoint}% + \toks@@{##1\unskip.}% + \edef\thekeywords@{\the\toks@\frills@{{\noexpand\it + Key words and phrases.\noexpand\enspace}}\the\toks@@}% + \fi}% + \nofrillscheck\keywords} +% +% \subjclass is analogous to \keywords. We also need a year; only +% certain years are valid, so we check and report an error if an +% invalid year is entered. Default to 1991, so that archived +% material will be processed correctly. +% We should also check in case a LaTeX-style year change, [...], is +% entered and report an error for that as well; however, that is +% more complicated, and not implemented in this round. [2001/02/28] +% +\def\xci@{1991} +\def\mm@{2000} +\def\subjclassyear#1{% + \def\subjyear@{#1}% + \ifx\subjyear@\mm@ + \else \ifx\subjyear@\xci@ + \else \message{AmS-TeX warning: Unknown edition (#1) of + Mathematics Subject Classification; using 1991 edition}% + \def\subjyear@{1991}% + \fi\fi} +\subjclassyear{1991} +\def\thesubjclass@{} +\def\subjclass{\let\savedef@\subjclass + \def\subjclass##1\endsubjclass{\let\subjclass\savedef@ + \toks@{\def\usualspace{{\rm\enspace}}\eightpoint}% + \toks@@{##1\unskip.}% + \edef\thesubjclass@{\the\toks@ + \frills@{{\noexpand\rm\noexpand\subjyear@\noexpand\space + {\noexpand\it Mathematics Subject Classification}.\noexpand\enspace}}% + \the\toks@@}}% + \nofrillscheck\subjclass} +% +% 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{\let\savedef@\abstract + \def\abstract{\let\abstract\savedef@ + \setbox\abstractbox@\vbox\bgroup\noindent$$\vbox\bgroup + \def\envir@end{\endabstract}\advance\hsize-2\indenti + \def\usualspace{\enspace}\eightpoint \noindent + \frills@{{\smc Abstract.\enspace}}}% + \nofrillscheck\abstract} +% +% 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 the heading macros causes problems. Therefore +% we process \widestnumber in two stages: first, inside a group, +% removing the outerness by letting the macros = \relax. Then, +% using an \expandafter\endgroup trick, we read the arguments +% while the macros are still nonouter, but process the arguments +% after we have exited from the group. +% +% Now that \no is deprecated, provide for the possibility that +% \refstyle C has been set before testing for \widestnumber, +% and if so, don't reset it. [bnb, 1996/12/22] +% +\def\widestnumber{\begingroup \let\head\relax\let\subhead\relax + \let\subsubhead\relax \expandafter\endgroup\setwidest@} +% +\def\setwidest@#1#2{% + \ifx#1\head\setbox\tocheadbox@\hbox{#2.\enspace}% + \else\ifx#1\subhead\setbox\tocsubheadbox@\hbox{#2.\enspace}% + \else\ifx#1\subsubhead\setbox\tocsubheadbox@\hbox{#2.\enspace}% + \else\ifx#1\key + \if C\refstyle@ \else\refstyle A\fi + \setboxz@h{\refsfont@\keyformat{#2}}% + \refindentwd\wd\z@ + \else\ifx#1\no\refstyle C% + \setboxz@h{\refsfont@\keyformat{#2}}% + \refindentwd\wd\z@ + \else\ifx#1\page\setbox\z@\hbox{\quad\bf#2}% + \pagenumwd\wd\z@ +% We assume the default form for \item numbers rather than trying +% to handle all the variations such as "..." + \else\ifx#1\item + \setboxz@h{(#2)}\rosteritemwd\wdz@ + \else\message{\string\widestnumber\space not defined for this + option (\string#1)}% +\fi\fi\fi\fi\fi\fi\fi} +% +% \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\proclaimheadfont@{\smc}% + \def\remarkheadfont@{\smc}} +% +\let\varindent@\noindent +% +\newbox\tocheadbox@ \newbox\tocsubheadbox@ +\newbox\tocbox@ +% +% Allocate a dimen register for the width of the page number +% column in table of contents. The true value of \pagenumwd +% is not assigned until \toc is actually called, to avoid +% initialization complications. +\newdimen\pagenumwd +% +\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. +% + \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@ + \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 +% Redefine \page (it has another definition normally, for use in +% references). 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\penalty\z@\null\hfil + \rlap{\hbox to\pagenumwd{\quad\hfil####1}}% + \hfilneg\penalty\@M}% + \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"). +% 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. + \setboxz@h{\bf\quad000}\pagenumwd\wd\z@ + \advance\rightskip\pagenumwd +% 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{% + \let\savedef@\translator + \def\translator##1\endtranslator{\let\translator\savedef@ + \edef\thetranslator@{\noexpand\nobreak\noexpand\medskip + \noexpand\line{\noexpand\eightpoint\hfil + \frills@{Translated by \uppercase}{##1}\qquad\qquad}% + \noexpand\nobreak}}% + \nofrillscheck\translator} +% +% \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 text 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 +% \add@missing to catch missing \endabstract's. +% +\outer\def\endtopmatter{\add@missing\endabstract + \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 + \inslogo@ +% 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 + \begingroup % to localize variant topskip + \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@ + \endgroup + \preauthor + \ifvoid\authorbox@\else \vskip2.5pcplus1pc\unvbox\authorbox@\fi + \preaffil + \ifvoid\affilbox@\else \vskip1pcplus.5pc\unvbox\affilbox@\fi + \predate + \ifx\thedate@\empty@\else + \vskip1pcplus.5pc\line{\hfil\thedate@\hfil}\fi + \preabstract + \ifvoid\abstractbox@\else + \vskip1.5pcplus.5pc\unvbox\abstractbox@ \fi + \ifvoid\tocbox@\else\vskip1.5pcplus.5pc\unvbox\tocbox@\fi + \prepaper + \vskip2pcplus1pc\relax +} +% +\newif\ifdocument@ \document@false +\def\document{\document@true +% We call \loadextrafonts@ here as well as in \topmatter; this is +% to allow use of the extra sizes of the fonts in e.g. test documents +% that don't include a full topmatter section. If \topmatter was +% executed, \loadextrafonts@ will now be a harmless no-op. + \loadextrafonts@ + \let\fontlist@\relax\let\alloclist@\relax +% Start out in \tenpoint + \tenpoint} +% +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% -6- SECTION HEADINGS +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\message{section heads,} +% In accordance with conventional design principles, the space +% below headings is not given any stretchability or +% shrinkability. +% +\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. +% 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. +% +% 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{\par\skip@#2\relax + \ifdim\lastskip<\skip@\relax\removelastskip + \ifnum#1=\z@\else\penalty@#1\relax\fi\vskip\skip@ + \else\ifnum#1=\z@\else\penalty@#1\relax\fi\fi} +% +% The above code contains a bug: if \lastskip=\skip@ (as it does +% between two adjacent theorems), and this point coincides with +% a page break, the \lastskip will remain at the bottom of the +% page. This could be corrected by reformulating the code, but +% page breaks would change; therefore, no change has been made, +% for reasons of backward compatibility. However, the following +% code would `do the right thing': +% +% \def\penaltyandskip@#1#2{\par\skip@#2\relax +% \ifdim\lastskip>\skip@ +% \ifnum#1=\z@\else\penalty@#1\relax\fi +% \else\relax\removelastskip +% \ifnum#1=\z@\else\penalty@#1\relax\fi\vskip\skip@ +% \fi} +% +% When a page ends with space from \lastskip, inserting \pagebreak +% at the end of the text of the last element (before \end...) will +% remove the space; \removelastskip before the beginning of the +% next element has no lasting effect, as it inserts a negative skip +% that is smaller than the new skip applied with \penaltyandskip@, +% and is therefore removed. +% +\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\gdef\penalty@{\global\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{\global\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{\DN@{\ifx\next\nofrills + \expandafter\subheading@ + \else \expandafter\subheading@\expandafter\empty@ + \fi}% + \FN@\next@ +} +\def\subheading@#1#2{\subhead#1#2\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. +% +\newskip\abovespecialheadskip +\abovespecialheadskip=\aboveheadskip +\def\specialheadfont@{\bf} +\outer\def\specialhead{% + \add@missing\endroster \add@missing\enddefinition + \add@missing\enddemo \add@missing\endexample + \add@missing\endproclaim + \penaltyandskip@{-200}\abovespecialheadskip + \begingroup\interlinepenalty\@M\rightskip\z@ plus\hsize + \let\\\linebreak + \specialheadfont@\noindent} +\def\endspecialhead{\par\endgroup\nobreak\vskip\belowheadskip} +% +% penalty-200 is the penalty amount used by plain.tex's +% \bigbreak. +% +\outer\def\head#1\endhead{% + \add@missing\endroster \add@missing\enddefinition + \add@missing\enddemo \add@missing\endexample + \add@missing\endproclaim + \penaltyandskip@{-200}\aboveheadskip + {\headfont@\raggedcenter@\interlinepenalty\@M + #1\endgraf}\headmark{#1}% + \nobreak + \vskip\belowheadskip} +% +% \headmark will be redefined to be \rightheadtext by \Monograph. +% +\let\headmark\eat@ +% +% The purpose of \restoredef@ is to work around problems caused +% by the outerness of things like \subhead. \relax at the +% beginning prevents the \savedef@ (which may be \outer) from +% being read prematurely in certain kinds of expansion. +% +\def\restoredef@#1{\relax\let#1\savedef@\let\savedef@\relax} +% +% \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{% + \add@missing\endroster \add@missing\enddefinition + \add@missing\enddemo \add@missing\endexample + \add@missing\endproclaim + \let\savedef@\subhead \let\subhead\relax + \def\subhead##1\endsubhead{\restoredef@\subhead + \penaltyandskip@{-100}\subheadskip +% Add italic correction in \usualspace, because \subheadfont@ is +% italic, in case the substituted punctuation is something tall +% like a question mark or exclamation point. + {\def\usualspace{\/{\subheadfont@\enspace}}% + \varindent@\subheadfont@\ignorespaces##1\unskip\frills@{.\enspace}}% + \ignorespaces}% + \nofrillscheck\subhead} +% +% In version 2.0 of amsppt.sty we also add a third level of +% heading, \subsubhead. +% +\newskip\subsubheadskip \subsubheadskip\medskipamount +\def\subsubheadfont@{\it} +\outer\def\subsubhead{% + \add@missing\endroster \add@missing\enddefinition + \add@missing\enddemo + \add@missing\endexample \add@missing\endproclaim + \let\savedef@\subsubhead \let\subsubhead\relax + \def\subsubhead##1\endsubsubhead{\restoredef@\subsubhead + \penaltyandskip@{-50}\subsubheadskip +% Add italic correction in \usualspace, because \subsubheadfont@ +% is italic, in case the substituted punctuation is something tall +% like a question mark or exclamation point. + {\def\usualspace{\/{\subsubheadfont@\enspace}}% + \subsubheadfont@##1\unskip\frills@{.\enspace}}\ignorespaces}% + \nofrillscheck\subsubhead} +% +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% -7- THEOREM ENVIRONMENTS AND SIMILAR STRUCTURES +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\message{theorems/proofs/definitions/remarks,} +% +\def\proclaimheadfont@{\bf} +% Make \proclaimfont a non-private control sequence, so that +% users can change it back to \sl if desired without +% complications. +\def\proclaimfont{\it} +% +\newskip\preproclaimskip \preproclaimskip=\medskipamount +\newskip\postproclaimskip \postproclaimskip=\medskipamount +\outer\def\proclaim{% + \let\savedef@\proclaim \let\proclaim\relax + \add@missing\endroster \add@missing\enddefinition + \add@missing\endproclaim \envir@stack\endproclaim +% penalty-100 is the penalty amount used by plain.tex's +% \medbreak. + \def\proclaim##1{\restoredef@\proclaim + \penaltyandskip@{-100}\preproclaimskip + {\def\usualspace{\/{\proclaimheadfont@\enspace}}% + \varindent@\proclaimheadfont@\ignorespaces##1\unskip + \frills@{.\enspace}}% + \proclaimfont\ignorespaces}% + \nofrillscheck\proclaim} +% +% \endproclaim 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.) Version 2.1 change: +% removed \outer prefix, to simplify some programming related +% to \add@missing and \revert@envir. +% +\def\endproclaim{\revert@envir\endproclaim \par\rm + \vskip\postproclaimskip} +% +% In \remark, we take the opportunity again to issue an error +% message if a previous \proclaim has no matching \endproclaim. +% +\def\remarkheadfont@{\it} +\def\remarkfont{\rm} +\newskip\remarkskip \remarkskip=\medskipamount +\def\remark{\let\savedef@\remark \let\remark\relax + \add@missing\endroster \add@missing\endproclaim + \envir@stack\endremark + \def\remark##1{\restoredef@\remark + \penaltyandskip@\z@\remarkskip + {\def\usualspace{\/{\remarkheadfont@\enspace}}% + \varindent@\remarkheadfont@\ignorespaces##1\unskip + \frills@{.\enspace}}% + \remarkfont\ignorespaces}% + \nofrillscheck\remark} +% +% \endremark is easy. +% +\def\endremark{\par\revert@envir\endremark} +% +% Assumption: \square is defined in initialization (normally via +% \UseAMSsymbols). +\def\qed{\ifhmode\unskip\nobreak\fi\quad + \ifmmode\square\else$\m@th\square$\fi} +% +% Proofs are the same as Remarks, except there is an additional +% \medskip after a Proof. We don't have a runaway demo or remark +% check until \enddocument because proofs within proofs (and +% perhaps remarks within remarks) are possible. +% +\newskip\postdemoskip \postdemoskip=\medskipamount +% Ensure that there is no lingering indication of a manual end-of-proof box. +\newif\if@qedhere +\def\demo{% + \@qedherefalse + \DN@{\ifx\next\nofrills + \DN@####1####2{\remark####1{####2}\envir@stack\enddemo + \ignorespaces}% + \else + \DN@####1{\remark{####1}\envir@stack\enddemo\ignorespaces}% + \fi + \next@}% +\FN@\next@} +% +\def\enddemo{\par\revert@envir\enddemo \endremark\vskip\postdemoskip} +% +% \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 \it used for \proclaim. +% +\def\definitionfont{\rm} +\newskip\predefinitionskip \predefinitionskip=\medskipamount +\newskip\postdefinitionskip \postdefinitionskip=\medskipamount +\def\definition{\let\savedef@\definition \let\definition\relax + \add@missing\endproclaim \add@missing\endroster + \add@missing\enddefinition \envir@stack\enddefinition +% \proclaimheadfont@ comes after the period here because +% sometimes we want 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. + \def\definition##1{\restoredef@\definition + \penaltyandskip@{-100}\predefinitionskip + {\def\usualspace{\/{\proclaimheadfont@\enspace}}% + \varindent@\proclaimheadfont@\ignorespaces##1\unskip + \frills@{.\proclaimheadfont@\enspace}}% + \definitionfont\ignorespaces}% + \nofrillscheck\definition} +\def\enddefinition{\revert@envir\enddefinition + \par\vskip\postdefinitionskip} +% +\def\example{% + \DN@{\ifx\next\nofrills + \DN@####1####2{\definition####1{####2}\envir@stack\endexample + \ignorespaces}% + \else + \DN@####1{\definition{####1}\envir@stack\endexample\ignorespaces}% + \fi + \next@}% +\FN@\next@} +\def\endexample{\revert@envir\endexample \enddefinition } +% +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% -8- ROSTERS +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\message{rosters,} +% In version 2 of amsppt we provide a more convenient way of +% changing the indention of roster items. +% +\newdimen\rosteritemwd +\rosteritemwd16pt % approximately the width of (iii) in 10 point text +% +% \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{}} +% +\def\leftskip@{} +% +\def\roster{% + \envir@stack\endroster +% We also have to store the \leftskip, since it will be changed. + \edef\leftskip@{\leftskip\the\leftskip}% + \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\therosteritem{\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\therosteritem1\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 +% And set \firstitem@true for use with \item. + \firstitem@true}% + \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. + \leftskip\rosteritemwd \advance\leftskip\normalparindent + \advance\leftskip.5em \noindent + \DNii@[##1]{\rostercount@##1\relax\itembox@}% +% If [...] follows \item, we use ... as the number, again by +% setting \rostercount@, so that succeeding \items will have the +% right number. + \def\nextiii@"##1"{\def\therosteritem@{\rm##1}\itembox@}% +% If "..." follows \item, we use ... exactly as typed. + \def\nextiv@{\advance\rostercount@\@ne\itembox@}% +% Otherwise we print the \rostercount@ in parentheses. + \def\therosteritem@{\therosteritem{\number\rostercount@}}% + \ifx\next[\let\next@\nextii@\else\ifx\next"\let\next@\nextiii@\else + \let\next@\nextiv@\fi\fi\next@} +% +\def\itembox@{\llap{\hbox to\rosteritemwd{\hss + \kern\z@ % kern to thwart \unskip in \rom + \therosteritem@}\enspace}\ignorespaces} +% +% \therosteritem is just a convenience for the user. +% +\def\therosteritem#1{\rom{(\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@ + \revert@envir\endroster % restore \envir@end + \par\leftskip@ % End the paragraph, and restore the \leftskip. + \global\rosteritemwd16\p@ % restore default value + \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 \endroster is followed by \par, + \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@ + \envir@stack\endroster +% Initialize \rostercount@ to 0. + \rostercount@\z@ +% Define \item as before. + \def\item{\FN@\rosteritem@}% +% Store everything up to the roster in \runinitem@. + \def\runinitem@{#1}% + \DN@{\ifx\next[\let\next\nextii@\else\ifx\next"\let\next\nextiii@ + \else\let\next\nextiv@\fi\fi\next}% + \DNii@[##1]{\rostercount@##1\relax +% 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\item@{\therosteritem{\number\rostercount@}}\nextv@}% +% If "..." follows \runinitem, we define \item@ to use it. + \def\nextiii@"##1"{\def\item@{{\rm##1}}\nextv@}% + \def\nextiv@{\advance\rostercount@\@ne +% Otherwise, we use the proper \rostercount@. Now comes \nextv@, +% which has to properly typeset things. + \def\item@{\therosteritem{\number\rostercount@}}\nextv@}% +% First store things in \box0 . + \def\nextv@{\setbox\z@\vbox +% Start unindented if we have \ifnextRunin@true. This will +% happen only if we had \Runinitem...\endroster right before. + {\ifnextRunin@\noindent\fi +% Add the stored things in \runinitem@, and then \item@. + \runinitem@\unskip\enspace\item@~\par +% This sets \rosterhangafter@ to the number of lines in \box0 , +% i.e., of the material so far; see the TeXbook, p. 103. We need +% to say \global since this is set within \box0. Now we're done +% with \box0 ! + \global\rosterhangafter@\prevgraf}% + \firstitem@false% Set \firstitem@false for future \item's. +% 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 . + \ifnextRunin@\else\par\fi + \hangafter\rosterhangafter@\hangindent3\normalparindent +% Start unindented if we had a \Runinitem ... \endroster right +% before. + \ifnextRunin@\noindent\fi + \runinitem@\unskip\enspace% Put in all the stored stuff + \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@} +% +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% -9- FOOTNOTES +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\message{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 the TeXbook, 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@skip\rightskip\z@skip + \spaceskip\z@skip\xspaceskip\z@skip + \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 the TeXbook, 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-4\p@ + \hrule width5pc\kern 3.6\p@}% the \hrule is .4pt high +% +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% -10- TABLES +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% At the present time no table macros are provided. Captions can +% be gotten using \topcaption or \botcaption. +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% -11- FIGURE SPACES AND CAPTIONS +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\message{figures 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. +% +\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}% +% Include period only if both caption number and text are present. + \if\notempty{#2}\if\notempty{#1}.\enspace\fi\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. Include period only if both caption number and +% text are present. + \setboxz@h{\captionfont@#1\if\notempty{#2}\if\notempty{#1}.\enspace\fi + \rm\ignorespaces#2\fi}% + {\dimen@\hsize \advance\dimen@-\captionwidth@ + \leftskip.5\dimen@ \rightskip\leftskip +% long caption---set it in a paragraph + \noindent \ifdim\wdz@>\captionwidth@ +% short caption---add \hfil to balance with \parfillskip. + \else\hfil\fi + {\captionfont@#1}% + \if\notempty{#2}\if\notempty{#1}.\enspace\fi\rm\ignorespaces#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 +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% -12- MISCELLANEOUS FORMATTING MACROS +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\message{miscellaneous,} +% \block is intended for typing long quotes in a block, indented on +% both margins. It is set up so that it can be used in either of two +% ways: +% +% $$\block...\endblock\tag1.1$$ +% +% or +% +% Normal text. +% \block ... \endblock +% Continue with more text. +% +% In the latter case, we use a TeX display to provide spacing above +% and below the block. If we're in vertical mode when \block is +% called, we use \noindent to avoid getting an extra blank line +% before the display. But then we will get the short display skips +% instead of the full display skips, so we set \predisplaysize +% explicitly to ensure the full display skips. +% +\def\block{\RIfMIfI@\nondmatherr@\block\fi + \else\ifvmode\noindent$$\predisplaysize\hsize + \else$$\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{\rom{[{\citefont@\m@th#1}]}} +% +% In version 1 of amsppt \citefont was \bf. +% +\def\citefont@{\rm} +% +% \rom provides a way for getting roman punctuation and numerals +% in italic text. It takes pains to handle italic corrections +% reasonably nicely. +% +\def\rom#1{\leavevmode + \edef\prevskip@{\ifdim\lastskip=\z@ \else\hskip\the\lastskip\relax\fi}% + \unskip + \edef\prevpenalty@{\ifnum\lastpenalty=\z@ \else + \penalty\the\lastpenalty\relax\fi}% + \unpenalty \/\prevpenalty@ \prevskip@ {\rm #1}} +% +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% -13- BIBLIOGRAPHY +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\message{references,} +% +\def\refsfont@{\eightpoint} +\def\refsheadfont@{\headfont@} +% +% \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]\enspace". \widestnumber can +% also be used with \no: \widestnumber\no{000} for 3-digit +% numbers, \widestnumber\no{0} for 1-digit numbers, and so on. +% However, the use of \no, with or without \widestnumber, is +% deprecated, and this use will not be documented in the user's +% guide. +% +\newdimen\refindentwd +\setboxz@h{\refsfont@ 00.\enspace} +\refindentwd\wdz@ +% +% Allow the default title for the references to be varied easily; +% users will still be instructed to change it using \nofrills. +\def\Refsname{References} +\outer\def\Refs{\add@missing\endroster \add@missing\endproclaim + \let\savedef@\Refs \let\Refs\relax % because of \outer-ness + \def\Refs##1{\restoredef@\Refs +% For a monograph where the title of the References section is +% done using \title, we want to omit the normal "References" +% heading and the vertical skips above and below. This can be +% accomplished using \Refs\nofrills{}. As long as the vskip at +% the end of \endtopmatter is not less than \aboveheadskip and +% \belowheadskip, this will be accomplished by the fact that +% \penaltyandskip@ doesn't add to a previous larger vskip, and +% the ragged center part will simply vanish if #1 is empty. + \if\notempty{##1}\penaltyandskip@{-200}\aboveheadskip + \begingroup \raggedcenter@\refsheadfont@ + \ignorespaces##1\endgraf\endgroup + \penaltyandskip@\@M\belowheadskip + \fi + \begingroup\def\envir@end{\endRefs}\refsfont@\sfcode`\.\@m + }% +% This line here is a little tricky. If a \nofrills is found when +% we look ahead, then \frills@ will become equal to \eat@ and it +% will eat "References" before \Refs is allowed to read its +% argument. Also we have to use a \csname trick to get around +% the outerness of \Refs. MJD + \nofrillscheck{\csname Refs\expandafter\endcsname + \frills@{{\Refsname}}}} +% +\def\endRefs{\par % This will check for a missing \endref, also + \endgroup} +% +% These two conditionals are used for handling the logic of +% typesetting book versus journal article versus proceedings +% article references. +\newif\ifbook@ \newif\ifprocpaper@ +% +% The \else clause here is to handle the case when \nofrills is +% used outside of the References section in an unexpected place +% (i.e., not immediately after \proclaim, \definition, \head, or +% the other things that have a \nofrills option). +% +\def\nofrills{% +% Are we inside a \ref...\endref pair? If so, OK to continue. + \expandafter\ifx\envir@end\endref + \let\do\relax + \xdef\nofrills@list{\nofrills@list\do\curbox}% + \else\errmessage{\Invalid@@ \string\nofrills}% + \fi}% +% +\def\defaultreftexts{\gdef\edtext{ed.}\gdef\pagestext{pp.}% + \gdef\voltext{vol.}\gdef\issuetext{no.}} +\defaultreftexts +% +\def\ref{\par + \begingroup \def\envir@end{\endref}% +% Start the reference. + \noindent\hangindent\refindentwd +% Change \par so that it will supply a (presumably) missing +% \endref, with an error message. + \def\par{\add@missing\endref}% +% Footnotes get lost in references on account of the extensive +% boxing; change \footnote to emit a warning message. + \let\orig@footnote\footnote + \def\footnote{\message{AmS-TeX warning: \string\footnote\space within + a reference will disappear;^^J + use \string\footnotemark\space \string\footnotetext\space instead}% + \orig@footnote}% +% \nofrills@list should always be assigned globally, to conserve +% save stack. + \global\let\nofrills@list\empty@ +% +% Change \linebreak and \mathbreak to work properly in the +% special ref environment. + \refbreaks + \procpaper@false \book@false \moreref@false +% Start an initial box, to match up properly with the first +% upcoming \makerefbox; this will be discarded. + \def\curbox{\z@}\setbox\z@\vbox\bgroup +} +% +% \keyhook@ is used for switching the style of reference labels +% automatically behind the scenes. This is for phasing in, +% without loss of backward compatibility, a \refstyle command to +% implement the various reference styles currently used in AMS +% production. [19-MAR-1991] See the definition of \refstyle. +% +\let\keyhook@\empty@ +% +\def\endref{% +% To wind up the preceding box it is convenient to call +% \makerefbox again; it will also open a new box, however, so we +% give it arguments \thr@@ and \endgraf\egroup that will cause +% the new box to be closed immediately and discarded. But we must +% first make sure box 3 is void or we'll trigger an error +% message. This is done by dumping the current contents of +% (global register) box 3 into (local register) box 2; the \box +% command always makes its argument globally void. (Because box +% 0 is used heavily in \makerefbox, it's easier to just use box 2 +% here, rather than try to verify that using box 0 would be safe +% in all cases.) + \setbox\tw@\box\thr@@ + \makerefbox?\thr@@{\endgraf\egroup}% +% Then we call \endref@ to take all the saved material and +% combine it into a paragraph, adding punctuation to separate +% pieces. + \endref@ +% The \endgraf is done here rather than in \endref@ because in +% \moreref or \transl cases \endref@ shouldn't do the \endgraf. + \endgraf +% Finally, we need to close the group that was started by \ref. +% This has the effect of killing the current definition of +% \envir@end, among other things. + \endgroup + \keyhook@ + \global\let\keyhook@\empty@ % \global to conserve save stack +} +% +\def\key{\gdef\key{\makerefbox\key\keybox@\empty@}\key} \newbox\keybox@ +% \no is deprecated in favor of \key; it remains here only for the +% purpose of compatibility with existing files. +\def\no{\gdef\no{\makerefbox\no\keybox@\empty@}% + \gdef\keyhook@{\refstyle C}\no} +\def\by{\makerefbox\by\bybox@\empty@} \newbox\bybox@ +\let\manyby\by % for backward compatibility +\def\bysame{\by\hbox to3em{\hrulefill}\thinspace\kern\z@} +\def\paper{\makerefbox\paper\paperbox@\it} \newbox\paperbox@ +\def\paperinfo{\makerefbox\paperinfo\paperinfobox@\empty@}% + \newbox\paperinfobox@ +\def\jour{\makerefbox\jour\jourbox@ + {\aftergroup\book@false \aftergroup\procpaper@false}} \newbox\jourbox@ +\def\issue{\makerefbox\issue\issuebox@\empty@} \newbox\issuebox@ +\def\yr{\makerefbox\yr\yrbox@\empty@} \newbox\yrbox@ +\def\pages{\makerefbox\pages\pagesbox@\empty@} \newbox\pagesbox@ +\def\page{\gdef\pagestext{p.}\makerefbox\page\pagesbox@\empty@} +\def\ed{\makerefbox\ed\edbox@\empty@} \newbox\edbox@ +\def\eds{\gdef\edtext{eds.}\makerefbox\eds\edbox@\empty@} +% The \aftergroup\book@true here sets the \ifbook@ switch so that +% later (in \endref@) we will know whether we are typesetting a +% book, a journal article, or a proceedings article. Could use +% \global instead of \aftergroup but avoiding \global is usually +% safer when possible. +\def\book{\makerefbox\book\bookbox@ + {\it\aftergroup\book@true \aftergroup\procpaper@false}} + \newbox\bookbox@ +\def\bookinfo{\makerefbox\bookinfo\bookinfobox@\empty@}% + \newbox\bookinfobox@ +\def\publ{\makerefbox\publ\publbox@\empty@} \newbox\publbox@ +\def\publaddr{\makerefbox\publaddr\publaddrbox@\empty@}% + \newbox\publaddrbox@ +% See the above comment for \book about the \aftergroup +\def\inbook{\makerefbox\inbook\bookbox@ + {\aftergroup\procpaper@true \aftergroup\book@false}} +\def\procinfo{\makerefbox\procinfo\procinfobox@\empty@}% + \newbox\procinfobox@ +\def\finalinfo{\makerefbox\finalinfo\finalinfobox@\empty@}% + \newbox\finalinfobox@ +\def\miscnote{\makerefbox\miscnote\miscnotebox@\empty@}% + \newbox\miscnotebox@ +\def\toappear{\miscnote to appear} +\def\lang{\makerefbox\lang\langbox@\empty@} \newbox\langbox@ +\newbox\morerefbox@ +% +% \vol is special because in AMS style it takes a different font +% depending on whether it's a journal volume or a book volume. +% +\def\vol{\makerefbox\vol\volbox@{\ifbook@ \else + \ifprocpaper@\else\bf\fi\fi}} +\newbox\volbox@ +% +% \MR has to take its argument in braces in order to pick out the +% volume number and make it bold. For consistency we do the same for +% AMSPPS. [mjd,17-Aug-1995] +% Provide an MR number for a bibliography item. +\define\MR#1{\makerefbox\MR\MRbox@\empty@ + \def\next@##1:##2:##3\next@{\ifx @##2\empty@##1\else{\bf##1:}##2\fi}% + MR \next@#1:@:\next@} +% +\newbox\MRbox@ +% +% User-comand for citing a preprint on the AMS preprint server. +% \MR and \AMSPPS are mutually exclusive (at least in normal use), so +% we can use \MRbox@ here instead of allocating another box. +% +% Without the discretionary hyphen, AMSPPS would break as AM-SPPS. +% +\define\AMSPPS#1{\makerefbox\AMSPPS\MRbox@\empty@ AMS\-PPS \##1} +% +% Assume for the moment that \CMP and \MR commands won't occur in +% the same ref. Too much heavy-duty programming required otherwise. +% [mjd,1995/09/28] +\define\CMP#1{\makerefbox\CMP\MRbox@\empty@ CMP #1} +% +\newbox\holdoverbox +% +% \makerefbox takes three arguments: the first is the name of +% the calling macro, for use in error messages; argument 2 +% is the box used for storing data (note: some boxes are shared +% by more than one calling macro); argument 3 is additional +% material (optional---may be empty) that may be used to +% affect the contents of the box. +% +\def\makerefbox#1#2#3{\endgraf +% Set box 0 to the just-completed line of text. + \setbox\z@\lastbox +% Although \holdoverbox will usually be void it still doesn't +% hurt to \unhbox it here in every case, which simplifies the +% programming. + \global\setbox\@ne\hbox{\unhbox\holdoverbox +% \ifvoid test is necessary here to prevent a \linebreak at the +% end of a field from being removed by the \unpenalty. + \ifvoid\z@\else\unhbox\z@\unskip\unskip\unpenalty\fi}% + \egroup +% If box 1 is empty (width <= 0pt) then set the current box to +% void (it might still have a baselineskip glue or something in +% it at this point, for one thing). Otherwise set it to box 1. + \setbox\curbox\box\ifdim\wd\@ne>\z@ \@ne \else\voidb@x\fi +% That finishes the previous box. Now let's start a new one +% using the box given as arg 1 of \makerefbox. But first check +% to see if it's void and if not give an error message. + \ifvoid#2\else\Err@{Redundant \string#1; duplicate use, or + mutually exclusive information already given}\fi + \def\curbox{#2}\setbox\curbox\vbox\bgroup \hsize\maxdimen \noindent + #3} +% +\def\refbreaks{% + \def\refconcat##1{\setbox\z@\lastbox \setbox\holdoverbox\hbox{% + \unhbox\holdoverbox \unhbox\z@\unskip\unskip\unpenalty##1}}% + \def\holdover##1{% + \RIfM@ +% Break the current line, adding \null to ensure proper spacing for +% a preceding mathrel or mathbin. The blank line containing the +% \null will be discarded by later processing. + \penalty-\@M\null +% Put a temporary ending of the current math formula on the next +% line, by itself. + \hfil$\clubpenalty\z@\widowpenalty\z@\interlinepenalty\z@ + \offinterlineskip\endgraf +% Now remove that unwanted extra line and the preceding \lineskip +% (of 0pt) and any penalty. There shouldn't be any penalty, +% actually, because the relevant penalties were set to 0 above; +% but the \unpenalty is harmless and perhaps there is an +% overlooked eventuality that it will catch. + \setbox\z@\lastbox\unskip \unpenalty + \refconcat{##1}% + \noindent +% Since we did a temporary end of the current math formula there +% remains some more math coming up; therefore we need to shift +% into math mode again. By breaking immediately after the +% beginning of the math formula we leave the unwanted extra +% \mathon item in a line by itself; this will be ignored because +% in the unpacking process we will only take the last line out of +% the current \vbox. + $\hfil\penalty-\@M +% No \null here because we don't need to do anything extra to +% affect the math spacing of the following item. (Line breaks +% in math formulas always occur after a \mathbin or \mathrel, +% not before, according to AMS style.) + \else + \endgraf\refconcat{##1}\noindent + \fi}% + \def\break{\holdover{\penalty-\@M}}% + \let\vadjust@\vadjust + \def\vadjust##1{\holdover{\vadjust@{##1}}}% +% It seems unlikely that \newpage will be needed inside of a +% \ref...\endref construction (more likely it will occur between +% references, if at all). So we provide only a very simple +% alternate version using \vadjust. + \def\newpage{\vadjust{\vfill\break}}% +} +% +\def\refstyle#1{\uppercase{% + \gdef\refstyle@{#1}% + \if#1A\relax \def\keyformat##1{[##1]\enspace\hfil}% + \else\if#1B\relax + \refindentwd\parindent + \def\keyformat##1{\aftergroup\kern + \aftergroup-\aftergroup\refindentwd}% + \else\if#1C\relax + \def\keyformat##1{\hfil##1.\enspace}% + \fi\fi\fi}% end of \uppercase +} +% +% Make letters the default for ref labels. This is chosen over +% refstyle C with a view to eventually phasing out \no in favor +% of always using \key, with the formatting being determined by +% the refstyle setting. +\refstyle{A} +% +% You might think that \refbreak@ shouldn't be necessary here (it +% executes a line break if the user specified \linebreak in the +% last field of the reference), but: sometimes there will be a +% language after the final period, and conceivably someone might +% need to break the line after the period and before the +% language. +\def\finalpunct{\ifnum\lastkern=\m@ne\unkern\else.\spacefactor2000 \fi + \refquotes@\refbreak@}% +\def\continuepunct#1#2#3#4{}% +% +% \endref@ is shared by \endref, \moreref, and \transl, therefore +% some of the code needs to be circumspect. +\def\endref@{% +% Change the format of the reference label, if necessary: + \keyhook@ +% This variant definition of \nofrillscheck is embedded in +% \endref@ despite the slight cost in extra execution time, in +% order to allow, e.g., subheadings within a bibliography section +% to have normal \nofrills action. + \def\nofrillscheck##1{% + \def\do####1{\ifx##1####1\let\frills@\eat@\fi}% + \let\frills@\identity@ \nofrills@list}% +% If no author name was given, but editor name was given, then +% transfer it to the author name box so that it will print at the +% beginning of the reference. This would normally happen only +% in the case of a proceedings volume or other such collection, +% cited as a whole. + \ifvoid\bybox@ + \ifvoid\edbox@ + \else\setbox\bybox@\hbox{\unhbox\edbox@\breakcheck + \nofrillscheck\edbox@\frills@{\space(\edtext)}\refbreak@}\fi + \fi +% \noindent \hangindent\refindentwd was done earlier by \ref, so +% at this point we just need to put the reference label on the +% page. +% +% Using this \ifvoid test is partly to prevent accessing \keybox@ +% in the \moreref and \transl cases: + \ifvoid\keybox@\else\hbox to\refindentwd{% + \keyformat{\unhbox\keybox@}}\fi + \ifmoreref@ +% Even though this reads ``\commaunbox@,'' a semicolon will be +% substituted for the comma by the action of \punct@ if +% \morerefbox@ is in fact not void. (And note that both \transl +% and \moreref share \morerefbox@.) + \commaunbox@\morerefbox@ + \else +% Put in some special kerns to flag the beginning of a reference, +% to avoid adding unwanted punctuation and space if \by is omitted. + \kern-\tw@ sp\kern\m@ne sp + \fi + \ppunbox@\empty@\empty@\bybox@\empty@ + \ifbook@ % Case 1: \book etc. + \commaunbox@\bookbox@ \commaunbox@\bookinfobox@ + \ppunbox@\empty@{ (}\procinfobox@)% + \ppunbox@,{ vol.~}\volbox@\empty@ + \ppunbox@\empty@{ (}\edbox@{, \edtext)}% + \commaunbox@\publbox@ \commaunbox@\publaddrbox@ + \commaunbox@\yrbox@ + \ppunbox@,{ \pagestext~}\pagesbox@\empty@ + \else + \commaunbox@\paperbox@ \commaunbox@\paperinfobox@ + \ifprocpaper@ % Case 2: \paper ... \inbook + \commaunbox@\bookbox@ + \ppunbox@\empty@{ (}\procinfobox@)% + \ppunbox@\empty@{ (}\edbox@{, \edtext)}% + \commaunbox@\bookinfobox@ + \ppunbox@,{ \voltext~}\volbox@\empty@ + \commaunbox@\publbox@ \commaunbox@\publaddrbox@ + \commaunbox@\yrbox@ + \ppunbox@,{ \pagestext~}\pagesbox@\empty@ + \else % Case 3: \paper ... \jour + \commaunbox@\jourbox@ + \ppunbox@\empty@{ }\volbox@\empty@ + \ppunbox@\empty@{ (}\yrbox@)% + \ppunbox@,{ \issuetext~}\issuebox@\empty@ +% Although \publ and \publaddr will rarely be used with a journal +% article, it doesn't really hurt to print them if provided, and +% certain rare cases may benefit. E.g.: +% +% \paper \"Uber maximale Monotonie von Operatoren des Typs +% $L^\ast \Phi\circ L$ \paperinfo Report 78-24 \publ Math. Inst., +% Univ. K\"oln \yr 1978 \moreref\jour published as Manuscripta +% Math. \vol28 \yr1979\pages 305--316 +% + \commaunbox@\publbox@ \commaunbox@\publaddrbox@ + \commaunbox@\pagesbox@ + \fi + \fi + \commaunbox@\finalinfobox@ + \ppunbox@\empty@{ (}\miscnotebox@)% +% The final punctuation (usually a period) here is not part of a +% \ppunbox@ clause because it is always inserted even if +% \langbox@ and \MRbox@ are void. + \finalpunct +% Tweak the spacefactor after langbox to suppress the comma that +% would otherwise be added between lang and MR. + \ppunbox@\empty@{ (}\langbox@{)\spacefactor1001 }% +% Print an MR or AMSPPS number + \ifnum\spacefactor>\@m \ppunbox@{}{ }\MRbox@\empty@ + \else \commaunbox@\MRbox@ + \fi +% Restore defaults "ed.", "pp.", etc. in case they were changed. + \defaultreftexts +} +% +% \punct@ is the same as \identity@, but we define it rather than +% using \let, just in case the contents of amsppt.sty ever get +% shuffled around in such a way that \identity@ is later in the +% file. +\def\punct@#1{#1} +% \ppunbox@ takes 4 arguments. #1 is punctuation that should +% precede ending quotes and/or a line breaking penalty, from the +% previous item. #2 is material (usually a word space) that +% should come after ending quotes or a penalty. #3 is the box +% containing the next part of the current reference. #4 is other +% material to follow box #3 (e.g., a closing parenthesis, in some +% cases). +% +\def\ppunbox@#1#2#3#4{\ifvoid#3\else + \let\prespace@\relax +% If nofrills was specified for the previous item, then it will +% have been ended with a kern of -1sp. If we find such a kern, +% we remove it and omit the normal punctuation (arg #1). + \ifnum\lastkern=\m@ne \unkern\let\punct@\eat@ +% A kern of -2sp here means we are at the very beginning of the +% reference, after the key or number. In that case we need to +% omit not only the punctuation, but also any following space. + \ifnum\lastkern=-\tw@ \unkern\let\prespace@\ignorespaces \fi + \fi + \nofrillscheck#3% + \punct@{#1}\refquotes@\refbreak@ +% Restore normal definition of \punct@: + \let\punct@\identity@ + \prespace@ +% If \nofrills is not in effect, the \space will be eaten; +% otherwise it will be substituted for the normal pre-item +% frills. + \frills@{#2\eat@}\space +% \refquotes@ and \refbreak@ will be emptied by \breakcheck +% (unless of course there is a new line breaking penalty present +% for next time around). + \unhbox#3\breakcheck + \frills@{#4\eat@}{\kern\m@ne sp}\fi} +% +\def\commaunbox@#1{\ppunbox@,\space{#1}\empty@} +% +% By putting the \ifnum here inside the \edef we get automatic +% initialization of \refbreak@ for the next time around, instead +% of needing an extra \let\refbreak@\empty@ step after \refbreak@ +% is used. +\def\breakcheck{\edef\refbreak@{\ifnum\lastpenalty=\z@\else + \penalty\the\lastpenalty\relax\fi}\unpenalty} +% +% For quotes, the complication is that the ending quotes must +% fall after a comma or other such punctuation that might come +% next (we don't know yet what punctuation will be used, if any). +% And in addition we have the usual possibility of a line break +% to worry about at the same time. Therefore the special control +% sequence \endquotes is provided, to be used like this, if let's +% say you want book titles to appear in quotes: +% +% \ppunbox@,{ ``}\bookbox@\endquotes +% \commaunbox@\bookinfobox@ +% +% \endquotes defines the control sequence \refquotes@ to add the +% ending quotes later, after we find out whether a comma, period, +% or no punctuation at all will be added (not to mention maybe a +% line breaking penalty that would need to be shuffled around). +% +\def\endquotes{\def\refquotes@{''\let\refquotes@\empty@}} +\let\refquotes@\empty@ +\let\refbreak@\empty@ +% +% We need a switch to handle certain complications with the moreref +% case. +% +\newif\ifmoreref@ +% +% \moreref ends the previous setbox operation, does \endref@ to +% typeset any information gathered so far, and then prepares to +% start the equivalent of a new \ref. +% +\def\moreref{% +% To wind up the preceding box it is convenient to call +% \makerefbox again; it will also open a new box, however, so we +% give it arguments \thr@@ and \endgraf\egroup that will cause the +% new box to be closed immediately and discarded. But we must first +% make sure box 3 is void or we'll trigger an error message. This +% is done by dumping the current contents of (global register) box +% 3 into (local register) box 2; the \box command always makes its +% argument globally void. (Because box 0 is used heavily in +% \makerefbox, it's easier to just use box 2 here, rather than try +% to verify that using box 0 would be safe in all cases.) + \setbox\tw@\box\thr@@ + \makerefbox?\thr@@{\endgraf\egroup}% +% This saved definition will be lost if something else in \endref@ +% uses \savedef@. Currently (14-MAR-1991) that is not the case, +% however, so doing it this way allows us to save a bit of memory. + \let\savedef@\finalpunct \let\finalpunct\empty@ + \endref@ +% The next time \punct@ is called by \ppunbox, it will change +% ",\refquotes@" into "\refquotes@;" or similarly for +% \empty@\refquotes@. Then \punct@ will be restored to its original +% definition. Note that this definition does not need to be +% global; it is local inside the \begingroup ...\endgroup of the +% current \ref. + \def\punct@##1##2{##2;}% + \global\let\nofrills@list\empty@ % global, to conserve save stack +% Now restore the normal definition of \finalpunct : + \let\finalpunct\savedef@ + \moreref@true +% Set any initial text between \moreref and the following +% control sequence in \morerefbox@. This is typically used with +% \transl to add a note such as "English transl." + \def\curbox{\morerefbox@}% + \setbox\morerefbox@\vbox\bgroup \hsize\maxdimen \noindent +} +% And \transl, for setting translation information, +% doesn't need to be any different than \moreref: +% +\def\transl{\moreref} +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% -14- END OF DOCUMENT +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\message{end of document,} +% +% Make sure that the primitive \end can be executed; \end may be redefined +% for some purposes where input errors are likely to occur. +\ifx\plainend\undefined \let\plainend\end \fi +\outer\def\enddocument{\par% \par will do a runaway check for \endref + \add@missing\endRefs + \check@missing@document +% Repeat these in case an article (or book chapter!) doesn't have +% a references section: + \add@missing\endroster \add@missing\endproclaim + \add@missing\enddefinition + \add@missing\enddemo \add@missing\endremark \add@missing\endexample + \enddocument@text + \vfill\supereject\plainend} + +% One non-ending element that can be missing is \document. +\def\check@missing@document{% + \ifdocument@ + \else + \Err@{You seem to have a missing or misspelled \string\document}% + \fi} + +\def\enddocument@text{% +% 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 +% The \address's get printed at the end of the paper. 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. + \thetranslator@ +% Print all the \address's, including e-mail and url 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 + \csname urladdr\number\count@\endcsname + \repeat + \fi +} + +% +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% -15- OUTPUT ROUTINE +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\message{output routine,} +% 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 small caps \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{\ifnum\pageno<\z@ \romannumeral-\pageno\else\number\pageno \fi} +\def\foliofont@{\eightrm} +\def\headlinefont@{\eightpoint} +% +% \leftheadline and \rightheadline use the method described in +% the TeXbook, p. 260 for selecting different pieces of the +% topmark or botmark. The necessary \else is inserted by +% \leftheadtext and \rightheadtext. \foliofont@ is applied +% within the headline (it was formerly included in \folio). +% Thus \folio comprises only the page number, making it suitable +% for compiling index terms for use with the non-AMS package +% index.tex; there is no intention to add an indexing facility +% to AMS-TeX. +% +\def\leftheadline{\rlap{\foliofont@\folio}\hfill \iftrue\topmark\fi \hfill} +\def\rightheadline{\hfill \expandafter\iffalse\botmark\fi + \hfill \llap{\foliofont@\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{\let\savedef@\leftheadtext + \def\leftheadtext##1{\let\leftheadtext\savedef@ + \leftheadtoks\expandafter{\frills@\uppercasetext@{##1}}% + \mark{\the\leftheadtoks\noexpand\else\the\rightheadtoks} + \ifsyntax@\setboxz@h{\def\\{\unskip\space\ignorespaces}% + \headlinefont@##1}\fi}% + \nofrillscheck\leftheadtext} +% +\def\rightheadtext{\let\savedef@\rightheadtext + \def\rightheadtext##1{\let\rightheadtext\savedef@ + \rightheadtoks\expandafter{\frills@\uppercasetext@{##1}}% + \mark{\the\leftheadtoks\noexpand\else\the\rightheadtoks}% + \ifsyntax@\setboxz@h{\def\\{\unskip\space\ignorespaces}% + \headlinefont@##1}\fi}% + \nofrillscheck\rightheadtext} +% +% In the running heads, we redefine \chapter so that it only does +% a roman numeral (via \chapterno@) rather than "CHAPTER " + +% roman numeral. In the \nofrills case, however, e.g. for +% something like "Appendix A", the given text is printed without +% modification. 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\\{\unskip\space\ignorespaces}\headlinefont@ + \def\chapter{% + \def\chapter##1{% + \frills@{\afterassignment\chapterno@ \chaptercount@=}##1.\space}% + \nofrillscheck\chapter}% + \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{}} +% +% 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@} +% +\newdimen\headlineheight \newdimen\headlinespace +\newdimen\dropfoliodepth + +% Distance of drop folio below the type block +\dropfoliodepth=1pc +% Actual height of normal running head text +\headlineheight=5pt +% Base-to-base distance from running head to first text line +\headlinespace=24pt + +% Changing the page width with \pagewidth 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. +\def\pagewidth#1{\hsize#1% + \captionwidth@\hsize \advance\captionwidth@-2\indenti} +% +% Constraints on type block: +% ---Total width x height (default) = 30pc x 50.5pc +% ---Distance from running-head to first text line (base-to-base) is +% 24pt. +% ---Actual height of running head is approx. 5pt (height of cap +% letters in seven-point font). +% ---Drop folio on first page drops 1pc below the type block (i.e., +% below the 50.5pc measurement given above). + +\def\pageheight#1{% + \vsize=#1 % target height + \advance\vsize -\headlineheight % subtract height of running head + \advance\vsize -\headlinespace % subtract space below running head + \advance\vsize \topskip % but the 24pt is base-to-base, so we need to + % compensate for topskip +} + +\pagewidth{30pc}\pageheight{50.5pc} + +% Copyright info at the bottom of article opening pages is done as +% an insert separate from \footins because that is the natural way +% to achieve the placement we want (below all footnotes, but inside +% the text block). +\newinsert\copyins +% Space to allow for, between copyright info and preceding text: +% *** Different from AMS-LaTeX value, which is 1.5pc fixed +% *** (\bigskipamount=12pt plus 4pt minus 4pt; plain.tex) +\skip\copyins=12\p@ +% Maximum height of copyright info: Doesn't really matter, since height +% will always be controlled explicitly, but let's make sure this +% value referred to by TeX is less than page height anyway. +\dimen\copyins=40pc +% Magnification factor (1000 = 1.000) +\count\copyins=1000 +% +% \inslogo@ is called in \endtopmatter (unlike the method of +% amsppt.sty 2.1) +\def\inslogo@{\insert\copyins{\logo@}} +% +\def\logo@{\rightline{\eightpoint Typeset by \AmSTeX}} +% \nologo to turn off the `Typeset by AmS-TeX' note. +\def\nologo{\let\logo@\empty@ \let\inslogo@\empty@} +% +% First-page left or right headline: +\let\flheadline\hfil \let\frheadline\hfil +% +% Permit pages (e.g. book frontmatter) to be without headers or footers. +\newif\ifplain@ \plain@false +% +\def\output@{% +% Cancel possible junk from \ref if page break occurs between +% \ref...\endref [mjd,17-Aug-1995] + \def\break{\penalty-\@M}\let\par\endgraf + \shipout\vbox{% + \ifplain@ + \let\makeheadline\relax \let\makefootline\relax + \else + \iffirstpage@ \global\firstpage@false + \let\rightheadline\frheadline + \let\leftheadline\flheadline + \else + \ifrunheads@ \let\makefootline\relax + \else \let\makeheadline\relax \fi + \fi + \fi + \makeheadline \pagebody \makefootline + }% + \advancepageno \ifnum\outputpenalty>-\@MM\else\dosupereject\fi +} +% +% Redefine \pagecontents to add \copyins material +% *** \skip\footins=\bigskipamount (12pt plus 4pt minus 4pt; plain.tex) +% *** In AMS-LaTeX, value = 7pt plus11pt +\def\pagecontents{% + \ifvoid\topins\else\unvbox\topins\fi + \dimen@=\dp\@cclv \unvbox\@cclv % open up \box255 + \ifvoid\footins + \else % footnote info is present + \vskip\skip\footins + \footnoterule + \unvbox\footins + \fi + \ifr@ggedbottom \kern-\dimen@ \vfil \fi +% \skip\copyins is visual space between top of copyright info and +% bottom of preceding text. + \ifvoid\copyins \else \vskip\skip\copyins \unvbox\copyins \fi +} +% +% \makeheadline is called at the top of a vbox with the page body to +% follow. Restore default \leftskip to avoid indentation when the +% page builder activates in the middle of a roster +\def\makeheadline{% + \leftskip=\z@ + \vbox{% +% We smash the running head inside a vbox of the target height, to +% ensure that the base of the running head always falls at the same +% height in relation to the type block. + \vbox to\headlineheight{\vss +% If \headline is empty, the \hskip here prevents an `Underfull hbox' +% message. If \headline contains an \hfil or \hfill, the \hskip here +% will be ignored. + \hbox to\hsize{\hskip\z@ plus\hsize\the\headline}% + \kern-\prevdepth + }% + \vskip\headlinespace + \vskip-\topskip + }% + \nointerlineskip +} +% +% Assumption: called in vmode after the box containing the page body; +% thus the depth of the preceding box = depth of last line in the +% main text (except in the raggedbottom case). +\def\makefootline{% + \relax\ifdim\prevdepth>\z@ \ifdim\prevdepth>\maxdepth \else + \vskip-\prevdepth \fi\fi + \nointerlineskip + \vbox to\z@{\hbox{}% + \baselineskip\dropfoliodepth + \hbox to\hsize{\hskip\z@ plus\hsize\the\footline}% + \vss}} + +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% -16- HYPHENATION EXCEPTIONS +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\message{hyphenation exceptions (U.S. English)} +% 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 +% omitted because hyphenation exceptions use up memory (most +% versions of TeX currently have a limit of 307 on hyphenation +% exceptions; each added hyphenation exception uses up something +% like 2 extra words of main memory as well). The list of +% hyphenations for proper names could be expanded forever if room +% permitted; we restrict ourselves to a rather short, extremely +% arbitrary list. +% +% Note: 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-ic +quad-ra-ture qua-si-smooth qua-si-sta-tion-ary qua-si-tri-an-gu-lar +quin-tes-sence quin-tes-sen-tial re-arrange-ment rec-tan-gle +ret-ri-bu-tion retro-fit retro-fit-ted right-eous right-eous-ness +ro-bot ro-bot-ics sched-ul-ing se-mes-ter semi-def-i-nite +semi-ho-mo-thet-ic set-up se-vere-ly side-step sov-er-eign spe-cious +spher-oid spher-oid-al star-tling star-tling-ly sta-tis-tics +sto-chas-tic straight-est strange-ness strat-a-gem strong-hold +sum-ma-ble symp-to-matic syn-chro-nous topo-graph-i-cal tra-vers-a-ble +tra-ver-sal tra-ver-sals treach-ery turn-around un-at-tached +un-err-ing-ly white-space wide-spread wing-spread wretch-ed +wretch-ed-ly 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} +% +% Initializations +% +% A "style initialization" file, amsppt.sti, is loaded in, in order +% to use the same version of amsppt.sty for both production and +% distribution. +% +\input amsppt.sti +% +% Write an empty line on screen to tidy up: +\W@{} +% +% Now we restore the catcode for @ that was in effect before this +% file. Note that we do not use \filename here, even though we did +% at the beginning of this file, because in the absence of a proper +% filename stack mechanism, we cannot be sure (taking into account +% possible future changes in the contents of amsppt.sty) that an +% intervening input file did not change \filename to another value. +% +\csname amsppt.sty\endcsname +% +% And that's it. +\endinput +% +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% -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, 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 macro whose expansion is 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 space token (\let equal, not a macro like \space) + \relaxnext@ \let\next=\relax + \ex@ dimen, related to x-height, roughly equal to 1pt + \hexnumber@ convert hex digit from decimal form to hex equivalent + \font@ font assignment, like \font but modified to make + syntax check work + \macro@@ used for stripping off the first part of the result + of a \meaning command. + + \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@@@ +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% -18- APPENDIX: NOTES ON VERSION 2.1 +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +---\curraddr was added, for giving the current address of an author, +if different from the address given in \address. + +---\rom was added, for preventing unwanted italicization of certain +things such as parentheses or numbers, in theorems and other italic +passages. \rom automatically inserts italic corrections. + +---The implementation of \nofrills was completely changed, to provide +better error messages for a missing or misspelled \endkeywords or +similar end command, when reading a delimited argument. The error +message is now one of + + ! Forbidden control sequence found while scanning use of \keywords. + ! Paragraph ended before \keywords was complete. + +Previously the message would have had the same form, but would have +referred to a mysterious control sequence ``\next@'' instead of +\keywords. + +This change also eliminates a longstanding, very minor bug +(\usualspace@ didn't work if it was stored in something such as +\keywords@ for later use, because of its dependence on the +\ifnofrills@ switch). + +---Multiple \thanks commands in the top matter will now produce +multiple acknowledgment footnotes instead of discarding all but the +last one. A period is no longer added automatically at the end of a +\thanks. + +---\subjclass was updated to use the date (1991) of the current +Mathematics Subject Classification scheme. + +---\widestnumber\item now works as claimed in the User's Guide. + +---The missing \par in \penaltyandskip@ was added. + +---Additional checks were added for runaway \proclaim, \definition, +\ref, \roster, etc. The internal macro \runaway@ was changed to make +its usage more consistent and robust; in the process its name was +changed to \add@missing (and as the name suggests, it now tries to +recover by adding the missing \end... command). + +---The bibliography macros were substantially modified to correct +another longstanding bug: line breaks after explicit hyphens, +mathbins, and mathrels were inhibited. This also involved changing the +\ref-specific version of \nofrills. Backward compatibility (with +version 2.0) is not complete with respect to \nofrills in the +bibliography macros. This seems best, however, not only to avoid +extra implementation difficulties, but also because the user syntax in +version 2.0 was inferior. \nofrills now should always follow +immediately after the name of the field to which it applies, e.g., +\transl\nofrills, or \paper\nofrills. Note that this is more +consistent with the usage of \nofrills outside of the references +section. \nofrills will cause all the "frills" such as the parentheses +around years in journal article citations, or words like "eds." or +"vol." that are supplied automatically, to be omitted for the given +field. In addition, it will suppress the automatic punctuation at the +end of the field, if any. + +The macro \refdef@ is gone; instead, to define a new reference +element, you need a definition of the form + + \newbox\jourbox@ + \def\jour{\makerefbox\jour\jourbox@{\it}} + +where \makerefbox is a macro with three arguments: #1 is the name of +the calling macro (for use in error messages, if need be), #2 is the +box in which the contents of the \jour field should be stored, and #3 +is formatting information (primarily font changes) to be inserted at +the beginning of the box. However, as before, punctuation and words +such as "pp.", "eds.", or "vol." that are to be inserted automatically +are handled by \endref@. + +Therefore, to change such frills, or the ordering of the parts of a +reference, you need to modify \endref@. The macros \ppunbox@ and +\commaunbox@ should normally be used to unpack a box, because they +automatically take care of complications like \nofrills, closing +quotes, or line breaks. \ppunbox@ takes four arguments: + + #1: punctuation that should come before a line break or + closing quotes of a previous field + #2: other material such as "(" or "vol." that should be added + at the beginning of the current field + #3: the name of the box to be unpacked + #4: other material such as ")" that should be added + at the end of the current field + +For example, the command to unpack the \yr field is: + + \ppunbox@\empty@{ (}\yrbox@)% + +Note the use of \empty@ to specify no preceding comma or other +punctuation. + +\commaunbox@ is merely an abbreviation for + + \ppunbox@,\space\xxxbox@\empty@ + +The switches \ifpaperquotes@ and \ifbookquotes@ are gone. If quotes +are to be added around a particular part of a reference, it should be +done in \endref@ using \ppunbox@ and \endquotes as follows: + + \ppunbox@,{ ``}\xxxbox@\endquotes + +\endquotes does not typeset the ending quotes immediately (because we +don't know yet whether to insert a comma or other punctuation before +the ending quotes). Instead, it sets a flag to be used in subsequent +processing. + +---A \refstyle command was added to allow users to specify one of the +three different reference styles most commonly used in AMS +publications: letter labels in square brackets; unnumbered; and +numbered (denoted A, B, and C, respectively). The syntax is +"\refstyle{A}". Style C, numbered with arabic numerals, is the default +selected by amsppt.sty. Eventually, phasing in the \refstyle command +will allow the formatting for cites in the main text to be +automatically linked with the corresponding references in the +bibliography. (Since the bibliography style could also affect the +style of cites, the \refstyle command should be placed in the preamble +of a document.) Also, eventually \key could be used for all reference +labels, and the \no command will be unnecessary, because its current +use is merely to indicate different formatting for the reference +number. + +---\miscnote was added, and used in the implementation of \toappear, +so that \toappear and \finalinfo would not be mutually exclusive. +\miscnote might also be used for things like "preprint" or +"submitted". Unlike \finalinfo, \miscnote automatically adds +parentheses. + +---\procinfo was added, to give place and date where the meeting +took place, for proceedings volumes. + +---\eds or \ed information will now be used in place of an author's +name, if \by is absent. This would be for collections or proceedings +volumes that are cited as a whole, instead of citing a single paper +within the volume. +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% -19- APPENDIX: NOTES ON VERSIONS 2.1a, 2.1b, ... +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Users that have amsppt.sty built into their amstex format file will +need to rebuild their format file if they get a newer version of +amsppt.sty. + +Version 2.1a: + +---Added a test so that amsppt.sty will give an error message if it's +about to be loaded and a different version of amsppt.sty was preloaded +in the format file. + +---Added code to compensate for a bug in version 2.1 that left +\amsppt.sty = \endinput. Probably not necessary---unless the error +message described above is changed in the future to just a warning +message. + +---Added \loadmsam and \loadmsbm before the call to \UseAMSsymbols, +so that amsppt.sty 2.1 will work even with an AMSTeX 2.0 format file. + +---Changed the definition of \magnification (from plain.tex) so that +it won't reset the page dimensions to 6.5 by 9 true inches if +it is used but will behave in a way that's more appropriate +for the amsppt page dimensions. + +---Switched to using box 0 instead of \keybox@ for measuring a \key +given with the \widestnumber command. This prevents a misnumbering +problem that occurred in rare cases (e.g., an unnumbered reference +following numbered references). + +---Changed erroneous \proclaimfont@ to \proclaimheadfont@ and +\demofont@ to \remarkheadfont@ in the definition of \Monograph. Note: +This means that fonts used for \remark, \demo, \proclaim \definition, +\example, were wrong for any document that used \Monograph with amsppt +2.1; switching to amsppt version 2.1a will make the fonts correct +according to AMS standard monograph style, but with a slight chance of +changing line breaks. + +---Added \pagenumwd and put the table-of-contents definition of +\page inside the \toc group so that it will not conflict with +the normal definition of \page if a single document contains +both \toc (with \widestnumber\page used) and \Refs. + +---Added default definition for \leftskip@ to handle rare cases. +Added \envir@stack\endroster in \Runinitem to prevent spurious +"missing \endroster" error every time it's used. + +---Change handling of \key and \no to better handle the complications +related to \refstyle and the need to maintain backward compatibility. +(I.e., \refstyle should automatically be reset to C if \no is used.) + +---Added \procpaper@false and \book@false where appropriate in \book, +\jour, \inbook to handle (rare?) \moreref cases where the additional +ref is not the same type as the first ref. Switched around \moreref +and \transl, a cosmetic change but makes the code easier to +understand. (It seems reasonable for \transl to be based on \moreref, +but rather odd for \moreref to be based on \transl, as in version +2.1.) + +---Added \ifvoid test in \makerefbox to give an error message +if the same tag is used twice or mutually exclusive tags (e.g., +\book and \inbook) are used. + +---Added some code to print out editors and pages information +if given even when according to AMS style it should normally +be omitted. + +Version 2.1b: + +---Restored the old \nologo command by popular demand. + +---Added \linespacing command to facilitate changing line spacing +globally: \linespacing{2.0} increases line spacing by a factor of 2, +similarly \linespacing{1.5} or \linespacing{2.3} for arbitrary +factors. + +---Italic font is now used instead of slanted throughout (for e.g. +\proclaim). + +---Omitting \by in a \ref is now possible without getting unwanted +punctuation at the very beginning after the key. + +---\rom now handles preceding ~, not just preceding space. + +---\subsubheadfont@ added to facilitate font switching. + +---\document does some font setup if \topmatter is omitted. + +---Fixed a problem with running heads and \chapter\nofrills. + +---Eliminated spurious error message from \roster \widestnumber inside +a \proclaim. + +Version 2.1c: + +---Fixed a bug introduced in version 2.1b: lost punctuation and space +at the beginning of a \moreref. + + +Version 2.1d: + +---Minor corrections to \PSAMSFonts, documentation + +---Fixed \linespacing bug: the vrule inside \strutbox did not have +zero width. + +Version 2.1e: + +---Added \MR, \AMSPPS commands + +---Added some code to \output@ to reset \break, \par in case output +routine is invoked inside \ref ... \endref *and* something added by the +output routine (e.g., journal logo on first page) uses them. + +Version 2.1f: + +---Moved MR and AMSPPS numbers after final period. + +---Split part of \enddocument into separate \enddocument@text for easier +customization. + +Version 2.1g (January 1997 distribution): + +---Added code to initialize PSAMSFonts-sensitive fonts correctly regardless +of which fonts are being used. + +---Moved loading of AMSFonts and symbol names to initialization block at +end of file. + +---In \makeheadline, added \leftskip=\z@ to avoid indentation of journal +logo when end of page 1/beginning of page 2 contains a roster. + +---Added \urladdr to other author addresses. + +---Added \refsheadfont@ to permit font change without redefinition. + +---Added \refstyle@ to permit correct initialization of indent with +\widestnumber when \refstyle C is used. + +---Added \inslogo@ to \endtopmatter to drop in insert with AMS-TeX logo or +copyright notice. + +---Added \preproclaimskip, \postproclaimskip, \remarkskip, \postdemoskip, +\predefinitionskip, \postdefinitionskip to permit spacing variations without +redefinitions. + +---Revamped calculation of \pageheight to derive \vsize from known dimensions. + +---Revamped output routine for simplicity, and to accept AMS-TeX logo / +copyright block as a bottom insertion rather than as an element between the +page body and the footline; this makes it possible to use a single \pageheight +on all pages. + +---Redefined \pagecontents to include logo/copyright insert, \copyins. + +---Redefined \makeheadline to reset formatting parameters (\leftskip, etc.) +to avoid problems if page makeup occurs in the middle of (say) a \roster, +and to ensure that the running head is always the same height, regardless +of the presence of accents or math. + +---Redefined \makefootline for similar reasons of consistency. + +---Moved initialization of AMSFonts to end of file. + +---Adjusted indentation of code to clarify structure and nesting. + +---Added test for the presence of a local initialization file (amsppt.sti); +if present, input it, and if not, carry out initialization suitable for the +use of this style by general users. + +Version 2.1h (January 1997 distribution): + +---Added a link for an initialization file, amsppt.sti; this permits easier +tailoring of certain features (e.g. use of PSAMSFONTS, documented in the +AMS-TeX User's Guide), as well as use in AMS production of publication-time +local features, without requiring a separate version of amsppt.sty. + +---Added \Refsname to permit publication-specific initialization of variant +references title without requiring full redefinition of \Refs. + +---Added \remarkfont and \definitionfont instead of \rm to allow flexibility. + +---Removed ninepoint; if this were to be needed, it's likely that enough +other changes would also be needed that the result would be a different style. +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% -20- APPENDIX: NOTES ON VERSIONS 2.2 +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Version 2.2 (August 2001 distribution): + +---Added @ to the plain list of \dospecials, to make it behave better in +verbatim, e-mail addresses, and URL's. + +---Added commands \savecat and \restorecat to make it easy to save and +restore the catcode value of any character, most commonly @. + +---Replaced explicit font for addresses by \addressfont@. + +---Check address fields, thanks and subject classification for presence of +data, and omit if empty. + +---Added \subjclassyear to identify version of classification scheme; check +for valid years (1991, 2000), default to 1991 for backward compatibility + +---Added a check for the presence of \document line; report at \enddocument +if missing. + +---Documented a bug in the application of space between two adjacent theorems; +didn't fix it (compatibility: would change page breaks). + +---Added \if@qedhere to support feature in AMS document styles that permits +location of end-of-proof box to be varied. + +---Removed period at end of caption if it is not followed by text. + +---Added a warning to \footnote inside references; footnotes inside references +disappear, taking with them the reference element to which they are attached. + +---Removed \foliofont@ from definition of \folio and added it instead to the +running heads, permitting "clean" page numbers to be output with indexing +terms when an auxiliary package such as index.tex (from texsis) is used. |