diff options
Diffstat (limited to 'Master/texmf-dist/source')
21 files changed, 0 insertions, 26868 deletions
diff --git a/Master/texmf-dist/source/latex/amslatex/ams-c1.ins b/Master/texmf-dist/source/latex/amslatex/ams-c1.ins deleted file mode 100644 index 3145608a278..00000000000 --- a/Master/texmf-dist/source/latex/amslatex/ams-c1.ins +++ /dev/null @@ -1,80 +0,0 @@ -%%% ==================================================================== -%%% @LaTeX-file{ -%%% filename = "ams-c1.ins", -%%% version = "2.20", -%%% date = "2004/08/03", -%%% time = "14:18:09 EDT", -%%% checksum = "43968 80 304 2992", -%%% author = "American Mathematical Society", -%%% address = "American Mathematical Society, -%%% Technical Support, -%%% Electronic Products and Services, -%%% P. O. Box 6248, -%%% Providence, RI 02940, -%%% USA", -%%% telephone = "401-455-4080 or (in the USA and Canada) -%%% 800-321-4AMS (321-4267)", -%%% FAX = "401-331-3842", -%%% copyright = "Copyright 1999 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.", -%%% email = "tech-support@math.ams.org (Internet)", -%%% codetable = "ISO/ASCII", -%%% keywords = "latex, amsart, amsbook, amsproc, amsthm, install", -%%% supported = "yes", -%%% abstract = "This is an installation file that will generate -%%% loadable package and class files when run -%%% through \LaTeX{}.", -%%% 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.", -%%% } -%%% ==================================================================== -\def\batchfile{ams-c1.ins} -\input docstrip.tex -\preamble -\endpreamble - -\keepsilent - -\csname newtoks\endcsname\filesmsg -\def\dofile#1#2#3{\generateFile{#1}{f}{\from{#2}{#3}}% - \filesmsg\expandafter{\the\filesmsg - \Msg{* \space\space#1}}} - -% Packages -\dofile{amsthm.sty}{amsclass.dtx}{amsthm} -\dofile{upref.sty}{upref.dtx}{} -\dofile{amsmidx.sty}{amsmidx.dtx}{} - -% Document class amsart: -\dofile{amsart.cls}{amsclass.dtx}{amsart,classes} -% Document class amsbook: -\dofile{amsbook.cls}{amsclass.dtx}{amsbook,classes} -% Document class amsproc: -\dofile{amsproc.cls}{amsclass.dtx}{amsproc,classes} - -% Document class for printing AMS documentation files: -\dofile{amsdtx.cls}{amsdtx.dtx}{amsdtx} - -\ifToplevel{ -\Msg{******************************************************************} -\Msg{*} -\Msg{* To get documentation for the amsart, amsbook, and amsproc} -\Msg{* documentclasses, run LaTeX on instr-l.tex.} -\Msg{*} -\Msg{* To get documentation for the amsthm package, run LaTeX on} -\Msg{* amsthdoc.tex; see also thmtest.tex.} -\Msg{*} -\Msg{******************************************************************} -} - -\endinput -} diff --git a/Master/texmf-dist/source/latex/amslatex/ams-m1.ins b/Master/texmf-dist/source/latex/amslatex/ams-m1.ins deleted file mode 100644 index a03642e51a7..00000000000 --- a/Master/texmf-dist/source/latex/amslatex/ams-m1.ins +++ /dev/null @@ -1,69 +0,0 @@ -%%% ==================================================================== -%%% @LaTeX-file{ -%%% filename = "ams-m1.ins", -%%% version = "1.05", -%%% date = "2000/05/25", -%%% time = "16:28:35 EDT", -%%% checksum = "13352 69 258 2600", -%%% author = "American Mathematical Society", -%%% address = "American Mathematical Society, -%%% Technical Support, -%%% Electronic Products and Services, -%%% P. O. Box 6248, -%%% Providence, RI 02940, -%%% USA", -%%% telephone = "401-455-4080 or (in the USA and Canada) -%%% 800-321-4AMS (321-4267)", -%%% FAX = "401-331-3842", -%%% email = "tech-support@math.ams.org (Internet)", -%%% supported = "yes", -%%% copyright = "Copyright 1999 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.", -%%% keywords = "latex, amsmath, ams-latex, installation", -%%% abstract = "This is an installation file that will generate -%%% loadable package and class files when run -%%% through \LaTeX{}.", -%%% 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.", -%%% } -%%% ==================================================================== -\def\batchfile{ams-m1.ins} -\input docstrip.tex -\preamble -\endpreamble - -\keepsilent - -\csname newtoks\endcsname\filesmsg -\def\dofile#1#2#3{\generateFile{#1}{f}{\from{#2}{#3}}% - \filesmsg\expandafter{\the\filesmsg - \Msg{* \space\space#1}}} - -% Math packages -\dofile{amsmath.sty}{amsmath.dtx}{} -\dofile{amsgen.sty}{amsgen.dtx}{} -\dofile{amstext.sty}{amstext.dtx}{} -\dofile{amsopn.sty}{amsopn.dtx}{} -\dofile{amsbsy.sty}{amsbsy.dtx}{} -\dofile{amscd.sty}{amscd.dtx}{} -\dofile{amsxtra.sty}{amsxtra.dtx}{} - -\ifToplevel{ -\Msg{******************************************************************} -\Msg{*} -\Msg{* To produce the User's Guide for amsmath, run amsldoc.tex through} -\Msg{* LaTeX.} -\Msg{*} -\Msg{******************************************************************} -} - -\endinput diff --git a/Master/texmf-dist/source/latex/amslatex/ams-r1.ins b/Master/texmf-dist/source/latex/amslatex/ams-r1.ins deleted file mode 100644 index c4a552ebcba..00000000000 --- a/Master/texmf-dist/source/latex/amslatex/ams-r1.ins +++ /dev/null @@ -1,43 +0,0 @@ -%%% ==================================================================== -%%% @LaTeX-file{ -%%% filename = "ams-r1.ins", -%%% version = "1.04", -%%% date = "2001/12/24", -%%% time = "12:50:14 EST", -%%% author = "Michael J Downes", -%%% address = "American Mathematical Society, -%%% Publications Technical Group, -%%% PO Box 6248, -%%% Providence, RI 02940, -%%% USA", -%%% email = "tech-support@ams.org", -%%% URL = "http://www.ams.org/", -%%% abstract = "A docstrip batch file for the amsrefs package", -%%% checksum = "21160 39 121 1555", -%%% docstring = "The checksum field, produced by Robert Solovay's -%%% checksum utility, gives CRC-16 checksum, lines, -%%% words, and characters.", -%%% } -%%% ==================================================================== -\def\batchfile{ams-r1.ins} -\input docstrip.tex -\preamble -\endpreamble -\keepsilent -\generateFile{pcatcode.sty}{f}{\from{pcatcode.dtx}{}} -\generateFile{ifoption.sty}{f}{\from{ifoption.dtx}{}} -\generateFile{rkeyval.sty}{f}{\from{rkeyval.dtx}{}} -\generateFile{amsrefs.sty}{f}{\from{amsrefs.dtx}{pkg}} -\generateFile{textcmds.sty}{f}{\from{textcmds.dtx}{pkg}} -\generateFile{mathscinet.sty}{f}{\from{mathscinet.dtx}{}} -%\generateFile{amsjpa.sty}{f}{\from{amsjpa.dtx}{}} -% Remove \endinput from postamble -\postamble -\endpostamble -\generateFile{amsrn.bst}{f}{\from{amsxport.dtx}{bst,sort,plain}} -\generateFile{amsru.bst}{f}{\from{amsxport.dtx}{bst,plain}} -\generateFile{amsra.bst}{f}{\from{amsxport.dtx}{bst,sort,alpha}} -\generateFile{amsry.bst}{f}{\from{amsxport.dtx}{bst,sort,alpha,y2k}} -\generateFile{amsrs.bst}{f}{\from{amsxport.dtx}{bst,sort,short}} -%\generateFile{amsj.bib}{f}{\from{amsxport.dtx}{abbrevs}} -\endinput diff --git a/Master/texmf-dist/source/latex/amslatex/amsbsy.dtx b/Master/texmf-dist/source/latex/amslatex/amsbsy.dtx deleted file mode 100644 index 30c4dee1bbf..00000000000 --- a/Master/texmf-dist/source/latex/amslatex/amsbsy.dtx +++ /dev/null @@ -1,251 +0,0 @@ -%%% ==================================================================== -%%% @LaTeX-file{ -%%% filename = "amsbsy.dtx", -%%% version = "1.2d", -%%% date = "1999/11/29", -%%% time = "14:26:42 EST", -%%% author = "American Mathematical Society", -%%% copyright = "Copyright 1995 American Mathematical Society, -%%% all rights reserved. Copying of this file is -%%% authorized only if either: -%%% (1) you make absolutely no changes to your copy, -%%% including name; OR -%%% (2) if you do make changes, you first rename it -%%% to some other name.", -%%% address = "American Mathematical Society, -%%% Technical Support, -%%% Electronic Products and Services, -%%% P. O. Box 6248, -%%% Providence, RI 02940, -%%% USA", -%%% telephone = "401-455-4080 or (in the USA and Canada) -%%% 800-321-4AMS (321-4267)", -%%% FAX = "401-331-3842", -%%% checksum = "08988 251 1238 9625", -%%% email = "tech-support@ams.org (Internet)", -%%% codetable = "ISO/ASCII", -%%% keywords = "latex, bold symbol, pmb", -%%% supported = "yes", -%%% abstract = "This is a \LaTeX{} package that provides a command -%%% for producing bold math symbols when appropriate -%%% fonts exist, and a `poor man's bold' command that -%%% can be applied when no appropriate bold font -%%% is available.", -%%% docstring = "The checksum field above contains a CRC-16 -%%% checksum as the first value, followed by the -%%% equivalent of the standard UNIX wc (word -%%% count) utility output of lines, words, and -%%% characters. This is produced by Robert -%%% Solovay's checksum utility.", -%%% } -%%% ==================================================================== -%\iffalse -%<*driver> -\documentclass{amsdtx} -\usepackage{amsbsy} -\begin{document} -\title{The \pkg{amsbsy} package} -\author{Frank Mittelbach\and Rainer Sch\"opf\and Michael Downes} -\date{Version \fileversion, \filedate} -\hDocInput{amsbsy.dtx} -\end{document} -%</driver> -%\fi -% -% \maketitle -% -% \MakeShortVerb\| -% -% \section{Introduction} -% -% The package \texttt{amsbsy}, first written in 1989, implements a -% few commands for producing \textbf{bold} characters in the `normal' -% \emph{math version}. -% \begin{quote}\em -% Note: It is recommended nowadays to use the \pkg{bm} package, which -% became available in 1997. -% \end{quote} -% -% If we have bold fonts which contain the character in question then -% we will use these fonts to produce the wanted character. But -% sometimes math fonts are only available in a certain weight -% (e.g.\ the AMS symbol fonts). -% \DescribeMacro\pmb -% For these cases we provide a command which is called \verb+\pmb+ (an -% acronym for \textbf{p}oor \textbf{m}an's \textbf{b}old) with one argument. -% The bolder weight is achieved by copying the argument three times in -% slightly different positions which is better than nothing but no -% match for a real bold font. -% -% \DescribeMacro\boldsymbol -% There also exists the \verb+\boldsymbol+ command which is better in -% all cases where bold fonts exists. This command will internally -% switch to the corresponding `bold' \emph{math version} typeset its -% argument in this version. -% -% Both commands will preserve the nature of their arguments, i.e.\ if -% they get a relational atom their result will again be a relation as -% far as \tex/'s mathspacing is concerned. -% -% Since it is good policy to make at least a small test we try to -% typeset the infinity sign ($\infty$) first with \verb+\pmb+ and then -% with \verb+\boldsymbol+. -% \[ -% \pmb{\infty} = \boldsymbol{\infty} \quad ? -% \] -% \StopEventually{} -% -% Standard package info. -% \begin{macrocode} -\NeedsTeXFormat{LaTeX2e}% LaTeX 2.09 can't be used (nor non-LaTeX) -[1994/12/01]% LaTeX date must December 1994 or later -\ProvidesPackage{amsbsy}[1999/11/29 v1.2d] -% \end{macrocode} -% -% \section{The implementation} -% -% We need some functions from the \pkg{amsgen} package. -% \begin{macrocode} -\RequirePackage{amsgen} -% \end{macrocode} -% -%\begin{macro}{\boldsymbol} -% In implementing boldsymbol, we must take into account \tex/'s -% limitation of only 16 mathgroups (math families, in Knuth's -% terminology). If we wanted to maintain mathgroups for both the bold -% and non-bold version of each math font, it would not take long to -% run out of mathgroups. Therefore what we do instead for a bold -% symbol is embed it in an \verb|\hbox|; inside that \verb|\hbox|, -% when we start another math formula, we can change all the -% mathgroups to their bold equivalents. -% -% However, to get the correct math style inside the hbox (display, -% text, script or scriptscript) we have to use \verb|\mathchoice|. -% Since \verb|\mathversion{bold}| has a lot of overhead, and -% \verb|\mathchoice| typesets the argument text four times, we would -% rather not put the \verb|\mathversion| command inside each -% \verb|\hbox| in the \verb|\mathchoice|; on the other hand, -% \verb|\mathversion| gives an error message if it's used in math -% mode. Therefore if we want to execute \verb|\mathversion{bold}| -% before starting the \verb|\mathchoice| we have to temporarily -% disable the \verb|\@nomath| error. (The error message is intended -% to keep people from accidentally emboldening a preceding part of a -% math formula, since only the mathgroups defined at the end of a -% math formula will determine the fonts used in that formula; but we -% are going to typeset our bold symbol not in the current formula but -% in an embedded formula, so that this danger doesn't apply here.) -% \begin{macrocode} -\DeclareRobustCommand{\boldsymbol}[1]{% -% \end{macrocode} -% Start a group to localize the change of \verb|\@nomath|: -% \begin{macrocode} - \begingroup -% \end{macrocode} -% Disable \verb|\@nomath| so that we don't have to leave math -% mode before executing \verb|\mathversion|: -% \begin{macrocode} - \let\@nomath\@gobble \mathversion{bold}% -% \end{macrocode} -% \cs{math@atom} is a test macro which looks at its argument and -% produces a math atom of the proper class. -% \begin{macrocode} - \math@atom{#1}{% -% \end{macrocode} -% Although it is tempting to use \verb|\text| here, to save some -% main memory, that caused a bug in the past due to some internal -% interactions with \verb|\mathversion|. -% \begin{macrocode} - \mathchoice% - {\hbox{$\m@th\displaystyle#1$}}% - {\hbox{$\m@th\textstyle#1$}}% - {\hbox{$\m@th\scriptstyle#1$}}% - {\hbox{$\m@th\scriptscriptstyle#1$}}}% -% \end{macrocode} -% End the group we started earlier. -% \begin{macrocode} - \endgroup} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\math@atom} -% The macro \verb+\math@atom+ looks at its argument and produce a -% correct math atom, i.e.\ a primitive like \verb+\mathopen+. -% Until the day we have a real implementation for all cases we use -% the \verb+\binrel@+ command from \amstex/ which can distinguish -% between binary, relation and ord atoms. -% \begin{macrocode} -\def\math@atom#1#2{% - \binrel@{#1}\binrel@@{#2}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\pmb} -% Poor man's bold command, works by typesetting multiple copies of -% the given argument with small offsets. -% \begin{macrocode} -\DeclareRobustCommand{\pmb}{% - \ifmmode\else \expandafter\pmb@@\fi\mathpalette\pmb@} -% \end{macrocode} -% -% \cs{pmb@@} is called by \cn{pmb} in the non-math-mode case. -% Discard the first two arguments which are for the math-mode case. -% \begin{macrocode} -\def\pmb@@#1#2#3{\leavevmode\setboxz@h{#3}% - \dimen@-\wdz@ - \kern-.5\ex@\copy\z@ - \kern\dimen@\kern.25\ex@\raise.4\ex@\copy\z@ - \kern\dimen@\kern.25\ex@\box\z@ -} -% \end{macrocode} -% -% \begin{macrocode} -\newdimen\pmbraise@ -% \end{macrocode} -% Note: because of the use of \cs{mathpalette}, if \cs{pmb@} is applied to a -% single math italic character (or a single character from some other -% slanted math font), the italic correction will be added. This will -% cause subscripts to fall too far away from the character in some -% cases, e.g., $\pmb{T}_1$ or $\pmb{\mathcal{T}}_1$. -% \begin{macrocode} -\def\pmb@#1#2{\setbox8\hbox{$\m@th#1{#2}$}% - \setboxz@h{$\m@th#1\mkern.5mu$}\pmbraise@\wdz@ - \binrel@{#2}% - \dimen@-\wd8 % - \binrel@@{% - \mkern-.8mu\copy8 % - \kern\dimen@\mkern.4mu\raise\pmbraise@\copy8 % - \kern\dimen@\mkern.4mu\box8 }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\def\binrel@#1{\begingroup - \setboxz@h{\thinmuskip0mu - \medmuskip\m@ne mu\thickmuskip\@ne mu - \setbox\tw@\hbox{$#1\m@th$}\kern-\wd\tw@ - ${}#1{}\m@th$}% -% \end{macrocode} -% The \cn{noexpand} here should be unnecessary, but just in case -% \ldots -% \begin{macrocode} - \edef\@tempa{\endgroup\let\noexpand\binrel@@ - \ifdim\wdz@<\z@ \mathbin - \else\ifdim\wdz@>\z@ \mathrel - \else \relax\fi\fi}% - \@tempa -} -% \end{macrocode} -% For completeness, assign a default value for \cs{binrel@@}. -% \begin{macrocode} -\let\binrel@@\relax -% \end{macrocode} -% -% The usual \cs{endinput} to ensure that random garbage at the end of -% the file doesn't get copied by \fn{docstrip}. -% \begin{macrocode} -\endinput -% \end{macrocode} -% -% \CheckSum{131} -% \Finale diff --git a/Master/texmf-dist/source/latex/amslatex/amscd.dtx b/Master/texmf-dist/source/latex/amslatex/amscd.dtx deleted file mode 100644 index 7dd765109d1..00000000000 --- a/Master/texmf-dist/source/latex/amslatex/amscd.dtx +++ /dev/null @@ -1,333 +0,0 @@ -%%% ==================================================================== -%%% @LaTeX-file{ -%%% filename = "amscd.dtx", -%%% version = "2.0", -%%% date = "1999/11/29", -%%% time = "14:30:07 EST", -%%% author = "American Mathematical Society", -%%% copyright = "Copyright 1995, 1999 American Mathematical Society, -%%% all rights reserved. Copying of this file is -%%% authorized only if either: -%%% (1) you make absolutely no changes to your copy, -%%% including name; OR -%%% (2) if you do make changes, you first rename it -%%% to some other name.", -%%% address = "American Mathematical Society, -%%% Technical Support, -%%% Electronic Products and Services, -%%% P. O. Box 6248, -%%% Providence, RI 02940, -%%% USA", -%%% telephone = "401-455-4080 or (in the USA and Canada) -%%% 800-321-4AMS (321-4267)", -%%% FAX = "401-331-3842", -%%% checksum = "07428 333 1152 12117", -%%% email = "tech-support@ams.org (Internet)", -%%% codetable = "ISO/ASCII", -%%% keywords = "latex, commutative diagram", -%%% supported = "yes", -%%% abstract = "This is a \LaTeX{} package that adapts the -%%% commutative diagram macros of AMS-\TeX{} for -%%% use in \LaTeX{}", -%%% docstring = "The checksum field above contains a CRC-16 -%%% checksum as the first value, followed by the -%%% equivalent of the standard UNIX wc (word -%%% count) utility output of lines, words, and -%%% characters. This is produced by Robert -%%% Solovay's checksum utility.", -%%% } -%%% ==================================================================== -%\iffalse -%<*driver> -\documentclass{amsdtx} -\usepackage{amscd} -% Dummy citation to avoid error in an example. -\bibcite{fre:cichon}{C} -\begin{document} -\title{The \pkg{amscd} package} -\author{Frank Mittelbach\and Rainer Sch\"opf\and Michael Downes} -\date{Version \fileversion, \filedate} -\hDocInput{amscd.dtx} -\end{document} -%</driver> -%\fi -% -% \maketitle -% -% \MakeShortVerb\| -% \newcommand{\operatorname}[1]{\mathop{\mathrm{#1}}} -% \newcommand{\per}{\operatorname{per}} -% \newcommand{\cov}{\operatorname{cov}} -% \newcommand{\non}{\operatorname{non}} -% \newcommand{\cf}{\operatorname{cf}} -% \newcommand{\add}{\operatorname{add}} -% \newcommand{\End}{\operatorname{End}} -% -% \section{Introduction} -% -% The \pkg{amscd} package provides a \env{CD} environment that -% emulates the commutative diagram capabilities of \amstex/ version -% 2.x. This means that only simple rectangular diagrams are -% supported, with no diagonal arrows or more exotic features. Many -% users will be better served by one of the more powerful diagram -% packages such as \pkg{diagram}, \pkg{xypic}, or \pkg{kuvio}. -% -% Example: -% \begin{equation}\begin{CD} -% S^{{\mathcal{W}}_\Lambda}\otimes T @>j>> T\\ -% @VVV @VV{\End P}V\\ -% (S\otimes T)/I @= (Z\otimes T)/J -% \end{CD}\end{equation} -% \begin{verbatim} -% \begin{equation}\begin{CD} -% S^{{\mathcal{W}}_\Lambda}\otimes T @>j>> T\\ -% @VVV @VV{\End P}V\\ -% (S\otimes T)/I @= (Z\otimes T)/J -% \end{CD}\end{equation} -% \end{verbatim} -% (assuming \cn{End} is defined as an `operator name'. -% -% Another example: -% -% We will make liberal use of Cichon's Diagram \cite{fre:cichon}: -% \begin{equation} -% \begin{CD} -% \cov(\mathcal{L}) @>>> \non(\mathcal{K}) @>>> \cf(\mathcal{K}) @>>> -% \cf(\mathcal{L})\\ -% @VVV @AAA @AAA @VVV\\ -% \add(\mathcal{L}) @>>> \add(\mathcal{K}) @>>> \cov(\mathcal{K}) @>>> -% \non(\mathcal{L}) -% \end{CD}\end{equation} -% \begin{verbatim} -% \begin{equation}\begin{CD} -% \cov(\mathcal{L}) @>>> \non(\mathcal{K}) @>>> \cf(\mathcal{K}) @>>> -% \cf(\mathcal{L})\\ -% @VVV @AAA @AAA @VVV\\ -% \add(\mathcal{L}) @>>> \add(\mathcal{K}) @>>> \cov(\mathcal{K}) @>>> -% \non(\mathcal{L}) -% \end{CD}\end{equation} -% \end{verbatim} -% -% \StopEventually{} -% -% Standard package info. -% \begin{macrocode} -\NeedsTeXFormat{LaTeX2e}% LaTeX 2.09 can't be used (nor non-LaTeX) -[1994/12/01]% LaTeX date must December 1994 or later -\ProvidesPackage{amscd}[1999/11/29 v2.0] -% \end{macrocode} -% \begin{macrocode} -\RequirePackage{amsgen} -% \end{macrocode} -% Better not to redefine \verb|\math@cr| if it is already defined, -% because for CD use only we want to omit the part of the code -% related to \verb|\dspbrk@lvl| (see \fn{amsmath.sty}). -% -% [mjd,1999/11/04] These definitions have gone somewhat obsolete; but -% we had probably better leave them as they are for backward -% compatibility. -% \begin{macrocode} -\@ifundefined{math@cr}{% - \def\math@cr{{\ifnum0=`}\fi - \@ifstar{\global\@eqpen\@M\math@cr@}% - {\global\@eqpen\interdisplaylinepenalty \math@cr@}} -% \end{macrocode} -% The following section merely duplicates some code from the -% \pkg{amsmath} package, in case the \pkg{amscd} package is used by -% itself. For documentation of the code refer to \fn{amsmath.dtx}. -% \begin{macrocode} - \def\math@cr@{\new@ifnextchar[\math@cr@@{\math@cr@@[\z@]}} - \def\math@cr@@[#1]{\ifnum0=`{\fi}\math@cr@@@ - \noalign{\vskip#1\relax}} - \def\restore@math@cr{\def\math@cr@@@{\cr}} -}{} -\restore@math@cr -% \end{macrocode} -% [mjd,1999/11/04] These definitions too are somewhat obsolete; -% but we had probably better leave them as they are for backward -% compatibility. -% \begin{macrocode} -\@ifundefined{rightarrowfill@}{ - \def\rightarrowfill@#1{\m@th\setboxz@h{$#1-$}\ht\z@\z@ - $#1\copy\z@\mkern-6mu\cleaders - \hbox{$#1\mkern-2mu\box\z@\mkern-2mu$}\hfill - \mkern-6mu\mathord\rightarrow$} - \def\leftarrowfill@#1{\m@th\setboxz@h{$#1-$}\ht\z@\z@ - $#1\mathord\leftarrow\mkern-6mu\cleaders - \hbox{$#1\mkern-2mu\copy\z@\mkern-2mu$}\hfill - \mkern-6mu\box\z@$} - \def\leftrightarrowfill@#1{\m@th\setboxz@h{$#1-$}\ht\z@\z@ - $#1\mathord\leftarrow\mkern-6mu\cleaders - \hbox{$#1\mkern-2mu\box\z@\mkern-2mu$}\hfill - \mkern-6mu\mathord\rightarrow$} -}{} -% \end{macrocode} -% -% \begin{macrocode} -\def\atdef@#1{\expandafter\def\csname\space @\string#1\endcsname} -\@ifundefined{Iat}{% - \DeclareRobustCommand{\Iat}{\FN@\at@} -}{} -\begingroup \catcode`\@=\active -% \end{macrocode} -% Define math \qc{\@} to replicate its mathcode-dictated behavior. -% This is in case \qc{\@} occurs outside of \env{CD}. -% \begin{macrocode} -\csname if\string @compatibility\endcsname -\else \fam=\mathcode`\@ - \xdef @{\mathchar\number\fam\space } -\fi -\gdef\CDat{\let @=\Iat} -\endgroup -\mathcode`\@="8000 % make @ pseudo-active in math -\def\at@{\let\next@\at@@ - \ifcat\noexpand\next a\else - \ifcat\noexpand\next0\else - \ifcat\noexpand\next\relax\else - \let\next@\at@@@\fi\fi\fi\next@} -\def\at@@#1{\expandafter - \ifx\csname\space @\string#1\endcsname\relax - \DN@{\at@@@#1}% - \else - \DN@{\csname\space @\string#1\endcsname}% - \fi\next@}% -% \end{macrocode} -% The following items should be defined only if they are not -% already defined, either to leave the package name untouched (in -% the case of \cs{PackageError}) or to avoid redundant allocation -% of token or dimen registers. -% \begin{macrocode} -\@ifundefined{default@tag}{% - \def\default@tag{% - \def\tag{\PackageError{amscd}{\protect\tag\space not allowed - here}\@eha}}% -}{}% -\@ifundefined{at@@@}{% - \def\at@@@{\PackageError{amscd}{\Invalid@@ @}{\the\athelp@}\char64\relax} -}{} -\@ifundefined{athelp@}{\csname newhelp\endcsname\athelp@ -{Only certain combinations beginning with @ make sense to me.^^J% -I'll assume you wanted @@ for a printed @.}}{} -\@ifundefined{minaw@}{\newdimen\minaw@}{} -\@ifundefined{bigaw@}{\newdimen\bigaw@}{} -% \end{macrocode} -% -% Assignment of a couple of dimensions, and initialization of -% \verb=\ampersand@=. We check to see if we need to define -% \verb=\minaw@= and \verb=\bigaw@=. -% \begin{macrocode} -\minaw@11.111pt -\newdimen\minCDarrowwidth -\minCDarrowwidth2.5pc -\newif\ifCD@ -\let\ampersand@\relax -% \end{macrocode} -% -% Added \verb|\restore@math@cr\default@tag| to fix line numbering -% problems, 7-JUN-1991. Suggested by I.~Zakharevich. -% \begin{macrocode} -\newenvironment{CD}{% - \CDat - \bgroup\relax\iffalse{\fi\let\ampersand@&\iffalse}\fi - \CD@true\vcenter\bgroup\let\\\math@cr\restore@math@cr\default@tag - \tabskip\z@skip\baselineskip20\ex@ - \lineskip3\ex@\lineskiplimit3\ex@\halign\bgroup - &\hfill$\m@th##$\hfill\crcr -}{% - \crcr\egroup\egroup\egroup -} -% \end{macrocode} -% -% \begin{macro}{\CD@check} -% This check is used by all macros that must not appear outside the -% \env{CD} environment. The first argument is the symbol to be used -% after \verb+@+, the second one the action to be performed. -% -% Once again we use the trick of defining a temporary control -% sequence \verb+\next@+ and calling it after the final \verb+\fi+. -% This is not absolutely necessary, but it ensures that the -% conditional text is processed in one and the same column -% of the enclosing alignment. -% \begin{macrocode} -\def\CD@check#1#2{\ifCD@\DN@{#2}\else - \DN@{\PackageError{amscd}{@\protect#1 not - allowed outside of the CD environment}\@eha}% - \fi\next@} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\atdef@>#1>#2>{\ampersand@ - \ifCD@ \global\bigaw@\minCDarrowwidth \else \global\bigaw@\minaw@ \fi - \setboxz@h{$\m@th\scriptstyle\;{#1}\;\;$}% - \ifdim\wdz@>\bigaw@\global\bigaw@\wdz@\fi -% \end{macrocode} -% If \verb|#2| is empty we can save some work. -% \begin{macrocode} - \@ifnotempty{#2}{\setbox\@ne\hbox{$\m@th\scriptstyle\;{#2}\;\;$}% - \ifdim\wd\@ne>\bigaw@\global\bigaw@\wd\@ne\fi}% - \ifCD@\enskip\fi - \mathrel{\mathop{\hbox to\bigaw@{\rightarrowfill@\displaystyle}}% - \limits^{#1}\@ifnotempty{#2}{_{#2}}}% - \ifCD@\enskip\fi \ampersand@} -% -\atdef@<#1<#2<{\ampersand@ - \ifCD@ \global\bigaw@\minCDarrowwidth \else \global\bigaw@\minaw@ \fi - \setboxz@h{$\m@th\scriptstyle\;\;{#1}\;$}% - \ifdim\wdz@>\bigaw@ \global\bigaw@\wdz@ \fi - \@ifnotempty{#2}{\setbox\@ne\hbox{$\m@th\scriptstyle\;\;{#2}\;$}% - \ifdim\wd\@ne>\bigaw@ \global\bigaw@\wd\@ne \fi}% - \ifCD@\enskip\fi - \mathrel{\mathop{\hbox to\bigaw@{\leftarrowfill@\displaystyle}}% - \limits^{#1}\@ifnotempty{#2}{_{#2}}}% - \ifCD@\enskip\fi \ampersand@} -% \end{macrocode} -% -% Variants of the above two arrows, using \verb|(| and \verb|)| -% characters instead of \verb|<| and \verb|>| characters, are -% provided for those whose keyboards don't have the latter. -% \begin{macrocode} -\begingroup \catcode`\~=\active \lccode`\~=`\@ -\lowercase{% - \global\atdef@)#1)#2){~>#1>#2>} - \global\atdef@(#1(#2({~<#1<#2<} -}% end lowercase -\endgroup -% \end{macrocode} -% -% \begin{macrocode} -\atdef@ A#1A#2A{\CD@check{A..A..A}{\llap{$\m@th\vcenter{\hbox - {$\scriptstyle#1$}}$}\Big\uparrow - \rlap{$\m@th\vcenter{\hbox{$\scriptstyle#2$}}$}&&}} -% -\atdef@ V#1V#2V{\CD@check{V..V..V}{\llap{$\m@th\vcenter{\hbox - {$\scriptstyle#1$}}$}\Big\downarrow - \rlap{$\m@th\vcenter{\hbox{$\scriptstyle#2$}}$}&&}} -% -\atdef@={\CD@check={&\enskip\mathrel - {\vbox{\hrule\@width\minCDarrowwidth\vskip2\ex@\hrule\@width - \minCDarrowwidth}}\enskip&}} -% -\atdef@|{\CD@check|{\Big\Vert&&}} -% -\atdef@\vert{\CD@check\vert{\Big\Vert&&}} -% -\atdef@.{\CD@check.{&&}} -% \end{macrocode} -% -% The \cn{pretend} command has weird syntax that doesn't fit well -% with standard \latex/ syntax so we leave it undone, at least for -% now. [mjd,1994/10/27] -% \begin{macrocode} -%\def\pretend#1\haswidth#2{\setboxz@h{$\m@th\scriptstyle{#2}$}\hbox -% to\wdz@{\hfill$\m@th\scriptstyle{#1}$\hfill}} -% \end{macrocode} -% -% The usual \cs{endinput} to ensure that random garbage at the end of -% the file doesn't get copied by \fn{docstrip}. -% \begin{macrocode} -\endinput -% \end{macrocode} -% -% \CheckSum{459} -% \Finale diff --git a/Master/texmf-dist/source/latex/amslatex/amsclass.dtx b/Master/texmf-dist/source/latex/amslatex/amsclass.dtx deleted file mode 100644 index 956b379d23a..00000000000 --- a/Master/texmf-dist/source/latex/amslatex/amsclass.dtx +++ /dev/null @@ -1,5204 +0,0 @@ -%%% ==================================================================== -%%% @LaTeX-file{ -%%% filename = "amsclass.dtx", -%%% version = "2.20", -%%% date = "2004/08/06", -%%% time = "13:03:53 EDT", -%%% checksum = "53558 5204 20497 185872", -%%% author = "American Mathematical Society", -%%% copyright = "Copyright 1995, 1999, 2004 -%%% 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, -%%% 201 Charles Street, -%%% Providence, RI 02904, -%%% USA", -%%% telephone = "401-455-4080 or (in the USA and Canada) -%%% 800-321-4AMS (321-4267)", -%%% FAX = "401-331-3842", -%%% email = "tech-support@ams.org (Internet)", -%%% codetable = "ISO/ASCII", -%%% keywords = "latex, AMS, documentclass, theorem", -%%% supported = "yes", -%%% abstract = "This is the source for the amsthm package and three -%%% AMS document classes: amsart, amsproc, and amsbook. -%%% They are designed for use with LaTeX.", -%%% docstring = "The checksum field above contains a CRC-16 checksum -%%% as the first value, followed by the equivalent of -%%% the standard UNIX wc (word count) utility output of -%%% lines, words, and characters. This is produced by -%%% Robert Solovay's checksum utility.", -%%% } -%%% ==================================================================== -% -% \iffalse -%<*driver> -\documentclass{amsdtx} - -\CodelineIndex - -\begin{document} -\title{% - The \cls{amsart}, \cls{amsproc}, and \cls{amsbook} document~classes} -\author{American Mathematical Society\\Michael Downes\\ - updated by Barbara Beeton} -\date{Version \fileversion, \filedate} -\hDocInput{amsclass.dtx} -\end{document} -%</driver> -% \fi -% -% \maketitle -% -% \MakeShortVerb\| -% -% \section{Introduction} -% This file (\fn{amsclass.dtx}) is the master file for three \latex/ -% document classes, \cls{amsart}, \cls{amsproc}, and \cls{amsbook}, -% which are intended for articles and books containing mathematical -% research. They produce output that follows the style conventions of -% American Mathematical Society publications. The theorem setup -% features of these document classes are also available in a separate -% package, \pkg{amsthm}. -% -% \StopEventually{} -% -% \section{Implementation} -% -% Three document class files and one package file (\fn{amsthm.sty}) -% are produced from this source. Most of the code of the \fn{amsthm} -% package is used in all four derived files. Most of the remaining -% code is used in all three document class files. Fine tuning is done -% with additional docstrip guards. -% -% The usual name, date, and version information. (Note: the reason -% each \cs{ProvidesClass} command is placed on a line by itself, with -% separate begin and end guards for docstripping, is to make -% automatic update of file date and version slightly easier and more -% robust.) -% -% \begin{macrocode} -\NeedsTeXFormat{LaTeX2e}% LaTeX 2.09 can't be used (nor non-LaTeX) -[1995/06/01]% LaTeX date must be June 1995 or later -%<*amsart> -\ProvidesClass{amsart}[2004/08/06 v2.20] -%</amsart> -%<*amsproc> -\ProvidesClass{amsproc}[2004/08/06 v2.20] -%</amsproc> -%<*amsbook> -\ProvidesClass{amsbook}[2004/08/06 v2.20] -%</amsbook> -% \end{macrocode} -% For \pkg{amsthm} we need to guard against redundant loading via -%\begin{verbatim} -% \documentclass{amsart} -% \usepackage{amsthm} -%\end{verbatim} -% because in that case the usual \cs{RequirePackage} mechanism for -% avoiding redundant loading will not apply. We need to simulate the -% loading of the \pkg{amsthm} package. -% \begin{macrocode} -%<*classes> -\global\expandafter\let\csname ver@amsthm.sty\expandafter\endcsname - \csname ver@\@currname.\@currext\endcsname -%</classes> -%<*amsthm> -\ProvidesPackage{amsthm}[2004/08/06 v2.20] -%</amsthm> -% \end{macrocode} -% -% The following code is shared by the classes and the \pkg{amsthm} -% package. Cf.~\fn{amsgen.sty}. -% \begin{macrocode} -\let\@xp=\expandafter -\let\@nx=\noexpand -\def\@oparg#1[#2]{\@ifnextchar[{#1}{#1[#2]}} -\long\def\@ifempty#1{\@xifempty#1@@..\@nil} -\long\def\@xifempty#1#2@#3#4#5\@nil{% - \ifx#3#4\@xp\@firstoftwo\else\@xp\@secondoftwo\fi} -\long\def\@ifnotempty#1{\@ifempty{#1}{}} -\def\setboxz@h{\setbox\z@\hbox} -\def\@addpunct#1{% - \relax\ifhmode - \ifnum\spacefactor>\@m \else#1\fi - \fi} -% \end{macrocode} -% \cn{nopunct} should have a value for \cn{spacefactor} that is -% not used for \cn{frenchspacing}. -% \begin{macrocode} -\def\nopunct{\spacefactor 1007 } -\def\frenchspacing{\sfcode`\.1006\sfcode`\?1005\sfcode`\!1004% - \sfcode`\:1003\sfcode`\;1002\sfcode`\,1001 } -% \end{macrocode} -% -% If this class is loaded by a parent document class, then we want -% to use the name of the parent class. Otherwise the name of the -% current class file. -% \begin{macrocode} -%<*classes> -\def\@tempa#1#2\@nil{\edef\@classname{#1}} -\expandafter\@tempa\@currnamestack{}{}{}\@nil -\ifx\@classname\@empty \edef\@classname{\@currname}\fi -% \end{macrocode} -% -% \subsection{Support for conditional text} -% -% [This needs to be documented in the users' guide, including the -% idea of using \verb'\for{5ed}{\linebreak}' to mark edition-specific -% line and page breaks. [mjd,1999/12/27]] -% -% We would sometimes like to be able to mark fragments of text to be -% conditionally discarded or typeset. For example in the title of a -% section if we want to add a linebreak but prevent this linebreak -% from also taking effect in the table of contents. -% -% Certain kinds of switches need to be built into the low-level -% structure of our document class in order to be useful. For example, -% inside the toc we need to arrange for an \qq{in-toc?} test to yield -% true. -% -% \begin{macrocode} -\def\@True{00} -\def\@False{01} -\newcommand\newswitch[2][False]{% - \expandafter\@ifdefinable\csname ?@#2\endcsname{% - \global\expandafter\let\csname ?@#2\expandafter\endcsname - \csname @#1\endcsname - }% -} -\newcommand{\setFalse}[1]{% - \expandafter\let\csname ?@#1\endcsname\@False -} -\newcommand{\setTrue}[1]{% - \expandafter\let\csname ?@#1\endcsname\@True -} -% \end{macrocode} -% The empty switch is by default false; i.e., if you write -%\begin{verbatim} -% \for{}{...} -%\end{verbatim} -% the material will be discarded. -% \begin{macrocode} -\newswitch{} -% \end{macrocode} -% -% To get a line break in a section title but not in the table of -% contents line for that section, use -% \verb'\except{toc}{\linebreak}'. (Presumably you are already giving -% a shortened running head version separately, if applicable.) -% \begin{macrocode} -\DeclareRobustCommand{\except}[1]{% - \if\csname ?@#1\endcsname \expandafter\@gobble - \else \expandafter\@firstofone - \fi -} -\DeclareRobustCommand{\for}[1]{% - \if\csname ?@#1\endcsname \expandafter\@firstofone - \else \expandafter\@gobble - \fi -} -% \end{macrocode} -% -% The \cn{forany} command needs to run through a comma-separated list -% of switch names and print its second argument if any of the -% switches are true. -% \begin{macrocode} -\DeclareRobustCommand{\forany}[1]{% - \csname for@any@01\endcsname#1,?,\@nil -} -\@namedef{for@any@\@False}#1,{% - \csname for@any@% - \csname ?@\zap@space#1 \@empty\endcsname - \endcsname -} -\@namedef{?@?}{x} -\@namedef{for@any@\@True}#1\@nil#2{#2} -\def\for@any@x{\@car\@gobble} -% \end{macrocode} -% -% \subsection{Options} -% \subsubsection{Notes} -% Options will be processed in the order they are declared; -% cf.~\cs{ProcessOptions}. -% -% \subsubsection{Paper size} -% -% The option \opt{letterpaper} (default) sets the target paper width -% and height to U.S. letter size, 8.5 in x 11 in. An option -% \opt{a4paper} is also supported, but we don't include some of the -% more unusual paper options (\opt{legalpaper}, \opt{a5paper}, -% \opt{executivepaper}) of the generic \cls{article} class. For A4 -% paper we not only change the paper size but also add 4pc to the -% normal textheight of 50.5pc (the difference between 297mm and 11in -% is 50pt). -% \begin{macrocode} -\DeclareOption{a4paper}{\paperheight 297mm\paperwidth 210mm - \textheight 54.5pc } -\DeclareOption{letterpaper}{\paperheight 11in\paperwidth 8.5in } -% \end{macrocode} -% -% The options \opt{landscape} and \opt{portrait} swap paper height -% and width. -% \begin{macrocode} -\DeclareOption{landscape}{\@tempdima\paperheight - \paperheight\paperwidth \paperwidth\@tempdima} -\DeclareOption{portrait}{} -% \end{macrocode} -% -% \subsubsection{Two-sided or one-sided printing} -% -% For two-sided printing we set the switch \cs{if@twoside} which -% will cause the margins to be adjusted so that the type blocks of -% back-to-back pages will line up. The \cs{if@mparswitch} makes margin -% paragraphs print in the outside margin. -% \begin{macrocode} -\DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse} -\DeclareOption{twoside}{\@twosidetrue \@mparswitchtrue} -% \end{macrocode} -% -% \subsubsection{Draft or final version} -% -% The \opt{draft} option causes overfull lines to be marked with -% a black slug in the right margin. -% \begin{macrocode} -\DeclareOption{draft}{\overfullrule5\p@ - \ClassWarningNoLine{\@classname}{% - When the draft option is used, the - \protect\includegraphics\MessageBreak - command will print blank placeholder boxes\MessageBreak - for the graphics}% -} -\DeclareOption{final}{\overfullrule\z@ } -% \end{macrocode} -% -% \subsubsection{Posting date} -% -% The date when an article is officially posted to the WWW is recorded -% in a variable \cs{@dateposted} with the \cn{dateposted} command. -% -% \begin{macrocode} -\def\dateposted#1{\def\@dateposted{#1}}% -\let\@dateposted\@empty -% \end{macrocode} -% -% \begin{macrocode} -%<*amsart> -\def\@setdateposted{% - \newline Article electronically published on \@dateposted} -%</amsart> -% \end{macrocode} -% -% \subsubsection{Logos} -% -% The following logo is used for regular journal articles. The one -% for proceedings articles and the one for e-only journals are given -% separately. -% \begin{macrocode} -%<*amsart> -\def\article@logo{% - \set@logo{% - \publname -% \end{macrocode} -% Current volume might be empty when an article is first posted to -% the WWW. In that case leave out the issue-specific info. -% \begin{macrocode} - \ifx\@empty\currentvolume - \else \newline\volinfo, \pageinfo - \fi - \newline \@PII - \ifx\@empty\@dateposted \else \@setdateposted\fi - }% -} -\def\eonly@logo{% - \set@logo{% - \publname - \newline\volinfo, \pageinfo - \ifx\@empty\@dateposted \else \@setdateposted\fi - \newline \@PII - }% -} -%</amsart> -% \end{macrocode} -% -% \begin{macrocode} -%<*amsart|amsproc> -\def\@logofont{\fontsize{6}{7\p@}\selectfont} -\long\def\set@logo#1{% - \vbox to\headheight{% - \@parboxrestore \@logofont - \noindent#1\par\vss - }% -} -%</amsart|amsproc> -% \end{macrocode} -% -% \begin{macrocode} -%<*amsproc> -\def\procart@logo{% - \set@logo{\publname - \ifx\@empty\volinfo \else\newline\volinfo\fi}% -} -%</amsproc> -% \end{macrocode} -% -% \subsubsection{E-only journal} -% -% Electronic-only journals (for \cls{amsart} only) have different -% information in the series logo than paper-only or dual journals. -% Only the volume number is reported (no issue or year), and the -% posting date is added following the page numbers. [bnb, 1996/10/31] -% -% This option will be invoked only from publication-specific \fn{.cls} -% files. -% \begin{macrocode} -%<*amsart> -\DeclareOption{e-only}{% - \def\volinfo{Volume \currentvolume}% - \dateposted{Xxxx XX, XXXX}% - \def\@setdateposted{\ (\@dateposted)}% - \let\article@logo\eonly@logo -} -%</amsart> -% \end{macrocode} -% -% \subsubsection{Title page} -% -% The title and related information can optionally be printed on a -% separate page. -% \begin{macrocode} -\newif\if@titlepage -\DeclareOption{titlepage}{\@titlepagetrue} -\DeclareOption{notitlepage}{\@titlepagefalse} -% \end{macrocode} -% -% \subsubsection{Start on right- or left-hand page} -% -% For some book series, it's permissible to start chapters on a -% left-hand page. Default to `openright', the usual AMS book style. -% \begin{macrocode} -%<*amsbook> -\newif\if@openright -\DeclareOption{openright}{\@openrighttrue} -\DeclareOption{openany}{\@openrightfalse} -\@openrighttrue -%</amsbook> -% \end{macrocode} -% -% \subsubsection{Two-column printing} -% -% Two-column layout is handled through a predefined internal switch. -% \begin{macrocode} -\DeclareOption{onecolumn}{\@twocolumnfalse} -\DeclareOption{twocolumn}{\@twocolumntrue} -% \end{macrocode} -% -% \subsubsection{The nomath option} -% -% The \opt{nomath} option causes most of the extra math features to -% be omitted. Some utility functions will be defined below if this -% option is specified. -% \begin{macrocode} -\DeclareOption{nomath}{} -% \end{macrocode} -% -% \subsubsection{Some font options} -% -% The \opt{noamsfonts} option means to avoid declaring math alphabets -% or symbol fonts for the extra math fonts in the AMSFonts set. If -% these fonts are declared, it means that the corresponding \fn{.tfm} -% files are required even for documents that do not use any symbols -% from those fonts. So we allow optionally to not declare them, for -% convenience of users who don't have those fonts on their system and -% don't want the hassle of getting them. -% \begin{macrocode} -\DeclareOption{noamsfonts}{} -% \end{macrocode} -% The \opt{psamsfonts} option, passed on to the \pkg{amsfonts} package, -% means that alternative \fn{.fd} files should be used that do not -% refer to \fn{.tfm} files for sizes 6,8,9 (which are not present in -% the PostScript (Type 1) AMS fonts set from Y\&Y/Blue Sky Research). -% This should also trigger the \opt{cmex10} option of \pkg{amsmath}, -% to avoid trying to load sizes 7--9 of \fn{cmex}. -% \begin{macrocode} -\DeclareOption{psamsfonts}{% - \PassOptionsToPackage{psamsfonts}{amsfonts}% - \PassOptionsToPackage{cmex10}{amsmath}} -% \end{macrocode} -% -% \subsubsection{Equation numbering on the left or right} -% -% The option \opt{leqno}---equation numbers on the left---is the -% default in AMS styles. Therefore we provide also a \opt{reqno} -% option. -% \begin{macrocode} -\newif\iftagsleft@ -\DeclareOption{leqno}{% - \tagsleft@true \PassOptionsToPackage{leqno}{amsmath}} -\DeclareOption{reqno}{% - \tagsleft@false \PassOptionsToPackage{reqno}{amsmath}} -% \end{macrocode} -% -% \subsubsection{Vertical centering of equation numbers} -% For multiline equations the equation number is by default centered -% vertically on the total height of the equation. To make the -% equation number print on the first line (for left-hand -% numbers) or the last line (right-hand numbers), there is a -% \opt{tbtags} option `top/bottom tags'. -% \begin{macrocode} -\newif\ifctagsplit@ -\DeclareOption{centertags}{% - \ctagsplit@true \PassOptionsToPackage{centertags}{amsmath}} -\DeclareOption{tbtags}{% - \ctagsplit@false \PassOptionsToPackage{tbtags}{amsmath}} -% \end{macrocode} -% -% \subsubsection{Flush left displays} -% -% The option \opt{fleqn} causes displayed equations to print -% aligned on the left instead of centered, with an indentation -% of \cs{mathindent} from the prevailing left margin. If the -% \pkg{amsmath} package is loaded, most of this code will be -% overridden, but it seems we need it anyway because of the -% possibility of the \opt{nomath} class option. -% -% \begin{macrocode} -\DeclareOption{fleqn}{}% -% \end{macrocode} -% -% \subsubsection{Dealing with font sizes} -% -% \begin{macro}{\@mainsize} -% \begin{macro}{\@ptsize} -% Instead of the miserly \cs{@ptsize} variable from \latex/'s -% ancient history that contains only the last digit of the main -% typesize, we set up a proper variable \cs{@mainsize} that -% contains all the digits of the main typesize. Just in case it is -% needed for someone using an old package, we will keep -% \cs{@ptsize} also. -% \begin{macrocode} -\newcommand{\@mainsize}{10} -\newcommand{\@ptsize}{0} -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\larger} -% \begin{macro}{\smaller} -% This function is an easy byproduct of the work done to fold -% typesize-specific code into the main class file. The range of font -% sizes is \cn{normalsize}, \cn{small}, \cn{Small}, \cn{SMALL}, -% \cn{tiny}, \cn{Tiny}, \cn{large}, \cn{Large}, \cn{LARGE}, -% \cn{huge}, \cn{Huge}. Spaces are left at either end of the case -% statement to accommodate adding \cn{TINY} and \cn{HUGE} in the -% future but it's not clear that they're really needed. -% \begin{macrocode} -\newcommand{\larger}[1][1]{% - \count@\@currsizeindex \advance\count@#1\relax - \ifnum\count@<\z@ \count@\z@ \else\ifnum\count@>12 \count@12 \fi\fi -% \end{macrocode} -% The various size-changing commands \cn{normalsize}, etc., will take -% care of updating \cs{@currsizeindex}. -% \begin{macrocode} - \ifcase\count@ - \Tiny\or\Tiny\or\tiny\or\SMALL\or\Small\or\small - \or\normalsize - \or\large\or\Large\or\LARGE\or\huge\or\Huge\else\Huge - \fi -} -\newcommand{\smaller}[1][1]{\larger[-#1]} -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% The \cs{@adjustvertspacing} function adapts some vertical spacing -% amounts to the current type size. We don't expect large sections of -% vertical text to occur in the extraordinarily small or large type -% sizes, so the \cs{@adjustvertspacing} function is only called in -% the range between `footnote' size and `Large' size. Notice that no -% shrinkability is used. -% \begin{macrocode} -\def\@adjustvertspacing{% -% \end{macrocode} -% \cs{big/med/smallskipamount} are generic space values that will be -% used by the commands \cn{bigskip}, \cn{medskip}, \cn{smallskip}. We -% also link the spacing around displayed equations to these amounts. -% \begin{macrocode} - \bigskipamount.7\baselineskip plus.7\baselineskip - \medskipamount\bigskipamount \divide\medskipamount\tw@ - \smallskipamount\medskipamount \divide\smallskipamount\tw@ - \abovedisplayskip\medskipamount - \belowdisplayskip \abovedisplayskip -% \end{macrocode} -% The above-display short space is zero but with the same -% stretchability as the above-display normal space. And the -% below-display short space is similar, but has a base value equal to -% \cs{smallskipamount}. Use of the multiplier |1| is an arcane \TeX{} -% trick that coerces the skip value to a dimen value, i.e., gives us -% the base value of the skip register without the stretch or shrink -% values. -% \begin{macrocode} - \abovedisplayshortskip\abovedisplayskip - \advance\abovedisplayshortskip-1\abovedisplayskip - \belowdisplayshortskip\abovedisplayshortskip - \advance\belowdisplayshortskip 1\smallskipamount -% \end{macrocode} -% The traditional value for \cs{jot} is 3pt, which we generalize -% to \cs{baselineskip}/4. This is used to adjust interline spacing in -% multiline displayed equations. -% \begin{macrocode} - \jot\baselineskip \divide\jot 4 \relax -} -% \end{macrocode}% -% -% We fill out the range of typesize changing commands to a full -% eleven: five large/huge commands and five small/tiny commands. (The -% capitalization of the command names suggests that there should -% actually be thirteen---add \cn{TINY} and \cn{HUGE}---but let's be -% conservative and leave those out until a real need for them is -% known to exist.) An unavoidable side effect is that \cn{tiny} now -% selects 6pt instead of 5pt by default. -% -% In version 1.1 of \cls{amsart} and \cls{amsbook} \cn{small} was -% the same as \cn{footnotesize} (\cls{amsproc} didn't exist in v. 1.1). -% -% The only size-changing command that is predefined by \latex/ is -% \cn{normalsize}; that's why it's the only one for which we use -% \cn{renewcommand} below. -% \begin{macrocode} -\renewcommand\normalsize{\@xsetfontsize\normalsize 6% - \@adjustvertspacing \let\@listi\@listI} -\DeclareRobustCommand{\Tiny}{\@xsetfontsize\Tiny 1} -\DeclareRobustCommand{\tiny}{\@xsetfontsize\tiny 2} -\DeclareRobustCommand{\SMALL}{\@xsetfontsize\SMALL 3} -\DeclareRobustCommand{\Small}{\@xsetfontsize\Small 4% - \@adjustvertspacing - \def\@listi{\topsep\smallskipamount \parsep\z@skip \itemsep\z@skip - \leftmargin=\leftmargini - \labelwidth=\leftmargini \advance\labelwidth-\labelsep - }% -} -\DeclareRobustCommand{\small}{\@xsetfontsize\small 5\@adjustvertspacing} -% \end{macrocode} -% For backward compatibility we had better define \cn{footnotesize} -% and \cn{scriptsize}. Also there is the small discrepancy with -% \cn{tiny} to worry about. -% \begin{macrocode} -\def\footnotesize{\Small} -\def\scriptsize{\SMALL} -% \end{macrocode} -% -% The sizes above 10pt use magstep values, stored in the functions -% \cs{@xipt}, \cs{@xiipt}, etc. -% \begin{macrocode} -\DeclareRobustCommand{\large}{\@xsetfontsize\large 7\@adjustvertspacing} -\DeclareRobustCommand{\Large}{\@xsetfontsize\Large 8\@adjustvertspacing} -\DeclareRobustCommand{\LARGE}{\@xsetfontsize\LARGE 9} -\DeclareRobustCommand{\huge}{\@xsetfontsize\huge{10}} -\DeclareRobustCommand{\Huge}{\@xsetfontsize\Huge{11}} -%\DeclareRobustCommand\HUGE{\@xsetfontsize\HUGE{12}} -% \end{macrocode} -% -% So now we had better define the \cs{@xsetfontsize} function. -% The size-changing commands use \cs{@setfontsize} instead of -% \cn{fontsize} to (a)~give an error message if used in math mode and -% (b)~set the \cs{@currsize} variable. -% \begin{macrocode} -\def\@xsetfontsize#1#2{% - \chardef\@currsizeindex#2\relax - \edef\@tempa{\@nx\@setfontsize\@nx#1% - \@xp\ifcase\@xp\@currsizeindex\@typesizes -% \end{macrocode} -% Add nonsense values 99/99 at the end just in case some extreme -% error turns up. -% \begin{macrocode} - \else{99}{99}\fi}% - \@tempa -} -% \end{macrocode} -% For the record let's initialize \cs{@currsizeindex}. -% \begin{macrocode} -\chardef\@currsizeindex=6 -% \end{macrocode} -% -% Set page-breaking penalties to prevent all widows, orphans, and -% hyphens at the end of a page. -% \begin{macrocode} -\widowpenalty=10000 -\clubpenalty=10000 -\brokenpenalty=10000 -% \end{macrocode} -% -% Set some default linespacing values. The variable \cs{linespacing} -% is usually the normal interline space in the main text. It is used -% to specify vertical space for elements such as section heads and -% theorems in proportion to the normal interline space. -% \begin{macrocode} -\newdimen\linespacing -\lineskip=1pt \lineskiplimit=1pt -\normallineskip=1pt \normallineskiplimit=1pt -\let\baselinestretch=\@empty -% \end{macrocode} -% -% Settings for \cn{textheight} and \cn{textwidth}. We start with the -% value 50.5pc specified in AMS journal specifications as the total -% height of the type block and then subtract the running head height -% and adjust for \cs{topskip} to get the proper value for the text -% block. -% \begin{macrocode} -\headheight=8pt \headsep=14pt -%<amsbook>\footskip=18pt -%<amsart|amsproc>\footskip=12pt -\textheight=50.5pc \topskip=10pt -\textwidth=30pc -\columnsep=10pt \columnseprule=0pt -% \end{macrocode} -% Some settings for marginpars. -% \begin{macrocode} -\marginparwidth=90pt -\marginparsep=11pt -\marginparpush=5pt -% \end{macrocode} -% To avoid setting text before begin-document, we postpone the -% setting of \cs{footnotesep} using \cs{AtBeginDocument}. -% \begin{macrocode} -\AtBeginDocument{\settoheight{\footnotesep}{\footnotesize M$^1$}} -% \end{macrocode} -% -% \begin{macrocode} -\skip\footins=7pt plus11pt -\skip\@mpfootins=\skip\footins -% \end{macrocode} -% -% \begin{macrocode} -\fboxsep=3pt \fboxrule=.4pt -% \end{macrocode} -% -% \begin{macrocode} -\arrayrulewidth=.4pt \doublerulesep=2pt -\labelsep=5pt \arraycolsep=\labelsep -\tabcolsep=\labelsep \tabbingsep=\labelsep -% \end{macrocode} -% -% \begin{macrocode} -\floatsep=15pt plus 12pt \dblfloatsep=15pt plus 12pt -\textfloatsep=\floatsep \dbltextfloatsep=15pt plus 12pt -\intextsep=\floatsep -% \end{macrocode} -% -% \begin{macrocode} -\@fptop=0pt plus1fil \@dblfptop=0pt plus1fil -\@fpbot=0pt plus1fil \@dblfpbot=0pt plus1fil -\@fpsep=8pt plus2fil \@dblfpsep=8pt plus2fil\relax -% \end{macrocode} -% Note that \cs{parskip} gets no stretch; this is at variance with -% the generic \latex/ classes. -% \begin{macrocode} -\parskip=0pt \relax -% \end{macrocode} -% -% \cs{@parboxrestore}, used by \cs{@footnotetext}, sets -% \cs{parindent} to |0pt|; since this is not what we want, we -% make a new dimen \cs{normalparindent} and after calling -% \cs{@parboxrestore}, \cs{@footnotetext} resets -% \cs{parindent} back to normal. -% \begin{macrocode} -\newdimen\normalparindent -%<amsart>\normalparindent=12pt -%<amsproc|amsbook>\normalparindent=18pt -\parindent=\normalparindent -% \end{macrocode} -% -% \begin{macrocode} -\partopsep=0pt \relax \parsep=0pt \relax \itemsep=0pt \relax -% \end{macrocode} -% -% \begin{macrocode} -\@lowpenalty=51 \@medpenalty=151 \@highpenalty=301 -\@beginparpenalty=-\@lowpenalty -\@endparpenalty=-\@lowpenalty -\@itempenalty=-\@lowpenalty -% \end{macrocode} -% -% \subsubsection{Typesize-specific code} -% -% The class option \opt{12pt} sets the main typesize to 12 pt and -% makes various adaptations, primarily sliding the size-changing -% commands up the scale of magsteps. This makes it more likely that -% someone with bitmapped fonts will have all the fonts and sizes -% that they need. The \opt{8pt} option is for those who like to -% conserve paper. -% -% By parameterizing some aspects it is possible to make a great deal -% of the typesize-specific code automatically adapt to the selected -% size. Then there is so little typesize-specific code remaining -% that it no longer makes sense to put the code in separate \fn{.clo} -% files. So instead of analogs for the generic \fn{size10,11,12.clo} -% files we have the code for those options entirely contained in the -% \fn{.cls} file in the form of declared options. -% -% Some miscellaneous remarks. -% -% ---If PostScript fonts are used, it may seem a little strange to -% use fonts following the magstep'd point sizes 10.95, 14.4, 17.28, -% 20.74, 24.88 instead of simply 11, 14, 17, 21, 25. But it is not -% easy for us to make that distinction here in the document class -% definitions of the fontsize changing commands. So we don't try. -% -% \begin{macrocode} -\DeclareOption{10pt}{\def\@mainsize{10}\def\@ptsize{0}% - \def\@typesizes{% -% \end{macrocode} -% There should be 11 typesize/baselineskip pairs: five below -% \cn{normalsize} and five above. -% \begin{macrocode} - \or{5}{6}\or{6}{7}\or{7}{8}\or{8}{10}\or{9}{11}% - \or{10}{12}% normalsize - \or{\@xipt}{13}\or{\@xiipt}{14}\or{\@xivpt}{17}% - \or{\@xviipt}{20}\or{\@xxpt}{24}}% - \normalsize \linespacing=\baselineskip -} -% -\DeclareOption{11pt}{\def\@mainsize{11}\def\@ptsize{1}% - \def\@typesizes{% - \or{6}{7}\or{7}{8}\or{8}{10}\or{9}{11}\or{10}{12}% - \or{\@xipt}{13}% normalsize - \or{\@xiipt}{14}\or{\@xivpt}{17}\or{\@xviipt}{20}% - \or{\@xxpt}{24}\or{\@xxvpt}{30}}% - \normalsize \linespacing=\baselineskip -} -% -\DeclareOption{12pt}{\def\@mainsize{12}\def\@ptsize{2}% - \def\@typesizes{% - \or{7}{8}\or{8}{10}\or{9}{11}\or{10}{12}\or{\@xipt}{13}% - \or{\@xiipt}{14}% normalsize - \or{\@xivpt}{17}\or{\@xviipt}{20}\or{\@xxpt}{24}% - \or{\@xxvpt}{30}\or{\@xxvpt}{30}}% - \normalsize \linespacing=\baselineskip -} -% -\DeclareOption{8pt}{\def\@mainsize{8}\def\@ptsize{8}% - \def\@typesizes{% - \or{5}{6}\or{5}{6}\or{5}{6}\or{6}{7}\or{7}{8}% - \or{8}{10}% normalsize - \or{9}{11}\or{10}{12}\or{\@xipt}{13}% - \or{\@xiipt}{14}\or{\@xivpt}{17}}% - \normalsize \linespacing=\baselineskip -} -% -\DeclareOption{9pt}{\def\@mainsize{9}\def\@ptsize{9}% - \def\@typesizes{% - \or{5}{6}\or{5}{6}\or{6}{7}\or{7}{8}\or{8}{10}% - \or{9}{11}% normalsize - \or{10}{12}\or{\@xipt}{13}\or{\@xiipt}{14}% - \or{\@xivpt}{17}\or{\@xviipt}{20}}% - \normalsize \linespacing=\baselineskip -} -% \end{macrocode} -% -% \subsubsection{Running heads} -% The normal application of pagestyle functions \cs{ps@xxx} is to -% determine the contents of running heads and feet. The function -% \cs{@mkboth} is used internally by commands \cn{chapter}, -% \cn{section}, and the like to set the running heads. -% \begin{macrocode} -\def\ps@empty{\let\@mkboth\@gobbletwo - \let\@oddhead\@empty \let\@evenhead\@empty - \let\@oddfoot\@empty \let\@evenfoot\@empty -% \end{macrocode} -% The current implementation in \cls{amsart}/\cls{amsproc}/\cls{amsbook} -% of the vertical space at the top of an opening page uses \cs{topskip}, -% which means that we need to do some resetting here. -% \begin{macrocode} - \global\topskip\normaltopskip} -% \end{macrocode} -% Pagestyle `plain' has the page numbers in the running feet. -% \begin{macrocode} -\def\ps@plain{\ps@empty - \def\@oddfoot{\normalfont\scriptsize \hfil\thepage\hfil}% - \let\@evenfoot\@oddfoot} -% \end{macrocode} -% -% Pagestyle `headings' uses text from sectioning commands for -% running heads. Empty running feet. -% \begin{macrocode} -\newswitch{runhead} -% \end{macrocode} -% -% \begin{macrocode} -\def\ps@headings{\ps@empty - \def\@evenhead{% - \setTrue{runhead}% - \normalfont\scriptsize - \rlap{\thepage}\hfil - \def\thanks{\protect\thanks@warning}% - \leftmark{}{}\hfil}% - \def\@oddhead{% - \setTrue{runhead}% - \normalfont\scriptsize \hfil - \def\thanks{\protect\thanks@warning}% - \rightmark{}{}\hfil \llap{\thepage}}% - \let\@mkboth\markboth -%<*amsbook> - \def\partmark{\@secmark\markboth\partrunhead\partname}% - \def\chaptermark{% - \@secmark\markboth\chapterrunhead{}}% - \def\sectionmark{% - \@secmark\markright\sectionrunhead\sectionname}% -%</amsbook> -} -% \end{macrocode} -% -% \begin{macro}{\sectionname} -% \begin{macro}{\subsectionname} -% \begin{macro}{\subsubsectionname} -% \begin{macro}{\paragraphname} -% \begin{macro}{\subparagraphname} -% Initialize section headings. -% \begin{macrocode} -\let\sectionname\@empty -\let\subsectionname\@empty -\let\subsubsectionname\@empty -\let\paragraphname\@empty -\let\subparagraphname\@empty -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% The default definitions of \cs{leftmark}, \cs{rightmark} are not -% what we want: the section title (or whatever) reported in the -% right-hand running head should report the section that is current -% at the bottom of the right-hand page. And the left-hand running -% head should report the status at the top of the page. -% Cf.~\fn{amsppt.sty}. -% \begin{macrocode} -\def\leftmark{\expandafter\@firstoftwo\topmark{}{}} -\def\rightmark{\expandafter\@secondoftwo\botmark{}{}} -% \end{macrocode} -% -% Journal and Proceedings articles require an indication of the first -% page so the logo and copyright line can appear. -% \begin{macrocode} -%<*amsart|amsproc> -\def\ps@firstpage{\ps@plain - \def\@oddfoot{\normalfont\scriptsize \hfil\thepage\hfil -% \end{macrocode} -% Stick in the reset of \cs{topskip} here so it only gets executed -% after the first page is completed. -% \begin{macrocode} - \global\topskip\normaltopskip}% - \let\@evenfoot\@oddfoot - \def\@oddhead{\@serieslogo\hss}% - \let\@evenhead\@oddhead % in case an article starts on a left-hand page -} -%</amsart|amsproc> -% \end{macrocode} -% -% \begin{macro}{\@nilgobble} -% Something that apparently doesn't exist in the kernel? -% \begin{macrocode} -\long\def\@nilgobble#1\@nil{} -% \end{macrocode} -% \end{macro} -% -% A general section-marking function. Arg 1 is either \cn{markright} -% or \cn{markboth} indicating which kind of marking action is desired -% (this gives us some string pool/hash table savings by allowing the -% \cs{@secmark} function to serve for both cases). Arg 2 is the -% function that should be called in the running head to process the -% remaining three args. Arg 3 is normally \cs{xxxname} (but could be -% empty). Arg 4 is the section-title text. Assumption: whenever -% \cs{@secmark} is called, the section-number variable -% \cs{@secnumber} has been set to the value of the current section -% number (possibly empty, in the case of a |*| section for example). -% \begin{macrocode} -%<*amsbook> -\def\@secmark#1#2#3#4{% -% \end{macrocode} -% We want to apply expansion to \cs{xxxname} and \cs{thexxx} but not -% to the other elements. -% \begin{macrocode} - \begingroup \let\protect\@unexpandable@protect - \edef\@tempa{\endgroup \toks@{\protect#2{#3}{\@secnumber}}}% - \@tempa - \toks@\@xp{\the\toks@{#4}}% -% \end{macrocode} -% If a \cn{markright} operation is called for, use the current -% left-mark via \cs{@temptokena}. -% \begin{macrocode} - \afterassignment\@nilgobble\@temptokena\@themark{}\@nil - \edef\@tempa{\@nx\@mkboth{% - \ifx\markright#1\the\@temptokena\else\the\toks@\fi}{\the\toks@}}% - \@tempa} -% \end{macrocode} -% Init \cs{@secnumber}. -% \begin{macrocode} -\let\@secnumber\@empty -%</amsbook> -% \end{macrocode} -% -% Fix \cn{markboth} so that \cs{@secmark} can work without too much -% thrashing. -% \begin{macrocode} -\def\markboth#1#2{% - \begingroup - \@temptokena{{#1}{#2}}\xdef\@themark{\the\@temptokena}% - \mark{\the\@temptokena}% - \endgroup - \if@nobreak\ifvmode\nobreak\fi\fi} -% \end{macrocode} -% -% With the myheadings pagestyle, no automatic running heads will be -% provided by the document class; only running heads specified by -% the user through explicit \cn{markboth} or \cn{markright} -% commands will be used. -% \begin{macrocode} -\def\ps@myheadings{\ps@headings \let\@mkboth\@gobbletwo} -% \end{macrocode} -% -% Save normal topskip value in a skip register. -% \begin{macrocode} -\newskip\normaltopskip -\normaltopskip=10pt \relax -% \end{macrocode} -% -% We also want to turn off all section marks. First-level section -% heads will be defined in \cs{ps@headings}. -% \begin{macrocode} -\let\sectionmark\@gobble -\let\subsectionmark\@gobble -\let\subsubsectionmark\@gobble -\let\paragraphmark\@gobble -% \end{macrocode} - -% \subsubsection{Unrecognized options} -% -% The \opt{makeidx} option is redundant; everything that it does in -% the generic \latex/ classes is already done anyway in this class. -% \begin{macrocode} -\DeclareOption{makeidx}{} -%</classes> -% \end{macrocode} -% -% Unrecognized options for \pkg{amsthm} are treated as references -% to auxiliary theorem setup (\fn{.thm}) files. This allows a user -% to create theorem styles using internal commands (with |@| signs) -% without having to be concerned about category coding. -% -% Here is an example from the file \fn{thmtest.tex} which is part -% of this collection. See that file for further information. -%\begin{verbatim} -% \begin{filecontents}{exercise.thm} -% \def\th@exercise{% -% \normalfont % body font -% \thm@headpunct{:}% -% } -% \end{filecontents} -%\end{verbatim} -% -% This facility is available only when \pkg{amsthm} is used as an -% independent package, not as part of an AMS document class. -% \begin{macrocode} -%<*amsthm> -\DeclareOption*{\input{\CurrentOption .thm}} -\ProcessOptions -%</amsthm> -% \end{macrocode} -% -% \subsection{Process options} -% -% Black boxes for overfull lines are turned off by default (the -% \opt{final} option). This can be overridden with the \opt{draft} -% option. -% \begin{macrocode} -%<*classes> -\ExecuteOptions{leqno,centertags,letterpaper,portrait,% - 10pt,twoside,onecolumn,final} -% \end{macrocode} -% Options will be processed in the order of the associated -% \cs{DeclareOption} commands. -% \begin{macrocode} -\ProcessOptions\relax -% \end{macrocode} -% -% In compatibility mode, we want to load the frozen version of -% \fn{amstex.sty} instead of the \pkg{amsmath} package. This is -% rather a horrible kluge but I can't see anything better at the -% moment. [mjd,1995/01/27] -% \begin{macrocode} -\if@compatibility - \def\@tempa{\RequirePackage{amstex}\relax}% -\else - \@ifclasswith{\@classname}{nomath}{% - \let\@tempa\relax - }{% - \def\@tempa{\RequirePackage{amsmath}\relax}% - }% -\fi -\@tempa % load amstex.sty or amsmath.sty -% \end{macrocode} -% If the \opt{nomath} option was specified, then \cn{numberwithin} -% and \cs{@emptytoks} remain to be defined. -% \begin{macrocode} -\@ifundefined{numberwithin}{% - \newcommand{\numberwithin}[3][\arabic]{% - \@ifundefined{c@#2}{\@nocounterr{#2}}{% - \@ifundefined{c@#3}{\@nocnterr{#3}}{% - \@addtoreset{#2}{#3}% - \@xp\xdef\csname the#2\endcsname{% - \@xp\@nx\csname the#3\endcsname .\@nx#1{#2}}}}% - } - \csname newtoks\endcsname\@emptytoks -}{} -% \end{macrocode} -% -% If the \opt{noamsfonts} option was called for, skip the -% \pkg{amsfonts} package load. -% \begin{macrocode} -\if@compatibility -\else - \@ifclasswith{\@classname}{noamsfonts}{% - % amsfonts package is not wanted - }{% - % amsfonts package IS wanted; test whether a recent enough version - % seems to be installed - \begingroup \fontencoding{U}\fontfamily{msa}\try@load@fontshape\endgroup - \global\@xp\let\csname U+msa\endcsname\relax % reset - \@ifundefined{U/msa/m/n}{% - \ClassError{\@classname}{% - Package `amsfonts' not installed, or version too old?\MessageBreak - Unable to get font info for the `msam' fonts in the expected form% - }{% - The amsfonts package will not be loaded, to avoid probable\MessageBreak - incompatibility problems. You can (a) use the `noamsfonts' - documentclass\MessageBreak - option next time, or (b) check that the amsfonts package is - installed\MessageBreak - correctly, and is not too old to be compatible.% - }% - }{% - \RequirePackage{amsfonts}[1995/01/01]\relax - }% - } -\fi % end yesamsfonts branch -% \end{macrocode} -% -% \subsection{Basic AMS style features} -% -% AMS style requires that blank pages between chapters be \emph{really} -% blank: no running heads, no page numbers. To accomplish this, -% redefine \cn{cleardoublepage} to do the right thing. [bnb, 1999/07/17] -% \begin{macrocode} -\let\cleardouble@page\cleardoublepage -% \end{macrocode} -% Postpone the redefinition of \cs{cleardoublepage} to begin-document -% to work around difficulties with old versions of \fn{gsm-l.cls}. -% \begin{macrocode} -\AtBeginDocument{% - \ifx\cleardouble@page\cleardoublepage - \def\cleardoublepage{\clearpage{\pagestyle{empty}\cleardouble@page}} - \fi -} -% \end{macrocode} -% -% Now a utility macro to do \cn{uppercase} but sidestep any math, to -% prevent uppercasing math variables. In order to be handled properly -% the |$...$| or |\(...\)| must be on the outer level (not -% enclosed in braces). We did not try to handle the possibility -% |\begin{math}| |...| |\end{math}| in a title at the present time (too -% complicated). Also we increase inter-word space in the uppercase -% text. -% -% One other little problem: uppercasing of a few special characters -% like the German {\ss} (\cn{ss}) and the undotted i and j (\cn{i} -% and \cn{j}), used sometimes with accents. We redefine them to be -% uppercase equivalents. (Undotted \cn{i} and \cn{j} in math would be -% typed as \cn{imath} and \cn{jmath}.) -% -% Spaceskip is changed in accordance with recommendations for -% increased interword spacing in all-caps text by e.g.\ `Words into -% Type'. -% \begin{macrocode} -\newcommand{\uppercasenonmath}[1]{\toks@\@emptytoks -% Insert an extra \@empty to avoid removing braces around arg \arg{1}. - \@xp\@skipmath\@xp\@empty#1$$% -% \end{macrocode} -% The \cs{protect} here is in case the shorttitle gets used for -% shortauthors and we get redundant application of \cn{MakeUppercase}. -% Double braces limit the scope so that later elements in title block -% aren't uppercased, e.g., \cn{i} in an address. [bnb, 2004/04/01] -% \begin{macrocode} - \edef#1{{\@nx\protect\@nx\@upprep\the\toks@}}% -} -% \end{macrocode} -% -% \begin{macro}{\@upprep} -% Preparations for printing all-caps text. -% \begin{macrocode} -\newcommand{\@upprep}{% - \spaceskip1.3\fontdimen2\font plus1.3\fontdimen3\font - \upchars@} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\upchars@} -% In all-caps text, esszet should print as SS, dotless i should print -% as normal cap I, Mc should print with a small-caps (not lowercase) -% c, and so forth. -% \begin{macrocode} -\newcommand{\upchars@}{% - \def\ss{SS}\def\i{I}\def\j{J}\def\ae{\AE}\def\oe{\OE}% - \def\o{\O}\def\aa{\AA}\def\l{\L}\def\Mc{M{\scshape c}}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\Mc} -% The use of \cn{Mc} makes it possible for `Mc' to get special -% treatment when uppercasing is applied. -% \begin{macrocode} -\providecommand{\Mc}{Mc} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@skipmath} -% \begin{macro}{\@xskipmath} -% \cs{@skipmath} searches for |$...$| in order to keep from applying -% \cn{uppercase} to the contents. Then it calls \cs{@xskipmath} to -% search for |\(...\)|. -% \begin{macrocode} -\newcommand{\@skipmath}{} -\long\def\@skipmath#1$#2${% - \@xskipmath#1\(\)% - \@ifnotempty{#2}{\toks@\@xp{\the\toks@$#2$}\@skipmath\@empty}}% -% -\newcommand{\@xskipmath}{} -\long\def\@xskipmath#1\(#2\){% -% Expand away the added \@empty - \uppercase{\toks@\@xp\@xp\@xp{\@xp\the\@xp\toks@#1}}% - \@ifnotempty{#2}{\toks@\@xp{\the\toks@\(#2\)}\@xskipmath\@empty}}% -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\altucnm} -% \begin{macrocode} -\def\altucnm#1{% - \MakeTextUppercase{\toks@{#1}}% - \edef#1{\the\toks@}% -} -\AtBeginDocument{% - \@ifundefined{MakeTextUppercase}{}{\let\uppercasenonmath\altucnm}% -} -% \end{macrocode} -% \end{macro} -% -% For older versions of \latex/ this might be needed too: -% \begin{macrocode} -\@ifundefined{MakeUppercase}{\let\MakeUppercase\uppercase}{}% -% \end{macrocode} -% -% \begin{macro}{\today} -% The command \cn{today} produces today's date in the form most -% commonly used in the U.S. -% \begin{macrocode} -\newcommand{\today}{% - \relax\ifcase\month\or - January\or February\or March\or April\or May\or June\or - July\or August\or September\or October\or November\or December\fi - \space\number\day, \number\year} -% \end{macrocode} -% \end{macro} -% -% \subsection{Old font commands} -% The \cn{em} command is not redefined here (let's say, to give an -% `obsolete' warning and recommend instead \cn{emph}) because there -% is no alternative internal command \cs{emshape}. -% \begin{macrocode} -\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} -\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} -\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} -\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} -\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} -\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl} -\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc} -% \end{macrocode} -% -% This warning might have been a good idea back in 1995 but I don't -% think we can add it now [mjd,2000/03/10]. -%\begin{verbatim} -%%\if@compatibility -%%\else -%% \def\@obsolete@fontswitch#1#2#3{% -%% \@latex@warning@no@line{% -%% Command {\string#1...}\on@line\space is obsolete;\MessageBreak -%% the LaTeX2e equivalent is \string#3{...}}% -%% \gdef#1{\@fontswitch\relax#3}% -%% } -%% \DeclareRobustCommand*\cal{% -%% \@xp\@obsolete@fontswitch\csname cal \endcsname\relax\mathcal} -%% \DeclareRobustCommand*\mit{% -%% \@xp\@obsolete@fontswitch\csname mit \endcsname\relax\mathnormal} -%%\fi -%\end{verbatim} -% There's too great a chance that some people out there have -% documents that begin with -%\begin{verbatim} -%\documentclass{amsart} -%... -%\newcommand{\cal}{\mathcal} -%\end{verbatim} -% and such documents would now get error messages. -% -% Since \cs{cal} is not documented as a valid command for \LaTeXe/, I -% think it is OK to leave the status as is for AMS document classes. -% If you use \cs{documentstyle}, \cs{cal} will work. If you use -% \cs{documentclass}, well, it's a good idea to update to -% \cs{mathcal} instead of leaving old instances of \cs{cal}. -% -% \subsection{Top matter} -% For the \cn{title} command, we support an optional argument to give -% a shortened version of the title for running heads. -% \begin{macrocode} -\renewcommand*{\title}[2][]{\gdef\shorttitle{#1}\gdef\@title{#2}} -% \end{macrocode} -% The default value for the optional argument is `same as the -% mandatory arg' but there doesn't seem to be an easy way to get that -% effect with \ncn{[re]newcommand}. Here is how to use \cs{@dblarg} -% in conjunction with the preceding \cn{newcommand}: -% \begin{macrocode} -\edef\title{\@nx\@dblarg - \@xp\@nx\csname\string\title\endcsname} -% \end{macrocode} -% The \cn{author} command accepts an optional argument similar to -% that of the \cn{title} command. -% Moved update of \cn{addresses} within scope of \cs{else} to avoid -% adding anything if no authors, and thus avoiding output of ``Author -% address'' on monograph titlepage. [bnb, 1996/11/03] -% \begin{macrocode} -\renewcommand{\author}[2][]{% - \ifx\@empty\authors - \gdef\authors{#2}% - \else - \g@addto@macro\authors{\and#2}% - \g@addto@macro\addresses{\author{}}% - \fi - \@ifnotempty{#1}{% - \ifx\@empty\shortauthors - \gdef\shortauthors{#1}% - \else - \g@addto@macro\shortauthors{\and#1}% - \fi - }% -} -\edef\author{\@nx\@dblarg - \@xp\@nx\csname\string\author\endcsname} -% \end{macrocode} -% Initialize some variables. -% \begin{macrocode} -\let\shortauthors\@empty \let\authors\@empty -% \end{macrocode} -% -% \begin{macro}{\contrib} -% -% Contributors are similar to authors except that they are responsible -% for only part of a work, e.g., an appendix. The optional argument -% for the first contributor of a group identifies what has been -% contributed. There can be more than one group of contributors; -% each group is treated separately, using the same ``and'' conventions -% within the group as for authors. Contributor groups are strung -% together separated by a comma; if the word ``and'' is desired before -% the final group of contributors, it must be included in the optional -% argument for that group. -% \begin{macrocode} -%<*amsart|amsproc> -\newif\ifresetcontrib \resetcontribfalse -\newcommand\contrib[2][]{% - \def\@tempa{#1}% - \ifx\@empty\@tempa - \else - \ifresetcontrib \@xcontribs - \else \global\resetcontribtrue - \fi - \fi - \ifx\@empty\contribs - \gdef\contribs{#1 #2}% - \else - \g@addto@macro\contribs{\and#1 #2}% - \fi -% \end{macrocode} -% Accumulate contribs separately for the table of contents. Here, -% this is just a dummy; it is fully defined for in-house processing. -% \begin{macrocode} - \@wraptoccontribs{#1}{#2}% -} -\def\wraptoccontribs#1#2{} -\def\@xcontribs{% - \author@andify\contribs - \ifx\@empty\xcontribs - \xdef\xcontribs{\contribs}% - \else - \xdef\xcontribs{\xcontribs, \contribs}% - \fi - \let\contribs\@empty -} -% \end{macrocode} -% \end{macro} -% -% Initialize some more variables. -% \begin{macrocode} -\let\contribs\@empty \let\xcontribs\@empty \let\toccontribs\@empty -%</amsart|amsproc> -\let\addresses\@empty \let\thankses\@empty -% \end{macrocode} -% -% The optional arguments of \cn{address}, \cn{curraddr}, \cn{email} -% are to indicate which author the address applies to, if a document -% has multiple authors and there is not a normal one-to-one -% correspondence between authors and addresses. -% \begin{macrocode} -\newcommand{\address}[2][]{\g@addto@macro\addresses{\address{#1}{#2}}} -\newcommand{\curraddr}[2][]{\g@addto@macro\addresses{\curraddr{#1}{#2}}} -\newcommand{\email}[2][]{\g@addto@macro\addresses{\email{#1}{#2}}} -\newcommand{\urladdr}[2][]{\g@addto@macro\addresses{\urladdr{#1}{#2}}} -% \end{macrocode} -% -% Someone who does not look closely at the \cls{amsart} documentation -% is likely to put the \cn{thanks} command inside that argument of -% \cn{author}. -% \begin{macrocode} -\long\def\thanks@warning#1{% - \ClassError{\@classname}{% - \protect\thanks\space should be given separately, not inside author name.% - }\@ehb -} -% \end{macrocode} -% -% \begin{macrocode} -\renewcommand{\thanks}[1]{% - \@ifnotempty{#1}{\g@addto@macro\thankses{\thanks{#1}}}% -} -% \end{macrocode} -% -% The following example of addresses for three authors of a -% tri-author paper illustrates the kind of complications that need to -% be handled. -%\begin{verbatim} -% \author{Roland Campbell} -% \address{Department of Mathematics\\ -% Pennsylvania State University\\ -% Pittsburgh, Pennsylvania 13593} -% \email[R.~Campbell]{campr@@galois.psu.edu} -% -% \author{Mark M. Dane} -% % Same address as R. Campbell -% \curraddr[M.~Dane]{Atmospheric Research Station\\ -% Pala Lundi, Fiji} -% \email[M.~Dane]{DaneMark@@ffr.choice} -% -% \author{Jeremiah Jones} -% \address[J.~Jones]{Department of Philosophy\\ -% Freedman College\\ -% Periwinkle, Colorado 84320} -% \email[J.~Jones]{id739e@@oseoi44 (Bitnet)} -%\end{verbatim} -% In an article, typesetting of the address information is done at -% the end of the document, by calling \cs{@setaddresses}. This is done -% through a parent function \cs{enddoc@text}, because some AMS journals -% also print the abstract there instead of at the beginning, and it's -% easier to redefine \cs{enddoc@text} than to try undoing material -% already added to the \cs{AtEndDocument} hook. -% \begin{macrocode} -%<*amsart|amsproc> -\def\enddoc@text{\ifx\@empty\@translators \else\@settranslators\fi - \ifx\@empty\addresses \else\@setaddresses\fi} -\AtEndDocument{\enddoc@text} -%</amsart|amsproc> -% \end{macrocode} -% -% \begin{macrocode} -\def\curraddrname{{\itshape Current address}} -\def\emailaddrname{{\itshape E-mail address}} -\def\urladdrname{{\itshape URL}} -\def\@setaddresses{\par - \nobreak \begingroup -%<amsart|amsproc>\footnotesize - \def\author##1{\nobreak\addvspace\bigskipamount}% -% \end{macrocode} -% Address is supposed to go all on one line, so we redefine |\\| -% to just insert a comma instead of doing a line break. -% \begin{macrocode} - \def\\{\unskip, \ignorespaces}% -% \end{macrocode} -% No page breaks in the address section is accomplished by -% |\interlinepenalty\@M| and by the \cn{nobreak} before the \cn{bigskip}. -% \begin{macrocode} - \interlinepenalty\@M - \def\address##1##2{\begingroup -% \end{macrocode} -% If there are two addresses for the same author, add a \cn{bigskip} -% between them. -% \begin{macrocode} - \par\addvspace\bigskipamount\indent -% \end{macrocode} -% If the name of the author to whom this address applies -% was given, typeset it. -% \begin{macrocode} - \@ifnotempty{##1}{(\ignorespaces##1\unskip) }% -% \end{macrocode} -% Now the main part of the address: -% \begin{macrocode} - {\scshape\ignorespaces##2}\par\endgroup}% -% \end{macrocode} -% Current address: -% \begin{macrocode} - \def\curraddr##1##2{\begingroup - \@ifnotempty{##2}{\nobreak\indent\curraddrname - \@ifnotempty{##1}{, \ignorespaces##1\unskip}\/:\space - ##2\par}\endgroup}% -% \end{macrocode} -% And then email. In versions 1.0 and 1.1 |@@| was required to print -% a single \qc{\@} character; for bulletproofing we convert doubled -% \qc{\@} characters if found. -% \begin{macrocode} - \def\email##1##2{\begingroup - \@ifnotempty{##2}{\nobreak\indent\emailaddrname - \@ifnotempty{##1}{, \ignorespaces##1\unskip}\/:\space - \ttfamily##2\par}\endgroup}% -% \end{macrocode} -% URLaddr is simply a replica of the email address, with the -% addition of a feature to enable |~| to print. -% \begin{macrocode} - \def\urladdr##1##2{\begingroup - \def~{\char`\~}% - \@ifnotempty{##2}{\nobreak\indent\urladdrname - \@ifnotempty{##1}{, \ignorespaces##1\unskip}\/:\space - \ttfamily##2\par}\endgroup}% - \addresses - \endgroup -} -% \end{macrocode} -% -% Some other administrative info. For \cn{date} we can just use the -% default definition provided by \latex/, except that we initialize -% the date to empty instead of to \cn{today}. -% \begin{macrocode} -\let\@date\@empty -\def\dedicatory#1{\def\@dedicatory{#1}} -\let\@dedicatory=\@empty -\def\keywords#1{\def\@keywords{#1}} -\let\@keywords=\@empty -% \end{macrocode} -% -% To allow various versions of the subject classification, accept an -% optional value to identify the version, provide text for the two -% currently in use, and give a warning if the version specified is -% unknown. Default to 1991 version. [bnb, 1999/04/30] -% \begin{macrocode} -\newcommand*\subjclass[2][1991]{% - \def\@subjclass{#2}% - \@ifundefined{subjclassname@#1}{% - \ClassWarning{\@classname}{Unknown edition (#1) of Mathematics - Subject Classification; using '1991'.}% - }{% - \@xp\let\@xp\subjclassname\csname subjclassname@#1\endcsname - }% -} -\let\@subjclass=\@empty -%<amsart>\def\commby#1{\def\@commby{(Communicated by #1)}} -%<amsart>\let\@commby=\@empty -% \end{macrocode} -% -% We handle translator names like author names, just in case there is -% more than one translator. [mjd,1994/10/19] -% \begin{macrocode} -\def\translname{Translated by} -\def\translator#1{% - \ifx\@empty\@translators \def\@translators{#1}% - \else\g@addto@macro\@translators{\and#1}\fi} -\let\@translators=\@empty -% \end{macrocode} -% -% \begin{macrocode} -%<*amsart|amsproc> -\def\@settranslators{\par\begingroup - \addvspace{6\p@\@plus9\p@}% - \hbox to\columnwidth{\hss\normalfont\normalsize - \translname{ }% - \andify\@translators \uppercasenonmath\@translators - \@translators} - \endgroup -} -%</amsart|amsproc> -% \end{macrocode} -% -% The general function to convert a list of items in the form -%\begin{verbatim} -% A\and B\and C\and D -%\end{verbatim} -% to the form `A, B, C, and D' is \cs{xandlist}: -%\begin{verbatim} -% \xandlist{, }{ and }{, and }{A\and B\and C\and D} -%\end{verbatim} -% This is a completely expandable macro, with the return value being -% the converted list. There is also a `no-execute' version whose -% fourth argument should be a macro; the text to be converted will be -% taken from that macro and after conversion will be put back as the -% macro's new replacement text. -%\begin{verbatim} -% \nxandlist{, }{ and }{, and }\result -%\end{verbatim} -% I don't think I want to explain this except by recommending that -% you watch it in operation with \cs{tracingmacros} if you're -% interested. [mjd,1994/10/19] -% \begin{macrocode} -\newcommand{\xandlist}[4]{\@andlista{{#1}{#2}{#3}}#4\and\and} -\def\@andlista#1#2\and#3\and{\@andlistc{#2}\@ifnotempty{#3}{% - \@andlistb#1{#3}}} -\def\@andlistb#1#2#3#4#5\and{% - \@ifempty{#5}{% - \@andlistc{#2#4}% - }{% - \@andlistc{#1#4}\@andlistb{#1}{#3}{#3}{#5}% - }} -\let\@andlistc\@iden -\newcommand{\nxandlist}[4]{% - \def\@andlistc##1{\toks@\@xp{\the\toks@##1}}% - \toks@{\toks@\@emptytoks \@andlista{{#1}{#2}{#3}}}% - \the\@xp\toks@#4\and\and - \edef#4{\the\toks@}% - \let\@andlistc\@iden} -% \end{macrocode} -% -% \begin{macro}{andify} -% -% The \cs{andify} function is provided as a convenient abbreviation -% for the most common case. See also \cs{author@andify} (for -% \cls{amsart} and \cls{amsproc} only), which gives better results -% in cases with a large number of authors. Provide a substitutable -% text string to simplify language-specific modifications. -% \begin{macrocode} -\def\@@and{and} -\newcommand{\andify}{% - \nxandlist{\unskip, }{\unskip{} \@@and~}{\unskip, \@@and~}} -% \end{macrocode} -% Override the funny default definition of \cn{and} from \latex/. -% This is not actually used by AMS classes, however. -% \begin{macrocode} -\def\and{\unskip{ }\@@and{ }\ignorespaces} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{maketitle} -% -% Set up the style of an article opening page. For books, see below. -% For articles, we must add the copyright info footnote. -% \begin{macrocode} -%<*amsart|amsproc> -\def\maketitle{\par - \@topnum\z@ % this prevents figures from falling at the top of page 1 - \@setcopyright - \thispagestyle{firstpage}% this sets first page specifications -% \end{macrocode} -% Do some setup for the running heads here. If there are no author names, -% we set the left-hand running head to the value of the right-hand running -% head. -% \begin{macrocode} - \uppercasenonmath\shorttitle - \ifx\@empty\shortauthors \let\shortauthors\shorttitle - \else \andify\shortauthors - \fi -% \end{macrocode} -% The following hook is used to activate the writing of author and -% title information to an `issue table of contents' when multiple -% articles are being processed for a journal issue or a proceedings -% volume. -% \begin{macrocode} - \@maketitle@hook - \begingroup - \@maketitle - \toks@\@xp{\shortauthors}\@temptokena\@xp{\shorttitle}% - \toks4{\def\\{ \ignorespaces}}% defend against questionable usage - \edef\@tempa{% - \@nx\markboth{\the\toks4 - \@nx\MakeUppercase{\the\toks@}}{\the\@temptokena}}% - \@tempa - \endgroup - \c@footnote\z@ - \@cleartopmattertags -} -\def\@cleartopmattertags{% - \def\do##1{\let##1\relax}% - \do\maketitle \do\@maketitle \do\title \do\@xtitle \do\@title - \do\author \do\@xauthor \do\address \do\@xaddress - \do\contrib \do\contribs \do\xcontribs \do\toccontribs - \do\email \do\@xemail \do\curraddr \do\@xcurraddr -%<amsart> \do\commby \do\@commby - \do\dedicatory \do\@dedicatory \do\thanks \do\thankses - \do\keywords \do\@keywords \do\subjclass \do\@subjclass -} -%</amsart|amsproc> -% \end{macrocode} -% \end{macro} -% -% The hook \cs{@maketitle@hook} is placed into \cn{maketitle} rather -% than \cs{@maketitle} because the latter tends to get redefined by -% derived classes using this one as a base. The initial motivation -% for this hook is to extract title and author information to an -% external file, so we can't do it with \cs{AtBeginDocument}: -% \cn{title} and \cn{author} commands might occur between -% \verb'\begin{document}' and \cn{maketitle}. -% -% \begin{macrocode} -%<*amsart|amsproc> -\def\@maketitle@hook{\global\let\@maketitle@hook\@empty} -%</amsart|amsproc> -% \end{macrocode} -% -% Set up the style of an article opening page. -% \begin{macrocode} -%<*amsart|amsproc> -\def\@maketitle{% -% \end{macrocode} -% Set font to normal, just in case. -% \begin{macrocode} - \normalfont\normalsize -% \end{macrocode} -% Special footnotes are put here to ensure that they come first at -% the bottom of the page. -% \begin{macrocode} - \@adminfootnotes -% \end{macrocode} -% If |\pagestyle{myheadings}| was specified, \cs{@mkboth} will be a no-op. -% \begin{macrocode} - \@mkboth{\@nx\shortauthors}{\@nx\shorttitle}% -%<amsproc> \global\topskip8pc\relax % 10pc to base of first title line -%<amsart> \global\topskip42\p@\relax % 5.5pc " " " " " - \@settitle - \ifx\@empty\authors \else \@setauthors \fi -% \end{macrocode} -% Likewise with \cs{@dedicatory} and \cs{@date}. -% \begin{macrocode} - \ifx\@empty\@dedicatory - \else -%<amsproc> \baselineskip26\p@ -%<amsart> \baselineskip18\p@ - \vtop{\centering{\footnotesize\itshape\@dedicatory\@@par}% - \global\dimen@i\prevdepth}\prevdepth\dimen@i - \fi - \@setabstract -% \end{macrocode} -% Space before the main text should be 32 + 14 base-to-base; we -% accomplish this by doing a vskip of that amount with \cs{baselineskip} -% subtracted. -% \begin{macrocode} - \normalsize - \if@titlepage - \newpage - \else - \dimen@34\p@ \advance\dimen@-\baselineskip - \vskip\dimen@\relax - \fi -} % end \@maketitle -% \end{macrocode} -% -% Segregate the definitions of administrative footnotes to permit -% easier customization, especially for translation journals. -% \begin{macrocode} -\def\@adminfootnotes{% - \let\@makefnmark\relax \let\@thefnmark\relax -%<amsart> \ifx\@empty\@date\else \@footnotetext{\@setdate}\fi - \ifx\@empty\@subjclass\else \@footnotetext{\@setsubjclass}\fi - \ifx\@empty\@keywords\else \@footnotetext{\@setkeywords}\fi -% \end{macrocode} -% In order to make multiple thanks footnotes work inside a single -% \cs{@footnotetext} argument we need to make the first \cn{par} be -% ignored. Cf.~\cs{@setthanks}. -% \begin{macrocode} - \ifx\@empty\thankses\else \@footnotetext{% - \def\par{\let\par\@par}\@setthanks}% - \fi -} -%</amsart|amsproc> -% \end{macrocode} -% -% \subsection{Journal/series logo for articles} -% -% \cs{publname} either will be defined by a parent class that is calling -% \cls{amsart} or \cls{amsproc} as a base class, or will be absent, in -% which case this can be used as a signal to omit the \cs{@serieslogo}. -% A typical value for \cs{publname} would be -%\begin{verbatim} -% \def\publname{JOURNAL OF THE\newline -% AMERICAN MATHEMATICAL SOCIETY} -%\end{verbatim} -% -% Initialize \cs{publname} and \cs{@serieslogo} to no-op if -% \cs{publname} is not already defined. -% \begin{macrocode} -%<*amsart|amsproc> -\AtBeginDocument{% - \@ifundefined{publname}{% - \let\publname\@empty - \let\@serieslogo\@empty - }{% -%<amsart> \def\@serieslogo{\article@logo}% -%<amsproc> \def\@serieslogo{\procart@logo}% - }% -} -%</amsart|amsproc> -% \end{macrocode} -% -% The \cs{number} prefix on current issue is to work around -% inconsistencies in the form of issue numbers as passed in from -% system level. Sometimes they will get passed in with a leading -% zero, which we don't want to print if it happens to occur. -% The |0| prevents an error if \cs{currentissue} happens to be empty. -% \begin{macrocode} -%<*amsart> -\AtBeginDocument{% - \@ifundefined{volinfo}{% - \def\volinfo{% - Volume \currentvolume, Number \number0\currentissue -% \end{macrocode} -% Month/year is not included initially when a journal article is -% posted on the WWW prior to print publication. -% \begin{macrocode} - \if\@printyear , \currentmonth\ \currentyear\fi - }% - }{}% -} -\def\@printyear{TF}% boolean false -%</amsart> -% \end{macrocode} -% -% \begin{macrocode} -%<*amsproc> -\AtBeginDocument{% - \@ifundefined{volinfo}{\let\volinfo\@empty}{} -} -%</amsproc> -% \end{macrocode} -% -% Default values for information such as volume, year, and so on are -% provided as follows. -% \begin{macrocode} -%<*amsart|amsproc> -\def\issueinfo#1#2#3#4{\def\currentvolume{#1}\def\currentissue{#2}% - \def\currentmonth{#3}\def\currentyear{#4}} -\issueinfo{00}% volume number - {0}% % issue number - {Xxxx}% % month - {XXXX}% % year -%</amsart|amsproc> -% \end{macrocode} -% -% Copyright year may be different from issue year. Allow it to be -% specified separately. It is probably more natural anyway, from the -% user's perspective, to give the copyright year in the same command -% when giving the name of the copyright holder. -% \begin{macrocode} -\newcommand{\copyrightinfo}[2]{% - \def\copyrightyear{#1}% - \@ifnotempty{#2}{\def\copyrightholder{#2}}% -} -\copyrightinfo{0000}{(copyright holder)} -% \end{macrocode} -% -% Provide page span information. If negative number is given, convert -% to roman numeral form. -% \begin{macrocode} -%<*amsart|amsproc> -\def\pagespan#1#2{\setcounter{page}{#1}% - \ifnum\c@page<\z@ \pagenumbering{roman}\setcounter{page}{-#1}\fi - \def\start@page{#1}\def\end@page{#2}} -\pagespan{000}{000} -%</amsart|amsproc> -% \end{macrocode} -% -% Formatting for journal page numbers. [bnb, 1996/09/11] -% \begin{macrocode} -%<*amsart> -\AtBeginDocument{% - \@ifundefined{pageinfo}{% - \def\pageinfo{% - \ifnum\start@page=\z@ - Pages 000--000 - \else - \ifx\start@page\end@page - Page \start@page - \else - Pages \start@page--\end@page - \fi - \fi}% - }{}% -} -%</amsart> -% \end{macrocode} -% -% Publisher Item Identifier (we started using them in journal logos -% as of January 1997). -% \begin{macrocode} -%<amsart>\@ifundefined{ISSN}{\def\ISSN{0000-0000}}{} -%<amsart>\newcommand\PII[1]{\def\@PII{#1}} -%<amsart>\PII{S \ISSN(XX)0000-0} -% \end{macrocode} -% -% \subsection{Copyright block} -% -% Doing the copyright info on the first page is a little tricky. We -% want it to come at the bottom, after any footnotes and floating -% inserts, but before the page number. If we simply put it into -% \cs{@oddfoot} (in \cs{ps@plain}) its height will not be subtracted -% from the height of the text and then the page number will be lower -% than we want. So we do it as an insert. -% -% Through version 1.2, this code was included only for \pkg{amsart} -% and \pkg{amsproc}; the formatting of some book series requires an -% insert at the bottom of the text block, so this code has been -% extended to all AMS document classes. [bnb, 1999/07/14] -% \begin{macrocode} -\newinsert\copyins -% \end{macrocode} -% We set the skip register associated with this insert to the -% \emph{base-to-base} distance from the bottom of the page contents -% to the base of the first line in the copyright info. See the -% definition of \cs{@setcopyright}. -% \begin{macrocode} -\skip\copyins=1.5pc -\count\copyins=1000 % magnification factor, 1000 = 100% -\dimen\copyins=.5\textheight % maximum allowed per page -% \end{macrocode} -% \cn{copyins} is ignored if a float is input on the first page; -% adding it to \cs{@reinserts} will make the output routine behave. -% [bnb; 2004/06/09; B-365] -% \begin{macrocode} -\g@addto@macro\@reinserts{% - \ifvoid\copyins\else\insert\copyins{\unvbox\copyins}\fi -} -% \end{macrocode} -% Put the contents into a \tex/ insert. This information is omitted -% unless \cs{@serieslogo} is non-null. In other words it will -% normally not print except when an AMS publication-specific document -% class such as \cls{tran-l} is used. -% And even if the series logo is printed, omit the copyright line -% if requested by |\coprightinfo{}{}|. [bnb, 1996/10/17] -% \begin{macrocode} -\def\@copyinsfontsize{\fontsize{6}{7\p@}\normalfont\upshape} -\newif\if@extracrline \@extracrlinefalse -\let\@extracrline\@empty -\relax -\def\@setcopyright{% - \ifx\@empty\@serieslogo - \else\ifx\@empty\copyrightyear - \else - \insert\copyins{\hsize\textwidth - \parfillskip\z@\relax - \leftskip\z@\@plus.9\textwidth\relax \rightskip\z@\relax - \@copyinsfontsize -% \end{macrocode} -% The spacing between the preceding text and the copyright info is -% done with a strut of height |\skip\copyins|. (Note that -% \cs{lineskip} and \cs{baselineskip} are 0 in the \latex/ output -% routine.) The negative vskip gives an effective distance of 0 from -% the top of the box to the base of the first line (assuming -% |\skip\copyins| is greater than the height of that line). Then the -% apparent total height of the box will work well with \tex/'s -% calculations involving |\skip\copyins| for how much room to leave -% for this object. An extra 6pt is allowed when an additional line -% is present; this adjustment was found adequate in some borderline -% cases where tight pages reset with the additional line had text -% lines moved to the next page, causing the paper length to expand -% by a page. [bnb, 2004/05/07-06/24] -% \begin{macrocode} - \everypar{}% - \vskip-\skip\copyins - \if@extracrline - \vskip-6pt - \fi - \nointerlineskip - \leavevmode\hfill\vrule\@width\z@\@height\skip\copyins - \copyright\copyrightyear\ \copyrightholder\ignorespaces - \if@extracrline \@extracrline \fi - \par -% \end{macrocode} -% This kern of 0pt forces the depth of the last line (if any) to be -% added to the height of the box. -% \begin{macrocode} - \kern\z@}% - \fi\fi -} -% \end{macrocode} -% -% When \cs{@combinefloats} is called, the box \cs{@outputbox} already -% contains the main text of the page and any footnotes. Then \latex/ -% adds top and bottom figures. We want to add our copyright info at -% the very bottom, but still inside of the vbox. -% \begin{macrocode} -\def\@combinefloats{% - \ifx \@toplist\@empty \else \@cflt \fi - \ifx \@botlist\@empty \else \@cflb \fi - \ifvoid\copyins \else \@cflci \fi -} -% \end{macrocode} -% \subsubsection{combine-floats-copyright-insert} -% -% In the twocolumn/firstcolumn case, postpone adding the drop folio. -% Put an empty box of the same height at the bottom of the left-hand -% column to make the columns balance. Allow a smidge of stretch in -% case the first page of a chapter has no internal stretch, so that -% the drop folio will be flush to the bottom of the text block; -% don't do this for a twocolumn page, to avoid an uneven bottom. -% \begin{macrocode} -\def\@cflci{% - \setbox\@outputbox\vbox{% - \unvbox\@outputbox - \vskip\skip\copyins - \if@twocolumn \else \vskip\z@ plus\p@ \fi - \hbox to\columnwidth{% - \hss\vbox to\z@{\vss -% \end{macrocode} -% In two-column layout, put an empty box in the first column -% instead of the drop folio. -% \begin{macrocode} - \if@twocolumn - \if@firstcolumn \else \unvbox\copyins \fi - \else - \unvbox\copyins - \fi - }}}% -% \end{macrocode} -% Now redo the insert to make sure we get the right amount of space -% reserved for it in the second column. -% \begin{macrocode} - \if@twocolumn \if@firstcolumn - \insert\copyins{\unvbox\copyins}% - \fi\fi -% \end{macrocode} -% Reset the \cs{copyins} flag so that a subsequent insert -% (e.g.\ \cs{@dropfolio} in some book series) will work. -% \begin{macrocode} - \global\count\copyins=999 \relax -} -% \end{macrocode} -% [End of code to support inserts at end of text block.] -% -% For journals only, provide a switch that indicates the author has -% agreed to revert copyright to the public domain; this results in -% an addition to the copyright block on the article. -% \begin{macrocode} -%<*amsart> -\newif\if@revertcopyright \@revertcopyrightfalse -\newcommand{\revertcopyright}{% - \global\@revertcopyrighttrue - \global\@extracrlinetrue} -% \end{macrocode} -% Add notation regarding reversion of copyright to public domain if -% author has agreed to it. Permit this to be set in a different -% size than the copyright line (required for some author packages). -% \begin{macrocode} -\def\@revertcrfontsize{\fontsize{6}{7\p@}\normalfont\upshape} -\def\@extracrline{% - \if@revertcopyright - \unskip\\ - \@revertcrfontsize - Reverts to public domain 28 years from publication - \fi -} -%</amsart> -% \end{macrocode} -% -% \subsection{Other top matter info} -% -% Some name setup. -% \begin{macrocode} -\newcommand{\abstractname}{Abstract} -\newcommand{\keywordsname}{Key words and phrases} -% \end{macrocode} -% For now, support just the two most recent versions; earlier versions -% were: -% \begin{itemize} -% \item \textup{1980} Mathematics Subject Classification -% \item \textup{1980} Mathematics Subject Classification -% \textup{(1985} Revision\textup{)} -% \end{itemize} -% Default to the 1991 edition, as that's what is in production at the -% time this change is made. [bnb, 1999/04/30] -% \begin{macrocode} -\newcommand{\subjclassname}{% - \textup{1991} Mathematics Subject Classification} -\@xp\let\csname subjclassname@1991\endcsname \subjclassname -\@namedef{subjclassname@2000}{% - \textup{2000} Mathematics Subject Classification} -% \end{macrocode} -% For the date we have a special little problem: We only want to add -% the `Received by the editors' text for publication-specific -% document classes such as \cls{tran-l}. -% \begin{macrocode} -%<amsbook>\def\@tempb{amsbook} -%<amsproc>\def\@tempb{amsproc} -%<amsart>\def\@tempb{amsart} -\ifx\@classname\@tempb - \newcommand{\datename}{\textit{Date}:} -\else - \newcommand{\datename}{Received by the editors} -\fi -% \end{macrocode} -% -% \begin{macrocode} -%<*amsart|amsproc> -\def\@settitle{\begin{center}% -%<amsart> \baselineskip14\p@\relax -%<amsproc> \Large - \bfseries -%<amsart>\uppercasenonmath\@title - \@title - \end{center}% -} -%</amsart|amsproc> -% \end{macrocode} -% -% For multiple authors we need to combine the author names into a -% list of the form Author One, Author Two, \dots, and Author Last. -% Change line breaking penalties to avoid a line break in the middle of -% an author name if there are a lot of authors. This should probably -% better be done by changing spaces within author names to -% |\nolinebreak[3]\space|, but that would take more work. -% [mjd,2000/12/27] -% \begin{macrocode} -%<*amsart|amsproc> -\def\author@andify{% - \nxandlist {\unskip ,\penalty-1 \space\ignorespaces}% - {\unskip {} \@@and~}% - {\unskip ,\penalty-2 \space \@@and~}% -} -% \end{macrocode} -% -% \begin{macrocode} -\def\@setauthors{% - \begingroup - \def\thanks{\protect\thanks@warning}% - \trivlist -%<amsart> \centering\footnotesize \@topsep30\p@\relax -%<amsart> \advance\@topsep by -\baselineskip -%<amsproc> \centering \fontsize{11}{13\p@}\selectfont\@topsep13\p@\relax - \item\relax - \author@andify\authors -% \end{macrocode} -% Make dbl-backslash robust to prevent problems if/when -% \cs{MakeTextUppercase} expansion is applied. -% \begin{macrocode} - \def\\{\protect\linebreak}% -%<amsart> \MakeUppercase{\authors}% -%<amsproc> \authors - \ifx\@empty\contribs - \else - ,\penalty-3 \space \@setcontribs - \@closetoccontribs - \fi - \endtrivlist - \endgroup -} -\def\@closetoccontribs{} -\def\@setcontribs{% - \@xcontribs -%<amsart> \MakeUppercase{\xcontribs}% -%<amsproc> \xcontribs -} -\def\@setdate{\datename\ \@date\@addpunct.} -\def\@setsubjclass{% - {\itshape\subjclassname.}\enspace\@subjclass\@addpunct.} -\def\@setkeywords{% - {\itshape \keywordsname.}\enspace \@keywords\@addpunct.} -%</amsart|amsproc> -% \end{macrocode} -% -% The following definitions suffice for all the AMS document classes. -% \begin{macrocode} -\def\@setthanks{\def\thanks##1{\par##1\@addpunct.}\thankses} -% \end{macrocode} -% -% `Abstract' can be changed to, say, `R\'esum\'e' (French) by -% redefining \cn{abstractname}. This and other control sequence names -% (\cn{refname}, \cn{contentsname}, \cn{appendixname}, and so on) are -% compatible with the \pkg{babel} package (the AMS sometimes -% publishes articles in languages other than English.) -% -% In AMS document classes, the abstract should be placed before -% \cn{maketitle} (otherwise the desired ordering of frontmatter -% elements cannot be ensured in all cases). -% \begin{macrocode} -\newbox\abstractbox -% \end{macrocode} -% We start by checking whether \cn{maketitle} has already been used -% (in which case it was reset to \cs{relax}); if so, we give a -% warning that the abstract should be placed before \cn{maketitle}. -% \begin{macrocode} -\newenvironment{abstract}{% - \ifx\maketitle\relax - \ClassWarning{\@classname}{Abstract should precede - \protect\maketitle\space in AMS document classes; reported}% - \fi - \global\setbox\abstractbox=\vtop \bgroup - \normalfont\Small - \list{}{\labelwidth\z@ - \leftmargin3pc \rightmargin\leftmargin - \listparindent\normalparindent \itemindent\z@ - \parsep\z@ \@plus\p@ -% \end{macrocode} -% In order to get equation numbers indented with the rest of the -% abstract, we have to do this: -% \begin{macrocode} - \let\fullwidthdisplay\relax - }% - \item[\hskip\labelsep\scshape\abstractname.]% -}{% - \endlist\egroup -% \end{macrocode} -% If the abstract was supposed to be typeset earlier, then -% \cs{@setabstract} is now equal to \cs{relax}, and we had better -% drop the contents of the abstract box onto the page immediately, to -% salvage the situation as best we can. -% \begin{macrocode} - \ifx\@setabstract\relax \@setabstracta \fi -} -% \end{macrocode} -% -% Because the abstract might be postponed until the end of an -% article, we cannot simply use the fact of a preceding -% \cn{maketitle} to tell whether \cs{endabstract} should immediately -% put the abstract box contents on the page. So we use an auxiliary -% function that will be reset to no-op once we have passed the point -% where the abstract should normally be typeset. -% \begin{macrocode} -\def\@setabstract{\@setabstracta \global\let\@setabstract\relax} -\def\@setabstracta{% - \ifvoid\abstractbox - \else - \skip@20\p@ \advance\skip@-\lastskip - \advance\skip@-\baselineskip \vskip\skip@ - \box\abstractbox - \prevdepth\z@ % because \abstractbox is a vtop - \fi -} -% \end{macrocode} -% -% Title page environment does nothing much; information and -% formatting to be provided by the user. -% \begin{macrocode} -\def\titlepage{% -%<amsbook> \cleardoublepage -%<amsart|amsproc> \clearpage - \thispagestyle{empty}\setcounter{page}{0}} -\def\endtitlepage{\newpage} -% \end{macrocode} -% -% \subsection{Macros for list labels} -% -% Through version 1.2, first-level enumerated item labels were formatted -% with a following period, which is not AMS style. Effective with -% version 2.0 these labels are formatted with parentheses. Anyone -% requiring the period style will have to redefine \cs{labelenumi}. -% \begin{macrocode} -\def\labelenumi{(\theenumi)} -\def\theenumi{\@arabic\c@enumi} -\def\labelenumii{(\theenumii)} -\def\theenumii{\@alph\c@enumii} -\def\p@enumii{\theenumi} -\def\labelenumiii{(\theenumiii)} -\def\theenumiii{\@roman\c@enumiii} -\def\p@enumiii{\theenumi(\theenumii)} -\def\labelenumiv{(\theenumiv)} -\def\theenumiv{\@Alph\c@enumiv} -\def\p@enumiv{\p@enumiii\theenumiii} -% \end{macrocode} -% -% \begin{macrocode} -\def\labelitemi{$\m@th\bullet$} -\def\labelitemii{\bfseries --}% \upshape already done by \itemize -\def\labelitemiii{$\m@th\ast$} -\def\labelitemiv{$\m@th\cdot$} -% \end{macrocode} -% -% \subsection{Verse and quotation environments} -% \begin{macrocode} -\newenvironment{verse}{\let\\\@centercr - \list{}{\itemsep\z@ \itemindent -1.5em\listparindent\itemindent - \rightmargin\leftmargin \advance\leftmargin 1.5em}\item[]% -}{% - \endlist -} -\let\endverse=\endlist % for efficiency -% \end{macrocode} -% The left/right margins of the quotation environment are supposed to -% be the same as for the abstract environment. -% \begin{macrocode} -\newenvironment{quotation}{\list{}{% - \leftmargin3pc \listparindent\normalparindent - \itemindent\z@ - \rightmargin\leftmargin \parsep\z@ \@plus\p@}% - \item[]% -}{% - \endlist -} -\let\endquotation=\endlist % for efficiency -\newenvironment{quote}{% - \list{}{\rightmargin\leftmargin}\item[]% -}{% - \endlist -} -\let\endquote=\endlist % for efficiency -% \end{macrocode} -% -% \subsection{List environments} -% Changed definition of \cs{trivlist}, \env{enumerate}, and -% \env{itemize} in order to have \cn{makelabel} apply \cn{upshape}. -% \begin{macrocode} -\def\trivlist{\parsep\parskip\@nmbrlistfalse - \@trivlist \labelwidth\z@ \leftmargin\z@ - \itemindent\z@ - \let\@itemlabel\@empty - \def\makelabel##1{\upshape##1}} -% \end{macrocode} -% -% \begin{macrocode} -\renewenvironment{enumerate}{% - \ifnum \@enumdepth >3 \@toodeep\else - \advance\@enumdepth \@ne - \edef\@enumctr{enum\romannumeral\the\@enumdepth}\list - {\csname label\@enumctr\endcsname}{\usecounter - {\@enumctr}\def\makelabel##1{\hss\llap{\upshape##1}}}\fi -}{% - \endlist -} -\let\endenumerate=\endlist % for efficiency -% \end{macrocode} -% -% \begin{macrocode} -\renewenvironment{itemize}{% - \ifnum\@itemdepth>3 \@toodeep - \else \advance\@itemdepth\@ne - \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}% - \list{\csname\@itemitem\endcsname}% - {\def\makelabel##1{\hss\llap{\upshape##1}}}% - \fi -}{% - \endlist -} -\let\enditemize=\endlist % for efficiency -% \end{macrocode} -% -% \begin{macrocode} -\newcommand{\descriptionlabel}[1]{\hspace\labelsep \upshape\bfseries #1:} -\newenvironment{description}{\list{}{% -% \end{macrocode} -% Adjust the indent of the first line to the desired value: -% \begin{macrocode} - \advance\leftmargini6\p@ \itemindent-12\p@ - \labelwidth\z@ \let\makelabel\descriptionlabel}% -}{ - \endlist -} -\let\enddescription=\endlist % for efficiency -% \end{macrocode} -% -% \begin{macro}{\upn} -% The command \cn{upn} can be used to force upright font for -% punctuation or digits in italic text. For example -%\begin{verbatim} -% ... as numbered by \upn{``A''} or \upn{``1''} hereafter\upn{)} -%\end{verbatim} -% \begin{macrocode} -\let\upn=\textup -% \end{macrocode} -% \end{macro} -% -% Since these margin settings are dependent on the fonts used, we -% postpone them until begin-document. (This means that we cannot use -% the values directly for calculations before begin-document.) Allow -% for a reasonable maximum value; 13 = xiii = m should be adequate. -% \begin{macrocode} -\AtBeginDocument{% - \labelsep=5pt\relax - \setcounter{enumi}{13}\setcounter{enumii}{13}% - \setcounter{enumiii}{13}\setcounter{enumiv}{13}% - \settowidth\leftmargini{\labelenumi\hskip\labelsep}% - \advance\leftmargini by \normalparindent - \settowidth\leftmarginii{\labelenumii\hskip\labelsep}% - \settowidth\leftmarginiii{\labelenumiii\hskip\labelsep}% - \settowidth\leftmarginiv{\labelenumiv\hskip\labelsep}% - \setcounter{enumi}{0}\setcounter{enumii}{0}% - \setcounter{enumiii}{0}\setcounter{enumiv}{0}% - \leftmarginv=10pt \leftmarginvi=\leftmarginv - \leftmargin=\leftmargini - \labelwidth=\leftmargini \advance\labelwidth-\labelsep - \@listi} -% \end{macrocode} -% -% In some contexts the space above/below lists needs to be -% suppressed. So we put it into a variable \cs{listisep}. -% \begin{macrocode} -\newskip\listisep -\listisep\smallskipamount -\def\@listI{\leftmargin\leftmargini \parsep\z@skip - \topsep\listisep \itemsep\z@skip - \listparindent\normalparindent} -\let\@listi\@listI -% \end{macrocode} -% -% Is it necessary to reset \cs{parsep}, \cs{partopsep}, \cs{itemsep} -% to their default values (0) in each of the subordinate list -% setup functions? I don't believe so, but I leave the settings in -% the listii function just in case some unusual nesting of -% environments might cause trouble. [mjd,1994/09/22] -% \begin{macrocode} -\def\@listii{\leftmargin\leftmarginii - \labelwidth\leftmarginii \advance\labelwidth-\labelsep - \topsep\z@skip \parsep\z@skip \partopsep\z@skip \itemsep\z@skip} -\def\@listiii{\leftmargin\leftmarginiii - \labelwidth\leftmarginiii \advance\labelwidth-\labelsep} -\def\@listiv{\leftmargin\leftmarginiv - \labelwidth\leftmarginiv \advance\labelwidth-\labelsep} -\def\@listv{\leftmargin\leftmarginv - \labelwidth\leftmarginv \advance\labelwidth-\labelsep} -\def\@listvi{\leftmargin\leftmarginvi - \labelwidth\leftmarginvi \advance\labelwidth-\labelsep} -% \end{macrocode} -% -% \subsection{Fleqn option} -% -% \begin{macrocode} -\@ifclasswith{\@classname}{fleqn}{% - \let\@tempa\@iden - \AtBeginDocument{\mathindent\leftmargini}% -}{\let\@tempa\@gobble}% -\@ifpackageloaded{amsmath}{\let\@tempa\@gobble}{% - \@ifpackageloaded{amstex}{\let\@tempa\@gobble}{}% -} -\@tempa{% - \def\[{\relax - \ifmmode\@badmath - \else - \begin{trivlist}% - \@beginparpenalty\predisplaypenalty - \@endparpenalty\postdisplaypenalty - \item[]\leavevmode - \hbox to\linewidth\bgroup$\displaystyle -% \end{macrocode} -% Note that the \cs{m@th} should go at the end in \cn{]} just in -% case an embedded small math formula inside \cn{text} occurs in -% the display. -% -% Why the extra bgroup here? I think it's not needed. -% [mjd,3-Feb-1994] -% \begin{macrocode} - \hskip\mathindent\bgroup - \fi}% - \def\]{\relax - \ifmmode - \egroup \m@th$\hfil \egroup - \end{trivlist}% - \else \@badmath - \fi}% - \renewenvironment{equation}{% - \@beginparpenalty\predisplaypenalty - \@endparpenalty\postdisplaypenalty - \refstepcounter{equation}% - \@topsep\abovedisplayskip \trivlist - \item[]\leavevmode - \hbox to\linewidth\bgroup\hskip\mathindent$\displaystyle - }{% - \m@th$\hfil \displaywidth\linewidth \hbox{\@eqnnum}\egroup - \endtrivlist - }% - \renewenvironment{eqnarray}{% - \stepcounter{equation}\let\@currentlabel\theequation - \global\@eqnswtrue \global\@eqcnt\z@ \tabskip\mathindent - \let\\=\@eqncr \abovedisplayskip\topsep - \ifvmode \advance\abovedisplayskip\partopsep \fi - \belowdisplayskip\abovedisplayskip - \belowdisplayshortskip\abovedisplayskip - \abovedisplayshortskip\abovedisplayskip - $$\everycr{}\halign to\linewidth\bgroup - \hskip\@centering - $\displaystyle\tabskip\z@skip####\m@th$&% - \@eqnsel \global\@eqcnt\@ne - \hfil${}####{}\m@th$\hfil&% - \global\@eqcnt\tw@ - $\displaystyle ####\m@th$\hfil\tabskip\@centering&% - \global\@eqcnt\thr@@ - \hbox to \z@\bgroup\hss####\egroup\tabskip\z@skip\cr - }{% - \@@eqncr \egroup \global\advance\c@equation\m@ne$$% - \global\@ignoretrue - }% - \newdimen\mathindent - \mathindent\leftmargini -} -% \end{macrocode} -% -% \subsection{Redefined internal sectioning commands} -% -% In amsart.sty \cs{@startsection}, \cs{@sect}, -% and a couple of other things are redefined to fix a few hard-coded -% things that would interfere with the desired style. The most -% noteworthy difference is that all section headings will go into the -% table of contents (governed by secnumdepth as usual), EVEN WHEN THE -% |*| FORM IS USED. The only section heading not listed in the table of -% contents is the heading for the toc itself. -% -% A second major departure from standard \latex/ is that when a -% short form of a section title is given, it is used only for the -% running heads; the table of contents still gets the full version of -% the title. This is correct for AMS editorial practice. However if -% one wants to get a line break into the table of contents it means -% that the standard \latex/ method cannot be used. See the -% \cn{except} and \cn{for} commands. -% \begin{macrocode} -\def\@startsection#1#2#3#4#5#6{% -% \end{macrocode} -% Section titles, if they are run-in with the following text, are -% stored in a box instead of being typeset right away. They will be -% typeset by \cs{everypar}, but if one section heading follows -% right after another, this won't happen. So by doing -% \cs{leavevmode} we force this to happen. (\cs{if@noskipsec} -% is true if the previous section title has not yet been typeset.) -% \begin{macrocode} - \if@noskipsec \leavevmode \fi - \par \@tempskipa #4\relax - \@afterindenttrue - \ifdim \@tempskipa <\z@ \@tempskipa -\@tempskipa \@afterindentfalse\fi - \if@nobreak \everypar{}\else - \addpenalty\@secpenalty\addvspace\@tempskipa\fi -% Don't call \@ssect in the ifstar case: - \@ifstar{\@dblarg{\@sect{#1}{\@m}{#3}{#4}{#5}{#6}}}% - {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}% -} -% \end{macrocode} -% -% We add \cn{textup} here in order to make section -% numbers always roman, even if the rest of the section head is -% italic. -% \begin{macrocode} -\def\@seccntformat#1{% - \protect\textup{\protect\@secnumfont - \csname the#1\endcsname - \protect\@secnumpunct - }% -} -% \end{macrocode} -% -% Some journals require a different font for section numbers. (As -% coded here, this option permits only a change of weight, to -% \cn{bfseries}.) The \cls{amsart} font is checked again later, -% when processing \cn{section}, and if there is no section title, -% it is made bold. -% \begin{macrocode} -%<amsbook|amsproc>\let\@secnumfont\@empty -%<amsart>\def\@secnumfont{\mdseries} -% \end{macrocode} -% -% For reference, here is the argument list for \cs{@sect}. -%\begin{verbatim} -% % #1 #2 #3 #4 #5 #6 #7 #8 -% {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}[SHORTT]{TITLE} -%\end{verbatim} -% \begin{macrocode} -\def\@sect#1#2#3#4#5#6[#7]#8{% -% \end{macrocode} -% Define \cs{@toclevel} for for \cs{@tocwrite} (to -% \cs{@tochangmeasure}). -% \begin{macrocode} - \edef\@toclevel{\ifnum#2=\@m 0\else\number#2\fi}% - \ifnum #2>\c@secnumdepth \let\@secnumber\@empty - \else \@xp\let\@xp\@secnumber\csname the#1\endcsname\fi -% \end{macrocode} -% If the value of afterskip $>0$, then this is not a run-in section -% heading, and we want to suppress final punctuation. -% \begin{macrocode} - \@tempskipa #5\relax -% \end{macrocode} -% \cs{@svsec} will be the section number plus some formatting if -% the star form was not used and if the depth of numbering extends to -% the current level. The user can change secnumdepth to control how -% many levels of sectioning will be numbered. -% \begin{macrocode} - \ifnum #2>\c@secnumdepth - \let\@svsec\@empty - \else - \refstepcounter{#1}% -% \end{macrocode} -% If the section heading is not run-in and there is no title, omit -% final punctuation and space. If it is run-in, omit extra space. -% \begin{macrocode} - \edef\@secnumpunct{% - \ifdim\@tempskipa>\z@ % not a run-in section heading - \@ifnotempty{#8}{.\@nx\enspace}% - \else - \@ifempty{#8}{.}{.\@nx\enspace}% - \fi - }% -% \end{macrocode} -% For \cls{amsart}, if a subsection has no title, make the section -% number bold; otherwise leave it alone. -% [bnb; 2004/06/08; per vwa, B-442] -% \begin{macrocode} -%<amsart> \@ifempty{#8}{% -%<amsart> \ifnum #2=\tw@ \def\@secnumfont{\bfseries}\fi}{}% -% \end{macrocode} -% If the |*|-form was not used (\arg{2} less than 1000), we add -% \cn{sectionname} or whatever as a prefix, separated by a space. -% We need the ifundefined test in order to know whether the space -% should be added or not. There must be a better way to do this -% but I haven't thought of it yet. -% \begin{macrocode} - \protected@edef\@svsec{% - \ifnum#2<\@m - \@ifundefined{#1name}{}{% - \ignorespaces\csname #1name\endcsname\space - }% - \fi - \@seccntformat{#1}% - }% - \fi - \ifdim \@tempskipa>\z@ % then this is not a run-in section heading - \begingroup #6\relax - \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty\@M #8\par}% - \endgroup -% \end{macrocode} -% -% Section headings don't set marks for the running heads in the article -% style, only in the amsbook style. Assumption: \cs{sectionmark} is -% defined to call \cs{@secnumber} as its penultimate argument. -% \begin{macrocode} -%<amsbook> \csname #1mark\endcsname{#7}% -% \end{macrocode} -% If \arg{2} (level) is greater than 1000 then we don't do a table -% of contents entry. This happens only for the section heading above -% the table of contents itself. -% \begin{macrocode} - \ifnum#2>\@m \else \@tocwrite{#1}{#8}\fi - \else -% \end{macrocode} -% Otherwise we're doing a run-in heading; it is stored as \cs{@svsechd}, -% which will be typeset by \cs{everypar} as soon as some text is -% encountered. -% \begin{macrocode} - \def\@svsechd{#6\hskip #3\@svsec -% \end{macrocode} -% To allow for the possibility that the user wants an empty section -% title, leaving just the section number, we check whether \arg{8} -% is nonempty before adding the period. -% \begin{macrocode} - \@ifnotempty{#8}{\ignorespaces#8\unskip -% \end{macrocode} -% The following test is to prevent a period being added if the -% section title ended in a question mark or other punctuation. -% \begin{macrocode} - \@addpunct.}% - \ifnum#2>\@m \else \@tocwrite{#1}{#8}\fi - }% - \fi -% \end{macrocode} -% In a previous version of \cls{amsart} \cs{@nobreaktrue} was added to -% \cs{@xsect} for some reason. Let's keep that just in case it was done to -% prevent a certain kind of bug. [mjd,17-Aug-1994] -% \begin{macrocode} - \global\@nobreaktrue -% \end{macrocode} -% \cs{@xsect} does some more stuff based on whether this is a run-in -% heading or not. -% \begin{macrocode} - \@xsect{#5}} -% \end{macrocode} -% -% Undefine \cs{@ssect} to save memory; it's not needed in \cls{amsart}. -% \begin{macrocode} -\let\@ssect\relax -% \end{macrocode} -% -% \subsection{Chapters and sections} -% Allocate counters for sectioning commands. Paragraph and subparagraph -% counters are allocated but normally not used. -% \begin{macrocode} -\newcounter{part} -%<amsbook>\newcounter{chapter} -%<amsproc|amsart>\newcounter{section} -%<amsbook>\newcounter{section}[chapter] -%<amsbook>\def\thesection{\arabic{section}} -\newcounter{subsection}[section] -\newcounter{subsubsection}[subsection] -\newcounter{paragraph}[subsubsection] -\newcounter{subparagraph}[paragraph] -% \end{macrocode} -% Set numbering style for sectioning commands. In a couple of cases -% resetting is unnecessary but we include the full list here for -% completeness. -% \begin{macrocode} -\renewcommand\thepart {\arabic{part}} -%<amsbook>\renewcommand\thechapter {\arabic{chapter}} -\renewcommand\thesection {\arabic{section}} -\renewcommand\thesubsection {\thesection.\arabic{subsection}} -\renewcommand\thesubsubsection {\thesubsection .\arabic{subsubsection}} -\renewcommand\theparagraph {\thesubsubsection.\arabic{paragraph}} -\renewcommand\thesubparagraph {\theparagraph.\arabic{subparagraph}} -% \end{macrocode} -% Depth of section numbering; if \fn{secnumdepth} were 2 instead of -% 3, \cn{subsubsection} would not be numbered. -% \begin{macrocode} -\setcounter{secnumdepth}{3} -% \end{macrocode} -% -% The arguments of \cs{@startsection} are given for reference: -%\begin{verbatim} -% % #1 #2 #3 #4 #5 #6 -% {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE} -%\end{verbatim} -% -% \begin{macrocode} -\def\partname{Part} -%<*amsart|amsproc> -\def\part{\@startsection{part}{0}% - \z@{\linespacing\@plus\linespacing}{.5\linespacing}% - {\normalfont\bfseries\raggedright}} -%</amsart|amsproc> -% \end{macrocode} -% -% Specialsection correlates to our inhouse Z-head. -% \begin{macrocode} -\def\specialsection{\@startsection{section}{1}% -%<amsart> \z@{\linespacing\@plus\linespacing}{.5\linespacing}% -%<amsproc|amsbook> \z@{2\linespacing\@plus\linespacing}{.5\linespacing}% -%<amsart> {\normalfont\centering}} -%<amsproc|amsbook> {\large\scshape\centering}} -% \end{macrocode} -% -% In the book class \cn{part} puts the part title on a separate -% page. -% \begin{macrocode} -%<*amsbook> -\def\part{\cleardoublepage \thispagestyle{empty}% - \null\vfil \markboth{}{}\secdef\@part\@spart} -% -\def\@part[#1]#2{% - \ifnum \c@secnumdepth >-2\relax \refstepcounter{part}% - \addcontentsline{toc}{part}{\partname\ \thepart. - \protect\enspace\protect\noindent#1}% - \else - \addcontentsline{toc}{part}{#1}\fi - \begingroup\centering - \ifnum \c@secnumdepth >-2\relax - {\fontsize{\@xviipt}{22}\bfseries - \partname\ \thepart} \vskip 20\p@ \fi - \fontsize{\@xxpt}{25}\bfseries - #1\vfil\vfil\endgroup \newpage\thispagestyle{empty}} - -\def\@spart#1{\addcontentsline{toc}{part}{\protect\noindent#1}% - \begingroup\centering - \fontsize{\@xxpt}{25}\bfseries - #1\vfil\vfil\endgroup \newpage\thispagestyle{empty}} -%</amsbook> -% \end{macrocode} -% -% The arguments of \cs{partrunhead} are \cs{partname}, -% \cs{thepart}, and the text of the part title. The first two were -% fully expanded during the marking process. Use of a mere -% interword space between the first two args makes it possible -% to apply \cn{ignorespaces} and \cn{unskip} as shown here -% to produce the desired results if one or the other is empty. -% \begin{macrocode} -%<*amsbook> -\def\partrunhead#1#2#3{% - \@ifnotempty{#2}{\uppercase{\ignorespaces#1 #2\unskip}\@ifnotempty{#3}{. }}% - \def\@tempa{#3}% - \ifx\@empty\@tempa\else - \begingroup \def\\{ \ignorespaces}% defend against questionable usage - \uppercasenonmath\@tempa\@tempa - \endgroup - \fi -} -\let\chapterrunhead\partrunhead -\let\sectionrunhead\partrunhead -%</amsbook> -% \end{macrocode} -% -% Section headings in the amsbook style differ from the amsart -% style in a couple of ways: The ones that aren't centered are -% indented on the left, instead of flush left; and the first -% level, \cn{section}, is not small caps but bold. -% Cf.~the definition of \cn{appendix}. -% \begin{macrocode} -\def\section{\@startsection{section}{1}% - \z@{.7\linespacing\@plus\linespacing}{.5\linespacing}% -%<amsart> {\normalfont\scshape\centering}} -%<amsbook|amsproc> {\normalfont\bfseries\centering}} -% \end{macrocode} -% -% Negative value for \arg{5} is a signal to make a run-in heading instead -% of doing a vskip after the heading. -% \begin{macrocode} -\def\subsection{\@startsection{subsection}{2}% -%<amsart> \z@{.5\linespacing\@plus.7\linespacing}{-.5em}% -%<amsbook|amsproc> \normalparindent{.5\linespacing\@plus.7\linespacing}{-.5em}% - {\normalfont\bfseries}} -% \end{macrocode} -% -% \begin{macrocode} -\def\subsubsection{\@startsection{subsubsection}{3}% -%<amsart> \z@{.5\linespacing\@plus.7\linespacing}{-.5em}% -%<amsbook|amsproc> \normalparindent\z@{-.5em}% - {\normalfont\itshape}} -% \end{macrocode} -% -% Fontdimen 2 of the current font is the ideal interword space of the -% font. Thus the following spec says that the space after the -% paragraph heading should be a normal interword space (but -% nonstretching and nonshrinking). -% \begin{macrocode} -\def\paragraph{\@startsection{paragraph}{4}% -%<amsart> \z@\z@{-\fontdimen2\font}% -%<amsbook|amsproc> \normalparindent\z@{-\fontdimen2\font}% - \normalfont} -% \end{macrocode} -% -% \begin{macrocode} -\def\subparagraph{\@startsection{subparagraph}{5}% - \z@\z@{-\fontdimen2\font}% - \normalfont} -% \end{macrocode} -% -% \begin{macrocode} -%<*amsart|amsproc> -\def\appendix{\par\c@section\z@ \c@subsection\z@ - \let\sectionname\appendixname - \def\thesection{\@Alph\c@section}} -\def\appendixname{Appendix} -%</amsart|amsproc> -% \end{macrocode} -% -% A slower, but fully expandable definition of \cs{@Roman} to avoid -% the nonexpandable \cn{uppercase} which is undesirable in certain -% circumstances. -% \begin{macrocode} -\def\@Roman#1{\@xp\@slowromancap - \romannumeral#1@}% -% -\def\@slowromancap#1{\ifx @#1% then terminate - \else -% \end{macrocode} -% Note: \cs{if} is required here, not \cs{ifx}, because -% \cs{romannumeral} returns category 12 letters! -% \begin{macrocode} - \if i#1I\else\if v#1V\else\if x#1X\else\if l#1L\else\if - c#1C\else\if m#1M\else#1\fi\fi\fi\fi\fi\fi - \@xp\@slowromancap - \fi -} -% \end{macrocode} -% -% \subsection{Book features} -% Books (monographs) comprise three distinct sections, -% \cn{frontmatter}, \cn{mainmatter}, and \cn{backmatter}. The -% \cn{frontmatter} would consist of the title page, copyright page, -% table of contents, preface, etc. The \cn{mainmatter} would -% be the body of the book. The \cn{backmatter} would include the -% appendix, bibliography, glossary, and index. -% \begin{macrocode} -%<*amsbook> -\def\frontmatter{\cleardoublepage\pagenumbering{roman}} -\def\mainmatter{\cleardoublepage\pagenumbering{arabic}} -\def\backmatter{% - \if@openright\cleardoublepage\else\clearpage\fi - \let\chaptername\relax} -%</amsbook> -% \end{macrocode} -% -% Book proceedings and monographs allow a signature to print at the -% end of a preface. -% \begin{macrocode} -%<*!amsart> -\def\aufm#1{\par\vspace*{12pt}{\flushright #1\par}} -%</!amsart> -% \end{macrocode} -% -% Monographs can have a special exercise environment. -% -% \begin{macrocode} -%<*amsbook> -\newenvironment{xcb}{% - \setcounter{enumi}{0}% - \settowidth{\leftmargini}{\labelenumi\hskip\labelsep}% - \setcounter{enumii}{4}% letter d - \settowidth{\leftmarginii}{\labelenumii\hskip\labelsep}% - \@startsection{section}% counter name; ignored because of the - % * below - {1}% sectioning level - {\z@}% indent to the left of the section title - {18\p@\@plus2\p@}% vertical space above - {1sp}% Space below of 13pt base-to-base, so none needs to be added - % here; but \z@ would cause the following text to be run-in, so we - % use 1sp instead. - {\bfseries}% The font of the subsection title - *% always unnumbered -}{% - \par -} -%</amsbook> -% \end{macrocode} -% -% \subsection{Book chapters} -% The \cn{chapter} command is provided only in the \cls{amsbook} class, -% not in \cls{amsart} or \cls{amsproc}. -% \begin{macrocode} -%<*amsbook> -\def\chapter{% - \if@openright\cleardoublepage\else\clearpage\fi - \thispagestyle{plain}\global\@topnum\z@ - \@afterindenttrue \secdef\@chapter\@schapter} -% \end{macrocode} -% \cs{@chapter} for numbered chapters. -% \begin{macrocode} -\def\@chapter[#1]#2{\refstepcounter{chapter}% - \ifnum\c@secnumdepth<\z@ \let\@secnumber\@empty - \else \let\@secnumber\thechapter \fi - \typeout{\chaptername\space\@secnumber}% - \def\@toclevel{0}% - \ifx\chaptername\appendixname \@tocwriteb\tocappendix{chapter}{#2}% - \else \@tocwriteb\tocchapter{chapter}{#2}\fi - \chaptermark{#1}% - \addtocontents{lof}{\protect\addvspace{10\p@}}% - \addtocontents{lot}{\protect\addvspace{10\p@}}% - \@makechapterhead{#2}\@afterheading} -% \end{macrocode} -% \cs{@schapter} for unnumbered chapters. -% \begin{macrocode} -\def\@schapter#1{\typeout{#1}% - \let\@secnumber\@empty - \def\@toclevel{0}% - \ifx\chaptername\appendixname \@tocwriteb\tocappendix{chapter}{#1}% - \else \@tocwriteb\tocchapter{chapter}{#1}\fi - \chaptermark{#1}% - \addtocontents{lof}{\protect\addvspace{10\p@}}% - \addtocontents{lot}{\protect\addvspace{10\p@}}% - \@makeschapterhead{#1}\@afterheading} -% \end{macrocode} -% -% \begin{macrocode} -\newcommand\chaptername{Chapter} -\newcommand\appendixname{Appendix} -% \end{macrocode} -% -% \begin{macrocode} -\def\@makechapterhead#1{\global\topskip 7.5pc\relax - \begingroup - \fontsize{\@xivpt}{18}\bfseries\centering -% \end{macrocode} -% In order to keep the chapter number ``CHAPTER III'' from -% getting in the way of the \cs{topskip} we put it inside -% the paragraph containing the main title. Then we have to -% do some laborious \cs{rlap}ing and \cs{hskip}ing to -% position it correctly. -% \begin{macrocode} - \ifnum\c@secnumdepth>\m@ne - \leavevmode \hskip-\leftskip - \rlap{\vbox to\z@{\vss - \centerline{\normalsize\mdseries - \uppercase\@xp{\chaptername}\enspace\thechapter} - \vskip 3pc}}\hskip\leftskip\fi - #1\par \endgroup - \skip@34\p@ \advance\skip@-\normalbaselineskip - \vskip\skip@ } -% \end{macrocode} -% -% \begin{macrocode} -\def\@makeschapterhead#1{\global\topskip 7.5pc\relax - \begingroup - \fontsize{\@xivpt}{18}\bfseries\centering - #1\par \endgroup - \skip@34\p@ \advance\skip@-\normalbaselineskip - \vskip\skip@ } -%</amsbook> -% \end{macrocode} -% The \cn{appendix} command, following the \latex/ book, marks the -% start of a division after \cn{mainmatter} and before -% \cn{backmatter} that consists of appendixes. -% \begin{macrocode} -%<*amsbook> -\def\appendix{\par - \c@chapter\z@ \c@section\z@ - \let\chaptername\appendixname - \def\thechapter{\@Alph\c@chapter}} -%</amsbook> -% \end{macrocode} -% -% \subsection{Table of contents macros} -% -% \cn{tableofcontents} is like \cn{chapter} or \cn{section} except -% for no number and no table of contents entry. -% -% \cs{@pnumwidth} is the maximum width for page numbers in a table of -% contents. |1.6em| allows enough room for three digits. -% \begin{macrocode} -\newcommand{\@pnumwidth}{1.6em} -% \end{macrocode} -% \cs{@tocrmarg} is \cs{@pnumwidth} plus the desired minimum -% space (|1em|) between page numbers and the preceding text. -% \begin{macrocode} -\newcommand{\@tocrmarg}{2.6em} -%<amsart>\setcounter{tocdepth}{2} -%<amsbook|amsproc>\setcounter{tocdepth}{1} -% \end{macrocode} -% -% \begin{macrocode} -\newswitch{toc} -\newswitch{lof} -\newswitch{lot} -% \end{macrocode} -% -% Since table of contents, list of figures and list of figures -% are identical in design as far as the chapter heading and other -% preliminaries go, we redefine \cs{@starttoc} to do the necessary -% work, rather than defining a new macro (which would use up another -% control sequence name). -% -% We define first the article form of \cs{@starttoc}, then the book -% form. -% -% Owing to confusion about what font to use for \cn{contentsname}, a -% symbolic name has been assigned to provide flexibility. -% \begin{macrocode} -%<*amsart|amsproc> -\newcommand\contentsnamefont{\scshape} -% \end{macrocode} -% -% \begin{macrocode} -\def\@starttoc#1#2{\begingroup - \setTrue{#1}% -% \end{macrocode} -% Remove the skip after the abstract so that we can substitute another. -% \begin{macrocode} - \par\removelastskip\vskip\z@skip -% \end{macrocode} -% The first two arguments of \cs{@startsection} here are special values -% that cause different internal branches to be taken. -%\begin{verbatim} -% Arguments: {} = name = empty -% \@M = no number should be used and no table of contents entry -% \z@ = indent amount -% 12pt + 12pt = vskip before -% 6pt = vskip after -% \centering\contentsnamefont = format -%\end{verbatim} -% \begin{macrocode} - \@startsection{}\@M\z@{\linespacing\@plus\linespacing}% - {.5\linespacing}{\centering\contentsnamefont}{#2}% -% \end{macrocode} -% If we have a list of figures or list of tables we want to put -% them in the main table of contents, but we don't want to put an -% entry there for the main table of contents itself. So we check -% to see if argument 2 is \cn{contentsname} and if it is then -% we refrain from doing \cn{addcontentsline}. -% \begin{macrocode} - \ifx\contentsname#2% - \else \addcontentsline{toc}{section}{#2}\fi - \makeatletter - \@input{\jobname.#1}% - \if@filesw - \@xp\newwrite\csname tf@#1\endcsname - \immediate\@xp\openout\csname tf@#1\endcsname \jobname.#1\relax - \fi - \global\@nobreakfalse \endgroup - \addvspace{32\p@\@plus14\p@}% - \let\tableofcontents\relax -} -%</amsart|amsproc> -% \end{macrocode} -% And here is the book form of \cs{@starttoc}. -% \begin{macrocode} -%<*amsbook> -\def\@starttoc#1#2{% - \begingroup - \setTrue{#1}% -% \end{macrocode} -% Inside this group we change \cs{secdef} so that we can call -% \cn{chapter} and only get the preliminary part of its definition -% that we need. -% \begin{macrocode} - \let\secdef\@gobbletwo \chapter -% \end{macrocode} -% If we have a list of figures or list of tables we want to put -% them in the main table of contents, but we don't want to put an -% entry there for the main table of contents itself. So we check -% to see if argument 2 is \cn{contentsname} and if it is then -% we refrain from doing \cn{addcontentsline}. -% \begin{macrocode} - \let\@secnumber\@empty % for \@tocwrite and \chaptermark - \ifx\contentsname#2% - \else \@tocwrite{chapter}{#2}\fi -% \end{macrocode} -% Now we do the equivalent of \cs{@schapter}. Expand \arg{2} so that -% it will be easy to apply uppercasing to it. (For \cs{@starttoc} we -% assume that \arg{2} is always a control such as \cn{contentsname}.) -% \begin{macrocode} - \typeout{#2}\@xp\chaptermark\@xp{#2}% - \@makeschapterhead{#2}\@afterheading -% \end{macrocode} -% Protect against document classes that have nonzero \cs{parskip}. -% \begin{macrocode} - \parskip\z@skip -% \end{macrocode} -% And finally we read in the \fn{.toc} (or whatever) file. -% \begin{macrocode} - \makeatletter - \@input{\jobname.#1}% - \if@filesw - \@xp\newwrite\csname tf@#1\endcsname - \immediate\@xp\openout\csname tf@#1\endcsname \jobname.#1\relax - \fi - \global\@nobreakfalse \endgroup - \newpage -} -%</amsbook> -% \end{macrocode} -% -% Now it is easy to define \cn{tableofcontents} and its relatives. -% \begin{macrocode} -\def\contentsname{Contents} -\def\listfigurename{List of Figures} -\def\listtablename{List of Tables} -\def\tableofcontents{% - \@starttoc{toc}\contentsname -} -\def\listoffigures{\@starttoc{lof}\listfigurename} -\def\listoftables{\@starttoc{lot}\listtablename} -% \end{macrocode} -% -% In order to automatically leave enough space for the `number' part -% of toc entries, we compute the maximum width of the `number' part -% for each sectioning level and pass that information to -% \cs{@tocline} through the \fn{.aux} file. -% -% Init the tocindents if they are not yet set (first run). -% \begin{macrocode} -\AtBeginDocument{% - \@for\@tempa:=-1,0,1,2,3\do{% - \@ifundefined{r@tocindent\@tempa}{% - \@xp\gdef\csname r@tocindent\@tempa\endcsname{0pt}}{}% - }% -} -% \end{macrocode} -% -% \begin{macro}{\@writetocindents} -% This function writes out the max toc indents to the aux file. -% \begin{macrocode} -\def\@writetocindents{% - \begingroup - \@for\@tempa:=-1,0,1,2,3\do{% - \immediate\write\@auxout{% - \string\newlabel{tocindent\@tempa}{% - \csname r@tocindent\@tempa\endcsname}}% - }% - \endgroup} -% -\AtEndDocument{\@writetocindents} -% \end{macrocode} -% \end{macro} -% - -% \begin{macro}{\indentlabel} -% This function is a no-op except in \cs{@tocwrite} where it is a -% pointer to \cs{@tochangmeasure}. -% \begin{macrocode} -\let\indentlabel\@empty -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@tochangmeasure} -% This function measures the hangindent part of a toc entry and -% updates the current max for the given sectioning level, if -% necessary. The max's at the end of the document will be written -% in the form of a pseudo-label to the \fn{.aux} file by -% \cs{@writetocindents}. -% -% We can assume that \cs{@tochangmeasure} is already inside a group -% when called. -% \begin{macrocode} -\def\@tochangmeasure#1{\sbox\z@{#1}% - \ifdim\wd\z@>\csname r@tocindent\@toclevel\endcsname\relax - \@xp\xdef\csname r@tocindent\@toclevel\endcsname{\the\wd\z@}% - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@toclevel} -% Initialize, for the record. -% \begin{macrocode} -\def\@toclevel{0} -% \end{macrocode} -% \end{macro} -% -% Since we don't have leader dots, we have \cs{@tocline} instead of -% \cs{@dottedtocline}. -% \begin{macrocode} -\def\@tocline#1#2#3#4#5#6#7{\relax - \ifnum #1>\c@tocdepth % then omit - \else - \par \addpenalty\@secpenalty\addvspace{#2}% - \begingroup \hyphenpenalty\@M - \@ifempty{#4}{% - \@tempdima\csname r@tocindent\number#1\endcsname\relax - }{% - \@tempdima#4\relax - }% - \parindent\z@ \leftskip#3\relax \advance\leftskip\@tempdima\relax - \rightskip\@pnumwidth plus4em \parfillskip-\@pnumwidth - #5\leavevmode\hskip-\@tempdima #6\nobreak\relax - \hfil\hbox to\@pnumwidth{\@tocpagenum{#7}}\par - \nobreak - \endgroup - \fi} -% \end{macrocode} -% -% \begin{macrocode} -\def\@tocpagenum#1{\hss{\mdseries #1}} -% \end{macrocode} -% -% The function \cs{@tocwrite} writes the information of a section -% heading to the \fn{.toc} file in a standard form. It allows -% different functions to be substituted for \cs{numberline}, to get -% greater control of toc formatting. -% \begin{macrocode} -\def\@tocwrite#1{\@xp\@tocwriteb\csname toc#1\endcsname{#1}} -% \end{macrocode} -% The \cn{chapter} command uses \cs{@tocwriteb} directly because of -% the need to write slightly different things to the toc file -% depending on the current value of \cn{chaptername}. -% \begin{macrocode} -\def\@tocwriteb#1#2#3{% - \begingroup - \def\@tocline##1##2##3##4##5##6{% - \ifnum##1>\c@tocdepth - \else \sbox\z@{##5\let\indentlabel\@tochangmeasure##6}\fi}% - \csname l@#2\endcsname{#1{\csname#2name\endcsname}{\@secnumber}{}}% - \endgroup - \addcontentsline{toc}{#2}% - {\protect#1{\csname#2name\endcsname}{\@secnumber}{#3}}} -% \end{macrocode} -% -% Specs for monograph toc are as follows (tocdepth is 1, i.e., -% subsections and lower are not listed in toc). -%\begin{verbatim} -% Part: Space above 12pt plus2pt, indent 0pt, "Part" + wordspace + -% number + "." + 1em + title (raggedright, no hangindent) + 1em + -% page number in column 1.6em wide. -% -% Chapter: Space above 8pt, hangindent on ("Chapter 0" + "." + 1em), -% + title (raggedright) + 1em + page number in column 1.6em wide. -% -% Appendix: Same as Chapter except for epithet "Appendix M" -% -% Section: Space above 0pt, hangindent on (1pc + "0.0" + "." + 1em), -% + title (raggedright) + 1em + page number in column 1.6em wide. -%\end{verbatim} -% -% Specs for article toc are as follows (tocdepth 2): -%\begin{verbatim} -% Section: Same as for monograph. -% -% Subsection: Space above 0pt, hangindent 6pc (number + "." + 1em), -% + title (raggedright) + 1em + page number in column 1.6em wide. -% -% Subsubsection: Same as subsection but hangindent 8pc -%\end{verbatim} -% -% Typical invocation of \cs{l@chapter}: -%\begin{verbatim} -% \contentsline{chapter}{% -% \tocchapter{Chapter}{3}{Some title stuff}}{103} -% -->\l@chapter--> -% #1 #2 #3 #4 #5 -% \@tocline{0}{8pt}{0pt}{}{\bfseries} -% #6 6a 6b 6c #7 -% {\tocchapter{Chapter}{3}{Some title stuff}}{103} -%\end{verbatim}% -% The \cs{tocchapter} is a slightly more useful form than -% \cs{numberline} that allows control for optionally omitting strings -% like `Chapter' or changing fonts for subcomponents of the toc -% entry. Note that it is allowed to have appendix and chapter at the -% same toc level, with \cs{tocappendix} instead of \cs{tocchapter} -% written in the \fn{.toc} file. -% -% The arguments of \cs{@tocline} are as follows: -%\begin{verbatim} -% \@tocline{LEVEL}{VSPACE}{INDENT}{NUMBERWIDTH}{EXTRA}% -% {TEXT}{PAGENUM} -%\end{verbatim}% -% where `numberwidth' is the width of the box allotted to contain the -% section number, including any preceding word like `Chapter' or -% `Part'. If this width arg is empty then an automatically computed -% width (max over TOC of the numberwidths for this level) is used. -% The `extra' argument is formatting such as font changes. -% The `text' argument contains a section-command specific function -% like \cs{tocsection} or \cs{tocchapter} which takes in turn three -% arguments: epithet, number, topic. -% \begin{macrocode} -\def\l@section{\@tocline{1}{0pt}{1pc}{}{}} -% \end{macrocode} -% *** The indents do not agree between in-house and distributed ***\\ -% *** versions; no changes; get specs before revising. ***\\ -% The use of \cn{ignorespaces} in \cs{tocsection} and its relatives -% means that if \arg{1} is empty, the following space will be also -% removed. -% \begin{macrocode} -\newcommand{\tocsection}[3]{% - \indentlabel{\@ifnotempty{#2}{\ignorespaces#1 #2.\quad}}#3} -\def\l@subsection{\@tocline{2}{0pt}{1pc}{5pc}{}} -\let\tocsubsection\tocsection -\def\l@subsubsection{\@tocline{3}{0pt}{1pc}{7pc}{}} -\let\tocsubsubsection\tocsection -\let\l@paragraph\l@subsubsection -\let\tocparagraph\tocsection -\let\l@subparagraph\l@subsubsection -\let\tocsubparagraph\tocsection -% -\def\l@part{\@tocline{-1}{12pt plus2pt}{0pt}{}{\bfseries}} -\let\tocpart\tocsection -\def\l@chapter{\@tocline{0}{8pt plus1pt}{0pt}{}{}} -\let\tocchapter\tocsection -% \end{macrocode} -% In this case we are pretty sure the word "Appendix" or similar is -% present, so only check if arg 2 is empty: -% \begin{macrocode} -\newcommand{\tocappendix}[3]{% - \indentlabel{#1\@ifnotempty{#2}{ #2}.\quad}#3} -% \end{macrocode} -% -% \begin{macrocode} -\def\l@figure{\@tocline{0}{3pt plus2pt}{0pt}{1.5pc}{}} -\let\l@table=\l@figure -% \end{macrocode} -% -% \subsection{Bibliography section or chapter} -% -% Following the \pkg{babel} package, we use \cn{refname} in articles -% and \cn{bibname} in books. -% \begin{macrocode} -\def\refname{References} -\def\bibname{Bibliography} -% \end{macrocode} -% -% Restudy the following code; \cs{bibsetup} isn't used anywhere -% although it's defined for the three different bibstyles. -% Because some publications have different default label styles, -% separate that out for easy tailoring of packages. -% \begin{macrocode} -\def\@defaultbiblabelstyle#1{#1.} -\def\bibliographystyle#1{% - \if@filesw\immediate\write\@auxout{\string\bibstyle{#1}}\fi - \def\@tempa{#1}% - \def\@tempb{amsplain}% - \def\@tempc{}% - \ifx\@tempa\@tempb - \def\@biblabel##1{\@defaultbiblabelstyle{##1}}% - \def\bibsetup{}% - \else - \def\bibsetup{\labelsep6\p@}% - \ifx\@tempa\@tempc - \def\@biblabel##1{}% - \def\bibsetup{\labelwidth\z@ \leftmargin24\p@ - \itemindent-\leftmargin - \labelsep\z@ }% - \fi - \fi} -% \end{macrocode} -% -% Permit easy change of font size for unusual purpose, e.g., for -% an author's ``life list'' in collected works. [bnb, 2004/04/01] -% \begin{macrocode} -\newcommand{\bibliofont}{\footnotesize} -% \end{macrocode} -% -% \env{thebibliography} differs in some author packages only in the -% shape of the title; make this easy to change. [bnb, 2004/05/22] -% \begin{macrocode} -\newcommand{\@bibtitlestyle}{% -%<amsart|amsproc> \@xp\section\@xp*\@xp{\refname}% -%<amsbook> \@xp\chapter\@xp*\@xp{\bibname}% -} -\newenvironment{thebibliography}[1]{% - \@bibtitlestyle - \normalfont\bibliofont\labelsep .5em\relax - \renewcommand\theenumiv{\arabic{enumiv}}\let\p@enumiv\@empty - \list{\@biblabel{\theenumiv}}{\settowidth\labelwidth{\@biblabel{#1}}% - \leftmargin\labelwidth \advance\leftmargin\labelsep - \usecounter{enumiv}}% - \sloppy \clubpenalty\@M \widowpenalty\clubpenalty - \sfcode`\.=\@m -}{% -% \end{macrocode} -% Change error for empty list (no items) to warning, to allow authors -% to leave their bibliography temporarily empty during writing: -% \begin{macrocode} - \def\@noitemerr{\@latex@warning{Empty `thebibliography' environment}}% - \endlist -} -% \end{macrocode} -% -% The \cn{bysame} command prints a horizontal dash indicating -% repetition of the author's name in consecutive bibliography -% entries. -% \begin{macrocode} -\def\bysame{\leavevmode\hbox to3em{\hrulefill}\thinspace} -% \end{macrocode} -% We define \cn{newblock} even though it's not needed for AMS -% publication style, just to avoid error messages when a non-AMS -% \fn{.bst} file is used. This is a convenience for users; use of -% \cn{newblock} is not recommended for submissions to the AMS. -% \begin{macrocode} -\def\newblock{} -% \end{macrocode} -% -% \begin{macro}{\MR} -% \begin{macro}{\MRhref} -% Provide an MR number for a bibliography item. At the moment -% [mjd,1995/08/07] this only prints the MR number, but later -% we expect to extend it to write an HTML \cs{special} to the -% \fn{.dvi} file. -% -% The presentation of the MR number has been simplified (from using -% a bold volume number) coincident with the change in the MathSciNet -% database to a 7-digit reference number from the volume:number form. -% -% Ensure that an old-style MR number does not break across lines if -% it contains a space; editorial request. [bnb; 2004/04/01] -% Countermanded, to permit break between reference number and an -% old-style number following in parentheses. [bnb; 2004/06/11] -% \begin{macrocode} -\newcommand\MR[1]{\relax\ifhmode\unskip\spacefactor3000 \space\fi - MR~\MRhref{#1}{#1}} -% \end{macrocode} -% -% \begin{macrocode} -\let\MRhref\@gobble -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\URL} -% \begin{macro}{\URLhref} -% \begin{macro}{\@URL} -% Allows sticking in an arbitrary URL in a bibliography. Leading -% ``http'' is not assumed. Call \cn{verb} to ensure that special -% characters in the URL don't cause trouble. -% \begin{macrocode} -\newcommand\URL{\begingroup - \def\@sverb##1{% - \def\@tempa####1##1{\@URL{####1}\egroup\endgroup}% - \@tempa}% - \verb} -% \end{macrocode} -% -% \begin{macrocode} -\let\URLhref\@gobble -\def\@URL#1{\URLhref{#1}#1} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \subsection{Index section or chapter} -% -% Chapter or section heading for an index. Index is set up to be two -% columns. -% \begin{macrocode} -\newif\if@restonecol -% \end{macrocode} -% -% \begin{macrocode} -%<*amsbook> -\def\indexchap#1{\global\topskip 7.5pc\relax - \twocolumn[{\fontsize{\@xivpt}{18}\bfseries\centering - \vskip\topskip\hbox{}\vskip-\baselineskip% adjust top space - #1\par -% \end{macrocode} -% After \cs{twocolumn} finishes operating, the top material is left in an -% insert register, and topskip will now be applied above the -% following material. So we should set it to the normal -% after-chapter-title space (34pt)---cf.~\cs{@makeschapterhead}. -% \begin{macrocode} - \global\topskip 34\p@\relax - \ifx\@empty\indexintro - \else - \begingroup \normalsize - \skip@\topskip \advance\skip@ -\baselineskip - \vskip\skip@ - \parbox[t]{24pc}{\normalfont\indexintro\par}% - \endgroup - \global\topskip 24\p@\relax - \fi - }]% -} -\newcommand{\indexintro}{} -%</amsbook> -% \end{macrocode} -% -% \env{theindex} differs in some author packages only in the -% shape of the title; make this easy to change. [bnb, 2004/05/22] -% \begin{macrocode} -\newcommand{\@indextitlestyle}{% -%<*amsbook> - \let\@makeschapterhead\indexchap - \@xp\chapter\@xp*\@xp{\indexname}% -%</amsbook> -%<amsart|amsproc> \twocolumn[\@xp\section\@xp*\@xp{\indexname}]% -} -\def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi - \columnseprule\z@ \columnsep 35\p@ - \@indextitlestyle - \thispagestyle{plain}% - \let\item\@idxitem - \parindent\z@ \parskip\z@\@plus.3\p@\relax - \raggedright - \hyphenpenalty\@M - \footnotesize} -% \end{macrocode} -% -% \begin{macrocode} -\def\indexname{Index} -% \end{macrocode} -% -% \begin{macrocode} -\def\@idxitem{\par\hangindent 2em} -\def\subitem{\par\hangindent 2em\hspace*{1em}} -\def\subsubitem{\par\hangindent 3em\hspace*{2em}} -\def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi} -\def\indexspace{\par\bigskip} -% \end{macrocode} -% -% \subsection{Footnotes} -% In books the footnote counter should reset to 0 at the beginning of -% each chapter: -% \begin{macrocode} -%<amsbook>\@addtoreset{footnote}{chapter} -% \end{macrocode} -% -% Rule above footnotes is 5 picas wide. -% \begin{macrocode} -\def\footnoterule{\kern-.4\p@ - \hrule\@width 5pc\kern11\p@\kern-\footnotesep} -% \end{macrocode} -% -% A simple superscript doesn't work here; it fails on a minipage, -% where \cs{itshape} (which is invalid in math mode) is used for the -% footnote numbers. Cf.~ the definition of \cn{textprime}. -% \begin{macrocode} -\def\@makefnmark{% - \leavevmode - \raise.9ex\hbox{\fontsize\sf@size\z@\normalfont\@thefnmark}% -} -% -\def\@makefntext{\indent\@makefnmark} -% \end{macrocode} -% Add \cn{normalfont} before \cn{footnotesize} so that -% fonts will come out properly using the new font selection scheme. -% \begin{macrocode} -\long\def\@footnotetext#1{% - \insert\footins{% - \normalfont\footnotesize - \interlinepenalty\interfootnotelinepenalty - \splittopskip\footnotesep \splitmaxdepth \dp\strutbox - \floatingpenalty\@MM \hsize\columnwidth -% \end{macrocode} -% Mostly \cs{@parboxrestore} does what we want; but not with -% respect to \cs{parindent} and \cs{tolerance}. -% \begin{macrocode} - \@parboxrestore \parindent\normalparindent \sloppy - \protected@edef\@currentlabel{% - \csname p@footnote\endcsname\@thefnmark}% - \@makefntext{% - \rule\z@\footnotesep\ignorespaces#1\unskip\strut\par}}} -% \end{macrocode} -% We change \cn{sloppy} to keep it from overriding our normal value of -% 1pt for \cs{hfuzz} and \cs{vfuzz} with a LESS sloppy value (.5pt). -% \begin{macrocode} -\hfuzz=1pt \vfuzz=\hfuzz -\def\sloppy{\tolerance9999 \emergencystretch 3em\relax} -% \end{macrocode} -% -% \subsection{Float placement parameters} -% These control the placing of floating objects like tables and -% figures. We use much more tolerant values than the \latex/ defaults; -% the \latex/ defaults are geared to fussier page breaks, at a price of -% requiring more manual intervention to deal with difficult page -% breaking problems. -% -% When using \latex/'s twocolumn option, `page' really means `column', -% for the parameters that don't have a dbl prefix: that is, topnumber -% is then the maximum number of top figures allowed in each column, -% and so forth. -% \begin{description} -% \item[topnumber] maximum number of top figures allowed per page -% \item[bottomnumber] maximum number of bottom figures allowed per page -% \item[totalnumber] maximum number of figures (top and bottom) allowed -% per page -% \item[dbltopnumber] same as topnumber, but for two-column wide -% figures, when double-column format is used -% \end{description} -% \begin{macrocode} -\setcounter{topnumber}{4} -\setcounter{bottomnumber}{4} -\setcounter{totalnumber}{4} -\setcounter{dbltopnumber}{4} -% \end{macrocode} -% Float fraction parameters. -% \begin{description} -% \item[\cs{topfraction}] maximum part of the page allowed for top -% figures, expressed as a decimal fraction. The value of .97 means -% roughly `accept pages that have only two lines of text, and the -% rest figures'. -% \item[\cs{bottomfraction}] same as \cs{topfraction}, but for bottom -% figures -% \item[\cs{textfraction}] \emph{minimum} part of the page that must be -% occupied by text, if the page is to have any text at all. If this -% value cannot be achieved, \latex/ will turn the current figure or -% figures into a ``float page'', i.e., a page of figures without any -% text. -% \item[\cs{floatpagefraction}] minimum amount (that is, total combined -% height) of figures needed before \latex/ will make a float page. This -% is expressed as a fraction of the normal page height. -% \item[\cs{dbltopfraction}] like \cs{topfraction}, but applies only to -% figures that are two columns wide, when double-column format is -% used. -% \item[\cs{dblfloatpagefraction}] minimum amount of double-column -% figure material needed before \latex/ will make a two-column wide -% ``float page'' -% \end{description} -% \begin{macrocode} -\renewcommand{\topfraction}{.97} -\renewcommand{\bottomfraction}{.97} -\renewcommand{\textfraction}{.03} -\renewcommand{\floatpagefraction}{.9} -\renewcommand{\dbltopfraction}{.97} -\renewcommand{\dblfloatpagefraction}{.9} -% \end{macrocode} -% -% We also modify the default values for spacing around floating -% figures: (A) so that figures on a float page will not be -% vertically centered on the total page height but will -% be flush at the top of the page, and (B) so that there will -% be slightly more stretchability around figures, to help find better -% page breaks in difficult situations. -% -% \begin{description} -% \item[\cs{floatsep}] Space between consecutive figures -% \item[\cs{textfloatsep}] Space between text and top or bottom figures -% \item[\cs{intextsep}] Space above and below a figure in the middle of -% the text (i.e., placed with the |[h]| option) -% \item[\cs{dblfloatsep}] Space between consecutive figures that are -% two columns wide (when two-column format is used) -% \item[\cs{dbltextfloatsep}] Space between double-column figures and text -% \item[\cs{@fptop}] Space above the first figure on a float page -% \item[\cs{@fpsep}] Space between figures on a float page -% \item[\cs{@fpbot}] Space below the last figure on a float page -% \item[\cs{@dblfptop}] Space above the first double-column figure on a -% two-column wide float page -% \item[\cs{@dblfptop}] Space between double-column figures on a two-column -% wide float page -% \item[\cs{@dblfptop}] Space below the last double-column figure on a -% two-column wide float page -% \end{description} -% \begin{macrocode} -\setlength{\floatsep}{12pt plus 6pt minus 4pt} -\setlength{\textfloatsep}{15pt plus 8pt minus 5pt} -\setlength{\intextsep}{12pt plus 6pt minus 4pt} -\setlength{\dblfloatsep}{12pt plus 6pt minus 4pt} -\setlength{\dbltextfloatsep}{15pt plus 8pt minus 5pt} -\setlength{\@fptop}{0pt}% removed "plus 1fil" -\setlength{\@fpsep}{8pt}% removed "plus 2fil" -\setlength{\@fpbot}{0pt plus 1fil} -\setlength{\@dblfptop}{0pt}% removed "plus 1fil" -\setlength{\@dblfpsep}{8pt}% removed "plus 2fil" -\setlength{\@dblfpbot}{0pt plus 1fil} -% \end{macrocode} -% -% \cs{fps@figure}, \cs{fps@table}: placement specifications for -% \env{figure} and \env{table} environments. `|tbp|' means that a -% figure will be placed at the top or bottom of a page, or on a -% separate page with no text. This might be changed to `|tp|', for -% example, if you never want figures to appear at the bottom of a -% page. -% \begin{macrocode} -\newcommand{\fps@figure}{tbp} -\newcommand{\fps@table}{tbp} -% \end{macrocode} -% -% Some more setup for figures. -% \begin{macrocode} -%<amsart|amsproc>\newcounter{figure} -%<amsbook>\newcounter{figure}[chapter] -\def\@captionheadfont{\scshape} -\def\@captionfont{\normalfont} -\def\ftype@figure{1} -\def\ext@figure{lof} -\def\fnum@figure{\figurename\ \thefigure} -\def\figurename{Figure} -\newenvironment{figure}{% - \@float{figure}% -}{% - \end@float -} -\newenvironment{figure*}{% - \@dblfloat{figure}% -}{% - \end@dblfloat -} -% \end{macrocode} -% And similar for tables. -% \begin{macrocode} -%<amsart|amsproc>\newcounter{table} -%<amsbook>\newcounter{table}[chapter] -\def\ftype@table{2} -\def\ext@table{lot} -\def\fnum@table{\tablename\ \thetable} -\def\tablename{Table} -\newenvironment{table}{% - \@float{table}% -}{% - \end@float -} -\newenvironment{table*}{% - \@dblfloat{table}% -}{% - \end@dblfloat -} -% \end{macrocode} -% -% Change \cs{@floatboxreset} to add \cn{centering}. Centering is -% always applied to tables and figures in AMS publications. It should -% not be necessary to throw in |\begin{center}| \ldots |\end{center}| -% in every instance to achieve this. -% \begin{macrocode} -\def\@floatboxreset{\global\@minipagefalse \centering} -% \end{macrocode} -% -% This is what we want \cs{@makecaption} to do: If the total width is -% greater than normal columnwidth we want to break the caption into -% lines using a line width of $W$ = (columnwidth $-$ 6pc), and center -% the resulting block between the margins. Otherwise we want to set -% the caption as a single line, centered between the margins. -% -% To do this we set the caption as a vbox with line width $W$, -% except that we allow the last line (which may be the only line) to -% have width up to full columnwidth by adding a kern of -6pc. If the -% result is a single hbox (i.e., a single line) we need to unpack the -% hbox, remove rightskip, parfillskip, and the -6pc kern, and center -% the remaining material. If the caption is more than one line, then -% box 1 contains the last line, which we need to unpack in the same -% way, and run through the paragraphing process again (because this -% last line may be up to 6 picas wider than the desired width). -% -% In practice this procedure tends to fail if there are any potential -% breakpoints near the end of the first line (in the window between -% short-width and full-width). Then \TeX{} tends to choose a break -% (depending on spaceskip, tolerance, etc) at the last acceptable -% breakpoint before short-width is exceeded, \emph{without -% considering any later material}---in particular, the negative kern. -% [This was pointed out by Donald Arseneau, May 2000.] Unfortunately, -% setting parfillskip to a negative value does not work either. I -% guess this is a special case of the existing limitation on -% parshape: you cannot specify a parshape in terms of number of lines -% from the bottom of the paragraph. (We would like to specify a -% parshape where the last line is 6 picas longer than the others.) -% -% Finally, if the caption is for a figure, it will be set below the -% figure, so the separating space goes above the caption; otherwise -% the separating space goes below the caption. -% \begin{macrocode} -\long\def\@makecaption#1#2{% -% \end{macrocode} -% Measure the contents of the caption. If \arg{2} is not -% empty, then we must add a period and an en-space before -% typesetting it. The \cs{@caption} macro adds an extra -% \cn{ignorespaces} at the beginning of \arg{2}, so in order -% to find out if the user-typed portion is empty we use -% \cs{@cdr} to pull off the \cn{ignorespaces}. -% \begin{macrocode} -% Use color-safe commands - \setbox\@tempboxa\vbox{\color@setgroup - \advance\hsize-2\captionindent\noindent - \@captionfont\@captionheadfont#1\@xp\@ifnotempty\@xp - {\@cdr#2\@nil}{.\@captionfont\upshape\enspace#2}% - \unskip\kern-2\captionindent\par - \global\setbox\@ne\lastbox\color@endgroup}% - \ifhbox\@ne % the normal case - \setbox\@ne\hbox{\unhbox\@ne\unskip\unskip\unpenalty\unkern}% - \fi -% \end{macrocode} -% If \cs{@tempboxa} is not empty at this point then the caption was -% more than one line long or there was extra vertical mode material, -% maybe a \cs{write} (from \cn{index} or something). -% Interestingly, we can't use \cs{ifvoid} to see if -% \cs{@tempboxa} is empty, because empty is not the same thing -% as void (as far as the \cs{ifvoid} test is concerned). So -% instead we measure the width of \cs{@tempboxa} -% to see if it's zero; this should suffice for non-bizarre cases. -% \begin{macrocode} - \ifdim\wd\@tempboxa=\z@ % this means caption will fit on one line - \setbox\@ne\hbox to\columnwidth{\hss\kern-2\captionindent\box\@ne\hss}% - \else % tempboxa contained more than one line - \setbox\@ne\vbox{\unvbox\@tempboxa\parskip\z@skip - \noindent\unhbox\@ne\advance\hsize-2\captionindent\par}% - \fi - \ifnum\@tempcnta<64 % if the float IS a figure... - \addvspace\abovecaptionskip - \hbox to\hsize{\kern\captionindent\box\@ne\hss}% - \else % if the float IS NOT a figure... - \hbox to\hsize{\kern\captionindent\box\@ne\hss}% - \nobreak - \vskip\belowcaptionskip - \fi -\relax -} -% \end{macrocode} -% Allocate the skip registers for above and below caption space. -% \begin{macrocode} -\newskip\abovecaptionskip \abovecaptionskip=12pt \relax -\newskip\belowcaptionskip \belowcaptionskip=12pt \relax -\newdimen\captionindent \captionindent=3pc -% \end{macrocode} -% -% \subsection{Miscellaneous} -% -% \begin{macro}{\nonbreakingspace} -% Change \qc{\~} to be more forgiving of accidental adjacent spaces. -% Note that this means multiple |~~~...| cannot be used to get -% multiple spaces in the output. -% \begin{macrocode} -\def\nonbreakingspace{\unskip\nobreak\ \ignorespaces} -\def~{\protect\nonbreakingspace} -% \end{macrocode} -% \end{macro} -% -% Redefine \cs{@biblabel} to do nothing if the argument is empty. We -% don't really care what the previous definition was so we don't -% check it. -% \begin{macrocode} -\def\@biblabel#1{\@ifnotempty{#1}{[#1]}} -% \end{macrocode} -% Changed \cs{@cite} to always use roman/upright, nonbold font, even -% in italic or bold text (following AMS style). -% Turn off \cs{mathsurround} just in case there are subscripts in the -% cite numbers. -% \begin{macrocode} -\def\@citestyle{\m@th\upshape\mdseries} -%<amsart>\let\citeform\@firstofone -%<amsbook|amsproc>\def\citeform#1{{\bfseries#1}} -\def\@cite#1#2{{% - \@citestyle[\citeform{#1}\if@tempswa, #2\fi]}} -% \end{macrocode} -% -% Make \cn{cite} robust if it isn't already. Too many unsuspecting -% users get problems from this in a figure or table caption. -% \begin{macrocode} -\@ifundefined{cite }{% - \expandafter\let\csname cite \endcsname\cite - \edef\cite{\@nx\protect\@xp\@nx\csname cite \endcsname}% -}{} -% \end{macrocode} -% -% \begin{macro}{\fullwidthdisplay} -% The function \cs{fullwidthdisplay} makes a displayed equation take -% up the full column width even if the current context is an indented -% list. -% \begin{macrocode} -\def\fullwidthdisplay{\displayindent\z@ \displaywidth\columnwidth} -% \end{macrocode} -% And we insert the \cs{fullwidthdisplay} function at the beginning of -% \cs{everydisplay} just in case any later code in \cs{everydisplay} -% needs to use the values of \cs{displayindent} or \cs{displaywidth}. -% \begin{macrocode} -\edef\@tempa{\noexpand\fullwidthdisplay\the\everydisplay} -\everydisplay\expandafter{\@tempa} -% \end{macrocode} -% \end{macro} -% -% A few odds and ends for indexes, based on \pkg{makeindex}. The -% definition of \cn{see} as ``see also'' is unfortunate, but of -% long standing, and cannot be changed without destroying backward -% compatibility, so an alternate command, \cn{seeonly}, is provided -% to cover the basic situation. -% \begin{macrocode} -\newcommand*\seeonlyname{see} -\newcommand*\seename{see also} -\newcommand*\alsoname{see also} -\newcommand*\seeonly[2]{\emph{\seeonlyname} #1} -\newcommand*\see[2]{\emph{\seename} #1} -\newcommand*\seealso[2]{\emph{\alsoname} #1} -\newcommand\printindex{\@input{\jobname.ind}} -% \end{macrocode} -% -% \begin{macro}{\textprime} -% A text prime symbol, for applying primes to numbers such as list -% numbers or equation numbers that are not really math. Furthermore -% Cyrillic myagkii znak, or soft sign, is represented by a prime -% symbol in Russian names when they are transliterated into English. -% -% \cn{textprime} uses the prime symbol from math, but because it's -% intended specifically for nonmath use, we avoid going through math -% mode with \verb'$...$'. We must therefore call \cs{check@mathfonts} -% to ensure that \verb'scriptfont2' is actually defined. Otherwise, -% if \cn{textprime} were used in a document before the first math -% formula, there would be no adequate assignment yet for -% \verb'\scriptfont2'. -% -% The raise value of \verb'.8ex' is just a reasonable guess at making -% the bottom of the prime symbol fall near the top of a preceding -% lowercase letter but still not fall too low on an uppercase letter. -% We could look up the \cs{fontdimen} values used in math mode for -% superscripts but I don't think it's worth the bother. -% -% Cf.~also the definition of \cs{@makefnmark}. The prime symbol here -% is not raised quite so high because I think that is desirable for -% the soft-sign usage. -% \begin{macrocode} -\DeclareRobustCommand\textprime{\leavevmode - \raise.8ex\hbox{\check@mathfonts\the\scriptfont2 \char48 }} -% \end{macrocode} -% \end{macro} -% -% \subsection{Book style variations} -% Here is the layout for a \cn{maketitle} in the \cls{amsbook} class. -% \begin{macrocode} -%<*amsbook> -\def\maketitle{\par - \@topnum\z@ % this prevents figures from falling at the top of page 1 - \begingroup - \@maketitle - \endgroup - \c@footnote\z@ - \def\do##1{\let##1\relax}% - \do\maketitle \do\@maketitle \do\title \do\@xtitle \do\@title - \do\author \do\@xauthor \do\address \do\@xaddress - \do\email \do\@xemail \do\curraddr \do\@xcurraddr - \do\dedicatory \do\@dedicatory \do\thanks \do\thankses - \do\keywords \do\@keywords \do\subjclass \do\@subjclass -} -% \end{macrocode} -% -% \begin{macrocode} -\def\@maketitle{% - \cleardoublepage \thispagestyle{empty}% - \begingroup \topskip\z@skip - \null\vfil - \begingroup - \LARGE\bfseries \centering - \openup\medskipamount - \@title\par\vspace{24pt}% - \def\and{\par\medskip}\centering - \mdseries\authors\par\bigskip - \endgroup - \vfil - \ifx\@empty\addresses \else \@setaddresses \fi - \vfil - \ifx\@empty\@dedicatory - \else \begingroup - \centering{\footnotesize\itshape\@dedicatory\@@par}% - \endgroup - \fi - \vfill - \newpage\thispagestyle{empty} - \begin{center} - \ifx\@empty\@subjclass\else\@setsubjclass\fi - \ifx\@empty\@keywords\else\@setkeywords\fi - \ifx\@empty\@translators\else\vfil\@settranslators\fi - \ifx\@empty\thankses\else\vfil\@setthanks\fi - \end{center} - \vfil - \@setabstract - \endgroup} -% \end{macrocode} -% -% Define the desired form for translator names. -% \begin{macrocode} -\def\@settranslators{\par - \begingroup - \translname: \andify\@translators \uppercasenonmath\@translators - \@translators \@@par - \endgroup} -\def\@setdate{\par\smallskip\@date\par\smallskip} -\def\@setsubjclass{\par\smallskip - {\itshape\subjclassname.}\enspace\@subjclass\par\smallskip} -\def\@setkeywords{\par\smallskip - {\itshape \keywordsname.}\enspace \@keywords\par\smallskip} -%</amsbook> -%</classes> -% \end{macrocode} -% -% \subsection{Setup for theorems, definitions, remarks, proofs} -% \subsubsection{Intended usage} -% -% Here are some examples showing the kinds of theorem environment -% declarations that are possible. -%\begin{verbatim} -% \newtheorem{prop}{Proposition} -% \newtheorem{thm}{Theorem}[section] -% \newtheorem{lem}[thm]{Lemma} -% \newtheorem*{Zorn}{Zorn's Lemma} -% -% \theoremstyle{definition} -% \newtheorem{dfn}{Definition} -% -% \theoremstyle{remark} -% \newtheorem*{rmk}{Remark} -%\end{verbatim} -% -% The first four statements all define environments using the default -% theorem style (`plain'), since there is no prefatory -% \cn{theoremstyle} declaration. The first statement defines an -% automatically numbered \env{prop} environment whose headings will -% look like this: Proposition 1, Proposition 2, and so forth. The -% second statement defines an environment \env{thm} with numbers -% subordinate to section numbers, so the headings will look like -% this: Theorem 1.1, Theorem 1.2, Theorem 1.3, \dots, (in section 2:) -% Theorem 2.1, Theorem 2.2, and so forth. The third statement defines -% a \env{lem} environment whose numbers will interleave in sequence -% with the theorem numbers: Theorem 1.3, Lemma 1.4, Lemma 1.5, -% Theorem 1.6, and so forth. The fourth statement defines a special -% unnumbered lemma named `Zorn's Lemma'. The remaining two -% \cn{newtheorem} statements have no special features except for the -% \cn{theoremstyle} declarations that cause the \env{dfn} and -% \env{rmk} environments to have some differences in appearance. -% -% There are three basic styles provided: The `plain' style produces -% bold headings and italic body text; the `definition' style produces -% bold headings and normal body text; the `remark' style produces -% italic headings and normal body text. -% -% A \cn{swapnumbers} command allows theorem numbers to be swapped to -% the front of the theorem headings. Putting \cn{swapnumbers} in your -% document preamble will cause \emph{all following} \cn{newtheorem} -% statements to produce number-first headings. (To provide maximum -% control, \cn{swapnumbers} is designed so that it can be used more -% than once; each time it is used, theorem numbers will be swapped to -% the opposite side for all following \cn{newtheorem} statements. But -% rarely will it need to be invoked more than once per document.) -% -% \subsubsection{Custom theorem styles} -% There is a \cn{newtheoremstyle} command provided to make the -% creation of custom theoremstyles fairly easy. -% -% Usage: -%\begin{verbatim} -% #1 -% \newtheoremstyle{NAME}% -% #2 #3 #4 -% {ABOVESPACE}{BELOWSPACE}{BODYFONT}% -% #5 #6 #7 #8 -% {INDENT}{HEADFONT}{HEADPUNCT}{HEADSPACE}% -% #9 -% {CUSTOM-HEAD-SPEC} -%\end{verbatim} -% Leaving the `indent' argument empty is equivalent to entering -% |0pt|. The `headpunct' and `headspace' arguments are for the -% punctuation and horizontal space between the theorem head and the -% following text. There are two special values that may be used for -% `headspace': a single space means that a normal interword space -% should be used; ``\cn{newline}'' means that there should be a line -% break after the head instead of horizontal space. The -% `custom-head-spec' argument follows a special convention: it is -% interpreted as the replacement text for an internal three-argument -% function \cn{thmhead}, i.e., as if you were defining -%\begin{verbatim} -% \renewcommand{\thmhead}[3]{...#1...#2...#3...} -%\end{verbatim} -% but omitting the initial |\renewcommand{\thmhead}[3]|. The three -% arguments that will be supplied to \cn{thmhead} are the name, -% number, and optional note components. Within the replacement text -% you can (and normally will want to) use other special functions -% \cn{thmname}, \cn{thmnumber}, and \cn{thmnote}. These will print -% their argument if and only if the corresponding argument of -% \cn{thmhead} is nonempty. For example -%\begin{verbatim} -% {\thmname{#1}\thmnumber{ #2}\thmnote{ (#3)}} -%\end{verbatim} -% This would cause the theorem note \arg{3} to be printed with a -% preceding space and enclosing parentheses, if it is present, and if -% it is absent, the space and parentheses will be omitted because -% they are inside the argument of \cn{thmnote}. -% -% Finally, if you have an extra bit of arbitrary code that you want -% to slip in somewhere, the best place to do it is in the `body font' -% argument. -% -% The \cn{newtheoremstyle} command is designed to provide, through a -% relatively simple interface, control over the style aspects that -% are most commonly changed. More complex requirements must be -% addressed through a separate \latex/ package. -% -% When you set up custom theorem styles with \cn{newtheoremstyle} you -% should not use \cn{swapnumbers}. You have full control of the -% ordering of elements in the theorem head, just place them where you -% want. Or, if you do use \cn{swapnumbers}, you must look at the -% definition of \cs{swappedhead} and change it appropriately. - -% \subsubsection{Implementation} -% The \cn{theoremstyle} command is very simple except for the need to -% warn about an unknown theoremstyle. -% \begin{macrocode} -%<*amsthm|classes> -\newcommand{\theoremstyle}[1]{% - \@ifundefined{th@#1}{% - \PackageWarning{amsthm}{Unknown theoremstyle `#1'}% - \thm@style{plain}% - }{% - \thm@style{#1}% - }% -} -% \end{macrocode} -% -% \begin{macrocode} -\newtoks\thm@style -\thm@style{plain} -% \end{macrocode} -% -% What's really needed is a full-fledged systematic approach for -% specifying the desired order and formatting of the three identified -% parts of a theorem head (name, number, note). -% \begin{macrocode} -\newtoks\thm@bodyfont \thm@bodyfont{\itshape} -\newtoks\thm@headfont \thm@headfont{\bfseries} -\newtoks\thm@notefont \thm@notefont{} -\newtoks\thm@headpunct \thm@headpunct{.} -% \end{macrocode} -% Vertical spacing: initialize to current value of \cs{topsep}. -% If a document class loads the \pkg{amsthm} package it -% should take care to set these variables explicitly, if current -% \cs{topsep} is not the desired value. -% \begin{macrocode} -\newskip\thm@preskip \newskip\thm@postskip -%<*classes> -\def\thm@space@setup{% - \thm@preskip=.5\baselineskip\@plus.2\baselineskip - \@minus.2\baselineskip - \thm@postskip=\thm@preskip -} -%</classes> -%<*amsthm> -\def\thm@space@setup{% - \thm@preskip=\topsep \thm@postskip=\thm@preskip -} -%</amsthm> -% \end{macrocode} -% Modify \cn{newtheorem} to add |*| option. If a |*| is found, pass -% it on to \cs{@xnthm} as the first argument. (This information -% enables us to handle two different possibilities in a single -% function \cs{@xnthm} instead of needing two separate functions.) -% \begin{macrocode} -\renewcommand{\newtheorem}{\@ifstar{\@xnthm *}{\@xnthm \relax}} -% \end{macrocode} -% -% Check to see if an optional arg is present after the first -% mandatory arg (which is \arg{2} at the moment since the |*| or -% non-|*| is \arg{1}). -% \begin{macrocode} -\def\@xnthm#1#2{% - \let\@tempa\relax - \@xp\@ifdefinable\csname #2\endcsname{% - \global\@xp\let\csname end#2\endcsname\@endtheorem - \ifx *#1% unnumbered, need to get one more mandatory arg - \edef\@tempa##1{% - \gdef\@xp\@nx\csname#2\endcsname{% - \@nx\@thm{\@xp\@nx\csname th@\the\thm@style\endcsname}% - {}{##1}}}% - \else % numbered theorem, need to check for optional arg - \def\@tempa{\@oparg{\@ynthm{#2}}[]}% - \fi - }% - \@tempa -} -% \end{macrocode} -% -% Environment numbered together with a previously defined -% environment. -% -% Arg1: env name, e.g. `thm'\par -% Arg2: optional sibling counter\par -% Arg3: heading text e.g. `Theorem' -% \begin{macrocode} -\def\@ynthm#1[#2]#3{% -% \end{macrocode} -% If optional arg \arg{2} is empty, call \cs{@xthm} to look for a -% possible optional arg in terminal position. Note that -% the two optional args are mutually exclusive. As \arg{2} is a -% counter name and must be processed by \cs{csname} anyway, -% we can use a simpler test instead of \cs{@ifempty}. -% \begin{macrocode} - \ifx\relax#2\relax - \def\@tempa{\@oparg{\@xthm{#1}{#3}}[]}% - \else - \@ifundefined{c@#2}{% - \def\@tempa{\@nocounterr{#2}}% - }{% - \@xp\xdef\csname the#1\endcsname{\@xp\@nx\csname the#2\endcsname}% - \toks@{#3}% - \@xp\xdef\csname#1\endcsname{% - \@nx\@thm{% - \let\@nx\thm@swap - \if S\thm@swap\@nx\@firstoftwo\else\@nx\@gobble\fi - \@xp\@nx\csname th@\the\thm@style\endcsname}% - {#2}{\the\toks@}}% - \let\@tempa\relax - }% - \fi - \@tempa -} -% \end{macrocode} -% -% Environment numbered relative to the counter given as \arg{3}. This -% function should really be named \cs{@znthm} but we're trying to -% save a bit of hash table and string pool by reusing one of the -% command names rendered obsolete by the \pkg{amsthm} package. -% -% Arg1: env name e.g. `thm'; -% Arg2: heading text e.g. `Theorem'; -% Arg3: parent counter e.g. section. -% \begin{macrocode} -\def\@xthm#1#2[#3]{% -% \end{macrocode} -% Set up the counter \verb'c@#1' and optionally add it to the reset -% list of counter \arg{3}. As \arg{3} is a -% counter name and must be processed by \cs{csname} anyway, -% we can use a simpler test instead of \cs{@ifempty}. -% \begin{macrocode} - \ifx\relax#3\relax - \newcounter{#1}% - \else - \newcounter{#1}[#3]% -% \end{macrocode} -% Define \cn{thexxx} to be \verb'\theyyy.\arabic{xxx}' (assuming -% default values of punctuation and numbering style). The use of -% \cs{xdef} here is inherited from the old \latex/ code, I'm not -% sure it's a good idea in general, but there should not be any -% problems unless someone changes the value of \cs{@thmcountersep} or -% \cs{@thmcounter}. -% \begin{macrocode} - \@xp\xdef\csname the#1\endcsname{\@xp\@nx\csname the#3\endcsname - \@thmcountersep\@thmcounter{#1}}% - \fi - \toks@{#2}% - \@xp\xdef\csname#1\endcsname{% - \@nx\@thm{% - \let\@nx\thm@swap - \if S\thm@swap\@nx\@firstoftwo\else\@nx\@gobble\fi - \@xp\@nx\csname th@\the\thm@style\endcsname}% - {#1}{\the\toks@}}% -} -% \end{macrocode} -% -% [mjd,1999/10/13] The following code doesn't handle the case where -% an equation is immediately followed by a theorem with no -% intervening \cs{par}---then the spacefactor is 1000. -% \begin{macrocode} -% % \def\thm@check@break{% -% % \ifhmode \unskip \unskip -% % \edef\pre@thm@spacefactor{\the\spacefactor}\par -% % \edef\thm@topbreak{% -% % \ifnum\pre@thm@spacefactor<\sfcode`\!\relax -% % % preceding text line did not end with end-of-sentence punctuation -% % \ifnum\prevgraf=\@ne \penalty\widowpenalty -% % \else \penalty9999\relax -% % \fi -% % \else -% % \@nx\addpenalty{\@beginparpenalty}% -% % \fi -% % }% -% % \else -% % \def\thm@topbreak{\addpenalty\@beginparpenalty}% -% % \fi -% % } -% \end{macrocode} -% -% If arg \arg{2} is empty, this is an unnumbered environment; -% otherwise \arg{2} is the name of a counter. \arg{3} is descriptive -% name such as ``Theorem'' or ``Lemma''. Arg \arg{1} is the style -% function, for example \cs{th@plain}. -% \begin{macrocode} -\def\@thm#1#2#3{% - \ifhmode\unskip\unskip\par\fi - \normalfont - \trivlist -% \end{macrocode} -% Explicitly set plain style here, then override parts as necessary -% in the function provided as \arg{1}. -% \begin{macrocode} - \let\thmheadnl\relax - \let\thm@swap\@gobble -%<amsart> \let\thm@indent\noindent % no indent -%<amsart> \thm@headfont{\bfseries}% heading font bold -%<amsbook|amsproc> \let\thm@indent\indent % indent -%<amsbook|amsproc> \thm@headfont{\scshape}% heading font small caps - \thm@notefont{\fontseries\mddefault\upshape}% - \thm@headpunct{.}% add period after heading - \thm@headsep 5\p@ plus\p@ minus\p@\relax - \thm@space@setup - #1% style overrides - \@topsep \thm@preskip % used by thm head - \@topsepadd \thm@postskip % used by \@endparenv - \def\@tempa{#2}\ifx\@empty\@tempa - \def\@tempa{\@oparg{\@begintheorem{#3}{}}[]}% - \else - \refstepcounter{#2}% - \def\@tempa{\@oparg{\@begintheorem{#3}{\csname the#2\endcsname}}[]}% - \fi - \@tempa -} -% \end{macrocode} -% -% The internal function \cs{@restorelabelsep} starts out as a no-op. -% I don't think this is needed any more [mjd,2000/10/26]. -% \begin{macrocode} -\def\@restorelabelsep{\relax} -% \end{macrocode} -% -% This variation of the \cs{@thm} command is no longer needed. The -% variation \cs{@xthm} was commandeered for \cn{newtheorem} use. -% \begin{macrocode} -\let\@ythm\relax -% \end{macrocode} -% -% Init \cn{thmname} etc. -% \begin{macrocode} -\let\thmname\@iden \let\thmnote\@iden \let\thmnumber\@iden -% \end{macrocode} -% -% \begin{macro}{\@upn} -% The function \cs{\@upn} is used to force theorem numbers and -% similar elements to be upright even when the current font is -% italic. If a suitable italic font with upright numbers and -% punctuation is available, this function should be redefined to be a -% no-op. -% \begin{macrocode} -\providecommand\@upn{\textup} -% \end{macrocode} -% \end{macro} -% -% Definitions for theorem heads. -% \begin{macrocode} -\def\thmhead@plain#1#2#3{% -% \end{macrocode} -% To allow for the case where the thmname part is empty and the -% heading consists only of a number (don't laugh, we have -% examples from real mathematical manuscripts), we don't add the -% space at the beginning of thmnumber unless \arg{1} is nonempty. -% \begin{macrocode} - \thmname{#1}\thmnumber{\@ifnotempty{#1}{ }\@upn{#2}}% -% \end{macrocode} -% In thmnote we always add a leading space, i.e., assuming that -% at least one of the preceding parts will always be present. -% \begin{macrocode} - \thmnote{ {\the\thm@notefont(#3)}}} -\let\thmhead\thmhead@plain -% \end{macrocode} -% Swappedhead is for the case where the number precedes the -% word "Theorem". When the numbers fall on the left, like section -% numbers, AMS journal style calls for them to be lightface. We get -% this by invoking \cs{@secnumfont}. -% -% In handling the punctuation after the number we have to step -% delicately if we want to successfully handle cases where the -% theorem name is empty (this is very rare, yet it sometimes arises -% in practice). -% \begin{macrocode} -\def\swappedhead#1#2#3{% -%<amsthm> \thmnumber{#2}% -%<amsthm> \thmname{\@ifnotempty{#2}{~}#1}% -%<classes> \thmnumber{\@upn{\@secnumfont#2\@ifnotempty{#1}{.~}}}% -%<classes> \thmname{#1}% - \thmnote{ {\the\thm@notefont(#3)}}} -% \end{macrocode} -% -% A customized definition of \cs{th@plain} written for version 1.x of -% the \pkg{amsthm} package might refer to \cs{swappedhead@plain}; this -% gives it a definition for backward compatibility. -% \begin{macrocode} -\let\swappedhead@plain=\swappedhead -% \end{macrocode} -% -% In \cs{@begintheorem} \cn{thmheadnl} is called after the theorem -% head: maybe a newline, otherwise a no-op. -% \begin{macrocode} -\let\thmheadnl\relax -\let\thm@indent\noindent -\let\thm@swap\@gobble -% \end{macrocode} -% -% If argument \arg{2} is empty, then this is an unnumbered -% environment. Otherwise \arg{2} is a numbering command such as -% \cn{thexyz}. We use \cs{deferred@thm@head} instead of \cs{item} in -% order to allow line breaking in the optional note argument. -% \begin{macrocode} -\def\@begintheorem#1#2[#3]{% - \deferred@thm@head{\the\thm@headfont \thm@indent -% \end{macrocode} -% Changes to \cs{thmnumber} and \cs{thmnote} are local to the -% containing box. -% \begin{macrocode} - \@ifempty{#1}{\let\thmname\@gobble}{\let\thmname\@iden}% - \@ifempty{#2}{\let\thmnumber\@gobble}{\let\thmnumber\@iden}% - \@ifempty{#3}{\let\thmnote\@gobble}{\let\thmnote\@iden}% -% \end{macrocode} -% The \cs{thm@swap} function selects either \cs{swappedhead} or -% \cs{thmhead}. -% \begin{macrocode} - \thm@swap\swappedhead\thmhead{#1}{#2}{#3}% -% \end{macrocode} -% I can't think of any example where the after-head punctuation -% should be omitted so it seems correct not to use \cs{@addpunct} -% here. -% \begin{macrocode} - \the\thm@headpunct -% \end{macrocode} -% If this \emph{is} a newline (from a \cn{newtheoremstyle}), it -% gets lost if there isn't any text following the heading, since -% \cs{deferred@thm@head} packs the heading into an hbox with -% \cs{sbox}\cs{@labels}. Attempting to move the \cs{thmheadnl} -% outside the scope of \cs{deferred@thm@head} (just outside the -% ending brace below) results in no improvement if no text follows -% the heading, and where there is text, runs it in. Inserting a -% space following such a heading results in an extra blank line. -% [bnb, 2004/06/30] -% \begin{macrocode} - \thmheadnl % possibly a newline. - \hskip\thm@headsep - }% - \ignorespaces} -% \end{macrocode} -% -% \begin{macrocode} -\newskip\thm@headsep -\thm@headsep=5pt plus1pt minus1pt\relax -% \end{macrocode} -% -% \begin{macrocode} -\let\adjust@parskip@nobreak=\@nbitem -% \end{macrocode} -% -% \begin{macrocode} -\newtoks\dth@everypar -\dth@everypar={% - \@minipagefalse \global\@newlistfalse - \@noparitemfalse - \if@inlabel - \global\@inlabelfalse - \begingroup \setbox\z@\lastbox - \ifvoid\z@ \kern-\itemindent \fi - \endgroup - \unhbox\@labels - \fi - \if@nobreak \@nobreakfalse \clubpenalty\@M - \else \clubpenalty\@clubpenalty \everypar{}% - \fi -}% -% \end{macrocode} -% -% \begin{macrocode} -\def\deferred@thm@head#1{% - \if@inlabel \indent \par \fi % eject a section head if one is pending - \if@nobreak -% \end{macrocode} -% This case normally arises when a theorem follows immediately after -% a section head. Then we leave the below-section-head space instead -% of adding above-theorem space; but some adjustment of parskip is -% needed. -% \begin{macrocode} - \adjust@parskip@nobreak - \else - \addpenalty\@beginparpenalty - \addvspace\@topsep - \addvspace{-\parskip}% - \fi - \global\@inlabeltrue - \everypar\dth@everypar - \sbox\@labels{\normalfont#1}% - \ignorespaces -} -% \end{macrocode} -% -% \begin{macro}{\nonslanted} -% The \cn{nonslanted} command changes the current font to -% \cn{upshape} if it is \cn{itshape} or \cn{slshape}. This is used -% for document structure numbers that should be consistently upright -% in all contexts. -% \begin{macrocode} -\def\nonslanted{\relax -% \end{macrocode} -% Can't do a direct \cs{ifx} between \cs{f@shape} and \cs{itdefault} -% because the latter is \cs{long} (grumble grumble). -% \begin{macrocode} - \@xp\let\@xp\@tempa\csname\f@shape shape\endcsname - \ifx\@tempa\itshape\upshape - \else\ifx\@tempa\slshape\upshape\fi\fi} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\swapnumbers} -% The \cn{swapnumbers} command sets a switch \cs{thm@swap} that is -% used by \cn{newtheorem}. To conserve hash table we load -% \cs{thm@swap} with two uses; the first one is needed only in -% \cn{newtheorem} declarations and the second one is needed only in -% typesetting theorem environments. -% \begin{macrocode} -\def\swapnumbers{\edef\thm@swap{\if S\thm@swap N\else S\fi}} -\def\thm@swap{N}% -% \end{macrocode} -% \end{macro} -% -% \cs{@opargbegintheorem} not needed, \cs{@oparg} utility serves -% instead. -% \begin{macrocode} -\let\@opargbegintheorem\relax -% \end{macrocode} -% -% Except for the body font, default values are built into \cs{@thm}. -% \begin{macrocode} -\def\th@plain{% -%% \let\thm@indent\noindent % no indent -%% \thm@headfont{\bfseries}% heading font is bold -%% \thm@notefont{}% same as heading font -%% \thm@headpunct{.}% add period after heading -%% \let\thm@swap\@gobble -%% \thm@preskip\topsep -%% \thm@postskip\theorempreskipamount - \itshape % body font -} -% \end{macrocode} -% -% Theorem style `definition' is the same as `plain' except for the -% body font. -% \begin{macrocode} -\def\th@definition{% - \normalfont % body font -} -% \end{macrocode} -% -% Theorem style `remark' differs from `plain' in head font and body -% font. Also smaller spacing above and below for AMS classes only. -% \begin{macrocode} -\def\th@remark{% -%<amsart|amsthm> \thm@headfont{\itshape}% - \normalfont % body font -%<*amsthm> - \thm@preskip\topsep \divide\thm@preskip\tw@ - \thm@postskip\thm@preskip -%</amsthm> -} -% \end{macrocode} -% -% The standard definition of \cs{@endtheorem} is just -% \cs{endtrivlist}, but that doesn't automatically start a new -% paragraph, so we add \cs{@endpefalse} in order to ensure a new -% paragraph. This differs from the basic \latex/ behavior. -% \begin{macrocode} -\def\@endtheorem{\endtrivlist\@endpefalse } -% \end{macrocode} -% -% \begin{macro}{\newtheoremstyle} -% An easy way to make a not too complicated variant theorem style. -% Usage: -%\begin{verbatim} -% #1 -% \newtheoremstyle{NAME}% -% #2 #3 #4 -% {ABOVESPACE}{BELOWSPACE}{BODYFONT}% -% #5 #6 #7 #8 -% {INDENT}{HEADFONT}{HEADPUNCT}{HEADSPACE}% -% #9 -% {CUSTOM-HEAD-SPEC} -%\end{verbatim} -% \begin{macrocode} -\newcommand{\newtheoremstyle}[9]{% -% \end{macrocode} -% Empty or 0pt for \arg{5} is translated to \cs{noindent}. -% \begin{macrocode} - \@ifempty{#5}{\dimen@\z@skip}{\dimen@#5\relax}% - \ifdim\dimen@=\z@ -% \end{macrocode} -% \arg{4} is body font. Extra code could be included there if -% necessary. -% \begin{macrocode} - \toks@{#4\let\thm@indent\noindent}% - \else - \toks@{#4\def\thm@indent{\noindent\hbox to#5{}}}% - \fi -% \end{macrocode} -% Arg \arg{8} is a glue spec for the space after the head. As -% a proper glue spec for `normal interword space' is rather hard to -% write, we recognize an argument of |{ }| as a special case and -% translate internally to the necessary fontdimen equivalent. -% Furthermore, if \arg{8} consists entirely of \cn{newline}, then we -% will perform a line break after the theorem head instead of adding -% horizontal space. At the moment [1995/01/23] this is not perfectly -% well implemented because of complications with the way \latex/'s -% \cn{item} adds a heading to the vertical list; for best results -% there should not be anything (not even a blank line) after the -% |\begin{xxx}| command. -% \begin{macrocode} - \def\@tempa{#8}\ifx\space\@tempa -% \end{macrocode} -% Notice that we disregard stretch and shrink for labelsep = -% interwordspace. -% \begin{macrocode} - \toks@\@xp{\the\toks@ \thm@headsep\fontdimen\tw@\font\relax}% - \else - \def\@tempb{\newline}% - \ifx\@tempb\@tempa - \toks@\@xp{\the\toks@ \thm@headsep\z@skip - \def\thmheadnl{\newline}}% - \else - \toks@\@xp{\the\toks@ \thm@headsep#8\relax}% - \fi - \fi - \begingroup - \thm@space@setup - \@defaultunits\@tempskipa#2\thm@preskip\relax\@nnil - \@defaultunits\@tempskipb#3\thm@postskip\relax\@nnil - \xdef\@gtempa{\thm@preskip\the\@tempskipa - \thm@postskip\the\@tempskipb\relax}% - \endgroup - \@temptokena\@xp{\@gtempa - \thm@headfont{#6}\thm@headpunct{#7}% - }% - \@ifempty{#9}{% - \let\thmhead\thmhead@plain - }{% - \@namedef{thmhead@#1}##1##2##3{#9}% - \@temptokena\@xp{\the\@temptokena - \@xp\let\@xp\thmhead\csname thmhead@#1\endcsname}% - }% - \@xp\xdef\csname th@#1\endcsname{\the\toks@ \the\@temptokena}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\qed} -% Define \cn{qed} for end of proof. This command might -% occur in math mode, in a displayed equation, but it should never -% occur in inner math mode in ordinary paragraph text. -% \begin{macrocode} -\DeclareRobustCommand{\qed}{% - \ifmmode \mathqed - \else - \leavevmode\unskip\penalty9999 \hbox{}\nobreak\hfill -% \end{macrocode} -% The hbox is to prevent a line break within the \cn{qedsymbol} if it -% is defined to be something composite--- e.g., things like -% \verb"(Corollary 1.2) \openbox" as are occasionally done. -% \begin{macrocode} - \quad\hbox{\qedsymbol}% - \fi -} -% \end{macrocode} -% \end{macro} -% -% Setup for QED stack. We use a dedicated iterator macro \cs{qed@elt} -% instead of the generic \cs{@elt} because the \latex/ output routine -% is not safe against changes in \cs{@elt}. Therefore it is not safe -% to use \cs{@elt} for any processing that might trigger the output -% routine. Although this does not seem very likely when adding a QED -% symbol to a horizontal list, we did in fact get a bug report for -% this kind of failure. -% \begin{macrocode} -\let\QED@stack\@empty -\let\qed@elt\relax -% \end{macrocode} -% -% Puts a QED symbol on the stack: -% \begin{macrocode} -\newcommand{\pushQED}[1]{% - \toks@{\qed@elt{#1}}\@temptokena\expandafter{\QED@stack}% - \xdef\QED@stack{\the\toks@\the\@temptokena}% -} -% \end{macrocode} -% -% Pops the QED stack and prints the result. -% \begin{macrocode} -\newcommand{\popQED}{% - \begingroup\let\qed@elt\popQED@elt \QED@stack\relax\relax\endgroup -} -% \end{macrocode} -% -% \begin{macrocode} -\def\popQED@elt#1#2\relax{#1\gdef\QED@stack{#2}} -% \end{macrocode} -% -% Prints the current QED symbol and replaces the top entry on the -% stack with a null entry. -% \begin{macrocode} -\newcommand{\qedhere}{% - \begingroup \let\mathqed\math@qedhere - \let\qed@elt\setQED@elt \QED@stack\relax\relax \endgroup -} -% \end{macrocode} -% -% In case the \pkg{amsmath} or \pkg{amstext} packages are loaded, we -% need the following two tests. (Redundantly declaring them is -% harmless.) -% \begin{macrocode} -\newif\ifmeasuring@ -\newif\iffirstchoice@ \firstchoice@true -% \end{macrocode} -% -% \begin{macrocode} -\def\setQED@elt#1#2\relax{% - \ifmeasuring@ - \else \iffirstchoice@ \gdef\QED@stack{\qed@elt{}#2}\fi - \fi - #1% -} -% \end{macrocode} -% -% \begin{macro}{\mathqed} -% When a QED occurs inside a math formula, well, it is presumably a -% displayed equation. In order to find out where to place the QED -% symbol, we need to check what kind of equation structure we are in. -% -% \begin{macrocode} -\def\qed@warning{% - \PackageWarning{amsthm}{The \@nx\qedhere command may not work - correctly here}% -} -% \end{macrocode} -% -% \begin{macrocode} -\newcommand{\mathqed}{\quad\hbox{\qedsymbol}} -% \end{macrocode} -% -% The \cs{linebox@qed} function comes into play with the \opt{fleqn} -% option. -% \begin{macrocode} -\def\linebox@qed{\hfil\hbox{\qedsymbol}\hfilneg} -% \end{macrocode} -% \end{macro} -% -% Two large sections of code follow. One for \fn{amsmath} 2.0 and one -% for plain \latex/. -% \begin{macrocode} -\@ifpackageloaded{amsmath}{% -% \end{macrocode} -% -% \begin{macrocode} - \def\math@qedhere{% - \@ifundefined{\@currenvir @qed}{% - \qed@warning\quad\hbox{\qedsymbol}% - }{% - \@xp\aftergroup\csname\@currenvir @qed\endcsname - }% - } -% \end{macrocode} -% -% \begin{macrocode} - \def\displaymath@qed{% - \relax - \ifmmode - \ifinner \aftergroup\linebox@qed - \else - \eqno - \let\eqno\relax \let\leqno\relax \let\veqno\relax - \hbox{\qedsymbol}% - \fi - \else - \aftergroup\linebox@qed - \fi - } -% \end{macrocode} -% -% \begin{macrocode} - \@xp\let\csname equation*@qed\endcsname\displaymath@qed -% \end{macrocode} -% -% If the equation has both an equation number and a qed, we've got -% trouble, but we can provide half-way decent for the simple cases. -% \begin{macrocode} - \def\equation@qed{% - \iftagsleft@ - \hbox{\phantom{\quad\qedsymbol}}% - \gdef\alt@tag{% - \rlap{\hbox to\displaywidth{\hfil\qedsymbol}}% - \global\let\alt@tag\@empty - }% - \else - \gdef\alt@tag{% - \global\let\alt@tag\@empty - \vtop{\ialign{\hfil####\cr - \tagform@\theequation\cr - \qedsymbol\cr}}% - \setbox\z@ - }% - \fi - } -% \end{macrocode} -% -% \begin{macrocode} - \def\qed@tag{% - \global\tag@true \nonumber - &\omit\setboxz@h {\strut@ \qedsymbol}\tagsleft@false - \place@tag@gather - \kern-\tabskip - \ifst@rred \else \global\@eqnswtrue \fi \global\advance\row@\@ne \cr - } -% \end{macrocode} -% -% \begin{macrocode} - \def\split@qed{% - \def\endsplit{\crcr\egroup \egroup \ctagsplit@false \rendsplit@ - \aftergroup\align@qed - }% - } -% \end{macrocode} -% -% \begin{macrocode} - \def\align@qed{% - \ifmeasuring@ \tag*{\qedsymbol}% - \else \let\math@cr@@@\qed@tag - \fi - } - \@xp\let\csname align*@qed\endcsname\align@qed - \@xp\let\csname gather*@qed\endcsname\align@qed -% \end{macrocode} -% -% \begin{macrocode} -%% Needs some patching up for amsmath 1.2 -% \end{macrocode} -% -% \begin{macrocode} -}{% end of amsmath branch, start plain LaTeX branch -% \end{macrocode} -% -% The \cn{qedhere} handling for generic \latex/ classes (\cls{article}, -% \cls{book}) with the \pkg{amsthm} package (without \pkg{amsmath}) is -% fairly sketchy. When a qed symbol and an equation number are both -% applied to a single display, the results may not be entirely -% satisfactory, particularly when the \opt{fleqn} and/or \opt{leqno} -% options are used. [mjd,2000/01/17] -% -% As for \cs{math@qedhere}, it is expected to occur only via -% \cn{qedhere}, where the \cs{aftergroup} makes sense. -% \begin{macrocode} - \def\math@qedhere{% - \@ifundefined{\@currenvir @qed}{% - \qed@warning \aftergroup\displaymath@qed - }{% - \@xp\aftergroup\csname\@currenvir @qed\endcsname - }% - } -% \end{macrocode} -% -% The \cs{ifmmode} \cs{ifinner} case is expected to happen with the -% \opt{fleqn} option, where we have something like: -%\begin{verbatim} -%\hbox to\linewidth{\hbox{$...$}\hfil} -%\end{verbatim} -% In order to counteract the \cs{hfil} we must jump out two grouping -% levels. -% \begin{macrocode} - \def\displaymath@qed{% - \relax - \ifmmode - \ifinner \aftergroup\aftergroup\aftergroup\linebox@qed - \else - \eqno \def\@badmath{$$}% - \let\eqno\relax \let\leqno\relax \let\veqno\relax - \hbox{\qedsymbol}% - \fi - \else - \aftergroup\linebox@qed - \fi - } -% \end{macrocode} -% -% This definition is a fallback definition that places the qed and -% then the equation number, on the right-hand side. For \opt{leqno}, -% not so good; but then -% \begin{macrocode} - \@ifundefined{ver@leqno.clo}{% - \def\equation@qed{\displaymath@qed \quad}% - }{% - \def\equation@qed{\displaymath@qed}% - } -% \end{macrocode} -% -% If \pkg{amsmath} is not loaded, then we need to do some surgery -% on the \cn{[} macro. Normally it looks like this: -%\begin{verbatim} -% \[=macro: -% ->\relax \ifmmode \@badmath \else -% \ifvmode \nointerlineskip \makebox [.6\linewidth ]\fi $$\fi -%\end{verbatim} -% -% If arg 2 is \cs{m@th} when we make this test it indicates that the -% fleqn option is in effect. Perhaps try to do something there. -% \begin{macrocode} - \def\@tempa#1$#2#3\@nil{% - \def\[{#1$#2\def\@currenvir{displaymath}#3}% - }% - \expandafter\@tempa\[\@nil -} -% \end{macrocode} -% -% If an older version of \pkg{amsmath} is in use, we need to fall -% back to a simpler definition of \cs{math@qedhere}. -% \begin{macrocode} -\@ifpackageloaded{amstex}{% - \def\@tempa{TT}% -}{% - \@ifpackageloaded{amsmath}{% - \def\@tempb#1 v#2.#3\@nil{#2}% - \ifnum\@xp\@xp\@xp\@tempb\csname ver@amsmath.sty\endcsname v0.0\@nil - <\tw@ - \def\@tempa{TT}% - \else - \def\@tempa{TF}% - \fi - }{% - \def\@tempa{TF} - }% -} -\if\@tempa - \renewcommand{\math@qedhere}{\quad\hbox{\qedsymbol}}% -\fi -% \end{macrocode} -% -% The reason that we do not simply use the \cn{square} symbol from -% \fn{msam} for the open-box qed symbol is that we want to avoid -% requiring users to have the AMSFonts font package. And the \fn{lasy} -% \cn{Box} is too large. -% \begin{macrocode} -\newcommand{\openbox}{\leavevmode -% \end{macrocode} -% I think I got these numbers from measuring \fn{msam}'s \cn{square} -% but I forgot to make notes at the time. [mjd,1995/01/25] -% \begin{macrocode} - \hbox to.77778em{% - \hfil\vrule - \vbox to.675em{\hrule width.6em\vfil\hrule}% - \vrule\hfil}} -% \end{macrocode} -% -% \begin{macrocode} -\DeclareRobustCommand{\textsquare}{% - \begingroup \usefont{U}{msa}{m}{n}\thr@@\endgroup -} -% \end{macrocode} -% -% \begin{macrocode} -%<*classes> -\@ifclasswith{\@classname}{noamsfonts}{% - \providecommand{\qedsymbol}{\openbox}% -}{} -\providecommand{\qedsymbol}{\textsquare} -%</classes> -%<amsthm>\providecommand{\qedsymbol}{\openbox} -% \end{macrocode} -% -% The proof environment is never numbered, and has a \cn{qed} at the -% end, which makes it inconvenient to use \cn{newtheorem} for -% defining it. Also authors frequently need to substitute an -% alternative heading text (e.g.\ `Proof of Lemma 4.3') -% instead of the default `Proof'. For all these reasons we define the -% proof environment here instead of leaving it for authors to define. -% Text after the end of a proof, like that after the end of a theorem, -% begins a new paragraph. This differs from basic \latex/ behavior. -% [bnb, 1999/09/27] -% \begin{macrocode} -\newenvironment{proof}[1][\proofname]{\par - \pushQED{\qed}% - \normalfont \topsep6\p@\@plus6\p@\relax - \trivlist -%<amsbook|amsproc> \itemindent\normalparindent - \item[\hskip\labelsep -%<amsbook|amsproc> \scshape -%<amsart|amsthm> \itshape - #1\@addpunct{.}]\ignorespaces -}{% - \popQED\endtrivlist\@endpefalse -} -% \end{macrocode} -% Default for \cn{proofname}: -% \begin{macrocode} -\providecommand{\proofname}{Proof} -% \end{macrocode} -% -% For reference: -%\begin{verbatim} -% From: tycchow@math.mit.edu (Timothy Y. Chow) -% Subject: Suppressing theorem numbering in LaTeX -% Message-ID: <1994Aug11.234754.22523@galois.mit.edu> -% Date: Thu, 11 Aug 94 23:47:54 GMT -% To: tex-news@SHSU.EDU -% -% A friend of mine wants numbering of theorems, conjectures, and so on -% suppressed if there is only one of them in his article. In other words -% he wants "Conjecture 1" to appear as simply "Conjecture" if there is no -% Conjecture 2. What is the best way to go about doing this? -% ... -%\end{verbatim} -% Maybe something clever can be done to make the desired behavior -% happen automatically. Note that this would seem to be a general -% numbering problem rather than a theorem-specific one, because -% similar behavior would be desirable for appendixes: according to -% standard publishing practice, if there's only one it is titled just -% `Appendix', and if there are more than one they are titled -% `Appendix A', `Appendix B', and so on. -% -% \begin{macrocode} -%</amsthm|classes> -%<*classes> -% \end{macrocode} -% -% \subsection{Utility commands used with AMS author packages} -% -% \begin{macro}{\bb@skip} -% Skip to result in base-to-base distance from previous to next box. -% \begin{macrocode} -\def\bb@skip#1{% - \skip@#1\relax \advance\skip@-\prevdepth \advance\skip@-\baselineskip - \vskip\skip@} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\markleft} -% Basic \latex/ has \cn{markright} and \cn{markboth}, but sometimes -% it's necessary to change just the left running head. This macro -% completes the set. From the \pkg{altxext.sty} module of Klaus -% Lagally's \pkg{arabtex}. [bnb, 2004/03/25] -% \begin{macrocode} -\def\markleft#1{{\let\protect\noexpand - \let\label\relax \let\index\relax \let\glossary\relax - \expandafter\@markleft\@themark{#1}% - \mark{\@themark}}% - \if@nobreak\ifvmode\nobreak\fi\fi} -\def\@markleft#1#2#3{\gdef\@themark{{#3}{#2}}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DH} -% \begin{macro}{\dh} -% \begin{macro}{\DJ} -% \begin{macro}{\dj} -% The Icelandic thorn and eth and the Croatian barred D are part of -% the T1 font encoding, but aren't available in OT1. However, they -% are needed (rarely) in the author names or bibliographies. Provide -% emulations, using the thorn in \fn{msbm} or D's barred with a macron. -% The lowercase eth requires an \cs{edef} to access \fn{msbm} properly. -% Define it separately to permit checking for small caps. [bnb, 2004/04/05] -% \begin{macrocode} -\def\@tempa{} -\edef\@dh{% - \noexpand\mathhexbox{\hexnumber@\symAMSb}67} -\DeclareTextCommand{\dh}{OT1}{% - \edef\@tempb{\scdefault}% - \ifx\f@shape\@tempb - \leavevmode - \raisebox{-.8ex}{\makebox[\z@][l]{\hskip-.08em\accent"16\hss}}d% - \else - \@dh - \fi -} -\DeclareTextCommand{\DH}{OT1}{% - \leavevmode\raisebox{-.5ex}{\makebox[\z@][l]{\hskip-.07em\accent"16\hss}}D} -\DeclareTextCommand{\DJ}{OT1}{% - \leavevmode\raisebox{-.5ex}{\makebox[\z@][l]{\hskip-.07em\accent"16\hss}}D} -\DeclareTextCommand{\dj}{OT1}{% - \edef\@tempa{\f@shape}\edef\@tempb{\scdefault}% - \ifx\@tempa\@tempb - \leavevmode - \raisebox{-.75ex}{\makebox[\z@][l]{\hskip-.08em\accent"16\hss}}d% - \else - \leavevmode\raisebox{.02ex}{\makebox[\z@][l]{\hskip.1em\accent"16\hss}}d% - \fi} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \subsection{Hyphenation exceptions} -% Some common hyphenation exceptions, based on the listing in -% TUGboat vol 10, no 3, November 1989, pp.~336--341. Many words from -% the TUGboat list that seemed less likely to occur in mathematical -% text have been omitted because hyphenation exceptions use up memory -% (most versions of \tex/ currently have a limit of 307 on hyphenation -% exceptions; each added hyphenation exception uses up something like -% 2 extra words of main memory as well). The list of hyphenations for -% proper names could be expanded forever if room permitted; we -% restrict ourselves to a rather short, extremely arbitrary list. -% Note that the hyphenation rules of British English differ in some -% particulars from the US rules, so some of the hyphenations -% given below may need to be overridden for proper UK hyphenation. -% -% \begin{macrocode} -\hyphenation{acad-e-my acad-e-mies af-ter-thought anom-aly anom-alies -an-ti-deriv-a-tive an-tin-o-my an-tin-o-mies apoth-e-o-ses -apoth-e-o-sis ap-pen-dix ar-che-typ-al as-sign-a-ble as-sist-ant-ship -as-ymp-tot-ic asyn-chro-nous at-trib-uted at-trib-ut-able bank-rupt -bank-rupt-cy bi-dif-fer-en-tial blue-print busier busiest -cat-a-stroph-ic cat-a-stroph-i-cally con-gress cross-hatched data-base -de-fin-i-tive de-riv-a-tive dis-trib-ute dri-ver dri-vers eco-nom-ics -econ-o-mist elit-ist equi-vari-ant ex-quis-ite ex-tra-or-di-nary -flow-chart for-mi-da-ble forth-right friv-o-lous ge-o-des-ic -ge-o-det-ic geo-met-ric griev-ance griev-ous griev-ous-ly -hexa-dec-i-mal ho-lo-no-my ho-mo-thetic ideals idio-syn-crasy -in-fin-ite-ly in-fin-i-tes-i-mal ir-rev-o-ca-ble key-stroke -lam-en-ta-ble light-weight mal-a-prop-ism man-u-script mar-gin-al -meta-bol-ic me-tab-o-lism meta-lan-guage me-trop-o-lis -met-ro-pol-i-tan mi-nut-est mol-e-cule mono-chrome mono-pole -mo-nop-oly mono-spline mo-not-o-nous mul-ti-fac-eted mul-ti-plic-able -non-euclid-ean non-iso-mor-phic non-smooth par-a-digm par-a-bol-ic -pa-rab-o-loid pa-ram-e-trize para-mount pen-ta-gon phe-nom-e-non -post-script pre-am-ble pro-ce-dur-al pro-hib-i-tive pro-hib-i-tive-ly -pseu-do-dif-fer-en-tial pseu-do-fi-nite pseu-do-nym qua-drat-ic -quad-ra-ture qua-si-smooth qua-si-sta-tion-ary qua-si-tri-an-gu-lar -quin-tes-sence quin-tes-sen-tial re-arrange-ment rec-tan-gle -ret-ri-bu-tion retro-fit retro-fit-ted right-eous right-eous-ness -ro-bot ro-bot-ics sched-ul-ing se-mes-ter semi-def-i-nite -semi-ho-mo-thet-ic set-up se-vere-ly side-step sov-er-eign spe-cious -spher-oid spher-oid-al star-tling star-tling-ly sta-tis-tics -sto-chas-tic straight-est strange-ness strat-a-gem strong-hold -sum-ma-ble symp-to-matic syn-chro-nous topo-graph-i-cal tra-vers-a-ble -tra-ver-sal tra-ver-sals treach-ery turn-around un-at-tached -un-err-ing-ly white-space wide-spread wing-spread wretch-ed -wretch-ed-ly Eng-lish Euler-ian Feb-ru-ary Gauss-ian -Hamil-ton-ian Her-mit-ian Jan-u-ary Japan-ese Kor-te-weg -Le-gendre Mar-kov-ian Noe-ther-ian No-vem-ber Rie-mann-ian Sep-tem-ber} -% \end{macrocode} -% -% \subsection{Initialization} -% We define a function to do the normal calculations that we want for -% \cn{textheight} and \cn{textwidth} -% -% \begin{macro}{\calclayout} -% Subtract the height of the running heads: -% \begin{macrocode} -\def\calclayout{\advance\textheight -\headheight - \advance\textheight -\headsep -% \end{macrocode} -% We set \cn{oddsidemargin} and \cn{evensidemargin} to -% center the text on the page. -% \begin{macrocode} - \oddsidemargin\paperwidth - \advance\oddsidemargin -\textwidth - \divide\oddsidemargin\tw@ -% \end{macrocode} -% Now we subtract the default margin provided by standard DVI -% drivers. But first we make sure that the final margin will -% be at least .5 inch. -% \begin{macrocode} - \ifdim\oddsidemargin<.5truein \oddsidemargin.5truein \fi - \advance\oddsidemargin -1truein - \evensidemargin\oddsidemargin -% \end{macrocode} -% And we set \cn{topmargin} to get vertical centering as well. -% \begin{macrocode} - \topmargin\paperheight \advance\topmargin -\textheight - \advance\topmargin -\headheight \advance\topmargin -\headsep -% \end{macrocode} -% Height of running foot ignored: not present. -% \begin{macrocode} - \divide\topmargin\tw@ -% \end{macrocode} -% We provide a minimum of .5in (after compensating for the default -% margin---see next step). -% \begin{macrocode} - \ifdim\topmargin<.5truein \topmargin.5truein \fi -% \end{macrocode} -% Now subtract the default margin provided by standard DVI -% drivers. -% \begin{macrocode} - \advance\topmargin -1truein\relax -} -% \end{macrocode} -% \end{macro} -% -% Initialize the dimensions, page numbering, etc. For inhouse use, -% administrative stuff is isolated in separate files. -% \begin{macrocode} -%<amsart>\InputIfFileExists{amsart.cfg}{}{% -%<amsproc>\InputIfFileExists{amsproc.cfg}{}{% -%<amsbook>\InputIfFileExists{amsbook.cfg}{}{% - \calclayout % initialize - \pagenumbering{arabic}% - \pagestyle{headings}% - \thispagestyle{plain}% -} -% \end{macrocode} -% -% If we are in compatibility mode, add some backward compatibility -% stuff below. Otherwise quit here. -% \begin{macrocode} -\if@compatibility \else\endinput\fi -% \end{macrocode} -% -% Compensate for changed meaning of \cn{tiny}: -% \begin{macrocode} -\def\tiny{\Tiny} -% \end{macrocode} -% -% The macro \cn{defaultfont} was provided in version 1.1 of amsart; -% retained for compatibility as a synonym of \cn{normalfont}. Resets -% everything except for size. -% \begin{macrocode} -\def\defaultfont{\normalfont} -% \end{macrocode} -% -% Macro for making non-slanted numbers and punctuation in italic -% or slanted text. This is to avoid visual inconsistencies -% between numbers or parentheses in math and adjacent numbers or -% parentheses in text. -% \begin{macrocode} -\def\rom{\textup} -% \end{macrocode} -% -% For backward compatibility with version 1.1 of \cls{amsart}, we -% define \env{pf}, \env{pf*} environments. And undefine \cn{proof} -% just in case an existing document contains a \cn{newenvironment} or -% \cn{newcommand} for it, as that would now cause an error. -% \begin{macrocode} -\let\@newpf\proof \let\proof\relax \let\endproof\relax -\newenvironment{pf}{\@newpf[\proofname]}{\popQED\endtrivlist} -\newenvironment{pf*}[1]{\@newpf[#1]}{\popQED\endtrivlist} -% \end{macrocode} -% -% The usual \cn{endinput} to ensure that random garbage at the end of -% the file doesn't get copied by \fn{docstrip}. -% \begin{macrocode} -\endinput -%</classes> -% \end{macrocode} -% -% \changes{v1.2a}{1995/02/01}{Added global init for @secnumber} -% \changes{v1.2a}{1995/02/01}{Made psamsfonts option pass cmex10 to -% amsmath} -% \changes{v1.2a}{1995/02/01}{Added missing endpar after authors in -% amsbook @maketitle} -% -% \changes{v1.2b}{1995/02/20}{Improve handling of abstract} -% \changes{v1.2b}{1995/02/20}{Allow titlepage option for articles} -% \changes{v1.2b}{1995/02/20}{Suppress logo and copyright info for -% generic AMS classes} -% \changes{v1.2b}{1995/02/20}{Use `Date' instead of `Received by...' in -% the generic AMS classes} -% -% \changes{v2.13}{2002/12/06}{Added a warning for thanks inside author} -% -% \CheckSum{5682} -% \Finale diff --git a/Master/texmf-dist/source/latex/amslatex/amsdtx.dtx b/Master/texmf-dist/source/latex/amslatex/amsdtx.dtx deleted file mode 100644 index cd9bb13b2c2..00000000000 --- a/Master/texmf-dist/source/latex/amslatex/amsdtx.dtx +++ /dev/null @@ -1,1192 +0,0 @@ -%%% ==================================================================== -%%% @LaTeX-file{ -%%% filename = "amsdtx.dtx", -%%% version = "2.06", -%%% date = "2004/08/06", -%%% time = "12:18:49 EDT", -%%% checksum = "19929 1192 3506 39423", -%%% author = "Michael J. Downes, updated by David M. Jones", -%%% copyright = "Copyright 1996, 1999, 2004 -%%% 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, -%%% 201 Charles Street, -%%% Providence, RI 02904, -%%% USA", -%%% telephone = "401-455-4080 or (in the USA and Canada) -%%% 800-321-4AMS (321-4267)", -%%% FAX = "401-331-3842", -%%% email = "tech-support@ams.org (Internet)", -%%% codetable = "ISO/ASCII", -%%% keywords = "latex, amslatex, ams-latex, user documentation", -%%% supported = "yes", -%%% abstract = "This is the source for two document classes, amsdtx -%%% and amsldoc, used to produce AMS user documentation -%%% or technical documentation.", -%%% docstring = "The checksum field above contains a CRC-16 -%%% checksum as the first value, followed by the -%%% equivalent of the standard UNIX wc (word -%%% count) utility output of lines, words, and -%%% characters. This is produced by Robert -%%% Solovay's checksum utility.", -%%% } -%%% ==================================================================== -% -% \iffalse -% The following section of code makes this file self-printable. -%<*driver> -\NeedsTeXFormat{LaTeX2e} -\documentclass{amsdtx} -\newcommand{\rp}{\let\PBS\\\raggedright\let\\\PBS} - -\makeindex - -\CodelineIndex - -\begin{document} -\title{The \cls{amsldoc} and \cls{amsdtx} document classes} -\author{American Mathematical Society\\Michael Downes\\ - updated by David M. Jones} -\date{Version \fileversion, \filedate} -\hDocInput{amsdtx.dtx} -\PrintIndex -\end{document} -%</driver> -% \fi -% -%^^A If this file is printed by itself the \fileversion and \filedate -%^^A information will come from the file header rather than from the -%^^A \ProvidesClass command. See \hDocInput. -% \maketitle -% -% \tableofcontents -% -% \MakeShortVerb\| -% \section{Introduction} -% This file is the source for two documentclasses, \cls{amsldoc} -% (used for the \amslatex/ user's guide) and \cls{amsdtx} (used for -% printing AMS \fn{.dtx} files). The generic \cls{book} class is used -% as a base, but the \cls{amsdtx} class is modified to serve as an -% article-type class. This affects the form of documentation files -% mainly in the use of \cn{maketitle} and \cn{chapter}. -% -% \begin{table} -% \caption{Features of the \cls{amsldoc} and \cls{amsdtx} classes} -% \newcommand{\rpth}{\rp{.75}} -% \centering -% \begin{tabular}{lp{.65\columnwidth}} -% Command Name& Purpose\\ -% \hline -% \cn{cn}& \rp To print a user command name: \verb"\cn{title}"; leading -% backslash can be optionally included for control symbols: -% \verb"\cn{\%}". The \cn{cn} command works properly even in macro -% arguments (compare to, e.g., \cn{verb}\verb"'\newif'"). But beware -% of a fragile control symbol (are there any?) in a moving argument.\\ -% \cn{cs}& \rp `Control sequence': to print an internal command name, -% not intended for the end user\\ -% \cn{env}& \rp To print an environment name: \verb"\env{table}"\\ -% \cn{pkg}& \rp To print a package name: \verb"\pkg{eufrak}"\\ -% \cn{cls}& \rp To print a class name: \verb"\cls{book}"\\ -% \cn{opt}& \rp To print the name of a class or package option: -% \verb"\opt{twocolumn}"\\ -% \cn{bst}& \rp To print the name of a \bibtex/ style -% \verb"\bst{amsalpha}"\\ -% \cn{fn}& \rp To print a file name or font name: \verb"\fn{T1enc.def}", -% \verb"\fn{cmsy10}"\\ -% \cn{fnt}& \rp To print a font name: \verb"\fn{cmsy10}" \\ -% \cn{cnt}& \rp To print a counter name: \verb"\fn{topnumber}" \\ -% \cn{qc}& \rp To quote a single character: \verb"\qc{\%}"; -% this works properly for special characters, even in macro -% arguments, unlike e.g., \verb"\verb'%'"\\ -% \cn{latex/} etc.& \rp Convenient forms of \cn{LaTeX}, \cn{TeX}, -% \cn{BibTeX}, etc. that are easier to type and have a trailing slash -% to eliminate the following-space problem (without needing different -% markup in different contexts) -% \end{tabular} -% \end{table} -% -% \StopEventually{} -% -% Standard starting pieces. (Note: the reason each \cn{ProvidesClass} -% command is placed on a line by itself, with separate begin and end -% guards for docstripping, is to make automatic update of file date -% and version slightly easier and more robust.) -% \begin{macrocode} -\NeedsTeXFormat{LaTeX2e}% LaTeX 2.09 can't be used (nor non-LaTeX) -[1995/06/01]% LaTeX date must be June 1995 or later -%<*amsldoc> -\ProvidesClass{amsldoc}[2004/08/06 v2.06] -%</amsldoc> -%<*amsdtx> -\ProvidesClass{amsdtx}[2004/08/06 v2.06] -%</amsdtx> -% \end{macrocode} -% -% \section{Implementation} -% Start with the generic book class as a base. -% \begin{macrocode} -\DeclareOption*{\PassOptionsToClass{\CurrentOption}{book}} -\ProcessOptions -\LoadClass{book} -% \end{macrocode} -% -% \begin{macrocode} -\IfFileExists{url.sty}{% - \RequirePackage{url}\relax - \@gobble -}{% - \@firstofone -} -{ - \DeclareRobustCommand{\url}[1]{% - \def\@tempa{#1}% - \texttt{\urlsetup $\expandafter\strip@prefix\meaning\@tempa$}% - }% - \def\urlsetup{% - \check@mathfonts \textfont\@ne\the\font \textfont\z@\the\font - \urlfix +\urlfix\=\urlfix\:\urlfix\-\urlfix\.\urlfix\,\urlfix\;% - \urlbreak\&\urlbreak\/\urlbreak\?% - }% - \def\urlbreak#1{% - \mathcode`#1="8000 - \begingroup \lccode`\~=`#1 \lowercase{\endgroup \edef~}% - {\mathchar\number`#1\penalty\hyphenpenalty}% - }% - \def\urlfix#1{% - \mathcode`#1=`#1\relax - }% -} -% \end{macrocode} -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% \begin{macrocode} -\providecommand{\qq}[1]{\textquotedblleft#1\/\textquotedblright} -\providecommand{\mdash}{\textemdash\penalty\exhyphenpenalty} -\providecommand{\ndash}{\textendash\penalty\exhyphenpenalty} -% \end{macrocode} -% -% \begin{macrocode} -\let\@xp\expandafter -% \end{macrocode} -% \section{Indexing primitives} -% -% Unlike \pkg{amsdtx}, \pkg{amsldoc} doesn't load the \pkg{doc} -% package, so we need to provide the following logical names. The -% values are consistent with \fn{makeindex}'s default conventions. -% \begin{macrocode} -%<*amsldoc> -\def\actualchar{@} -\def\quotechar{"} -\def\levelchar{!} -\def\encapchar{|} -\def\verbatimchar{+} -% \end{macrocode} -% We also need the \cs{ifcodeline@index} switch. -% \begin{macrocode} -\newif\ifcodeline@index -%</amsldoc> -% \end{macrocode} -% -% \begin{macro}{\autoindex} -% When generating a codeline index, this encapsulates the page -% number in italics. -% \begin{macrocode} -\newcommand*{\autoindex}[1]{% - \index{#1\ifcodeline@index\encapchar usage\fi}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ntt} -% To avoid font substitution warnings we make the tt font always -% print in the normal weight and shape. -% \begin{macrocode} -\newcommand{\ntt}{\normalfont\ttfamily} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\indexcs} -% Index a control sequence without printing it. Note -% non-long. The \cs{@nobslash} strips off an optional leading -% backslash before passing the control sequence name to -% \cs{@indexcs}. This means that |\indexcs{\cs}| and -% |\indexcs{cs}| produce the same index entry. -% \begin{macrocode} -\newcommand*{\indexcs}[1]{% - \@xp\@xp\@xp\@indexcs\@xp\@nobslash\string#1\@nil -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@indexcs} -% Given |cs| as an argument, this writes something like -% |cs@\verb"*+\cs+| to the \fn{.idx} file (or |cs=\verb!*+\cs+| if -% using \fn{doc.sty}). -% \begin{macrocode} -\def\@indexcs#1\@nil{% - \autoindex{#1\actualchar - \string\verb\quotechar*\verbatimchar - \@xp\@bothoftwo\string\ #1\@empty - \verbatimchar - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@bothoftwo} -% This has the effect of removing spaces before each of the -% arguments. In particular, it removes the space generated by -% \verb*+\string\ + above. -% \begin{macrocode} -\def\@bothoftwo#1#2{#1#2} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\category@index} -% \begin{macrocode} -\def\category@index#1#2{% - {\ntt#2}% - \@category@index{#1}{#2}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@category@index} -% \begin{macrocode} -\def\@category@index#1#2{% - \autoindex{% - #2\actualchar\string\texttt{#2}% - \ifx\@nil#1\@nil\else\space#1\fi - }% -} -% \end{macrocode} -% \end{macro} -% -% Some functions to support \cn{cn} etc. For most of these commands -% we don't really want them to be \cs{long}! But in some early -% releases of \LaTeXe\ the \verb'*' form of \cn{newcommand} was not -% yet available. -% -% We use the name \cn{bslchar} instead of \cn{bslash} to avoid -% potential conflict with the \pkg{doc} package \cn{bslash} command. -% Unlike \cn{bslash}, \cn{bslchar} survives unlimited -% writing/expansion because it is a chardef. -% \begin{macrocode} -\chardef\bslchar=`\\ % p. 424, TeXbook -\newcommand{\addbslash}{\expandafter\@addbslash\string} -\def\@addbslash#1{\bslchar\@nobslash#1} -\newcommand{\nobslash}{\expandafter\@nobslash\string} -\def\@nobslash#1{\ifnum`#1=\bslchar\else#1\fi} -% \end{macrocode} -% -% \begin{macro}{\@boxorbreak} -% Start up for a \cn{cs} or \cn{cn} command, adds an \cs{hbox} if in -% math, or an allowbreak penalty if the preceding item is not a space. -% (In case two such commands are used side-by-side.) -% \begin{macrocode} -\def\@boxorbreak{% - \leavevmode - \ifmmode\hbox\else\ifdim\lastskip=\z@\penalty9999 \fi\fi -} -% \end{macrocode} -% \end{macro} -% -% Control sequence. The function \cn{addbslash} makes this command -% also usable for some special control sequences like \cn{\%} \cn{\}} -% \cn{\{}: instead of writing |\cs{%}| which doesn't work, you can -% write |\cs{\%}|. -% \begin{macrocode} -\DeclareRobustCommand{\cs}[1]{% - \@boxorbreak{% - \ntt - \addbslash#1\@empty - \@xp\@xp\@xp\@indexcs\@xp\@nobslash\string#1\@nil - }% -} -% \end{macrocode} -% -% Allow distinguishing non-private `command names' that will be -% visible to the user from internal (mostly private) `control -% sequences'. -% \begin{macrocode} -\let\cn\cs -% \end{macrocode} -% -% The following items should not normally appear in math mode so they -% don't need to call \cs{@boxorbreak}. -% -% \latex/ documentclass name. -% \begin{macrocode} -\DeclareRobustCommand{\cls}{\category@index{class}} -% \end{macrocode} -% -% \latex/ package name. -% \begin{macrocode} -\DeclareRobustCommand{\pkg}{\category@index{package}} -% \end{macrocode} -% -% \latex/ option name. -% \begin{macrocode} -\DeclareRobustCommand{\opt}{\category@index{option}} -% \end{macrocode} -% -% Environment name. -% \begin{macrocode} -%<amsdtx>\DeclareRobustCommand{\env}[1]{{\ntt#1}\SpecialEnvIndex{#1}} -%<amsldoc>\DeclareRobustCommand{\env}{\category@index{environment}} -% \end{macrocode} -% -% File name. -% \begin{macrocode} -\DeclareRobustCommand{\fn}{\category@index{}} -% \end{macrocode} -% -% \bibtex/ style. -% \begin{macrocode} -\DeclareRobustCommand{\bst}{\category@index{\string\BibTeX{} style}} -% \end{macrocode} -% -% \begin{macrocode} -\DeclareRobustCommand{\cnt}{\category@index{counter}} -\DeclareRobustCommand{\fnt}{\category@index{font}} -% \end{macrocode} -% -% With long command names or file names we sometimes prefer to allow -% hyphenation in the tt font (in combination with suitable -% \cn{hyphenation} statements for individual documents). To make this -% work we must turn off the feature of \latex/ that disables the -% hyphenchar of the tt fonts. -% -% The method shown here depends on the assumption that OT1 encoding -% will be used for the tt fonts. An encoding-independent method would -% be more awkward: You'd have to explicitly load the relevant -% fonts, let's say by using \cn{AtBeginDocument}, and undo the -% hyphenchar change individually for each font. -% -% Instead we force loading, or possibly reloading (depending on the -% preload options used locally for creating the \latex/ format file), -% of the \fn{OT1/cmtt} fd file, and then clear the macro -% \cs{OT1+cmtt} which contains code to execute whenever a font of -% this family is first loaded. The default value is to turn off the -% hyphenchar, and that's what we don't want. -% -% This method is not especially palatable but other methods that -% don't involve loading the fd file are significantly less reliable. -% \begin{macrocode} -\def\allowtthyphens{\begingroup - \fontencoding{OT1}\fontfamily{cmtt}% -% \end{macrocode} -% Undefine the csname that \cs{try@load@fontshape} tests to determine -% whether the fd file needs loading. Then call -% \cs{try@load@fontshape}. Then we can remove the `turn off -% hyphenation' code, which as it happens resides in the same csname -% that was tested. -% \begin{macrocode} - \expandafter\let\csname OT1+cmtt\endcsname\relax - \try@load@fontshape - \endgroup - \expandafter\let\csname OT1+cmtt\endcsname\@empty -} -% \end{macrocode} -% -% We allow some slop at the right margin because we have some -% long control sequence names and verbatim text to deal with. Also -% ignore underfull hboxes and vboxes unless they are really bad. -% \begin{macrocode} -\hfuzz2pc -\vbadness9999 \hbadness5000 -% \end{macrocode} -% -% \begin{macrocode} -\def\AmS{{\protect\usefont{OMS}{cmsy}{m}{n}% - A\kern-.1667em\lower.5ex\hbox{M}\kern-.125emS}} -% \end{macrocode} -% -% \begin{macrocode} -\def\latex/{{\protect\LaTeX}} -\def\amslatex/{{\protect\AmS-\protect\LaTeX}} -\def\tex/{{\protect\TeX}} -\def\amstex/{{\protect\AmS-\protect\TeX}} -\def\bibtex/{{Bib\protect\TeX}} -% \end{macrocode} -% -% \cn{makeindex} command is already used for other purposes. -% \begin{macrocode} -\def\makeindx/{MakeIndex} -% \end{macrocode} -% -% Don't allow a break after the hyphen: -% \begin{macrocode} -\def\xypic/{XY\mbox{-}pic} -% \end{macrocode} -% -% \begin{macrocode} -\newcommand{\Textures}{\textit{Textures}} -% \end{macrocode} -% -% `Meta' macro. -% \begin{macrocode} -\def\<#1>{\textit{$\langle$#1\/$\rangle$}} -% \end{macrocode} -% -% Reduce itemsep in lists. -% \begin{macrocode} -\def\@listi{% - \leftmargin\leftmargini - \topsep 3\p@ \@plus2\p@ \@minus\p@ - \parsep \p@ \@plus\p@ \itemsep\parsep -} -\let\@listI\@listi -\@listi -\def\@listii{% - \leftmargin\leftmarginii - \labelwidth\leftmarginii \advance\labelwidth-\labelsep - \topsep\p@\@plus\p@ \@minus\p@ - \parsep\z@skip \itemsep\z@skip -} -\def\@listiii{% - \leftmargin\leftmarginiii - \labelwidth\leftmarginiii \advance\labelwidth-\labelsep - \topsep\z@skip \parsep\z@skip \itemsep\z@skip -} -% \end{macrocode} -% -% An environment to encapsulate remarks relevant to old versions but -% not essential for the current version. -% \begin{macrocode} -\newenvironment{histnote}{% - \trivlist\item[\hspace{\labelsep}\bfseries Historical Note:]% -}{% - \endtrivlist -} -% \end{macrocode} -% -% Turn off \cs{autoindex} during \cn{tableofcontents} or similar. -% \begin{macrocode} -\def\@starttoc#1{\begingroup - \let\autoindex\@gobble - \makeatletter - \@input{\jobname.#1}\if@filesw - \expandafter\newwrite\csname tf@#1\endcsname - \immediate\openout - \csname tf@#1\endcsname \jobname.#1\relax - \fi \global\@nobreakfalse \endgroup} -% \end{macrocode} -% -% Make glossary commands a no-op for the moment. [mjd,1994/10/03] -% Provide a \cn{secref} command for section references. -% \begin{macrocode} -%<*amsldoc> -\newcommand{\gloss}[1]{} -%</amsldoc> -\newcommand*{\secref}[1]{\S\ref{#1}} -% \end{macrocode} -% -% We can write |\qc{\%}| to quote a single -% character in situations where |\verb"%"| would not work, mainly -% when text is read as a macro argument (e.g., footnotes). -% \begin{macrocode} -\newcommand{\qc}[1]{}% check for prior definition -\edef\qc#1{\noexpand\protect\expandafter\noexpand\csname qc \endcsname - \noexpand\protect#1} -% \end{macrocode} -% For this function the first argument is \cn{protect} and just needs -% to be discarded. The method for removing a leading backslash is to -% turn off \cs{escapechar}; this is more forgiving of variations like -% |\qc{$}|. If the argument is `|\ |' we print a cmtt visible-space -% character, \qc{\ }. -% \begin{macrocode} -\@namedef{qc }#1#2{\begingroup\ntt - \ifx\ #2\char`\ \else\escapechar\m@ne\string#2\fi\endgroup} -% \end{macrocode} -% Declare a few character names to avoid e.g., indexing difficulties. -% \begin{macrocode} -\DeclareRobustCommand{\qcat}{\qc\@}% -\DeclareRobustCommand{\qcamp}{\qc\&}% -\DeclareRobustCommand{\qcbang}{\qc\!}% -% \end{macrocode} -% -% \begin{macro}{\arg} -% Change \cn{arg} to print a macro argument number: -% \begin{macrocode} -\DeclareRobustCommand{\arg}[1]{{\ntt\##1}} -% \end{macrocode} -% \end{macro} -% -% We need to emulate the \pkg{amsthm} \cn{qedsymbol} for the -% \amslatex/ user's guide. -% \begin{macrocode} -%<*amsldoc> -\newcommand{\openbox}{\leavevmode - \hbox to.77778em{% - \hfil\vrule - \vbox to.675em{\hrule width.6em\vfil\hrule}% - \vrule\hfil}} -\newcommand{\qedsymbol}{\openbox} -%</amsldoc> -% \end{macrocode} -% -% Logical markup for e-mail address: -% \begin{macrocode} -%<amsldoc>\def\mail{\texttt} -% \end{macrocode} -% -% Shorthand for indexing: -% \begin{macrocode} -%<*amsldoc> -\def\*#1{\def\@tempa{#1}\def\@tempb{*}% - \ifx\@tempa\@tempb \expandafter\index - \else #1\index{#1}\fi} -%</amsldoc> -% \end{macrocode} -% -% Non-indexed \cn{cn} (maybe call this |\cn*|?) -% \begin{macrocode} -\def\ncn#1{{\let\index\@gobble\cn{#1}}} -% \end{macrocode} -% Indexing difficulties with !, @. -% \begin{macrocode} - -\DeclareRobustCommand{\cnbang}{% - \ncn{\!}\index{"!@{\ntt\bslchar\qcbang}}} -\DeclareRobustCommand{\cnat}{% - \ncn{\!}\index{"@@{\ntt\bslchar\qcat}}} -% \end{macrocode} -% -% Shorthand for a discouraged, but not forbidden, line break: -% \begin{macrocode} -\def\5{\penalty500 } -% \end{macrocode} -% -% Environment for error message examples. Use \cs{meaning} to allow -% reading the error message text as an ordinary brace-delimited arg -% but still be able to print embedded braces; and first change the -% backslash catcode to prevent extra spaces after control words. -% \begin{macrocode} -%<*amsldoc> -\newenvironment{error}{% - \begingroup\catcode`\\=12 \expandafter\endgroup\errora -}{% - \endtrivlist -} -% \end{macrocode} -% -% \begin{macrocode} -\newcommand{\errora}[1]{% - \trivlist - \item[\hskip\labelsep\errorbullet\enspace - \ntt\frenchspacing\def\@tempa{#1}% - \expandafter\strip@prefix\meaning\@tempa]\leavevmode\par -} -% \end{macrocode} -% \cs{errorbullet} is just an attempt at a simple graphic device that -% doesn't require any special fonts. -% \begin{macrocode} -\newcommand{\errorbullet}{\rule[-.5pt]{2.5pt}{7.5pt}% - \rule[-.5pt]{5pt}{2.5pt}\kern-2.5pt% - \rule[4.5pt]{2.5pt}{2.5pt}} -%</amsldoc> -% \end{macrocode} -% A couple of subheading commands: -% \begin{macrocode} -\newcommand{\errexa}{\par\noindent\textit{Example}:\ } -\newcommand{\errexpl}{\par\noindent\textit{Explanation}:\ } -% \end{macrocode} -% -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \section{\cls{amsldoc} style modifications for sectioning commands} -% The following section deals with book commands (part, chapter, -% frontmatter, \dots). -% \begin{macrocode} -%<*amsldoc> -% \end{macrocode} -% -% Modifications of sectioning commands from \fn{book.cls}, mostly -% reducing font sizes and vertical spacing. -% \begin{macrocode} -\renewcommand\frontmatter{\clearpage - \@mainmatterfalse\pagenumbering{roman}} -\renewcommand\mainmatter{\clearpage - \@mainmattertrue\pagenumbering{arabic}} -\renewcommand\backmatter{\clearpage \@mainmatterfalse} -% \end{macrocode} -% -% \begin{macrocode} -\renewcommand\part{\clearpage - \thispagestyle{plain}% - \if@twocolumn - \onecolumn - \@tempswatrue - \else - \@tempswafalse - \fi - \hbox{}\vfil - \secdef\@part\@spart} -% \end{macrocode} -% -% \begin{macrocode} -\def\@part[#1]#2{% - \ifnum \c@secnumdepth >-2\relax - \refstepcounter{part}% - \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}% - \else - \addcontentsline{toc}{part}{#1}% - \fi - \markboth{}{}% - {\centering - \interlinepenalty \@M - \reset@font - \ifnum \c@secnumdepth >-2\relax - \Large\bfseries \partname~\thepart - \par - \vskip 20\p@ - \fi - \Large \bfseries #2\par}% - \@endpart} -% \end{macrocode} -% -% \begin{macrocode} -\def\@spart#1{% - {\centering - \interlinepenalty \@M - \reset@font - \Large \bfseries #1\par}% - \@endpart} -\def\@endpart{\vfil\newpage - \if@twoside - \hbox{}% - \thispagestyle{empty}% - \newpage - \fi - \if@tempswa - \twocolumn - \fi} -%</amsldoc> -% \end{macrocode} -% -% \begin{macrocode} -\renewcommand\chapter{\par \@afterindentfalse - \secdef\@chapter\@schapter} -\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne - \if@mainmatter - \refstepcounter{chapter}% - \typeout{\@chapapp\space\thechapter.}% - \addcontentsline{toc}{chapter}% - {\protect\numberline{\thechapter}#1}% - \else - \addcontentsline{toc}{chapter}{#1}\fi - \else - \addcontentsline{toc}{chapter}{#1} - \fi - \chaptermark{#1}% - \addtocontents{lof}{\protect\addvspace{10\p@}}% - \addtocontents{lot}{\protect\addvspace{10\p@}}% - \if@twocolumn - \@topnewpage[\@makechapterhead{#2}]% - \else - \@makechapterhead{#2}% - \@afterheading - \fi} -% \end{macrocode} -% -% \begin{macrocode} -\def\@makechapterhead#1{% - \vspace{1.5\baselineskip}% - {\parindent \z@ \raggedright \reset@font - \ifnum \c@secnumdepth >\m@ne - \large\bfseries \@chapapp\space\thechapter - \par\nobreak - \vskip.5\baselineskip\relax - \fi - #1\par\nobreak - \vskip\baselineskip - }} -\def\@schapter#1{\if@twocolumn - \@topnewpage[\@makeschapterhead{#1}]% - \else - \@makeschapterhead{#1}% - \@afterheading - \fi} -\def\@makeschapterhead#1{% - \vspace*{1.5\baselineskip}% - {\parindent \z@ \raggedright - \reset@font - \large \bfseries #1\par\nobreak - \vskip\baselineskip - }} -% \end{macrocode} -% -% Add Donald Arseneau's \cs{@removefromreset}; used to decouple the -% footnote counter from \cn{chapter}, since chapters here do not -% automatically start on a new page. [bnb, 1999/09/27] -% \begin{verbatim} -% \@removefromreset{FOO}{BAR} : Removes counter FOO from the list of -% counters \cl@BAR to be reset when counter BAR -% is stepped. The opposite of \@addtoreset. -% \end{verbatim} -% \begin{macrocode} -\def\@removefromreset#1#2{\let\@tempb\@elt - \expandafter\let\expandafter\@tempa\csname c@#1\endcsname - \def\@elt##1{\expandafter\ifx\csname c@##1\endcsname\@tempa\else - \noexpand\@elt{##1}\fi}% - \expandafter\edef\csname cl@#2\endcsname{\csname cl@#2\endcsname}% - \let\@elt\@tempb} -\@removefromreset{footnote}{chapter} -% \end{macrocode} -% -% Change running head font to \cn{footnotesize}, nonslanted. -% \begin{macrocode} -\def\ps@headings{% - \let\@oddfoot\@empty\let\@evenfoot\@empty - \def\@evenhead{\thepage\hfil{\footnotesize\leftmark{}{}}}% - \def\@oddhead{{\footnotesize\rightmark{}{}}\hfil\thepage}% - \let\@mkboth\markboth - \def\chaptermark##1{% - \markboth {\uppercase{\ifnum \c@secnumdepth >\m@ne - \if@mainmatter - \@chapapp\ \thechapter. \ \fi - \fi - ##1}}{}}% - \def\sectionmark##1{% - \markright {\uppercase{\ifnum \c@secnumdepth >\z@ - \thesection. \ \fi - ##1}}}} -% \end{macrocode} -% -% -% \section{\cls{amsdtx} style modifications for sectioning commands} -% These definitions for \cn{maketitle} are from \fn{article.cls}. -% \begin{macrocode} -%<*amsdtx> -\renewcommand\maketitle{\par - \begingroup - \renewcommand\thefootnote{\fnsymbol{footnote}}% - \def\@makefnmark{\hbox to\z@{$\m@th^{\@thefnmark}$\hss}}% - \long\def\@makefntext##1{\parindent 1em\noindent - \hbox to1.8em{\hss$\m@th^{\@thefnmark}$}##1}% - \if@twocolumn - \ifnum \col@number=\@ne - \@maketitle - \else - \twocolumn[\@maketitle]% - \fi - \else - \newpage - \global\@topnum\z@ % Prevents figures from going at top of page. - \@maketitle - \fi - \thispagestyle{plain}\@thanks - \endgroup - \setcounter{footnote}{0}% - \let\thanks\relax - \let\maketitle\relax\let\@maketitle\relax - \gdef\@thanks{}\gdef\@author{}\gdef\@title{}} -% -\def\@maketitle{% - \newpage - \null - \vskip 2em% - \begin{center}% - {\LARGE \@title \par}% - \vskip 1.5em% - {\large - \lineskip .5em% - \begin{tabular}[t]{c}% - \@author - \end{tabular}\par}% - \vskip 1em% - {\large \@date}% - \end{center}% - \par -% \end{macrocode} -% Put the title into both running heads. -% \begin{macrocode} - \uppercase\expandafter{\expandafter\toks@\expandafter{\@title}}% - \edef\@tempa{\noexpand\markboth{\the\toks@}{\the\toks@}}% - \@tempa - \vskip 1.5em} -%</amsdtx> -% \end{macrocode} -% -% Edit the table of contents. -% \begin{macrocode} -%<*amsdtx> -\renewcommand\tableofcontents{% - \if@twocolumn - \@restonecoltrue\onecolumn - \else - \@restonecolfalse - \fi - \subsection*{\contentsname}% - \@starttoc{toc}% - \if@restonecol\twocolumn\fi - } -%</amsdtx> -% \end{macrocode} -% -% Edit the sectioning commands. -% \begin{macrocode} -\renewcommand\section{\@startsection {section}{1}{\z@}% - {-.6\baselineskip \@plus -3\p@}% - {.4\baselineskip} -%<amsdtx> {\reset@font\Large\bfseries}} -%<amsldoc> {\reset@font\normalsize\bfseries}} -\renewcommand\subsection{\@startsection{subsection}{2}{\z@}% - {-.3\baselineskip\@plus -2\p@}% - {.2\baselineskip}% -%<amsdtx> {\reset@font\large\bfseries}} -%<amsldoc> {\reset@font\normalsize\bfseries}} -\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% - {-.2\baselineskip\@plus -2\p@}% - {.2\baselineskip}% - {\reset@font\normalsize\bfseries}} -% \end{macrocode} -% Change index environment to turn off \cn{autoindex}. -% \begin{macrocode} -\renewenvironment{theindex}{% - \if@twocolumn \@restonecolfalse \else \@restonecoltrue \fi - \columnseprule \z@ \columnsep 35\p@ - \let\autoindex\@gobble -%<amsdtx> \twocolumn[\section*{\indexname}]% -%<amsldoc> \twocolumn[\@makeschapterhead{\indexname}]% - \addcontentsline{toc}{chapter}{\indexname}% - \@mkboth{\uppercase{\indexname}}{\uppercase{\indexname}}% - \thispagestyle{plain}\parindent\z@ - \parskip\z@ \@plus .3\p@\relax - \let\item\@idxitem -}{% - \if@restonecol\onecolumn\else\clearpage\fi -} -% \end{macrocode} -% -% Take out \cn{thechapter} from \cn{thesection}. -% \begin{macrocode} -%<amsdtx>\renewcommand{\thesection}{\arabic{section}} -% \end{macrocode} -% -% Change the style of captions slightly. Also incorporate some -% caption improvements from Donald Arseneau (\fn{comp.text.tex}, 11 -% Oct 1994). -% \begin{macrocode} -\long\def\@makecaption#1#2{% - \addvspace\abovecaptionskip - \begingroup - \countdef\@parcycles=8 % local count register - \@parcycles\z@ - \@setpar{\advance\@parcycles\@ne \ifnum\@parcycles>999 - \@@par\@parcycles\z@\fi - \ifhmode \unskip\hskip\parfillskip\penalty-\@M\fi}% - \@hangfrom{\textbf{#1.} }\vadjust{\penalty\m@ne}#2% - \endgroup - \ifhmode\unpenalty\fi\par - \ifnum\lastpenalty=\m@ne % only one line in the caption - \unpenalty \setbox\@tempboxa\lastbox - \nointerlineskip - \hbox to\hsize{\hfill\unhbox\@tempboxa\unskip\hfill}% - \fi - \nobreak\vskip\belowcaptionskip -} -% \end{macrocode} -% For table captions, assume top captions and so put space below the -% caption rather than above: -% \begin{macrocode} -\renewenvironment{table}{% - \belowcaptionskip\abovecaptionskip \abovecaptionskip\z@skip - \@float{table}% -}{% - \end@float -} -\renewenvironment{table*}{% - \belowcaptionskip\abovecaptionskip \abovecaptionskip\z@skip - \@dblfloat{table}% -}{% - \end@dblfloat -} -% \end{macrocode} -% -% \section{Float placement parameters} -% These control the placing of floating objects like tables and -% figures. The values here, which are much more tolerant than the -% \latex/ defaults, are more or less copied from \fn{amsclass.dtx}. -% \begin{macrocode} -\setcounter{topnumber}{4}\setcounter{bottomnumber}{4} -\setcounter{totalnumber}{4}\setcounter{dbltopnumber}{4} -\renewcommand{\topfraction}{.97}\renewcommand{\bottomfraction}{.97} -\renewcommand{\textfraction}{.03}\renewcommand{\floatpagefraction}{.9} -\renewcommand{\dbltopfraction}{.97} -\renewcommand{\dblfloatpagefraction}{.9} -\setlength{\floatsep}{8pt plus6pt} -\setlength{\textfloatsep}{10pt plus8pt} -\setlength{\intextsep}{8pt plus6pt} -\setlength{\dblfloatsep}{8pt plus6pt} -\setlength{\dbltextfloatsep}{10pt plus8pt} -\setlength{\@fptop}{0pt}\setlength{\@fpsep}{8pt}% -\setlength{\@fpbot}{0pt plus 1fil} -\setlength{\@dblfptop}{0pt}\setlength{\@dblfpsep}{8pt}% -\setlength{\@dblfpbot}{0pt plus 1fil} -% \end{macrocode} - -% \begin{macrocode} -\pagestyle{headings} -% \end{macrocode} -% -% Make \verb"|...|" shorthand for verbatim fragments. In the case of -% the \cls{amsldoc} class, we avoid requiring an extra package -% (\pkg{doc} or \pkg{shortvrb}), to reduce the possibility of package -% files not being found at run time. -% \begin{macrocode} -%<*amsldoc> -\AtBeginDocument{\catcode`\|=\active } -\def\activevert{\verb|} -\expandafter\gdef\expandafter\dospecials\expandafter - {\dospecials \do\|}% -\expandafter\gdef\expandafter\@sanitize\expandafter - {\@sanitize \@makeother\|} -\begingroup\catcode`\|=\active \gdef|{\protect\activevert{}}\endgroup -%</amsldoc> -% \end{macrocode} -% -% \begin{macro}{\arrayargpatch} -% If the column-specs arg of array or tabular contains a vert bar -% character, and we have made vert bars active, it will cause -% trouble. The following command, used in the ctab environment, -% prevents the trouble. -% \begin{macrocode} -\newcommand{\arrayargpatch}{% - \let\@oldarray\@array - \edef\@array[##1]##2{\catcode\number`\|=\number\catcode`\| - \catcode\number`\@=\number\catcode`\@ \relax - \let\noexpand\@array\noexpand\@oldarray - \noexpand\@array[##1]{##2}}% - \catcode`\|=12 \catcode`\@=12 \relax -} -% \end{macrocode} -% \end{macro} -% -% \begin{environment}{ctab} -% An environment for centered tables. -% \begin{macrocode} -\newenvironment{ctab}{% - \par\topsep\medskipamount - \trivlist\centering - \item[]% - \arrayargpatch - \begin{tabular}% -}{% - \end{tabular}% - \endtrivlist -} -% \end{macrocode} -% \end{environment} -% -% Load \pkg{doc} package, reset \cn{AltMacroFont} to be the same as -% \cn{MacroFont} (when there are large sections of conditional -% code I think it looks better not to have it all slanted). -% \begin{macrocode} -%<*amsdtx> -\RequirePackage{doc} -\def\AltMacroFont{\MacroFont} -% \end{macrocode} -% -% \begin{macro}{\SpecialMainEnvIndex} -% Override \fn{doc.sty}'s main environment indexing to get rid of -% the parens around ``environment'', for compatibility with our -% \cs{env} command. -% \begin{macrocode} -\def\SpecialMainEnvIndex#1{% - \@bsphack - \special@index{% - #1\actualchar\string\texttt{#1} environment\encapchar main% - }% - \special@index{% - environments:\levelchar#1% - \actualchar\string\texttt{#1}% - \encapchar main}% - \@esphack -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\SpecialEnvIndex} -% \begin{macrocode} -\def\SpecialEnvIndex#1{% - \@bsphack - \index{#1\actualchar\string\texttt{#1} environment\encapchar usage}% - \index{% - environments:\levelchar#1% - \actualchar\string\texttt{#1}% - \encapchar usage}% - \@esphack -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DescribeOption} -% \begin{macrocode} -\def\DescribeOption{% - \leavevmode - \@bsphack - \begingroup - \MakePrivateLetters - \Describe@Option -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\Describe@Option} -% \begin{macrocode} -\def\Describe@Option#1{% - \endgroup - \marginpar{\raggedleft\PrintDescribeOption{#1}}% - \SpecialOptionIndex{#1}% - \@esphack - \ignorespaces -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintDescribeOption} -% \begin{macrocode} -\def\PrintDescribeOption#1{\strut \MacroFont #1\ } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\option} -% \begin{macrocode} -\def\option{% - \let\SpecialMainEnvIndex\SpecialMainOptionIndex -\begingroup - \catcode`\\12 - \MakePrivateLetters \m@cro@ \iffalse} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\SpecialMainOptionIndex} -% \begin{macrocode} -\def\SpecialMainOptionIndex#1{% - \@bsphack - \special@index{#1\actualchar\string\texttt{#1} option\encapchar main}% - \@esphack -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\SpecialOptionIndex} -% \begin{macrocode} -\def\SpecialOptionIndex{\@category@index{option}} -% \end{macrocode} -% \end{macro} -% -% Ordinary \cn{DocInput} doesn't handle standardized file headers -% unless you enclose them in \cs{iffalse} \dots\ \cs{fi} which I -% don't care to do. So instead here's an alternate version of -% \cn{DocInput}, called \cn{hDocInput}. -% \begin{macrocode} -\def\hDocInput#1{\MakePercentIgnore - \begingroup -% \end{macrocode} -% Define active \qc{\@} which should be the first non-percent, -% non-equal-sign character when a file header is present. (If a file -% header is not present, \cn{hDocInput} should not be used.) -% \begin{macrocode} - \begingroup \lccode`\~=`\@ - \lowercase{\endgroup\long\def ~}##1##{% - \catcode`\==12 \skipfileheader{##1}}% - \catcode`\@=\active \catcode`\==14 % comment - \def\filename{#1}% - \@@input#1 \MakePercentComment} -% \end{macrocode} -% -% \begin{macrocode} -\def\skipfileheader#1#2 {\endgroup - \hGetFileInfo#2 version = "??" date = "??"\@nil - \begingroup\catcode`\==9 \catcode`\ =9 \futurelet\0\endgroup -} -% \end{macrocode} -% -% \begin{macrocode} -\long\def\hGetFileInfo#1 version = "#2"#3 date = "#4"#5\@nil{% - \def\fileversion{#2}\def\filedate{#4}} -%</amsdtx> -% \end{macrocode} -% -% A bunch of stuff we don't want in code indexes: -% \begin{macrocode} -%<*amsdtx> -\DoNotIndex{\@xp,\@nx,\@empty,\newcommand,\renewcommand} -\DoNotIndex{\newenvironment,\renewenvironment,\providecommand} -\DoNotIndex{\if,\fi,\ifnum,\fi,\@let@token,\futurelet,\fsa@n} -\DoNotIndex{\ignorespaces,\@tempcnta,\@tempcntb,\count@} -\DoNotIndex{\toks@,\@ne,\advance} -\DoNotIndex{\!,\/,\?,\@,\^,\_} -\DoNotIndex{\@@par,\@M,\@auxout,\@bsphack,\@esphack,\@depth,\@ehc} -\DoNotIndex{\@for,\@flushglue,\@gobble,\@gobbletwo,\@height,\@idxitem} -\DoNotIndex{\@ifnextchar,\@ifstar,\@ifundefined,\@input,\@latexerr} -\DoNotIndex{\@makeschapterhead,\@namedef,\@nameuse,\@nil} -\DoNotIndex{\@nobreakfalse,\@restonecolfalse,\@restonecoltrue} -\DoNotIndex{\@tempa,\@tempb,\@tempc,\@tempf,\@temptokena,\@themark,\@width} -\DoNotIndex{\active,\aindex,\baselineskip,\begin,\begingroup,\box} -\DoNotIndex{\c@page,\catcode,\chapter,\char,\chardef,\closeout} -\DoNotIndex{\CodelineIndex,\sp,\sb,\label,\leavevmode,\mark} -\DoNotIndex{\mark,\newinsert,\newwrite,\newtoks,\xdef} -\DoNotIndex{\columnsep,\columnseprule,\columnwidth,\csname,\def} -\DoNotIndex{\dimen,\do,\DocInput,\documentstyle,\edef,\em} -\DoNotIndex{\EnableCrossrefs,\end,\endcsname,\endgroup,\endinput} -\DoNotIndex{\everypar,\expandafter,\filedate,\fileversion} -\DoNotIndex{\footnotesize,\gdef,\global,\glossary,\hangindent} -\DoNotIndex{\if@filesw,\else,\fi} -\DoNotIndex{\if@nobreak,\if@twocolumn,\if@twoside,\fi,\fi,\fi} -\DoNotIndex{\hsize,\hskip} -\DoNotIndex{\ifhmode,\ifmmode,\ifodd,\ifvmode,\ifx,\fi,\fi,\fi,\fi,\fi} -\DoNotIndex{\ifcase,\ifdim,\ifeof,\iffalse,\iftrue,\fi,\fi,\fi,\fi,\fi} -\DoNotIndex{\ifcat,\fi} -\DoNotIndex{\immediate,\insert,\item,\jobname,\long} -\DoNotIndex{\let,\lineskip,\marginparsep,\marginparwidth,\maxdimen} -\DoNotIndex{\makeatletter,\noexpand,\openout,\protect,\rlap} -\DoNotIndex{\min,\newpage,\nobreak,\normalbaselineskip} -\DoNotIndex{\normallineskip,\p@,\par,\parfillskip,\parindent,\parskip} -\DoNotIndex{\penalty,\relax,\section,\sin,\sloppy,\space,\string} -\DoNotIndex{\tableofcontents,\the,\thepage,\thispagestyle,\toks,\tt} -\DoNotIndex{\twocolumn,\uppercase,\vbox,\vrule,\vskip,\vss} -\DoNotIndex{\write,\z@,\z@skip} -%</amsdtx> -% \end{macrocode} -% -% The usual \cs{endinput} to ensure that random garbage at the end of -% the file doesn't get copied by \fn{docstrip}. -% \begin{macrocode} -\endinput -% \end{macrocode} -% -% \changes{v1.2b}{1995/02/15}{Added {}{} after rightmark, leftmark to -% handle no-maketitle case} -% \changes{v1.2b}{1995/02/15}{Added frenchspacing in error env heading} -% -% \changes{v1.2c}{1996/10/28}{Update version number, date for new release} -% -% \changes{v1.2d}{1997/03/13}{Fixed up loading method for OT1cmtt fd file} -% -% \changes{v2.03}{2004/04/06}{Reworked indexing commands for -% compatibility with doc.sty} -% -% \changes{v2.04}{2004/04/07}{Further work on indexing commands for -% compatibility with macro and environment environments in \fn{doc.sty}. -% Also added \env{option} environment, \cs{DescribeOption}, -% \cs{PrintDescribeOption}, \cs{SpecialOptionIndex}, and -% \cs{SpecialMainOptionIndex}.} -% -% \changes{v2.05}{2004/04/27}{Fixed the amsdtx \cs{env} so that it -% prints its argument in addition to putting it in the index. Added -% |\penalty\exhyphenpenalty| to \cs{mdash} and \cs{ndash} as per -% \pkg{textcmds}.} -% -% \CheckSum{1516} -% \Finale diff --git a/Master/texmf-dist/source/latex/amslatex/amsgen.dtx b/Master/texmf-dist/source/latex/amslatex/amsgen.dtx deleted file mode 100644 index dddaadd9af8..00000000000 --- a/Master/texmf-dist/source/latex/amslatex/amsgen.dtx +++ /dev/null @@ -1,396 +0,0 @@ -%%% ==================================================================== -%%% @LaTeX-file{ -%%% filename = "amsgen.dtx", -%%% version = "2.0", -%%% date = "1999/11/30", -%%% time = "12:33:33 EST", -%%% author = "American Mathematical Society", -%%% copyright = "Copyright 1995, 1999 American Mathematical Society, -%%% all rights reserved. Copying of this file is -%%% authorized only if either: -%%% (1) you make absolutely no changes to your copy, -%%% including name; OR -%%% (2) if you do make changes, you first rename it -%%% to some other name.", -%%% address = "American Mathematical Society, -%%% Technical Support, -%%% Electronic Products and Services, -%%% P. O. Box 6248, -%%% Providence, RI 02940, -%%% USA", -%%% telephone = "401-455-4080 or (in the USA and Canada) -%%% 800-321-4AMS (321-4267)", -%%% FAX = "401-331-3842", -%%% checksum = "07569 396 1613 14368", -%%% email = "tech-support@ams.org (Internet)", -%%% codetable = "ISO/ASCII", -%%% keywords = "latex, amslatex, ams-latex", -%%% supported = "yes", -%%% abstract = "This is part of the AMS-\LaTeX{} distribution. -%%% It contains some general internal macros shared -%%% by several different files in AMS-\LaTeX{}.", -%%% docstring = "The checksum field above contains a CRC-16 -%%% checksum as the first value, followed by the -%%% equivalent of the standard UNIX wc (word -%%% count) utility output of lines, words, and -%%% characters. This is produced by Robert -%%% Solovay's checksum utility.", -%%% } -%%% ==================================================================== -% \iffalse -%<*driver> -\documentclass{amsdtx} -\begin{document} -\title{The \pkg{amsgen} package} -\author{American Mathematical Society\\Michael Downes} -\date{Version \fileversion, \filedate} -\hDocInput{amsgen.dtx} -\end{document} -%</driver> -% \fi -% -% \maketitle -% -% \MakeShortVerb\| -% -% \section{Introduction} -% This is an internal package for storing common functions -% that are shared by more than one package in the \amslatex/ -% distribution. Some of these might eventually make it into the \latex/ -% kernel. -% -% \StopEventually{} -% -% Standard package info. -% Using \cs{ProvidesFile} rather than \cs{ProvidesPackage} because -% the latter, when input by, e.g, \cls{amsbook}, results in -% \texttt{LaTeX warning: You have requested document class `amsbook', -% but the document class provides `amsgen'.} -% \begin{macrocode} -\NeedsTeXFormat{LaTeX2e}% LaTeX 2.09 can't be used (nor non-LaTeX) -[1994/12/01]% LaTeX date must December 1994 or later -\ProvidesFile{amsgen.sty}[1999/11/30 v2.0] -% \end{macrocode} -% -% \section{Implementation} -% Some general macros shared by \fn{amsart.dtx}, \fn{amsmath.dtx}, -% \fn{amsfonts.dtx}, \dots -% -% \begin{macro}{\@saveprimitive} -% The \pkg{amsmath} package redefines a number of \tex/ primitives. -% In case some preceding package also decided to redefine one of -% those same primitives, we had better do some checking to make -% sure that we are able to save the primitive meaning for internal -% use. This is handled by the \cs{@saveprimitive} function. We -% follow the example of \cs{@@input} where the primitive meaning is -% stored in an internal control sequence with a |@@| prefix. -% Primitive control sequences can be distinguished by the fact that -% \cs{string} and \cs{meaning} return the same information. -% \begin{macrocode} -\providecommand{\@saveprimitive}[2]{\begingroup\escapechar`\\\relax - \edef\@tempa{\string#1}\edef\@tempb{\meaning#1}% - \ifx\@tempa\@tempb \global\let#2#1% - \else -% \end{macrocode} -% Check to see if \arg{2} was already given the desired primitive -% meaning somewhere else. -% \begin{macrocode} - \edef\@tempb{\meaning#2}% - \ifx\@tempa\@tempb - \else - \@latex@error{Unable to properly define \string#2; primitive - \noexpand#1no longer primitive}\@eha - \fi - \fi - \endgroup} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@xp} -% \begin{macro}{\@nx} -% Shorthands for long command names. -% \begin{macrocode} -\let\@xp=\expandafter -\let\@nx=\noexpand -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@emptytoks} -% A token register companion for \cs{@empty}. Saves a little main mem and -% probably makes initializations such as |\toks@{}| run faster too. -% \begin{macrocode} -\newtoks\@emptytoks -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@oparg} -% Use of \cs{@oparg} simplifies some constructions where a macro -% takes an optional argument in square brackets. We can't use -% \cn{newcommand} here because this function might be previously -% defined by the \pkg{amsmath} package in a loading sequence such as -% \begin{verbatim} -% \usepackage{amsmath,amsthm} -% \end{verbatim} -% \begin{macrocode} -\def\@oparg#1[#2]{\@ifnextchar[{#1}{#1[#2]}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@ifempty} -% \begin{macro}{\@ifnotempty} -% |\@ifnotempty| and |\@ifempty| use category 11 |@| characters to -% test whether the argument is empty or not, since these are highly -% unlikely to occur in the argument. As with \cn{@oparg}, there is a -% possibility that these commands were defined previously in -% \fn{amsmath.sty}. -% \begin{macrocode} -\long\def\@ifempty#1{\@xifempty#1@@..\@nil} -\long\def\@xifempty#1#2@#3#4#5\@nil{% - \ifx#3#4\@xp\@firstoftwo\else\@xp\@secondoftwo\fi} -% \end{macrocode} -% \cs{@ifnotempty} is a shorthand that makes code read better when -% no action is needed in the empty case. At a cost of double -% argument-reading---so for often-executed code, avoiding -% \cs{@ifnotempty} might be wise. -% \begin{macrocode} -\long\def\@ifnotempty#1{\@ifempty{#1}{}} -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% Some abbreviations to conserve token mem. -% \begin{macrocode} -\def\FN@{\futurelet\@let@token} -\def\DN@{\def\next@} -\def\RIfM@{\relax\ifmmode} -\def\setboxz@h{\setbox\z@\hbox} -\def\wdz@{\wd\z@} -\def\boxz@{\box\z@} -\def\relaxnext@{\let\@let@token\relax} -% \end{macrocode} -% -% \begin{macro}{\new@ifnextchar} -% This macro is a new version of \latex/'s \verb+\@ifnextchar+, -% macro that does not skip over spaces. -% \begin{macrocode} -\long\def\new@ifnextchar#1#2#3{% -% \end{macrocode} -% By including the space after the equals sign, we make it possible -% for \cs{new@ifnextchar} to do look-ahead for any token, including a -% space! -% \begin{macrocode} - \let\reserved@d= #1% - \def\reserved@a{#2}\def\reserved@b{#3}% - \futurelet\@let@token\new@ifnch -} -% -\def\new@ifnch{% - \ifx\@let@token\reserved@d \let\reserved@b\reserved@a \fi - \reserved@b -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@ifstar} -% There will essentially never be a space before the \qc{\*}, so -% using \cs{@ifnextchar} is unnecessarily slow. -% \begin{macrocode} -\def\@ifstar#1#2{\new@ifnextchar *{\def\reserved@a*{#1}\reserved@a}{#2}} -% \end{macrocode} -% \end{macro} -% -% The hook \cs{every@size} was changed to \cs{every@math@size} in the -% December 1994 release of \latex/ and its calling procedures changed. -% If \cs{every@math@size} is undefined it means the user has an older -% version of \latex/ so we had better define it and patch a couple of -% functions (\cs{glb@settings} and \cs{set@fontsize}). -% \begin{macrocode} -\@ifundefined{every@math@size}{% -% \end{macrocode} -% Reuse the same token register; since it was never used except for -% the purposes that are affected below, this is OK. -% \begin{macrocode} -\let\every@math@size=\every@size -\def\glb@settings{% - \expandafter\ifx\csname S@\f@size\endcsname\relax - \calculate@math@sizes - \fi - \csname S@\f@size\endcsname - \ifmath@fonts -% \ifnum \tracingfonts>\tw@ -% \@font@info{Setting up math fonts for -% \f@size/\f@baselineskip}\fi - \begingroup - \escapechar\m@ne - \csname mv@\math@version \endcsname - \globaldefs\@ne - \let \glb@currsize \f@size - \math@fonts - \endgroup - \the\every@math@size - \else -% \ifnum \tracingfonts>\tw@ -% \@font@info{No math setup for \f@size/\f@baselineskip}% -% \fi - \fi -} -% \end{macrocode} -% Remove |\the\every@size| from \cs{size@update}. -% \begin{macrocode} -\def\set@fontsize#1#2#3{% - \@defaultunits\@tempdimb#2pt\relax\@nnil - \edef\f@size{\strip@pt\@tempdimb}% - \@defaultunits\@tempskipa#3pt\relax\@nnil - \edef\f@baselineskip{\the\@tempskipa}% - \edef\f@linespread{#1}% - \let\baselinestretch\f@linespread - \def\size@update{% - \baselineskip\f@baselineskip\relax - \baselineskip\f@linespread\baselineskip - \normalbaselineskip\baselineskip - \setbox\strutbox\hbox{% - \vrule\@height.7\baselineskip - \@depth.3\baselineskip - \@width\z@}% -%%% \the\every@size - \let\size@update\relax}% - } -}{}% end \@ifundefined test -% \end{macrocode} -% -% \begin{macro}{\ex@} -% The \cs{ex@} variable provides a small unit of space for use in -% math-mode constructions, that varies according to the current type -% size. For example, the \cn{pmb} command uses \cs{ex@} units. -% Since a macro or mu unit solution for the \meta{dimen} \cs{ex@} won't -% work without changing a lot of current code in the \pkg{amsmath} -% package, we set \cs{ex@} through the \cs{every@math@size} hook. -% The value of \cs{ex@} is scaled nonlinearly in a range of roughly -% 0.5pt to 1.5pt, by the function \cs{compute@ex@}. -% \begin{macrocode} -\newdimen\ex@ -\addto@hook\every@math@size{\compute@ex@} -% \end{macrocode} -% \end{macro} -% -% \cs{compute@ex@} computes \cs{ex@} as a nonlinear scaling from 10pt -% to current font size (\cs{f@size}). Using .97 as the multiplier makes 1 -% |ex@| $\approx$ .9pt when the current type size is 8pt and 1 |ex@| -% $\approx$ 1.1pt when the current type size is 12pt. -% -% The formula is essentially -% \begin{displaymath} -% \newcommand{\points}{\mbox{pt}} -% \newcommand{\floor}[1]{\lfloor#1\rfloor} -% 1\points \pm (1\points - (.97)^{\floor{\vert 10 - n\vert}}) -% \end{displaymath} -% where $n$ = current type size, but adjusted to differentiate -% half-point sizes as well as whole point sizes, and there is a -% cutoff for extraordinarily large values of \cs{f@size} ($>$ 20pt) -% so that the value of \cs{ex@} never exceeds 1.5pt. -% -% \begin{macrocode} -\def\compute@ex@{% - \begingroup - \dimen@-\f@size\p@ - \ifdim\dimen@<-20\p@ -% \end{macrocode} -% Never make \cs{ex@} larger than 1.5pt. -% \begin{macrocode} - \global\ex@ 1.5\p@ - \else -% \end{macrocode} -% Adjust by the reference size and multiply by 2 to allow for -% half-point sizes. -% \begin{macrocode} - \advance\dimen@10\p@ \multiply\dimen@\tw@ -% \end{macrocode} -% Save information about the current sign of \cs{dimen@}. -% \begin{macrocode} - \edef\@tempa{\ifdim\dimen@>\z@ -\fi}% -% \end{macrocode} -% Get the absolute value of \cs{dimen@}. -% \begin{macrocode} - \dimen@ \ifdim\dimen@<\z@ -\fi \dimen@ - \advance\dimen@-\@m sp % fudge factor -% \end{macrocode} -% Here we use \cs{vfuzz} merely as a convenient scratch register -% \begin{macrocode} - \vfuzz\p@ -% \end{macrocode} -% Multiply in a loop. -% \begin{macrocode} - \def\do{\ifdim\dimen@>\z@ - \vfuzz=.97\vfuzz - \advance\dimen@ -\p@ -%\message{\vfuzz: \the\vfuzz, \dimen@: \the\dimen@}% - \@xp\do \fi}% - \do - \dimen@\p@ \advance\dimen@-\vfuzz - \global\ex@\p@ - \global\advance\ex@ \@tempa\dimen@ - \fi - \endgroup -%\typeout{\string\f@size: \f@size}\showthe\ex@ -} -% \end{macrocode} -% Tests of the \cs{compute@ex@} function yield the following results: -% -% \begin{center}\begin{tabular}{rlrl} -% \cs{f@size}& \cs{ex@}& \cs{f@size}& \cs{ex@}\\ -% 10& 1.0pt& 9& 0.94089pt\\ -% 11& 1.05911pt& 8.7& 0.91266pt\\ -% 12& 1.11473pt& 8.5& 0.91266pt\\ -% 14.4& 1.23982pt& 8.4& 0.88527pt\\ -% 17.28& 1.36684pt& 8& 0.88527pt\\ -% 20.74& 1.5pt& 7& 0.83293pt\\ -% 19.5& 1.4395pt& 6& 0.78369pt\\ -% && 5& 0.73737pt\\ -% && 1& 0.57785pt -% \end{tabular}\end{center} -% -% \begin{macro}{\@addpunct} -% Use of the \cs{@addpunct} function allows ending punctuation in -% section headings and elsewhere to be intelligently omitted -% when punctuation is already present. -% \begin{macrocode} -\def\@addpunct#1{\ifnum\spacefactor>\@m \else#1\fi} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\frenchspacing} -% Change \cn{frenchspacing} to ensure that \cs{@addpunct} will -% continue to work properly even when `french' spacing is in effect. -% \begin{macrocode} -\def\frenchspacing{\sfcode`\.1006\sfcode`\?1005\sfcode`\!1004% - \sfcode`\:1003\sfcode`\;1002\sfcode`\,1001 } -% \end{macrocode} -% \end{macro} -% -% \subsection{Miscellaneous} -% \begin{macrocode} -\def\nomath@env{\@amsmath@err{% - \string\begin{\@currenvir} allowed only in paragraph mode% -}\@ehb% "You've lost some text" -} -% \end{macrocode} -% A trade-off between main memory space and hash size; using -% \verb+\Invalid@@+ saves 14 bytes of main memory for each use of -% \verb+\Invalid@+, at the cost of one control sequence name. -% \verb+\Invalid@+ is currently used about five times and -% \verb+\Invalid@@+ is used by itself in some other instances, -% which means that it saves us more memory than \verb+\FN@+, -% \verb+\RIfM@+, and some of the other abbreviations above. -% \begin{macrocode} -\def\Invalid@@{Invalid use of \string} -% \end{macrocode} -% -% The usual \cs{endinput} to ensure that random garbage at the end of -% the file doesn't get copied by \fn{docstrip}. -% \begin{macrocode} -\endinput -% \end{macrocode} -% -% \CheckSum{337} -% \Finale diff --git a/Master/texmf-dist/source/latex/amslatex/amsmath.dtx b/Master/texmf-dist/source/latex/amslatex/amsmath.dtx deleted file mode 100644 index 9810bc283f0..00000000000 --- a/Master/texmf-dist/source/latex/amslatex/amsmath.dtx +++ /dev/null @@ -1,5829 +0,0 @@ -%%% ==================================================================== -%%% @LaTeX-file{ -%%% filename = "amsmath.dtx", -%%% version = "2.13", -%%% date = "2000/07/18", -%%% time = "08:16:41 EDT", -%%% author = "American Mathematical Society", -%%% copyright = "Copyright 1995, 2000 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", -%%% checksum = "38084 5829 21569 202795", -%%% email = "tech-support@ams.org (Internet)", -%%% codetable = "ISO/ASCII", -%%% keywords = "latex, amslatex, math, amsmath", -%%% supported = "yes", -%%% abstract = "This is a \LaTeX{} package that provides a variety of -%%% extra mathematical features, largely derived from -%%% AMS-\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.", -%%% } -%%% ==================================================================== -% -%\iffalse -%<*driver> -\documentclass{amsdtx} -\raggedbottom -\begin{document} -\title{The \pkg{amsmath} package} -\author{Frank Mittelbach\and Rainer Sch\"opf\and Michael Downes\and - David M. Jones} -\date{Version \fileversion, \filedate} -\providecommand{\histnote}{} -\renewenvironment{histnote}{% - \trivlist\item[\hspace{\labelsep}\bfseries Historical Note:]% -}{% - \endtrivlist -} -\hDocInput{amsmath.dtx} -\end{document} -%</driver> -%\fi -% -% \maketitle -% -% \MakeShortVerb\| -% -% \section{Introduction} -% -% A \latex/ package named \pkg{amstex} was created in 1988--1989 by -% adapting \fn{amstex.tex} for use within \latex/. The \pkg{amsmath} -% package is the successor of the \pkg{amstex} package. It was -% substantially overhauled to integrate it with \latex/2e, which -% arrived on the scene in 1994. It provides more or less the same -% features, but there are quite a few organizational differences as -% well as some new features and bug fixes. For example, the -% \pkg{amstex} package automatically loaded the \pkg{amsfonts} -% package, but the \pkg{amsmath} package does not. At the present -% time (November 1999) user-level documentation of the commands -% provided here is found in the AMSmath Users' Guide, -% \fn{amsldoc.tex}. -% -% \StopEventually{} -% -% Standard file identification. -% \begin{macrocode} -\NeedsTeXFormat{LaTeX2e}% LaTeX 2.09 can't be used (nor non-LaTeX) -[1994/12/01]% LaTeX date must be December 1994 or later -\ProvidesPackage{amsmath}[2000/07/18 v2.13 AMS math features] -% \end{macrocode} -% -% \section{Catcode defenses} -% -% Some packages change the catcode of characters that are essential -% in low-level \tex/ syntax. Any package that does so does not -% qualify as a PWWO package (\qq{Plays Well With Others}) because it -% can cause other packages to fail if they are loaded later. \LaTeX{} -% is partly to blame for this because it fails to provide adequate -% built-in safeguards in the package loading mechanisms. In the -% absence of such safeguards, we will provide them here. -% \begin{macrocode} -\edef\@temp{\catcode 96=\number\catcode 96 } -\catcode\string `\`=12 -\def\do#1{\catcode\number`#1=\number\catcode`#1} -\edef\@temp{% - \noexpand\AtEndOfPackage{% - \@temp - \do\"\do\'\do\(\do\)\do\*\do\+\do\,\do\-\do\.% - \do\/\do\<\do\=\do\>\do\[\do\]\do\^\do\_\relax - }% -} -\@temp -\def\do#1{\catcode\number`#1=12 } -\do\"\do\'\do\(\do\)\do\*\do\+\do\,\do\-\do\. -\do\/\do\<\do\=\do\>\do\[\do\] -\catcode`\^=7 \catcode`\_=8 -% \end{macrocode} -% -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \section{Declare some options} -% -% Handling of limits on integrals, sums, operatornames. -% \begin{macrocode} -\DeclareOption{intlimits}{\let\ilimits@\displaylimits} -\DeclareOption{nointlimits}{\let\ilimits@\nolimits} -\DeclareOption{sumlimits}{\let\slimits@\displaylimits} -\DeclareOption{nosumlimits}{\let\slimits@\nolimits} -\DeclareOption{namelimits}{\PassOptionsToPackage{namelimits}{amsopn}} -\DeclareOption{nonamelimits}{% - \PassOptionsToPackage{nonamelimits}{amsopn}} -% \end{macrocode} -% -% The following two switches might have been defined already by the -% documentclass, but it doesn't hurt to re-execute the \cs{newif}'s. -% \begin{macrocode} -\newif\ifctagsplit@ -\newif\iftagsleft@ -% \end{macrocode} -% Right or left placement of equation numbers. -% \begin{macrocode} -\DeclareOption{leqno}{\tagsleft@true} -\DeclareOption{reqno}{\tagsleft@false} -\DeclareOption{centertags}{\ctagsplit@true} -\DeclareOption{tbtags}{\ctagsplit@false} -% \end{macrocode} -% -% The \opt{cmex10} option is an escape hatch for people who don't -% happen to have sizes 7--9 of the \fn{cmex} fonts available to them -% yet. (Strictly speaking they are considered part of a minimum -% \latex/ distribution now, i.e., all \LaTeXe{} users should have -% them, without needing to get the AMSFonts distrib.) -% \begin{macrocode} -\DeclareOption{cmex10}{% - \ifnum\cmex@opt=\@ne \def\cmex@opt{0}% - \else \def\cmex@opt{10}\fi -} -% \end{macrocode} -% To help things work out better with various package loading orders -% of \pkg{amsmath} and \pkg{amsfonts}, we establish a variable to -% communicate the status of the cmex font definition. If the -% \pkg{amsfonts} package was loaded first this variable might be -% already defined, in which case we want to preserve its value. -% \begin{macrocode} -\@ifundefined{cmex@opt}{\def\cmex@opt{7}}{} -% \end{macrocode} -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \section{Flush-left equations [DMJ]} -% -% The left margin of math enviroments is controlled by -% \cs{@mathmargin}. This can be set to \cs{@centering} to -% implement the default behaviour, i.e., centered equations, and to -% something else to implement the flushleft style. -% -% In theory, all that's needed to activate the flushleft mode -% in the AMS document classes is something like this: -% \begin{verbatim} -% \DeclareOption{fleqn}{% -% \AtBeginDocument{\@mathmargin30pt\relax}% -% } -% \end{verbatim} -% (In fact, unless the document class wants to specify the -% \cs{@mathmargin}, it doesn't need to do anything with the -% \opt{fleqn} option.) -% \begin{macrocode} -\newif\if@fleqn -% -\newskip\@mathmargin -\@mathmargin\@centering -% -\DeclareOption{fleqn}{% - \@fleqntrue - \@mathmargin = -1sp - \let\mathindent=\@mathmargin - \AtBeginDocument{% - \ifdim\@mathmargin= -1sp - \@mathmargin\leftmargini minus\leftmargini - \fi - }% -} -% \end{macrocode} -% -% DMJ: This ensures that \cs{@mathmargin} is given some sort of -% sensible default if the class doesn't specify one, while still -% allowing a user to override the default value in their document -% preamble. (Incidentally, I'm initializing \cs{@mathmargin} to -% \cs{leftmargini} for compatibility with \fn{fleqn.clo}, but I'm -% not at all convinced that's the right thing to do.) -% -% The next question is what happens when amsmath is used with -% one of the standard classes. Unfortunately, \latex/ implements -% \opt{fleqn} somewhat clumsily; instead of paramaterizing the -% definitions of the math structures (as I've attempted to do -% here), \fn{fleqn.clo} declares a dimen \cn{mathindent} that is -% much like my \cs{@mathmargin} and then redefines \cn\[, \cn\], -% \cn{equation}, and \cn{eqnarray}. This means that things could -% get rather messy in 2.09 compatibility mode, since \fn{fleqn.clo} -% might be loaded after \fn{amsmath.sty}, which could cause a real -% mess. -% -% [mjd,1999/07/07]: Let \cs{mathindent} = \cs{@mathmargin} as -% envisioned by DMJ. Compatibility-mode documents will all use the -% \pkg{amstex} package, not \pkg{amsmath}. There is a remote chance -% of a problem if someone makes an assignment to \cs{mathindent} in a -% way that implicitly assumes it is a dimen register (inasmuch as it -% has now become a skip register), and the string ``plus'' follows in -% the input stream, but if someone's document croaks in that way, I -% think they will just have to bite the bullet and fix it. The -% alternative is to penalize a lot of other users with a known -% handicap. -% -% \begin{macrocode} -\DeclareOption{?}{} -% \end{macrocode} -% -% \begin{macrocode} -\ExecuteOptions{nointlimits,sumlimits,namelimits,centertags} -% \end{macrocode} -% The \cs{par} after \cs{ProcessOptions} is to ensure the correct -% line number on screen if an error occurs during option processing; -% otherwise the lookahead for a \qc{\*} option would result in \tex/ -% showing the following line instead. -% \begin{macrocode} -\ProcessOptions\par -% \end{macrocode} -% -% \begin{macrocode} -\@ifpackagewith{amsmath}{?}{% - \typeout{^^J% -Documentation for the amsmath package is found in amsldoc.dvi^^J% -(or .pdf or .tex).^^J% -^^J% -See also http://www.ams.org/tex/amslatex.html.^^J% -^^J% -Note: Using the first edition of The LaTeX Companion (1994) without^^J% -errata as a guide for amsmath use is not recommended.^^J% - }% -}{% - \typeout{% -For additional information on amsmath, use the \lq ?\rq\space option.% - }% -} -% \end{macrocode} -% -% Processing to handle the \opt{cmex10} option is a little tricky -% because of different possible loading orders for \pkg{amsmath} and -% \pkg{amsfonts}. The package \pkg{amsmath} sets the \cs{cmex@opt} -% flag to 7 or 10, and the package \pkg{amsfonts} sets the flag to 1 -% or 0. -% \begin{macrocode} -\ifnum\cmex@opt=7 \relax - \DeclareFontShape{OMX}{cmex}{m}{n}{% - <-8>cmex7<8>cmex8<9>cmex9% - <10><10.95><12><14.4><17.28><20.74><24.88>cmex10% - }{}% - \expandafter\let\csname OMX/cmex/m/n/10\endcsname\relax -\else - \ifnum\cmex@opt=\z@ % need to override cmex7 fontdef from amsfonts -% \end{macrocode} -% Force reloading of the OMX/cmex font definition file. -% \begin{macrocode} - \begingroup - \fontencoding{OMX}\fontfamily{cmex}% - \expandafter\let\csname OMX+cmex\endcsname\relax - \try@load@fontshape - \endgroup -% \end{macrocode} -% The \fn{cmex10} font gets special preload handling in the building -% of the \latex/ format file, need an extra bit here to work around -% that. -% \begin{macrocode} - \expandafter\let\csname OMX/cmex/m/n/10\endcsname\relax - \def\cmex@opt{10}% - \fi -\fi -% \end{macrocode} -% -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \section{Call some other packages} -% -% The \pkg{amstext} package provides the \cn{text} command. The -% \pkg{amsbsy} package provides \cn{boldsymbol} and \cn{pmb}. (Since -% 1997 it is usually better to use the \pkg{bm} package instead; but -% I think we have to keep \pkg{amsbsy} here for backward -% compatibility [mjd,1999/11/19].) The \pkg{amsopn} package provides -% \cn{DeclareMathOperator}. -% \begin{macrocode} -\RequirePackage{amstext}[1995/01/25] -\RequirePackage{amsbsy}[1995/01/20] -\RequirePackage{amsopn}[1995/01/20] -% \end{macrocode} -% -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \section{Miscellaneous} -% -% \begin{macro}{\@amsmath@err} -% Defining this error function saves main mem. -% \begin{macrocode} -\def\@amsmath@err{\PackageError{amsmath}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\AmS} -% The \cs{AmS} prefix can be used to construct the combination -% |\AmS-\LaTeX|. -% \begin{macrocode} -\providecommand{\AmS}{{\protect\AmSfont - A\kern-.1667em\lower.5ex\hbox{M}\kern-.125emS}} -% \end{macrocode} -% In \cn{AmSfont} we call cmsy directly in lieu of trying to access -% it through the math fonts setup (e.g. |\the\textfont2|) because -% math fonts can't be relied on to be properly set up if we are not -% inside a math formula. This means that if this command is used in a -% document where CM fonts are not wanted, then a font substitution -% will need to be declared, e.g.: -% \begin{verbatim} -% \DeclareFontShape{OMS}{cmsy}{m}{n}{ <-> sub * xxx/m/n }{} -% \end{verbatim} -% where |xxx| is some alternate font family. -% Taking the first letter of \cs{f@series} will produce |b| or |m| -% for the most common values (|b,bx,m|). It may produce nonsense for -% more unusual values of \cs{f@series}, so for safety's sake we have -% an additional \cs{if} test. We want to avoid setting the series to -% |bx| because in a standard \latex/ installation the combination -% |cmsy/bx/n| does not have a font definition, and the user -% would get a font substitution warning on screen. -% \begin{macrocode} -\newcommand{\AmSfont}{% - \usefont{OMS}{cmsy}{\if\@xp\@car\f@series\@nil bb\else m\fi}{n}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@mathmeasure} -% The function |\@mathmeasure| takes three arguments; the third arg -% is typeset as a math formula in an hbox, using arg |#2| as the -% mathstyle, and the result is left in the box named by the first -% arg. It is assumed that we are already in math mode, so we can turn -% off |\everymath| (in particular, |\check@mathfonts|). -% \begin{macrocode} -\def\@mathmeasure#1#2#3{\setbox#1\hbox{\frozen@everymath\@emptytoks - \m@th$#2#3$}} -% \end{macrocode} -% \end{macro} -% -% The \cs{inf@bad} constant is for testing overfull boxes. -% \begin{macrocode} -\@ifundefined{inf@bad}{% - \newcount\inf@bad \inf@bad=1000000 \relax -}{} -% \end{macrocode} -% -%\subsection{Math spacing commands} -% -% Here we fill in some gaps in the set of spacing commands, and make them -% all work equally well in or out of math. -% We want all these commands to be robust but declaring them all with -% \cs{DeclareRobustCommand} uses up an control sequence name per -% command; to avoid this, we define a common command \cs{tmspace} -% (text-or-math space) which carries the robustness burden for all of -% them. The standard \cs{relax} before the \cs{ifmmode} is not -% necessary because of the \cs{protect} added by -% \cs{DeclareRobustCommand}. -% \begin{macrocode} -\DeclareRobustCommand{\tmspace}[3]{% - \ifmmode\mskip#1#2\else\kern#1#3\fi\relax} -\renewcommand{\,}{\tmspace+\thinmuskip{.1667em}} -\let\thinspace\, -\renewcommand{\!}{\tmspace-\thinmuskip{.1667em}} -\let\negthinspace\! -\renewcommand{\:}{\tmspace+\medmuskip{.2222em}} -\let\medspace\: -\newcommand{\negmedspace}{\tmspace-\medmuskip{.2222em}} -\renewcommand{\;}{\tmspace+\thickmuskip{.2777em}} -\let\thickspace\; -\newcommand{\negthickspace}{\tmspace-\thickmuskip{.2777em}} -% \end{macrocode} -% -% \begin{macro}{\mspace} -% And while we're at it, why don't we provide an equivalent of -% \cn{hspace} for math mode use. This allows use of |mu| units in -% (for example) constructing compound math symbols. -% \begin{macrocode} -\newcommand{\mspace}[1]{\mskip#1\relax} -% \end{macrocode} -% \end{macro} -% -% \subsection{Vertical bar symbols} -% Add left/right specific versions of \cn{vert}, \cn{Vert}. Don't -% assume the delimiter codes are the CM defaults. -% \begin{macrocode} -\def\@tempa#1#2\@nil{% - \ifx\delimiter#1\@tempcnta#2\relax\else\@tempcnta\z@\fi -} -\@xp\@tempa\vert\@empty\@nil -\ifnum\@tempcnta>\z@ - \advance\@tempcnta "4000000 - \xdef\lvert{\delimiter\number\@tempcnta\space } - \advance\@tempcnta "1000000 - \xdef\rvert{\delimiter\number\@tempcnta\space } -\else - \ifx\@@undefined\lvert - % Fall back to cmex encoding since we don't know what else to do. - \DeclareMathDelimiter{\lvert} - {\mathopen}{symbols}{"6A}{largesymbols}{"0C} - \DeclareMathDelimiter{\rvert} - {\mathclose}{symbols}{"6A}{largesymbols}{"0C} - \fi -\fi -\@xp\@tempa\Vert\@empty\@nil -\ifnum\@tempcnta>\z@ - \advance\@tempcnta "4000000 - \xdef\lVert{\delimiter\number\@tempcnta\space } - \advance\@tempcnta "1000000 - \xdef\rVert{\delimiter\number\@tempcnta\space } -\else - \ifx\@@undefined\lVert - \DeclareMathDelimiter{\lVert} - {\mathopen}{symbols}{"6B}{largesymbols}{"0D} - \DeclareMathDelimiter{\rVert} - {\mathclose}{symbols}{"6B}{largesymbols}{"0D} - \fi -\fi -% \end{macrocode} -% -% \subsection{Fractions} -% Bury the generalized fraction primitives \cs{over}, \cs{atop}, -% etc., because of their bizarre syntax, which is decidedly out of -% place in a \latex/ document. -% \begin{macrocode} -\@saveprimitive\over\@@over -\@saveprimitive\atop\@@atop -\@saveprimitive\above\@@above -\@saveprimitive\overwithdelims\@@overwithdelims -\@saveprimitive\atopwithdelims\@@atopwithdelims -\@saveprimitive\abovewithdelims\@@abovewithdelims -% \end{macrocode} -% -% If someone insists on using \cs{over}, give a warning the first -% time and then resurrect the old definition. Laissez-faire policy. -% \begin{macrocode} -\DeclareRobustCommand{\primfrac}[1]{% - \PackageWarning{amsmath}{% -Foreign command \@backslashchar#1;\MessageBreak -\protect\frac\space or \protect\genfrac\space should be used instead% -\MessageBreak - } - \global\@xp\let\csname#1\@xp\endcsname\csname @@#1\endcsname - \csname#1\endcsname -} -\renewcommand{\over}{\primfrac{over}} -\renewcommand{\atop}{\primfrac{atop}} -\renewcommand{\above}{\primfrac{above}} -\renewcommand{\overwithdelims}{\primfrac{overwithdelims}} -\renewcommand{\atopwithdelims}{\primfrac{atopwithdelims}} -\renewcommand{\abovewithdelims}{\primfrac{abovewithdelims}} -% \end{macrocode} -% -% \cn{frac} calls \cn{@@over} directly instead of via \cn{genfrac}, for -% better speed because it is so common. \cn{tfrac} and \cn{dfrac} are -% abbreviations for some commonly needed mathstyle overrides. To -% conserve csnames we avoid making \cn{dfrac} and \cn{tfrac} robust -% (\cn{genfrac} is itself robust). -% \begin{macrocode} -\DeclareRobustCommand{\frac}[2]{{\begingroup#1\endgroup\@@over#2}} -\newcommand{\dfrac}{\genfrac{}{}{}0} -\newcommand{\tfrac}{\genfrac{}{}{}1} -% \end{macrocode} -% The \cn{binom} command for binomial notation works like \cn{frac} -% and has similar variants. Note that we do not use \cs{z@} in -% \cn{dbinom} and \cn{tbinom} because they are not top-level robust -% like \cn{binom}, and so the \cs{z@} with the potentially -% problematic \qc{\@} character would become visible when writing one -% of those commands to a \fn{.toc} file. -% \begin{macrocode} -\DeclareRobustCommand{\binom}{\genfrac()\z@{}} -\newcommand{\dbinom}{\genfrac(){0pt}0} -\newcommand{\tbinom}{\genfrac(){0pt}1} -% \end{macrocode} -% -% \begin{macro}{\genfrac} -% This command provides access to \tex/'s generalized fraction -% primitives. Args: \arg{1} left delim, \arg{2} right delim, \arg{3} -% line thickness, \arg{4} mathstyle override, \arg{5} numerator, -% \arg{6} denominator. But we only read the first four args at first, -% in order to give us a moment to select the proper generalized -% fraction primitive. Any of those four args could be empty, and when -% empty the obvious defaults are selected (no delimiters, default -% line thickness (normally .4pt), and no mathstyle override). -% \begin{macrocode} -\DeclareRobustCommand{\genfrac}[4]{% - \def\@tempa{#1#2}% - \edef\@tempb{\@nx\@genfrac\@mathstyle{#4}% - \csname @@\ifx @#3@over\else above\fi - \ifx\@tempa\@empty \else withdelims\fi\endcsname} - \@tempb{#1#2#3}} -% \end{macrocode} -% \cs{@genfrac} takes the preceding arguments and reads the -% numerator and denominator. Note that there's no convenient way to -% make the numerator and denominator \emph{contents} -% displaystyle, through this interface. -% -% Args: \arg{1} mathstyle, \arg{2} fraction primitive, -% \arg{3} delimiters and rule thickness, -% \arg{4} numerator, \arg{5} denominator. -% \begin{macrocode} -\def\@genfrac#1#2#3#4#5{{#1{\begingroup#4\endgroup#2#3\relax#5}}} -% \end{macrocode} -% \end{macro} -% -% Empty mathstyle arg: no change; 0 = displaystyle, 1 = textstyle, 2 -% = scriptstyle, 3 = scriptscriptstyle. -% \begin{macrocode} -\def\@mathstyle#1{% - \ifx\@empty#1\@empty\relax - \else\ifcase#1\displaystyle % case 0 - \or\textstyle\or\scriptstyle\else\scriptscriptstyle\fi\fi} -% \end{macrocode} -% -% \subsection{Sums and Integrals} -% Default value for sum limits is \cs{displaylimits}, see option -% `nosumlimits'. -% -% We redefine all the cumulative operator symbols to use -% \cs{slimits@} so that switching between \cs{displaylimits} and -% \cs{nolimits} can be controlled by package options. Also add -% \cs{DOTSB} for the benefit of the dots lookahead. But we'd better -% make sure \cn{coprod} and the others are simple mathchars; if not, -% the attempted changes will probably fail miserably. -% -% \begin{macrocode} -\begingroup -\edef\@tempa{\string\mathchar"} -\def\@tempb#1"#2\@nil{#1"} -\edef\@tempc{\expandafter\@tempb\meaning\coprod "\@nil} -\ifx\@tempa\@tempc - \global\let\coprod@\coprod - \gdef\coprod{\DOTSB\coprod@\slimits@} - \global\let\bigvee@\bigvee - \gdef\bigvee{\DOTSB\bigvee@\slimits@} - \global\let\bigwedge@\bigwedge - \gdef\bigwedge{\DOTSB\bigwedge@\slimits@} - \global\let\biguplus@\biguplus - \gdef\biguplus{\DOTSB\biguplus@\slimits@} - \global\let\bigcap@\bigcap - \gdef\bigcap{\DOTSB\bigcap@\slimits@} - \global\let\bigcup@\bigcup - \gdef\bigcup{\DOTSB\bigcup@\slimits@} - \global\let\prod@\prod - \gdef\prod{\DOTSB\prod@\slimits@} - \global\let\sum@\sum - \gdef\sum{\DOTSB\sum@\slimits@} - \global\let\bigotimes@\bigotimes - \gdef\bigotimes{\DOTSB\bigotimes@\slimits@} - \global\let\bigoplus@\bigoplus - \gdef\bigoplus{\DOTSB\bigoplus@\slimits@} - \global\let\bigodot@\bigodot - \gdef\bigodot{\DOTSB\bigodot@\slimits@} - \global\let\bigsqcup@\bigsqcup - \gdef\bigsqcup{\DOTSB\bigsqcup@\slimits@} -\fi -\endgroup -% \end{macrocode} -% -% \subsection{Roots and radicals} -% -% This root stuff needs syntax work and implementation work. Surely -% something more compact can be done?? [mjd, 1994/09/05] -% \begin{macrocode} -\newcommand{\leftroot}{\@amsmath@err{\Invalid@@\leftroot}\@eha} -\newcommand{\uproot}{\@amsmath@err{\Invalid@@\uproot}\@eha} -\newcount\uproot@ -\newcount\leftroot@ -\renewcommand{\root}{\relaxnext@ - \DN@{\ifx\@let@token\uproot\let\next@\nextii@\else - \ifx\@let@token\leftroot\let\next@\nextiii@\else - \let\next@\plainroot@\fi\fi\next@}% - \def\nextii@\uproot##1{\uproot@##1\relax\FN@\nextiv@}% - \def\nextiv@{\ifx\@let@token\@sptoken\DN@. {\FN@\nextv@}\else - \DN@.{\FN@\nextv@}\fi\next@.}% - \def\nextv@{\ifx\@let@token\leftroot\let\next@\nextvi@\else - \let\next@\plainroot@\fi\next@}% - \def\nextvi@\leftroot##1{\leftroot@##1\relax\plainroot@}% - \def\nextiii@\leftroot##1{\leftroot@##1\relax\FN@\nextvii@}% - \def\nextvii@{\ifx\@let@token\@sptoken - \DN@. {\FN@\nextviii@}\else - \DN@.{\FN@\nextviii@}\fi\next@.}% - \def\nextviii@{\ifx\@let@token\uproot\let\next@\nextix@\else - \let\next@\plainroot@\fi\next@}% - \def\nextix@\uproot##1{\uproot@##1\relax\plainroot@}% - \bgroup\uproot@\z@\leftroot@\z@\FN@\next@} -\def\plainroot@#1\of#2{\setbox\rootbox\hbox{% - $\m@th\scriptscriptstyle{#1}$}% - \mathchoice{\r@@t\displaystyle{#2}}{\r@@t\textstyle{#2}} - {\r@@t\scriptstyle{#2}}{\r@@t\scriptscriptstyle{#2}}\egroup} -% \end{macrocode} -% -% \changes{v2.0}{1999/06/17}{Normalize @@sqrt to sqrtsign} - -% Name change from \cs{@@sqrt} to \cs{sqrtsign} happened in the -% 1995/12/01 release of \latex/. If we were to assume that -% \cs{sqrtsign} is defined then someone with the 1995/06/01 release -% of \latex/ would have trouble using this package. -% \begin{macrocode} -\@ifundefined{sqrtsign}{\let\sqrtsign\@@sqrt}{} -\def\r@@t#1#2{\setboxz@h{$\m@th#1\sqrtsign{#2}$}% - \dimen@\ht\z@\advance\dimen@-\dp\z@ - \setbox\@ne\hbox{$\m@th#1\mskip\uproot@ mu$}% - \advance\dimen@ by1.667\wd\@ne - \mkern-\leftroot@ mu\mkern5mu\raise.6\dimen@\copy\rootbox - \mkern-10mu\mkern\leftroot@ mu\boxz@} -% \end{macrocode} -% -% \subsection{Et cetera} -% -% \changes{v2.0}{1999/06/18}{Leave Greek cap letters unaltered} -% -% Specific names for the variant italic cap Greek letters are not -% defined by \latex/. If no preceding package defined these, we will -% define them now. -% \begin{macrocode} -\@ifundefined{varGamma}{% - \DeclareMathSymbol{\varGamma}{\mathord}{letters}{"00} - \DeclareMathSymbol{\varDelta}{\mathord}{letters}{"01} - \DeclareMathSymbol{\varTheta}{\mathord}{letters}{"02} - \DeclareMathSymbol{\varLambda}{\mathord}{letters}{"03} - \DeclareMathSymbol{\varXi}{\mathord}{letters}{"04} - \DeclareMathSymbol{\varPi}{\mathord}{letters}{"05} - \DeclareMathSymbol{\varSigma}{\mathord}{letters}{"06} - \DeclareMathSymbol{\varUpsilon}{\mathord}{letters}{"07} - \DeclareMathSymbol{\varPhi}{\mathord}{letters}{"08} - \DeclareMathSymbol{\varPsi}{\mathord}{letters}{"09} - \DeclareMathSymbol{\varOmega}{\mathord}{letters}{"0A} -}{} -% \end{macrocode} -% -% \amstex/ redefines \cn{overline} as shown here, for reasons that -% are probably less important in \latex/: Make it read its argument -% as a macro argument rather than a ``math field'' (\emph{The -% \tex/book}, Chapter 26), to avoid problems when something that is -% apparently a single symbol is actually a non-simple macro (e.g., -% \cn{dag}) \emph{and} is given as a single-token argument without -% enclosing braces. -% \begin{macrocode} -\@saveprimitive\overline\@@overline -\DeclareRobustCommand{\overline}[1]{\@@overline{#1}} -% \end{macrocode} -% -% The \cs{boxed} command is specifically intended to put a box around -% an equation or piece of an equation. (Not including the equation -% number.) This isn't trivial for end-users to do it properly -% with \cs{fbox} so we provide a command for them. -% \begin{macrocode} -\newcommand{\boxed}[1]{\fbox{\m@th$\displaystyle#1$}} -% \end{macrocode} -% -% \begin{macrocode} -\newcommand{\implies}{\DOTSB\;\Longrightarrow\;} -\newcommand{\impliedby}{\DOTSB\;\Longleftarrow\;} -% \end{macrocode} -% -% \begin{macrocode} -\def\And{\DOTSB\;\mathchar"3026 \;} -% \end{macrocode} -% -% The command \cn{nobreakdash} is designed only for use before a -% hyphen or dash (|-|, |--|, or |---|). -% Setting the hyphen in a box and then unboxing it means that the -% normal penalty will not be added after it---and if the penalty is -% not there a break will not be taken (unless an explicit penalty -% or glue follows, thus the final \verb=\nobreak=). -% \begin{macrocode} -\newcommand{\nobreakdash}{\leavevmode - \toks@\@emptytoks \def\@tempa##1{\toks@\@xp{\the\toks@-}\FN@\next@}% - \DN@{\ifx\@let@token-\@xp\@tempa - \else\setboxz@h{\the\toks@\nobreak}\unhbox\z@\fi}% - \FN@\next@ -} -% \end{macrocode} -% -% \cs{colon} is for a colon in math that resembles a text colon: -% small space on the left, larger space on the right. The \qc{\:} -% character by itself is treated as a \cs{mathrel} i.e. large, equal -% spacing on both sides. -% \begin{macrocode} -\renewcommand{\colon}{\nobreak\mskip2mu\mathpunct{}\nonscript - \mkern-\thinmuskip{:}\mskip6muplus1mu\relax} -% \end{macrocode} -% -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \section{Ellipsis dots} -% -% We can't use \cs{newif} for \cs{ifgtest@} because we want -% to include \cs{global} in the definitions of -% \cs{gtest@true} and \cs{gtest@false}. -% \begin{macrocode} -\let\ifgtest@\iffalse % initial value -\def\gtest@true{\global\let\ifgtest@\iftrue} -\def\gtest@false{\global\let\ifgtest@\iffalse} -\let\DOTSI\relax -\let\DOTSB\relax -\let\DOTSX\relax -{\uccode`7=`\\ \uccode`8=`m \uccode`9=`a \uccode`0=`t \uccode`!=`h - \uppercase{% - \gdef\math@#1#2#3#4#5#6\math@{\gtest@false\ifx 7#1\ifx 8#2% - \ifx 9#3\ifx 0#4\ifx !#5\xdef\meaning@{#6}\gtest@true - \fi\fi\fi\fi\fi}}} -{\uccode`7=`c \uccode`8=`h \uccode`9=`\" - \uppercase{\gdef\mathch@#1#2#3#4#5#6\mathch@{\gtest@false - \ifx 7#1\ifx 8#2\ifx 9#5\gtest@true\xdef\meaning@{9#6}\fi\fi\fi}}} -\newcount\classnum@ -\def\getmathch@#1.#2\getmathch@{\classnum@#1 \divide\classnum@4096 - \ifcase\number\classnum@\or\or\gdef\thedots@{\dotsb@}\or - \gdef\thedots@{\dotsb@}\fi} -{\uccode`4=`b \uccode`5=`i \uccode`6=`n - \uppercase{\gdef\mathbin@#1#2#3{\relaxnext@ - \def\nextii@##1\mathbin@{\ifx\@sptoken\@let@token\gtest@true\fi}% - \gtest@false\DN@##1\mathbin@{}% - \ifx 4#1\ifx 5#2\ifx 6#3\DN@{\FN@\nextii@}\fi\fi\fi\next@}}} -{\uccode`4=`r \uccode`5=`e \uccode`6=`l - \uppercase{\gdef\mathrel@#1#2#3{\relaxnext@ - \def\nextii@##1\mathrel@{\ifx\@sptoken\@let@token\gtest@true\fi}% - \gtest@false\DN@##1\mathrel@{}% - \ifx 4#1\ifx 5#2\ifx 6#3\DN@{\FN@\nextii@}\fi\fi\fi\next@}}} -{\uccode`5=`m \uccode`6=`a \uccode`7=`c - \uppercase{\gdef\macro@#1#2#3#4\macro@{\gtest@false - \ifx 5#1\ifx 6#2\ifx 7#3\gtest@true - \xdef\meaning@{\macro@@#4\macro@@}\fi\fi\fi}}} -\def\macro@@#1->#2\macro@@{#2} -\newcount\DOTSCASE@ -{\uccode`6=`\\ \uccode`7=`D \uccode`8=`O \uccode`9=`T \uccode`0=`S - \uppercase{\gdef\DOTS@#1#2#3#4#5{\gtest@false\DN@##1\DOTS@{}% - \ifx 6#1\ifx 7#2\ifx 8#3\ifx 9#4\ifx 0#5\let\next@\DOTS@@ - \fi\fi\fi\fi\fi - \next@}}} -{\uccode`3=`B \uccode`4=`I \uccode`5=`X - \uppercase{\gdef\DOTS@@#1{\relaxnext@ - \def\nextii@##1\DOTS@{\ifx\@sptoken\@let@token\gtest@true\fi}% - \DN@{\FN@\nextii@}% - \ifx 3#1\global\DOTSCASE@\z@\else - \ifx 4#1\global\DOTSCASE@\@ne\else - \ifx 5#1\global\DOTSCASE@\tw@\else\DN@##1\DOTS@{}% - \fi\fi\fi\next@}}} -{\uccode`5=`\\ \uccode`6=`n \uccode`7=`o \uccode`8=`t - \uppercase{\gdef\not@#1#2#3#4{\relaxnext@ - \def\nextii@##1\not@{\ifx\@sptoken\@let@token\gtest@true\fi}% - \gtest@false\DN@##1\not@{}% - \ifx 5#1\ifx 6#2\ifx 7#3\ifx 8#4\DN@{\FN@\nextii@}\fi\fi\fi - \fi\next@}}} -\def\keybin@{\gtest@true - \ifx\@let@token+\else\ifx\@let@token=\else - \ifx\@let@token<\else\ifx\@let@token>\else - \ifx\@let@token-\else\ifx\@let@token*\else\ifx\@let@token:\else - \gtest@false\fi\fi\fi\fi\fi\fi\fi} -% \end{macrocode} -% Patch to ensure \cs{@ldots} is defined. (Name changed to -% \cn{mathellipsis} in Dec 94 release of \latex/.) -% \begin{macrocode} -\@ifundefined{@ldots}{\def\@ldots{\mathellipsis}}{} -% \end{macrocode} -% Reiterate the standard definition of \cs{ldots} to keep it from -% being clobbered by the redefinition of \cs{dots}. -% \begin{macrocode} -\DeclareRobustCommand{\ldots}{% - \ifmmode \mathellipsis \else \textellipsis \fi -} -\DeclareRobustCommand{\dots}{% - \ifmmode \@xp\mdots@\else \@xp\textellipsis \fi -} -\def\tdots@{\leavevmode\unskip\relaxnext@ - \DN@{$\m@th\@ldots\, - \ifx\@let@token,\,$\else\ifx\@let@token.\,$\else - \ifx\@let@token;\,$\else\ifx\@let@token:\,$\else - \ifx\@let@token?\,$\else\ifx\@let@token!\,$\else - $ \fi\fi\fi\fi\fi\fi}% - \ \FN@\next@} -\def\mdots@{\FN@\mdots@@} -\def\mdots@@{\gdef\thedots@{\dotso@}% - \ifx\@let@token\boldsymbol \gdef\thedots@\boldsymbol{\boldsymboldots@}% - \else\ifx,\@let@token \gdef\thedots@{\dotsc}% - \else\ifx\not\@let@token \gdef\thedots@{\dotsb@}% - \else\keybin@ - \ifgtest@\gdef\thedots@{\dotsb@}% - \else\xdef\meaning@{\meaning\@let@token..........}% - \xdef\meaning@@{\meaning@}% - \@xp\math@\meaning@\math@ - \ifgtest@ - \@xp\mathch@\meaning@\mathch@ - \ifgtest@\@xp\getmathch@\meaning@\getmathch@\fi - \else\@xp\macro@\meaning@@\macro@ - \ifgtest@ - \@xp\not@\meaning@\not@\ifgtest@\gdef\thedots@{\dotsb@}% - \else\@xp\DOTS@\meaning@\DOTS@ - \ifgtest@ - \ifcase\number\DOTSCASE@\gdef\thedots@{\dotsb@}% - \or\gdef\thedots@{\dotsi}\else\fi - \else\@xp\math@\meaning@\math@ - \ifgtest@\@xp\mathbin@\meaning@\mathbin@ - \ifgtest@\gdef\thedots@{\dotsb@}% - \else\@xp\mathrel@\meaning@\mathrel@ - \ifgtest@\gdef\thedots@{\dotsb@}% - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi - \thedots@} -% \end{macrocode} -% -% The \qc{\=} character is necessary in the two \cs{let} assignments -% in \cs{boldsymboldots@}, because the symbol we are making -% bold might be an \qc{\=} sign. -% \begin{macrocode} -\def\boldsymboldots@#1{% - \bold@true\let\@let@token=#1\let\delayed@=#1\mdots@@ - \boldsymbol#1\bold@false} -% \end{macrocode} -% -% The definition of \cs{@cdots} is merely the \fn{plain.tex} -% definition of \cs{cdots}. -% \begin{macrocode} -\def\@cdots{\mathinner{\cdotp\cdotp\cdotp}} -\newcommand{\dotsi}{\!\@cdots} -\let\dotsb@\@cdots -% \end{macrocode} -% -% If any new right delimiters are defined, they would need to be -% added to the definition of \cs{rightdelim@} in order for \cn{dots} -% to work properly in all cases. -% \begin{macrocode} -\def\rightdelim@{\gtest@true - \ifx\@let@token)\else - \ifx\@let@token]\else - \ifx\@let@token\rbrack\else - \ifx\@let@token\}\else - \ifx\@let@token\rbrace\else - \ifx\@let@token\rangle\else - \ifx\@let@token\rceil\else - \ifx\@let@token\rfloor\else - \ifx\@let@token\rgroup\else - \ifx\@let@token\rmoustache\else - \ifx\@let@token\right\else - \ifx\@let@token\bigr\else - \ifx\@let@token\biggr\else - \ifx\@let@token\Bigr\else - \ifx\@let@token\Biggr\else\gtest@false - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} -\def\extra@{% - \rightdelim@\ifgtest@ - \else\ifx\@let@token$\gtest@true - \else\xdef\meaning@{\meaning\@let@token..........}% - \@xp\macro@\meaning@\macro@\ifgtest@ - \@xp\DOTS@\meaning@\DOTS@ - \ifgtest@ - \ifnum\DOTSCASE@=\tw@\gtest@true\else\gtest@false - \fi\fi\fi\fi\fi} -\newif\ifbold@ -\def\dotso@{\relaxnext@ - \ifbold@ - \let\@let@token\delayed@ - \def\nextii@{\extra@\@ldots\ifgtest@\,\fi}% - \else - \def\nextii@{\DN@{\extra@\@ldots\ifgtest@\,\fi}\FN@\next@}% - \fi - \nextii@} -% \end{macrocode} -% Why not save some tokens? (space vs. time). -% \begin{macrocode} -\def\extrap@#1{% - \DN@{#1\,}% - \ifx\@let@token,\else - \ifx\@let@token;\else - \ifx\@let@token.\else\extra@ - \ifgtest@\else - \let\next@#1\fi\fi\fi\fi\next@} -% \end{macrocode} -% -% The \cn{cdots} command. -% \begin{macrocode} -\DeclareRobustCommand{\cdots}{\DN@{\extrap@\@cdots}\FN@\next@} -\let\dotsb\cdots -\let\dotsm\cdots -\DeclareRobustCommand{\dotso}{\relax - \ifmmode \DN@{\extrap@\@ldots}% - \else \let\next@\tdots@\fi - \FN@\next@} -\DeclareRobustCommand{\dotsc}{% - \DN@{\ifx\@let@token;\@ldots\,% - \else \ifx\@let@token.\@ldots\,% - \else \extra@\@ldots \ifgtest@\,\fi - \fi\fi}% - \FN@\next@} -\renewcommand{\longrightarrow}{% - \DOTSB\protect\relbar\protect\joinrel\rightarrow} -\renewcommand{\Longrightarrow}{% - \DOTSB\protect\Relbar\protect\joinrel\Rightarrow} -\renewcommand{\longleftarrow}{% - \DOTSB\leftarrow\protect\joinrel\protect\relbar} -\renewcommand{\Longleftarrow}{% - \DOTSB\Leftarrow\protect\joinrel\protect\Relbar} -\renewcommand{\longleftrightarrow}{\DOTSB\leftarrow\joinrel\rightarrow} -\renewcommand{\Longleftrightarrow}{\DOTSB\Leftarrow\joinrel\Rightarrow} -\renewcommand{\mapsto}{\DOTSB\mapstochar\rightarrow} -\renewcommand{\longmapsto}{\DOTSB\mapstochar\longrightarrow} -\renewcommand{\hookrightarrow}{\DOTSB\lhook\joinrel\rightarrow} -\renewcommand{\hookleftarrow}{\DOTSB\leftarrow\joinrel\rhook} -\renewcommand{\iff}{\DOTSB\;\Longleftrightarrow\;} -% \end{macrocode} -% The \cn{doteq} command formerly used \cs{buildrel}; we avoid that -% because it requires `\cn{over}' as part of its syntax. Use 0pt -% instead of \cs{z@} for robustitude. -% \begin{macrocode} -\renewcommand{\doteq}{% - \DOTSB\mathrel{\mathop{\kern0pt =}\limits^{\textstyle.}}} -% \end{macrocode} -% -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \section{Integral signs} -% -% The straightforward \cs{ifinner} test to see if the current math -% context is non-display, fails if, for instance, we are typesetting -% a multiline display within an \cs{halign}, with the pieces going -% into constructions like -% \begin{verbatim} -% $\displaystyle...$ -% \end{verbatim} -% So we need a better test to find out if we are `in a display'. We -% therefore create \cs{if@display}. -% -% \begin{macrocode} -\newif\if@display -\everydisplay\@xp{\the\everydisplay \@displaytrue} -% \end{macrocode} -% -% Default value for integral limits is \cs{nolimits}, see the -% definition of the `nointlimits' option. -% \begin{macrocode} -\renewcommand{\int}{\DOTSI\intop\ilimits@} -\renewcommand{\oint}{\DOTSI\ointop\ilimits@} -\def\intkern@{\mkern-6mu\mathchoice{\mkern-3mu}{}{}{}} -\def\intdots@{\mathchoice{\@cdots}% - {{\cdotp}\mkern1.5mu{\cdotp}\mkern1.5mu{\cdotp}}% - {{\cdotp}\mkern1mu{\cdotp}\mkern1mu{\cdotp}}% - {{\cdotp}\mkern1mu{\cdotp}\mkern1mu{\cdotp}}} -% -\newcommand{\iint}{\DOTSI\protect\MultiIntegral{2}} -\newcommand{\iiint}{\DOTSI\protect\MultiIntegral{3}} -\newcommand{\iiiint}{\DOTSI\protect\MultiIntegral{4}} -\newcommand{\idotsint}{\DOTSI\protect\MultiIntegral{0}} -% \end{macrocode} -% -% If the \cs{limits} option is applied, use \cs{mathop} and fudge -% the left-hand space a bit to make the subscript visually centered. -% -% \verb'#1' is the multiplicity. -% \begin{macrocode} -\newcommand{\MultiIntegral}[1]{% - \edef\ints@c{\noexpand\intop - \ifnum#1=\z@\noexpand\intdots@\else\noexpand\intkern@\fi - \ifnum#1>\tw@\noexpand\intop\noexpand\intkern@\fi - \ifnum#1>\thr@@\noexpand\intop\noexpand\intkern@\fi - \noexpand\intop - \noexpand\ilimits@ - }% - \futurelet\@let@token\ints@a -} -% \end{macrocode} -% -% \begin{macrocode} -\def\ints@a{% - \ifx\limits\@let@token \ints@b - \else \ifx\displaylimits\@let@token \ints@b - \else\ifx\ilimits@\displaylimits \ints@b - \fi\fi\fi - \ints@c -} -% \end{macrocode} -% -% \begin{macrocode} -\def\ints@b{% - \mkern-7mu\mathchoice{\mkern-2mu}{}{}{}% - \mathop\bgroup - \mkern7mu\mathchoice{\mkern2mu}{}{}{}% - \let\ilimits@\egroup -}% -% \end{macrocode} -% -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \section{Size dependent definitions} -% -% We now define all stuff which has to change whenever a new math -% size is to be activated. \latex/ provides a hook called -% |\every@math@size| to support such a need. All assignments in the -% |\every@math@size| hook that need to take outside effect should be -% global. -% -% \subsection{Struts for math} -% -% The various kinds of struts could use some analysis and perhaps -% consolidation. -% -% For example perhaps the \cn{bBigg} delimiters could use -% \begin{verbatim} -% 1.2\ht\strutbox (1.8, 2.4, 3.0) -% \end{verbatim} -% instead of -% \begin{verbatim} -% 1.0\big@size (1.5, 2.0, 2.5) -% \end{verbatim} -% since \cs{strut} is reset with every size change [mjd, 1994/10/07]. -% But this change would introduce the possibility of changed line -% and page breaks in existing documents, so would need to be -% handled with care. -% -% \begin{macro}{\Mathstrut@} -% \begin{macro}{\Mathstrutbox@} -% \begin{macro}{\resetMathstrut@} -% Here comes the code for Spivak's |\Mathstrut@|. -% \begin{macrocode} -\newbox\Mathstrutbox@ -\setbox\Mathstrutbox@=\hbox{} -\def\Mathstrut@{\copy\Mathstrutbox@} -% \end{macrocode} -% The setting of the height and depth of the |\Mathstrutbox@| is done -% in the |\every@math@size| hook since it depends on the height of a -% paren. As \cs{every@math@size} is triggered by |$| after a font -% size change, we want to avoid using another math formula |$...$| to -% measure the math paren height; instead we go through the mathcode -% of the \qc{\(} character. We assume that the mathcode has a leading -% hex digit 4 indicating `open delimiter'; this allows us to make a -% relatively simple function to get the correct font and character -% position. -% \begin{macrocode} -\def\resetMathstrut@{% - \setbox\z@\hbox{% - \mathchardef\@tempa\mathcode`\(\relax - \def\@tempb##1"##2##3{\the\textfont"##3\char"}% - \expandafter\@tempb\meaning\@tempa \relax - }% -% \end{macrocode} -% These height and depth assignments are implicitly global. -% \begin{macrocode} - \ht\Mathstrutbox@\ht\z@ \dp\Mathstrutbox@\dp\z@ -} -\addto@hook\every@math@size{\resetMathstrut@} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\strut@} -% \begin{macro}{\strutbox@} -% Next follows a special internal strut which is supposed to match -% the height and the depth of a normal |\strut| minus -% |\normallineskiplimit| according to M. Spivak. -% -% This should really go into the definition of \cs{size@update}, and -% then the box reset could be local; but \cs{size@update} doesn't -% have any hook and is handled in such a way that it cannot even be -% changed except by changing \cs{set@fontsize}. So instead we put -% \cs{reset@strutbox@} into \cs{every@math@size} and make it global. -% Then because of some complications in the way \cs{glb@settings} and -% \cs{check@mathfonts} work, we have to re-invoke it at the beginning -% of every environment that might use \cs{strut@}. Fortunately this -% can be achieved (more or less) through the \cs{spread@equation} -% hook. [mjd,2000/03/10] -% \begin{macrocode} -\newbox\strutbox@ -\def\strut@{\copy\strutbox@} -\def\reset@strutbox@{% - \global\setbox\strutbox@\hbox{% - \lower.5\normallineskiplimit - \vbox{\kern-\normallineskiplimit\copy\strutbox}}} -\addto@hook\every@math@size{\reset@strutbox@} -\AtBeginDocument{\reset@strutbox@} -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \subsection{Big delimiters} -% -% We are now going to redefine the plain \tex/ commands \cn{big}, -% \cn{bigl}, etc., to produce different results in different sizes. -% Actually we only have to define \cn{big}, \cn{Big}, etc., since -% they are used to construct the directional versions \cn{bigl}, -% \cn{bigr}, and the rest. -% -% \begin{macro}{\big} -% \begin{macro}{\Big} -% \begin{macro}{\bigg} -% \begin{macro}{\Bigg} -% To save token space we put everything into the common macro -% |\bBigg@|. The macros are now simply a call to |\bBigg@| with a -% factor to determine the correct height of the delimiter as an -% argument. This code should better go into a future version of -% the \latex/ kernel; the macro |\n@space| is then superfluous (since -% it is only used once) and should be removed to avoid wasting hash -% table space unnecessarily. -% \begin{macrocode} -\renewcommand{\big}{\bBigg@\@ne} -\renewcommand{\Big}{\bBigg@{1.5}} -\renewcommand{\bigg}{\bBigg@\tw@} -\renewcommand{\Bigg}{\bBigg@{2.5}} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\bBigg@} -% Now we tackle the macro which has to do the real work. It -% actually has two arguments, the factor and the wanted delimiter. -% \begin{macrocode} -\def\bBigg@#1#2{% -% \end{macrocode} -% We start with an extra set of braces because we want -% constructions like |\def\bigl{\mathopen\big}| to work without the -% overhead of extra arguments. -% \begin{macrocode} - {\@mathmeasure\z@{\nulldelimiterspace\z@}% - {\left#2\vcenter to#1\big@size{}\right.}% - \box\z@}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\big@size} -% |\big@size| needs to be set to 1.2 times the height of a math -% paren. This height is already recorded in |\Mathstrutbox@|. -% \begin{macrocode} -\addto@hook\every@math@size{% - \global\big@size 1.2\ht\Mathstrutbox@ - \global\advance\big@size 1.2\dp\Mathstrutbox@ } -\newdimen\big@size -% \end{macrocode} -% \end{macro} -% -% -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \section{Math accents} -% -% We want to change the leading digit of math accents to be -% \cs{accentclass@} so that it can vary according to certain internal -% purposes. -% \begin{macrocode} -\def\accentclass@{7} -\def\noaccents@{\def\accentclass@{0}} -% \end{macrocode} -% -% There are a few \meta{math alphabet}s in the standard fonts where -% we have to change the extra macros because the standard definitions -% don't account for these accent problems. The first is for the -% \cs{mathit} command. -% \begin{macrocode} -\DeclareFontEncoding{OML}{}{\noaccents@} -% \end{macrocode} -% The next one corrects the \cs{cal} alphabet. -% \begin{macrocode} -\DeclareFontEncoding{OMS}{}{\noaccents@} -% \end{macrocode} -% -% Triple and quadruple dot accents. -% \begin{macrocode} -\newcommand{\dddot}[1]{% - {\mathop{#1}\limits^{\vbox to-1.4\ex@{\kern-\tw@\ex@ - \hbox{\normalfont ...}\vss}}}} -\newcommand{\ddddot}[1]{% - {\mathop{#1}\limits^{\vbox to-1.4\ex@{\kern-\tw@\ex@ - \hbox{\normalfont....}\vss}}}} -% \end{macrocode} -% -% The following code deals with support for compound accents. -% By redefining \cs{set@mathaccent} we ensure that -% \cn{DeclareMathAccent} will define accent commands to run our -% \cs{mathaccentV} function instead of the primitive \cs{mathaccent}. -% \begin{macrocode} -\def\set@mathaccent#1#2#3#4{% - \xdef#2{\@nx\protect\@nx\mathaccentV - {\@xp\@gobble\string#2}\hexnumber@#1#4}% -} -% \end{macrocode} -% -% We redefine the standard math accent commands to -% call \cs{mathaccentV}, using the mathgroup/encoding-number -% information embedded in their previous definitions. If the -% definition of an accent command does not have the expected form, we -% leave the accent command alone, but give a warning. For widehat and -% widetilde, we need to avoid clobbering the definitions done by the -% \pkg{amsfonts} package. Arbitrating the contention between -% \pkg{amsmath} and \pkg{amsfonts} to allow doubling a widetilde -% accent looks tricky, so for the time being [mjd,1999/07/19] we just -% leave \cn{widehat} and \cn{widetilde} alone. As a result, if the -% \pkg{amsmath} package is loaded on top of a vanilla \latex/ -% documentclass, everything runs through with no warnings. If a -% Lucida Math or other math fonts package is loaded in addition to -% \pkg{amsmath}, there are greater difficulties, but those are -% addressed elsewhere. -% \begin{macrocode} -\def\@tempa#1{\@xp\@tempb\meaning#1\@nil#1} -\def\@tempb#1>#2#3 #4\@nil#5{% - \@xp\ifx\csname#3\endcsname\mathaccent - \@tempc#4?"7777\@nil#5% - \else - \PackageWarningNoLine{amsmath}{% - Unable to redefine math accent \string#5}% - \fi -} -\def\@tempc#1"#2#3#4#5#6\@nil#7{% - \chardef\@tempd="#3\relax\set@mathaccent\@tempd{#7}{#2}{#4#5}} -\@tempa{\hat} -\@tempa{\check} -\@tempa{\tilde} -\@tempa{\acute} -\@tempa{\grave} -\@tempa{\dot} -\@tempa{\ddot} -\@tempa{\breve} -\@tempa{\bar} -\@tempa{\vec} -\@ifundefined{mathring}{% - \DeclareMathAccent{\mathring}{\mathalpha}{operators}{"17} -}{% - \@tempa{\mathring} -} -%%\@tempa\widetilde -%%\@tempa\widehat -% \end{macrocode} -% -% Regression testing of amsmath 2.0 showed that in some documents -% there occurred fragments of the form -% \begin{verbatim} -% \hat\mathcal{G} -% \end{verbatim} -% This is not at all correct syntax for the argument of a \latex/ -% command but it produced the intended result anyway because of the -% internal syntax of the \cs{mathaccent} primitive. With -% \cs{mathaccentV}, it will yield an error message. We therefore do a -% special check for such syntax problems in order to make the error -% message more informative. -% \begin{macrocode} -\newcommand{\acc@check}{} -\newcommand{\acc@error}{} -\def\acc@check{\@ifnextchar\@empty\relax\acc@error} -% \end{macrocode} -% We put most of the tokens in a separate macro so they do not get -% scanned unless they are actually needed. -% \begin{macrocode} -\def\acc@error{% - \@amsmath@err{% - Improper argument for math accent:\MessageBreak - Extra braces must be added to prevent wrong output% - }\@ehc -} -% \end{macrocode} -% -% For \cs{mathaccentV} part of the processing is dependent on the -% depth of nesting of math accent commands. We introduce a dedicated -% counter for this instead of using chardef because we want to -% increment/decrement it during processing, and incrementing a -% chardef integer is more work. -% \begin{macrocode} -\newcount\macc@depth -% \end{macrocode} -% -% Provide this function in case it is not already available. -% \begin{macrocode} -\long\def\@gobblethree#1#2#3{} -% \end{macrocode} -% -% The \cs{mathaccentV} function first counts the number of nested -% math accents by setting the argument in a throw-away box. (This is -% not as risky as such an operation would normally be because the -% argument is generally either a simple math symbol or a nested math -% accent call with a simple math symbol at the bottom of the -% nesting.) -% -% There are two benefits from counting the nesting levels first -% before doing anything else: (1) we can fall back to a simple -% \cs{mathaccent} call if the nesting depth is 1, and (2) if the -% nesting depth is greater than 1, we would like to be able to tell -% when we have reached the lowest level, because at that point we -% want to save the argument for later use and place an accent on top -% of a phantom copy. -% -% When we have multiple accents, they will be placed on top of the -% invisible box, followed by some suitable kerns, then a visible copy -% of the nucleus. To see why, let us look at what goes wrong with a -% double application of the \cs{mathaccent} primitive. The standard -% definition of \cs{hat} is \verb'\mathaccent"705E', so -% \verb'\hat{\hat{F}}' expands to -%\begin{verbatim} -%\mathaccent"705E{\mathaccent"705E{F}} -%\end{verbatim} -% The result of this operation is -%\begin{verbatim} -%\vbox(12.11111+0.0)x7.81946 -%.\hbox(6.94444+0.0)x0.0, shifted 1.40973 -%..\OT1/cmr/m/n/10 ^ -%.\kern-4.30554 -%.\vbox(9.47221+0.0)x7.81946 -%..\hbox(6.94444+0.0)x0.0, shifted 2.24309 -%...\OT1/cmr/m/n/10 ^ -%..\kern-4.30554 -%..\hbox(6.83331+0.0)x7.81946 -%...\OML/cmm/m/it/10 F -%\end{verbatim} -% \tex/ starts by constructing a vbox with the hat character on top -% of the F. Then it puts another hat character on top of the vbox; -% but without skew information, because that is only applied by -% \cs{mathaccent} when the base object is a simple symbol. So the -% first accent is skewed to the correct position but all later -% accents are not. By the way, the actual width of the F in the above -% example is less than 7.81946; the box in which it is packed was -% automatically lengthened by the width of the F's italic correction -% (without actually putting in a kern for it). -% -% To get the second accent shifted farther to the right we -% artificially increase the width of the innermost box and add -% a compensating kern afterward. Furthermore, to get proper placement -% of a following subscript or superscript, we take the base symbol -% out, leaving a phantom in its place, and print it by itself -% following the kern. We then need to increase the kern amount to -% move the base character backward under the accents again. -% Here is what the results look like: -%\begin{verbatim} -%\vbox(12.11111+0.0)x9.48618 -%.\hbox(6.94444+0.0)x0.0, shifted 2.24309 -%..\OT1/cmr/m/n/10 ^ -%.\kern-4.30554 -%.\vbox(9.47221+0.0)x9.48618 -%..\hbox(6.94444+0.0)x0.0, shifted 2.24309 -%...\OT1/cmr/m/n/10 ^ -%..\kern-4.30554 -%..\hbox(6.83331+0.0)x9.48618 -%...\hbox(6.83331+0.0)x7.81946 -%...\kern 1.66672 -%\kern -9.48618 -%\OML/cmm/m/it/10 F -%\end{verbatim} -% -% Much of this implementation is based on code from the \pkg{accents} -% package of Javier Bezos. I added the test to revert to a simple -% \cs{mathaccent} when accents are not nested, and some other -% refinements to reduce the number of kerns used (to conserve box -% memory) and the number of cycles through \cs{mathchoice} (to make -% things run a little faster). It was all rather difficult and my -% first two attempts had serious bugs but I hope and believe that -% this version will do better. [mjd,2000/03/15] -% -% The \qq{V} in \cs{mathaccentV} is just an indication that it takes -% five arguments. It is important that the name includes -% \texttt{mathaccent}, otherwise \cs{DeclareMathAccent} will balk at -% redefining one of our accent commands, for example when an -% alternative math font package is loaded. -% \begin{macrocode} -\def\mathaccentV#1#2#3#4#5{% - \ifmmode - \gdef\macc@tmp{\macc@depth\@ne}% - \setbox\z@\hbox{% - \let\mathaccentV\macc@test - \let\use@mathgroup\@gobbletwo \let\select@group\@gobblethree - \frozen@everymath{}$#5$% - }% - \macc@tmp - \ifnum\macc@depth=\@ne - \global\let\macc@nucleus\@empty - \mathaccent"\accentclass@ - \else - \@xp\macc@nested - \fi - #2#3#4{#5}% - \macc@nucleus - \else - \@xp\nonmatherr@\csname#1\endcsname - \fi -} -% \end{macrocode} -% -% \begin{macrocode} -\def\macc@test#1#2#3#4{\xdef\macc@tmp{\macc@tmp\advance\macc@depth\@ne}} -% \end{macrocode} -% -% \begin{macrocode} -\def\macc@group{-1} -% \end{macrocode} -% -% \begin{macrocode} -\def\macc@nested#1#2#3#4{% - \begingroup - \let\math@bgroup\@empty \let\math@egroup\macc@set@skewchar - \mathsurround\z@ \frozen@everymath{\mathgroup\macc@group\relax}% - \macc@set@skewchar\relax - \let\mathaccentV\macc@nested@a - \macc@nested@a\relax#1#2#3{#4}% - \endgroup -} -% \end{macrocode} -% -% \begin{macrocode} -\let\macc@palette\mathpalette -% \end{macrocode} -% -% \begin{macrocode} -\def\macc@nested@a#1#2#3#4#5{% -% \end{macrocode} -% This test saves some work that would otherwise be always repeated -% fourfold thanks to \cs{mathchoice}. -% \begin{macrocode} - \ifnum\macc@group=\mathgroup - \else \macc@set@skewchar\relax \edef\macc@group{\the\mathgroup}% - \fi - \mathchardef\macc@code "\accentclass@ #2#3#4\relax - \macc@palette\macc@a{#5}% -} -% \end{macrocode} -% -% The reason that \cs{macc@set@skewchar} takes an argument is so that -% it can serve as a direct substitute for \cs{math@egroup}, in -% addition to being used separately. -% -% Setting a skewchar with this method works for symbols of variable -% mathgroup (class 7, letters and numbers) but not necessarily for -% special symbols like \cn{partial} or \cs{xi} whose mathgroup -% doesn't change; fortunately the most commonly used ones come from -% mathgroup one, which is the fall-back mathgroup for skewchar. -% \begin{macrocode} -\def\macc@set@skewchar#1{% - \begingroup - \ifnum\mathgroup=\m@ne \let\@tempa\@ne - \else - \ifnum\skewchar\textfont\mathgroup=\m@ne \let\@tempa\@ne - \else \let\@tempa\mathgroup - \fi - \fi - \count@=\skewchar\textfont\@tempa - \advance\count@"7100 - \edef\@tempa{\endgroup - \mathchardef\noexpand\macc@skewchar=\number\count@\relax}% - \@tempa - #1% -} -% \end{macrocode} -% -% Arg1 is math-style, arg2 is accent base object. We assume that math -% style doesn't change within the nested group of accents; this means -% we can set \cs{macc@style} only once and redefine \cs{macc@palette} -% to use it, in order to run \cs{mathchoice} only once instead of -% multiplying the calls exponentially as the nesting level increases. -% \begin{macrocode} -\def\macc@a#1#2{% - \begingroup - \let\macc@style#1\relax - \def\macc@palette##1{##1\macc@style}% - \advance\macc@depth\m@ne - \ifnum\macc@depth=\z@ - \gdef\macc@nucleus{#2}% -% \end{macrocode} -% Extra \cs{@empty} tokens are to prevent low-level \tex/ errors from -% the potential syntactic error that \cs{acc@check} checks for. -% \begin{macrocode} - \setbox\z@\hbox{$#1#2\@empty{}\macc@skewchar$}% - \setbox\tw@\hbox{$#1#2\@empty\macc@skewchar$}% - \dimen@\tw@\wd\tw@ \advance\dimen@-\tw@\wd\z@ - \xdef\macc@kerna{\the\dimen@\relax}% - \setbox4\hbox{$#1#2\acc@check\@empty$}% - \global\setbox\@ne\hbox to\wd4{}% - \ht\@ne\ht4 \dp\@ne\dp4 - \xdef\macc@kernb{\the\wd4\relax}% - \mathaccent\macc@code{\box\@ne\kern\macc@kerna}% - \else - \mathaccent\macc@code{\let\macc@adjust\@empty #1#2\@empty}% - \macc@adjust - \fi - \endgroup -} -% \end{macrocode} -% -% \begin{macrocode} -\def\macc@adjust{% - \dimen@\macc@kerna\advance\dimen@\macc@kernb - \kern-\dimen@ -} -% \end{macrocode} -% -% The commands \cs{Hat}, \cs{Tilde}, \ldots, are supported as -% synonyms of \cs{hat}, \cs{tilde}, \ldots, for backward -% compatibility. -% \begin{macrocode} -\def\Hat{\hat} -\def\Check{\check} -\def\Tilde{\tilde} -\def\Acute{\acute} -\def\Grave{\grave} -\def\Dot{\dot} -\def\Ddot{\ddot} -\def\Breve{\breve} -\def\Bar{\bar} -\def\Vec{\vec} -% \end{macrocode} -% -% This error message about math mode is used several times so we make -% an abbreviation for it. -% \begin{macrocode} -\def\nonmatherr@#1{\@amsmath@err{\protect - #1 allowed only in math mode}\@ehd} -% \end{macrocode} -% -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \section{Mods, continued fractions, etc.} -% -% The commands \cn{bmod}, \cn{pmod}, \cn{pod}, \cn{mod} aren't -% currently robust. [mjd, 1994/09/05] -% \begin{macrocode} -\renewcommand{\bmod}{\nonscript\mskip-\medmuskip\mkern5mu\mathbin - {\operator@font mod}\penalty900 - \mkern5mu\nonscript\mskip-\medmuskip} -\newcommand{\pod}[1]{\allowbreak - \if@display\mkern18mu\else\mkern8mu\fi(#1)} -\renewcommand{\pmod}[1]{\pod{{\operator@font mod}\mkern6mu#1}} -\newcommand{\mod}[1]{\allowbreak\if@display\mkern18mu - \else\mkern12mu\fi{\operator@font mod}\,\,#1} -% \end{macrocode} -% -% Continued fractions. The optional arg l or r controls horizontal -% placement of the numerators. The |\kern-\nulldelimiterspace| -% is needed in the definition if we want the right-hand sides of the -% fraction rules to line up. The \cs{strut} keeps the numerator of -% a subsidiary cfrac from coming too close to the fraction rule above -% it. -% \begin{macrocode} -\newcommand{\cfrac}[3][c]{{\displaystyle\frac{% - \strut\ifx r#1\hfill\fi#2\ifx l#1\hfill\fi}{#3}}% - \kern-\nulldelimiterspace} -% \end{macrocode} -% -% \cn{overset} and \cn{underset} put symbols above, respectively -% below, a symbol that is not a \cs{mathop} and therefore does not -% naturally accept limits. \cs{binrel@@} uses information collected -% by \cs{binrel@} to make the resulting construction be of type -% mathrel or mathbin if the base symbol is either of those types. -% \begin{macrocode} -\newcommand{\overset}[2]{\binrel@{#2}% - \binrel@@{\mathop{\kern\z@#2}\limits^{#1}}} -% \end{macrocode} -% -% \begin{macrocode} -\newcommand{\underset}[2]{\binrel@{#2}% - \binrel@@{\mathop{\kern\z@#2}\limits_{#1}}} -% \end{macrocode} -% -% \cn{sideset} allows placing `adscript' symbols at the four -% corners of a \cs{mathop}, \emph{in addition to} limits. Left-side -% adscripts go into arg \arg{1}, in the form |_{...}^{...}|, and -% right-side adscripts go into arg \arg{2}. -% -% As currently written [mjd, 1995/01/21] this is pretty haphazard. -% In order to really make it work properly in full generality we'd -% have to read and measure the top and bottom limits and use -% mathchoice to always get the right mathstyle for each piece, -% etc., etc. -% \begin{macrocode} -\newcommand{\sideset}[3]{% - \@mathmeasure\z@\displaystyle{#3}% -% \end{macrocode} -% Use a global box assignment here since the depth override is -% implicitly global. Then move the constructed box to a local box -% register (2) to ensure it won't get destroyed during the next two -% mathmeasure statements. This precaution may be more extreme than -% necessary in practice. -% \begin{macrocode} - \global\setbox\@ne\vbox to\ht\z@{}\dp\@ne\dp\z@ - \setbox\tw@\box\@ne - \@mathmeasure4\displaystyle{\copy\tw@#1}% - \@mathmeasure6\displaystyle{#3\nolimits#2}% - \dimen@-\wd6 \advance\dimen@\wd4 \advance\dimen@\wd\z@ - \hbox to\dimen@{}\mathop{\kern-\dimen@\box4\box6}% -} -% \end{macrocode} -% -% \begin{macro}{\smash} -% We add to the \cn{smash} command an optional argument -% denoting the part of the formula to be smashed. -% \begin{macrocode} -\renewcommand{\smash}[1][tb]{% - \def\mb@t{\ht}\def\mb@b{\dp}\def\mb@tb{\ht\z@\z@\dp}% - \edef\finsm@sh{\csname mb@#1\endcsname\z@\z@ \box\z@}% - \ifmmode \@xp\mathpalette\@xp\mathsm@sh - \else \@xp\makesm@sh - \fi -} -% \end{macrocode} -% \end{macro} -% -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \section{Extensible arrows} -% -% The minus sign used in constructing these arrow fills is smashed so -% that superscripts above the arrows won't be too high. This -% primarily affects the \cn{xleftarrow} and \cn{xrightarrow} arrows. -% -% \begin{macrocode} -\mathchardef\std@minus\mathcode`\-\relax -\mathchardef\std@equal\mathcode`\=\relax -% \end{macrocode} -% In case some alternative math fonts are loaded later: -% \begin{macrocode} -\AtBeginDocument{% - \mathchardef\std@minus\mathcode`\-\relax - \mathchardef\std@equal\mathcode`\=\relax -} -% \end{macrocode} -% -% \begin{macrocode} -\def\relbar{\mathrel{\mathpalette\mathsm@sh\std@minus}} -\def\Relbar{\mathrel\std@equal} -% \end{macrocode} -% -% \begin{macrocode} -\def\arrowfill@#1#2#3#4{% - $\m@th\thickmuskip0mu\medmuskip\thickmuskip\thinmuskip\thickmuskip - \relax#4#1\mkern-7mu% - \cleaders\hbox{$#4\mkern-2mu#2\mkern-2mu$}\hfill - \mkern-7mu#3$% -} -\def\leftarrowfill@{\arrowfill@\leftarrow\relbar\relbar} -\def\rightarrowfill@{\arrowfill@\relbar\relbar\rightarrow} -\def\leftrightarrowfill@{\arrowfill@\leftarrow\relbar\rightarrow} -\def\Leftarrowfill@{\arrowfill@\Leftarrow\Relbar\Relbar} -\def\Rightarrowfill@{\arrowfill@\Relbar\Relbar\Rightarrow} -\def\Leftrightarrowfill@{\arrowfill@\Leftarrow\Relbar\Rightarrow} -% \end{macrocode} -% -% \begin{macrocode} -\def\overarrow@#1#2#3{\vbox{\ialign{##\crcr#1#2\crcr - \noalign{\nointerlineskip}$\m@th\hfil#2#3\hfil$\crcr}}} -\renewcommand{\overrightarrow}{% - \mathpalette{\overarrow@\rightarrowfill@}} -\renewcommand{\overleftarrow}{% - \mathpalette{\overarrow@\leftarrowfill@}} -\newcommand{\overleftrightarrow}{% - \mathpalette{\overarrow@\leftrightarrowfill@}} -% \end{macrocode} -% -% \begin{macrocode} -\def\underarrow@#1#2#3{% - \vtop{\ialign{##\crcr$\m@th\hfil#2#3\hfil$\crcr - \noalign{\nointerlineskip\kern1.3\ex@}#1#2\crcr}}} -\newcommand{\underrightarrow}{% - \mathpalette{\underarrow@\rightarrowfill@}} -\newcommand{\underleftarrow}{% - \mathpalette{\underarrow@\leftarrowfill@}} -\newcommand{\underleftrightarrow}{% - \mathpalette{\underarrow@\leftrightarrowfill@}} -% \end{macrocode} -% -% \begin{macrocode} -%\newcommand{\xrightarrow}[2][]{\ext@arrow 0359\rightarrowfill@{#1}{#2}} -\def\ext@arrow#1#2#3#4#5#6#7{% - \mathrel{\mathop{% -% \end{macrocode} -% Measure the superscript and subscript. -% \begin{macrocode} - \setbox\z@\hbox{#5\displaystyle}% - \setbox\tw@\vbox{\m@th - \hbox{$\scriptstyle\mkern#3mu{#6}\mkern#4mu$}% - \hbox{$\scriptstyle\mkern#3mu{#7}\mkern#4mu$}% - \copy\z@ - }% - \hbox to\wd\tw@{\unhbox\z@}}% -% \end{macrocode} -% We don't want to place an empty subscript since that will produce -% too much blank space below the arrow. -% \begin{macrocode} - \limits - \@ifnotempty{#7}{^{\if0#1\else\mkern#1mu\fi - #7\if0#2\else\mkern#2mu\fi}}% - \@ifnotempty{#6}{_{\if0#1\else\mkern#1mu\fi - #6\if0#2\else\mkern#2mu\fi}}}% -} -% \end{macrocode} -% -% Some extensible arrows to serve as mathrels and taking -% sub/superscripts. These commands are robust because they take an -% optional argument. -% \begin{macrocode} -\newcommand{\xrightarrow}[2][]{\ext@arrow 0359\rightarrowfill@{#1}{#2}} -\newcommand{\xleftarrow}[2][]{\ext@arrow 3095\leftarrowfill@{#1}{#2}} -% \end{macrocode} -% -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \section{Array-related environments} -% \subsection{Remarks} -% -% Because these environments can be nested within the equation -% structures that allow \cn{tag}, there is some cross-influence in -% the internal workings of the \cn{\\} command. -% -% \subsection{The \cn{substack} command} -% -% The \cn{substack} command can be used to set subscripts -% and superscripts that consist of several lines. Usage: -% \begin{verbatim} -% X_{\substack{a=1\\b=2}} -% \end{verbatim} -% -% \changes{v2.0}{1999/06/17}{Removed environment definitions: Sb, Sp} -% -% \begin{environment}{subarray} -% The \env{subarray} environment makes a small-size array suitable -% for use in a subscript or superscript. At the moment the supported -% arguments are not the full possibilities of \env{array} but only -% |c| or |l| for centered or left-aligned. And only one column. -% \begin{macrocode} -\newenvironment{subarray}[1]{% -% \end{macrocode} -% Note: The predecessors of \env{subarray} (\env{Sb} and \env{Sp}, -% inherited from \amstex/) used \cs{vbox} instead of \cs{vcenter}. -% But when a multiline subscript is placed in \cs{limits} position -% \cs{vcenter} is no worse than \cs{vbox}, and when it is placed -% in the \cs{nolimits} position (e.g., for an integral), \cs{vcenter} -% provides clearly better positioning than \cs{vbox}. -% \begin{macrocode} - \vcenter\bgroup -% \end{macrocode} -% Use \cs{Let@} to set the proper meaning of the \cn{\\} and \cn{\\*} -% commands. And restore the meaning of \cs{math@cr@@@} to \cs{cr} -% (see above) in case \env{subarray} is used inside one of the more -% complicated alignment macros where the meaning of \cs{math@cr@@@} -% is different. Similarly, call \cs{default@tag} to ensure that a -% line break here doesn't get an equation number! -% \begin{macrocode} - \Let@ \restore@math@cr \default@tag -% \end{macrocode} -% Set the line spacing to be the same as \cs{atop} (when \cs{atop} -% occurs in \cs{textstyle} or smaller), cf \textit{The \tex/book}, -% Appendix G. -% \begin{macrocode} - \baselineskip\fontdimen10 \scriptfont\tw@ - \advance\baselineskip\fontdimen12 \scriptfont\tw@ - \lineskip\thr@@\fontdimen8 \scriptfont\thr@@ - \lineskiplimit\lineskip -% \end{macrocode} -% Start the \cs{vbox} \cs{halign} structure that encloses the -% contents. Notice that we never get \cs{scriptscriptstyle}. That -% would require a \cs{mathchoice} (ugh). -% \begin{macrocode} - \ialign\bgroup\ifx c#1\hfil\fi - $\m@th\scriptstyle##$\hfil\crcr -}{% - \crcr\egroup\egroup -} -% \end{macrocode} -% \end{environment} -% -% \begin{macro}{\substack} -% The \cn{substack} command is just an abbreviation for the -% most common use of \env{subarray}. -% \begin{macrocode} -\newcommand{\substack}[1]{\subarray{c}#1\endsubarray} -% \end{macrocode} -% \end{macro} -% -% \subsection{Matrices} -% -% \begin{environment}{smallmatrix} -% \env{smallmatrix} is again an alignment, this time in a centered -% box. The opening incantations are basically the same as those in -% \cs{multilimits@}, followed by the alignment itself. A remark: -% the baselineskip (|9\ex@|) used in \amstex/ is too large for -% use in text with the usual baselineskip of $12$ or $13$ points; we -% change it here to |6\ex@| and also adjust the \cs{lineskip} -% and \cs{lineskiplimit} slightly to compensate. (MJD) -% \begin{macrocode} -\newenvironment{smallmatrix}{\null\,\vcenter\bgroup - \Let@\restore@math@cr\default@tag - \baselineskip6\ex@ \lineskip1.5\ex@ \lineskiplimit\lineskip - \ialign\bgroup\hfil$\m@th\scriptstyle##$\hfil&&\thickspace\hfil - $\m@th\scriptstyle##$\hfil\crcr -}{% - \crcr\egroup\egroup\,% -} -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{matrix} -% The \env{matrix} environment is just an \env{array} that provides -% up to ten centered columns, so that users don't have to give the -% col-spec argument explicitly---unless they want some of the columns -% noncentered, that is. The maximum number of columns is actually not -% fixed at ten but given by the counter |MatrixCols|, and can -% therefore be increased by changing that counter. -% -% The extra space of \cn{arraycolsep} that \env{array} adds on each -% side is a waste so we remove it here (perhaps we should instead -% remove it from \env{array} in general, but that's a harder task). -% -% TODO: Think about re-implementing \cn{matrix} to get rid of the -% \cs{c@MatrixCols} limit and have hard-wired preamble that doesn't -% have to be rebuilt each time. -% -% We must use \cn{renewenvironment} for \env{matrix} and -% \env{pmatrix} because \latex/ doesn't kill the definitions found in -% \fn{plain.tex}, even though it probably should because of their -% foreign syntax. -% \begin{macrocode} -\renewenvironment{matrix}{% - \matrix@check\matrix\env@matrix -}{% - \endarray \hskip -\arraycolsep -} -% \end{macrocode} -% \end{environment} -% -% \begin{macro}{\env@matrix} -% -% \begin{macrocode} -\def\env@matrix{\hskip -\arraycolsep - \let\@ifnextchar\new@ifnextchar - \array{*\c@MaxMatrixCols c}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\c@MaxMatrixCols} -% \begin{macrocode} -\newcount\c@MaxMatrixCols \c@MaxMatrixCols=10 -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\matrix@check} -% For various reasons, authors sometimes use the Plain \TeX{} form of -% \cn{matrix} or \cn{pmatrix} in \LaTeX{} documents. If they later -% add an invocation of the \pkg{amsmath} package to their document, -% the Plain \TeX{} syntax would lead to rather unintelligible error -% messages. The \cs{matrix@check} function does some checking to -% forestall that problem. -% \begin{macrocode} -\def\matrix@check#1{% - \@xp\ifx\csname\@currenvir\endcsname#1% - \else\matrix@error#1% -% \end{macrocode} -% This error recovery is not that good but is better than the -% infinite loop that can result from calling \cs{array} without a -% matching \cs{endarray}. (The array setup leaves \cs{par} empty.) -% \begin{macrocode} - \@xp\@gobble - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\matrix@error} -% -% \begin{macrocode} -\def\matrix@error#1{% - \@amsmath@err{% -Old form `\string#1' should be \string\begin{\@xp\@gobble\string#1}% - }{% -`\string#1{...}' is old Plain-TeX syntax whose use is -ill-advised in LaTeX.% - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\renewenvironment{pmatrix}{% - \left(% - \matrix@check\pmatrix\env@matrix -}{ - \endmatrix\right)% -} -\newenvironment{bmatrix}{\left[\env@matrix}{\endmatrix\right]} -\newenvironment{Bmatrix}{% - \left\lbrace\env@matrix -}{% - \endmatrix\right\rbrace -} -\newenvironment{vmatrix}{\left\lvert\env@matrix}{\endmatrix\right\rvert} -\newenvironment{Vmatrix}{\left\lVert\env@matrix}{\endmatrix\right\rVert} -% \end{macrocode} -% -% \begin{macrocode} -\let\hdots\@ldots -% \end{macrocode} -% -% \begin{macrocode} -\newcommand{\hdotsfor}[1]{% - \ifx[#1\@xp\shdots@for\else\hdots@for\@ne{#1}\fi} -\newmuskip\dotsspace@ -\def\shdots@for#1]{\hdots@for{#1}} -\def\hdots@for#1#2{\multicolumn{#2}c% - {\m@th\dotsspace@1.5mu\mkern-#1\dotsspace@ - \xleaders\hbox{$\m@th\mkern#1\dotsspace@.\mkern#1\dotsspace@$}% - \hfill - \mkern-#1\dotsspace@}% - } -% \end{macrocode} -% -% \begin{environment}{cases} -% The easiest way to produce the \env{cases} environment is to base -% it on the \env{array} environment. We must use -% \cn{renewenvironment} to override the definition of \cn{cases} that -% \latex/ (unwisely) leaves in place from \fn{plain.tex}. -% \begin{macrocode} -\renewenvironment{cases}{% - \matrix@check\cases\env@cases -}{% - \endarray\right.% -} -\def\env@cases{% - \let\@ifnextchar\new@ifnextchar - \left\lbrace - \def\arraystretch{1.2}% - \array{@{}l@{\quad}l@{}}% -} -% \end{macrocode} -% \end{environment} -% -% -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \section{Equation sub-numbering} -% -% \begin{macrocode} -\newcounter{parentequation}% Counter for ``parent equation''. -% \end{macrocode} -% -% We can't assume \cs{ignorespacesafterend} is defined since it was -% not there in the earliest releases of \latex/ 2e. And we need to -% include the \cs{global} for the same reason. -% \begin{macrocode} -\@ifundefined{ignorespacesafterend}{% - \def\ignorespacesafterend{\global\@ignoretrue}% -}{} -% \end{macrocode} -% -% \begin{macrocode} -\newenvironment{subequations}{% -% \end{macrocode} -% Before sending down the `equation' counter to the subordinate -% level, add 1 using standard \cn{refstepcounter}. -% \begin{macrocode} - \refstepcounter{equation}% -% \end{macrocode} -% Define \cn{theparentequation} equivalent to current -% \cn{theequation}. \cn{edef} is necessary to expand the current -% value of the equation counter. This might in rare cases cause -% something to blow up, in which case the user needs to add -% \cn{protect}. -% \begin{macrocode} - \protected@edef\theparentequation{\theequation}% - \setcounter{parentequation}{\value{equation}}% -% \end{macrocode} -% And set the equation counter to 0, so that the normal incrementing -% processes in the various equation environments will produce the -% desired results. -% \begin{macrocode} - \setcounter{equation}{0}% - \def\theequation{\theparentequation\alph{equation}}% - \ignorespaces -}{% - \setcounter{equation}{\value{parentequation}}% - \ignorespacesafterend -} -% \end{macrocode} -% -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \section{Equation numbering} -% -% In the multiline equation environments provided here, the task -% of equation numbering is linked to the task of line breaking -% in the sense that it is the \cn{\\} command that marks where an -% equation number for the current line will be processed and added to -% the page. -% -% Provide a convenient way to specify that equations should be -% numbered within sections. -% \begin{macrocode} -\newcommand{\numberwithin}[3][\arabic]{% - \@ifundefined{c@#2}{\@nocounterr{#2}}{% - \@ifundefined{c@#3}{\@nocnterr{#3}}{% - \@addtoreset{#2}{#3}% - \@xp\xdef\csname the#2\endcsname{% - \@xp\@nx\csname the#3\endcsname .\@nx#1{#2}}}}% -} -% \end{macrocode} -% -% To make references to equation numbers easier, we provide -% \cn{eqref}. We almost don't need \cn{textup}, except that -% \cs{tagform@} doesn't supply the italic correction. -% \begin{macrocode} -\newcommand{\eqref}[1]{\textup{\tagform@{\ref{#1}}}} -% \end{macrocode} -% -% \subsection{Preliminary macros} -% -% The following macros implement the \latex/ syntax for the -% \cn{\\} command, i.e. the possibility to add an asterisk to -% inhibit a page break, or an optional argument to denote additional -% vertical space. They are modelled more or less after the -% corresponding macros for \latex/'s \env{eqnarray} and \env{array} -% environments. -% -% [We can perhaps use the eqnarray mechanism if we change it so that -% it also uses \cs{openup}.] -% -% \begin{macro}{\dspbrk@lvl} -% We begin by defining the \cs{dspbrk@lvl} counter. This counter -% records the desirability of a break after the current row, as a -% number between $0$ and $4$. Its default value is $-1$ meaning that -% no explicit \cn{displaybreak} command was given, and the default -% \cs{interdisplaylinepenalty} is to be used. -% \begin{macrocode} -\newcount\dspbrk@lvl -\dspbrk@lvl=-1 -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\interdisplaylinepenalty} -% We set the \cs{interdisplaylinepenalty} to $10000$. -% \begin{macrocode} -\interdisplaylinepenalty\@M -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\allowdisplaybreaks} -% The \cn{allowdisplaybreaks} command. Since this is intended for use -% outside displayed formulas (typically in the preamble), it does not -% need to use \cs{new@ifnextchar}. -% \begin{macrocode} -\newcommand{\allowdisplaybreaks}[1][4]{% - \interdisplaylinepenalty\getdsp@pen{#1}\relax -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\getdsp@pen} -% Modelled after \latex/'s \cs{@getpen}. We use higher numbers -% than would normally be provided by \cs{@lowpenalty}, -% \cs{@medpenalty}, and \cs{@highpenalty}, since display -% breaks are almost always less desirable. -% \begin{macrocode} -\def\getdsp@pen#1{% - \ifcase #1\@M \or 9999 \or 6999 \or 2999 \or \z@\fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\displaybreak} -% \begin{macro}{\dspbrk@} -% \begin{macro}{\dspbrk@context} -% \begin{macro}{\nogood@displaybreak} -% For breaks in a certain row of a alignment. -% \begin{macrocode} -\newcommand{\displaybreak}{\new@ifnextchar[\dspbrk@{\dspbrk@[4]}} -\chardef\dspbrk@context=\sixt@@n -% \end{macrocode} -% -% \begin{macrocode} -\def\dspbrk@[#1]{% - \ifmeasuring@ - \else - \ifcase\dspbrk@context % case 0 --- OK - \global\dspbrk@lvl #1\relax - \or % case 1 --- inside a box - \nogood@displaybreak - \else % other cases --- outside of a display - \@amsmath@err{\Invalid@@\displaybreak}\@eha - \fi - \fi -} -% \end{macrocode} -% -% This is the value of \cn{displaybreak} when it occurs inside some -% structure where it will not work. -% \begin{macrocode} -\def\nogood@displaybreak{% - \@amsmath@err{\protect -\displaybreak\space cannot be applied here}% -{One of the enclosing environments creates an - unbreakable box\MessageBreak -(e.g., split, aligned, gathered, ...).}% -} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\math@cr} -% The macro \cs{math@cr} ends a row inside one of the equation -% environments, i.e., this is the internal name of the \cn{\\} -% commands in these environments. As usual for this kind of macro -% inside of alignments we insert a special brace into \tex/'s input -% stream. The initial \cs{relax} is needed to trigger entry into the -% \textit{u} template of the current column if the author ended the -% current row with an empty column (i.e., the mathcr was immediately -% preceded by an ampersand). -% \begin{macrocode} -\def\math@cr{\relax\iffalse{\fi\ifnum0=`}\fi -% \end{macrocode} -% The first step is now to check whether an asterisk follows. -% \cs{@eqpen} is used to hold the penalty value to be put on -% the vertical list. -% Then we call up \cs{math@cr@} which performs the next step. -% If an asterisk is read page breaking is inhibited. -% \begin{macrocode} - \@ifstar{\global\@eqpen\@M\math@cr@}% -% \end{macrocode} -% Otherwise we have to check the \cs{dspbrk@lvl} value. -% \begin{macrocode} - {\global\@eqpen - \ifnum\dspbrk@lvl <\z@ \interdisplaylinepenalty - \else -\@getpen\dspbrk@lvl \fi - \math@cr@}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\math@cr@} -% The purpose of \cs{math@cr@} is to check whether an optional -% argument follows. If not it provides \cs{z@} as default -% value. -% \begin{macrocode} -\def\math@cr@{\new@ifnextchar[\math@cr@@{\math@cr@@[\z@]}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\math@cr@@} -% \cs{math@cr@@} closes the special brace opened in -% \cs{math@cr}, and calls \cs{math@cr@@@} which is supposed -% the `real' row ending command. The meaning of this macro depends -% on the environment in which it is used. -% \begin{macrocode} -\def\math@cr@@[#1]{\ifnum0=`{\fi \iffalse}\fi\math@cr@@@ -% \end{macrocode} -% Finally we put the additional space onto the vertical list. -% \begin{macrocode} - \noalign{\vskip#1\relax}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\Let@} -% \cs{Let@} is called by all environments where \cn{\\} -% ends a row of an alignment. -% \begin{macrocode} -\def\Let@{\let\\\math@cr} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\restore@math@cr} -% We mentioned already that the exact meaning of \cs{math@cr@@@} -% depends on the current environment. Since it is often a simple -% \cs{cr} we provide \cs{restore@math@cr} to reset it. -% \begin{macrocode} -\def\restore@math@cr{\def\math@cr@@@{\cr}} -% \end{macrocode} -% This is also the default case. -% \begin{macrocode} -\restore@math@cr -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\intertext} -% \begin{macro}{\intertext@} -% The \cn{intertext} command is used for inserting text between the -% rows of an alignment. It might better be done as an environment, -% but the \cs{begingroup} from \cn{begin} would cause the -% \cs{noalign} to fail. -% \begin{macrocode} -\newcommand{\intertext}{\@amsmath@err{\Invalid@@\intertext}\@eha} -% \end{macrocode} -% \cs{intertext@} is called by all environments that allow the use of -% the \cn{intertext} command. -% \begin{macrocode} -\def\intertext@{% - \def\intertext##1{% -% \end{macrocode} -% If current mode is not vmode, the most likely reason is that the -% writer forgot the \cn{\\} that is supposed to precede -% \cn{intertext}. All right, then, let's try adding it our ownself. -% But, to be slightly careful: \cn{\\} does a futurelet, and it's -% slightly dangerous to allow a letted token to barge around loose in -% our internal code when it has been let to a conditional token -% like \cs{fi}. So let's interpose something in front of the \cs{fi} -% for the futurelet to take instead. (And careful again: it has to be -% something evanescent, not (e.g.) \cs{relax} which would cause the -% next halign cell to fire up and keep \cs{noalign} from working.) -% \begin{macrocode} - \ifvmode\else\\\@empty\fi - \noalign{% - \penalty\postdisplaypenalty\vskip\belowdisplayskip - \vbox{\normalbaselines -% \end{macrocode} -% We need to do something extra if the outside environment is a list -% environment. I don't see offhand an elegant way to test ``are we -% inside any list environment'' that is both easy and reliable (for -% example, checking for zero \cs{@totalleftmargin} wouldn't catch the -% case where \cs{@totalleftmargin} is zero but \cs{linewidth} is less -% than \cs{columnwidth}), so it seems to me checking \cs{linewidth} -% is the best practical solution. -% \begin{macrocode} - \ifdim\linewidth=\columnwidth - \else \parshape\@ne \@totalleftmargin \linewidth - \fi - \noindent##1\par}% - \penalty\predisplaypenalty\vskip\abovedisplayskip% - }% -}} -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% -% \subsection{Implementing tags and labels} -% -% In this section we describe some of the macros needed to make the -% \cn{tag} command work in various places. We start by defining a -% help text to be used when a \cn{tag} command is used somewhere -% it should not appear. -% -% \begin{macro}{\tag@help} -% This is the default error help text provided when \cn{tag} -% generates an error message. -% Note that \cs{newhelp} generates a control sequence name -% from the string given as its argument so that a leading -% backslash is provided automatically. -% \begin{macrocode} -\newhelp\tag@help - {tag cannot be used at this point.\space - If you don't understand why^^Jyou should consult - the documentation.^^JBut don't worry: just continue, and I'll - forget what happened.} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\gobble@tag} -% This macro is to be used when \cn{tag} should silently -% skip its argument. -% It is made to handle the \qc{\*}-form of \cn{tag} as well. -% \begin{macrocode} -\def\gobble@tag{\@ifstar\@gobble\@gobble} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\invalid@tag} -% \cs{invalid@tag} is a macro that should be used whenever -% \cn{tag} appears in an illegal place. -% It sets up \cs{tag@help} (as defined above) as help message, -% prints its argument as error message, and skips \cn{tag}'s -% argument. -% \begin{macrocode} -\def\invalid@tag#1{\@amsmath@err{#1}{\the\tag@help}\gobble@tag} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\dft@tag} -% \begin{macro}{\default@tag} -% \cs{dft@tag} provides a convenient way to disallow the -% use of \cn{tag} at certain points. -% One simply has to write -% \begin{verbatim} -%\let\tag\dft@tag -% \end{verbatim} -% and the \cn{tag} command will produce an error message, -% with a suitable error help text, and discard its argument. -% \begin{macrocode} -\def\dft@tag{\invalid@tag{\string\tag\space not allowed here}} -% \end{macrocode} -% Since this is used several times we provide an abbreviation for -% it. -% \begin{macrocode} -\def\default@tag{\let\tag\dft@tag} -% \end{macrocode} -% Since this is also the default, i.e.\ the \cn{tag} command -% should not be used except in special places, we issue a -% \cs{default@tag} command. -% \begin{macrocode} -\default@tag -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% Now that we have taken care of the case that \cn{tag} is not -% allowed we will provide some macros to process tags appropriately. -% As the user documentation states, a \cn{tag} command (without -% the asterisk typesets its argument according to the document -% styles' conventions, whereas a \cn{tag*} command typesets its -% argument exactly as given. We define therefore the following -% interface: -% -% \begin{macro}{\maketag@@} -% \begin{macro}{\maketag@@@} -% \begin{macro}{\tagform@} -% \cn{tag} is supposed to call \cs{maketag@@} which checks -% whether an asterisk follows. If this is the case it calls up -% \cs{maketag@@@} which sets its argument `as is'. Otherwise -% \cs{tagform@} is called to do the job. (This macro is to be -% defined appropriately by the document style.) -% \begin{macrocode} -\def\maketag@@{\@ifstar\maketag@@@\tagform@} -% \end{macrocode} -% We define \cs{maketag@@@} to use the normal font of the document -% text (since this is the usual practice for numbering of document -% elements) and to put a box around the tag. Furthermore we use -% \cs{m@th} for exceptional cases where the tag involves a -% superscript or some such math. (Probably from an explicit use of -% \cs{tag*} rather than from the automatic numbering.) -% \begin{macrocode} -\def\maketag@@@#1{\hbox{\m@th\normalfont#1}} -% \end{macrocode} -% We use the following default definition for \cs{tagform@} -% that puts only parentheses around the tag. -% \begin{macrocode} -\def\tagform@#1{\maketag@@@{(\ignorespaces#1\unskip\@@italiccorr)}} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% We need to insinuate \cs{tagform@} into \cs{@eqnnum} in case -% \env{eqnarray} is used (probably in a document that was originally -% written without use of the \pkg{amsmath} package). -% \begin{macrocode} -\iftagsleft@ - \def\@eqnnum{\hbox to1sp{}\rlap{\normalfont\normalcolor - \hskip -\displaywidth\tagform@\theequation}} -\else - \def\@eqnnum{{\normalfont\normalcolor \tagform@\theequation}} -\fi -% \end{macrocode} -% -% \begin{macro}{\thetag} -% Sometimes one needs to set a literal tag according to the rules of -% the document style. To achieve this we provide the \cn{thetag} -% command. It typesets its argument by calling \cs{tagform@} on -% it. -% \begin{macrocode} -\newcommand{\thetag}{\leavevmode\tagform@} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\df@tag} -% \begin{macro}{\make@df@tag} -% \begin{macro}{\make@df@tag@@} -% \begin{macro}{\make@df@tag@@@} -% Sometimes it is necessary for a \cn{tag} command to store a tag -% in a safe place and to process it later, e.g., for a tag in a row -% of an alignment where the tag can only be typeset when the -% \cn{\\} at the end of the row was seen. Such a tag is stored in -% the macro \cs{df@tag} (for `deferred tag'). For this purpose we -% provide the \cs{make@df@tag} macro. It is built very similar to -% the \cs{maketag@@} macro above. -% \begin{macrocode} -\let\df@tag\@empty -\def\make@df@tag{\@ifstar\make@df@tag@@\make@df@tag@@@} -% \end{macrocode} -% \cs{make@df@tag} sets \cs{@currentlabel} and defines -% \cs{df@tag} appropriately. -% -% To simplify the task of tracking \cs{tag} and \cs{label} -% commands inside math display environments, we defer \cs{label} -% commands until the tag is typeset, similar to the way that -% \cs{tag}s themselves are deferred. This allows arbitrary -% placement of \cs{label} and \cs{tag} commands and also means we -% only increment the \cs{equation} counter when we really need to, -% thus avoiding the \cs{setb@ck} nonsense that used to be required. -% -% \begin{macrocode} -\def\make@df@tag@@#1{% - \gdef\df@tag{\maketag@@@{#1}\def\@currentlabel{#1}}} -% \end{macrocode} -% Autogenerated number: -% \begin{macrocode} -\def\make@df@tag@@@#1{\gdef\df@tag{\tagform@{#1}% - \toks@\@xp{\p@equation{#1}}\edef\@currentlabel{\the\toks@}}} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\ltx@label} -% \begin{macro}{\label@in@display} -% \begin{macro}{\df@label} -% Next, we store the default definition of \cs{label} in -% \cs{ltx@label} and then define a new version of \cs{label} for use -% in math display environments. \cs{label@in@display} merely issues a -% warning message if there is already a pending label (which will be -% discarded) and then stores the label in \cs{df@label}. -% \begin{macrocode} -\let\ltx@label\label -% -\def\label@in@display{% - \ifx\df@label\@empty\else - \@amsmath@err{Multiple \string\label's: - label '\df@label' will be lost}\@eha - \fi - \gdef\df@label -} -% \end{macrocode} -% In case there is an enumerate inside a minipage inside an equation, -% we need to reset \cn{label} to its normal value: -% \begin{macrocode} -\toks@\@xp{\@arrayparboxrestore \let\label\ltx@label}% -\edef\@arrayboxrestore{\the\toks@} -% \end{macrocode} -% -% \begin{macrocode} -\let\df@label\@empty -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\make@display@tag} -% Now we define a macro to process \cs{tag} and \cs{label} commands -% in various display environments. If the |@eqnsw| switch is set, -% then we should supply an equation number; otherwise, if the -% |@tag| switch is set, we should use the tag stored in -% \cs{df@tag}. Finally, we process any pending \cs{label}s. -% -% TODO: Arguably, \cs{make@display@tag} should issue a warning -% message if there is a \cs{label} but neither a tag nor an -% equation number. Also, it would probably be worthwhile to -% explore whether \cs{iftag@} could be done away with and replaced -% by checks to see if \cs{df@tag} is empty or not. -% \begin{macrocode} -\def\make@display@tag{% - \if@eqnsw \incr@eqnum \print@eqnum - \else \iftag@ \df@tag \global\let\df@tag\@empty \fi - \fi -% \end{macrocode} -% Need to check the \cs{ifmeasuring@} flag otherwise the \cs{write} -% node from \cn{label} might be discarded in a temp box and clearing -% \cs{df@label} will keep it from being reiterated on the real -% typesetting pass. -% \begin{macrocode} - \ifmeasuring@ - \else - \ifx\df@label\@empty - \else - \@xp\ltx@label\@xp{\df@label}% - \global\let\df@label\@empty - \fi - \fi -} -% \end{macrocode} -% \end{macro} -% -% Now we define the special versions of \cn{tag} used within the -% \env{align} environments. -% -% \begin{macro}{\tag@in@align} -% The \cn{tag} command may only appear once in a row of -% an alignment. Therefore we first check the switch |tag@| -% that is set to false at the begin of every row. -% If this switch is true a \cn{tag} was already given in this -% row and we define \cs{next@} to expand to a call to -% \cs{invalid@tag}. -% \begin{macrocode} -\def\tag@in@align{% - \relax - \iftag@ - \DN@{\invalid@tag{Multiple \string\tag}}% - \else -% \end{macrocode} -% Otherwise we set the |tag@| switch. But there is more to -% be done: we must also prevent the automatic generation of a -% tag. Therefore we also reset the |@eqnsw|. -% \begin{macrocode} - \global\tag@true -% \end{macrocode} -% Changed to \cs{nonumber}, since that seems to be all that's -% required.---dmj, 1994/12/21 -% \begin{macrocode} - \nonumber -% \end{macrocode} -% Within a row of an \env{align} environment the \cn{tag} -% command must not typeset the tag immediately since its -% position can be determined only later. -% Therefore we use the \cs{make@df@tag} macro defined -% earlier. -% Finally we call \cs{next@} to process the argument -% that follows. -% \begin{macrocode} - \let\next@\make@df@tag - \fi - \next@ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\raisetag} -% Usage: \cn{raisetag} \meta{dimen} -% -% This will modify the vertical placement of the tag of the current -% equation by \meta{dimen}. Note that according to the current uses -% of \cs{raise@tag} in e.g., \cs{place@tag@gather}, no adjustment -% occurs if the tag falls in its normal position; i.e., \cn{raisetag} -% has no effect unless the tag has already been shifted off-line. -% -% \begin{macrocode} -\newcommand{\raisetag}[1]{\skip@#1\relax - \xdef\raise@tag{\vskip\iftagsleft@\else-\fi\the\skip@\relax}% -} -% \end{macrocode} -% \cn{raise@tag} will be reemptied at the beginning of each equation, -% which might occur at a |\begin{xxx}| or \cn{\\}. -% \begin{macrocode} -\let\raise@tag\@empty -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\notag} -% For consistency we provide \cn{notag}, equivalent to -% \cn{nonumber}. The alternative would have been to rename -% \cn{tag} as \cn{number} to go along with \cn{nonumber}, -% but of course \cs{number} is a \tex/ primitive that should not -% be redefined. -% \begin{macrocode} -\newcommand{\notag}{\nonumber} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\nonumber} -% Need to add some additional code to \cn{nonumber} to deal with some -% complications related to nested environments. -% \begin{macrocode} -\renewcommand{\nonumber}{% - \if@eqnsw - \ifx\incr@eqnum\@empty \addtocounter{equation}\m@ne \fi - \fi - \let\print@eqnum\@empty \let\incr@eqnum\@empty - \global\@eqnswfalse -} -% \end{macrocode} -% -% \begin{macrocode} -\def\print@eqnum{\tagform@\theequation} -\def\incr@eqnum{\refstepcounter{equation}\let\incr@eqnum\@empty} -% \end{macrocode} -% \end{macro} -% -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \section{Multiline equation environments} -% -% \subsection{Remarks} -% -% In late 1994 David M. Jones did a thorough overhaul of these -% environments so that the number placement and a few other aspects -% are substantially improved over the original versions that were -% ported essentially unchanged from \fn{amstex.tex} in 1989. Most of -% the commentary in this section is DMJ's, and comments of any -% significance that I added are marked by my initials and date -% [mjd, 1995/01/11]. -% -% \subsection{Preliminaries} -% -% \begin{macro}{\ifinalign@} -% \begin{macro}{\ifingather@} -% We define two switches that are set to true in certain -% alignments: |inalign@| and |ingather@| inside of -% the \env{align} and \env{gather} environments. -% These switches are needed to control certain actions that -% depend on the surrounding conditions, more specifically: -% on the setting already done by the surrounding environments. -% \begin{macrocode} -\newif\ifinalign@ -\newif\ifingather@ -% \end{macrocode} -% \begin{histnote} -% Removed the \cs{ifinany@} test [mjd,1999/06/28] since it was mainly -% used for the purpose now handled by \cs{spread@equation}. -% \changes{v1.2g}{1999/06/28}{Removed ifinany@} -% \end{histnote} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@arrayparboxrestore} -% Here we must reset a few additional parameters. -% \begin{macrocode} -\@xp\def\@xp\@arrayparboxrestore\@xp{\@arrayparboxrestore - \ingather@false\inalign@false \default@tag - \let\spread@equation\@spread@equation - \let\reset@equation\@empty - \def\print@eqnum{\tagform@\theequation}% - \def\incr@eqnum{\refstepcounter{equation}\let\incr@eqnum\@empty}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\iftag@} -% The switch |tag@| is set to false at the beginning of every -% row and set to true by a \cn{tag} command. -% This allows us to check whether there is more than one tag on -% a row. -% \begin{macrocode} -\newif\iftag@ -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ifst@rred} -% The switch |st@rred| is set to true by all starred -% environments -% and set to false by the unstarred versions. -% \begin{macrocode} -\newif\ifst@rred -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ifmeasuring@} -% All display environments get typeset twice---once during a -% ``measuring'' phase and then again during a ``production'' phase; -% \cs{ifmeasuring@} will be used to determine which case we're in, -% so we can take appropriate action. -% -% \begin{macrocode} -\newif\ifmeasuring@ -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ifshifttag@} -% \cs{ifshifttag@} is used by \env{gather} to communicate between -% \cs{calc@shift@gather} and \cs{place@tag@gather} whether an -% equation tag should be shifted to a separate line. It's also -% used by \env{multline}. -% \begin{macrocode} -\newif\ifshifttag@ -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\row@} -% \begin{macrocode} -\newcount\row@ -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\column@} -% The counter \cs{column@} is used by the alignment macros to -% keep track of the current column. -% -% \begin{macrocode} -\newcount\column@ -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\column@plus} -% \cs{\column@plus} is a useful abbreviation. -% \begin{macrocode} -\def\column@plus{% - \global\advance\column@\@ne -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\maxfields@} -% \begin{macrocode} -\newcount\maxfields@ -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\add@amp} -% \begin{macro}{\add@amps} -% \begin{macrocode} -\def\add@amp#1{\if m#1&\@xp\add@amp\fi} -\def\add@amps#1{% - \begingroup - \count@#1\advance\count@-\column@ - \edef\@tempa{\endgroup - \@xp\add@amp\romannumeral\number\count@ 000q}% - \@tempa -} -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\andhelp@} -% The help text stored in \cs{andhelp@} is used for errors -% generated by too many \qc{\&} characters in a row. -% \begin{macrocode} -\newhelp\andhelp@ -{An extra & here is so disastrous that you should probably exit^^J -and fix things up.} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\eqnshift@} -% \cs{eqnshift@} is used by \env{align} and \env{gather} as the -% indentation of the lines of the environment from the left margin. -% \begin{macrocode} -\newdimen\eqnshift@ -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\alignsep@} -% \begin{macrocode} -\newdimen\alignsep@ -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\tagshift@} -% \begin{macrocode} -\newdimen\tagshift@ -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\mintagsep} -% \cs{mintagsep} is the minimum allowable separation between an -% equation and its tag. We set it to half a quad in -% \cs{textfont}2, which is \tex/'s built-in value. -% \begin{macrocode} -\newcommand{\mintagsep}{.5\fontdimen6\textfont\tw@} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\minalignsep} -% This should probably be a skip register [mjd,1999/06/18] -% \begin{macrocode} -\newcommand{\minalignsep}{10pt} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\tagwidth@} -% \begin{macrocode} -\newdimen\tagwidth@ -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\totwidth@} -% \begin{macrocode} -\newdimen\totwidth@ -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\lineht@} -% The dimen register \cs{lineht@} is used to keep track of the -% height (or depth, if tags are on the right) of a row in an -% alignment. -% \begin{macrocode} -\newdimen\lineht@ -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\tag@width} -% \begin{macro}{\savetaglength@} -% \begin{macro}{\shift@tag} -% \begin{macro}{\tag@shifts} -% \begin{macrocode} -\def\tag@width#1{% - \ifcase\@xp#1\tag@lengths\fi -} - -\def\savetaglength@{% - \begingroup - \let\or\relax - \xdef\tag@lengths{\tag@lengths\or \the\wdz@}% - \endgroup -} - -\def\shift@tag#1{% - \ifcase\@xp#1\tag@shifts\fi\relax -} - -\let\tag@shifts\@empty -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\saveshift@} -% \begin{macrocode} -\def\saveshift@#1{% - \begingroup - \let\or\relax - \xdef\tag@shifts{\or#1\tag@shifts}% - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\spread@equation} -% This does the line-spacing adjustment that is normally wanted for -% displayed equations. We also call \cs{reset@strutbox@} here because -% otherwise a preceding font size change might leave \cs{strutbox@} -% with wrong contents. This is a less-than-ideal solution but -% probably good enough for now, until the situation can be -% overhauled. -% \begin{macrocode} -\def\spread@equation{\reset@strutbox@ - \openup\jot \let\spread@equation\@empty} -\let\@spread@equation\spread@equation -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\displ@y} -% \begin{macro}{\displ@y@} -% \begin{macro}{\@display@init} -% \cs{displ@y} is from \fn{plain.tex}, with -% \cs{interdisplaylinepenalty} changed to \cs{@eqpen}. Also we -% transplanted most of its internal organs to \cs{@display@init} to -% support \cs{displ@y@} and other possibilities. Don't try to make -% sense of these naming conventions! They are a narrowly calculated -% mishmash of Knuth/Spivak/Lamport/Mittelbach precedents. The reason -% for not cleaning them up and forcing all names to a consistent -% scheme is that then in principle we'd have to do it everywhere else -% too. And we programmers are paranoid about the side effects of name -% changes. -% \begin{macrocode} -\def\displ@y{\@display@init{}} -\def\@display@init#1{% - \global\dt@ptrue \spread@equation - \everycr{% - \noalign{% - #1% - \ifdt@p - \global\dt@pfalse - \vskip-\lineskiplimit - \vskip\normallineskiplimit - \else - \penalty\@eqpen \global\dspbrk@lvl\m@ne - \fi - }% - }% -} -% \end{macrocode} -% \cs{displ@y@} is nearly the same; it additionally sets the |tag@| -% switch and the \cs{column@} and \cs{dspbrk@lvl} counters to their -% default values. The argument is normally a bit of code to empty out -% \cs{raise@tag}, but in \env{multline} we don't want that to happen -% in \cs{everycr}. -% \begin{macrocode} -\def\displ@y@{\@display@init{% - \global\column@\z@ \global\dspbrk@lvl\m@ne - \global\tag@false \global\let\raise@tag\@empty -}} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\black@} -% This macro is made to produce an overfull box message and -% possibly (depending on the value of \cs{overfullrule}) -% a rule in the margin if the total width of an alignment -% is larger than the value of \cs{displaywidth}. -% \begin{macrocode} -\def\black@#1{% - \noalign{% - \ifdim#1>\displaywidth - \dimen@\prevdepth - \nointerlineskip - \vskip-\ht\strutbox@ - \vskip-\dp\strutbox@ - \vbox{\noindent\hbox to#1{\strut@\hfill}}% - \prevdepth\dimen@ - \fi - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\savecounters@} -% \begin{macro}{\restorecounters@} -% These are used during the measuring phase of the various display -% math environments to save and restore the values of all \latex/ -% counters. We make these local to a group, so nested environments -% works. -% -% Changed \cn{stepcounter} to |\csname c@...\endcsname| to avoid -% overhead of ifundefined test [mjd, 1995/01/20]. -% \begin{macrocode} -\def\savecounters@{% - \begingroup - \def\@elt##1{% - \global\csname c@##1\endcsname\the\csname c@##1\endcsname}% - \xdef\@gtempa{% - \cl@@ckpt - \let\@nx\restorecounters@\@nx\@empty - }% - \endgroup - \let\restorecounters@\@gtempa -} -% -\let\restorecounters@\@empty -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\savealignstate@} -% \begin{macro}{\restorealignstate@} -% These are used to save the values of various parameters that are -% shared by \env{align} and \env{gather} when the former is used -% inside the latter. -% \begin{macrocode} -\def\savealignstate@{% - \begingroup - \let\or\relax - \xdef\@gtempa{% - \global\totwidth@\the\totwidth@ - \global\row@\the\row@ - \gdef\@nx\tag@lengths{\tag@lengths}% - \let\@nx\restorealignstate@\@nx\@empty - }% - \endgroup - \let\restorealignstate@\@gtempa -} - -\let\restorealignstate@\@empty -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\savecolumn@} -% \begin{macro}{\restorecolumn@} -% -% \begin{macrocode} -\def\savecolumn@{% - \edef\restorecolumn@{% - \global\column@\number\column@ - \let\@nx\restorecolumn@\@nx\@empty - }% -} -\let\restorecolumn@\@empty -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \subsection{Scanning the environment's body} -% -% Several of the math alignment macros must scan their body twice: -% once to determine how wide the columns are and then to actually -% typeset them. This means that we must collect all text in this body -% before calling the environment macros. -% -% \begin{macro}{\@envbody} -% We start by defining a token register to contain the body. -% \begin{macrocode} -\newtoks\@envbody -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\addto@envbody} -% Then we define a macro to add something (i.e.\ its argument) to the -% token register \cs{@envbody}. -% \begin{macrocode} -\def\addto@envbody#1{\global\@envbody\@xp{\the\@envbody#1}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\collect@body} -% The macro \cs{collect@body} starts the scan for the |\end{...}| -% command of the current environment. It takes a macro name as -% argument. This macro is supposed to take the whole body of the -% environment as its argument. For example, |\begin{align}| would -% call |\collect@body\@align| if |@align#1{...}| is the macro that -% sets the alignment with body \arg{1}. -% -% \begin{macrocode} -\def\collect@body#1{% - \@envbody{\@xp#1\@xp{\the\@envbody}}% - \edef\process@envbody{\the\@envbody\@nx\end{\@currenvir}}% - \@envbody\@emptytoks \def\begin@stack{b}% -% \end{macrocode} -% -% If we simply called \cs{collect@@body} directly, -% the error message for a \cn{par} token (usually from a blank line) -% would be -% \begin{verbatim} -% ! Paragraph ended before \collect@@body was complete. -% \end{verbatim} -% But we use a little finesse to get a more intelligible error -% message: -% \begin{verbatim} -% ! Paragraph ended before \multline* was complete. -% \end{verbatim} -% In order to avoid using up csnames unnecessarily we use the actual -% environment name as the name of the temporary function that is -% \cs{let} to \cs{collect@@body}; but then in order to preserve the -% theoretical possibility of nesting for environments that use -% \cs{collect@body} (not currently required by any \pkg{amsmath} -% environment [mjd,1999/06/23]), we do the \cs{let} inside a group. -% \begin{macrocode} - \begingroup - \@xp\let\csname\@currenvir\endcsname\collect@@body -% \end{macrocode} -% This small twist eliminates the need for \cs{expandafter}'s in -% \cs{collect@@body}. -% \begin{macrocode} - \edef\process@envbody{\@xp\@nx\csname\@currenvir\endcsname}% - \process@envbody -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\push@begins} -% When adding a piece of the current environment's contents to -% \cs{@envbody}, we scan it to check for additional \cn{begin} -% tokens, and add a `b' to the stack for any that we find. -% \begin{macrocode} -\def\push@begins#1\begin#2{% - \ifx\end#2\else b\@xp\push@begins\fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\collect@@body} -% \cs{collect@@body} takes two arguments: the first will consist of -% all text up to the next \cn{end} command, the second will be the -% \cn{end} command's argument. If there are any extra \cn{begin} -% commands in the body text, a marker is pushed onto a stack by the -% \cs{push@begins} function. Empty state for this stack means that we -% have reached the \cn{end} that matches our original \cn{begin}. -% Otherwise we need to include the \cn{end} and its argument in the -% material that we are adding to our environment body accumulator. -% -% \begin{histnote} -% In a former implementation, the error messages resulting from a -% typo in the environment name were unsatisfactory, because it was -% matching of the environment name that was used to determine the end -% of our environment body, instead of counting begin-end pairs. -% Thanks to Lars Hellstr\"{o}m for a suggestion that led to this -% improvement. [mjd,1999/06/23] -% \end{histnote} -% \begin{macrocode} -\def\collect@@body#1\end#2{% - \edef\begin@stack{\push@begins#1\begin\end \@xp\@gobble\begin@stack}% - \ifx\@empty\begin@stack - \endgroup - \@checkend{#2}% - \addto@envbody{#1}% - \else - \addto@envbody{#1\end{#2}}% - \fi - \process@envbody % A little tricky! Note the grouping -} -% \end{macrocode} -% \end{macro} -% -% -% \subsection{Simple aligning environments} -% -% \begin{macro}{\math@cr@@@aligned} -% From tabskip we get an extra space of minalignsep after every -% second column; but when this falls at the right edge of the whole -% aligned structure, we need to cancel that space. -% \begin{macrocode} -\def\math@cr@@@aligned{% - \ifodd\column@ \let\next@\@empty - \else \def\next@{&\kern-\alignsep@}% - \fi - \next@ \cr -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\start@aligned} -% The \env{aligned} and \env{alignedat} environments are identical -% except that the latter takes a mandatory argument to specify the -% number of align structures, while the former allows any number of -% align structures automatically (the use of \env{alignedat} is -% deprecated). So, they will be defined in terms of -% \cs{start@aligned}, which will take two arguments. The first -% argument specifies the placement of the environments; it is -% either |c|, |t|, or |b|. The second is the number of align -% structures; a value of~$-1$ means that an arbitrary number are -% allowed. -% \begin{macrocode} -\newcommand{\start@aligned}[2]{% - \RIfM@\else - \nonmatherr@{\begin{\@currenvir}}% - \fi - \savecolumn@ % Assumption: called inside a group -% \end{macrocode} -% The \cs{null} here is to keep the \cs{,} glue from causing the -% invocation of the clause in \tex/'s built-in tag placement -% algorithm that can cause an equation to be shifted all the way over -% to the margin. -% \begin{macrocode} - \null\,% - \if #1t\vtop \else \if#1b \vbox \else \vcenter \fi \fi \bgroup - \maxfields@#2\relax - \ifnum\maxfields@>\m@ne - \multiply\maxfields@\tw@ -% \end{macrocode} -% Introduced new \cs{math@cr@@@} so we can provide standard error -% message for too many \qc{\&}'s in \env{alignedat}. -% \begin{macrocode} - \let\math@cr@@@\math@cr@@@alignedat - \alignsep@\z@skip - \else - \let\math@cr@@@\math@cr@@@aligned - \alignsep@\minalignsep - \fi -% \end{macrocode} -% Reset the meaning of \cn{\\}. -% \begin{macrocode} - \Let@ \chardef\dspbrk@context\@ne -% \end{macrocode} -% Restore the default definition of \cn{tag} (error message), in -% case \env{aligned} is used inside, e.g., a \env{gather} -% environment that accepts \cn{tag}. -% \begin{macrocode} - \default@tag - \spread@equation % no-op if already called -% \end{macrocode} -% Finally we start the alignment itself. For \env{aligned} we add -% \cs{minalignsep} after every second column to mimic the -% behavior of \env{align}. For \env{alignedat} the user has to -% specify interalign space explicitly. -% \begin{macrocode} - \global\column@\z@ - \ialign\bgroup - &\column@plus - \hfil - \strut@ - $\m@th\displaystyle{##}$% - \tabskip\z@skip - &\column@plus - $\m@th\displaystyle{{}##}$% - \hfil - \tabskip\alignsep@ - \crcr -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\math@cr@@@aligned} -% \cs{math@cr@@@aligned} checks to make sure the user hasn't put in -% too many \qc{\&}s in \env{alignedat}. Since \env{alignedat} -% doesn't use \cs{displ@y@}, we also reset \cs{column@} here. Note -% than in \env{aligned}, \cs{column@} will increase without bound, -% since it never gets reset, but this is harmless. -% \begin{macrocode} -\def\math@cr@@@alignedat{% - \ifnum\column@>\maxfields@ - \begingroup - \measuring@false - \@amsmath@err{Extra & on this line}% - {\the\andhelp@}% "An extra & here is disastrous" - \endgroup - \fi - \global\column@\z@ - \cr -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\alignsafe@testopt} -% Testing for an optional argument can be really, really tricky in -% certain complicated contexts. This we discovered by getting some -% bug reports for uses of \env{aligned}. So here is a safer -% form of \latex/'s \cs{@testopt} function. -% \begin{macrocode} -\def\alignsafe@testopt#1#2{% - \relax\iffalse{\fi\ifnum`}=0\fi - \@ifnextchar[% - {\let\@let@token\relax \ifnum`{=\z@\fi\iffalse}\fi#1}% - {\let\@let@token\relax \ifnum`{=\z@\fi\iffalse}\fi#1[#2]}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{environment}{aligned} -% The \env{aligned} environment takes an optional argument that -% indicates its vertical position in relation to surrounding -% material: |t|, |c|, or |b| for top, center, or bottom. -% \begin{macrocode} -\newenvironment{aligned}{% - \let\@testopt\alignsafe@testopt - \aligned@a -}{% - \crcr\egroup - \restorecolumn@ - \egroup -} -\newcommand{\aligned@a}[1][c]{\start@aligned{#1}\m@ne} -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{alignedat} -% To get a top or bottom positioned \env{alignedat} structure, you -% would write something like -% \begin{verbatim} -% \begin{alignedat}[t]{3} -% \end{verbatim} -% -% \begin{macrocode} -\newenvironment{alignedat}{% - \let\@testopt\alignsafe@testopt - \alignedat@a -}{% - \endaligned -} -\newcommand{\alignedat@a}[1][c]{\start@aligned{#1}} -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{gathered} -% The \env{gathered} environment is for several lines that are -% centered independently. -% \begin{macrocode} -\newenvironment{gathered}[1][c]{% - \RIfM@\else - \nonmatherr@{\begin{gathered}}% - \fi - \null\,% - \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi\fi \bgroup - \Let@ \chardef\dspbrk@context\@ne \restore@math@cr - \spread@equation - \ialign\bgroup - \hfil\strut@$\m@th\displaystyle##$\hfil - \crcr -}{% - \endaligned -} -% \end{macrocode} -% \end{environment} -% -% -% \subsection{The \env{gather} environment} -% -% \begin{macro}{\start@gather} -% \begin{macrocode} -\def\start@gather#1{% - \RIfM@ - \nomath@env - \DN@{\@namedef{end\@currenvir}{}\@gobble}% - \else - $$% - #1% - \ifst@rred \else \global\@eqnswtrue \fi - \let\next@\gather@ - \fi - \collect@body\next@ -} -% \end{macrocode} -% \end{macro} -% -% \begin{environment}{gather} -% \begin{environment}{gather*} -% \begin{macrocode} -\newenvironment{gather}{% - \start@gather\st@rredfalse -}{% - \math@cr \black@\totwidth@ \egroup - $$\ignorespacesafterend -} - -\newenvironment{gather*}{% - \start@gather\st@rredtrue -}{% - \endgather -} -% \end{macrocode} -% \end{environment} -% \end{environment} -% -% \begin{macro}{\gather@} -% \begin{macrocode} -\def\gather@#1{% - \ingather@true \let\split\insplit@ - \let\tag\tag@in@align \let\label\label@in@display - \chardef\dspbrk@context\z@ - \intertext@ \displ@y@ \Let@ - \let\math@cr@@@\math@cr@@@gather - \gmeasure@{#1}% - \global\shifttag@false - \tabskip\z@skip - \global\row@\@ne - \halign to\displaywidth\bgroup - \strut@ - \setboxz@h{$\m@th\displaystyle{##}$}% - \calc@shift@gather - \set@gather@field - \tabskip\@centering - &\setboxz@h{\strut@{##}}% - \place@tag@gather - \tabskip \iftagsleft@ \gdisplaywidth@ \else \z@skip \span\fi - \crcr - #1% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\gmeasure@} -% \begin{macrocode} -\def\gmeasure@#1{% - \begingroup - \measuring@true - \totwidth@\z@ - \global\let\tag@lengths\@empty - \savecounters@ - \setbox\@ne\vbox{% - \everycr{\noalign{\global\tag@false - \global\let\raise@tag\@empty \global\column@\z@}}% - \let\label\@gobble - \halign{% - \setboxz@h{$\m@th\displaystyle{##}$}% - \ifdim\wdz@>\totwidth@ - \global\totwidth@\wdz@ - \fi - &\setboxz@h{\strut@{##}}% - \savetaglength@ - \crcr - #1% - \math@cr@@@ - }% - }% - \restorecounters@ - \if@fleqn - \global\advance\totwidth@\@mathmargin - \fi - \iftagsleft@ - \ifdim\totwidth@>\displaywidth - \global\let\gdisplaywidth@\totwidth@ - \else - \global\let\gdisplaywidth@\displaywidth - \fi - \fi - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\math@cr@@@gather} -% Modified \cs{math@cr@@@gather} so that it always puts in the -% final field, which needs to be done under the new method for -% determining tag placement. This is probably more efficient -% anyway. -% -% \begin{macrocode} -\def\math@cr@@@gather{% - \ifst@rred\nonumber\fi - &\relax - \make@display@tag - \ifst@rred\else\global\@eqnswtrue\fi -% \end{macrocode} -% We advance \cs{row@} here, rather than at the beginning of the -% preamble, because otherwise the \env{split} environment will -% cause \cs{row@} to be advanced twice instead of once. -% \begin{macrocode} - \global\advance\row@\@ne - \cr -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\calc@shift@gather} -% \cs{calc@shift@gather} has must make two decisions: (1) whether the -% equation tag for the current line should be put on a separate -% line and (2) what the distance between the equation and the -% equation tag should be. We implement \tex/'s built-in -% tag-placement as well as possible, with one improvement: the -% minimum separation between tag and equation is now a -% user-settable parameter. -% -% [1995/01/17] Added a check to make sure that the width of the tag -% on the current line is $>0$ before testing to see if tagwidth + -% linewidth + mintagsep $>$ displaywidth. Since an imbedded align -% shows up as line with width \cn{displaywidth}, and even lines -% without a tag get processed as if an empty tag were present, the -% result was that the empty tag assigned to the line containing the -% align was being shifted downwards, creating extra space after the -% align. -% \begin{macrocode} -\def\calc@shift@gather{% - \dimen@\mintagsep\relax - \tagwidth@\tag@width\row@\relax -% \end{macrocode} -% If we're in \opt{fleqn} mode, there is no flexibility about -% placement of the equation, so all we can do is see if there's -% room for the tag in the given margin. -% \begin{macrocode} - \if@fleqn - \global\eqnshift@\@mathmargin - \ifdim\tagwidth@>\z@ - \advance\dimen@\tagwidth@ - \iftagsleft@ - \ifdim\dimen@>\@mathmargin - \global\shifttag@true - \fi - \else - \advance\dimen@\@mathmargin - \advance\dimen@\wdz@ - \ifdim\dimen@>\displaywidth - \global\shifttag@true - \fi - \fi - \fi - \else - \global\eqnshift@\displaywidth - \global\advance\eqnshift@-\wdz@ - \ifdim\tagwidth@>\z@ - \multiply\dimen@\tw@ - \advance\dimen@\wdz@ - \advance\dimen@\tagwidth@ - \ifdim\dimen@>\displaywidth - \global\shifttag@true - \else - \ifdim\eqnshift@<4\tagwidth@ - \global\advance\eqnshift@-\tagwidth@ - \fi - \fi - \fi - \global\divide\eqnshift@\tw@ - \iftagsleft@ - \global\eqnshift@-\eqnshift@ - \global\advance\eqnshift@\displaywidth - \global\advance\eqnshift@-\wdz@ - \fi - \ifdim\eqnshift@<\z@ - \global\eqnshift@\z@ - \fi - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\place@tag@gather} -% \begin{macro}{\set@gather@field} -% \begin{macrocode} -\def\place@tag@gather{% - \iftagsleft@ - \kern-\gdisplaywidth@ - \ifshifttag@ - \rlap{\vbox{% - \normalbaselines - \boxz@ - \vbox to\lineht@{}% - \raise@tag - }}% - \global\shifttag@false - \else - \rlap{\boxz@}% - \fi - \else - \ifdim\totwidth@>\displaywidth - \dimen@\totwidth@ - \advance\dimen@-\displaywidth - \kern-\dimen@ - \fi - \ifshifttag@ - \llap{\vtop{% - \raise@tag - \normalbaselines - \setbox\@ne\null - \dp\@ne\lineht@ - \box\@ne - \boxz@ - }}% - \global\shifttag@false - \else - \llap{\boxz@}% - \fi - \fi -} -% -\def\set@gather@field{% - \iftagsleft@ - \global\lineht@\ht\z@ - \else - \global\lineht@\dp\z@ - \fi - \kern\eqnshift@ - \boxz@ - \hfil -} -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% -% \subsection{The \env{align} family of environments} -% -% The \env{align}, \env{flalign}, \env{alignat}, \env{xalignat}, -% and \env{xxalignat} environments are virtually -% identical, and thus will share much code. We'll refer to the -% environments generically as ``\env{align}'' and will -% distinguish between them explicitly -% only when necessary. -% -% \begin{macro}{\ifxxat@} -% \begin{macro}{\ifcheckat@} -% \begin{macro}{\xatlevel@} -% The \cs{xatlevel@} macro will be used, informally speaking, to -% distinguish between the \env{alignat} and \env{xalignat}, and -% \env{xxalignat} environments. -% -% \begin{macrocode} -\newif\ifxxat@ - -\newif\ifcheckat@ - -\let\xatlevel@\@empty -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\start@align} -% \cs{start@align} will be called by all of the \env{align}-like -% environments. The first argument will be the \cs{xatlevel@}, -% i.e., 0, 1, or~2; the second argument will be either -% \cs{st@rredtrue} or \cs{st@rredfalse}. The third argument will -% be the number of aligned -% structures in the environment (either as supplied by the user, or -% $-1$ to indicate that checking shouldn't be done). After -% performing the appropriate error detection and initialization, -% \cs{start@align} calls \cs{align@}. -% -% Note that the \cs{equation} counter is no longer stepped at the -% beginning of these environments. -% -% TODO: Implement \cs{shoveleft} and \cs{shoveright} for -% \env{align}. -% \begin{macrocode} -\def\start@align#1#2#3{% - \let\xatlevel@#1% always \z@, \@ne, or \tw@ - \maxfields@#3\relax - \ifnum\maxfields@>\m@ne - \checkat@true - \ifnum\xatlevel@=\tw@ - \xxat@true - \fi - \multiply\maxfields@\tw@ - \else - \checkat@false - \fi - \ifingather@ - \iffalse{\fi\ifnum0=`}\fi - \DN@{\vcenter\bgroup\savealignstate@\align@#2}% - \else - \ifmmode - \if@display - \DN@{\align@recover}% - \else - \nomath@env - \DN@{\@namedef{end\@currenvir}{}\@gobble}% - \fi - \else - $$% - \let\split\insplit@ - \DN@{\align@#2}% - \fi - \fi - \collect@body\next@ -} -% \end{macrocode} -% -% With version 1.2 of \pkg{amsmath}, it was possible to use -% \env{align*} and relatives in certain wrong contexts without -% getting an error, e.g. -% \begin{verbatim} -% \begin{equation*} -% \begin{align*} -% ... -% \end{align*} -% \end{equation*} -% \end{verbatim} -% -% For backward compatibility we therefore give only a warning for -% this condition instead of a full error, and try to recover using -% the \env{aligned} environment. The alignment of the material may be -% adversely affected but it will at least remain readable. -% \begin{macrocode} -\def\align@recover#1#2#3{% - \endgroup - \@amsmath@err{% -Erroneous nesting of equation structures;\MessageBreak -trying to recover with `aligned'% - }\@ehc - \begin{aligned}\relax#1\end{aligned}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{environment}{align} -% \begin{environment}{align*} -% \begin{environment}{flalign} -% \begin{environment}{flalign*} -% \begin{environment}{alignat} -% \begin{environment}{alignat*} -% \begin{environment}{xalignat} -% \begin{environment}{xalignat*} -% \begin{environment}{xxalignat} -% The definitions of the various \env{align} environments are quite -% straight-forward. -% -% \begin{macrocode} -\newenvironment{alignat}{% - \start@align\z@\st@rredfalse -}{% - \endalign -} -\newenvironment{alignat*}{% - \start@align\z@\st@rredtrue -}{% - \endalign -} -\newenvironment{xalignat}{% - \start@align\@ne\st@rredfalse -}{% - \endalign -} -\newenvironment{xalignat*}{% - \start@align\@ne\st@rredtrue -}{% - \endalign -} -\newenvironment{xxalignat}{% - \start@align\tw@\st@rredtrue -}{% - \endalign -} -\newenvironment{align}{% - \start@align\@ne\st@rredfalse\m@ne -}{% - \math@cr \black@\totwidth@ - \egroup - \ifingather@ - \restorealignstate@ - \egroup - \nonumber - \ifnum0=`{\fi\iffalse}\fi - \else - $$% - \fi - \ignorespacesafterend -} -\newenvironment{align*}{% - \start@align\@ne\st@rredtrue\m@ne -}{% - \endalign -} -\newenvironment{flalign}{% - \start@align\tw@\st@rredfalse\m@ne -}{% - \endalign -} -\newenvironment{flalign*}{% - \start@align\tw@\st@rredtrue\m@ne -}{% - \endalign -} -% \end{macrocode} -% \end{environment} -% \end{environment} -% \end{environment} -% \end{environment} -% \end{environment} -% \end{environment} -% \end{environment} -% \end{environment} -% \end{environment} -% -% -% \begin{macro}{\align@} -% TODO: Some of these sets of initializations show up in multiple -% places. It might be worth making an abbreviation for them. -% -% \begin{macrocode} -\def\align@#1#2{% - \inalign@true \intertext@ \Let@ \chardef\dspbrk@context\z@ - \ifingather@\else\displ@y@\fi - \let\math@cr@@@\math@cr@@@align - \ifxxat@\else \let\tag\tag@in@align \fi - \let\label\label@in@display - #1% set st@r - \ifst@rred\else \global\@eqnswtrue \fi - \measure@{#2}% - \global\row@\z@ - \tabskip\eqnshift@ - \halign\bgroup - \span\align@preamble\crcr - #2% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\math@cr@@@align} -% \begin{macrocode} -\def\math@cr@@@align{% - \ifst@rred\nonumber\fi - \if@eqnsw \global\tag@true \fi - \global\advance\row@\@ne - \add@amps\maxfields@ - \omit - \kern-\alignsep@ - \iftag@ - \setboxz@h{\@lign\strut@{\make@display@tag}}% - \place@tag - \fi - \ifst@rred\else\global\@eqnswtrue\fi - \global\lineht@\z@ - \cr -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\math@cr@@@align@measure} -% \begin{macrocode} -\def\math@cr@@@align@measure{% - &\omit - \global\advance\row@\@ne - \ifst@rred\nonumber\fi - \if@eqnsw \global\tag@true \fi - \ifnum\column@>\maxfields@ - \ifcheckat@ - \begingroup - \measuring@false - \@amsmath@err{Extra & on this line}% - {\the\andhelp@}% "An extra & here is disastrous" - \endgroup - \else - \global\maxfields@\column@ - \fi - \fi - \setboxz@h{\@lign\strut@{% - \if@eqnsw - \stepcounter{equation}% - \tagform@\theequation - \else - \iftag@\df@tag\fi - \fi - }}% - \savetaglength@ - \ifst@rred\else\global\@eqnswtrue\fi - \cr -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\field@lengths} -% \begin{macro}{\savefieldlength@} -% \begin{macro}{\fieldlengths@} -% \begin{macrocode} -\let\field@lengths\@empty - -\def\savefieldlength@{% - \begingroup - \let\or\relax - \xdef\field@lengths{% - \field@lengths - \ifnum\column@=0 - \or - \else - ,% - \fi - \the\wdz@ - }% - \endgroup -} - -\def\fieldlengths@#1{% - \ifcase\@xp#1\field@lengths\fi -} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\maxcolumn@widths} -% \cs{maxcolumn@widths} will be used to hold the widths of the -% fields of the \env{alignat} environment. The widths will be -% separated by the token \cn{or}, making it easy to extract a given -% width using \cn{ifcase}. -% \begin{macrocode} -\let\maxcolumn@widths\@empty -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\maxcol@width} -% \cs{maxcol@width} $n$ = maximum width of $n$th column of the current -% \env{alignat} (i.e., the $n$th field of \cs{maxcolumn@widths}.) -% It expands to a \<dimen>, so it can be used as the right-hand -% side of a \<variable assignment> or \<arithmetic> statement. -% It's argument can be any \<number>, \<integer variable> or macro -% that expands to one of these. [Check to make sure this is true.] -% -% This is subtler than it looks. -% \begin{macrocode} -\def\maxcol@width#1{% - \ifcase\@xp#1\maxcolumn@widths\fi\relax -} -% \end{macrocode} -% \end{macro} -% -% Now comes the real fun. A typical \env{align} environments looks -% something like this, where the vertical bars mark the edges of -% the fields of the underlying \cs{halign}: -% \[ -% \makeatletter\tabskip\@centering\offinterlineskip -% \halign to\displaywidth{%^^A -% &$\strut$\vrule\hfil$\m@th\displaystyle{\@lign#}$\vrule -% \tabskip1pt&\vrule$\m@th\displaystyle{\@lign#}$\hfil\vrule -% \tabskip\@centering\cr -% \omit\small\hfil 1\hfil &\omit\small\hfil 2 &\omit\small\hfil -% 3\hfil &\omit\small\hfil 4\hfil & \omit\small\hfil 5\hfil -% &\omit\small\hfil 6\hfil\cr -% \noalign{\vskip8pt\relax} -% V_i + q_i v_j & =v_i , & X_i & = x_i - q_i x_j, -% & U_i & = u_i,\qquad -% \hbox{for $i\ne j$;} %&\omit\hfill \llap{(3)} -% \cr -% V_j & = v_j, & X_j & = x_j, -% & U_j & = u_j + \sum_{i\ne j} q_i u_i. %&\omit\hfill \llap{(4)} -% \cr} -% \] -% Note that each align structure consists of two fields, with no -% space between them (a small space has been added here to -% highlight the boundaries). Furthermore, the text inside the -% odd-numbered fields is flushright, while the text inside the -% even-numbered fields is flushleft. The equation tags (shown on -% the right here) can be on either the right or the left. If there -% is not room (in a sense to be defined shortly) for the tag on the -% same line as the equation, the tag will be shifted to a separate -% line. -% -% Each environment also has a certain number of ``flexible -% spaces,'' meaning spaces whose width we are allowed to adjust to -% take up the amount of ``free space'' in the line, meaning the -% space not taken up by the equation tag and the fields of the -% underlying \cs{halign}. -% -% The flexible spaces come in two flavors: interalign spaces and -% margin spaces. If there are $n$ align structures ($n=3$ in the -% illustration above), there are $n-1$ interalign spaces, unless we -% are in an \env{alignat} environment, in which case there are no -% flexible interalign spaces. -% -% The number of margin spaces is a little more complicated: -% Normally, there are two, but if we're in \opt{fleqn} mode, there -% is only one. Furthermore, if we're in an \env{xxalignat} or -% \env{flalign} environment (corresponding to $\cs{xatlevel@} = 2$, -% then there are no flexible margin spaces. -% -% Calculating the interalign and margin spaces is done in two -% stages. -% -% First, the total amount of free space is divided uniformly among -% all the flexible spaces, without regard for the lengths of the tags -% on the various lines. For the non-\opt{fleqn} case, this -% corresponds to centering the align structures between the margins. -% Note that in \opt{fleqn} mode, the right margin is still allowed to -% be larger than \cs{@mathmargin}. This introduces an element of -% asymmetry into the appearance of the environment, but it has the -% advantage of leaving more space for equation tags in the right -% margin. If the right margin were constrained to be equal to the -% left margin in this case, tags would need to be shifted to a -% separate line more often than would be desirable. -% -% Ordinarily, all flexible spaces will be given the same width. -% However, this is not invariably true, since the interalign spaces -% are constrained to be at least \cs{minalignsep} wide, while---in -% the absence of equation tags, at least---the margin spaces are -% allowed to shrink to zero. As we shall see in a minute, if there -% are tags in the environment, then the margins are also bounded -% below by \cs{mintagsep}. -% -% Next, we examine each line of the environment that has a tag to -% see if there is a gap of at least \cs{mintagsep} between the -% equation and its tag. If there isn't, we attempt to center the -% equation between the tag and the opposite margin, leaving a gap -% of at least \cs{mintagsep} on either side, in order to preserve -% some symmetry, i.e., we want the equation to \emph{look} like -% it's centered between the margin and the tag, so we don't want -% the margin space to be less than the gap between the tag and the -% equation. (Arguably, it would be better to allow the margin -% space to shrink to zero in this case in order to avoid shifting -% the tag to a separate line at any cost, but that would require -% all of our calculations to be a little more complicated and hence -% a little slower.) Finally, if no values of the interalign spaces -% and the margins (with the constraints outlined above) will -% produce an acceptable distance between the equation and its tag, -% then the tag will be shifted to a separate line. -% -% \begin{macro}{\measure@} -% \cs{measure@} collects the various bits of information that we'll -% need to perform the calculations outlined above, namely, the -% number of align structures in the environment, the natural -% lengths of the fields on each row, the maximum widths of each -% column, and the widths of the equation tags on each line. It -% also calculates the number of flexible interalign and margin -% spaces and computes the initial values of the parameters -% \cs{eqnshift@} and \cs{alignsep@}, which correspond to the widths -% of the margins and the interalign spaces, respectively. -% \begin{macrocode} -\def\measure@#1{% - \begingroup - \measuring@true - \global\eqnshift@\z@ - \global\alignsep@\z@ - \global\let\tag@lengths\@empty - \global\let\field@lengths\@empty - \savecounters@ - \global\setbox0\vbox{% - \let\math@cr@@@\math@cr@@@align@measure - \everycr{\noalign{\global\tag@false - \global\let\raise@tag\@empty \global\column@\z@}}% - \let\label\@gobble - \global\row@\z@ - \tabskip\z@ - \halign{\span\align@preamble\crcr - #1% - \math@cr@@@ - \global\column@\z@ - \add@amps\maxfields@\cr - }% - }% - \restorecounters@ -% \end{macrocode} -% It's convenient to have \cs{maxfields@} rounded up to the nearest -% even number, so that \cs{maxfields@} is precisely twice the -% number of align structures. -% \begin{macrocode} - \ifodd\maxfields@ - \global\advance\maxfields@\@ne - \fi -% \end{macrocode} -% It doesn't make sense to have a single align structure in either -% \env{flalign} or \env{xxalignat}. So, we check for that case now -% and, if necessary, switch to an \env{align} or \env{alignat}. -% Arguably, we should issue a warning message, but why bother? -% \begin{macrocode} - \ifnum\xatlevel@=\tw@ - \ifnum\maxfields@<\thr@@ - \let\xatlevel@\z@ - \fi - \fi -% \end{macrocode} -% |\box0| now contains the lines of the \cs{halign}. After the -% following maneuver, |\box1| will contain the last line of the -% \cs{halign}, which is what we're interested in. (Incidentally, -% the penalty we're removing is the \cs{@eqpen} inserted by -% \cs{math@cr}. Normally, this is \cs{interdisplaylinepenalty}, -% unless the user has overridden that with a \cs{displaybreak} -% command.) -% \begin{macrocode} - \setbox\z@\vbox{% - \unvbox\z@ \unpenalty \global\setbox\@ne\lastbox - }% -% \end{macrocode} -% |\box1| begins with \cs{tabskip} glue and contains alternating -% \cs{hbox}es (the fields whose widths we're trying to get) and -% \cs{tabskip} glue [need better diagram]: -% \begin{verbatim} -% \hbox{\tabskip\hbox\tabskip...\hbox\tabskip}\end{verbatim} -% In fact, all the \cs{tabskip} glue will be 0pt, because all the -% \cs{tabskip}s in an \env{alignat} environment have a natural -% width of 0pt, and the \cs{halign} has been set in its natural -% width. -% -% One nice result of this is that we can read \cs{totwidth@} off -% immediately, since it is just the width of |\box1|, plus -% \cs{@mathmargin} if we're in \opt{fleqn} mode. (Actually, we -% also have to take \cs{minalignsep} into account, but we'll do -% that later): -% \begin{macrocode} - \global\totwidth@\wd\@ne - \if@fleqn \global\advance\totwidth@\@mathmargin \fi -% \end{macrocode} -% Now we initialize \cs{align@lengths} and start peeling the boxes -% off, one by one, and adding their widths to \cs{align@lengths}. -% We stop when we run out of boxes, i.e., when \cs{lastbox} returns -% a void box. We're going to build a list using \cs{or} as a -% delimiter, so we want to disable it temporarily. -% \begin{macrocode} - \global\let\maxcolumn@widths\@empty - \begingroup - \let\or\relax - \loop - \global\setbox\@ne\hbox{% - \unhbox\@ne \unskip \global\setbox\thr@@\lastbox - }% - \ifhbox\thr@@ - \xdef\maxcolumn@widths{ \or \the\wd\thr@@ \maxcolumn@widths}% - \repeat - \endgroup -% \end{macrocode} -% Now we calculate the number of flexible spaces and the initial -% values of \cs{eqnshift@} and \cs{alignsep@}. -% We start by calculating $\cs{displaywidth}-\cs{totwidth@}$, -% which gives us the total amount of ``free space'' in a row. -% \begin{macrocode} - \dimen@\displaywidth - \advance\dimen@-\totwidth@ -% \end{macrocode} -% Next we calculate the number of columns of flexible spaces in the -% display, which depends on whether we're in \opt{fleqn} mode and -% in which particular environment we are in. -% -% We use \cs{@tempcnta} to store the total number of flexible spaces -% in the align and \cs{@tempcntb} for the number of interalign -% spaces. -% \begin{macrocode} - \ifcase\xatlevel@ -% \end{macrocode} -% In \env{alignat}, the interalign spaces are under user control, -% not ours. So, we set \cs{alignsep@} and \cs{minalignsep} both -% equal to 0pt. Later, when calculating a new value for -% \cs{alignsep@}, we will only save the new value if it is less -% than the current value of \cs{alignsep@} (i.e., \cs{alignsep@} -% will never increase). Since the values we calculate will never -% be negative, this will ensure that \cs{alignsep@} remains zero in -% \env{alignat}. -% \begin{macrocode} - \global\alignsep@\z@ - \let\minalignsep\z@ - \@tempcntb\z@ -% \end{macrocode} -% In \opt{fleqn} mode, the left margin---and hence the right margin -% in this case---is fixed. Otherwise, we divide the free space -% equally between the two margins. -% \begin{macrocode} - \if@fleqn - \@tempcnta\@ne - \global\eqnshift@\@mathmargin - \else - \@tempcnta\tw@ - \global\eqnshift@\dimen@ - \global\divide\eqnshift@\@tempcnta - \fi - \or -% \end{macrocode} -% In an \env{align} or \env{xalignat} environment with $n$ aligned -% structures, there are $n-1$ interalign spaces and either 1 or~2 -% flexible margins, depending on whether we're in \opt{fleqn} mode -% or not. -% \begin{macrocode} - \@tempcntb\maxfields@ - \divide\@tempcntb\tw@ - \@tempcnta\@tempcntb - \advance\@tempcntb\m@ne -% \end{macrocode} -% If we are in \opt{fleqn} mode, we fix the left margin and divide -% the free space equally among the interalign spaces and the right -% margin. -% \begin{macrocode} - \if@fleqn - \global\eqnshift@\@mathmargin - \global\alignsep@\dimen@ - \global\divide\alignsep@\@tempcnta - \else -% \end{macrocode} -% Otherwise, we divide the free space equally among the interalign -% spaces and both margins. -% \begin{macrocode} - \global\advance\@tempcnta\@ne - \global\eqnshift@\dimen@ - \global\divide\eqnshift@\@tempcnta - \global\alignsep@\eqnshift@ - \fi - \or -% \end{macrocode} -% Finally, if we're in an \env{flalign} or \env{xxalignat} -% environment, there are no flexible margins and $n-1$ flexible -% interalign spaces. -% \begin{macrocode} - \@tempcntb\maxfields@ - \divide\@tempcntb\tw@ - \global\advance\@tempcntb\m@ne - \global\@tempcnta\@tempcntb - \global\eqnshift@\z@ - \global\alignsep@\dimen@ -% \end{macrocode} -% If we're in \opt{fleqn} mode, we need to add back the -% \cs{@mathmargin} that was removed when \cs{dimen@} was originally -% calculated above. -% \begin{macrocode} - \if@fleqn - \global\advance\alignsep@\@mathmargin\relax - \fi - \global\divide\alignsep@\@tempcntb - \fi -% \end{macrocode} -% Now we make sure \cs{alignsep@} isn't too small. -% \begin{macrocode} - \ifdim\alignsep@<\minalignsep\relax - \global\alignsep@\minalignsep\relax - \ifdim\eqnshift@>\z@ - \if@fleqn\else - \global\eqnshift@\displaywidth - \global\advance\eqnshift@-\totwidth@ - \global\advance\eqnshift@-\@tempcntb\alignsep@ - \global\divide\eqnshift@\tw@ - \fi - \fi - \fi - \ifdim\eqnshift@<\z@ - \global\eqnshift@\z@ - \fi - \calc@shift@align -% \end{macrocode} -% Next, we calculate the value of \cs{tagshift@}. This is the glue -% that will be inserted in front of the equation tag to make sure -% it lines up flush against the appropriate margin. -% \begin{macrocode} - \global\tagshift@\totwidth@ - \global\advance\tagshift@\@tempcntb\alignsep@ - \if@fleqn - \ifnum\xatlevel@=\tw@ - \global\advance\tagshift@-\@mathmargin\relax - \fi - \else - \global\advance\tagshift@\eqnshift@ - \fi - \iftagsleft@ \else - \global\advance\tagshift@-\displaywidth - \fi -% \end{macrocode} -% Finally, we increase \cs{totwidth@} by an appropriate multiple of -% \cs{minalignsep}. If the result is greater than -% \cs{displaywidth}, it means that at least one line in the -% \env{align} is overfull and we will issue an appropriate warning -% message (via \cs{bl@ck}) at the end of the environment. -% \begin{macrocode} - \dimen@\minalignsep\relax - \global\advance\totwidth@\@tempcntb\dimen@ - \ifdim\totwidth@>\displaywidth - \global\let\displaywidth@\totwidth@ - \else - \global\let\displaywidth@\displaywidth - \fi - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% The code for calculating the appropriate placement of equation -% tags in the \env{align} environments is quite complicated and -% varies wildly depending on the settings of the |tagsleft@| and -% |@fleqn| switches. To minimize memory and hash space usage, we -% only define the variant appropriate for the current setting of -% those switches. -% -% It would be worthwhile to examine this code more closely someday -% and see if it could be optimized any. -% -% \paragraph{Tag placement when \cs{tagsleft@true}, -% \cs{@fleqntrue}.} -% -% We begin with the version of \cs{calc@shift@align} appropriate -% for flush-left equations with tags on the left. -% -% \begin{macro}{\calc@shift@align} -% This is the simplest case. Since the left margin is fixed, in -% general the only thing to do is check whether there is room for -% the tag in the left margin. The only exception is that if -% $\cs{eqnshift@} = 0\,\mathrm{pt}$---meaning that we're in a -% \env{flalign} environment and this is the first line with a tag -% that we've encountered---then we set $\cs{eqnshift@} = -% \cs{@mathmargin}$ and recalculate \cs{alignsep@}. This is done -% by \cs{x@calc@shift@lf}. -% \begin{macrocode} -\iftagsleft@\if@fleqn - \def\calc@shift@align{% - \global\let\tag@shifts\@empty - \begingroup -% \end{macrocode} -% \cs{@tempdima} is initialized to $\cs{@mathmargin} - -% \cs{mintagsep}$, which yields the maximum size of a tag that will -% not be shifted to another line. -% \begin{macrocode} - \@tempdima\@mathmargin\relax - \advance\@tempdima-\mintagsep\relax -% \end{macrocode} -% Now we examine each row in turn. If the width of the tag on the -% line is non-positive---meaning either that there is no tag or -% else that the user has forced it to have zero width---we mark the -% tag to remain unshifted. Otherwise, we call \cs{x@calc@shift@lf} -% to determine whether any adjustments need to be made to -% \cs{eqnshift@} and \cs{alignsep@}. Note the difference in -% treatment of zero-width tags between this code and \tex/'s -% built-in algorithm: here, a width of zero prohibits the tag from -% being shifted, while in \tex/'s built-in algorithm, a width of -% zero forces the tag to be shifted. -% \begin{macrocode} - \loop - \ifnum\row@>0 - \ifdim\tag@width\row@>\z@ - \x@calc@shift@lf - \else - \saveshift@0% - \fi - \advance\row@\m@ne - \repeat - \endgroup - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\x@calc@shift@lf} -% As mentioned above, \cs{x@calc@shift@lf} first checks to see if -% the current left margin is set to 0 and, if so, resets it to -% \cs{@mathmargin} and recalculates \cs{alignsep@}. Next, it -% checks whether the length of the current tag exceeds the -% previously calculated limit and, if so, marks the tag to be -% shifted to a separate line. -% \begin{macrocode} - \def\x@calc@shift@lf{% - \ifdim\eqnshift@=\z@ - \global\eqnshift@\@mathmargin\relax - \alignsep@\displaywidth - \advance\alignsep@-\totwidth@ - \global\divide\alignsep@\@tempcntb - \ifdim\alignsep@<\minalignsep\relax - \global\alignsep@\minalignsep\relax - \fi - \fi - \ifdim\tag@width\row@>\@tempdima - \saveshift@1% - \else - \saveshift@0% - \fi - } -\fi\fi -% \end{macrocode} -% \end{macro} -% -% \paragraph{Tag placement when \cs{tagsleft@false}, -% \cs{@fleqntrue}.} -% -% Next we consider the case when equations are flush-left, but tags -% are on the right. This case is somewhat more complicated than -% the previous one, since we can adjust the right margin by varying -% the inter-align separatin. Thus, when a tag is found to be too -% close to its equation, we first attempt to decrease -% \cs{alignsep@} enough to move the equation off to an acceptable -% distance. Only if that would require a value of \cs{alignsep@} -% less than \cs{minalignsep} do we move the tag to a separate line. -% -% \begin{macro}{\calc@shift@align} -% This version of \cs{calc@shift@align} differs from the previous -% version only in calling \cs{x@calc@shift@rf} rather than -% \cs{x@calc@shift@lf}. -% \begin{macrocode} -\iftagsleft@\else\if@fleqn - \def\calc@shift@align{% - \global\let\tag@shifts\@empty - \begingroup - \loop - \ifnum\row@>0 - \ifdim\tag@width\row@>\z@ - \x@calc@shift@rf - \else - \saveshift@0% - \fi - \advance\row@\m@ne - \repeat - \endgroup - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\x@calc@shift@rf} -% To start, we need to know two quantities: the number of align -% structures in the current row and the ``effective length'' of the -% row, defined as the distance from the left margin to the -% right edge of the text assuming that \cs{eqnshift@} and -% \cs{alignsep@} are both~0. To get the number of align -% structures, we first count the number of columns by counting the -% number of entries in the \cs{fieldlengths@} for the current row. -% The effective length is calcuated by \cs{x@rcalc@width} and put -% in the temporary register \cs{@tempdimc}, using \cs{@tempdimb} as -% an auxiliary variable. -% \begin{macrocode} - \def\x@calc@shift@rf{% - \column@\z@ - \@tempdimb\z@ - \@tempdimc\z@ - \edef\@tempb{\fieldlengths@\row@}% - \@for\@tempa:=\@tempb\do{% - \advance\column@\@ne - \x@rcalc@width - }% - \begingroup -% \end{macrocode} -% If there are $n$ columns in the current row, then there are -% $\lfloor (n+1)/2 \rfloor$ align structures and $\lfloor (n-1)/2 -% \rfloor$ interalign spaces. -% \begin{macrocode} - \advance\column@\m@ne - \divide\column@\tw@ -% \end{macrocode} -% If this is smaller than the maximum number of interalign spaces -% in the environment, then we need to reduce \cs{@tempcnta} (the -% total number of flexible spaces in the current line) by -% $\cs{@tempcntb} - \cs{column@}$ and reset \cs{@tempcntb} to -% \cs{column@}. -% \begin{macrocode} - \ifnum\@tempcntb>\column@ - \advance\@tempcnta-\@tempcntb - \advance\@tempcnta\column@ - \@tempcntb\column@ - \fi -% \end{macrocode} -% Next, we add the width of the tag and the (fixed) left margin to -% the effective length calculated above. This can be used to -% calculate how much ``free space'' there is in the current line -% and thus how much leeway we have to increase the amount of space -% between the tag and the equation. -% \begin{macrocode} - \tagwidth@\tag@width\row@\relax - \@tempdima\eqnshift@ - \advance\@tempdima\@tempdimc\relax - \advance\@tempdima\tagwidth@ -% \end{macrocode} -% The first thing to check is whether the tag should be shifted to -% a separate line. To do this, we add the minimum interalign -% separation and the \cs{mintagsep} to the value of \cs{@tempdima} -% just calculated. This yields the minimum acceptable length of -% the current line. If that is greater than \cs{displaywidth}, we -% mark the tag to be calculated. Otherwise, we mark the tag to be -% kept on the same line and then check to see if the \cs{alignsep@} -% needs to be reduced to make room for the tag. -% \begin{macrocode} - \dimen@\minalignsep\relax - \multiply\dimen@\@tempcntb - \advance\dimen@\mintagsep\relax - \advance\dimen@\@tempdima - \ifdim\dimen@>\displaywidth - \saveshift@1% - \else - \saveshift@0% -% \end{macrocode} -% Now we perform essentially the same calculation, but using the -% current value of \cs{alignsep@} instead of \cs{minalignsep}. -% This gives the current length of the line. If this is greater -% than \cs{displaywidth}, we recalculate \cs{alignsep@} to make -% room for the tag. -% \begin{macrocode} - \dimen@\alignsep@\relax - \multiply\dimen@\@tempcntb - \advance\dimen@\@tempdima - \advance\dimen@\tagwidth@ - \ifdim\dimen@>\displaywidth - \dimen@\displaywidth - \advance\dimen@-\@tempdima - \ifnum\xatlevel@=\tw@ - \advance\dimen@-\mintagsep\relax - \fi - \divide\dimen@\@tempcnta - \ifdim\dimen@<\minalignsep\relax - \global\alignsep@\minalignsep\relax - \else - \global\alignsep@\dimen@ - \fi - \fi - \fi - \endgroup - } -\fi\fi -% \end{macrocode} -% \end{macro} -% -% \paragraph{Tag placement when \cs{tagsleft@false}, -% \cs{@fleqnfalse}.} -% -% This is similar to the previous case, except for the added -% complication that both \cs{alignsep@} and \cs{eqnshift@} can -% vary, which makes the computations correspondingly more -% complicated. -% -% \begin{macro}{\calc@shift@align} -% \begin{macrocode} -\iftagsleft@\else\if@fleqn\else - \def\calc@shift@align{% - \global\let\tag@shifts\@empty - \begingroup - \loop - \ifnum\row@>0 - \ifdim\tag@width\row@>\z@ - \x@calc@shift@rc - \else - \saveshift@0% - \fi - \advance\row@\m@ne - \repeat - \endgroup - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\x@calc@shift@rc} -% \begin{macrocode} - \def\x@calc@shift@rc{% - \column@\z@ - \@tempdimb\z@ - \@tempdimc\z@ - \edef\@tempb{\fieldlengths@\row@}% - \@for\@tempa:=\@tempb\do{% - \advance\column@\@ne - \x@rcalc@width - }% - \begingroup - \advance\column@\m@ne - \divide\column@\tw@ - \ifnum\@tempcntb>\column@ - \advance\@tempcnta-\@tempcntb - \advance\@tempcnta\column@ - \@tempcntb\column@ - \fi - \tagwidth@\tag@width\row@\relax - \@tempdima\@tempdimc - \advance\@tempdima\tagwidth@ - \dimen@\minalignsep\relax - \multiply\dimen@\@tempcntb - \advance\dimen@\mintagsep\relax - \ifnum\xatlevel@=\tw@ \else - \advance\dimen@\mintagsep\relax - \fi - \advance\dimen@\@tempdima - \ifdim\dimen@>\displaywidth - \saveshift@1% - \else - \saveshift@0% - \dimen@\eqnshift@ - \advance\dimen@\@tempdima - \advance\dimen@\@tempcntb\alignsep@ - \advance\dimen@\tagwidth@ - \ifdim\dimen@>\displaywidth - \dimen@\displaywidth - \advance\dimen@-\@tempdima - \ifnum\xatlevel@=\tw@ - \advance\dimen@-\mintagsep\relax - \fi - \divide\dimen@\@tempcnta - \ifdim\dimen@<\minalignsep\relax - \global\alignsep@\minalignsep\relax - \eqnshift@\displaywidth - \advance\eqnshift@-\@tempdima - \advance\eqnshift@-\@tempcntb\alignsep@ - \global\divide\eqnshift@\tw@ - \else - \ifdim\dimen@<\eqnshift@ - \ifdim\dimen@<\z@ - \global\eqnshift@\z@ - \else - \global\eqnshift@\dimen@ - \fi - \fi - \ifdim\dimen@<\alignsep@ - \global\alignsep@\dimen@ - \fi - \fi - \fi - \fi - \endgroup - } -\fi\fi -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\x@rcalc@width} -% \begin{macrocode} -\iftagsleft@\else - \def\x@rcalc@width{% - \ifdim\@tempa > \z@ - \advance\@tempdimc\@tempdimb - \ifodd\column@ - \advance\@tempdimc\maxcol@width\column@ - \@tempdimb\z@ - \else - \advance\@tempdimc\@tempa\relax - \@tempdimb\maxcol@width\column@ - \advance\@tempdimb-\@tempa\relax - \fi - \else - \advance\@tempdimb\maxcol@width\column@\relax - \fi - } -\fi -% \end{macrocode} -% \end{macro} -% -% \paragraph{Tag placement when \cs{tagsleft@true}, -% \cs{@fleqnfalse}.} -% -% \begin{macro}{\calc@shift@align} -% \begin{macrocode} -\iftagsleft@\if@fleqn\else - \def\calc@shift@align{% - \global\let\tag@shifts\@empty - \begingroup - \loop - \ifnum\row@>\z@ - \ifdim\tag@width\row@>\z@ - \x@calc@shift@lc - \else - \saveshift@0% - \fi - \advance\row@\m@ne - \repeat - \endgroup - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\x@calc@shift@lc} -% \begin{macrocode} - \def\x@calc@shift@lc{% - \column@\z@ -% \end{macrocode} -% \cs{@tempdima} will (eventually) be set to the effective width of -% the current row, defined as the distance from the leftmost point -% of the current line to the end of the last field of the -% \cs{halign}, ignoring any intervening \cs{tabskip}s, plus the -% width of the current tag. That is, it will be the width of the -% first non-empty field plus the sum of the maximum widths of all -% following fields, plus the tag width. -% -% \cs{@tempdimb} will be the ``indentation'' of leftmost end of -% text, ignoring the \cs{tabskip} glue, i.e., it will be the sum of -% the maximum widths of any fields to the left of the first -% non-empty field, plus whatever empty space there is at the -% beginning of the first non-empty field. -% \begin{macrocode} - \@tempdima\z@ % ``width of equation'' - \@tempdimb\z@ % ``indent of equation'' - \edef\@tempb{\fieldlengths@\row@}% - \@for\@tempa:=\@tempb\do{% - \advance\column@\@ne - \x@lcalc@width - }% - \begingroup - \tagwidth@\tag@width\row@\relax -% \end{macrocode} -% \cs{@tempdima} is now easy to calculate, since it is just -% $\cs{totwidth@} - \cs{@tempdimb} + \cs{tagwidth@}$. -% \begin{macrocode} - \@tempdima\totwidth@ - \advance\@tempdima-\@tempdimb - \advance\@tempdima\tagwidth@ -% \end{macrocode} -% Next, we check to see whether there is room for both the equation -% and the tag on the same line, by calculating the minimum -% acceptable length of the current row and comparing that to -% \cs{displaywidth}. Note that here we use \cs{@tempcntb}, i.e., -% the number of interalign spaces after the first non-empty align -% structure. -% \begin{macrocode} - \dimen@\minalignsep\relax - \multiply\dimen@\@tempcntb - \advance\dimen@\mintagsep\relax - \ifnum\xatlevel@=\tw@ \else - \advance\dimen@\mintagsep\relax - \fi - \advance\dimen@\@tempdima -% \end{macrocode} -% If the minimum acceptable width of the current line is greater -% than \cs{displaywidth}, we mark the current tag to be shifted to -% a separate line. -% \begin{macrocode} - \ifdim\dimen@>\displaywidth - \saveshift@1% - \else -% \end{macrocode} -% Otherwise, the tag can stay on the same line as the equation, but -% we need to check whether it is too close to the equation. So, we -% calculate the distance between the left margin and the left side -% of the equation, using the current values of \cs{eqnshift@} and -% \cs{alignsep@}. Note that we use \cs{count@} here, not -% \cs{@tempcntb}, as above. -% \begin{macrocode} - \saveshift@0% - \dimen@\alignsep@ - \multiply\dimen@\count@ - \advance\dimen@\eqnshift@ - \advance\dimen@\@tempdimb -% \end{macrocode} -% If the left margin is less than twice the tag width, we calculate -% new values of \cs{eqnshift@} and \cs{alignsep@} to move the -% equation further away from the tag. In particular, we center the -% current line between its tag and the right margin. Note that -% although we later will need to transform \cs{dimen@} into a value -% suitable for use as \cs{eqnshift@}, for the time being it is more -% useful to think of it as the space separating the tag from the -% equation. -% \begin{macrocode} - \ifdim\dimen@<2\tagwidth@ - \dimen@\displaywidth - \advance\dimen@-\@tempdima - \ifnum\xatlevel@=\tw@ - \advance\dimen@-\mintagsep\relax - \fi -% \end{macrocode} -% In certain circumstances we will get a divide-by-zero error here -% unless we guard against it. Use of \cs{@tempcnta} is complicated, -% sometimes it is assigned globally, sometimes locally. Need to sort -% it out one of these days [mjd,2000/06/02]. -% \begin{macrocode} - \ifnum\@tempcnta>\z@ - \divide\dimen@\@tempcnta - \else \dimen@\z@ - \fi -% \end{macrocode} -% As usual, we check to make sure we don't set \cs{alignsep@} -% smaller than \cs{minalignsep} and, in any case, that we don't -% replace \cs{alignsep@} by a larger value. -% \begin{macrocode} - \ifdim\dimen@<\minalignsep\relax - \global\alignsep@\minalignsep\relax - \dimen@\displaywidth - \advance\dimen@-\@tempdima - \advance\dimen@-\@tempcntb\alignsep@ - \global\divide\dimen@\tw@ - \else - \ifdim\dimen@<\alignsep@ - \global\alignsep@\dimen@ - \fi - \fi -% \end{macrocode} -% Next, we calculate an appropriate value of \cs{eqnshift@}, -% assuming that \cs{dimen@} is the desired separation between the -% tag and equation of the current line. This means that we first -% need to adjust \cs{dimen@} if we're in an \env{flalign} -% environment. -% \begin{macrocode} - \ifnum\xatlevel@=\tw@ - \dimen@\mintagsep\relax - \fi -% \end{macrocode} -% Now we calculate the value of \cs{eqnshift@} needed to produce a -% separation of \cs{dimen@} between the equation tag and the -% beginning of the equation. To do this, we need the following -% equation to hold: -% \[ -% \cs{eqnshift@} + n\cs{alignsep@} + \cs{@tempdimb} -% = \cs{tagwidth@} + \cs{dimen@} -% \] -% where $n = \cs{count@}$ is the number of interalign spaces before -% the first non-empty field of the current line. -% \begin{macrocode} - \advance\dimen@\tagwidth@ - \advance\dimen@-\@tempdimb - \advance\dimen@-\count@\alignsep@ -% \end{macrocode} -% The value of \cs{eqnshift@} just calculated is the minimum -% acceptable value; thus, we save it only if it is larger than the -% current value. -% \begin{macrocode} - \ifdim\dimen@>\eqnshift@ - \global\eqnshift@\dimen@ - \fi - \fi - \fi - \endgroup - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\x@lcalc@width} -% This macro calculates the ``indentation'' of the current row, as -% defined above under the description of \cs{x@calc@shift@lc}. -% This macro is called for each field of the current line, with -% \cs{@tempa} set to the width of the current field. Ideally, the -% loop enclosing \cs{x@lcalc@width} would terminate as soon as -% \cs{@tempa} is non-zero, but that would be a bit tricky to -% arrange. Instead, we use \cs{@tempdima} as a flag to signal when -% we've encountered the first non-empty field. -% -% \begin{macrocode} - \def\x@lcalc@width{% - \ifdim\@tempdima = \z@ -% \end{macrocode} -% If the current field is empty (i.e., $\cs{@tempa} = -% \mathrm{0\,pt}$, then we increment \cs{@tempdimb} by the width of -% the current field). Otherwise, we set $\cs{@tempdima} = -% \mathrm{1\,pt}$ as a signal value and increment \cs{@tempdimb} by -% the width of whatever empty space there might be at the left of -% the current field. -% \begin{macrocode} - \ifdim\@tempa > \z@ - \@tempdima\p@ - \ifodd\column@ - \advance\@tempdimb \maxcol@width\column@ - \advance\@tempdimb-\@tempa - \fi -% \end{macrocode} -% In addition, we need to adjust the values of \cs{@tempcnta} and -% \cs{@tempcntb} to account for any empty align structures that -% might occur at the beginning of the current line. More -% specifically, we first set \cs{count@} equal to the number of -% interalign spaces preceding the current field (namely, $\lfloor -% (\cs{\column@}-1)/2 \rfloor$), and then subtract \cs{count@} from -% both \cs{@tempcnta} and \cs{@tempcntb}. The rationale is that -% for the purposes of adjusting the spacing between the tag and the -% equation, the only flexible interalign spaces are those after -% the first non-empty align structure, so we need to treat those -% different from the ones before the first non-empty align -% structure. -% \begin{macrocode} - \count@\column@ - \advance\count@\m@ne - \divide\count@\tw@ - \advance\@tempcnta-\count@ - \advance\@tempcntb-\count@ - \else - \advance\@tempdimb \maxcol@width\column@\relax - \fi - \fi - } -\fi\fi -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\place@tag} -% \cs{place@tag} takes care of the placment of tags in the -% \env{align} environments. -% \begin{macrocode} -\def\place@tag{% - \iftagsleft@ - \kern-\tagshift@ - \if1\shift@tag\row@\relax - \rlap{\vbox{% - \normalbaselines - \boxz@ - \vbox to\lineht@{}% - \raise@tag - }}% - \else - \rlap{\boxz@}% - \fi - \kern\displaywidth@ - \else - \kern-\tagshift@ - \if1\shift@tag\row@\relax -% \end{macrocode} -% Added depth to correct vertical spacing of shifted -% equation tags.---dmj, 1994/12/29 -% \begin{macrocode} - \llap{\vtop{% - \raise@tag - \normalbaselines - \setbox\@ne\null - \dp\@ne\lineht@ - \box\@ne - \boxz@ - }}% - \else - \llap{\boxz@}% - \fi - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\align@preamble} -% \begin{macrocode} -\def\align@preamble{% - &\hfil - \strut@ - \setboxz@h{\@lign$\m@th\displaystyle{##}$}% - \ifmeasuring@\savefieldlength@\fi - \set@field - \tabskip\z@skip - &\setboxz@h{\@lign$\m@th\displaystyle{{}##}$}% - \ifmeasuring@\savefieldlength@\fi - \set@field - \hfil - \tabskip\alignsep@ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\set@field} -% \cs{set@field} increments the column counter, tracks the value of -% \cs{lineht@} and finally inserts the box containing the contents -% of the current field. -% \begin{macrocode} -\def\set@field{% - \column@plus - \iftagsleft@ - \ifdim\ht\z@>\lineht@ - \global\lineht@\ht\z@ - \fi - \else - \ifdim\dp\z@>\lineht@ - \global\lineht@\dp\z@ - \fi - \fi - \boxz@ -} -% \end{macrocode} -% \end{macro} -% -% -% \subsection {The \env{split} environment} -% -% \begin{macro}{\split@err} -% A special error function for \env{split} to conserve main mem (at a -% cost of string pool/hash size. -% \begin{macrocode} -\edef\split@err#1{% - \@nx\@amsmath@err{% - \string\begin{split} won't work here% - }{% - \@xp\@nx\csname - Did you forget a preceding \string\begin{equation}?^^J% - If not, perhaps the `aligned' environment is what - you want.\endcsname}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{environment}{split} -% If the \env{split} environment occurs inside \env{align} or -% \env{gather}, it can make use of the enclosing halign; if it is -% called inside a simple equation, we add an implicit `gather' -% container. -% -% \begin{macrocode} -\newenvironment{split}{% - \if@display - \ifinner - \@xp\@xp\@xp\split@aligned - \else - \ifst@rred \else \global\@eqnswtrue \fi - \fi - \else \let\endsplit\@empty \@xp\collect@body\@xp\split@err - \fi - \collect@body\gather@split -}{% - \crcr - \egroup - \egroup - \iftagsleft@ \@xp\lendsplit@ \else \@xp\rendsplit@ \fi -} -% \end{macrocode} -% -% \begin{macrocode} -\let\split@tag\relax % init -% \end{macrocode} -% -% \begin{macrocode} -\def\gather@split#1#2#3{% - \@xp\endgroup \reset@equation % math@cr will handle equation numbering - \iftag@ - \toks@\@xp{\df@tag}% - \edef\split@tag{% - \gdef\@nx\df@tag{\the\toks@}% - \global\@nx\tag@true \@nx\nonumber - }% - \else \let\split@tag\@empty - \fi - \spread@equation -% \end{macrocode} -% The extra vcenter wrapper here is not really a good thing but -% without it there are compatibility problems with old documents that -% throw in some extra material between \verb'\begin{equation}' and -% \verb'\begin{split}' (for example, \verb'\hspace{-1pc}' or -% \verb'\left\{'). [mjd,1999/09/20] -% \begin{macrocode} - \vcenter\bgroup - \gather@{\split@tag \begin{split}#1\end{split}}% - \def\endmathdisplay@a{% - \math@cr \black@ \totwidth@ \egroup - \egroup - }% -} -% \end{macrocode} -% -% \end{environment} -% -% \begin{macro}{\insplit@} -% \begin{macrocode} -\def\insplit@{% - \global\setbox\z@\vbox\bgroup - \Let@ \chardef\dspbrk@context\@ne \restore@math@cr - \default@tag % disallow use of \tag here - \ialign\bgroup - \hfil - \strut@ - $\m@th\displaystyle{##}$% - &$\m@th\displaystyle{{}##}$% - \hfill % Why not \hfil?---dmj, 1994/12/28 - \crcr -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rendsplit@} -% Moved the box maneuvers inside the \cs{ifinalign@}, since that is -% the only place they are needed.---dmj, 1994/12/28 -% -% TODO: Explore interaction of tag-placement algorithm with -% \env{split}. Is there any way for \env{split} to pass the -% relevant information out to the enclosing \env{gather} or -% \env{align}? -% \begin{macrocode} -\def\rendsplit@{% - \ifinalign@ -% \end{macrocode} -% Changed |\box9| into a \cs{vtop} here for better spacing. -% \begin{macrocode} - \global\setbox9 \vtop{% - \unvcopy\z@ - \global\setbox8 \lastbox - \unskip - }% - \setbox\@ne\hbox{% - \unhcopy8 - \unskip - \global\setbox\tw@\lastbox - \unskip - \global\setbox\thr@@\lastbox - }% - \ifctagsplit@ - \gdef\split@{% - \hbox to\wd\thr@@{}% - &\vcenter{\vbox{\moveleft\wd\thr@@\boxz@}}% - }% - \else - \global\setbox7 \hbox{\unhbox\tw@\unskip}% -% \end{macrocode} -% Added \cs{add@amps} to make sure we put the last line of the -% \env{split} into the proper column of an \env{align} environment -% with multiple align structures.---dmj, 1994/12/28 -% -% Special care has to be taken in this case because the \env{split} -% turns into two lines of the \env{align} instead of just one. So, -% we have to make sure that the first line produced by the -% \env{split} doesn't upset our bookkeeping, hence we call -% \cs{savetaglength@} to insert 0\,pt as the tag for this -% pseudo-line, and we advance the \cs{row@} counter and reset -% \cs{lineht@} afterwards. It would be nice if we could just -% replace the \cs{crcr} by \cs{math@cr@@@}, but that would cause -% problems with the tag processing. -% \begin{macrocode} - \gdef\split@{% - \global\@tempcnta\column@ - &\setboxz@h{}% - \savetaglength@ - \global\advance\row@\@ne - \vbox{\moveleft\wd\thr@@\box9}% - \crcr - \noalign{\global\lineht@\z@}% - \add@amps\@tempcnta - \box\thr@@ - &\box7 - }% - \fi - \else - \ifctagsplit@ - \gdef\split@{\vcenter{\boxz@}}% - \else -% \end{macrocode} -% Changed to just \cs{boxz@}, otherwise last line gets centered -% rather than aligned properly with respect to the rest of the -% lines. But this means that we can't see inside of the last line -% to decide whether the tag needs to be moved. Will have to think -% about this.---dmj, 1994/12/28 -% \begin{macrocode} - \gdef\split@{% - \boxz@ -% \box9 -% \crcr -% \hbox{\box\thr@@\box7}% - }% - \fi - \fi - \aftergroup\split@ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\lendsplit@} -% \begin{macrocode} -\def\lendsplit@{% - \global\setbox9\vtop{\unvcopy\z@}% - \ifinalign@ -% \end{macrocode} -% Moved following two boxes inside the \cs{ifinalign@}, since they -% are only used in that case. In fact, if we just kept track of -% the width of the first column, we could dispense with this -% entirely. Surely that would be more efficient than all these box -% copies.---dmj, 1994/12/28 -% \begin{macrocode} - \setbox\@ne\vbox{% - \unvcopy\z@ - \global\setbox8\lastbox - }% - \setbox\@ne\hbox{% - \unhcopy8% - \unskip - \setbox\tw@\lastbox - \unskip - \global\setbox\thr@@\lastbox - }% - \ifctagsplit@ - \gdef\split@{% - \hbox to\wd\thr@@{}% - &\vcenter{\vbox{\moveleft\wd\thr@@\box9}}% - }% - \else - \gdef\split@{% - \hbox to\wd\thr@@{}% - &\vbox{\moveleft\wd\thr@@\box9}% - }% - \fi - \else - \ifctagsplit@ - \gdef\split@{\vcenter{\box9}}% - \else - \gdef\split@{\box9}% - \fi - \fi - \aftergroup\split@ -} -% \end{macrocode} -% \end{macro} -% -% With \pkg{amsmath} 1.2 it was possible to put things like -% \verb'\left\{' between \verb'\begin{equation}' and -% \verb'\begin{split}' without getting any error message. For -% backward compatibility we try to avoid a fatal error in this case -% and instead attempt recovery with \env{aligned}. -% \begin{macrocode} -\def\split@aligned#1#2{% - \iffalse{\fi\ifnum0=`}\fi - \collect@body\split@al@a} -% \end{macrocode} -% -% \begin{macrocode} -\def\split@al@a#1#2#3{% - \split@warning - \endgroup -% \end{macrocode} -% If the \opt{fleqn} and \opt{tbtags} options are both in effect then -% we will need to add an optional argument on the \env{aligned} -% environment. -% \begin{macrocode} - \toks@{\begin{aligned}}% - \if@fleqn \split@al@tagcheck \fi -% \end{macrocode} -% The \cs{relax} here is to prevent \cs{@let@token} from being left -% equal to an ampersand if that happens to be the first thing in the body. -% \begin{macrocode} - \the\toks@\relax#1\end{aligned}% - \ifnum0=`{\fi\iffalse}\fi -} -% \end{macrocode} -% -% \begin{macrocode} -\def\split@al@tagcheck{% - \ifctagsplit@ - \else - \iftagsleft@ \toks@\@xp{\the\toks@ [t]}% - \else \toks@\@xp{\the\toks@ [b]}% - \fi - \fi -} -% \end{macrocode} -% -% \begin{macrocode} -\def\split@warning{% - \PackageWarning{amsmath}{% -Cannot use `split' here;\MessageBreak trying to recover with `aligned'}% -} -% \end{macrocode} -% -% \subsection{The \env{multline} environment} -% -% In the original \amstex/, \cn{multlinegap} is a macro with an -% argument that resets an internal dimension (one with an \qc{\@} -% character in its name). Here, to save control sequence names, we -% define \cn{multlinegap} to be the dimension itself and the -% documentation instructs users to use \cn{setlength} if they -% need to change it. -% \begin{macro}{\multlinegap} -% \begin{macro}{\multlinetaggap} -% Changed \cs{multlinegap} and \cs{multlinetaggap} to skip -% registers. Also changed name to \cs{multlinetaggap} from -% \cs{multlinetaggap@}. -% \begin{macrocode} -\newskip\multlinegap -\multlinegap10pt -\newskip\multlinetaggap -\multlinetaggap10pt -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\start@multline} -% \begin{macrocode} -\def\start@multline#1{% - \RIfM@ - \nomath@env - \DN@{\@namedef{end\@currenvir}{}\@gobble}% - \else - $$% - #1% - \ifst@rred - \nonumber - \else - \global\@eqnswtrue - \fi - \let\next@\multline@ - \fi - \collect@body\next@ -} -% \end{macrocode} -% \end{macro} -% -% \begin{environment}{multline} -% \begin{environment}{multline*} -% \begin{macrocode} -\newenvironment{multline}{% - \start@multline\st@rredfalse -}{% - \iftagsleft@ \@xp\lendmultline@ \else \@xp\rendmultline@ \fi - \ignorespacesafterend -} -% \end{macrocode} -% -% \begin{macrocode} -\newenvironment{multline*}{\start@multline\st@rredtrue}{\endmultline} -% \end{macrocode} -% \end{environment} -% \end{environment} -% -% \begin{macro}{\multline@} -% \begin{macrocode} -\def\multline@#1{% - \Let@ -% \end{macrocode} -% -% For multline neither \cs{displ@y} no \cs{displ@y@} is quite right; -% we want to advance the row number and (I suppose?) the -% display-pagebreak level, but we only want to do tag-related stuff -% once before the first line, not repeat it for every line. (Recall -% that the arg of \cs{@display@init} goes into \cs{everycr}.) -% \begin{macrocode} - \@display@init{\global\advance\row@\@ne \global\dspbrk@lvl\m@ne}% - \chardef\dspbrk@context\z@ - \restore@math@cr -% \end{macrocode} -% The \env{multline} environment is somewhat unusual, in that -% \cs{tag} and \cs{label} are enabled only during the measuring -% phase and disabled during the production phase. -% Here we disable \cs{tag} and \cs{label}; \cs{mmeasure@} will -% re-enable them temporarily. -% \begin{macrocode} - \let\tag\tag@in@align - \global\tag@false \global\let\raise@tag\@empty - \mmeasure@{#1}% - \let\tag\gobble@tag \let\label\@gobble - \tabskip \if@fleqn \@mathmargin \else \z@skip \fi - \totwidth@\displaywidth - \if@fleqn - \advance\totwidth@-\@mathmargin - \fi - \halign\bgroup - \hbox to\totwidth@{% -% \end{macrocode} -% In order to get the spacing of the last line right in fleqn -% mode, we need to play a little game here. Normally the -% stretchability of the \cs{hskip} here will be suppressed by the -% \cs{hfil} at the end of the template, except inside the last line, -% when that \cs{hfil} will be removed by the \cs{hfilneg} in -% \cs{lendmultline@}. -% \begin{macrocode} - \if@fleqn - \hskip \@centering \relax - \else - \hfil - \fi - \strut@ - $\m@th\displaystyle{}##\endmultline@math - \hfil - }% - \crcr -% \end{macrocode} -% In \opt{fleqn} mode, it's the \cs{tabskip} of \cs{@mathmargin} -% that needs to be removed in the first line, not the \cs{hfil} at -% the beginning of the template. -% \begin{macrocode} - \if@fleqn - \hskip-\@mathmargin - \def\multline@indent{\hskip\@mathmargin}% put it back - \else - \hfilneg - \def\multline@indent{\hskip\multlinegap}% - \fi - \iftagsleft@ - \iftag@ - \begingroup - \ifshifttag@ - \rlap{\vbox{% - \normalbaselines - \hbox{% - \strut@ - \make@display@tag - }% - \vbox to\lineht@{}% - \raise@tag - }}% -% \end{macrocode} -% If the equation tag doesn't fit on the same line with the first -% line of the display, we'll indent the first line by -% \cn{multlinegap}. This is a change from \pkg{amstex}, where the -% first line would have been flush against the left margin in this -% case. A corresponding change will be made in \cs{rendmultline@}. -% \begin{macrocode} - \multline@indent - \else - \setbox\z@\hbox{\make@display@tag}% - \dimen@\@mathmargin \advance\dimen@-\wd\z@ - \ifdim\dimen@<\multlinetaggap - \dimen@\multlinetaggap - \fi - \box\z@ \hskip\dimen@\relax - \fi - \endgroup - \else - \multline@indent - \fi - \else - \multline@indent - \fi - #1% -} -% \end{macrocode} -% -% An extra level of indirection for the closing \verb'$' in multline -% allows us to avoid getting an extra thinmuskip from a final -% mathpunct in the equation contents, when equation numbers are on -% the right. If we did not use this workaround, the sequence of -% elements for a final comma would be, e.g., -% \begin{verbatim} -% ... ,<hskip><box containing equation number> -% \end{verbatim} -% which is equivalent to a sequence \verb'<mathpunct><mathord>' as -% far as the automatic math spacing is concerned. -% \begin{macrocode} -\def\endmultline@math{$} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\lendmultline@} -% Bug fix: changed \cs{crcr} to \cs{math@cr} so that \cs{@eqpen} -% gets reset properly if \cs{displaybreak} is used on the -% penultimate line of an \env{align}. -% \begin{macrocode} -\def\lendmultline@{% - \hfilneg - \hskip\multlinegap - \math@cr - \egroup - $$% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rendmultline@} -% \begin{macrocode} -\def\rendmultline@{% - \iftag@ - $\let\endmultline@math\relax - \ifshifttag@ - \hskip\multlinegap -% \end{macrocode} -% Added depth to correct vertical spacing of shifted equation -% tags.---dmj, 1994/12/29 -% \begin{macrocode} - \llap{\vtop{% - \raise@tag - \normalbaselines - \setbox\@ne\null - \dp\@ne\lineht@ - \box\@ne - \hbox{\strut@\make@display@tag}% - }}% - \else - \hskip\multlinetaggap - \make@display@tag - \fi - \else - \hskip\multlinegap - \fi - \hfilneg -% \end{macrocode} -% Use \cs{math@cr} rather than just \cs{crcr} so that \cs{@eqpen} -% gets reset properly if \cs{displaybreak} is used. -% \begin{macrocode} - \math@cr - \egroup$$% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\mmeasure@} -% \begin{macrocode} -\def\mmeasure@#1{% - \begingroup - \measuring@true -% \end{macrocode} -% We use \cs{begin/endgroup} rather than |{}| in this definition of -% \cn{label} because the latter would create an extra (wasteful of -% main mem) null box in the current math list. [mjd, 1995/01/17] -% \begin{macrocode} - \def\label##1{% - \begingroup\measuring@false\label@in@display{##1}\endgroup}% - \def\math@cr@@@{\cr}% - \let\shoveleft\@iden \let\shoveright\@iden - \savecounters@ - \global\row@\z@ - \setbox\@ne\vbox{% - \global\let\df@tag\@empty - \halign{% - \setboxz@h{\@lign$\m@th\displaystyle{}##$}% - \iftagsleft@ - \ifnum\row@=\@ne - \global\totwidth@\wdz@ - \global\lineht@\ht\z@ - \fi - \else - \global\totwidth@\wdz@ - \global\lineht@\dp\z@ - \fi - \crcr - #1% - \crcr - }% - }% - \ifx\df@tag\@empty\else\global\tag@true\fi - \if@eqnsw\global\tag@true\fi - \iftag@ - \setboxz@h{% - \if@eqnsw - \stepcounter{equation}% - \tagform@\theequation - \else - \df@tag - \fi - }% - \global\tagwidth@\wdz@ - \dimen@\totwidth@ - \advance\dimen@\tagwidth@ - \advance\dimen@\multlinetaggap - \iftagsleft@\else - \if@fleqn - \advance\dimen@\@mathmargin - \fi - \fi - \ifdim\dimen@>\displaywidth - \global\shifttag@true - \else - \global\shifttag@false - \fi - \fi - \restorecounters@ - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\shoveleft} -% \begin{macro}{\shoveright} -% \cs{shoveleft} and \cs{shoveright} need to do slightly different -% things depending on whether tags are on the left or the right and -% whether we're in \opt{fleqn} mode. For compactness of code, we -% make the appropriate decisions at ``compile'' time rather than at -% load time. -% -% TODO: Investigate making \cs{shoveright} behave ``properly''(?) if -% used on the first line of a \env{multline} and make \cs{shoveleft} -% behave properly if used on the last line of a \env{multline}. But -% in his \fn{amstex.doc} Spivak indicates those commands should never -% be used on a first or last line. Perhaps better to leave the -% question open unless/until real-life examples turn up. -% \begin{macrocode} -\iftagsleft@ - \def\shoveright#1{% - #1% - \hfilneg - \hskip\multlinegap - } -\else - \def\shoveright#1{% - #1% - \hfilneg - \iftag@ - \ifshifttag@ - \hskip\multlinegap - \else - \hskip\tagwidth@ - \hskip\multlinetaggap - \fi - \else - \hskip\multlinegap - \fi - } -\fi - -\if@fleqn - \def\shoveleft#1{#1}% -\else - \iftagsleft@ - \def\shoveleft#1{% - \setboxz@h{$\m@th\displaystyle{}#1$}% - \setbox\@ne\hbox{$\m@th\displaystyle#1$}% - \hfilneg - \iftag@ - \ifshifttag@ - \hskip\multlinegap - \else - \hskip\tagwidth@ - \hskip\multlinetaggap - \fi - \else - \hskip\multlinegap - \fi - \hskip.5\wd\@ne - \hskip-.5\wdz@ - #1% - } - \else - \def\shoveleft#1{% - \setboxz@h{$\m@th\displaystyle{}#1$}% - \setbox\@ne\hbox{$\m@th\displaystyle#1$}% - \hfilneg - \hskip\multlinegap - \hskip.5\wd\@ne - \hskip-.5\wdz@ - #1% - } - \fi -\fi -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \subsection{The \env{equation} environment} -% -% Rewritten from the ground up for version 2.0 to fix no-shrink and -% no-shortskips bugs [mjd,2000/01/06]. -% -% Standard \latex/ provides three environments for one-line equations: -% \cn{[}\cn{]}, \env{equation}, and \env{displaymath}. We add -% \env{equation*} as a synonym for \env{displaymath}. -% \begin{macrocode} -\@saveprimitive\leqno\@@leqno -\@saveprimitive\eqno\@@eqno -\def\eqno{\@@eqno\let\eqno\relax\let\leqno\relax} -\def\leqno{\@@leqno\let\leqno\relax\let\eqno\relax} -% -\let\veqno=\@@eqno -\iftagsleft@ \let\veqno=\@@leqno \fi -% \end{macrocode} -% -% Support for the \pkg{showkeys} package: provide no-op definitions -% for a couple of SK functions, if they are not already defined. Then -% we can just call them directly in our code without any extra fuss. -% If the \pkg{showkeys} package is loaded later, our trivial -% definitions will get overridden and everything works fine. -% \begin{macrocode} -\@ifundefined{SK@@label}{% - \let\SK@@label\relax \let\SK@equationtrue\relax -}{} -% \end{macrocode} -% -% \begin{macrocode} -\let\reset@equation\@empty -% \end{macrocode} -% -% Cf \cs{tag@in@align}. This is a bit of a mess though. Could use -% some work. [mjd,1999/12/21] -% \begin{macrocode} -\let\alt@tag\@empty -\def\tag@in@display#1#{\relax\tag@in@display@a{#1}} -\def\tag@in@display@a#1#2{% - \iftag@ - \invalid@tag{Multiple \string\tag}\relax - \else - \global\tag@true \nonumber \reset@equation \st@rredtrue - \if *\string#1% - \gdef\alt@tag{\def\SK@tagform@{#2\@gobble}% - \ifx\SK@@label\relax \let\tagform@\SK@tagform@ \fi - }% - \make@df@tag@@{#2}% - \else - \make@df@tag@@@{#2}% - \fi - \fi -} -% \end{macrocode} -% -% \begin{macrocode} -\let\restore@hfuzz\@empty -% \end{macrocode} -% -% \begin{macrocode} -\def\mathdisplay#1{% - \ifmmode \@badmath - \else - $$\def\@currenvir{#1}% -% \end{macrocode} -% Allow use of \cn{displaybreak}. -% \begin{macrocode} - \let\dspbrk@context\z@ -% \end{macrocode} -% Although in some cases simpler label handling would seem to be -% sufficient, always using \cs{label@in@display} makes it easier to -% support the \pkg{showkeys} package. -% \begin{macrocode} - \let\tag\tag@in@display \let\label\label@in@display \SK@equationtrue - \global\let\df@label\@empty \global\let\df@tag\@empty - \global\tag@false - \let\mathdisplay@push\mathdisplay@@push - \let\mathdisplay@pop\mathdisplay@@pop - \if@fleqn -% \end{macrocode} -% Turn off overfull box messages temporarily\mdash otherwise there -% would be unwanted extra ones emitted during our measuring -% operations. -% \begin{macrocode} - \edef\restore@hfuzz{\hfuzz\the\hfuzz\relax}% - \hfuzz\maxdimen -% \end{macrocode} -% Initially set the equation body in a box of displaywidth. Then if -% the box is not overfull, as we find by checking \cs{badness}, we -% have acquired useful information for the subsequent processing. -% \begin{macrocode} - \setbox\z@\hbox to\displaywidth\bgroup - \let\split@warning\relax \restore@hfuzz - \everymath\@emptytoks \m@th $\displaystyle - \fi - \fi -} -% \end{macrocode} -% -% Arg 1 is not currently used. I thought it might come in handy for -% error messages. -% \begin{macrocode} -\def\endmathdisplay#1{% - \ifmmode \else \@badmath \fi - \endmathdisplay@a - $$% -% \end{macrocode} -% I guess the following code means this structure is non-reentrant. -% But there is plenty of scope for tricky bugs here; suppressing them -% by brute force at least makes it possible to get things working -% correctly for normal use. [mjd,2000/01/06] -% \begin{macrocode} - \global\let\df@label\@empty \global\let\df@tag\@empty - \global\tag@false \global\let\alt@tag\@empty - \global\@eqnswfalse -} -% \end{macrocode} -% -% \begin{macrocode} -\def\endmathdisplay@a{% - \if@eqnsw \gdef\df@tag{\tagform@\theequation}\fi - \if@fleqn \@xp\endmathdisplay@fleqn - \else \ifx\df@tag\@empty \else \veqno \alt@tag \df@tag \fi - \ifx\df@label\@empty \else \@xp\ltx@label\@xp{\df@label}\fi - \fi - \ifnum\dspbrk@lvl>\m@ne - \postdisplaypenalty -\@getpen\dspbrk@lvl - \global\dspbrk@lvl\m@ne - \fi -} -% \end{macrocode} -% -% A boolean variable: Was that last box overfull or not? A value of 0 -% means yes, it was overfull. -% \begin{macrocode} -\let\too@wide\@ne -% \end{macrocode} -% -% Special handling is needed for flush-left equations. We need to -% measure the equation body (found in box 0 after we close it with -% the \cs{egroup}). Then after a fairly normal test to see if it fits -% within the available space, we need to consider overlapping into -% the displayindent area if displayindent is nonzero (as in an -% indented list). If there is an equation number we may have to shift -% it by hand to a separate line when there is not enough room; -% we can no longer take advantage of the automatic shifting provided -% by the \cn{leqno}, \cn{eqno} primitives. -% -% We initially add \cs{@mathmargin} glue at the end of box 0 to get -% an accurate overfull test. If \cs{@mathmargin} contains any shrink -% then we cannot reliably tell whether the box will be overfull or -% not simply by doing hand calculations from the actual width of the -% equation body. We have to actually set the box and find out what -% happens. -% -% On the other hand if we put the \cs{@mathmargin} glue at the -% beginning of the box it's awkward to remove it afterwards. So we -% first put it in at the end and later we will move it to the -% beginning as needed. -% -% \begin{macrocode} -\def\endmathdisplay@fleqn{% - $\hfil\hskip\@mathmargin\egroup -% \end{macrocode} -% We need to save the information about whether box 0 was overfull in -% a variable, otherwise it will disappear in the next setbox -% operation. And we couldn't set the equation number box earlier than -% now, because the body of the equation might have contained a -% \cs{tag} command (well, it could have been done, but this way -% we can reuse the tag-handling code from elsewhere). -% \begin{macrocode} - \ifnum\badness<\inf@bad \let\too@wide\@ne \else \let\too@wide\z@ \fi - \ifx\@empty\df@tag - \else - \setbox4\hbox{\df@tag - \ifx\df@label\@empty \else \@xp\ltx@label\@xp{\df@label}\fi - }% - \fi - \csname emdf@% - \ifx\df@tag\@empty U\else \iftagsleft@ L\else R\fi\fi - \endcsname -} -% \end{macrocode} -% -% For an unnumbered flush-left equation we hope first that the -% the contents fit within displaywidth. If not we need to fall back -% on a more complicated reboxing operation. -% \begin{macrocode} -\def\emdf@U{% - \restore@hfuzz - \ifodd\too@wide % not too wide: just need to swap the glue around - \hbox to\displaywidth{\hskip\@mathmargin\unhbox\z@\unskip}% - \else % M+B > displaywidth - \emdf@Ua - \fi -} -% \end{macrocode} -% -% Some notation: $M$ \cs{@mathmargin}, $B$ the width of the equation -% body, $I$ \cs{displayindent}, $D$ \cs{displaywidth}, $N$ the width -% of the equation number (aka the tag), $S$ \cs{mintagsep}, $C$ -% \cs{columnwidth}. If $M+B > \mbox{displaywidth}$, and if we assume -% $M$ contains shrink, then the only solution left is to encroach -% into the displayindent space. -% \begin{macrocode} -\def\emdf@Ua{% - \hbox to\columnwidth{% - \ifdim\displayindent>\z@ - \hskip\displayindent minus\displayindent - \fi - \hskip\@mathmargin \unhbox\z@ \unskip - }% - \displayindent\z@ \displaywidth\columnwidth -} -% \end{macrocode} -% -% Find out first if the tag fits in ideal position. If so we can just -% plunk down box 2. Otherwise we need to do something more complicated. -% \begin{macrocode} -\def\emdf@R{% - \setbox\tw@\hbox to\displaywidth{% - \hskip\@mathmargin \unhcopy\z@\unskip\hfil\hskip\mintagsep\copy4 - }% - \restore@hfuzz - \ifnum\badness<\inf@bad \box\tw@ \else \emdf@Ra \fi -} -% \end{macrocode} -% -% We shift the equation number to line 2 if it does not fit within -% \cs{displaywidth}. Note that we do not first attempt to let the -% equation body shift leftward into the \cs{displayindent} space. If -% that is desired it will have to be done by hand by adding negative -% space at the beginning of the equation body. I don't expect this to -% arise very often in practice since most of the time -% \cs{displayindent} is zero anyway. -% \begin{macrocode} -\def\emdf@Ra{% - \skip@\displayindent minus\displayindent - \displayindent\z@ \displaywidth\columnwidth - \spread@equation \everycr{}\tabskip\z@skip - \halign{\hbox to\displaywidth{##}\cr - \relax - \ifdim\skip@>\z@ \hskip\skip@ \fi - \hskip\@mathmargin\unhbox\z@\unskip\hfil\cr - \noalign{\raise@tag}% - \hfil\box4 \cr}% -} -% \end{macrocode} -% -% Find out first if the tag fits in ideal position. If so we can just -% plunk down box 2. Otherwise we need to do something more -% complicated. -% \begin{macrocode} -\def\emdf@L{% -% \end{macrocode} -% Calculate the difference between $M$ and $N+S$. If the latter is -% greater, we don't want to add any extra glue between the number and -% the equation body. Otherwise the amount that we want to add is -% \verb'x minus x' where $x=M-(N+S)$. I.e., the distribution of -% spaces across the line is $N,S,x minus x,B,hfil$. -% \begin{macrocode} - \@tempdima\@mathmargin - \advance\@tempdima-\wd4 \advance\@tempdima-\mintagsep - \skip@\@tempdima minus\@tempdima - \setbox\tw@\hbox to\displaywidth{% - \copy4\hskip\mintagsep - \ifdim\skip@>\z@ \hskip\skip@\fi - \unhcopy\z@\unskip - }% - \restore@hfuzz - \ifnum\badness<\inf@bad \box\tw@ \else \emdf@La \fi -} -% \end{macrocode} -% -% If the equation body and equation number will not fit on the same -% line, we put the number on line 1 and the body on line 2, with the -% body positioned as for an unnumbered equation. -% \begin{macrocode} -\def\emdf@La{% - \spread@equation \everycr{}\tabskip\z@skip - \halign{\hbox to\displaywidth{##}\cr - \box4 \hfil \cr - \noalign{\raise@tag}% - \hskip\@mathmargin\unhbox\z@\unskip\hfil\cr}% -} -% \end{macrocode} -% -% If someone has \verb'\[ \]' nested inside a minipage environment -% nested inside a numbered equation, the mathdisplay variables that -% are global will get out of whack unless we take extra care. So we -% make a stack and push all the variables before entering mathdisplay -% and pop them afterwards. But we can save a little work by not doing -% this at the top level, only at inner levels. -% \begin{macrocode} -\newtoks\mathdisplay@stack -\let\mathdisplay@push\@empty -\def\mathdisplay@@push{% - \begingroup - \toks@\@xp{\df@label}\@temptokena\@xp{\df@tag}% - \toks8\@xp{\alt@tag}% - \edef\@tempa{% - \global\if@eqnsw\@nx\@eqnswtrue\else\@nx\@eqnswfalse\fi - \global\iftag@\@nx\tag@false\else\@nx\tag@true\fi - \gdef\@nx\df@label{\the\toks@}\gdef\@nx\df@tag{\the\@temptokena}% - \gdef\@nx\alt@tag{\the\toks8}% - \global\mathdisplay@stack{\the\mathdisplay@stack}% - }% - \global\mathdisplay@stack\@xp{\@tempa} - \endgroup -} -% \end{macrocode} -% -% \begin{macrocode} -\let\mathdisplay@pop\@empty -\def\mathdisplay@@pop{\the\mathdisplay@stack} -% \end{macrocode} -% -% \begin{macrocode} -\renewenvironment{equation}{% - \incr@eqnum - \mathdisplay@push - \st@rredfalse \global\@eqnswtrue - \mathdisplay{equation}% -}{% - \endmathdisplay{equation}% - \mathdisplay@pop - \ignorespacesafterend -} -% \end{macrocode} -% -% \begin{macrocode} -\newenvironment{equation*}{% - \mathdisplay@push - \st@rredtrue \global\@eqnswfalse - \mathdisplay{equation*}% -}{% - \endmathdisplay{equation*}% - \mathdisplay@pop - \ignorespacesafterend -} -% \end{macrocode} -% -% Note: \latex/ defines the \env{displaymath} environment in -% terms of \cn{[} and \cn{]}. -% \begin{macrocode} -\DeclareRobustCommand{\[}{\begin{equation*}} -\DeclareRobustCommand{\]}{\end{equation*}} -% \end{macrocode} -% -% The usual \cs{endinput} to ensure that random garbage at the end of -% the file doesn't get copied by \fn{docstrip}. -% \begin{macrocode} -\endinput -% \end{macrocode} -% -% \section{Credits} -% -% Much of the code for the \pkg{amsmath} package had its orgin in -% \fn{amstex.tex}, written by Michael Spivak. The initial work of -% porting \fn{amstex.tex} to \fn{amstex.sty} was done in 1988--1989 -% by Frank Mittelbach and Rainer Sch\"opf. In 1994 David M. Jones -% added the support for the \opt{fleqn} option and did extensive -% improvements to the \env{align[at]} family of environments and to -% the equation number handling in general. Michael Downes at the AMS -% served as coordinator for the efforts of Mittelbach, Sch\"opf, and -% Jones, and has contributed various bug fixes and additional -% refinements over time. -% -% Versions 1.0 and 1.1 of the package carried the name \pkg{amstex} -% instead of \pkg{amsmath}, to indicate its origins; the name was -% changed in 1994 to make it user-oriented rather than -% history-oriented. -% -% \changes{v1.2b}{1995/02/15}{Added kern -alignsep@ to math@cr@@@align} -% \changes{v1.2b}{1995/02/15}{Modified one piece of measure@} -% \changes{v1.2b}{1995/02/15}{Cleaned out some obsolete commentary} -% \changes{v1.2b}{1995/02/15}{Changed kern tagshift@ to kern -tagshift@ -% in the reqno case of place@tag} -% -% \changes{v1.2c}{1996/11/01}{Changed `over etc from error to warning} -% -% \changes{v1.2d}{1997/03/20}{% -% Removed dependency on mixed-case fd file names} -% -% \CheckSum{6699} -% \Finale diff --git a/Master/texmf-dist/source/latex/amslatex/amsmidx.dtx b/Master/texmf-dist/source/latex/amslatex/amsmidx.dtx deleted file mode 100644 index 3692d6cc76c..00000000000 --- a/Master/texmf-dist/source/latex/amslatex/amsmidx.dtx +++ /dev/null @@ -1,241 +0,0 @@ -%%% ==================================================================== -%%% @LaTeX-file{ -%%% filename = "amsmidx.dtx", -%%% version = "2.01", -%%% date = "2004/08/03", -%%% time = "14:45:42 EDT", -%%% checksum = "63234 241 948 8307", -%%% author = "American Mathematical Society", -%%% copyright = "Copyright 1995, 2004 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, -%%% 201 Charles Street, -%%% Providence, RI 02904, -%%% USA", -%%% telephone = "401-455-4080 or (in the USA and Canada) -%%% 800-321-4AMS (321-4267)", -%%% FAX = "401-331-3842", -%%% email = "tech-support@ams.org (Internet)", -%%% codetable = "ISO/ASCII", -%%% keywords = "latex, amslatex, multiple indexes", -%%% supported = "yes", -%%% abstract = "This is part of the AMS-\LaTeX{} distribution. -%%% It contains code to support the creation and -%%% typesetting of multiple indexes with AMS-LaTeX{} -%%% document classes, superseding the single-index -%%% facilities built into those document classes. -%%% It also provides a facility to insert a paragraph -%%% of comments between the title and the index proper", -%%% docstring = "The checksum field above contains a CRC-16 -%%% checksum as the first value, followed by the -%%% equivalent of the standard UNIX wc (word -%%% count) utility output of lines, words, and -%%% characters. This is produced by Robert -%%% Solovay's checksum utility.", -%%% } -%%% ==================================================================== -% \iffalse -%<*driver> -\documentclass{amsdtx} -\begin{document} -\title{The \pkg{amsmidx} package} -\author{American Mathematical Society\\Barbara Beeton} -\date{Version \fileversion, \filedate} -\hDocInput{amsmidx.dtx} -\end{document} -%</driver> -% \fi -% -% \maketitle -% -% \MakeShortVerb\| -% -% \section{Introduction} -% -% This package provides the facility to produce multiple indexes -% with \amslatex/ document classes (particularly \fn{amsbook} and -% the AMS author packages for books), superseding the built-in -% index facility which can accommodate only one index. This may -% in the future be incorporated as an option into the \amslatex/ -% document classes. -% -% This package is based on \pkg{multind.sty} by F.W. Long. -% -% \StopEventually{} -% -% Standard file identification. -% \begin{macrocode} -\NeedsTeXFormat{LaTeX2e}[1995/06/01] -\ProvidesPackage{amsmidx}[2004/08/03 v2.01 multiple indexes for AMS classes] -% \end{macrocode} -% -% \section{User instructions} -% -% In the preamble, invoke \cn{makeindex} with a file name to provide -% as many indexes as desired: -%\begin{verbatim} -% \makeindex{filename-a} -% \makeindex{filename-b} -%\end{verbatim} -% This will initiate the creation of \fn{filename-a.idx} etc. -% -% In the body of the text, use the \cn{index} command with two -% arguments -%\begin{verbatim} -% \index{filename-a}{index term} -%\end{verbatim} -% as appropriate to populate the \fn{.idx} files. -% -% In the \cn{backmatter} segment of the driver file, insert the -% \cn{Printendex} command to print the indexes; the second argument -% gives the title to be printed at the top of the index: -%\begin{verbatim} -% \Printindex{filename-a}{First Index} -% \Printindex{filename-b}{Second Index} -%\end{verbatim} -% -% On the first pass, the \fn{.idx} files will be created. Process -% each \fn{.idx} file with \textit{MakeIndex} to generate an \fn{.ind} -% file, which will then be read in by \cn{Printindex}. Whenever any -% page references change, be sure to run \textit{MakeIndex} again, -% and process the entire job with \latex/ once more to get the correct -% page references in the indexes. -% -% To include a paragraph of comments below the index title, insert -% the text as an \cn{indexcomment} before the relevant \cn{Printindex}: -%\begin{verbatim} -% \indexcomment{Text of comments} -% \Printindex{...}{...} -%\end{verbatim} -% The \cn{indexcomment} text will be cleared after use. -% -% -% \section{Implementation} -% -% \begin{macro}{makeindex} -% Redefine \cn{makeindex} to create a new \fn{.idx} file with the -% name provided by argument |#1|. -% \begin{macrocode} -\renewcommand{\makeindex}[1]{% - \begingroup - \makeatletter - \if@filesw \expandafter\newwrite\csname #1@idxfile\endcsname - \expandafter\immediate\openout \csname #1@idxfile\endcsname #1.idx\relax - \typeout{Writing index file #1.idx }\fi - \endgroup} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{index} -% Redefine \cn{index} to specify into which file/index the term is -% to be placed. Argument |#1| identifies the file, |#2| provides -% the text of the term to be indexed. -% \begin{macrocode} -\renewcommand{\index}[1]{% - \@bsphack - \begingroup - \def\protect##1{\string##1\space}\@sanitize\@wrindex{#1}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{@wrindex} -% \cs{@wrindex} checks to make sure that the requested file is available, -% and writes an entry into the file or emits an error message. -% \begin{macrocode} -\renewcommand{\@wrindex}[2]{% - \let\thepage\relax - \xdef\@gtempa{% - \@ifundefined{#1@idxfile}{% - \PackageError{\@packagename}{% - The requested file, #1@idxfile.idx, does not exist;\MessageBreak - index term #2 will not be be written out.% - }% - }{% - \expandafter\write\csname #1@idxfile\endcsname - {\string\indexentry{#2}{\thepage}}% - }% - }% - \endgroup\@gtempa - \if@nobreak \ifvmode\nobreak\fi\fi - \@esphack - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{printindex} -% \begin{macro}{Printindex} -% Redefine \cs{printindex} to specify the file to be included; provide -% an alternate command \cs{Printindex} that specifies both the file and -% the index title to be printed. Argument |#1| identifies the file, -% |#2| provides the title. Also modify some formatting commands to -% improve the appearance of index entries, especially long ones in -% the presence of three index levels. -% \begin{macrocode} -\renewcommand{\printindex}[1]{\@input{#1.ind}} -\newcommand{\Printindex}[2]{% - \begingroup - \cleardoublepage - \def\indexname{#2}% - \raggedright - \hyphenpenalty=10000 - \renewcommand{\seename}{see~also} - \renewcommand{\subitem}{\par\hangindent 3em\hspace*{1em}} - \@input{#1.ind}% - \endgroup - } -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{indexcomment} -% \begin{macro}{indexchap} -% Format comments in a block somewhat narrower than the full page -% width, and redefine \cn{indexchap} to insert the block below the -% title, before starting the two-column index. Clear out -% \cs{indexcomment} after use. -% \begin{macrocode} -\newdimen\@indexcommentwidth -\@indexcommentwidth=\textwidth -\ifdim\@indexcommentwidth > 26pc - \advance\@indexcommentwidth-6pc -\else - \advance\@indexcommentwidth-4pc -\fi -\newcommand{\indexcomment}[1]{% - \def\theindexcomment{% - \vskip\baselineskip - \parbox[t]{\@indexcommentwidth}{\normalsize\mdseries#1}% - }% - } -\let\theindexcomment\@empty -\renewcommand{\indexchap}[1]{% - \global\topskip 7.5pc\relax - \twocolumn[\fontsize{\@xivpt}{18}% - \vskip\topskip\vskip-\baselineskip\hbox{}% adjust top space - \bfseries\centering #1\par - \ifx\theindexcomment\@empty - \else \theindexcomment - \global\let\theindexcomment\@empty - \fi - ]% - \global\topskip 34\p@ -} -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% The usual \cs{endinput} to ensure that random garbage at the end of -% the file doesn't get copied by \fn{docstrip}. -% \begin{macrocode} -\endinput -% \end{macrocode} -% -% \CheckSum{131} -% \Finale diff --git a/Master/texmf-dist/source/latex/amslatex/amsopn.dtx b/Master/texmf-dist/source/latex/amslatex/amsopn.dtx deleted file mode 100644 index fd60965d788..00000000000 --- a/Master/texmf-dist/source/latex/amslatex/amsopn.dtx +++ /dev/null @@ -1,254 +0,0 @@ -%%% ==================================================================== -%%% @LaTeX-file{ -%%% filename = "amsopn.dtx", -%%% version = "2.01", -%%% date = "1999/12/14", -%%% time = "17:30:59 EST", -%%% checksum = "46904 254 1037 9431", -%%% author = "American Mathematical Society", -%%% copyright = "Copyright 1995, 1999 American Mathematical Society, -%%% all rights reserved. Copying of this file is -%%% authorized only if either: -%%% (1) you make absolutely no changes to your copy, -%%% including name; OR -%%% (2) if you do make changes, you first rename it -%%% to some other name.", -%%% address = "American Mathematical Society, -%%% Technical Support, -%%% Electronic Products and Services, -%%% P. O. Box 6248, -%%% Providence, RI 02940, -%%% USA", -%%% telephone = "401-455-4080 or (in the USA and Canada) -%%% 800-321-4AMS (321-4267)", -%%% FAX = "401-331-3842", -%%% email = "tech-support@ams.org (Internet)", -%%% codetable = "ISO/ASCII", -%%% keywords = "operator name, amsopn, DeclareMathOperator", -%%% supported = "yes", -%%% abstract = "This is a \LaTeX{} package that provides a -%%% DeclareMathOperator command for defining named -%%% operators like sin and lim.", -%%% docstring = "The checksum field above contains a CRC-16 checksum -%%% as the first value, followed by the equivalent of -%%% the standard UNIX wc (word count) utility output of -%%% lines, words, and characters. This is produced by -%%% Robert Solovay's checksum utility.", -%%% } -%%% ==================================================================== -% -%\iffalse -%<*driver> -\documentclass{amsdtx} -\begin{document} -\title{The \pkg{amsopn} package} -\author{Michael Downes} -\date{Version \fileversion, \filedate} -\hDocInput{amsopn.dtx} -\end{document} -%</driver> -%\fi -% -% \maketitle -% -% \MakeShortVerb\| -% -% \section{Introduction} -% -% The \pkg{amsopn} package provides a command -% \cn{DeclareMathOperator} for defining new `math operator names' -% similar to the standard function names \cn{sin}, \cn{lim}, -% \cn{max}, etc. -% -% \StopEventually{} -% -% Standard file identification. -% \begin{macrocode} -\NeedsTeXFormat{LaTeX2e}% LaTeX 2.09 can't be used (nor non-LaTeX) -[1994/12/01]% LaTeX date must December 1994 or later -\ProvidesPackage{amsopn}[1999/12/14 v2.01 operator names] -% \end{macrocode} -% -% What \cs{nolimits@} does is keep a \cn{limits} typed by the user -% from having any effect. This is used for operatornames whose -% standard usage is never to have limits. -% \begin{macrocode} -\def\nolimits@{\@ifnextchar\limits{\nolimits\@gobble}{\nolimits}} -% \end{macrocode} -% -% In operator names, it is sometimes desired to have text-mode -% punctuation characters such as |*-/:'|. -% Because the body of an -% operator name is set in math mode, these few punctuation -% characters will not come out right (wrong symbol/and or wrong -% spacing). The purpose of \cs{newmcodes@} is to make them act like -% their normal text versions. -% -% Where practical, we use decimal numbers to cut down main mem -% usage (\qc{\"} not needed). -% \begin{macrocode} -\begingroup \catcode`\"=12 -\gdef\newmcodes@{\mathcode`\'39\mathcode`\*42\mathcode`\."613A% -% \end{macrocode} -% Define \cs{std@minus} for \cs{relbar} use; otherwise there are -% problems with arrows constructed with relbar. -% \begin{macrocode} - \ifnum\mathcode`\-=45 \else - \mathchardef\std@minus\mathcode`\-\relax - \fi - \mathcode`\-45\mathcode`\/47\mathcode`\:"603A\relax} -\endgroup -% \end{macrocode} -% -% The command \cs{operatorname} prints its argument as a `math -% operator' like \cs{sin} or \cs{det}, with proper font and spacing. -% \begin{macrocode} -\DeclareRobustCommand{\operatorname}{% - \@ifstar{\qopname\newmcodes@ m}% - {\qopname\newmcodes@ o}}% -% \end{macrocode} -% In the interior of the \cs{mathop} we need a null object (we choose -% a zero kern for minimum waste of main mem) in order to guard -% against the case where \arg{3} is a single letter; \tex/ will seize -% it and center it on the math axis if there is nothing else inside -% the \cs{mathop} atom. -% \begin{macrocode} -\DeclareRobustCommand{\qopname}[3]{% - \mathop{#1\kern\z@\operator@font#3}% - \csname n#2limits@\endcsname} -% \end{macrocode} -% -% \begin{macro}{\DeclareMathOperator} -% The command \cn{DeclareMathOperator} defines the first argument to -% be an operator name whose text is the second argument. The star -% form means that the operator name should take limits (like \cn{max} -% or \cn{lim}). -% \begin{macrocode} -\newcommand{\DeclareMathOperator}{% - \@ifstar{\@declmathop m}{\@declmathop o}} -% \end{macrocode} -% \end{macro} -% -% In the basic set of operator names (below) we did not use -% \cn{DeclareRobustCommand} because of the hash table cost. But we -% use it here to minimize the chances of trouble, since we are -% producing a user-defined command. -% \begin{macrocode} -\long\def\@declmathop#1#2#3{% - \@ifdefinable{#2}{% - \DeclareRobustCommand{#2}{\qopname\newmcodes@#1{#3}}}} -% -\@onlypreamble\DeclareMathOperator -\@onlypreamble\@declmathop -% \end{macrocode} -% -% \begin{macrocode} -\def\arccos{\qopname\relax o{arccos}} -\def\arcsin{\qopname\relax o{arcsin}} -\def\arctan{\qopname\relax o{arctan}} -\def\arg{\qopname\relax o{arg}} -\def\cos{\qopname\relax o{cos}} -\def\cosh{\qopname\relax o{cosh}} -\def\cot{\qopname\relax o{cot}} -\def\coth{\qopname\relax o{coth}} -\def\csc{\qopname\relax o{csc}} -\def\deg{\qopname\relax o{deg}} -\def\det{\qopname\relax m{det}} -\def\dim{\qopname\relax o{dim}} -\def\exp{\qopname\relax o{exp}} -\def\gcd{\qopname\relax m{gcd}} -\def\hom{\qopname\relax o{hom}} -\def\inf{\qopname\relax m{inf}} -\def\injlim{\qopname\relax m{inj\,lim}} -\def\ker{\qopname\relax o{ker}} -\def\lg{\qopname\relax o{lg}} -\def\lim{\qopname\relax m{lim}} -\def\liminf{\qopname\relax m{lim\,inf}} -\def\limsup{\qopname\relax m{lim\,sup}} -\def\ln{\qopname\relax o{ln}} -\def\log{\qopname\relax o{log}} -\def\max{\qopname\relax m{max}} -\def\min{\qopname\relax m{min}} -\def\Pr{\qopname\relax m{Pr}} -\def\projlim{\qopname\relax m{proj\,lim}} -\def\sec{\qopname\relax o{sec}} -\def\sin{\qopname\relax o{sin}} -\def\sinh{\qopname\relax o{sinh}} -\def\sup{\qopname\relax m{sup}} -\def\tan{\qopname\relax o{tan}} -\def\tanh{\qopname\relax o{tanh}} -% \end{macrocode} -% -% \begin{macro}{\operator@font} -% \begin{macro}{\operatorfont} -% This command is provided to allow the document styles to decide in -% which way math operators like `max' or `log' are typeset. The -% default is to set them in \meta{math group} zero of the current -% math version. The original name was \cs{operator@font}, retained -% for compatibility; the second name was added to make it -% more accessible so that users can call this font for use in special -% constructs that are not ordinary operator names but conceptually -% related. -% \begin{macrocode} -\def\operator@font{\mathgroup\symoperators} -\def\operatorfont{\operator@font} -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% For backwards compatibility we keep this old command name for the -% time being: -% \begin{macrocode} -\def\operatornamewithlimits{\operatorname*} -% \end{macrocode} -% -% These macros use \cs{mathpalette}s so that they will change size -% in script and scriptscript styles, though it's hard to imagine they -% will ever be used there (the arrows, particularly, look bad in -% subscript sizes). Notice that the use of \cs{ex@} means that the -% vertical spacing may not be optimal in script and scriptscript -% sizes. Unfortunately \tex/ provides no easy way to do math mode -% vertical spacing that varies with current math style like mu units. -% \begin{macrocode} -\def\varlim@#1#2{% - \vtop{\m@th\ialign{##\cr - \hfil$#1\operator@font lim$\hfil\cr - \noalign{\nointerlineskip\kern1.5\ex@}#2\cr - \noalign{\nointerlineskip\kern-\ex@}\cr}}% -} -\def\varinjlim{% - \mathop{\mathpalette\varlim@{\rightarrowfill@\textstyle}}\nmlimits@ -} -\def\varprojlim{% - \mathop{\mathpalette\varlim@{\leftarrowfill@\textstyle}}\nmlimits@ -} -\def\varliminf{\mathop{\mathpalette\varliminf@{}}\nmlimits@} -\def\varliminf@#1{\@@underline{\vrule\@depth.2\ex@\@width\z@ - \hbox{$#1\m@th\operator@font lim$}}} -\def\varlimsup{\mathop{\mathpalette\varlimsup@{}}\nmlimits@} -\def\varlimsup@#1{\@@overline{\hbox{$#1\m@th\operator@font lim$}}} -% \end{macrocode} -% -% \begin{macrocode} -\let\nmlimits@\displaylimits -\DeclareOption{namelimits}{\let\nmlimits@\displaylimits} -\DeclareOption{nonamelimits}{\let\nmlimits@\nolimits} -\ProcessOptions\relax -% \end{macrocode} -% -% If we don't load the \pkg{amsgen} package then the use of \cs{ex@} -% in \cs{varlim@} will lead to trouble. -% \begin{macrocode} -\RequirePackage{amsgen}\relax -% \end{macrocode} -% -% The usual \cs{endinput} to ensure that random garbage at the end of -% the file doesn't get copied by \fn{docstrip}. -% \begin{macrocode} -\endinput -% \end{macrocode} -% -% \changes{v1.2a}{1995/02/20}{Fixed operatorname -% (shouldn't have same limits behavior as operatorname*)} -% \CheckSum{300} -% \Finale diff --git a/Master/texmf-dist/source/latex/amslatex/amsrefs.dtx b/Master/texmf-dist/source/latex/amslatex/amsrefs.dtx deleted file mode 100644 index e8d81ed6336..00000000000 --- a/Master/texmf-dist/source/latex/amslatex/amsrefs.dtx +++ /dev/null @@ -1,8030 +0,0 @@ -%%% ==================================================================== -%%% @LaTeX-doc-source-file{ -%%% filename = "amsrefs.dtx", -%%% version = "2.0", -%%% date = "2004/06/30", -%%% time = "11:24:39 EDT", -%%% author = "Michael J Downes and David M. Jones", -%%% address = "American Mathematical Society, -%%% Publications Technical Group, -%%% PO Box 6248, -%%% Providence, RI 02940, -%%% USA", -%%% email = "tech-support@ams.org", -%%% URL = "http://www.ams.org/", -%%% abstract = "A LaTeX package that permits bibliography style -%%% to be controlled completely from the LaTeX side -%%% instead of being determined chiefly by the BibTeX -%%% style file.", -%%% checksum = "09127 8030 25325 242081", -%%% docstring = "The checksum field, produced by Robert Solovay's -%%% checksum utility, gives CRC-16 checksum, lines, -%%% words, and characters.", -%%% } -%%% ==================================================================== -%%% -% \iffalse -%<*driver> -\NeedsTeXFormat{LaTeX2e} -\documentclass[draft,oneside]{amsdtx} - -\setcounter{secnumdepth}{3} -\setcounter{tocdepth}{3} - -\DoNotIndex{\bib,\BibSpec,\@apply,\citesel,\cite@cj,\cite} -\DoNotIndex{\IfOption,\add@toks@,\@emptytoks,\@temptokenb} - -\makeatletter -\DeclareRobustCommand{\fld}{\category@index{field}} -\DeclareRobustCommand{\btype}{\category@index{entry type}} -\DeclareRobustCommand{\attr}{\category@index{attribute}} -\makeatother - -%\OnlyDescription - -\usepackage{amsrefs} -\usepackage{multicol} - -\providecommand{\lat}[1]{\protect\LaTeX{}} - -\DeclareTextSymbol{\lbracechar}{OT1}{123} -\DeclareTextSymbolDefault{\lbracechar}{OT1} -\DeclareTextSymbol{\rbracechar}{OT1}{125} -\DeclareTextSymbolDefault{\rbracechar}{OT1} - -\newcommand{\rdag}{{\normalfont\dag}} - -\providecommand{\embrace}[1]{% - \begingroup \ntt\lbracechar#1\rbracechar\endgroup} - -% One mandatory argument: cnm; two: cnmm; one optional and one -% mandatory: cnom; throwing in a star: cnsom; and so on. -\providecommand{\cnbreak}{\penalty999\hskip0pt\relax} -\providecommand{\cnm}[2]{\cn{#1}\cnbreak\embrace{#2}} -\providecommand{\cnmm}[3]{\cn{#1}\cnbreak\embrace{#2}\cnbreak\embrace{#3}} -\providecommand{\cnom}[1]{\cn{#1}\cnbreak\ommitude} -\providecommand{\ommitude}[2][]{{\ntt[#1]}\cnbreak\embrace{#2}} -\providecommand{\cnmsm}[4]{% - \cn{#1}\cnbreak\embrace{#2}\cnbreak *\embrace{#4}} - -\newcommand{\rpack}[1]{\pkg{amsrefs} package} - -\newcommand{\MacroArgs}{% - \par - \medskip \noindent\emph{Arguments}: \par} - -\newcommand{\macroarg}[2]{ - \texttt{\arg{#1} <- }\emph{#2}\unkern\texttt{.}\par} - -\newenvironment{bug}{% - \quote - \emph{Known bug:}} - {\endquote} - -% non-stupid hline: support for adding some space below -\newcommand{\nshline}{\hline\omit\\} - -\newcommand{\SeveralOptions}[1]{% - \vbox{\def\\{\unskip,\egroup\hbox\bgroup\ignorespaces}% - \hbox{\strut#1}}} - -% Make this a self-contained document without separate .bbl file. -\newcommand{\PrintBibliography}{% - \begin{bibsection}\begin{biblist}\raggedright - \bib{Jones2004}{article}{ - author={Jones, David M.}, - title={User's Guide to the \pkg{amsrefs} Package}, - note={distributed with the \pkg{amsrefs} code} - } - \bib{SOS99}{book}{ - author={Swanson, Ellen}, - author={O'Sean, Arlene}, - author={Schleyer, Antoinette}, - title={Mathematics into Type}, - edition={updated}, - year={1999}, - publisher={American Mathematical Society}, - } - \end{biblist}\end{bibsection} -} - -\makeatletter - -\def\nametest#1{% - \par - \begingroup - \let\EmptyNameWarning\relax - \vdef\@tempa{#1}% - {\tt author=\embrace\@tempa}: - \name@split#1,,,\@nil - G=\@showname{given} - S=\@showname{surname} - J=\@showname{jr}% - \endgroup -} - -\def\@showname#1{% - {\ntt\lbracechar}% - {\tt\@xp\macrotext\csname bib'#1\endcsname}% - {\ntt\rbracechar} -} - -\def\initialtest#1{% - \par - \begingroup - \vdef\@tempa{#1}% - {\tt author=\embrace\@tempa}: - \name@split#1,,,\@nil - I={\ntt\lbracechar}\csname bib'initials\endcsname{\ntt\rbracechar}% - \endgroup -} - -\makeatother - -\CodelineIndex - -\begin{document} -\title{The \pkg{amsrefs} package} -\author{Michael Downes and David M. Jones\\American Mathematical Society} -\date{Version \fileversion, \filedate} -\hDocInput{amsrefs.dtx} -\PrintIndex -\end{document} -%</driver> -% \fi -% -% \MakeShortVerb{\|} -% -% \maketitle -% -% \tableofcontents -% -% \section{Introduction} -% -% The \rpack/ is a \lat/ package for bibliographies that provides an -% archival data format similar to the format of \bibtex/ database -% files, but adapted to make direct processing by \lat/ easier. The -% package can be used either in conjunction with \bibtex/ or as a -% replacement for \bibtex/. -% -% This document is written for anyone who wants to implement a new -% bibliography style for \pkg{amsrefs} or who is just curious about -% how the package is implemented. -% The reader should be familiar with the contents of the ``User's -% Guide to the \pkg{amsrefs} Package''~\cite{Jones2004} -% (\fn{amsrdoc.tex}). -% -% For the publisher or implementor, the chief advantages of the -% \rpack/ are as follows: -% \begin{description} -% -% \item[Preservation of structure] -% -% The internal structural information of the bibliography entries is not -% lost when they are imported from the database file into the \lat/ -% document. This takes on its greatest significance when archiving -% documents in \lat/ form or transmitting them to another user (such as a -% publisher). -% -% \item[Deferred formatting] -% -% This means that the style of the bibliography can be readily changed -% without reimporting everything from the original database(s). -% -% \item[Setup requires only \lat/ knowledge] -% -% All bibliography setup can be done in \lat/; learning another -% programming language (such as the one used in \bibtex/ \fn{bst} -% files) is unnecessary. -% -% \end{description} -% -% \section{Package options} -% -% In addition to the options documented in the user's guide, there -% are a few additional options that were omitted either because -% they are obsolete or deprecated options included only for -% backwards compatability or because they are still considered -% experimental and not yet ready for widespread use. -% -% \begin{description} -% -% \item[?] -% -% Informational option. This causes \pkg{amsrefs} to -% display a pointer to the User's Guide on the terminal an in the -% log file. (In previous versions, it displayed much more -% material, including a summary of package options.) -% -% \item[traditional-quotes, logical-quotes] -% -% With the \textit{traditional quotes} option -% (default), quotation marks produced by \cn{bibquotes} -% (\secref{misc-cmds}) fall outside of other punctuation, ``like -% this,'' whereas with the \textit{logical quotes} option the order -% is reversed, ``like this''. -% -% \item[beta, jpa] -% -% Obsolete; these applied only to the beta version of the -% \pkg{amsrefs} package. -% -% \end{description} -% -% \section{More about the \cn{bib} command}\label{bib-command} -% -% \subsection{Field names for the \cn{bib} command} -% -% In addition to the fields discussed in the user's guide, the -% following fields are used internally: -% \begin{description} -% -% \item[fulljournal] -% -% Used internally by \cn{DefineJournal}. -% -% \item[name] -% -% Used internally by the \btype{name} bibliography type and -% \cn{DefineName}. -% -% \item[transition] -% -% A dummy field used inside \cs{BibSpec}s when we want to force an -% action unconditionally. -% -% \end{description} -% -% The following fields are included for backwards compatibility: -% \begin{description} -% -% \item[institution, school] -% -% These are provided as aliases for \fld{organization} for -% compatibility with \BibTeX. -% -% \item[place] -% -% A synonym for \fld{address}. In earlier versions of -% \pkg{amsrefs}, \fld{place} was preferred and \fld{address} was -% considered as an alias for \fld{place}. However, this seemed -% like a gratuitous incompatibility with \BibTeX\ to me, so I have -% reinstated \fld{address} as the primary field and \fld{place} is -% now an undocumented alias. -% -% \end{description} -% -% The following fields are reserved for future use: -% \begin{description} -% -% \item[doi] Digital Object Identifier -% -% \item[setup] -% -% This is a special field that can be used to give arbitrary -% commands to be executed at the beginning of the current \cn{bib} -% entry, after all the fields have been read. The idea is that one -% can alter the formatting of an individual entry through this -% field, to handle special cases. -% -% This is fully implemented, but I've been unable to think of any -% good examples of its use; so, I've decided to suppress it until -% such an example comes to light. -% -% \item[url] Universal Resource Locator. -% -% \end{description} -% -% \subsection{Bibliography entry types} -% -% The following additional entry types (or, really, pseudo-entry -% types) are used internally by \pkg{amsrefs}: -% \begin{description} -% -% \item[collection.article] -% -% \item[proceedings.article] -% -% \item[partial] -% -% \item[conference] -% -% \item[innerbook] -% -% \item[name] -% -% \item[nameLE] -% -% \item[nameBE] -% -% \item[nameinverted] -% -% \item[publisher] -% -% \end{description} -% -% The following are currently undocumented aliases for various of -% the standard types: -% \begin{description} -% -% \item[miscellaneous] -% -% \item[periodical] -% -% \end{description} -% -% \section{Customizing the bibliography style}\label{other-styles} -% -% If you use the \rpack/ as is, the bibliography style you get is the -% kind of style customarily seen in AMS publications. The recommended -% way to get a different bibliography style is to write a \lat/ -% package which loads the \rpack/ with \cn{RequirePackage} and -% then makes the desired changes by using suitable \cn{BibSpec} -% commands as explained below. Thus, the general form of the custom -% package will be -% \begin{verbatim} -% \ProvidesPackage{xyzbib}[2002/11/06 v1.28] -% -% \RequirePackage{amsrefs}\relax -% -% \BibSpec{article}{ -% ... -% } -% -% \BibSpec{book}{ -% ... -% } -%\end{verbatim} -% -% The interior formatting within entries is specified by \cn{BibSpec} -% commands, one for each entry type. To illustrate, let's look at an -% example style specification for entries of type \btype{article}: -% \begin{verbatim} -% \BibSpec{article}{% -% +{}{\PrintAuthors} {author} -% +{,}{ \textit} {title} -% +{,}{ } {journal} -% +{}{ \textbf} {volume} -% +{}{ \parenthesize} {date} -% +{,}{ } {pages} -% +{,}{ } {note} -% +{.}{} {transition} -% +{}{ } {review} -% } -%\end{verbatim} -% -% It should be pretty obvious that each line specifies the formatting -% for a particular field. After reading the data for a particular -% \cn{bib} command, \lat/ steps through the style specification and -% for each -% field listed, prints the field with the given formatting \emph{if -% and only if the field has a nonempty value}. The \verb'+' character -% at the beginning of each field specification must be followed by three -% arguments: the punctuation to be added if the field is nonempty; -% space and/or other material to be added after the punctuation; and -% the field name. It is permissible for the second part to end with a -% command that takes an argument, such as \cn{textbf}, in which case -% it will receive the field's value as its argument. By defining a -% suitable command and using it here you can place material after the -% field contents as well as before; \cn{parenthesize} is an example -% of this. -% -% The reason that the punctuation and the following space are specified -% separately is that between them there is a crucial boundary for line -% breaks. If you put a \cn{linebreak} command at the end of a field value, -% the break point will actually be carried onward to a suitable point after -% the next bit of punctuation (whose actual value may vary depending on -% which of the following fields is the first to turn up with a nonempty -% value). -% -% The meaning of the \cn{parenthesize} command, supplied by -% \pkg{amsrefs}, should be obvious. The meaning of the \cn{PrintAuthors} -% command is a different story. But I don't think it is all that hard to -% understand. If we have two or more author names which were given -% separately, -% and we need to combine them into a conventional name list using commas -% and the word \qq{and}, then it would be nice if we had a command which -% could take a list of names and Do The Right Thing. And that is just -% what \cn{PrintAuthors} is. -% -% The \pkg{rkeyval} package allows keys to be defined as additive: if the -% key occurs more than once, each successive value will be concatenated to -% the previous value, along with a prefix. The setup done by -% \pkg{amsrefs} for the \fld{author} field is -% \begin{verbatim} -% \DefineAdditiveKey{bib}{author}{\name} -%\end{verbatim} -% This means that if two names are given, as in -% \begin{verbatim} -% author={Bertram, A.}, -% author={Wentworth, R.}, -%\end{verbatim} -% then the final value of the \fld{author} field seen when \lat/ -% processes the style specification will be -% \begin{verbatim} -% \name{Bertram, A.}\name{Wentworth, R.} -%\end{verbatim} -% -% The \fld{transition} field in our \cn{BibSpec} example is a dummy -% field to be -% used when punctuation or other material must be added at a certain point -% in the bibliography without regard to the emptiness or non-emptiness of -% the fields after it. The \fld{transition} field always tests as non-empty -% but has no printed content. So when you use it you always get the -% indicated punctuation and space at the indicated point in the list of -% fields. If it were the last thing in this \cn{BibSpec} example, it could -% serve just to put in the final period that is always wanted. But in AMS -% bibliographies, if a \emph{Mathematical Reviews} reference is given, it is -% conventionally printed \emph{after} the final period. Using the -% \fld{transition} field as shown here ensures that the final period will -% be always printed, even when the \fld{review} field is empty. -% -% \section{Miscellaneous commands provided by the \pkg{amsrefs} -% package}\label{misc-cmds} -% -% Most of the following commands are helper commands for use in -% \cn{BibSpec} statements. The others are intended for use in bibliography -% data. -% \begin{description} -% -% \item[\cn{parenthesize}]\SpecialUsageIndex{\parenthesize} -% This command adds parentheses around its -% argument. It is useful in \cn{BibSpec} statements because there is no -% special provision for adding material after the field value. -% -% \item[\cn{bibquotes}]\SpecialUsageIndex{\bibquotes} -% This command is much like \cn{parenthesize} but -% it adds quotes around its argument and it has one other important -% difference: there are special arrangements to print the closing quote -% \emph{after} a following comma or similar punctuation (unless the -% \pkg{amsrefs} package is invoked with the \opt{logical-quotes} option, -% in which case \cn{bibquotes} puts the closing quote immediately after -% the quoted material). -% -% \item[\cn{voltext}]\SpecialUsageIndex{\voltext} -% This is used to format volume numbers. By default, it precedes -% the volume number by ``vol.'' -% -% \item[\cn{issuetext}]\SpecialUsageIndex{\issuetext} -% This is used to format issue numbers. By default, it precedes -% the volume number by ``no.'' -% -% \item[\cn{editiontext}]\SpecialUsageIndex{\editiontext} -% This command produces ``ed.''\ following an -% edition number. See \cn{PrintEdition} for more information. -% -% \item[\cn{DashPages}]\SpecialUsageIndex{\DashPages} -% This command is similar in spirit to -% \cn{voltext} but more complicated in its implementation. It takes -% one argument which is expected to contain one or more page numbers -% or a range of page numbers. The argument is printed with a prefix -% of \qq{p.} if it seems to be a single page number, otherwise with a -% prefix of \qq{pp.}. -% -% \item[\cn{tsup}, \cn{tsub}, \cn{tprime}]\SpecialUsageIndex{\tsup} -% \SpecialUsageIndex{\tsub}\SpecialUsageIndex{\prime} -% These are for text subscripts -% and superscripts, with \cn{tprime} producing a superscript prime -% symbol. Unlike the standard \cn{textsuperscript} and -% \cn{textsubscript} functions provided by \lat/, these do not use -% math mode at all.\footnote{There is one drawback: If you don't -% want to get the prime symbol for \cn{tprime} from the \fnt{cmsy} -% font, you will need to redefine \cn{tprime} in some suitable -% way.} -% -% \item[\cn{nopunct}]\SpecialUsageIndex{\nopunct} -% This command causes following punctuation to be omitted if it is -% added with the internal function \cs{@addpunct}. -% -% \item[\cn{PrintPrimary}]\SpecialUsageIndex{\PrintPrimary} -% This is a relatively complicated function that determines the -% ``primary'' contributors for an entry and formats them, or -% replaces them by \cn{sameauthors} if appropriate. It should be -% used when an entry type might have editors or translators instead -% of authors. It prefers authors over editors and editors over -% translators and generates a warning if there are no primary -% contributors. -% -% \item[\cn{PrintAuthors}]\SpecialUsageIndex{\PrintAuthors} -% This is used to format the list of authors as the primary -% contributors for an entry type. -% -% \item[\cn{PrintEditorsA}]\SpecialUsageIndex{\PrintEditorsA} -% This is similar to \cn{PrintAuthors} but adds |(ed.)| or |(eds.)| -% following the editors. -% -% \item[\cn{PrintEditorsB}]\SpecialUsageIndex{\PrintEditorsB} -% This is similar to \cn{PrintEditorsA} but puts parentheses around -% the entire list of editors. It's used by, for example, the -% \btype{article} type to print the editors of a -% \btype{proceedings} or \btype{collection}. -% -% \item[\cn{PrintEditorsC}]\SpecialUsageIndex{\PrintEditorsC} -% Similar to \cn{PrintEditorsA} but precedes the editors by -% |Edited by|. It's used when the editors should be treated as -% subsidiary contributors, rather than the primary contributor. -% -% \item[\cn{PrintTranslatorsA}]\SpecialUsageIndex{\PrintTranslatorsA} -% This is similar to \cn{PrintEditorsA} but adds |(trans.)| -% following the translators. -% -% \item[\cn{PrintTranslatorsB}]\SpecialUsageIndex{\PrintTranslatorsB} -% This is similar to \cn{PrintEditorsB}. It's not currently used, -% but is provided for symmetry. -% -% \item[\cn{PrintTranslatorsC}]\SpecialUsageIndex{\PrintTranslatorsC} -% Similar to \cn{PrintEditorsC} but precedes the translators by -% |Translated by|. -% -% \item[\cn{sameauthors}]\SpecialUsageIndex{\sameauthors} -% This is a function of one argument. If you use -% the default set of \cn{BibSpec}s from the \pkg{amsrefs}, -% \cn{sameauthors} is applied to the author name for a given \cn{bib} -% command if it matches exactly the author name of the preceding -% \cn{bib} command. Change the definition of \cn{sameauthors} if you -% don't want to get a bysame dash. -% -% \item[\cn{bysame}]\SpecialUsageIndex{\bysame} -% This is a horizontal rule of length 3~em. The default -% definition of \cn{sameauthors} prints \cn{bysame} instead of the -% author names. -% -% \item[\cn{Plural}, \cn{SingularPlural}]\SpecialUsageIndex{\Plural} -% \SpecialUsageIndex{\SingularPlural} -% These are helper functions -% that allow you to conditionally -% print singular or plural forms such as \verb'(ed.)' or \verb'(eds.)' -% depending on the number of names in the current name list. -% The definition of \cn{PrintEditorsA} reads, in part, -% \begin{verbatim} -% ... (ed\Plural{s}.) ... -%\end{verbatim} -% -% \item[\cn{PrintReviews}]\SpecialUsageIndex{\PrintReviews} -% This is similar to \cn{AuthorList} but is used for -% printing (possibly multiple) MR numbers given in the \fld{review} -% field. -% -% \item[\cn{BibField}]\SpecialUsageIndex{\BibField} -% This is for more complicated programming tasks such -% as may be necessary for some \cn{BibSpec}s. It takes one -% argument, a field name, and yields the contents of that field for -% the current \cn{bib} entry. -% -% \item[\cn{IfEmptyBibField}]\SpecialUsageIndex{\IfEmptyBibField} -% If one writes -% \begin{verbatim} -% \IfEmptyBibField{isbn}{A}{B} -%\end{verbatim} -% then the commands in A will be executed if the \fld{isbn} field is empty, -% otherwise the commands in B. -% -% \item[\cn{PrintEdition}]\SpecialUsageIndex{\PrintEdition} -% If a bibliography entry has -% \begin{verbatim} -% edition={2} -%\end{verbatim} -% and the \cn{BibSpec} used \cn{PrintEdition} to handle this field, then the -% edition information will be printed as \qq{2nd ed.}\mdash that is, the -% number is converted to cardinal form and \qq{ed.} is added (taken from -% \cn{editiontext}). -% -% \item[\cn{CardinalNumeric}]\SpecialUsageIndex{\CardinalNumeric} -% This provides the conversion to cardinal -% number form used by \cn{PrintEdition}. -% -% \item[\cn{PrintDate}, \cn{PrintYear}]\SpecialUsageIndex{\PrintDate} -% \SpecialUsageIndex{\PrintYear} -% These functions convert a date in -% canonical form (ISO 8601) to the form required by the current -% bibliography style. You can get your preferred date form by -% redefining these functions or by changing your \cn{BibSpec} statements -% to use another function of your own devising. The original definition -% of \cn{PrintDate} adds parentheses (as for the year of a journal article -% in normal AMS style), whereas the \cn{PrintYear} function simply -% prints the year without any additional material (as for a book's year -% of publication in normal AMS style). -% -% \item[\cn{mdash}, \cn{ndash}]\SpecialUsageIndex{\mdash} -% \SpecialUsageIndex{\ndash} -% These are short forms for \cn{textemdash} -% and \cn{textendash}, recommended instead of the more usual \verb'---' -% and \verb'--' notation. From the \pkg{textcmds} package. -% -% \item[et cetera \dots] [mjd,2002-01-03] See the \fn{.dtx} files for -% further possibilities that I have not managed to get properly -% documented yet! -% \end{description} -% -% \StopEventually{\PrintBibliography} -% \iffalse -% \clearpage -% \typeout{@@@ That was the last page of the OnlyDescription} -% \fi -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \section{Implementation} -% -% \subsection{Overview} -% -% It will be a while yet before we get to any actual code. First we -% need to understand what the code needs to accomplish in order to -% provide the user interface described above in a way that is as -% compatible as possible with existing \lat/ mechanisms. -% -% \subsubsection{Normal \lat/ processing of cites} -% -% \paragraph{First \lat/ pass} -% -% Various commands are written to the \fn{.aux} file that are -% mostly used by \bibtex/. -% \begin{enumerate} -% \item A \cnm{cite}{moo} command writes one line to the \fn{.aux} file: -% \cnm{citation}{moo}. This indicates to \bibtex/ that it should -% include `moo' in the list of cited items to be searched for. -% The \cn{cite} command also checks to see if \cs{b@moo} contains -% the corresponding citation label, but since this is the first -% pass, the label won't be known yet, so \lat/ emits an `Undefined -% citation' warning and prints a placeholder (i.e., \textbf{???}) -% instead of the citation label. -% -% \item A \cnm{bibliographystyle}{har} command writes one line to the -% \fn{.aux} file: \cnm{bibstyle}{har}. This indicates to \bibtex/ that it -% should use \fn{har.bst} to determine the style for sorting and -% formatting the bibliography items. -% -% \item A \cnm{bibliography}{hij,klm,...} command writes one line to the -% \fn{.aux} file: \cnm{bibdata}{hij,klm,...}. This indicates to \bibtex/ -% that it should look in \fn{hij.bib}, \fn{klm.bib}, \dots\ for -% bibliographic data. The \cn{bibliography} also tries to input -% the \fn{.bbl} file, but on the first pass it won't exist -% yet. -% -% \end{enumerate} -% -% On the first pass all \cn{cite}'s normally are reported as -% undefined because the \fn{.bbl} file has not yet been created. -% -% \paragraph{\bibtex/ pass} -% -% For a document named \fn{xyz.tex}, the command \verb'bibtex xyz' is -% used to invoke \bibtex/. It looks in \fn{xyz.aux} to find the -% citation information written there by \lat/. For each \cn{citation} line, -% \bibtex/ searches for a corresponding entry in the specified -% \fn{.bib} files and formats it. The entire list is then sorted in -% whatever way dictated by the bibliography style, and written out to -% the file \fn{xyz.bbl}. This normally produces entries that look -% something like: -% \begin{verbatim} -% \bibitem{BGL} P. Busch, M. Grabowski and P. J. Lahti: -% {\it Operational Quantum Physics.} -% Springer Verlag, New York (1995). -%\end{verbatim} -% -% \paragraph{Second \lat/ pass} -% -% Now the \fn{.bbl} file exists and contains some \cn{bibitem} -% commands. At \cnm{begin}{document}, \lat/ reads the \fn{.aux} file, -% hoping to find some \cn{bibcite} commands, but it will not find -% them until the next time around. \cn{citation}, \cn{bibstyle}, and -% \cn{bibdata} commands in the \fn{.aux} file are simply ignored by \lat/. -% Then \lat/ proceeds to typeset the body of the document. -% \begin{enumerate} -% \item Instances of \cn{cite} still print question marks. -% -% \item The \cn{bibliography} command causes \lat/ to input \fn{xyz.bbl} -% and typeset its contents. -% -% \item A \cnm{bibitem}{moo} command writes one line to the -% \fn{.aux} file: \cnmm{bibcite}{moo}{9}, where 9 is the current item -% number. -% -% \item A \cnom{bibitem}[Moody]{moo} command writes one line to the -% \fn{.aux} file: \cnmm{bibcite}{moo}{Moody}, using the supplied label -% instead of a number. -% -% \end{enumerate} -% -% \paragraph{Third \lat/ pass} -% -% Now the \fn{.aux} file contains some \cn{bibcite} commands. Once again, -% \lat/ reads the \fn{.aux} file when it reaches \cnm{begin}{document}. -% \begin{enumerate} -% -% \item A \cnmm{bibcite}{moo}{Moody} causes \lat/ to define \cs{b@moo} -% with `Moody' as the replacement text. -% -% \item If two \cn{bibcite} commands have the same citation key, \lat/ -% gives a warning message. This happens at \cnm{begin}{document}, -% during the reading of the \fn{.aux} file. -% -% \item Instances of \cn{cite} in the body of the document will print -% the appropriate labels obtained from the \fn{.aux} file. -% -% \item If there are any \cn{cite} commands for which the \fn{.aux} file did -% not have a \cn{bibcite} command, \lat/ will give an `Undefined -% citation' warning. This often happens if the \fn{.aux} file is incomplete -% due to a \TeX{} error on the preceding pass. -% \end{enumerate} -% -% \subsection{How cites are processed by \pkg{amsrefs}} -% -% In order to support its additional features (e.g., author-year -% citations and the \opt{backrefs} option), the \rpack/ stores additional -% information for each cite in the macro \cs{b@whatever}. Instead of -% simply using the defined or undefined status of this macro to -% trigger the standard warnings, we add some boolean flags to allow -% us to discriminate more finely what the current situation is. -% \begin{itemize} -% \item Each time an item is cited in the body of the document, a -% \texttt{backref} entry is added to the info of that item. The -% \texttt{backref} info -% is the current page and section location. Section location is a bit -% hard to get right without better support from the document class. -% So we provide a hook to allow it to work better when the support is -% there. -% -% \item When a cite occurs, if the info is undefined then a warning is -% issued and the info structure is created. A \cs{citation} command -% and a \cs{citedest} command (providing backref info) are written to -% the \fn{.aux} file. Because the backref info includes page number, it has -% to be a non-immediate write. -% -% An undefined info structure would normally happen only on a first -% pass when no \fn{.aux} file exists, or when a new cite is added. -% I.e., when the corresponding \cs{citation} command is not yet -% present in the \fn{.aux} file. -% -% \item When a citation command occurs in the \fn{.aux} file, it initializes -% the info structure if necessary, setting the ``bib-info-present'' -% flag to 0. -% -% \item When a \cs{citedest} command occurs in the \fn{.aux} file, it -% initializes the info structure if necessary---but this shouldn't -% happen: if the corresponding \cs{citation} command did not already -% get processed, then something is wrong. So normally, the -% \cs{citedest} command merely needs to add its backref info to the -% existing info structure. -% -% \item When a \cs{bibcite} command occurs in the \fn{.aux} file, it will -% normally find that \cs{b@whatever} is already defined, if the -% bibliography occurs after all the \cn{cite} commands. What it must -% do is fill in the appropriate blank slots in the info structure -% set up by a previous \cs{citation} command. -% -% \item The \fn{.aux} file is actually processed two times, once at the -% beginning of the document and once at the end. In the latter case, -% \cs{bibcite} should give a warning if the backref-list is empty, -% since that means there were no \cn{cite} commands for the given -% key. -% -% \item When processing the bibliography: The \cn{bib} command needs to -% check if it is using a key that is already used by another \cn{bib} -% command. -% \end{itemize} -% -% We therefore have -% \begin{verbatim} -% \b@xyz -> \citesel 00{label}{year}{backref-list} -%\end{verbatim} -% where the first~0 is replaced by~1 if there has already been another -% citation for the same key earlier in the document (some citation -% styles use abbreviated forms for all instances after the first), -% and the second~0 is replaced by~1 if the same key was already -% used by an earlier \cn{bib} command. -% -% Because the backref-list often includes page number information, it -% cannot be built on the fly as we go along; instead we have to write -% the information to the \fn{.aux} file and read it in at the beginning of -% the next run. -% -% If there was no \cs{bibcite} in the \fn{.aux} file for a given key, then -% the info is -% \begin{verbatim} -% \b@xyz -> \citesel 00{}{}{backref-list} -%\end{verbatim} -% If there was neither \cs{citation} nor \cs{bibcite} in the \fn{.aux} file -% for a given key, then the \cn{cite} command should find that -% \ncn{b@xyz} is undefined. -% -% If the author-year option is in effect, the \qq{label} contains -% the author last names instead of a label: -% \begin{verbatim} -% \b@xyz -> \citesel 00{\name{Smith}\name{Jones}}{...}{...} -%\end{verbatim} -% Full name information is included in the data because some citation -% styles give full names at the first citation and abbreviated forms -% for subsequent instances. -% -% \subsection{Data structures} -% -% The result of scanning the key/value pairs of a \cn{bib} command is -% an assignment statement for \cs{rsk@toks}. (Cf.\@ the \pkg{rkeyval} -% package.) For example, consider the entry -% \begin{verbatim} -% \bib{miller83}{article}{ -% author={Miller, G.}, -% title={Eine Bemerkung zur Darstellung von Polynomen \"{u}ber -% Verb\"{a}nden}*{language={german}}, -% journal={J. Math. Sent.}, -% volume={10}, -% year={1983}, -% pages={26\ndash 30}, -% } -%\end{verbatim} -% The scanned result is to assign -% \begin{verbatim} -% \global\rsk@toks{% -% \set:bib'author{Miller, G.}{}% -% \set:bib'title{Eine Bemerkung zur Darstellung von Polynomen -% \"{u}ber Verb\"{a}nden}{language={german}}% -% \set:bib'journal{J. Math. Sent.}{}% -% \set:bib'volume{10}{}% -% \set:bib'year{1983}{}% -% \set:bib'pages{26\ndash 30}{}% -% } -%\end{verbatim} -% The code in the last arg of \cn{RestrictedSetKeys} then invokes -% \cs{bib@exec} to do something with the value of \cs{rsk@toks}. -% \begin{verbatim} -% \bib@exec{miller83}{\the\rsk@toks}{\setbib@article}{} -%\end{verbatim} -% -% \subsection{Preliminaries} -% -% \begin{macrocode} -%<*pkg> -% \end{macrocode} -% -% Standard declaration of package name and date. -% \begin{macrocode} -\NeedsTeXFormat{LaTeX2e}[1995/12/01] -% \end{macrocode} -% -% \begin{macro}{\amsrefs@warning@nl} -% \begin{macrocode} -\def\amsrefs@warning@nl{\PackageWarningNoLine{amsrefs}} -% \end{macrocode} -% \end{macro} -% -% Backward handling for beta version. -% \begin{macrocode} -\@ifpackagewith{amsrefs}{beta}{% - \amsrefs@warning@nl{The beta option is deprecated^^J% - and will be removed in a future release of amsrefs} - \expandafter\edef\csname opt@amsrbeta.sty\endcsname - {\@ptionlist{amsrefs.sty}}% - \def\@currname{amsrbeta}% - \expandafter\let\csname amsrbeta.sty-h@@k\endcsname\@empty - \def\@tempa{\input{amsrbeta.sty}\endinput}% -}{% - \let\@tempa\@empty -} -\@tempa -% \end{macrocode} -% -% \begin{macrocode} -\IfFileExists{url.sty}{% - \RequirePackage{url}\relax - \@gobble -}{% - \@firstofone -} -{ - \DeclareRobustCommand{\url}[1]{% - \def\@tempa{#1}% - \texttt{\@urlsetup $\expandafter\strip@prefix\meaning\@tempa$}% - }% - \def\@urlsetup{% - \check@mathfonts \textfont\@ne\the\font \textfont\z@\the\font - \@apply\@urlfix{\do\+\do\=\do\:\do\-\do\.\do\,\do\;}% - \@apply\@urlbreak{\do\&\do\/\do\?}% - }% - \def\@urlbreak#1{% - \mathcode`#1="8000 - \begingroup \lccode`\~=`#1 \lowercase{\endgroup \edef~}% - {\mathchar\number`#1\penalty\hyphenpenalty}% - }% - \def\@urlfix#1{% - \mathcode`#1=`#1\relax - }% -} -% \end{macrocode} -% -% \begin{macrocode} -\@ifundefined{NormalCatcodes}{\RequirePackage{pcatcode}\relax}{} -\PushCatcodes\NormalCatcodes -\ProvidesPackage{amsrefs}[2004/06/07 v1.71] -% \end{macrocode} -% -% \begin{macrocode} -%% WARNING WARNING WARNING: Catcode of apostrophe ' is letter -%% throughout this file. -\catcode`\'=11 % letter -% \end{macrocode} -% -% \subsection{Utilities} -% -% Some of these useful functions are also found in AMS -% document classes. -% -% \begin{macro}{\after@deleting@token} -% Similar in concept to \cs{afterassignment}, except it deletes the -% next token in the stream before putting its argument -% back into the input. Useful for skipping past tokens during -% parsing. -% \begin{macrocode} -\def\after@deleting@token#1{% - \afterassignment#1% - \let\@let@token= % Don't delete this space! -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@ifempty} -% \begin{macro}{\@ifnotempty} -% Some frequently used tests for empty arguments. Note that an -% argument consisting entirely of spaces (e.g., -% \verb*|\@ifempty{ }|) counts as empty. -% \begin{macrocode} -\long\def\@ifempty#1{\@xifempty#1@@..\@nil} - -\long\def\@xifempty#1#2@#3#4#5\@nil{% - \ifx#3#4\@xp\@firstoftwo\else\@xp\@secondoftwo\fi -} - -\long\def\@ifnotempty#1{\@ifempty{#1}{}} -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\macrotext} -% \begin{macrocode} -\def\macrotext{\expandafter\strip@prefix\meaning} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\vdef} -% ``Verbatim'' def. -% \begin{macrocode} -\def\vdef#1#2{% - \def#1{#2}% - \edef#1{\macrotext#1}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\auto@protect} -% Sometimes it's convenient to render a given control sequence -% unexpandable for a time. \cs{auto@protect} provides a way to do -% that.\footnote{There really should be a special name for macros -% that, like \cs{auto@protect}, take a control sequence as an -% argument and redefine that control sequence in order to achieve -% some special effect. Pending happier inspiration, I'm -% going to call them ``wrapper'' macros.\index{wrapper macros, -% definition}} -% -% An earlier version of this code read simply |\let#1\relax| but -% that had the disadvantage of making all \cs{auto@protect}ed -% macros compare equal via \cs{ifx}. This version allows macros to -% keep their identities under comparisons. -% \begin{macrocode} -\def\auto@protect#1{\def#1{\@nx#1}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\g@undef} -% Globally undefine a control sequence. -% \begin{macrocode} -\def\g@undef#1{\global\let#1\relax} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@concat} -% Concatenate onto the end of a token list. Expands everything. -% \begin{macrocode} -\def\@concat#1#2{\edef#1{#1#2}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\add@toks@} -% This saves a few tokens of main memory and a lot of typing. -% \begin{macrocode} -\def\add@toks@{\addto@hook\toks@} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@lappend} -% Append an element to a \cs{do}-delimited list. As long as the -% element to be appended (|#2|) is a single token, nothing is -% expanded. If it contains multiple tokens, all tokens after the -% first will be expanded. -% \begin{macrocode} -\def\@lappend#1#2{% - \begingroup - \def\do{\@nx\do\@nx}% - \edef\@tempa{\def\@nx#1{#1\do#2}}% - \@xp\endgroup - \@tempa -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@apply} -% Apply a macro to each element of a \cs{do}-delimited list. -% \begin{macrocode} -\def\@apply#1#2{% - \let\do#1% - #2% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\get@numberof} -% This is a generic macro for counting the number of elements in a -% \lat/-style list. -% The first argument is a \cs{count} register that will receive the -% final count; the second argument is the control sequence that -% separates elements of the list, and the third argument is the -% list itself. So, for example, -% \begin{verbatim} -% \get@numberof\@tempcnta\do\dospecials -%\end{verbatim} -% would count the number of special characters in \cs{dospecials} -% and store the number in \cs{@tempcnta}. -% \begin{macrocode} -\def\get@numberof#1#2#3{% - \begingroup - \def#2{\advance\@tempcnta\@ne \@gobble}% - \@tempcnta\z@ - #3\relax - \edef\@tempb{#1=\the\@tempcnta\relax}% - \@xp\endgroup - \@tempb -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\safe@set} -% This is a quick and dirty way of extracting an integer prefix -% from a string and assigning it to a counter. If the string does -% not begin with an integer, the counter receives the value~0. The -% suffix after the integer prefix is discarded. (But bad things -% will happen if the string contains the token \cs{@nil}.) -% \begin{macrocode} -\def\safe@set#1#2{% - \afterassignment\@nilgobble - #1=0#2\relax\@nil -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@chomp} -% Vaguely reminiscent of Perl's \texttt{chomp} function, which removes -% a substring from the end of a variable, but ours works with -% tokens (more-or-less) and takes the substring to be removed as -% its second argument. Note the use of \cs{@empty} to anchor the -% chomped substring to the end of the string. Note also that the -% second argument will be fully expanded during the chomping. -% \begin{macrocode} -\def\@chomp#1#2{% - \begingroup - \toks@\@emptytoks - \def\@chomper##1##2#2\@empty##3\@nil{% - \ifx\@let@token\bgroup - \toks@{{##1}##2}% - \else - \toks@{##1##2}% - \fi - }% - \@xp\chomp@ #1\@empty#2\@empty\@nil - \edef\@tempa{\def\@nx#1\@xp{\the\toks@}}% - \@xp\endgroup - \@tempa -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\chomp@} -% Before passing control to \cs{@chomper}, we peek ahead at the -% next token in the stream. That way, if the next token is an open -% brace, we know we need to surround \cs{@chomper}'s first argument -% with braces. Unfortunately, this might still remove braces from -% the second argument, but I think that's ok for our purposes. -% \begin{macrocode} -\def\chomp@{% - \futurelet\@let@token - \@chomper -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\amsrefs@warning} -% \begin{macrocode} -\def\amsrefs@warning{\PackageWarning{amsrefs}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\amsrefs@error} -% \begin{macrocode} -\def\amsrefs@error{\PackageError{amsrefs}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\MessageBreakNS} -% This suppresses the leading space in \cs{on@line} in error and -% warning messages. -% \begin{macrocode} -\def\MessageBreakNS{\MessageBreak\romannumeral`\^^@} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@addpunct} -% The \cs{@addpunct} function is defined by AMS document classes and -% the \pkg{amsgen} package. But if we find it undefined we had better -% define it. -% \begin{macrocode} -\@ifundefined{@addpunct}{% - \def\@addpunct#1{% - \relax\ifhmode - \ifnum\spacefactor>\@m \else#1\fi - \fi - } - \def\frenchspacing{% - \sfcode`\.1006 - \sfcode`\?1005 - \sfcode`\!1004 - \sfcode`\:1003 - \sfcode`\;1002 - \sfcode`\,1001\relax - } -}{} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\nopunct} -% Omit any following punctuation that would normally be inserted by -% \cs{@addpunct}. -% \begin{macrocode} -\providecommand{\nopunct}{\spacefactor \@nopunctsfcode} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@nopunctsfcode} -% \begin{macrocode} -\def\@nopunctsfcode{1007 } -% \end{macrocode} -% \end{macro} -% -% \subsection{Declaring package options} -% -% We call the \pkg{ifoption} package to facilitate some option tests. -% \begin{macrocode} -\RequirePackage{ifoption}[2000/02/15] -% \end{macrocode} -% -% The \opt{sorted} option is a no-op and is no longer documented. -% I'm only leaving it here for backwards compatibility. -% \begin{macrocode} -\DeclareExclusiveOptions{sorted,citation-order} -% \end{macrocode} -% The \opt{alphabetic} option corresponds to the standard \bst{alpha} -% biblio style with labels like Knu66 (three letters from name plus -% two digits of year). Maybe should provide an alias LllYY for this -% option. Numeric is the default since it is commoner in AMS -% publications. -% \begin{macrocode} -\DeclareExclusiveOptions{alphabetic,shortalphabetic,author-year,numeric} -% \end{macrocode} -% -% \begin{option}{y2k} -% \begin{macrocode} -\DeclareBooleanOption{y2k} -% \end{macrocode} -% \end{option} -% -% \begin{option}{nobysame} -% \begin{macrocode} -\DeclareBooleanOption{nobysame} -% \end{macrocode} -% \end{option} -% -% The standard \bst{abbrv} bibliography style uses abbreviations for -% month names and journal names, and first names of people are -% abbreviated to their initials. Since the second test bibliography -% that I tested with had unabbreviated month names but abbreviated -% journal names, perhaps it is a good idea to let these choices be -% specified separately. -% \begin{macrocode} -\DeclareBooleanOption{short-journals} -% \end{macrocode} -% \begin{macrocode} -\DeclareBooleanOption{short-publishers} -% \end{macrocode} -% The \opt{short-journals} and \opt{short-publishers} options only -% affect journal and publisher names that are defined with -% \cn{DefineJournal} and \cn{DefinePublisher} commands. -% \begin{macrocode} -\DeclareBooleanOption{short-months} -% \end{macrocode} -% -% \begin{macrocode} -\DeclareBooleanOption{initials} -% \end{macrocode} -% Nevertheless, it's to be expected that the preceding four options -% would typically be used together, so we provide a short-hand for -% requesting them all. -% \begin{macrocode} -\DeclareOption{abbrev}{% - \@pass@ptions - \@currext - {initials,short-months,short-journals,short-publishers}% - \@currname -} -% \end{macrocode} -% -% In the bibliography, if a title or something is enclosed in quotes, -% should the closing quotes go inside the punctuation (logical -% position) rather than outside (traditional)? These options give you -% a choice. -% \begin{macrocode} -\DeclareExclusiveOptions{traditional-quotes,logical-quotes} -% \end{macrocode} -% -% A sequence of cites will be sorted and ranges of length three or -% greater will be compressed if these options so indicate. Note -% that the \opt{non-sorted-cites} option automatically disables -% compression. This is probably a feature. -% \begin{macrocode} -\DeclareExclusiveOptions{sorted-cites,non-sorted-cites} -\DeclareExclusiveOptions{non-compressed-cites,compressed-cites} -% \end{macrocode} -% -% In the bibliography, print page numbers showing where each -% entry was cited. -% \begin{macrocode} -\DeclareBooleanOption{backrefs} -% \end{macrocode} -% -% Option for giving information about the available options: -% \begin{macrocode} -\DeclareBooleanOption{?} -% \end{macrocode} -% -% This option means to forgo loading of the \pkg{textcmds} and -% \pkg{mathscinet} packages. -% \begin{macrocode} -\DeclareBooleanOption{lite} -% \end{macrocode} -% -% This option can be used by later releases as a sign that fall-back -% adaptations need to be done. -% \begin{macrocode} -\DeclareBooleanOption{beta} -% \end{macrocode} -% -% This one is obsolete now. -% \begin{macrocode} -\DeclareBooleanOption{jpa} -% \end{macrocode} -% -% \begin{macrocode} -\DeclareBooleanOption{bibtex-style} -% \end{macrocode} -% -% \begin{macrocode} -\ExecuteOptions{numeric,traditional-quotes,sorted-cites,compressed-cites} - -\ProcessOptions\relax - -\ProcessExclusiveOptions -% \end{macrocode} -% -% \begin{macrocode} -\IfOption{backrefs}{% - \IfFileExists{hyperref.sty}{% - \RequirePackage{hyperref}[1999/07/08] - }{}% - \IfFileExists{backref.sty}{% - \RequirePackage{backref}[1999/05/30] - }{}% -}{} -% \end{macrocode} -% -% \subsubsection{The \opt{?} option} -% -% Note that in the following auxiliary package list, \pkg{getwidth} -% is not (yet) included. -% \begin{macrocode} -\IfOption{?}{% - \typeout{^^J% - Documentation for the amsrefs package is found in amsrdoc.dvi^^J% - (or .pdf or .tex). - ^^J% - }% -}{}% -% \end{macrocode} -% -% \subsection{Loading auxiliary packages} -% Now, if these other packages make use of the \pkg{pcatcode} package -% like they should, then we don't need to make any fuss here about -% the special catcode of \texttt{'}. Just load the packages. -% \begin{macrocode} -\RequirePackage{rkeyval}[2001/12/22] -% \end{macrocode} -% -% \subsubsection{The \opt{lite} option} -% -% In my opinion, this is misguided, since \pkg{amsrefs} shouldn't -% be loading these packages to begin with. But it's too late to -% change it now. -% -% \begin{macrocode} -\IfOption{lite}{% True? Then don't load the next two packages. -}{% False? OK, let's load them: - \RequirePackage{textcmds}[2001/12/14] - \RequirePackage{mathscinet}[2002/01/01] -} -% \end{macrocode} -% -% \subsection{Key-value setup} -% -% \begin{macro}{\BibField} -% This provides easy access to individual fields for user-defined -% formatting functions. -% \begin{macrocode} -\newcommand{\BibField}[1]{\csname bib'#1\endcsname} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\IfEmptyBibField} -% A convenient partial application of \cn{rkvIfEmpty}. -% \begin{macrocode} -\newcommand{\IfEmptyBibField}{\rkvIfEmpty{bib}} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Standard field names (the \texttt{bib} group)} -% -% And here are the predefined key names. You could always add some -% more if you needed them. Only worry is about compatibility if you -% want to share your data with other people. -% -% \begin{macro}{\fld@elt} -% \begin{macro}{\name} -% We want the list macros used above to be unexpandable except when -% special processing is done. (It's not clear to me there's any -% real benefit to using these instead of just using \cn{do}.---dmj) -% \begin{macrocode} -\let\fld@elt=? -\let\name=? -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% First the fields that could be repeated more than once in a single -% entry. Maybe publisher should be allowed to repeat also, for -% co-published works. But then need to worry about the address -% handling. -% \begin{macrocode} -\DefineAdditiveKey{bib}{author}{\name} -\DefineAdditiveKey{bib}{editor}{\name} -\DefineAdditiveKey{bib}{translator}{\name} -\DefineAdditiveKey{bib}{contribution}{\fld@elt} -\DefineAdditiveKey{bib}{isbn}{\fld@elt} -\DefineAdditiveKey{bib}{issn}{\fld@elt} -\DefineAdditiveKey{bib}{review}{\fld@elt} -\DefineAdditiveKey{bib}{partial}{\fld@elt} -% \end{macrocode} -% -% \begin{macrocode} -\DefineSimpleKey{bib}{address} -\DefineSimpleKey{bib}{book} -\DefineSimpleKey{bib}{booktitle} -\DefineSimpleKey{bib}{conference} -%\DefineSimpleKey{bib}{contributor} -\DefineSimpleKey{bib}{copula} -\DefineSimpleKey{bib}{date} -\DefineSimpleKey{bib}{doi} -\DefineSimpleKey{bib}{edition} -\DefineSimpleKey{bib}{eprint} -\DefineSimpleKey{bib}{fulljournal} -\DefineSimpleKey{bib}{hyphenation} -\DefineSimpleKey{bib}{institution} -\DefineSimpleKey{bib}{journal} -\DefineSimpleKey{bib}{label} -\DefineSimpleKey{bib}{language} -\DefineSimpleKey{bib}{name} -\DefineSimpleKey{bib}{note} -\DefineSimpleKey{bib}{number} -\DefineSimpleKey{bib}{organization} -\DefineSimpleKey{bib}{pages} -\DefineSimpleKey{bib}{part} -\DefineSimpleKey{bib}{place} -\DefineSimpleKey{bib}{publisher} -\DefineSimpleKey{bib}{reprint} -\DefineSimpleKey{bib}{school} -\DefineSimpleKey{bib}{series} -\DefineSimpleKey{bib}{setup} -\DefineSimpleKey{bib}{status} -\DefineSimpleKey{bib}{subtitle} -\DefineSimpleKey{bib}{title} -\DefineSimpleKey{bib}{translation} -\DefineSimpleKey{bib}{type} -\DefineSimpleKey{bib}{url} -\DefineSimpleKey{bib}{volume} -\DefineSimpleKey{bib}{xref} -\DefineSimpleKey{bib}{year} -% \end{macrocode} -% The \fld{transition} key is used when we want to insert punctuation -% or other material at a given point in the sequence -% unconditionally. The key appears to have a non-empty value to -% \cn{IfEmptyBibField}, but its value (expansion) is empty. -% \begin{macrocode} -\DefineDummyKey{bib}{transition} -% \end{macrocode} -% -% \subsubsection{Auxiliary properties (the \texttt{prop} group)} -% -% \begin{macrocode} -\DefineSimpleKey{prop}{inverted} -\DefineSimpleKey{prop}{language} -% \end{macrocode} -% -% \subsection{Bibliography type specifications} -% -% \begin{macro}{\BibSpec} -% Accumulate specification material in \cs{toks@}, then define -% \cs{setbib@TYPE} from it. -% \begin{macrocode} -\newcommand{\BibSpec}[2]{% - \toks@\@emptytoks - \@ifnotempty{#2}{% -% \end{macrocode} -% The \cs{@ifnextchar} removes an optional |+| at the beginning of -% a specification. From then on, each time \cs{bibspec@scan} is -% invoked, it expects to find four arguments. The four -% \cs{@empty}s appended to the specification (|#2|) below ensure -% that this is so. -% \begin{macrocode} - \@ifnextchar{+}{\@xp\bibspec@scan\@gobble}{\bibspec@scan}% - #2\@empty\@empty\@empty\@empty - }% - \@xp\edef\csname setbib@#1\endcsname{\the\toks@}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bibspec@scan} -% The \cs{bibspec@scan} function scans one field specification -% from the second arg of \cn{BibSpec}. Each field specification has -% the form -% \begin{verbatim} -% +{punctuation}{prelim material}{field name} -%\end{verbatim} -% Note however that because the initial |+| is stripped off by -% \cs{BibSpec} (see above), the actual order that \cs{bibspec@scan} -% reads the field specification is -% \begin{verbatim} -% #1={punctuation} #2={prelim material} #3={field name} #4=+ -%\end{verbatim} -% where the fourth argument is actually expected to be either the -% |+| from the following specification, or one of the special -% \cs{@empty} tokens inserted by \cs{BibSpec}. If it is neither of -% these special values, it means we have a malformed specification; -% so, we issue an error and then try to pick up where we left off. -% \begin{macrocode} -\def\bibspec@scan#1#2#3#4{% - \add@toks@{\bib@append{#1}{#2}}% - \edef\@tempa{% - \toks@{\the\toks@ \@xp\@nx\csname bib'#3\endcsname}% - }% - \@tempa - \ifx\@empty#4% - \@xp\@gobble % end the recursion - \else - \ifx +#4\else\bibspec@scan@error\fi - \fi - \bibspec@scan -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bibspec@scan@error} -% \begin{macrocode} -\def\bibspec@scan@error{\amsrefs@error{Bad BibSpec: Expected '+'}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bib@append} -% The function \cs{bib@append} prints the value of a field, together -% with associated punctuation and font changes, unless the value is -% empty. Arg 1 is punctuation (that may need to be swapped with a -% preceding line break), arg 2 gives the space to be added after the -% punctuation, and possibly a function to be applied to the contents -% of arg 3, which is -% a macro containing the field -% value. So if we have \cn{moo} and \cn{bib'pages}, from -% \verb'pages={21\ndash 44}', then we want to arrange to call -% \begin{verbatim} -% \moo{21\ndash 44} -%\end{verbatim} -% We don't want to simply call \cs{moo}\cs{bib'bar} because that makes -% it rather difficult for \cs{moo} to look at the contents of -% \cs{bib@bar}. -% \begin{macrocode} -\def\bib@append#1#2#3{% - \ifx\@empty#3% - \else -% \end{macrocode} -% \begin{bug} -% Need better error message here. -% \end{bug} -% \begin{macrocode} - \ifx\relax#3% - \errmessage{#3=\relax}% - \else - \begingroup - \series@index\m@ne - \def\current@bibfield{#3}% - \@ifempty{#1}{% - \@temptokena{\ifnum\lastkern=\@ne\ignorespaces\fi #2}% - }{% - \@temptokena{\SwapBreak{#1}#2}% - }% - \toks@\@xp{#3}% - \edef\@tempa{\the\@temptokena{\the\toks@}}% - \rkvIfAdditive#3{}{% - \get@current@properties - \select@auxlanguage - }% - \@tempa - \endgroup - \fi - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\select@auxlanguage} -% \begin{macrocode} -\def\select@auxlanguage{% - \ifx\prop'language\@empty - \else - \@xp\selectlanguage\@xp{\prop'language}% - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\erase@field} -% There are some fields that can appear in more than one place in a -% reference, depending on context. For example, if a book has an -% editor but no author, the editor appears at the beginning of the -% entry, but if the book has both an editor and an author, the -% editor appears at the end of the entry. A simple way to handle -% this is to ``erase'' the \fld{editor} field after printing it, -% which is what \cs{erase@field} is for. -% -% The obvious definition of \cs{erase@field} is -% \begin{verbatim} -% \def\erase@field#1{\global\let#1\@empty} -%\end{verbatim} -% but that doesn't work because the top-level value of -% \pkg{rkeyval} fields isn't \cs{@empty}; instead, it contains a -% setter function used by \cs{RestrictedSetKeys} when processing a -% key-value list (see \cs{rkv@DSAK}, \cs{rsk@set@a} and -% \cs{rsk@set@b}). -% -% On the other hand, rewriting the field locally won't work -% either, since \cs{erase@field} will typically be executed inside -% the group established by \cs{bib@append}. Instead, we want to -% rewrite the value right after \cs{bib@append}'s group ends. One -% way to do this would be to keep a list of fields to be erased and -% have \cs{bib@append} iterate over the list after its -% \ncn{endgroup}. -% -% However, as long as the call to \cs{erase@field} -% is never nested within any deeper groups, it's simpler just to -% use \cs{aftergroup}, which is what we'll do (``Sufficient unto -% the day is the evil thereof'' and all that). -% \begin{macrocode} -\def\erase@field#1{% - \aftergroup\let\aftergroup#1\aftergroup\@empty -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\get@current@properties} -% This retrieves the auxiliary properties for the current field -% value, as defined by \cs{current@bibfield} and -% \cs{series@index}. -% \begin{macrocode} -\def\get@current@properties{% - \begingroup - \@xp\get@nth@property\@xp\@tempa\current@bibfield\series@index - \edef\@tempa{% - \@nx\RestrictedSetKeys{}{prop}{% - \def\@nx\@tempa{\@nx\prop@reset \@nx\the\@nx\rsk@toks}% - }{\@tempa}% - }% - \@tempa - \@xp\endgroup - \@tempa -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\BibSpecAlias} -% This is a \cs{def} rather than a \cs{let} because using \cs{let} -% would make \cn{BibSpecAlias} statements order-sensitive in a way -% that seems frequently to be a stumbling block to unwary package -% writers. But then we should probably do at least the simplest -% kind of infinite loop check. -% \begin{macrocode} -\newcommand{\BibSpecAlias}[2]{% - \@xp\def\@xp\@tempa\@xp{\csname setbib@#1\@xp\endcsname}% - \@xp\ifx\csname setbib@#2\endcsname\@tempa - \amsrefs@error{% - Mirror alias #1->#2 not allowed (infinite loop)}\@ehc - \else - \@xp\def\csname setbib@#1\@xp\endcsname - \@xp{\csname setbib@#2\endcsname}% - \fi -} -% \end{macrocode} -% \end{macro} -% -% \subsection{The standard bibliography types} -% -% \begin{macrocode} -\BibSpec{article}{% - +{} {\PrintAuthors} {author} - +{,} { \textit} {title} - +{.} { } {part} - +{:} { \textit} {subtitle} - +{,} { \PrintContributions} {contribution} - +{.} { \PrintPartials} {partial} - +{,} { } {journal} - +{} { \textbf} {volume} -% \end{macrocode} -% The date form is tricky depending on presence or absence of DOI. -% \begin{macrocode} - +{} { \PrintDatePV} {date} - +{,} { \issuetext} {number} - +{,} { \eprintpages} {pages} - +{,} { } {status} - +{,} { \PrintDOI} {doi} - +{,} { available at \eprint} {eprint} - +{} { \parenthesize} {language} - +{} { \PrintTranslation} {translation} - +{;} { \PrintReprint} {reprint} - +{.} { } {note} - +{.} {} {transition} - +{} {\SentenceSpace \PrintReviews} {review} -} - -\BibSpec{partial}{% - +{} {} {part} - +{:} { \textit} {subtitle} - +{,} { \PrintContributions} {contribution} - +{,} { } {journal} - +{} { \textbf} {volume} - +{} { \PrintDatePV} {date} - +{,} { \issuetext} {number} - +{,} { \eprintpages} {pages} -} - -\BibSpec{contribution}{% - +{} {} {type} - +{} { by \PrintNameList} {author} -} - -\BibSpec{book}{% - +{} {\PrintPrimary} {transition} - +{,} { \textit} {title} - +{.} { } {part} - +{:} { \textit} {subtitle} - +{,} { \PrintEdition} {edition} - +{} { \PrintEditorsB} {editor} - +{,} { \PrintTranslatorsC} {translator} - +{,} { \PrintContributions} {contribution} - +{,} { } {series} - +{,} { \voltext} {volume} - +{,} { } {publisher} - +{,} { } {organization} - +{,} { } {address} - +{,} { \PrintDateB} {date} - +{,} { } {status} - +{} { \parenthesize} {language} - +{} { \PrintTranslation} {translation} - +{;} { \PrintReprint} {reprint} - +{.} { } {note} - +{.} {} {transition} - +{} {\SentenceSpace \PrintReviews} {review} -} - -\BibSpec{collection.article}{% - +{} {\PrintAuthors} {author} - +{,} { \textit} {title} - +{.} { } {part} - +{:} { \textit} {subtitle} - +{,} { \PrintContributions} {contribution} - +{,} { \PrintConference} {conference} - +{} {\PrintBook} {book} - +{,} { } {booktitle} - +{,} { \PrintDateB} {date} - +{,} { pp.~} {pages} - +{,} { } {status} - +{,} { \PrintDOI} {doi} - +{,} { available at \eprint} {eprint} - +{} { \parenthesize} {language} - +{} { \PrintTranslation} {translation} - +{;} { \PrintReprint} {reprint} - +{.} { } {note} - +{.} {} {transition} - +{} {\SentenceSpace \PrintReviews} {review} -} - -\BibSpec{conference}{% - +{} {} {title} - +{} {\PrintConferenceDetails} {transition} -} - -\BibSpec{innerbook}{% - +{,} { } {title} - +{.} { } {part} - +{:} { } {subtitle} - +{,} { \PrintEdition} {edition} - +{} { \PrintEditorsB} {editor} - +{,} { \PrintTranslatorsC} {translator} - +{,} { \PrintContributions} {contribution} - +{,} { } {series} - +{,} { \voltext} {volume} - +{,} { } {publisher} - +{,} { } {organization} - +{,} { } {address} - +{,} { \PrintDateB} {date} - +{.} { } {note} -} - -\BibSpec{report}{% - +{} {\PrintPrimary} {transition} - +{,} { \textit} {title} - +{.} { } {part} - +{:} { \textit} {subtitle} - +{,} { \PrintEdition} {edition} - +{,} { \PrintContributions} {contribution} - +{,} { Technical Report } {number} - +{,} { } {series} - +{,} { } {organization} - +{,} { } {address} - +{,} { \PrintDateB} {date} - +{,} { \eprint} {eprint} - +{,} { } {status} - +{} { \parenthesize} {language} - +{} { \PrintTranslation} {translation} - +{;} { \PrintReprint} {reprint} - +{.} { } {note} - +{.} {} {transition} - +{} {\SentenceSpace \PrintReviews} {review} -} - -\BibSpec{thesis}{% - +{} {\PrintAuthors} {author} - +{,} { \textit} {title} - +{:} { \textit} {subtitle} - +{,} { \PrintThesisType} {type} - +{,} { } {organization} - +{,} { } {address} - +{,} { \PrintDateB} {date} - +{,} { \eprint} {eprint} - +{,} { } {status} - +{} { \parenthesize} {language} - +{} { \PrintTranslation} {translation} - +{;} { \PrintReprint} {reprint} - +{.} { } {note} - +{.} {} {transition} - +{} {\SentenceSpace \PrintReviews} {review} -} -% \end{macrocode} -% -% \begin{macrocode} -\BibSpecAlias{periodical}{book} -\BibSpecAlias{collection}{book} -\BibSpecAlias{proceedings}{book} -\BibSpecAlias{manual}{book} -\BibSpecAlias{miscellaneous}{book} -\BibSpecAlias{misc}{miscellaneous} -\BibSpecAlias{unpublished}{book} -\BibSpecAlias{proceedings.article}{collection.article} -\BibSpecAlias{techreport}{report} -% \end{macrocode} -% -% \begin{macro}{\setbib@incollection} -% \begin{macrocode} -\edef\setbib@incollection{% - \@xp\@nx\csname setbib@collection.article\endcsname -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\setbib@inproceedings} -% \begin{macrocode} -\edef\setbib@inproceedings{% - \@xp\@nx\csname setbib@collection.article\endcsname -} -% \end{macrocode} -% \end{macro} -% -% Some more entry types for implementing abbreviations. -% \begin{macrocode} -\BibSpec{name}{% - +{} {\PrintAuthors} {name} -} - -\BibSpec{publisher}{% - +{,} { } {publisher} - +{,} { } {address} -} -% \end{macrocode} -% -% \subsection{The \env{biblist} environment} -% -% The \env{biblist} environment can be used with a section or chapter -% heading. -% -% Use a standard \lat/ counter for numbering bibliography items. -% \begin{macrocode} -\newcounter{bib} -% \end{macrocode} -% -% \begin{environment}{biblist} -% \begin{macrocode} -\newenvironment{biblist}{% - \setcounter{bib}\z@ - \@biblist -}{% - \@endbiblist -} -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{biblist*} -% \begin{macrocode} -\newenvironment{biblist*}{% - \@biblist -}{% - \@endbiblist -} -% \end{macrocode} -% \end{environment} -% -% \begin{macro}{\@biblist} -% \begin{macrocode} -\newcommand\@biblist[1][]{% - \stepcounter{bib@env} - \normalfont - \footnotesize - \labelsep .5em\relax - \list{\BibLabel}{% - \restore@labelwidth - \@maxlabelwidth\z@ - \@nmbrlisttrue - \def\@listctr{bib}% - \let\makelabel\bib@mklab - #1\relax - }% - \sloppy -% \end{macrocode} -% Discourage page breaks within bibliography entries and disable them -% completely for entries that are less than four lines long. -% \begin{macrocode} - \interlinepenalty\@m - \clubpenalty\@M - \widowpenalty\clubpenalty - \frenchspacing - \ResetCapSFCodes -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@endbiblist} -% Change error for empty list (no items) to warning, to allow authors -% to leave their bibliography temporarily empty during writing: -% \begin{macrocode} -\def\@endbiblist{% - \save@labelwidth - \def\@noitemerr{\@latex@warning{Empty bibliography list}}% - \endlist -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@maxlabelwidth} -% \begin{macrocode} -\newdimen\@maxlabelwidth -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bib@mklab} -% \begin{macrocode} -\def\bib@mklab#1{% - \settowidth\@tempdima{#1}% - \ifdim \@tempdima > \@maxlabelwidth - \global\@maxlabelwidth\@tempdima - \fi - #1\hfil -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\newcounter{bib@env} -% \end{macrocode} -% -% \begin{macro}{\save@labelwidth} -% \begin{macrocode} -\def\save@labelwidth{% - \if@filesw - \immediate\write\@auxout{% - \string\newlabel{[bibenv:\the\c@bib@env]}{\the\@maxlabelwidth}% - }% - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\restore@labelwidth} -% \begin{macrocode} -\def\restore@labelwidth{% - \@xp\ifx \csname r@[bibenv:\the\c@bib@env]\endcsname \relax - \resetbiblist{00}% - \else - \@xp\labelwidth\csname r@[bibenv:\the\c@bib@env]\endcsname - \leftmargin\labelwidth - \advance\leftmargin\labelsep - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ResetCapSFCodes} -% Presumably this is here because there has been a problem in the -% past with packages that change the \cs{catcode}s of capital -% letters. -% \begin{macrocode} -\providecommand{\ResetCapSFCodes}{% - \count@=`\A - \def\@tempa{% - \sfcode\count@=\@m - \advance\count@\@ne - \ifnum\count@>`\Z\relax \expandafter\@gobble \fi - \@tempa - }% - \@tempa -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\CurrentBib} -% In case this is undefined sometimes. -% \begin{macrocode} -\def\CurrentBib{??} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\BibLabel} -% \begin{macrocode} -\newcommand{\BibLabel}{% - [\hyper@anchorstart{cite.\CurrentBib}\relax\thebib\hyper@anchorend]% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\resetbiblist} -% \begin{macrocode} -\newcommand{\resetbiblist}[1]{% - \settowidth\labelwidth{\def\thebib{#1}\BibLabel}% - \leftmargin\labelwidth - \ifdim\labelwidth=\z@ - \leftmargin=1em - \itemindent=-\leftmargin - \else - \advance\leftmargin\labelsep - \fi -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Processing bibliography entries} -% -% There are several things one might want to do when a \cn{bib} entry -% is encountered: -% \begin{enumerate} -% -% \item Format and print it. This corresponds to the direct entry -% of bibliography items as described in section~2.1 of the users's -% guide. -% -% \item Copy it into a \fn{.bbl} file. This corresponds to the use -% of \cn{bibselect} and an external \fn{.ltb} database as described -% in section~2.2 of the user's guide. -% -% \item Store the full information in memory. This is done by -% \cn{bib*}. -% -% \end{enumerate} -% -% \begin{macro}{\bib} -% Here is where the rubber hits the road. -% \begin{macrocode} -\newcommand{\bib}{% - \begingroup - \@ifstar{% - \@tempswatrue - \let\@bibdef\star@bibdef - \BibItem - }{% - \@tempswafalse - \BibItem - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\BibItem} -% \MacroArgs -% \macroarg{1}{citekey} -% \macroarg{2}{bibtype} -% \begin{macrocode} -\newcommand{\BibItem}[2]{% - \def\@tempa{#1}% - \edef\@tempb{% - \@nx\@bibdef\@xp\@nx\csname setbib@#2\endcsname{#2}% - {\macrotext\@tempa}% - }% - \@tempb -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@bibdef} -% \cs{@bibdef} is a pointer to the procedure that should be handed -% the entry's key-value pairs. It has one of four values: -% \begin{enumerate} -% -% \item \cs{star@bibdef} -% -% \item \cs{normal@bibdef} -% -% \item \cs{copy@bibdef} -% -% \item \cs{selective@bibdef} -% -% \end{enumerate} -% \MacroArgs -% \macroarg{1}{\cs{setbib@}bibtype} -% \macroarg{2}{bibtype} -% \macroarg{3}{citekey} -% \begin{macrocode} -\AtBeginDocument{\let\@bibdef\normal@bibdef} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bib@exec} -% And \cs{bib@exec} is a pointer to the procedure that -% \cs{normal@bibdef} will invoke to process the key-value pairs -% after they've been parsed. It has one -% of these values: -% \begin{enumerate} -% -% \item \cs{bib@store} -% -% \item \cs{bib@print} -% -% \end{enumerate} -% \MacroArgs -% \macroarg{1}{citekey} -% \macroarg{2}{\cs{the}\cs{rsk@toks}} -% \macroarg{3}{\cs{setbib@}bibtype} -% \begin{macrocode} -\AtBeginDocument{\let\bib@exec\bib@print} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{\cs{@bibdef} Implementations} -% -% \begin{macro}{\normal@bibdef} -% \MacroArgs -% \macroarg{1}{\cs{setbib@}bibtype} -% \macroarg{2}{bibtype} -% \macroarg{3}{citekey} -% \begin{macrocode} -\def\normal@bibdef#1#2#3{% -% \end{macrocode} -% \cs{CurrentBibType} is used by \pkg{export-bibtex}, but there -% might be a better way to handle it. (dmj) -% \begin{macrocode} - \def\CurrentBibType{#2}% - \ifx\relax#1% - \amsrefs@error{Undefined entry type: #2}\@ehc - \let#1\setbib@misc - \fi - \RestrictedSetKeys{}{bib}% - {\bib@exec{#3}{\the\rsk@toks}{#1}\endgroup}% -} - -\let\@bibdef\normal@bibdef -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\star@bibdef} -% \MacroArgs -% \macroarg{1}{\cs{setbib@}bibtype} -% \macroarg{2}{bibtype} -% \macroarg{3}{citekey} -% \begin{macrocode} -\def\star@bibdef{% - \let\bib@exec\bib@store - \normal@bibdef -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\copy@bibdef} -% This is a variation that copies everything into the \fn{.bbl} -% file. Used by \cn{bibselect*} and \cn{bib*} inside \fn{.ltb} -% files. -% \begin{macrocode} -\def\copy@bibdef{% - \if@tempswa - \@xp\defer@bibdef - \else - \@xp\copy@bibdef@a - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\copy@bibdef@a} -% \begin{macrocode} -\def\copy@bibdef@a#1#2#3#4{% - \@open@bbl@file - \process@xrefs{#4}% - \bbl@write{% - \string\bib\if@tempswa*\fi{#3}{#2}\string{\iffalse}\fi - }% -% \end{macrocode} -% Since we're supplying our own definition of \cs{rsk@set}, we -% don't actually need the group argument, so we leave it out to -% save a few tokens. -% \begin{macrocode} - \RestrictedSetKeys{\global\let\rsk@set\bbl@copy}\@empty - {\bbl@write{\iffalse{\fi\string}^^J}% - \endgroup}{#4}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\catcode`\:=11 - -\def\modify@xref@fields{% - \let\set:bib'author\output@xref@a - \let\set:bib'editor\output@xref@a - \let\set:bib'translator\output@xref@a - \let\set:bib'journal\output@xref@a - \let\set:bib'publisher\output@xref@a - \def\set:bib'xref##1##2{\output@xref@{##1}\@empty}% -} - -\catcode`\:=12 - -\def\process@xrefs#1{% - \begingroup - \RestrictedSetKeys{\modify@xref@fields}{bib}{\the\rsk@toks}{#1}% - \endgroup -} - -\def\output@xref@a#1#2{% - \def\@tempa{#1}% - \lowercase{\def\@tempb{#1}}% - \ifx\@tempa\@tempb - \output@xref@{#1}% - \fi -} - -\def\output@xref@#1{% - \@ifnotempty{#1}{% - \@ifundefined{bi@#1}{}{% - \begingroup - \let\star@bibdef\copy@bibdef@a - \csname bi@#1\endcsname - \endgroup - }% - \@xp\g@undef\csname bi@#1\endcsname - }% -} -% \end{macrocode} -% -% \begin{macro}{\bbl@copy} -% \begin{macrocode} -\def\bbl@copy#1\endcsname#2{% - \begingroup - \def\@tempa{#1}% - \toks@{{#2}}% - \star@{\bbl@copy@a}{}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bbl@copy@a} -% \begin{macrocode} -\def\bbl@copy@a#1{% - \@ifnotempty{#1}{% - \add@toks@{*{#1}}% - }% - \bbl@write{ \space\@tempa=\the\toks@,}% - \endgroup - \rsk@resume -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\selective@bibdef} -% This is a variation that ignores anything not having a known -% citation key. Used by \cn{bibselect}. -% -% \MacroArgs -% \macroarg{1}{\cs{setbib@}bibtype} -% \macroarg{2}{bibtype} -% \macroarg{3}{citekey} -% \begin{macrocode} -\def\selective@bibdef#1#2#3{% - \@xp\selbibdef@a\csname b@#3\endcsname{#1}{#2}{#3}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\selbibdef@a} -% \begin{macrocode} -\def\selbibdef@a#1{% - \def\@tempa{\endgroup\@gobblefour}% - \ifx\relax#1\else \@xp\selbibdef@b#1\@nil \fi - \@tempa -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\selbibdef@b} -% \begin{macrocode} -\def\selbibdef@b#1#2#3\@nil{% - \ifx 1#2\let\@tempa\copy@bibdef\fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\defer@bibdef} -% This is a variation that ignores anything not having a known -% citation key. Used by \cn{bibselect}. -% -% \MacroArgs -% \macroarg{1}{\cs{setbib@}bibtype} -% \macroarg{2}{bibtype} -% \macroarg{3}{citekey} -% \macroarg{4}{key-val pairs} -% \begin{macrocode} -\def\defer@bibdef#1#2#3#4{% - \@xp\gdef\csname bi@#3\endcsname{% - \bib*{#3}{#2}{#4}% - }% - \@xp\addto@defer@list \csname bi@#3\endcsname - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bibdefer@list} -% \begin{macrocode} -\let\bibdefer@list\@empty -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\addto@defer@list} -% \begin{macrocode} -\def\addto@defer@list#1{% - \begingroup - \def\do{\@nx\do\@nx}% - \xdef\bibdefer@list{\bibdefer@list\do#1}% - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{\cs{bib@exec} Implementations} -% -% \begin{macro}{\bib@store} -% This is the easy one. It just stores the entire set of key-value -% pairs in \cs{bi@}\emph{citekey}. -% \begin{macrocode} -\def\bib@store#1{% - \afterassignment\@gobble - \@xp\xdef\csname bi@#1\endcsname -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\numeric@refs} -% \begin{macrocode} -\def\numeric@refs{00} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bib@print} -% \MacroArgs -% \macroarg{1}{citekey} -% \macroarg{2}{\cs{the}\cs{rsk@toks}} -% \macroarg{3}{\cs{setbib@}bibtype} -% \begin{macrocode} -\def\bib@print#1#2#3{% - \bib@start{#1}% - \let\setbib@@#3% - #2\relax % execute definitions locally - \bib@resolve@xrefs - \bib@field@patches - \bib@selectlanguage - \generate@label - \bib'setup - \bib@cite{#1}% - \kern\@ne sp - \ifx\setbib@@\setbib@article - \ifx\bib'booktitle\@empty - \ifx\bib'book\@empty - \ifx\bib'conference\@empty - \else - \let\setbib@@\setbib@incollection - \fi - \else - \let\setbib@@\setbib@incollection - \fi - \else - \let\setbib@@\setbib@incollection - \fi - \fi - \setbib@@ - \bib@end -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bib@print@inner} -% Note that the order of the arguments is reversed with respect to -% \cs{bib@print}. Maybe that isn't such a great idea. -% \MacroArgs -% \macroarg{1}{\cs{setbib@}bibtype} -% \macroarg{2}{\cs{the}\cs{rsk@toks}} -% \begin{macrocode} -\def\bib@print@inner#1#2{% - \begingroup - #2\relax % execute definitions locally - \bib@field@patches - \bib'setup - #1% - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\current@citekey} -% \begin{macrocode} -\let\current@citekey\@empty -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\prev@citekey} -% \begin{macrocode} -\let\prev@citekey\@empty -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bib@start} -% There used to be more to it. -% \begin{macrocode} -\def\bib@start#1{% - \begingroup - \def\current@citekey{#1}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bib@end} -% Instead of being handled by \cs{bib@end}, ending punctuation is -% normally handled via the \fld{transition} field (q.v.) -% \begin{macrocode} -\def\bib@end{% - \relax - \@xp\PrintBackRefs\@xp{\CurrentBib}% - \par - \save@primary - \global\let\prev@citekey\current@citekey - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Resolving cross-references} -% -% \begin{macro}{\bib@resolve@xrefs} -% \begin{macrocode} -\def\bib@resolve@xrefs{% - \xref@check@c\bib'xref - \xref@check@a\bib'author - \xref@check@a\bib'editor - \xref@check@a\bib'translator - \xref@check@b\bib'journal - \xref@check@b\bib'publisher -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\xref@check@a} -% Resolve a contributor (typically a \cn{DefineName}) alias. -% Requires rebuilding the list. -% \begin{macrocode} -\def\xref@check@a#1{% - \ifx\@empty#1\relax - \else - \begingroup - \toks@\@emptytoks - \@temptokenb\@emptytoks - \series@index\z@ - \def\name{\xref@check@aa#1}% - #1\relax - \edef\@tempa{% - \def\@nx#1{\the\toks@}% - \the\@temptokenb - }% - \@xp\endgroup - \@tempa - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\xref@check@aa} -% \begin{macrocode} -\def\xref@check@aa#1#2{% - \advance\series@index\@ne - \def\@tempa{#2}% - \lowercase{\def\@tempb{#2}}% - \ifx\@tempa\@tempb - \ifx\@tempa\@empty - \add@toks@{\name{}}% - \else - \@ifundefined{bi@#2}{% - \BibAbbrevWarning{#2}% - \add@toks@{\name{#2}}% - }{% - \xref@check@ab#1{#2}% - }% - \fi - \else - \add@toks@{\name{#2}}% - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\xref@check@ab} -% \begin{macrocode} -\def\xref@check@ab#1#2{% - \csname bi@#2\endcsname - \ifx\@empty\bib'name - \@temptokena{#2}% - \else - \@temptokena\@xp{\bib'name}% - \get@property\@tempa\bib'name - \edef\@tempa{% - \@nx\addto@hook\@temptokenb{% - \@nx\reset@nth@property\@nx#1\the\series@index{\@tempa}% - }% - }% - \@tempa - \fi - \edef\@tempa{\@nx\add@toks@{\@nx\name{\the\@temptokena}}}% - \@tempa -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\xref@check@b} -% Resolve a \fld{journal} or \fld{publisher} alias (typically a -% \cn{DefinePublisher} or \cn{DefineJournal} alias). -% \begin{macrocode} -\def\xref@check@b#1{% - \ifx\@empty#1% - \else - \toks@\@xp{#1}% - \edef\@tempb{\lowercase{\def\@nx\@tempa{\the\toks@}}}% - \@tempb - \ifx\@tempa#1\relax % all lowercase - \@ifundefined{bi@#1}{% - \BibAbbrevWarning{#1}% - }{% -% \end{macrocode} -% We pass control to \cs{xref@check@c} here to handle inheritance -% of multiple fields properly. This means some of the checking -% we've just done gets done again, but I can live with that. -% \begin{macrocode} - \let#1\@empty - \xref@check@c\@tempa - }% - \fi - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\xref@check@c} -% Resolve an \fld{xref} field. -% \begin{macrocode} -\def\xref@check@c#1{% - \ifx#1\@empty - \else - \begingroup - \let\DSK@def\xref@add@toks - \let\DSK@append\xref@append - \toks@\@emptytoks - \let\bib@reset\@empty -% \end{macrocode} -% The \cs{@for} here is just a fancy way of expanding \arg{1}. (Or -% is it?) -% \begin{macrocode} - \@for\xref@ID:=#1\do{% - \@ifundefined{bi@\xref@ID}{% - \XRefWarning{\xref@ID}% - }{% - \csname bi@\xref@ID\endcsname - }% - }% - \edef\@tempa{\endgroup\the\toks@}% - \@tempa - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\xref@add@toks} -% If any title occurs in an \fld{xref}ed item, assume that it is a book -% title. This might not always be the best assumption? Let's see how -% it goes though. [mjd,2001-12-11] -% -% \MacroArgs -% \macroarg{1}{\cs{bib'}field} -% \macroarg{2}{value} -% \begin{macrocode} -\def\xref@add@toks#1#2#3{% - \ifx#1\@empty - \edef\@tempa{% - \@nx\add@toks@{\@xp\@nx\csname\rkv@setter#1\endcsname{#2}{#3}}% - }% - \@tempa - \else - \in@\bib'title{#1}% - \ifin@ - \ifx\bib'booktitle\@empty - \edef\@tempa{% - \@nx\add@toks@{% - \@xp\@nx\csname set:bib'booktitle\endcsname - }% - }% - \@tempa - \add@toks@{{#2}{#3}}% - \fi - \fi - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\def\xref@append#1#2#3#4{% - \edef\@tempa{% - \@nx\add@toks@{\@xp\@nx\csname\rkv@setter#2\endcsname{#3}{#4}}% - }% - \@tempa -} -% \end{macrocode} -% -% \begin{macro}{\BibAbbrevWarning} -% \begin{macrocode} -\def\BibAbbrevWarning#1{\amsrefs@warning{Abbreviation '#1' undefined}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\XrefWarning} -% \begin{macrocode} -\def\XRefWarning#1{\amsrefs@warning{Xref '#1' undefined}} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Bib field preprocessing} -% -% \begin{macro}{\current@primary} -% \begin{macrocode} -\let\current@primary\@empty -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\previous@primary} -% \begin{macrocode} -\let\previous@primary\@empty -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\save@primary} -% \begin{macrocode} -\IfOption{nobysame}{% - \let\save@primary\@empty -}{% - \def\save@primary{% - \global\let\previous@primary\current@primary - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bib@field@patches} -% \begin{macrocode} -\def\bib@field@patches{% - \ifx\bib'author\@empty - \ifx\bib'editor\@empty - \let\current@primary\bib'translator - \let\print@primary\PrintTranslatorsA - \else - \let\current@primary\bib'editor - \let\print@primary\PrintEditorsA - \fi - \else - \let\current@primary\bib'author - \let\print@primary\PrintAuthors - \fi - \ifx\bib'address\@empty - \let\bib'address\bib'place - \fi - \ifx\bib'organization\@empty - \ifx\bib'institution\@empty - \let\bib'organization\bib'school - \else - \let\bib'organization\bib'institution - \fi - \fi - \ifx\bib'date\@empty - \ifx\bib'year\@empty - \let\bib@year\bib'status - \else - \bib@parsedate\bib'year - \fi - \else - \bib@parsedate\bib'date - \fi -% \end{macrocode} -% Example~21 on page~74 of \emph{Mathematics into -% Type}~\cite{SOS99} seems to indicate that when the year serves as -% the volume number, the date should be suppressed. If so, this is -% where that is done. -% \begin{macrocode} - \def\@tempa{year}% - \ifx\bib'volume\@tempa - \let\bib'volume\bib@year - \let\bib'date\@empty - \fi -% \end{macrocode} -% \cs{bib'language} is used for producing the printed rendition of -% the language. \cs{bib@language} needs to be in the form required by -% \cn{selectlanguage}. -% \begin{macrocode} - \bib@language@fixup -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Date setup} -% -% \begin{macro}{\bib@year} -% \begin{macrocode} -\let\bib@year\@empty -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bib@month} -% \begin{macrocode} -\let\bib@month\@empty -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bib@day} -% \begin{macrocode} -\let\bib@day\@empty -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bib@parsedate} -% Parse an ISO 8601 date into its year, month and day components, -% but without actually verifying that any of the components are -% numeric. Hmmm. -% \begin{macrocode} -\def\bib@parsedate#1{% - \@xp\bib@parsedate@a#1---\@nil -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bib@parsedate@a} -% \begin{macrocode} -\def\bib@parsedate@a#1-#2-#3-#4\@nil{% - \def\bib@year{#1}% - \def\bib@month{#2}% - \def\bib@day{#3}% -% \end{macrocode} -% The rest of this macro tries to rewrite \cs{bib'date} into a -% normalized form. I'm not sure if this is a good idea. -% \begin{macrocode} - \ifx\@empty\bib@day - \ifx\@empty\bib@month - \let\bib'date\bib@year - \else - \def\bib'date{#1-#2}% - \fi - \else - \def\bib'date{#1-#2-#3}% - \fi -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Language setup} -% -% \begin{macro}{\bib@language@fixup} -% \begin{macrocode} -\def\bib@language@fixup{% - \ifx\bib'hyphenation\@empty - \ifx\bib'language\@empty - \let\bib@language\biblanguagedefault - \else - \let\bib@language\bib'language - \fi - \else - \let\bib@language\bib'hyphenation - \fi - \def\@tempa##1 ##2\@nil{\lowercase{\def\bib@language{##1}}}% -% \end{macrocode} -% The mysterious \cs{@firstofone} here is to preserve the space -% before the \cs{@nil}. -% \begin{macrocode} - \@firstofone{\@xp\@tempa\bib@language} \@nil -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bib@selectlanguage} -% For \cn{bib} purposes we are interested mainly in testing whether -% the hyphenation patterns are the same. So we use an -% if-same-patterns test (by which \pkg{babel}'s `english' and -% `american' compare as equal) rather than an if-same-language test. -% Also, the way that the \cn{selectlanguage} command checks to see -% whether a language has been properly defined for babel use is to -% see if \cs{dateLANGUAGE} is defined. And if we tried to select an -% undefined language, the result would be a \lat/ error. -% \begin{macrocode} -\def\bib@selectlanguage{% - \@ifsame@patterns{\languagename}{\bib@language}{}{% - \@ifundefined{date\bib@language}{}{% - \@xp\selectlanguage\@xp{\bib@language}% - }% - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@ifsame@patterns} -% \begin{macrocode} -\def\@ifsame@patterns#1#2{% - \@xp\@ifsamepat\csname l@#1\@xp\endcsname\csname l@#2\endcsname -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@ifsamepat} -% \begin{macrocode} -\def\@ifsamepat#1#2{% - \ifnum \ifx\relax#1\m@ne\else#1\fi = \ifx\relax#2\m@ne\else#2\fi - \@xp\@firstoftwo - \else - \@xp\@secondoftwo - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\languagename} -% \begin{macro}{\biblanguageEnglish} -% \begin{macro}{\biblanguagedefault} -% \begin{macro}{\bib@language} -% \begin{macrocode} -\providecommand{\languagename}{english} -\def\biblanguageEnglish{english} -\let\biblanguagedefault\biblanguageEnglish -\let\bib@language\@empty -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \subsubsection{Citation label setup} -% -% \begin{macro}{\generate@label} -% \begin{macrocode} -\let\generate@label\relax -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cite@label} -% \begin{macrocode} -\def\cite@label{\@currentlabel} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\alpha@label} -% \begin{macrocode} -\let\alpha@label\relax -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bib@cite} -% When \cs{bib@cite} is called, author name and year are available -% in \cs{bib@author} and \cs{bib@year}. -% \MacroArgs -% \macroarg{1}{citekey} -% \begin{macrocode} -\def\bib@cite#1{% - \def\CurrentBib{#1}% - \alpha@label % modify \thebib if necessary - \item\leavevmode - \SK@\SK@@label{#1}% - \@xp\bib@cite@a\csname b@#1\endcsname - \bibcite@write{#1}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\def\bib@cite@a#1{% - \ifx\relax#1% - \begingroup - \auto@protect\etaltext - \protected@edef\@tempa{% - \gdef\@nx#1{% - \@nx\citesel 01{\cite@label}{\bib@label@year}{}% - }% - }% - \@xp\endgroup - \@tempa - \else - \@xp\bib@cite@check\@xp#1#1\@empty\@empty\@empty\@empty\@empty - \fi -} -% \end{macrocode} -% -% \begin{macro}{\bib@cite@check} -% For the citation key we want to check if it is already defined. But -% there is a slight problem. There is already one control -% sequence in use for each bibliography entry, to store the label or -% the author/year information needed by \cn{cite}. If we introduce -% another control sequence to check whether a particular cite is -% multiply defined, then we double the number of control sequences -% used. For a large bibliography in a book this is fairly serious. -% This is addressed by using a \cs{citesel} function. -% -% \MacroArgs -% \macroarg{1}{\cs{b@}citekey} -% \macroarg{2}{\cs{citesel}} -% \macroarg{3}{cited?} -% \macroarg{4}{used?} -% \macroarg{5}{label} -% \macroarg{6}{year} -% \macroarg{7}{backrefs} -% \begin{macrocode} -\def\bib@cite@check#1#2#3#4#5#6#7{% - \ifx 1#4\relax - \DuplicateBibKeyWarning - \else -% \end{macrocode} -% This has gotten \emph{way} out of hand. -% \begin{macrocode} - \begingroup - \auto@protect\etaltext - \@apply\auto@protect\amsrefs@textsymbols - \@apply\auto@protect\amsrefs@textaccents - \@tempswafalse - \in@\CitePrintUndefined{#5}% - \ifin@ - \let\@tempa\@empty - \else - \def\@tempa{#5}% - \fi - \ifx\@tempa\@empty - \else - \@xp\ifx\@xp\@currentlabel\cite@label - \edef\@tempb{\cite@label}% - \else - \let\@tempb\cite@label - \fi - \ifx\@tempa\@tempb - \def\@tempa{#6}% - \ifx\@tempa\bib@label@year - \else - \@tempswatrue - \fi - \else - \@tempswatrue - \fi - \fi - \if@tempswa - \@ifempty{#6}{% - \def\@tempa{#5}% - \let\@tempb\cite@label - }{% - \def\@tempa{#5, #6}% - \def\@tempb{\cite@label, \bib@label@year}% - }% - \amsrefs@warning{Citation label for \extr@cite#1 is - changing from `\@tempa ' to `\@tempb '}% - \fi - \protected@edef\@tempa{% - \gdef\@nx#1{% - \@nx\citesel #31{\cite@label}{\bib@label@year}{#7}% - }% - }% - \@xp\endgroup - \@tempa - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bib@label@year} -% \begin{macrocode} -\let\bib@label@year\@empty -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DuplicateBibKeyWarning} -% \begin{macrocode} -\def\DuplicateBibKeyWarning{% - \amsrefs@warning{% - Duplicate \protect\bib\space key - `\CurrentBib ' detected\MessageBreakNS}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bibcite@write} -% \begin{macrocode} -\def\bibcite@write#1{% - \if@filesw - \let\citesel\citesel@write - \csname b@#1\endcsname - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\citesel@write} -% \begin{macrocode} -\def\citesel@write#1#2#3#4#5{% - \begingroup - \toks@{{#3}{#4}}% - \immediate\write\@auxout{\string\bibcite{\CurrentBib}{\the\toks@}}% - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% Because duplicate bibs are caught immediately, we don't need -% \cs{bibcite} to run \cs{@testdef}. -% \begin{macrocode} -\AtEndDocument{\let\bibcite\@gobbletwo} -% \end{macrocode} -% -% \subsubsection{Printing the bibliography} -% -% \begin{macro}{\bibname} -% \begin{macrocode} -\providecommand{\bibname}{Bibliography} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\refname} -% \begin{macrocode} -\providecommand{\refname}{References} -% \end{macrocode} -% \end{macro} -% -% \begin{environment}{bibchapter} -% We need to take a little extra trouble here to pre-expand the -% \cn{bibname}. -% \begin{macrocode} -\newenvironment{bibchapter}[1][\bibname]{% - \begingroup - \protected@edef\@{\endgroup\protect\chapter*{#1}}% - \@ -}{\par} -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{bibsection} -% And here to pre-expand the \cn{refname}. -% \begin{macrocode} -\newenvironment{bibsection}[1][\refname]{% - \begingroup - \protected@edef\@{\endgroup\protect\section*{#1}}% - \@ -}{\par} -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{bibdiv} -% Here we try to guess whether this is a book-like document or an -% article-like document. -% \begin{macrocode} -\@ifundefined{chapter}{% - \newenvironment{bibdiv}{\bibsection}{\endbibsection} -}{% - \newenvironment{bibdiv}{\bibchapter}{\endbibchapter} -} -% \end{macrocode} -% \end{environment} -% -% This is what the standard \cls{book} class has for the bibliography -% title: -% \begin{verbatim} -% \newenvironment{thebibliography}[1] -% {\chapter*{\bibname -% \@mkboth{\MakeUppercase\bibname}{\MakeUppercase\bibname}}% -% \list{\@biblabel{\@arabic\c@enumiv}}% -%\end{verbatim} -% -% \begin{environment}{thebibliography} -% \begin{macrocode} -\renewenvironment{thebibliography}[1]{% - \bibdiv - \biblist[\resetbiblist{#1}]% -}{% - \endbiblist - \endbibdiv -} -% \end{macrocode} -% \end{environment} -% -% \subsection{Name, journal and publisher abbreviations} -% -% The commands \cn{DefineName}, \cn{DefinePublisher}, and -% \cn{DefineJournal} are provided to make abbreviations a little -% easier. -% -% \begin{macro}{\DefineName} -% \begin{macrocode} -\newcommand{\DefineName}[2]{% - \bib*{#1}{name}{name={#2}}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DefineJournal} -% \begin{macrocode} -\newcommand{\DefineJournal}[4]{% - \bib*{#1}{periodical}{ - issn={#2}, - journal={#4} - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DefinePublisher} -% Note that an explicit \fld{address} field in a \cn{bib} entry will -% override the \fld{address} supplied as part of a -% \cn{DefinePublisher}. -% \begin{macrocode} -\newcommand{\DefinePublisher}[4]{% - \bib*{#1}{publisher}{% - publisher={#3}, - address={#4} - }% -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Processing \fn{.ltb} files} -% -% If you have a file that contains \pkg{amsrefs}-style -% \cn{bib} entries, you can use it as a database and extract items -% from it for use in another document. In typical relatively simple -% scenarios, the extraction can be done by \lat/ itself on the first -% pass, so that citations in the text will be successfully resolved -% on the second pass (possibly even the first, depending on what kind -% of bibliography sorting is used). -% -% \begin{macro}{\bibselect} -% \begin{macrocode} -\newcommand{\bibselect}{% - \@ifstar{% - \let\@bibdef\copy@bibdef - \BibSelect - }{% - \let\@bibdef\selective@bibdef - \BibSelect - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\BibSelect} -% \begin{macrocode} -\newcommand{\BibSelect}[2][\bblname]{% - \if@filesw - \typeout{Trying to create bbl file `#1.bbl' ...}% - \def\bibselect@msg{% - \typeout{ ... rats. Unable to create bbl file.}% - }% - \let\@open@bbl@file\OpenBBLFile - \@for\@tempa:=#2\do{\ReadBibData{\@tempa}}% - \fi - \@close@bbl@file - \@apply\g@undef\bibdefer@list - \global\let\bibdefer@list\@empty -% \end{macrocode} -% Now read the \fn{.bbl} file we just created. -% \begin{macrocode} - \let\@bibdef\normal@bibdef - \@input@{#1.bbl}% - \let\BibSelect\MultipleBibSelectWarning -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\MultipleBibSelectWarning} -% \begin{macrocode} -\newcommand\MultipleBibSelectWarning[2][]{% - \amsrefs@warning{% - Multiple \string\bibselect 's found (only one - \string\bibselect\space per biblist environment is allowed)% - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bblname} -% \begin{macrocode} -\def\bblname{\jobname} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bib@dbfile} -% \begin{macrocode} -\newread\bib@dbfile -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ReadBibData} -% \begin{macrocode} -\newcommand{\ReadBibData}[1]{% - \IfFileExists{#1.ltb}{% - \openin\bib@dbfile=\@filef@und \relax - }{% - \IfFileExists{#1.ltx}{% - \openin\bib@dbfile=\@filef@und \relax - }{% - \IfFileExists{#1.tex}{% - \openin\bib@dbfile=\@filef@und \relax - }{% - \begingroup - \NoBibDBFile{#1}% - \let\ReadBibData@a\endgroup - }% - }% - }% - \ReadBibData@a -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\NoBibDBFile} -% \begin{macrocode} -\def\NoBibDBFile#1{% - \amsrefs@warning{No data file #1.ltb (.ltx, .tex) found}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ReadBibData@a} -% \begin{macrocode} -\def\ReadBibData@a{% - \ProvidesFile{\@filef@und}\relax - \begingroup - \let\star@bibdef\defer@bibdef - \ReadBibLoop - \endgroup - \closein\bib@dbfile -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ReadBibLoop} -% \begin{macrocode} -\def\ReadBibLoop{% - \ifeof\bib@dbfile - \@xp\@gobble - \else - \read\bib@dbfile to\CurLine -% \end{macrocode} -% The \cs{@empty} is in case \cs{CurLine} is empty. -% \begin{macrocode} - \@xp\ReadBibLoop@a\CurLine\@empty\@nil - \fi - \ReadBibLoop -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ReadBibLoop@e} -% This traps top-level \cn{bib} commands. Note that: -% \begin{itemize} -% -% \item -% If \cs{CurLine} doesn't contain a complete \cn{bib} entry, the -% code chokes. -% -% \item -% I \cn{bib} is not the very first non-space token in a line, it -% will not be recognized. -% -% \end{itemize} -% -% \begin{macrocode} -\long\def\ReadBibLoop@a#1#2\@nil{% - \ifx\bib#1% - \CurLine % just exec it - \else -% \end{macrocode} -% We're not done yet. The line may contain something like -% \cn{DefineName}, so we need to expand the first macro in the line -% and see if it starts with \cn{bib}. But first we check to make -% sure that the token we're about to expand isn't \cn{endinput}. -% \begin{macrocode} - \ifx\endinput#1% - \let\ReadBibLoop\@empty - \else -% \end{macrocode} -% And this \cs{@empty} is for the admittedly unlikely case that -% \cs{CurLine} isn't empty, but its expansion is. -% \begin{macrocode} - \@xp\ReadBibLoop@b#1#2\@empty\@nil - \fi - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ReadBibLoop@b} -% \begin{macrocode} -\long\def\ReadBibLoop@b#1#2\@nil{% - \ifx\bib#1% - \CurLine % just exec it - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\let\bbl@out=\relax -\let\bbl@write\@gobble -\let\@open@bbl@file\relax -\let\@close@bbl@file\relax -% \end{macrocode} -% -% \begin{macro}{\OpenBBLFile} -% \begin{macrocode} -\def\OpenBBLFile{% - \if@filesw - % Just use the next unused output stream - \count@\count17 - \advance\count@\@ne - \ifnum\count@<\sixt@@n - \global\chardef\bbl@out=\count@ - \immediate\openout\bbl@out=\bblname.bbl\relax - \global\let\@close@bbl@file\CloseBBLFile - \gdef\bbl@write{\immediate\write\bbl@out}% - \else - \ch@ck\count@\sixt@@n\write - \fi - \fi - \global\let\@open@bbl@file\relax -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\CloseBBLFile} -% \begin{macrocode} -\def\CloseBBLFile{% - \immediate\closeout\bbl@out\relax - \global\let\@close@bbl@file\relax - \global\let\bbl@write\@gobble - \global\let\bbl@out\relax -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Citation processing} -% -% \subsubsection{The \cs{citesel} structure} -% -% The information used by \cn{cite} for key \texttt{moo} is stored in -% \cs{b@moo} in the form -% \begin{verbatim} -% \citesel{status1}{status2}{label}{year}{backref-info} -%\end{verbatim}% -% -% The first status flag is~1 if this key has already been cited -% earlier in the same document; 0~otherwise. This is used in some -% bibliography schemes to print a full list of author names for the first -% citation and an abbreviated author list for subsequent citations. -% -% The second status flag is~1 if this key has already been used by a -% define-cite command (such as \cn{bib}); 0~otherwise. This makes it -% possible to issue a warning message as soon as the conflict is seen, -% on the first \lat/ run, instead of on a subsequent run during the -% processing of the \fn{.aux} file. -% -% When an author/year citation scheme is in use, args 3 and~4 hold -% respectively author names and year. Otherwise arg~3 simply holds -% a cite label and arg~4 is empty. -% -% And finally, arg~5 holds a list of backref pointers indicating the -% locations in the document where this entry has been cited. -% -% \begin{macro}{\citesel@update} -% \begin{macrocode} -\def\citesel@update#1#2#3#4#5#6{% - \gdef#6{\citesel 1#2{#3}{#4}{#5}}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\citesel@number} -% \begin{macrocode} -\def\citesel@number#1#2#3#4#5{#3} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\citesel@year} -% \begin{macrocode} -\def\citesel@year#1#2#3#4#5{#4} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\citesel} -% \begin{macrocode} -\let\citesel\citesel@number -% \end{macrocode} -% \end{macro} -% -% \subsubsection{The basic \cn{cite} command} -% -% Here is the difference between the various optional forms of -% \cn{cite}: -% \begin{verbatim} -% \cite{xyz} -> \cite@a\citesel{xyz}{} -% -> \cite@bc\b@xyz\citesel{} -% -% \cite{xyz}*{blub} -> \cite@a\citesel{xyz}{blub} -% -> \cite@bc\b@xyz\citesel{blub} -% -% \cite[blub]{xyz} -> \cite@a\citesel{xyz}{blub} -% -> \cite@bc\b@xyz\citesel{blub} -%\end{verbatim} -% -% Canceling the old \lat/ definition of \verb*'\cite ' prevents -% certain problems that could arise with the \pkg{showkeys} package. -% \begin{macrocode} -\expandafter\let\csname cite \endcsname\relax -% \end{macrocode} -% -% \begin{macro}{\cite} -% Need to handle the standard [...] option for compatibility's sake. -% \begin{macrocode} -\renewcommand{\cite}[2][]{% - \if\cite@single#2,\@gobble \else\MultipleCiteKeyWarning{#2}{#1}\fi - \@ifempty{#1}{% - \cites@o{#2}% - }{% - \ObsoleteCiteOptionWarning - \cites@a{*{#1}}{#2}% - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\MultipleCiteKeyWarning} -% \begin{macrocode} -\def\MultipleCiteKeyWarning#1#2{% - \amsrefs@warning{% - Use of \string\cites\space is recommended instead of % - \string\cite\space\MessageBreak - for multiple cites '#1'}% - \@ifnotempty{#2}{% - \amsrefs@warning{Star option requires \string\citelist\space here}% - }% - \global\let\MultipleCiteKeyWarning\@gobbletwo -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ObsoleteCiteOptionWarning} -% \begin{macrocode} -\def\ObsoleteCiteOptionWarning{% - \amsrefs@warning{% - The form \string\cite{...}*{...} is recommended\MessageBreak - instead of \string\cite[...]{...}}% - \global\let\ObsoleteCiteOptionWarning\@empty -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cite@single} -% \begin{macrocode} -\edef\cite@single#1,#2{\iffalse{\fi\iffalse{\fi\string}#2.\string}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cites@o} -% \begin{macrocode} -\def\cites@o#1{\star@{\cites@oo{#1}}{}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cites@oo} -% \begin{macrocode} -\def\cites@oo#1#2{\@ifempty{#2}{\cites@a{}{#1}}{\cites@a{*{#2}}{#1}}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cites@a} -% \begin{macrocode} -\def\cites@a#1#2{% - \begingroup - \toks@{\endgroup \cites@b{#1}}% - \vdef\@tempa{#2}% - \edef\@tempa{% - \the\toks@ \@firstofone{\@xp\zap@space\@tempa} \@empty - }% - \@tempa,\@empty - \edef\@tempa{\endgroup\@nx\citelist{\the\toks@}}% - \@tempa -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cites@b} -% \begin{macrocode} -\def\cites@b#1#2,#3{% - \begingroup - \toks@{\InnerCite{#2}#1}% - \ifx\@empty#3\@xp\@gobble\fi - \cites@c#3% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cites@c} -% \begin{macrocode} -\def\cites@c#1,#2{% - \add@toks@{\InnerCite{#1}}% - \ifx\@empty#2\@xp\@gobble\fi - \cites@c#2% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\citeleft} -% \begin{macro}{\citeright} -% \begin{macro}{\citemid} -% \begin{macro}{\citepunct} -% These variables are named to follow the precedent set by -% Arseneau's \pkg{cite} package. \cs{citemid} is used to separate a -% citation label from additional information such as \qq{Theorem -% 4.9}. \cs{citepunct} is used to separate multiple cites, unless -% one of the cites has additional associated information, in which -% case \cs{CiteAltPunct} is used. -% \begin{macrocode} -\def\citeleft{[} -\def\citeright{]} -% \end{macrocode} -% \begin{macrocode} -\def\citemid{,\penalty9999 \space} -\def\citepunct{,\penalty9999 \hskip.13em plus.1em minus.05em\relax} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\citeAltPunct} -% When a citation list contains one or more citations with optional -% arguments, we replace \cs{citemid} by \cs{CiteAltPunct}. -% \begin{macrocode} -\def\citeAltPunct{;\ } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\citeform} -% This is used for formatting the citation label. It can be used, -% for example, to bolden the labels (as in \cls{amsbook} and -% \cls{amsproc}) or to do more elaborate things such as convert the -% numbers to roman numerals. By default, it's just a no-op. -% -% Note that currently there is no corresponding macro for changing -% the formatting of \cn{cite}'s optional argument. This is -% probably a bug. -% \begin{macrocode} -\providecommand{\citeform}{\@firstofone} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\citelist} -% The \cs{@citelist} indirection turns out to be helpful in -% implementing the \cs{ocites} command for the \opt{author-year} -% option. -% \begin{macrocode} -\DeclareRobustCommand{\citelist}{\@citelist} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@citelist} -% \begin{macrocode} -\def\@citelist#1{% - \leavevmode - \begingroup - \@citestyle - \citeleft\nopunct % suppress first \citepunct - \cite@begingroup - \in@*{#1}% - \ifin@ - \let\citepunct\citeAltPunct - \fi - \let\cite@endgroup\@empty - \cites@init - \def\citeleft{\@addpunct{\citepunct}}% - \let\citeright\ignorespaces - \def\cite{\InnerCite}% - \process@citelist{#1}% - \endgroup - \citeright - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@citestyle} -% Reset the font to an upright, medium font (e.g. \fnt{cmr}), per -% AMS style. Also set $\cs{mathsurround} = 0\,\mathrm{pt}$ just in -% case there are subscripts in the cite numbers (from -% \cn{etalchar}, for example). -% \begin{macrocode} -\providecommand{\@citestyle}{\m@th\upshape\mdseries} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cite@begingroup} -% Grouping that encloses an entire cite block (a single cite or a -% list of cites). -% \begin{macrocode} -\def\cite@begingroup{\begingroup\let\cite@begingroup\relax} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cite@endgroup} -% \begin{macrocode} -\let\cite@endgroup\endgroup -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cites@init} -% This needs to be called at the beginning of a list of cites to -% reset a few things. -% \begin{macrocode} -\def\cites@init{% - \gdef\prev@names{???}% - \let\cites@init\@empty -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\InnerCite} -% \begin{macrocode} -\newcommand{\InnerCite}[1]{\star@{\cite@a\citesel{#1}}{}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cite@a} -% The job of \cs{cite@a} is to convert the cite key to all catcode-12 -% characters and remove any spaces it might contain before passing -% it on to \cs{cite@b}. -% -% \MacroArgs -% \macroarg{1}{\cs{CITESEL}} -% \macroarg{2}{citekey} -% \begin{macrocode} -\def\cite@a#1#2{% - \BackCite{#2}% - \cite@begingroup - \cites@init - \let\citesel#1\relax - \ifx\citesel\citesel@author - \let\citeleft\@empty - \let\citeright\@empty - \fi - \begingroup - \toks@{\endgroup \cite@b}% - \vdef\@tempa{#2}% - \edef\@tempa{% - \the\toks@{\@firstofone{\@xp\zap@space\@tempa} \@empty}% - }% - \@tempa -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cite@b} -% \MacroArgs -% \macroarg{1}{citekey} -% \macroarg{2}{star-optional-arg} -% \begin{macrocode} -\def\cite@b#1#2{% - \@xp\cite@bc\csname b@#1\@xp\endcsname {#1}{#2}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cite@bc} -% If it's uninitialized, plug in an empty cite structure. -% \cs{cite@bc} should be executed only once for a given instance of a -% cite key. All further processing should go through \cs{cite@cj}. -% \begin{macrocode} -\def\cite@bc#1#2{% - \ifx#1\@@undefined \global\let#1\relax \fi - \ifx#1\relax \global\let#1\empty@cite \fi - \@xp\cite@nobib@test#1{}{}{}{}\@nil#1% - \cite@cj#1% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\empty@cite} -% \begin{macrocode} -\def\empty@cite{\citesel 00{}{}{}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cite@nobib@test} -% If arg 4 is empty, it means there wasn't any \cn{bib} command that -% defined a valid label. -% -% \MacroArgs -% \macroarg{1}{\cs{citesel}} -% \macroarg{2}{cited?} -% \macroarg{3}{used?} -% \macroarg{4}{label} -% \macroarg{5}{backrefs} -% \macroarg{6}{\cs{b@}citekey} -% \begin{macrocode} -\def\cite@nobib@test#1#2#3#4#5\@nil#6{% - \@ifempty{#4}{% - \G@refundefinedtrue - \UndefinedCiteWarning#6% - \xdef#6{\@nx\citesel #2#3{% - \@nx\CitePrintUndefined{\extr@cite#6}}{}{}}% - }{}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\UndefinedCiteWarning} -% This is a copy of the standard warning from \cs{@citex}. -% \begin{macrocode} -\def\UndefinedCiteWarning#1{% - \@latex@warning{% - Citation `\extr@cite#1' on page \thepage\space undefined}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\CitePrintUndefined} -% \begin{macrocode} -\DeclareRobustCommand{\CitePrintUndefined}[1]{% - \begingroup\fontshape{n}\fontseries\mddefault \ttfamily ?#1\endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\CPU@normal} -% This has to be a \cs{let}, not a \cs{def}. -% \begin{macrocode} -\let\CPU@normal\CitePrintUndefined -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cite@cj} -% \MacroArgs -% \macroarg{1}{\cs{b@}citekey} -% \macroarg{2}{star-optional-arg} -% \begin{macrocode} -\def\cite@cj#1#2{% - \leavevmode - \begingroup - \cite@cb#1% write info to aux file - \ar@SK@cite#1% - \@citeleft - \ar@hyperlink{#1}% - \@ifnotempty{#2}{\citemid{#2}}% - \citeright - \endgroup - \ignorespaces % ignore spaces inside \citelist - \cite@endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@citeleft} -% The following definition provides some indirection that helps to -% deal with author-year object cites. -% \begin{macrocode} -\def\@citeleft{\citeleft} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cite@cb} -% \begin{macrocode} -\def\cite@cb#1{% - \if@filesw - \immediate\write\@auxout{\string\citation{\extr@cite#1}}% - \fi -% \end{macrocode} -% Define \cs{citesel} to make \cs{b@whatever} update itself. -% \begin{macrocode} - \begingroup - \let\citesel\citesel@update - #1#1% - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\extr@cite} -% Extract \emph{citekey} from \cs{b@}\emph{citekey}. -% \begin{macrocode} -\def\extr@cite{\@xp\@gobblethree\string} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Fancier \cn{cite} commands} -% -% \begin{macro}{\cites} -% A list of simple cites. Make it robust in case used inside a figure -% caption. (But then also, by the way, listoffigures should provide -% special handling.) -% \begin{macrocode} -\DeclareRobustCommand{\cites}{\cites@a{}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\citen} -% This is just to keep the showkeys package from clobbering the wrong -% part of our definition of \cn{cite}: -% \begin{macrocode} -\providecommand{\citen}{\ocite} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ycite} -% \cn{cite} gets redefined inside of \cn{citelist}, so we need to -% \cs{def} \cn{ycite} here instead of just \cs{let}ting everything -% to \cn{cite}. -% \begin{macrocode} -\def\ycite{\cite} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ycites} -% \begin{macrocode} -\let\ycites\cites -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ocite} -% \begin{macrocode} -\let\ocite\ycite -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ocites} -% \begin{macrocode} -\let\ocites\cites -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\fullcite} -% \begin{macrocode} -\let\fullcite\cite -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\fullocite} -% \begin{macrocode} -\let\fullocite\ocite -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\citeauthor} -% \begin{macrocode} -\let\citeauthor\ycite -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\citeauthory} -% \begin{macrocode} -\let\citeauthory\ycite -% \end{macrocode} -% \end{macro} -% -% \subsubsection{The \cn{nocite} command} -% -% \begin{macro}{\nocite} -% \begin{macrocode} -\renewcommand{\nocite}[1]{\othercites{#1}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\othercites} -% \begin{macrocode} -\newcommand{\othercites}[1]{% - \cite@begingroup - \let\cite@endgroup\@empty - \def\citelist{\othercitelist}% - \cites{#1}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\othercitelist} -% \begin{macrocode} -\newcommand{\othercitelist}[1]{% - \cite@begingroup - \let\cite@endgroup\@empty - \cites@init - \let\citeleft\relax - \let\citeright\ignorespaces - \def\InnerCite{\OtherCite}% - \def\cite@cj ##1##2{% - \begingroup - \@xp\citesel##1% - \cite@cb ##1% - \endgroup -% \end{macrocode} -% If we detect |\nocite{*}|, we globally alias -% \cs{selective@bibdef} to \cs{copy@bibdef} so that all succeeding -% \cn{bibselect} commands act like \cn{bibselect*}. -% \begin{macrocode} - \@xp\ifx\csname b@*\endcsname ##1% - \global\let\selective@bibdef\copy@bibdef - \fi - \ignorespaces - \cite@endgroup - }% - #1\relax - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\OtherCite} -% \begin{macrocode} -\def\OtherCite#1{\cite@a\citesel@other{#1}{}{}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\citesel@other} -% \begin{macrocode} -\def\citesel@other#1#2#3#4#5#6{} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\b@*} -% This provides a dummy definition to keep things like |\nocite{*}| -% from generating an error message. -% \begin{macrocode} -\@namedef{b@*}{\citesel 11{*}{*}{*}} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Citation sorting} -% -% \begin{macro}{\process@citelist@sorted} -% \begin{macrocode} -\def\process@citelist@sorted#1{% - \ifx\citesel\citesel@number - \cite@sorted@s #1\cite@sorted@e - \else - \NonNumericCiteWarning - \process@citelist@unsorted{#1}% - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\NonNumericCiteWarning} -% \begin{macrocode} -\def\NonNumericCiteWarning{% - \amsrefs@warning{% - Unable to confirm that cite keys are numeric: not sorting% - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\process@citelist@unsorted} -% \begin{macrocode} -\def\process@citelist@unsorted#1{% - \ignorespaces#1\relax -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\process@citelist} -% By default, citation lists will be sorted. -% \begin{macrocode} -\let\process@citelist\process@citelist@sorted -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\CPU@sort} -% By defining this as \TeX's maxint, undefined cites migrate to the -% end of a sorted list. -% \begin{macrocode} -\def\CPU@sort#1{2147483647} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cite@sorted@s} -% Here's where we prepare to sort the citations and (optionally) -% compress ranges. -% \begin{macrocode} -\def\cite@sorted@s{% - \begingroup - \let\CitePrintUndefined\CPU@sort - \let\cite@cjs\cite@cj - \let\cite@cj\cite@compress - \begingroup - \toks@\@emptytoks - \let\cite@cj\cite@sort - \ignorespaces -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cite@sorted@e} -% \begin{macrocode} -\def\cite@sorted@e{% - \@xp\endgroup - \the\toks@ - \cite@dash - \prev@cite - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cite@sort} -% This is essentially an insertion sort. I think. -% -% \MacroArgs -% \macroarg{1}{\cs{b@}citekey} -% \macroarg{2}{optional arg} -% \begin{macrocode} -\def\cite@sort#1#2{% - \safe@set\@tempcnta#1% highest number so far - \toks@{\cite@cj#1{#2}}% - \@temptokena\toks@ - \let\cite@cj\cite@sort@a - \ignorespaces -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cite@sort@a} -% \begin{macrocode} -\def\cite@sort@a#1#2{% - \safe@set\@tempcntb#1% - \ifnum\@tempcntb > \@tempcnta - \add@toks@{\cite@cj#1{#2}}% - \@tempcnta\@tempcntb - \else - \let\cite@cj\cite@sort@b - \toks@\@emptytoks - \def\@tempb{\add@toks@{\cite@cj#1{#2}}}% - \the\@temptokena - \@tempb - \let\cite@cj\cite@sort@a - \fi - \@temptokena\toks@ - \ignorespaces -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cite@sort@b} -% \begin{macrocode} -\def\cite@sort@b#1#2{% - \safe@set\count@#1% - \ifnum\@tempcntb < \count@ - \@tempb - \let\@tempb\@empty - \fi - \add@toks@{\cite@cj#1{#2}}% - \ignorespaces -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Range compression} -% -% When the time comes to apply compression, we have at our disposal a -% list of internal cite calls that looks like this: -% \begin{verbatim} -% \cite@cj\b@aaa{opta}\cite@cj\b@bbb{optb}...\cite@cj\b@zzz{optz} -%\end{verbatim} -% where -% \[ \ncn{b@aaa} < \ncn{b@bbb} < \cdots < \ncn{b@zzz} \] -% and the \texttt{opt} arguments are possibly null. -% To print the citations while collapsing sequences of 3 or more -% contiguous numbers into ranges of the form $n$--$m$, we bind -% \cs{cite@cj} to a suitably clever function and then execute the -% list. In the absence of optional arguments, here's the algorithm: -% -% \begin{enumerate} -% \item[Begin.] -% Enter state~0. This is done by \cs{cite@sorted@s}. -% \item[State 0.] -%^^A This is the initial state. -% The current citation is the beginning -% of a range (possibly a singleton range). Print it. Then, set -% $\mathit{prevnum} := \mathit{number}$ and enter state~1. -% -% \item[State 1.] -% The current citation might be the second element of a range. -% \begin{enumerate} -% \item[Case a)] -% $\mathit{number} = \mathit{prevnum} + 1$. Then the current -% item is definitely the second element of a range. It might be -% the last element of the range, but we won't know until we examine -% the following citation. So, save the current citation in -% \cs{prev@cite}, set $\mathit{prevnum} := \mathit{number}$, and go -% to state~2. -% -% \item[Case b)] -% $\mathit{number} \ne \mathit{prevnum} + 1$. The current citation -% is the beginning of a new range. Print it, set -% $\mathit{prevnum} := \mathit{number}$ and remain in state~1. -% (This is essentially identical to stage~0.) -% -% \end{enumerate} -% -% \item[State 2.]\leavevmode -% The current citation might be the third (or later) element of a -% range. -% \begin{enumerate} -% \item[Case a)] -% $\mathit{number} = \mathit{prevnum} + 1$. The current element is -% definitely part of a range. It might be the last -% element of the range, but again we won't know until we examine -% the following citation. Save the current citation -% in \cs{prev@cite} and set $\mathit{prevnum} := \mathit{number}$. -% Remain in state~2. -% -% \item[Case b)] -% $\mathit{number} \ne \mathit{prevnum} + 1$. The previous -% citation was the end of a range and the current citation is the -% beginning of a new range. Print a dash followed by -% \cs{prev@cite}, then set $\mathit{prevnum} := \mathit{number}$ -% and enter state~1. -% -% \end{enumerate} -% -% \item[End.] If \cs{prev@cite} is not empty, print it, preceded by a -% dash if we were in the middle of a range. (This is done by -% \cs{cite@sorted@e}.) -% -% \end{enumerate} -% -% The presence of optional arguments complicates things -% somewhat, since a citation with an optional argument should never -% participate in range compression. In other words, when we come -% across an optional argument, we should finish off the preceding -% range, print the current citation, and then return to the initial -% state. More precisely, here are the actions taken in each state -% when there is an optional argument: -% -% \begin{enumerate} -% -% \item[State 0.] -% Print the current citation and remain in state~0. -% -% \item[State 1.] -% Print the current citation and return to state~0. -% -% \item[State 2.] -% Print a dash followed by \cs{prev@cite}. Then print the current -% citation and return to state~0. -% -% \end{enumerate} -% -% \begin{macro}{\prev@cite} -% \begin{macrocode} -\let\prev@cite\@empty -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\prev@cite@cb} -% There's one further complication: Even though we're suppressing -% some of the citation numbers, we need to make sure that each -% citation is recorded in the \fn{.aux} file. So, in case~2a, -% before we overwrite \cs{prev@cite}, we first invoke -% \cs{prev@cite@cb} to record the previous citation (if any). -% \begin{macrocode} -\def\prev@cite@cb{% - \ifx\@prev@cite\@empty - \else - \begingroup - \def\cite@print##1##2{% - \cite@cb##1% - }% - \prev@cite - \endgroup - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cite@print} -% \begin{macrocode} -\def\cite@print#1#2{% - \begingroup - \let\CitePrintUndefined\CPU@normal - \cite@cjs#1{#2}% - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cite@dash} -% Ok, I lied. There was more than one further complication. -% Suppose that when we hit the end of the list, we're in state~2. -% We need to know whether to output a dash or a comma. (For -% example, both the sequences $[2, 3]$ and $[1, 2, 3]$ will end in -% state~2 with $\mathit{prevcite} = 3$, but in the former case we -% want a comma before the~3 and in the latter case we want a dash.) -% So, rather than printing the dash explicitly, we use -% \cs{cite@dash} to keep track of whether a dash is needed. -% \begin{macrocode} -\let\cite@dash\@empty -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\print@one@dash} -% \begin{macrocode} -\def\print@one@dash{% - \textendash \nopunct - \let\cite@dash\@empty -} -% \end{macrocode} -% \end{macro} -% -% State 0, 1 and~2 each correspond to a different binding for -% \cs{cite@cj}. Here they are. The role of $\mathit{prevnum}$ is -% played by \cs{@tempcnta}, with \cs{@tempcntb} assisting as -% $\mathit{number}$ at times. -% -% \begin{macro}{\cite@compress} -% State~0: -% \begin{macrocode} -\def\cite@compress#1#2{% - \cite@print#1{#2}% - \@ifempty{#2}{% - \safe@set\@tempcnta#1% - \let\cite@cj\cite@compress@a - }{}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cite@compress@a} -% State~1: -% \begin{macrocode} -\def\cite@compress@a#1#2{% - \@ifempty{#2}{% - \advance\@tempcnta\@ne - \safe@set\@tempcntb#1% - \ifnum\@tempcnta=\@tempcntb - \def\prev@cite{\cite@print#1{}}% - \let\cite@cj\cite@compress@b - \else - \cite@print#1{}% - \@tempcnta\@tempcntb - \fi - }{% - \cite@print#1{#2}% - \let\cite@cj\cite@compress - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cite@compress@b} -% State~2: -% \begin{macrocode} -\def\cite@compress@b#1#2{% - \@ifempty{#2}{% - \advance\@tempcnta\@ne - \safe@set\@tempcntb#1% - \ifnum\@tempcnta=\@tempcntb - \let\cite@dash\print@one@dash - \prev@cite@cb - \def\prev@cite{\cite@print#1{}}% - \else - \cite@dash - \prev@cite - \let\prev@cite\@empty - \cite@print#1{}% - \@tempcnta\@tempcntb - \let\cite@cj\cite@compress@a - \fi - }{% - \cite@dash - \prev@cite - \let\prev@cite\@empty - \cite@print#1{#2}% - \let\cite@cj\cite@compress - }% -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Munging the \fn{.aux} file} -% -% \begin{macro}{\bibcite} -% When processing the \fn{.aux} file at begin-document, this is what -% \cs{bibcite} will do: -% \begin{macrocode} -\def\bibcite#1{\@xp\bibcite@a\csname b@#1\endcsname} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bibcite@a} -% \MacroArgs -% \macroarg{1}{\cs{b@}citekey} -% \macroarg{2}{\embrace{\emph{label}}\embrace{} or \embrace{\emph{author}}\embrace{\emph{year}}} -% \begin{macrocode} -\def\bibcite@a#1#2{% -% \end{macrocode} -% Most of the time arg 1 will already be defined, by an earlier -% \cs{citedest} command in the \fn{.aux} file. Then we just need to change -% the number. -% \begin{macrocode} - \ifx\relax#1% - \gdef#1{\citesel 00#2{}}% - \else - \begingroup - \@xp\bibcite@b\@xp#1#1{#2}% - \endgroup - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bibcite@b} -% -% \MacroArgs -% \macroarg{1}{\cs{b@}citekey} -% \macroarg{2}{\cs{citesel}} -% \macroarg{3}{cited?} -% \macroarg{4}{used?} -% \macroarg{5}{label} -% \macroarg{6}{year} -% \macroarg{7}{backrefs} -% \macroarg{8}{\embrace{\emph{newlabel}}\embrace{\emph{newyear}}} -% \begin{macrocode} -\def\bibcite@b#1#2#3#4#5#6#7#8{\gdef#1{\citesel#3#4#8{#7}}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\citedest} -% The \cs{citedest} command goes into the \fn{.aux} file to provide -% back-reference support. -% \begin{macrocode} -\newcommand{\citedest}[1]{\@xp\cite@dest\csname b@#1\endcsname} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cite@dest} -% \begin{macrocode} -\def\cite@dest#1{% - \ifx\relax#1% - \gdef#1{\citesel 00{}{}{}}% - \fi - \@xp\cite@dest@b\@xp#1#1% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cite@dest@b} -% \MacroArgs -% \macroarg{1}{\cs{b@}citekey} -% \macroarg{2}{\cs{citesel}} -% \macroarg{3}{cited?} -% \macroarg{4}{used?} -% \macroarg{5}{label} -% \macroarg{6}{year} -% \macroarg{7}{backrefs} -% \macroarg{8}{\embrace{\emph{more backrefs}}} -% \begin{macrocode} -\def\cite@dest@b#1#2#3#4#5#6#7#8{% - \@ifempty{#7}{% - \def#1{\citesel #3#4{#5}{#6}{{#8}}}% - }{% - \gdef#1{\citesel #3#4{#5}{#6}{#7,{#8}}}% - }% -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Back references} -% -% \begin{macro}{\ifBR@verbose} -% \begin{macrocode} -\@ifundefined{ifBR@verbose}{\let\ifBR@verbose\iffalse \let\fi\fi}{}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\BackCite} -% \begin{macrocode} -\let\BackCite\@gobble -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\back@cite} -% \begin{macrocode} -\def\back@cite#1{% - \ifBR@verbose - \PackageInfo{backref}{back cite \string `\extr@cite#1'}% - \fi - \Hy@backout{#1}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\print@backrefs} -% In an AMS-style bibliography, the backref info might follow the -% final period of the reference, or it might follow some -% \emph{Mathematical Reviews} info, without a period. -% \begin{macrocode} -\def\print@backrefs#1{% - \space\SentenceSpace$\uparrow$\csname br@#1\endcsname -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintBackRefs} -% \begin{macrocode} -\let\PrintBackRefs\@gobble -% \end{macrocode} -% \end{macro} -% -% \subsubsection{\pkg{hyperref} and \pkg{showkeys} support} -% -% \begin{macro}{\ar@hyperlink} -% \begin{macrocode} -\def\ar@hyperlink#1{\hyper@@link [cite]{}{cite.\extr@cite#1}{#1}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ar@SK@cite} -% \begin{macrocode} -\def\ar@SK@cite#1{\@bsphack\@xp\SK@\@xp\SK@@ref\@xp{\extr@cite#1}\@esphack} -% \end{macrocode} -% \end{macro} -% -% Turn off \pkg{hyperref} and \pkg{showkeys} support if those -% packages don't appear to be loaded. -% \begin{macrocode} -\AtBeginDocument{% - \@ifundefined{hyper@@link}{% - \let\ar@hyperlink\@firstofone - \let\hyper@anchorstart\@gobble - \let\hyper@anchorend\relax - }{}% - \@ifundefined{SK@@label}{% - \let\ar@SK@cite\@gobble - \let\SK@@label\@gobble - \let\SK@\@gobbletwo - }{}% -} -% \end{macrocode} -% -% \subsection{Lexical structure of names} -% -% Before we can begin parsing names, we need to give some thought -% to the lexical structure of names. For the remainder of this -% document, when we refer to a ``name'' and especially when we -% speak of a name as a macro argument, we assume that the only -% tokens contained in the name are -% \begin{itemize} -% -% \item -% letters and punctuation (i.e., characters with catcode 11 or~12), -% -% \item -% ties (the token |~|$_{13}$), -% -% \item -% accent commands, such as |\"| or |\k|, -% -% \item -% text symbol macros, such as |\i|, |\ae| or |\cprime|, -% -% \item -% grouping characters (braces). -% -% \end{itemize} -% -% In addition to their normal function of delimiting macro -% arguments, braces inside names have the following special -% functions: -% \begin{enumerate} -% -% \item They are used to indicate that multiple characters should -% be considered a single ``compound'' character when extracting -% initials. For example, |Yuri| becomes |Y.|, but |{Yu}ri| becomes -% |Yu.| -% -% \label{initial-braces} -% An important aspect of this use of braces is that it only applies -% to the first characters of a given name. As we'll see below, -% this has important implications for our parsing code, which must -% preserve braces at the beginning of given names, but can be more -% cavalier with braces in other positions. -% -% \item -% Spaces and commas are ordinarily interpreted as name separators, -% rather than name components. Similarly, periods and hyphens -% usually have a special interpretation. All these characters can -% be stripped of their special meanings by putting them within -% braces. -% -% \end{enumerate} -% -% In practice, it might be possible to insert other tokens (such as -% macros) into names as long as they either (a)~are non-expandable -% or (b)~expand into a series of tokens of the above enumerated -% types. However, in such cases it will probably be safer to -% declare the macro in question as either a text accent or a text -% symbol. -% -% \subsubsection{Text accents} -% -% Syntactically, a text accent is a macro that takes a single, -% undelimited argument, i.e, it has a ``prototype'' of -% |macro:#1->|. Semantically, the implication is that it takes a -% letter (the \emph{base}) as an argument and produces a glyph that -% for certain purposes can be considered equivalent to the -% base (see the discussion of stem comparison on -% page~\pageref{stem-comparison}).\footnote{Note that this is meant -% to be a pragmatic definition for the purposes of this package. -% No claim is made to greater generality.} -% -% \begin{macro}{\amsrefs@textaccents} -% This will contain a list of accent commands in standard \LaTeX\ -% format (i.e., separated by the token \cs{do}). For example, -% after registering the \cn{"} and \cn{'} accents, it will contain -% \begin{verbatim} -% \do \"\do \' -%\end{verbatim} -% \begin{macrocode} -\let\amsrefs@textaccents\@empty -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DeclareNameAccent} -% \MacroArgs -% \macroarg{1}{accent} -% \begin{macrocode} -\def\DeclareNameAccent{% - \@lappend\amsrefs@textaccents -} -% \end{macrocode} -% \end{macro} -% -% Here are all the standard \LaTeX\ accents, as well as a few -% nonstandard accents from the \pkg{mathscinet} package. -% \begin{macrocode} -\DeclareNameAccent\" -\DeclareNameAccent\' -\DeclareNameAccent\. -\DeclareNameAccent\= -\DeclareNameAccent\^ -\DeclareNameAccent\` -\DeclareNameAccent\~% -\DeclareNameAccent\b -\DeclareNameAccent\c -\DeclareNameAccent\d -\DeclareNameAccent\H -\DeclareNameAccent\k -\DeclareNameAccent\r -\DeclareNameAccent\t -\DeclareNameAccent\u -\DeclareNameAccent\v -% \end{macrocode} -% From \pkg{mathscinet}: -% \begin{macrocode} -\DeclareNameAccent\utilde -\DeclareNameAccent\uarc -\DeclareNameAccent\dudot -\DeclareNameAccent\lfhook -\DeclareNameAccent\udot -\DeclareNameAccent\polhk -\DeclareNameAccent\soft -% \end{macrocode} -% \cn{etalchar} and \cn{etaltext} are sort of accent-like if you -% look at them in the right light. -% \begin{macrocode} -\DeclareNameAccent\etalchar -%\DeclareNameAccent\etaltext -% \end{macrocode} -% -% \subsubsection{Text symbols} -% -% Syntactically, a text symbol is a macro with a empty parameter -% text, i.e., a prototype of |macro:->|. Semantically, it's a -% letter-like glyph that should not be considered equivalent -% to any other glyph or group of glyphs. In addition, it may exist -% in both upper- and lowercase variants, unlike text accents, where -% we consider the case to be an attribute of the base letter, not -% of the accent.\footnote{As with text accents, this is not -% intended as a fully general definition.} -% -% \begin{macro}{\amsrefs@textsymbols} -% This is analogous to \cs{amsrefs@textaccents} but a little more -% complicated due to the need to store lowercase equivalents. It -% consists of a list of double entries of the form -% \begin{verbatim} -% \do \symbol \do \lcsymbol -%\end{verbatim} -% which means that \cs{symbol} is a text symbol whose corresponding -% lowercase version is \cs{lcsymbol}. (Note that nothing is -% implied about whether \cs{symbol} is to be considered as -% uppercase or lowercase.) For example, in -% \begin{verbatim} -% \do \ae \do \ae \do \OE \do \oe -%\end{verbatim} -% the first four tokens indicate that \cn{ae} is a text symbol with -% lowercase equivalent \cn{ae}, while the last four tokens indicate -% that \cn{OE} is a text symbol with lowercase equivalent \cn{oe}. -% This scheme is somewhat redundant, but pleasingly simple. -% -% This also duplicates some of the information in \cs{@uclclist}, -% but it seems safer to do this than to modify \cs{@uclclist}. -% \begin{macrocode} -\let\amsrefs@textsymbols\@empty -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DeclareNameSymbol} -% \MacroArgs -% \macroarg{1}{symbol} -% \macroarg{2}{lowercase} -% \begin{macrocode} -\def\DeclareNameSymbol#1#2{% - \@lappend\amsrefs@textsymbols#1% - \@lappend\amsrefs@textsymbols#2% - \ifx#1#2\else - \@lappend\amsrefs@textsymbols#2% - \@lappend\amsrefs@textsymbols#2% - \fi -} -% \end{macrocode} -% \end{macro} -% -% Here are the standard \LaTeX\ and \pkg{mathscinet} text -% symbols. -% -% \label{anomalies} -% Note that \cn{i} and \cn{j} are anomalous in being syntactically -% like text symbols, but semantically more like text accents. -% \begin{macrocode} -\DeclareNameSymbol\i\i -\DeclareNameSymbol\j\j -\DeclareNameSymbol\AE\ae -\DeclareNameSymbol\OE\oe -\DeclareNameSymbol\O\o -\DeclareNameSymbol\DH\dh -\DeclareNameSymbol\DJ\dj -\DeclareNameSymbol\L\l -\DeclareNameSymbol\NG\ng -\DeclareNameSymbol\SS\ss -\DeclareNameSymbol\TH\th -% \end{macrocode} -% From \pkg{mathscinet}: -% \begin{macrocode} -\DeclareNameSymbol\Dbar\dbar -\DeclareNameSymbol\lasp\lasp -\DeclareNameSymbol\rasp\rasp -\DeclareNameSymbol\cprime\cprime -\DeclareNameSymbol\cdprime\cdprime -\DeclareNameSymbol\bud\bud -\DeclareNameSymbol\cydot\cydot -% \end{macrocode} -% |~| can be considered a text symbol in much the same way that -% \cn{etalchar} can be considered an accent. -% \begin{macrocode} -\DeclareNameSymbol~~% -% \end{macrocode} -% -% \subsubsection{\cs{edef}-like macros for names} -% The following macros all behave sort of like \cs{edef}, in the -% sense that -% \begin{verbatim} -% \X@edef\foo{name} -%\end{verbatim} -% defines \cs{foo} to be the result of expanding |name| and -% applying a certain transformation to it. -% -% \begin{macro}{\normalize@edef} -% This converts accents in the name to a normalized form where the -% accent and its argument are surrounded by braces. E.g., after -% \begin{verbatim} -% \normalize@edef\cs{P\'olya} -%\end{verbatim} -% \cs{cs} will contain |P{\'o}lya|. (This might result in a -% redundant layer of braces if the original text contained, say, -% ``\verb+P{\'o}lya+'', but that's ok.) This lets us extract the -% first $n$ characters from a name by using \TeX's macro -% argument-gobbling mechanism without worrying that an accent -% will be separated from its base letter. -% As a bonus, it also replaces ties (|~|) by spaces. -% \begin{macrocode} -\def\normalize@edef#1#2{% - \begingroup - \@apply\auto@protect\amsrefs@textsymbols - \@apply\wrap@accent\amsrefs@textaccents -% \end{macrocode} -% Redefine \cs{@tabacckludge} in case someone wants to use this -% with the \pkg{inputenc} package. -% \begin{macrocode} - \let\@tabacckludge\use@accent - \let~\space - \edef\@tempa{\def\@nx#1{#2}}% - \@xp\endgroup - \@tempa -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\use@accent} -% This is identical to \cs{@nameuse} except for the addition of the -% \cs{string}, which, as per \fn{ltoutenc.dtx}, guards against the -% eventuality that something like |'| might be active at the point -% of use. We don't expect to find a \cs{bib} in the middle of a -% \env{tabbing} environment (do we?)\ so we -% \begin{macrocode} -\def\use@accent#1{\csname\string#1\endcsname} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\wrap@accent} -% Here's a wrapper macro that causes an accent to become -% auto-wrapping. E.g., after \verb+\wrap@accent\'+, \verb+\'o+ -% will expand to \verb+{\'o}+. -% \begin{macrocode} -\def\wrap@accent#1{% - \def#1##1{{\@nx#1##1}}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\lc@edef} -% This converts all the characters in a name to all lowercase, -% using the mapping defined by \cs{amsrefs@textsymbols}. So, after -% \begin{verbatim} -% \lc@edef\cs{P\'olya} -%\end{verbatim} -% \cs{cs} will contain |p\'olya|. Note that accents are not -% wrapped and ties are passed through unmolested. -% \begin{macrocode} -\def\lc@edef#1#2{% - \begingroup - \let\@tabacckludge\use@accent %%?? - \@apply\auto@protect\amsrefs@textaccents - \@apply\lc@do\amsrefs@textsymbols - \edef\@tempa{\lowercase{\def\@nx#1{#2}}}% - \@xp\endgroup - \@tempa -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\lc@do} -% This is a slighly more complicated wrapper macro than previous -% ones. -% The first argument is a text symbol; the second argument is the -% lowercase variant of the symbol. If they're the same (i.e., the -% first argument is a lowercase text symbol), we \cs{auto@protect} -% it. Otherwise we define the first symbol to expand to the -% second. -% \begin{macrocode} -\def\lc@do#1\do#2{% - \ifx#1#2% - \auto@protect#1% - \else - \def#1{#2}% - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\purge@edef} -% Removes accents and braces from a name and converts ties to -% spaces, leaving only letters, punctuation and text symbols. For -% example, -% \begin{verbatim} -% \lc@edef\cs{P{\'o}lya} -%\end{verbatim} -% will put |Polya| in~\cs{cs}. -% \begin{macrocode} -\def\purge@edef#1#2{% - \begingroup - \@apply\auto@protect\amsrefs@textsymbols - \let~\space - \@apply\purge@accent\amsrefs@textaccents - \let\@tabacckludge\@gobble -% \end{macrocode} -% As mentioned above (page~\pageref{anomalies}), \cn{i} and \cn{j} -% are semantically like text accents; hence, they require special -% treatment here. -% \begin{macrocode} - \def\i{i}% - \def\j{j}% - \edef\@tempa{#2}% - \toks@\@emptytoks - \@xp\purge@edef@ \@tempa \@nil - \edef\@tempa{\def\@nx#1{\the\toks@}}% - \@xp\endgroup - \@tempa -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\purge@edef@} -% Peek ahead so \cs{purge@edef@a} will know whether its argument -% was originally surrounded by braces. -% \begin{macrocode} -\def\purge@edef@{% - \futurelet\@let@token - \purge@edef@a -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\purge@edef@a} -% Process a single ``chunk'' (i.e., one macro-argument's worth) of -% the name. -% \begin{macrocode} -\def\purge@edef@a#1{% -% \end{macrocode} -% If we've run into the \cs{@nil} terminator, we're done. -% \begin{macrocode} - \ifx\@let@token\@nil - \let\@tempa\@empty - \else -% \end{macrocode} -% Otherwise, if the argument was originally surrounded by braces, -% process it recursively before processing the remainder of the -% token stream. -% \begin{macrocode} - \ifx\@let@token\bgroup - \def\@tempa{% - \purge@edef@ #1\@nil - \purge@edef@ - }% - \else -% \end{macrocode} -% If the argument is a single unbracketed token, just copy it into -% the output. -% \begin{macrocode} - \add@toks@{#1}% - \let\@tempa\purge@edef@ - \fi - \fi - \@tempa -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\purge@accent} -% This is similar to \cs{wrap@accent} but it removes the accent -% command (and possibly a layer of braces surrounding the accent's -% argument). -% \begin{macrocode} -\def\purge@accent#1{% - \def#1##1{##1}% -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Name parsing} -% -% Parsing names is somewhat complicated because parts of the name -% can (in principle) be empty (G=given, S=surname, J=jr)): -% \begin{quote} -% \nametest{Doe, John, Jr.} -% \nametest{Doe, John} -% \nametest{Doe, , Jr.} -% \nametest{Doe} -% \nametest{, John, Jr.} -% \nametest{, John} -% \nametest{, , Jr.} -% \nametest{} -% \end{quote} -% Not all of these forms are legal, of course, but that's no excuse -% for not parsing them correctly. -% -% We also want to be somewhat lenient about the placement of -% spaces: -% \begin{quote} -% \nametest{ Doe,John,Jr.} -% \end{quote} -% -% However, because one must have some standards, we assume there -% are no spaces in the following positions in the input: -% \begin{enumerate} -% \item before periods, -% -% \item before commas, -% -% \item at the end of the name, -% -% \item before or after hyphens. -% \end{enumerate} -% -% Thus, we make no attempt to compensate for the misplaced spaces -% in examples like these: -% \begin{quote} -% \nametest{Doe , J ., Jr. } -% \nametest{Doe, J. - M.} -% \end{quote} -% -% Also, unless we are generating initials, we don't try to -% normalize spaces \emph{after} periods: -% \begin{quote} -% \nametest{Doe, J.M.}\\ (not G=\embrace{J. M.}) -% \end{quote} -% -% Finally, since we allow authors to group together characters that -% should be treated as a single unit, we need to be careful to -% preserve the author's markup in cases like these: -% -% \begin{quote} -% \nametest{Doe, {Yu}ri} -% \nametest{Doe, {Yu}} -% \end{quote} -% -% This is harder than it seems. For example, consider a naive -% implementation that uses delimited arguments to pull the name -% apart: -% \begin{verbatim} -% \def\parsename#1,#2\@nil{% -% \def\bib'surname{#1}% -% \def\bib'given{#2}% -% } -% -% \parsename Doe, {Yu}ri\@nil -%\end{verbatim} -% Unfortunately, this results in the space after the comma -% becoming part of \cs{bib'given}: ``\verb+ {Yu}ri+''. -% -% Our next thought would be to modify the definition slightly to -% trick \TeX\ into gobbling the space: -% \begin{verbatim} -% \def\parsename#1,#2#3\@nil{% -% \def\bib'surname{#1}% -% \def\bib'given{#2#3}% -% } -%\end{verbatim} -% Now the space is gone, but---surprise!---so are the braces: -% ``\verb+Yuri+''. In addition, this approach makes it difficult -% to handle empty name parts correctly. -% -% To sidestep these problems, instead of blindly gobbling macro -% arguments, we use \cs{futurelet} to look ahead at certain -% strategic moments so we can take the appropriate action (see -% \cs{get@namepart@d}--|f|). We only really care about preserving -% braces at the start of names (page~\pageref{initial-braces}), -% which simplifies things somewhat.\label{brace-preservation} -% -% \begin{macro}{\name@split} -% \cs{name@split} parses a name into its three parts and stores -% them in \cs{bib'surname}, \cs{bib'given} and \cs{bib'jr}. If the -% \opt{initials} option is in force, it also extracts the initials -% from the given name and stores them in \cs{bib'initials}. -% -% It expects the name to be parsed to be terminated by \cs{@nil} -% and to contain at least three commas. Thus the usual way to -% invoke it is -% \begin{quote} -% \cs{name@split} $\langle\mathit{name}\rangle$\verb+,,,\@nil+ -% \end{quote} -% -% \cs{name@split} just uses \cs{get@namepart} to peal off the -% surname and then passes control to \cs{name@split@given}. -% (Note the spiffy continuation-passing programming style.) -% \begin{macrocode} -\def\name@split{% - \get@namepart\bib'surname\name@split@given -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\name@split@given} -% Pretty much the same, \em{mutatis mutandis}\ldots -% \begin{macrocode} -\def\name@split@given{% - \get@namepart\bib'given\name@split@jr -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\name@split@jr} -% And again\ldots -% \begin{macrocode} -\def\name@split@jr{% - \get@namepart\bib'jr\name@split@finish -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\name@split@finish} -% We have all three parts now. Do some consistency checking, -% extract the initials from the given name, and then call -% \cs{@nilgobble} to remove anything (such as extra commas) left on -% the stack. -% \begin{macrocode} -\def\name@split@finish{% - \ifx\bib'surname\@empty \EmptyNameWarning \fi -% \end{macrocode} -% Theoretically, we could try to check for uninverted names here, -% but only at the risk of producing spurious warnings when the name -% really does only have one part (\verb+author={Arvind}+). -% -% A possible solution: Now that we have the -% \attr{inverted} attribute, we could issue a warning if the given -% name is empty and the family name contains a space. I'm sure -% someone could find valid input that would still generate a -% spurious warning, but this would take care of the most common -% cases. This bears more thinking about. -% \begin{macrocode} -%% \ifx\@empty\bib'given -%% \NameCheck \bib'surname ??\@nil -%% \else - \extract@initials\bib'given -%% \fi - \@nilgobble -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\get@namepart} -% Now for the fun part. \cs{get@namepart} takes two arguments. -% The first (the destination) should be a control sequence; the -% second (the continuation) will normally also be a control -% sequence, though technically we only require that it be a single -% token. \cs{get@namepart} scans everything up to the next level-0 -% comma, places it in the destination, and then calls the -% continuation. -% \begin{macrocode} -\def\get@namepart#1#2{% -% \end{macrocode} -% Save the destination in \cs{toks@} and the continuation in -% \cs{@temptokena}. It's unfortunate that this trashes the -% previous contents of those token lists (as well as the contents -% of \cs{@tempa} later on), but preliminary attempts to rewrite the -% code to leave the calling environment unchanged were not -% encouraging. -% \begin{macrocode} - \toks@{#1}% - \@temptokena{#2}% - \get@namepart@a -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\get@namepart@a} -% Now peek ahead at the next token in the stream and call -% \cs{get@namepart@b} to examine it. -% \begin{macrocode} -\def\get@namepart@a{% - \futurelet\@let@token - \get@namepart@b -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\get@namepart@b} -% If the next token is a space token, we want to delete it. -% Otherwise we're ready to read the name. -% \begin{macrocode} -\def\get@namepart@b{% - \ifx\@let@token\@sptoken - \@xp\get@namepart@c - \else - \@xp\get@namepart@d - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\get@namepart@c} -% The next token is a space; we delete it and restart -% \cs{get@namepart@a}, in case there are multiple spaces. -% \begin{macrocode} -\def\get@namepart@c{% - \after@deleting@token\get@namepart@a -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\get@namepart@d} -% We're at the beginning of the name part. However, there are -% still two special cases we have to watch out for. First, the -% next token might be a comma, meaning that this name part is -% empty. Second, the next token might be an open brace (\verb+{+), -% which we have to be sure to copy into the destination. So, we -% peek ahead again before proceeding. -% \begin{macrocode} -\def\get@namepart@d{% - \futurelet\@let@token - \get@namepart@e -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\get@namepart@e} -% If the next token is a comma, it means the name part is empty; -% so, we set the destination to an empty list and then arrange to -% execute the continuation after deleting the comma. Otherwise we -% call \cs{get@namepart@f} to read a non-empty name, leaving -% \cs{@let@token} undisturbed so that \cs{get@namepart@f} knows -% what's coming up. -% \begin{macrocode} -\def\get@namepart@e{% - \ifx\@let@token,% - \@xp\let\the\toks@\@empty - \edef\@tempa{% - \@nx\after@deleting@token\the\@temptokena - }% - \@xp\@tempa - \else - \@xp\get@namepart@f - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\get@namepart@f} -% We know whether or not the name begins with a brace, but we don't -% know if the corresponding group contains the entire name or only -% part of it. By reading the name as two arguments, we can handle -% all cases correctly.\footnote{More or less. If the second -% argument is brace-delimited, the braces will be lost. But as -% mentioned above (page~\pageref{brace-preservation}), we don't -% really care.} -% -% Note that the arguments are not expanded. -% \begin{macrocode} -\def\get@namepart@f#1#2,{% - \ifx\@let@token\bgroup - \@xp\def\the\toks@{{#1}#2}% - \else - \@xp\def\the\toks@{#1#2}% - \fi - \the\@temptokena -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\EmptyNameWarning} -% Or translator or contributor or\ldots -% \begin{macrocode} -\def\EmptyNameWarning{\amsrefs@warning{Empty contributor name}} -% \end{macrocode} -% \end{macro} -% -% \subsection{Extracting initials} -% -% Extracting initials from the author's given name is tricky -% because of the numerous special cases that need to be -% handled. Consider the following examples, some of which are -% admittedly contrived: -% \begin{quote} -% \initialtest{Arvind} -% \initialtest{Bing, R H} -% \initialtest{Harish, \'Etienne} -% \initialtest{Harish, \'E.} -% \initialtest{Harish, \'{E}.} -% \initialtest{Harish, {\'E}.} -% \initialtest{Harish, \'E} -% \initialtest{Harish, \'Etienne-P\^{\i}erre} -% \initialtest{Jones, David} -% \initialtest{Jones, David-Michael} -% \initialtest{Katzenbach, Nicholas {deB}elleville} -% \initialtest{Katzenbach, Nicholas deB.} -% \initialtest{Matiyasevich, {Yu}ri} -% \initialtest{Matiyasevich, {Yu}} -% \initialtest{Matiyasevich, Yu.} -% \end{quote} -% When processing initials, we loosen our strictures on spaces -% inside the given name by not requiring spaces after periods and -% tolerating them around hyphens and after the name: -% \begin{quote} -% \initialtest{Jones, D.M.} -% \initialtest{Jones, David - Michael} -% \initialtest{Jones, David , Jr.} -% \end{quote} -% (Strictly speaking, only the support for the first of these -% examples was a deliberate design decision; the other two are -% side-effects of the implementation. In any case, toleration of -% these quirks is in no way an endorsement of them, especially -% since they may make it more difficult for third-party software to -% correctly process bibliography entries.) -% -%^^A We also make one additional assumption: a hyphen does not occur -%^^A as the last character in the name. -% -% \subsubsection{The algorithm} -% -% As a running example, consider the following contrived input: -% \begin{quote} -% {\tt \verb+\'E.-P\^{\i}erre J.K. M+} -% \end{quote} -% which we want to turn into {\makeatletter``{\'E}.~\ini@hyphen -% P.~J.~K.~M''}. -% -% We precede by stages. -% \begin{enumerate} -% -% \item -% Normalize the name by surrounding accents and their arguments by -% braces: -% \begin{quote} -% \verb+{\'E}.-P{\^\i }erre J.K. M+ -% \end{quote} -% We also replace \verb+~+s by spaces at this stage. -% -% \item -% Replace each hyphen (\verb+-+) by ``\verb*+ \ini@hyphen +'': -% \begin{quote} -% \verb+{\'E}. \ini@hyphen P{\^\i }erre J.K. M+ -% \end{quote} -% -% \item -% Add a space after each period: -% \begin{quote} -% \verb+{\'E}. \ini@hyphen P{\^\i }erre J. K. M+ -% \end{quote} -% -% \item -% Now we have the name as a list of space-separated components. -% (In our example, the components are ``\verb+{\'E}.+'', -% ``\verb+\ini@hyphen+'', ``\verb+P{\^\i }erre+'', ``\verb+J.+'', -% ``\verb+K.+'', and ``\verb+M+''.) We loop through the compoments -% and replace each one by its ``initialized'' form. There are -% four cases:\label{initial_cases} -% \begin{enumerate} -% -% \item -% The component ends in a period. Copy it and add the token -% \verb+~+. (In our example, these are the -% components ``\verb+{\'E}.+'', ``\verb+J.+'' and ``\verb+K.+''.) -% -% \item -% The component consists of a single (possibly compound) character -% without a period. Again, copy it and add -% \verb+~+. (In our example, this is the component -% ``\verb+M+''.) -% -% \item -% The component is the token \verb+\ini@hyphen+. Copy it. -% -% \item -% The component consts of two or more (possibly compound) -% characters without a period (e.g., ``\verb+P{\^\i }erre+''). -% Copy the first character and add the tokens \verb+.~+. -% \end{enumerate} -% -% \item -% The token list generated above will end with an unwanted |~|. -% Delete it. -% -% \end{enumerate} -% -% The end result is -% \begin{verbatim} -% {\'E}.~\ini@hyphen P.~J.~K.~M -%\end{verbatim} -% which, when typeset, does indeed produce -% {\makeatletter''{\'E}.~\ini@hyphen P.~J.~K.~M''}.\footnote{Tying -% all the characters together is potentially undesirable when, as -% in the example, there are a large number of pieces in the given -% name.} -% -% \subsubsection{The implementation} -% -% \begin{macro}{\extract@initials} -% This is pretty straightforward. -% \begin{macrocode} -\def\extract@initials#1{% - \begingroup - \auto@protect\ini@hyphen - \auto@protect\nobreakspace - \let~\relax - \@apply\auto@protect\amsrefs@textsymbols - \@apply\auto@protect\amsrefs@textaccents - \normalize@edef\@tempa{#1}% - \ifx\@tempa\@empty - \else -% \end{macrocode} -% It would be nice if \cs{process@hyphens} and \cs{process@dots} -% commuted, and they almost do. However, suppose you have the -% (admittedly contrived) name |Yu.-{Yu}|, which should be turned -% into ``Yu.-Yu''. If \cs{process@dots} is applied first, the -% braces around the second ``Yu'' get removed, so the output is -% ``Yu.-Y.''. (Even worse would be |P.-\'E|, which would produce -% ``P.-\'.'') -% \begin{macrocode} - \process@hyphens\@tempa - \process@dots\@tempa - \process@names\@tempa - \@chomp\@tempa{~}% - \fi - \edef\@tempa{\def\@nx\bib'initials{\@tempa}}% - \@xp\endgroup - \@tempa -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ini@hyphen} -% The \cs{unskip} removes the space at the end of a potential (and -% probable) preceding |~|, but leaves the \cs{nobreak} penalty. -% \begin{macrocode} -\def\ini@hyphen{\unskip-\nobreak} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\process@hyphens} -% This follows the same general pattern as \cs{get@namepart}, but -% with an extra layer of grouping to avoid unwanted side-effects. -% Otherwise, it uses the same parsing techniques. -% -% One difference is that there is no explicit continuation: -% instead, we iterate by repeatedly calling -% \cs{process@one@hyphen@d} until we run into the \cs{@nil} -% marker. -% \begin{macrocode} -\def\process@hyphens#1{% - \begingroup - \toks@\@emptytoks - \@xp\process@one@hyphen #1-\@nil - \edef\@tempa{\the\toks@}% -% \end{macrocode} -% Because of the |-| we have to stick in as a delimiter above, -% \cs{process@one@hyphen} will always generate unwanted code at the -% end of the name. We now delete it. (This also has the necessary -% side-effect of expanding the \cs{space} macros into space -% characters.) -% \begin{macrocode} - \@chomp\@tempa{ \ini@hyphen\space}% - \edef\@tempa{\def\@nx#1{\@tempa}}% - \@xp\endgroup - \@tempa -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\process@one@hyphen} -% Cf.\ \cs{get@namepart@a}. -% \begin{macrocode} -\def\process@one@hyphen{% - \futurelet\@let@token - \process@one@hyphen@a -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\process@one@hyphen@a} -% Cf.\ \cs{get@namepart@b} and \cs{extract@initial@a}. -% -% The tests for \cs{@nil} and~|-| here are purely to supply better -% error recovery. Without them, a hyphen at the end of the given -% name (.e.g, |author={Doe, John-}|) would produce a very -% mysterious error message. Since it's unlikely the hyphen really -% belongs there, we delete it, but we also issue a warning to the -% author. (It will still show up as part of the full given name, -% though.) -% -% We borrow \cs{fsa@n} from \pkg{rkeyval} to keep track of the -% appropriate next action. -% \begin{macrocode} -\def\process@one@hyphen@a{% - \ifx\@let@token\@nil - \let\fsa@n\@gobble - \else - \ifx\@let@token -% - \TrailingHyphenWarning - \let\fsa@n\process@one@hyphen@b - \else - \ifx\@let@token\@sptoken - \let\fsa@n\process@one@hyphen@b - \else - \let\fsa@n\process@one@hyphen@c - \fi - \fi - \fi - \fsa@n -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\process@one@hyphen@b} -% Cf.\ \cs{get@namepart@c}. -% \begin{macrocode} -\def\process@one@hyphen@b{% - \after@deleting@token\process@one@hyphen -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\process@one@hyphen@c} -% Cf.\ \cs{get@namepart@f}. -% \begin{macrocode} -\def\process@one@hyphen@c#1#2-{% - \ifx\bgroup\@let@token - \add@toks@{{#1}#2 \ini@hyphen\space}% - \else - \add@toks@{#1#2 \ini@hyphen\space}% - \fi - \futurelet\@let@token - \process@one@hyphen@d -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\process@one@hyphen@d} -% Here we just check for \cs{@nil} and terminate if we detect it. -% Otherwise, we start over. -% \begin{macrocode} -\def\process@one@hyphen@d{% - \ifx\@let@token\@nil - \@xp\@gobble - \else - \@xp\process@one@hyphen - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\TrailingHyphenWarning} -% Or translator or contributor or\ldots -% \begin{macrocode} -\def\TrailingHyphenWarning{% - \amsrefs@warning{Trailing hyphen deleted from name}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\process@dots} -% This is almost completely parallel to \cs{process@hyphens}. -% \begin{macrocode} -\def\process@dots#1{% - \begingroup - \toks@\@emptytoks - \@xp\process@one@dot #1.\@nil - \edef\@tempa{\the\toks@}% - \@chomp\@tempa{. }% -% \end{macrocode} -% Since it's legitimate for names to end in periods, we might -% still have an unwanted space at the end of the name, so we delete -% it too. -% \begin{macrocode} - \@chomp\@tempa{ }% - \edef\@tempa{\def\@nx#1{\@tempa}}% - \@xp\endgroup - \@tempa -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\process@one@dot} -% \begin{macrocode} -\def\process@one@dot{% - \futurelet\@let@token - \process@one@dot@a -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\process@one@dot@a} -% This is a bit different from \cs{process@one@hyphen@a} since we -% expect names sometimes to end in a period---or even two -% periods---not least because of the |.| we add as a delimiter when -% invoking \cs{process@one@dot}. -% \begin{macrocode} -\def\process@one@dot@a{% - \ifx\@let@token .% - \def\fsa@n{\after@deleting@token\process@bare@dot}% - \else - \ifx\@let@token\@sptoken - \let\fsa@n\process@one@dot@b - \else - \let\fsa@n\process@one@dot@c - \fi - \fi - \fsa@n -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\process@bare@dot} -% \begin{macrocode} -\def\process@bare@dot{% - \add@toks@{. }% - \futurelet\@let@token - \process@one@dot@d -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\process@one@dot@b} -% \begin{macrocode} -\def\process@one@dot@b{% - \after@deleting@token\process@one@dot -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\process@one@dot@c} -% \begin{macrocode} -\def\process@one@dot@c#1#2.{% - \ifx\bgroup\@let@token - \add@toks@{{#1}#2. }% - \else - \add@toks@{#1#2. }% - \fi - \futurelet\@let@token - \process@one@dot@d -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\process@one@dot@d} -% \begin{macrocode} -\def\process@one@dot@d{% - \ifx\@let@token\@nil - \@xp\@gobble - \else - \@xp\process@one@dot - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\process@names} -% This is very similar to \cs{process@hyphens} and -% \cs{process@dots}, but with a couple of twists, as noted below. -% \begin{macrocode} -\def\process@names#1{% - \begingroup - \toks@\@emptytoks - \@xp\extract@initial #1 \@nil - \edef\@tempa{\def\@nx#1{\the\toks@}}% - \@xp\endgroup - \@tempa -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\extract@initial} -% Scan through the token stream replacing words by their initials -% until we hit the terminating~|'|$_{11}$ -% \begin{macrocode} -\def\extract@initial{% - \futurelet\@let@token - \extract@initial@a -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\extract@initial@a} -% As with \cs{process@one@hyphen@a}, the test for |'|$_{11}$ here -% is purely to provide better recovery, this time in case the given -% name has a trailing space (.e.g, |author={Doe, John }|). -% But since we're just deleting whitespace, we don't bother issuing -% a warning. -% \begin{macrocode} -\def\extract@initial@a{% - \ifx\@let@token\@nil - \let\fsa@n\@gobble - \else - \ifx\@let@token\@sptoken - \let\fsa@n\extract@initial@b - \else - \let\fsa@n\extract@initial@c - \fi - \fi - \fsa@n -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\extract@initial@b} -% \begin{macrocode} -\def\extract@initial@b{% - \after@deleting@token\extract@initial -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\extract@initial@c} -% Here, instead of just copying the name, we extract its initials -% and copy those. -% \begin{macrocode} -\def\extract@initial@c#1#2 {% - \ifx\@let@token\bgroup -% \end{macrocode} -% Note that we double-brace the first argument to avoid having to -% test \cs{@let@token} again inside \cs{@extract@initial}. -% \begin{macrocode} - \@extract@initial {{#1}}#2\@nil - \else - \@extract@initial #1#2\@nil - \fi - \futurelet\@let@token - \extract@initial@d -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\extract@initial@d} -% \begin{macrocode} -\def\extract@initial@d{% - \ifx\@let@token\@nil - \@xp\@gobble - \else - \@xp\extract@initial - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@extract@initial} -% This handles the four cases mentioned on -% page~\pageref{initial_cases}. -% \begin{macrocode} -\def\@extract@initial#1#2\@nil{% - \ifx\ini@hyphen#1% - \add@toks@{\ini@hyphen}% - \else - \in@{.\@nil}{#1#2\@nil}% Look for a period at the end of the name - \ifin@ - \add@toks@{#1#2~}% - \else - \count@chars\@tempcnta{#1#2}% - \ifnum\@tempcnta > \@ne - \add@toks@{#1.~}% - \else - \add@toks@{#1~}% - \fi - \fi - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\count@chars} -% This sets its first argument (which is assumed to be a count -% register) to the number of characters in the second argument. -% Compound characters are counted as a single character. -% \begin{macrocode} -\def\count@chars#1#2{% - \begingroup - \@tempcnta\z@ - \@count@chars#2\@nil - \edef\@tempb{#1=\the\@tempcnta\relax}% - \@xp\endgroup - \@tempb -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@count@chars} -% \begin{macrocode} -\def\@count@chars#1{% - \ifx #1\@nil - \else - \advance\@tempcnta\@ne - \@xp\@count@chars - \fi -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Generating alphabetic labels} -% -% \subsubsection{The algorithm} -% -% Like Gaul, an alphabetic label is divided into three parts. -% \begin{enumerate} -% -% \item The author part. In the simplest case, this is formed by -% extracting the first character of each word of each last name of -% each author. Thus, if there were two authors with last names -% ``Vaughan Williams'' and ``Tallis'', the author part would be -% ``VWT''. -% -% If there are more than four authors, only the first three names -% are used, and a superscript~``+'' is appended to represent the -% elided names. Similarly, if an author name is ``others'', -% it is replaced by a superscript~``+'' and any following author -% names (of which there shouldn't be any) are ignored. -% -% Finally, if there is only one author and the author's last name -% consists of a single word, the first three characters of that -% name are used. -% -% \item The year part. If the \opt{y2k} option is in force, or if -% the year is less than~1901, the entire year is used. Otherwise -% the last two digits of the year are used.\footnote{Years with -% more than 4 digits are not currently handled correctly. -% \emph{Caveat lector}.} -% -% The combination of author part and year part will be referred to -% as the \emph{stem}. -% -% \item[3.] The suffix. If two or more items have the same stems, -% a suffix consisting of a lowercase latin letter will be appended -% to each label to make it unique. -% -% \end{enumerate} -% -% \label{stem-comparison} -% This third part is more subtle than it might first appear. -% First, case is ignored when comparing stems, so that, for -% example, ``Ahl1999'' and ``AHL1999'' are considered identical. -% Second, existing practice (in English, at least), is to ignore -% diacritics so that, for example, ``Ahl1999'' and ``\"Ahl1999'' -% are considered identical. -% -% Note that when checking for duplicate stems, we assume that -% bibliography items appear sorted by label, which means that all -% items with the same stem will be adjacent. This means we can use -% the naive algorithm (check to see if the current item has the -% same stem as the previous item and, if so, append a suffix) to -% detect clashes. This sorting will be done automatically by -% \bst{amsxport}, but the document author is responsible for -% ensuring the appropriate order if \bst{amsxport} is not used. -% This is why it's an error to mix the \opt{alphabetic} and -% \opt{citation-order} options. -% -% \subsubsection{The implementation} -% -% \begin{macrocode} -\let\previous@stem\@empty -\let\current@stem\@empty -% \end{macrocode} -% -% \begin{macrocode} -\let\previous@year\@empty -\let\current@year\@empty -% \end{macrocode} -% -% \begin{macro}{\append@to@stem} -% \begin{macrocode} -\def\append@to@stem{\global\@concat\current@stem} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\generate@alphalabel} -% \begin{macrocode} -\def\generate@alphalabel{% -% \end{macrocode} -% If the user supplied an explicit \fld{label} field, we use it. -% Otherwise, we generate our own. -% \begin{macrocode} - \ifx\bib'label\@empty - \begingroup -% \end{macrocode} -% We begin by saving the previous stem and initializing the -% current stem to the empty string. -% \begin{macrocode} - \global\let\previous@stem\current@stem - \global\let\current@stem\@empty -% \end{macrocode} -% The list of primary contributors is available to us in -% \cs{current@primary} in the form -% \begin{quote} -% \cnm{name}{$\mathrm{Last}_1, \mathrm{First}_1$}% -% \cnm{name}{$\mathrm{Last}_2, \mathrm{First}_2$} -% \ldots -% \cnm{name}{$\mathrm{Last}_n, \mathrm{First}_n$} -% \end{quote} -% We will be executing this list multiple times with various -% definitions of \cs{name}. So the first thing we want to do is -% establish a safe environment and normalize the names. -% \begin{macrocode} - \@apply\auto@protect\amsrefs@textsymbols - \@apply\auto@protect\amsrefs@textaccents - \auto@protect\name - \auto@protect\etaltext - \normalize@edef\@tempa\current@primary -% \end{macrocode} -% Now we count the number of authors in the list and invoke the -% appropriate macro to calculate the author part of the -% reference label. -% \begin{macrocode} - \get@numberof\@tempcnta\name\@tempa - \calc@author@part -% \end{macrocode} -% Next append the year part. -% \begin{macrocode} - \append@label@year -% \end{macrocode} -% At this point, the \cs{current@stem} is complete and we're ready -% to determine what (if any) suffix is needed to disambiguate -% it from the previous label. -% \begin{macrocode} - \calc@alpha@suffix -% \end{macrocode} -% We have all the pieces now. Arrange to end the current group and -% then define \cs{bib@label} in the enclosing group. (This keeps -% \cs{bib@label} from being defined outside the group started by -% \cs{bib@start}. This isn't strictly necessary, but it provides a -% bit of compartmentalization.) -% \begin{macrocode} - \edef\@tempa{% - \def\@nx\bib'label{% - \current@stem - \alpha@label@suffix - }% - }% - \@xp\endgroup - \@tempa - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\calc@author@part} -% \begin{macrocode} -\def\calc@author@part{% - \ifnum \@tempcnta = 1 - \@xp\@oneauthorlabel\@xp{\@tempa}% - \else - \@xp\@multiauthorlabel\@xp{\@tempa}% - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@firstone} -% This extracts the first character from a properly prepared author -% name (i.e., one in which accents are properly wrapped). -% \begin{macrocode} -\def\@firstone#1{\@car#1\@empty\@nil} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@firstthree} -% And this extracts the first three characters. -% \begin{macrocode} -\def\@firstthree#1{\@carcube#1\@empty\@empty\@empty\@nil} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@nametoken} -% \begin{macrocode} -\let\@nametoken\@firstone -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\hyph@to@space} -% \begin{macrocode} -\def\hyph@to@space#1-{#1 \hyph@to@space} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@marknames} -% Since we have a~' with funny catcode already, let's use it (being -% able to easily put a space after the |'| makes things easier). -% \begin{macrocode} -\def\@marknames#1{% - \@ifnotempty{#1}{\surround@names#1 ' }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\surround@names} -% \begin{macrocode} -\def\surround@names#1 {% - \ifx '#1% - \else - \@nx\@nametoken{#1}% - \@xp\surround@names - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\extract@surnames} -% \begin{macrocode} -\def\extract@surnames#1#2{% - \get@namepart\@tempb\@nilgobble #2,\@nil - \edef\@tempb{\@nx\@marknames{\@xp\hyph@to@space\@tempb\@gobble-}}% - \edef#1{\@tempb}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@oneauthorlabel} -% This is the easy case. -% \begin{macrocode} -\newcommand{\@oneauthorlabel}[1]{% - \def\name##1{% - \extract@surnames\@tempa{##1}% - \get@numberof\@tempcnta\@nametoken\@tempa - \ifnum \@tempcnta = 1 - \let\@nametoken\@firstthree - \fi - \append@to@stem{\@tempa}% - }% - #1% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@threeauthors} -% \begin{macrocode} -\def\@threeauthors\name#1\name#2\name#3#4\@empty{% - \name{#1}\name{#2}\name{#3}% - \append@to@stem{\etalchar{+}}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@multiauthorlabel} -% \begin{macrocode} -\newcommand{\@multiauthorlabel}[1]{% - \def\name##1{% - \ifx\etaltext ##1% - \def\@tempa{\@nx\etalchar{+}}% - \let\name\@gobble - \else - \extract@surnames\@tempa{##1}% - \fi - \append@to@stem{\@tempa}% - }% - \ifnum \@tempcnta > 4 \@xp \@threeauthors \fi - #1\@empty -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\etalchar} -% \begin{macrocode} -\newcommand{\etalchar}[1]{$^{#1}$} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\year@short} -% For alphanumeric labels, we want to extract the last 2 digits of -% the year. Here's a way to do that, assuming a 4-digit year. -% \begin{macrocode} -\def\year@short#1#2#3#4\@nil{#3#4} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\append@label@year} -% \begin{macrocode} -\def\append@label@year{% - \safe@set\@tempcnta\bib@year - \edef\bib@citeyear{\the\@tempcnta}% - \append@to@stem{% - \ifx\bib@year\@empty - \else - \@xp\year@short \bib@citeyear \@nil - \fi - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\let\alpha@label@suffix\@empty - -\newcount\alpha@suffix -\alpha@suffix\@ne -\let\@suffix@format\@alph -% \end{macrocode} -% -% \begin{macro}{\calc@alpha@suffix} -% \begin{macrocode} -\def\calc@alpha@suffix{% - \@tempswafalse - \compare@stems\previous@stem\current@stem - \ifsame@stems -% \end{macrocode} -% Under the \opt{alphabetic} option, \cs{previous@year} and -% \cs{current@year} will always be the same (namely, both will be -% empty), but including the test allows this code to work with the -% \opt{author-year} option as well. -% \begin{macrocode} - \ifx\previous@year\current@year - \@tempswatrue - \fi - \fi - \if@tempswa - \global\advance\alpha@suffix\@ne - \edef\alpha@label@suffix{\@suffix@format\alpha@suffix}% - \ifnum\alpha@suffix=\tw@ - \immediate\write\@auxout{% - \string\ModifyBibLabel{\prev@citekey}% - }% - \fi - \else - \let\alpha@label@suffix\@empty - \global\alpha@suffix\@ne - \@xp\ifx \csname b@\current@citekey @suffix\endcsname \relax - \else - \edef\alpha@label@suffix{\@suffix@format\alpha@suffix}% - \fi - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ifsame@stems} -% \begin{macrocode} -\newif\ifsame@stems -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\compare@stems} -% \begin{macrocode} -\def\compare@stems#1#2{% - \begingroup - \purge@edef\@tempa{#1}% - \purge@edef\@tempb{#2}% - \lc@edef\@tempa{\@tempa}% - \lc@edef\@tempb{\@tempb}% - \ifx\@tempa\@tempb - \def\@tempa{\same@stemstrue}% - \else - \def\@tempa{\same@stemsfalse}% - \fi - \@xp\endgroup - \@tempa -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ModifyBibLabel} -% \begin{macrocode} -\def\ModifyBibLabel#1{% - \global\@xp\let\csname b@#1@suffix\endcsname\@empty -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Generating short alphabetic labels} -% -% This style for alphabetic labels is somewhat simpler than the -% regular alphabetic style. The stem consists only of an author -% part without a year part. The author part is formed in the same -% way, except that even when there is only a single author with a -% one-word last name, only the first letter of the name is used, -% not the first three. Finally, the suffix used to disambiguate -% identical stems is numeric rather than alphabetic. -% -% See section~\ref{opt:shortalphabetic} on -% page~\pageref{opt:shortalphabetic} for the implementation. -% -% \subsection{Formatting series} -% -% The \cn{PrintSeries} command prints a list of objects in series -% form. The essential idea is to produce something like \qq{A, B, and -% C} when we are given three elements ``A'', ``B'', and ``C'', with -% suitable variations in the punctuation and other intervening -% material depending on the number of elements. -% -% More precisely, we can envision \cn{PrintSeries} being -% called as -% \begin{quote} -% |\PrintSeries{|$S$|}{|$i_1$|}{|$i_2$|}{|$i_3$|}{|$E$|}{\do{|$T_1$|}| \dots|\do{|$T_n$|}}| -%\end{quote} -% where $S$ and~$E$ are material to be interpolated before the -% start and after the end of the list, respectively, -% $i_1$, \dots, $i_3$ are material to be interpolated between the -% elements, and the final argument is a list of indeterminate -% length where each element consists of a macro and its -% argument. If there are exactly two elements, $i_1$ is inserted -% between them; otherwise, $i_2$ is inserted between each pair of -% items except for the last pair, where $i_3$ is inserted. Thus, -% \begin{center} -% \begin{tabular}{ll} -% $n$ & output \\ -% 1 & $S$ $T_1$ $E$ \\ -% 2 & $S$ $T_1$ $i_1$ $T_2$ $E$ \\ -% 3 & $S$ $T_1$ $i_2$ $T_2$ $i_3$ $T_3$ $E$ \\ -% 4 & $S$ $T_1$ $i_2$ $T_2$ $i_2$ $T_3$ $i_3$ $T_4$ $E$ -%^^A \\$>4$ & $S$ $T_1$ $i_2$ $T_2$ $i_2$ $T_3$ \dots $T_{n-1}$ $i_3$ $T_n$ $E$ -% \end{tabular} -% \end{center} -% and so forth. For example, a standard comma-separated list could -% be formatted by -% \begin{verbatim} -% \PrintSeries{}{ and }{, }{, and }{}{...} -%\end{verbatim} -% -% That is the simple case but in practice there are -% additional complications. What if user-supplied line breaks have to -% be supported at the boundaries between elements? What if in -% addition to adding material between elements we also want to apply -% some handy function to each element (e.g., \cn{textsc})? Even -% worse, what if we want the function to be different depending on -% the position of the element in the list? Indeed if this did not -% happen to be the case with the current application I would not have -% gone to the extra trouble of supporting it. But if it must be so, -% then the output that we need from a list |\do{A}\do{B}...| is -% \begin{verbatim} -% f0{A} -% f0{A} p1 i1 f1{B} -% f0{A} p2 i2 f2{B} p3 i3 f3{B} -%\end{verbatim} -% and so on, where -% \begin{itemize} -% \item $f_n$ is a macro taking one argument, -% \item $p_n$ is punctuation\mdash material that must precede a line -% break if one occurs at this boundary, -% \item $i_n$ other interpolated material, as before. -% \end{itemize} -% To reduce the number of distinct required objects we decree that -% each element will get braces wrapped around it as a matter of -% course; then it is possible for $f_1$, $f_2$, $f_3$ to be -% assimilated onto the tail end of $i_1$, $i_2$, $i_3$. Since we -% also have to specify the macro that delimits the elements -% of the list, we end up with the following rather formidable -% signature: -% \begin{quote}\raggedright -% |\PrintSeries{\m} {|$f_0$|}| -% |{|$p_1$|}{|$i_1 f_1$|}| |{|$p_2$|}{|$i_2 f_2$|}| -% |{|$p_3$|}{|$i_3 f_3$|}| -% \hspace*{2 em} |{|$S$|} {\m{|$T_1$|}|$\dots$|\m{|$T_n$|}} {|$E$|}| -%\end{quote} -% and our comma-separated list example becomes -% \begin{verbatim} -% \PrintSeries{\do}{} {}{ and } {,}{ } {,}{ and } {}{...}{} -%\end{verbatim} -% -% \begin{macro}{\series@index} -% First we define a dedicated count register to be used in tracking -% the ordinal number of the item currently being processed. -% \begin{macrocode} -\newcount\series@index -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintSeries} -% \begin{macrocode} -\def\PrintSeries#1#2#3#4#5#6#7#8{% - \begingroup - \def\series@add@a{#2}% - \def\series@add@b{\SwapBreak{#3}#4}% - \def\series@add@c{\SwapBreak{#5}#6}% - \def\series@add@d{\SwapBreak{#7}#8}% - \def\series@add@e{\SwapBreak{#7}}% - \PrintSeries@a{#1}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrinteSeries@a} -% For \cs{PrintSeries@a} the first arg is the iterator function -% present in the list which is arg 3. Args 2 and 4 are extra material -% to be added before and after the list that may require the use of -% \cn{Plural} or \cn{SingularPlural}. -% \begin{macrocode} -\def\PrintSeries@a#1#2#3#4{% - \get@numberof\@tempcnta#1{#3}% - \chardef\series@total=\@tempcnta - \ifnum\series@total=\@ne - \let\SingularPlural\@firstoftwo - \else - \let\SingularPlural\@secondoftwo - \fi - \series@index=\z@ - \let#1\series@add - #2#3#4\relax - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\series@add} -% This is the inner function called by \cn{PrintSeries} that -% carefully distributes all the material stored previously in -% \cs{series@add@...} macros. -% -% Note that the handling of ``et al.''\ cases is somewhat -% hardcoded. This seemed preferable to adding yet another argument -% (or two!\@) to \cs{PrintSeries}. -% \begin{macrocode} -\def\series@add#1{% - \advance\series@index\@ne - \ifx\etaltext#1\relax - \ifnum\series@index=\tw@ - \def\@tempa{\space\SubEtal}% - \else - \def\@tempa{\series@add@e\space\SubEtal}% - \fi -% \end{macrocode} -% We assume there are fewer than 20,000 items in the list. -% \begin{macrocode} - \series@index\@MM - \else - \ifcase\series@index - \or -% \end{macrocode} -% Material before name 1: -% \begin{macrocode} - \let\@tempa\series@add@a - \or -% \end{macrocode} -% Material before name 2: -% \begin{macrocode} - \ifnum\series@total<\thr@@ - \let\@tempa\series@add@b - \else - \let\@tempa\series@add@c - \fi - \else -% \end{macrocode} -% Material before names 3, 4, 5,\dots -% \begin{macrocode} - \ifnum\series@index=\series@total - \let\@tempa\series@add@d - \else - \ifnum\series@index<\series@total - \let\@tempa\series@add@c - \else - \let\@tempa\@gobble - \fi - \fi - \fi - \fi - \@tempa{#1}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\SwapBreak} -% This takes a single argument, which should begin with a -% punctuation character, and conditionally appends it to the -% current horizontal list after removing any preceding whitespace. -% If there was also a penalty at the end of the hlist (presumed to -% be the result of a |\linebreak| at the end of a field value), it -% moves the penalty to \emph{after} the argument. -% -% \begin{bug} -% \cn{SwapBreak} interferes with \TeX's kerning mechanism. For -% example, consider a field value that ends with a~``y'' and that -% should have a comman automatically appended. \pkg{amsrefs} -% generates the equivalent of |y\SwapBreak{,}|, which results in -% ``y\SwapBreak{,}'' (no kern before the comma) rather than~``y,''. -% Unfortunately, fixing this would likely require a -% disproportionate effort. In cases where the lack of kerning is -% unacceptable, a workaround is to add the punctuation mark to the -% field value manually. For example, |title={...y,}| would -% generate the equivalent of |y,\SwapBreak{,}|, which in turn would -% produce ``y,\SwapBreak{,}'' since \cs{SwapBreak} is careful not -% to add duplicate punctuation. -% \end{bug} -% \begin{macrocode} -\def\SwapBreak#1{% - \relax\ifvmode\leavevmode\fi - \@tempcnta\@MM - \toks@{#1}% -% \end{macrocode} -% First, remove any preceding glue. (There usually shouldn't be -% any of this.) -% \begin{macrocode} - \unskip -% \end{macrocode} -% There might be also be kern, typically an italic correction left -% there by a previous \texttt{TextFontCommand} like \ncn{textit}. -% But don't remove the special 1\,sp kern used to mark the -% beginning of a bibliography entry. -% -% \begin{bug} -% Sometimes we want to keep the italic correction. -% \end{bug} -% \begin{macrocode} - \ifnum \lastkern>\@ne \unkern \fi -% \end{macrocode} -% And now look for a penalty and stash it in a safe place. -% \begin{macrocode} - \ifnum\lastpenalty=\z@ - \else - \@tempcnta\lastpenalty - \unpenalty - \fi -% \end{macrocode} -% Now we add the punctuation, \emph{unless} one of the following -% conditions is true: -% \begin{enumerate} -% -% \item -% The last item on the horizontal list was a kern of~1\,sp, -% indicating that we're at the very beginning of a bibliography -% item. -% -% \item -% The current space factor is equal to the \cs{sfcode} of the -% puncutation mark we are adding, meaning that the mark is already -% on the list. -% -% \item -% The current space factor is equal to the special value -% |\@nopunctsfcode|, meaning that |\nopunct| was specified. -% -% \end{enumerate} -% This relies on distinct punctuation marks having distinct space -% factors, as established by our definition of \cn{frenchspacing}. -% \begin{macrocode} - \edef\@tempa{% - \@nx\deferredquoteslogical - \ifnum\lastkern=\@ne - \else - \ifnum\spacefactor=\sfcode\@xp\@xp\@xp`\@xp\@car\string#1)\@nil - \else - \ifnum\spacefactor=\@nopunctsfcode - \else - \the\toks@ - \fi - \fi - \fi - \@nx\deferredquotes - \ifnum\@tempcnta=\@MM \else \penalty\number\@tempcnta\space \fi - \ifnum\lastkern=\@ne \ignorespaces \fi - }% - \@tempa -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\Plural} -% \begin{macro}{\SingularPlural} -% \cn{Plural} takes one argument and prints it if there were two or -% more elements in the current list. So, to get \qq{editors} instead -% of \qq{editor} after printing a list of editor names, write -% \verb'editor\Plural{s}'. -% -% \cn{SingularPlural} takes two arguments and prints the first if -% there was only one element, otherwise prints the second arg. -% \begin{macrocode} -\newcommand{\SingularPlural}[2]{#1} -\newcommand{\Plural}{\SingularPlural{}} -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \subsection{Formatting names and series of names}\label{name-style} -% -% Now that we have a general mechanism for formatting series, we -% can easily specialize to the common case of a comma-separated -% list of names. First we provide specifications for the three -% most common name formats. -% -% \begin{macro}{\setbib@nameLE} -% This sets a name in standard western uninverted order, e.g., -% ``John Doe Jr.'' (The ``LE'' stands for little-endian.) -% \begin{macrocode} -\BibSpec{nameLE}{ - +{}{}{given} - +{}{\IfEmptyBibField{given}{}{ }}{surname} - +{}{ }{jr} -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\setbib@nameBE} -% Big-endian order, as used for example in traditional Chinese, -% Japanese, Vietnamese, and Hungarian names: ``Doe John''. -% Big-endian formatting can be requested for name by setting the -% ``inverted'' property to ``yes.'' -% \begin{macrocode} -\BibSpec{nameBE}{ - +{}{}{surname} - +{}{ }{given} -% \end{macrocode} -% I don't know what should happen if there's a suffix, so I'm going -% to just leave it out for now (although I should probably issue a -% warning). I suspect that either (a)~it never comes up or (b)~if -% it does come up, there's no set standard for how it should be -% handled. -% \begin{macrocode} -% +{}{ }{jr} -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\setbib@nameinverted} -% Inverted western-style names: ``Doe, John, Jr.'' -% \begin{macrocode} -\BibSpec{nameinverted}{ - +{} {} {surname} - +{,}{ } {given} - +{,}{ } {jr} -} -% \end{macrocode} -% \end{macro} -% -% Incidentally, it would probably be cleaner if names had their -% own namespace like properties do, i.e., something like -% \begin{verbatim} -% \DefineSimpleKey{name}{given} -% \DefineSimpleKey{name}{initials} -% \DefineSimpleKey{name}{surname} -% \DefineSimpleKey{name}{jr} -%\end{verbatim} -% followed by -% \begin{verbatim} -% \NameSpec{nameLE}{...} -%\end{verbatim} -% or -% \begin{verbatim} -% \BibSpec[name]{nameLE}{...} -%\end{verbatim} -% But this seems a little extravagant at this stage, so I've -% decided to leave things as-is for now. -% -% \begin{macro}{\PrintNames} -% \cn{PrintNames} is a simplified interface to \cs{PrintSeries} that -% takes only the last three arguments: -% \begin{quote}\raggedright -% |\PrintNames {|$S$|} {|$E$|} {\name{|$T_1$|}|$\dots$|\name{|$T_n$|}}| -%\end{quote} -% The order of the last two arguments is reversed to make it -% moderately easier to use; cf.\ \cn{PrintEditorsA}, etc. -% -% The first name in a series is treated differently than the other -% names in the \opt{author-year} style, so we use a separate -% formatting macro for it. -% \begin{macrocode} -\newcommand{\PrintNames}{% - \@ifstar{\PrintNames@a\set@othername}{\PrintNames@a\set@firstname}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintNames@a} -% \begin{macrocode} -\newcommand{\PrintNames@a}[4]{% - \PrintSeries{\name} - {#1} - {}{ and \set@othername} - {,}{ \set@othername} - {,}{ and \set@othername} - {#2}{#4}{#3}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\set@firstname} -% By default, the first name is formatted in little-endian format. -% The \opt{author-year} option changes this to inverted order. -% \begin{macrocode} -\def\set@firstname#1{% - \set@name{#1}\setbib@nameLE -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\set@othername} -% The rest of the names are set in little-endian format by -% default. -% \begin{macrocode} -\def\set@othername#1{% - \set@name{#1}\setbib@nameLE -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\set@name} -% Parse the name into its components and then pass control to -% \cs{set@name@a}, which will decide what format to use for the -% name. -% \begin{macrocode} -\def\set@name#1{% - \name@split#1,,,\@nil - \set@name@a -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\set@namea} -% Use the requested format unless the |order| property has been set -% to ``inverted.'' -% \begin{macrocode} -\def\set@name@a#1{% - \begingroup - \get@current@properties - \select@auxlanguage - \def\@tempa{yes}% - \ifx\@tempa\prop'inverted - \setbib@nameBE - \else - #1% - \fi - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintPrimary} -% \begin{macrocode} -\def\PrintPrimary{% - \ifx\current@primary\@empty - \EmptyPrimaryWarning - \else - \print@primary\current@primary - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\EmptyPrimaryWarning} -% \begin{macrocode} -\def\EmptyPrimaryWarning{% - \amsrefs@warning{No authors, editors or translators}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintAuthors} -% The comparison of \cs{previous@primary} and \cs{current@primary} -% doesn't look at auxiliary properties (see also \cs{PrintEditorsA} -% and \cs{PrintTranslatorsA}). This is probably ok. -% \begin{macrocode} -\newcommand{\PrintAuthors}[1]{% - \ifx\previous@primary\current@primary - \sameauthors\@empty - \else - \def\current@bibfield{\bib'author}% - \PrintNames{}{}{#1}% - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\sameauthors} -% \begin{macrocode} -\newcommand{\sameauthors}[1]{\bysame#1} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bysame} -% \begin{macrocode} -\def\bysame{% - \leavevmode\hbox to3em{\hrulefill}\thinspace - \kern\z@ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintNameList} -% This just prints the names without any additional information. -% \begin{macrocode} -\newcommand{\PrintNameList}{\PrintNames{}{}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintEditorsC} -% \begin{macrocode} -\newcommand{\PrintEditorsC}[1]{% - \PrintNames{Edited by }{}{#1}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintEditorsA} -% When we consider editor names we have to think about some further -% complications. First, for the case of a book where editor names are -% listed in place of author names, just copy the same style with a -% bit of added text at the end. -% \begin{macrocode} -\newcommand{\PrintEditorsA}[1]{% - \ifx\previous@primary\current@primary - \sameauthors{(ed\Plural{s}.)}% - \else - \def\current@bibfield{\bib'editor}% - \PrintNames{}{ (ed\Plural{s}.)}{#1}% - \fi - \erase@field\bib'editor -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintEditorsB} -% \begin{macrocode} -\newcommand{\PrintEditorsB}{% - \PrintNames*{(}{\SwapBreak{,}~ed\Plural{s}.)}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintContributions} -% \begin{macrocode} -\newcommand{\PrintContributions}[1]{% - \PrintSeries - {\fld@elt} - {\print@contribution} - {}{ and \print@contribution} - {,}{ \print@contribution} - {,}{ and \print@contribution}{}{#1}{}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\print@contribution} -% \begin{macrocode} -\newcommand{\print@contribution}[1]{% - \in@={#1}% - \ifin@ - \ifnum\series@index=\@ne with \fi - \RestrictedSetKeys{}{bib}{% - \bib@print@inner\setbib@contribution{\the\rsk@toks}% - }{#1}% - \else - #1% - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\resolve@inner} -% \begin{macrocode} -\def\resolve@inner#1#2{% - \in@={#2}% - \ifin@ - \RestrictedSetKeys{}{bib}{#1{\the\rsk@toks}}{#2}% - \else - \@ifundefined{bi@#2}{% - \XRefWarning{#2}% - }{% - #1{\csname bi@#2\endcsname}% - }% - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintConference} -% \begin{macrocode} -\def\PrintConference{% - \resolve@inner{\bib@print@inner\setbib@conference} -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintConferenceDetails} -% \begin{macrocode} -\def\PrintConferenceDetails#1{% - \ifx\@empty\bib'address - \ifx\@empty\bib'date - \else - \PrintConferenceDetails@ - \fi - \else - \PrintConferenceDetails@ - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintConferenceDetails@} -% \begin{macrocode} -\def\PrintConferenceDetails@{% - \ifnum\lastkern=\@ne\else\space\fi(\kern 1sp - \ifx\@empty\bib'address - \else - \bib'address - \fi - \ifx\@empty\bib'date - \else - \SwapBreak{,}\space - \print@date - \fi - )%\spacefactor\sfcode`\,% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintBook} -% \begin{macrocode} -\def\PrintBook{% - \resolve@inner{\bib@print@inner\setbib@innerbook} -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintReprint} -% \begin{macrocode} -\def\PrintReprint{% - \resolve@inner{\bib@reprint} -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bib@reprint} -% \begin{macrocode} -\def\bib@reprint#1{% - \begingroup - #1\relax % execute definitions locally - \bib@field@patches - \bib'setup - \IfEmptyBibField{copula}{reprinted in}{\bib'copula} \nopunct - \let\bib'language\@empty - \setbib@book - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintTranslation} -% \begin{macrocode} -\def\PrintTranslation{% - \resolve@inner{\bib@translation} -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bib@translation} -% \begin{macrocode} -\def\bib@translation#1{% - \begingroup - #1\relax % execute definitions locally - \bib@field@patches - \bib'setup - \let\PrintPrimary\@empty - \bib@append{;}{ % keep this space! - \IfEmptyBibField{language}{English}{\bib'language} transl.% - \IfEmptyBibField{pages}{ in \kern\@ne sp}{, }% - }\bib'transition - \let\bib'language\@empty - \setbib@@ - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintTranslatorsC} -% \begin{macrocode} -\newcommand{\PrintTranslatorsC}[1]{% - \PrintNames{translated by }{}{#1}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintTranslatorsA} -% \begin{macrocode} -\newcommand{\PrintTranslatorsA}[1]{% - \ifx\previous@primary\current@primary - \sameauthors{(trans.)}% - \else - \def\current@bibfield{\bib'translator}% - \PrintNames{}{ (trans.)}{#1}% - \fi - \erase@field\bib'translator -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintTranslatorsB} -% \begin{macrocode} -\newcommand{\PrintTranslatorsB}[1]{ - \PrintNames*{(}{\SwapBreak{,}~tran\Plural{s}.)}% -} -% \end{macrocode} -% \end{macro} -% -% Some special handling for ``et alii'' or ``and others''. -% \begin{macrocode} -\DefineName{alii}{\etaltext} -\DefineName{others}{\etaltext} -% \end{macrocode} -% -% \begin{macro}{\etaltext} -% \begin{macro}{\SubEtal} -% The Chicago Manual of Style suggests that it is slightly better not -% to italicize `et al' and some other extremely common abbreviations -% inherited from Latin. (Compare `etc'.) -% \begin{macrocode} -\newcommand{\etaltext}{et al.} -\newcommand{\SubEtal}[1]{\etaltext} -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \subsection{The \fld{partial} field} -% -% \begin{macro}{\print@partial} -% \begin{macrocode} -\newcommand{\print@partial}{% - \resolve@inner{\bib@print@inner\setbib@partial} -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Special formatting for other fields} -% -% \begin{macro}{\parenthesize} -% The \cn{parenthesize} function adds parentheses around its -% argument, calling \cn{upn} to optionally prevent italic -% parentheses from being used. -% \begin{macrocode} -\newcommand{\parenthesize}[1]{% - \leavevmode\push@bracket)\upn{(}#1\pop@bracket -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\upn} -% By default, \cn{upn} is a no-op, meaning that this refinement -% lies dormant unless the \pkg{upref} package or other activation -% is done. (Probably better done via special fonts, anyway.) -% \begin{macrocode} -\providecommand{\upn}[1]{#1} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\push@bracket} -% \begin{macro}{\pop@bracket} -% \begin{macrocode} -\let\bracket@stack\@empty - -\def\push@bracket#1{% - \xdef\bracket@stack{#1\bracket@stack}% -} - -\def\pop@bracket{% - \iffalse{\fi - \@xp\pop@bracket@a\bracket@stack \@empty}% -} - -\def\pop@bracket@a#1{% - \leavevmode\/\upn{#1}% - \xdef\bracket@stack{\iffalse}\fi -} -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\bibquotes} -% \begin{macrocode} -\newcommand{\bibquotes}[1]{% - \textquotedblleft#1% - \gdef\deferredquotes{% - \global\let\deferredquotes\@empty - \textquotedblright - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\mdash} -% \begin{macro}{\ndash} -% Cf.\@ \pkg{textcmds}, where there's also a penalty added. -% \begin{macrocode} -\providecommand{\mdash}{\textemdash} -\providecommand{\ndash}{\textendash} -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\MR} -% \begin{macrocode} -\def\MR#1{% - \relax\ifhmode\unskip\spacefactor3000 \space\fi - \def\@tempa##1:##2:##3\@nil{% - \ifx @##2\@empty##1\else\textbf{##1:}##2\fi - }% - \MRhref{#1}{MR \@tempa#1:@:\@nil}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\MRhref} -% For older versions of some AMS document classes, this patch is -% needed. -% \begin{macrocode} -\providecommand{\MRhref}[1]{} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintReviews} -% Reviews are handled as a list to support the theoretical -% possibility of multiple reviews. -% \begin{macrocode} -\newcommand{\PrintReviews}[1]{% - \PrintSeries{\fld@elt}{}{,}{ }{,}{ }{,}{ }{}{#1}{}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintPartials} -% \begin{macrocode} -\newcommand{\PrintPartials}[1]{% - \PrintSeries - {\fld@elt} - {\print@partial} - {;}{ \print@partial} - {;}{ \print@partial} - {;}{ \print@partial}{}{#1}{}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintISBNs} -% And similarly for ISBNs. There seem to be a few different -% situations where one book might have two different ISBN numbers. -% Here are the ones I know of so far [mjd,2002-02-18]: separate ISBN -% numbers for hardback and paperback; separate ISBN numbers for U.S. -% edition and European edition. -% \begin{macrocode} -\newcommand{\PrintISBNs}[1]{% - \PrintSeries{\fld@elt}{}{,}{ }{,}{ }{,}{ }{ISBN }{#1}{}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\voltext} -% \begin{macrocode} -\newcommand{\voltext}{\IfEmptyBibField{series}{Vol.~}{vol.~}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\issuetext} -% \begin{macrocode} -\newcommand{\issuetext}{no.~} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DashPages} -% Scan the contents of a page value to see if it is a single page. -% Presence of \cn{ndash} or hyphen is taken to mean no. Probably -% should test also for spaces and commas. [mjd,2000/01/24] -% \begin{macrocode} -\newcommand{\DashPages}[1]{% - p\pp@scan@a#1@\ndash p@\ndash{\pp@scan#1@-p@-{}\@nil}\@nil.~#1% -} - -\def\pp@scan#1-#2@-#3#4\@nil{#3} - -\def\pp@scan@a#1\ndash#2@\ndash#3#4\@nil{#3} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\eprintpages} -% If we have eprint info and pages info and no journal name, the -% pages information is presumably the number of pages in the eprint. -% \begin{macrocode} -\newcommand{\eprintpages}[1]{% - #1\IfEmptyBibField{eprint}{}{\IfEmptyBibField{journal}{ pp.}{}}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintThesisType} -% \begin{macrocode} -\def\PrintThesisType#1{% - \thesis@type#1?\@nil{#1}% -} - -\def\thesis@type#1#2\@nil#3{% - \ifx p#1% - Ph.D. Thesis% - \else - \ifx m#1% - Master's Thesis% - \else - #3% - \fi - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintDOI} -% Perhaps need to add allowbreak penalties at the parentheses in a DOI. -% Also what about prohibiting a break after the leading S? -% \begin{macrocode} -\newcommand{\PrintDOI}[1]{% - DOI #1% - \IfEmptyBibField{volume}{, (to appear in print)}{}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintDatePV} -% Print date in different forms depending on DOI and volume -% information. -% \begin{macrocode} -\newcommand{\PrintDatePV}[1]{% - \IfEmptyBibField{doi}{% - \let\@tempa\PrintDate - }{% - \IfEmptyBibField{volume}{% - \let\@tempa\PrintDatePosted - }{% - \let\@tempa\PrintDate - }% - }% - \@tempa{#1}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintDate} -% The intent is to handle variations such as \texttt{1987}, -% \texttt{August 1987}, \texttt{1987-08}, and -% \texttt{1987-08-14}. If the month is present, print August or -% Aug. or 08 or nothing, at the behest of the bib style. -% -% We've taken some special care to parse out the date info ahead of -% time, so this function just discards arg 1 and uses the -% already-parsed value. -% \begin{macrocode} -\newcommand{\PrintDate}[1]{(\print@date)} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintDateB} -% The same, but without the parentheses. -% \begin{macrocode} -\newcommand{\PrintDateB}[1]{\print@date} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\print@date} -% \begin{macrocode} -\def\print@date{% - \ifx\bib@month\@empty - \else - \print@month@day - \fi - \bib@year -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\print@month@day} -% \begin{macrocode} -\def\print@month@day{% - \bib@monthname - \ifx\@empty\bib@day \else \nobreakspace\number 0\bib@day,\fi - \space -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bib@monthname} -% With the Babel package, month names for a given language are -% typically available in a macro \cs{month@}\emph{language}: -% \begin{verbatim} -% \def\month@german{\ifcase\month\or -% Januar\or Februar\or M\"arz\or April\or Mai\or Juni\or -% Juli\or August\or September\or Oktober\or November\or Dezember\fi} -%\end{verbatim} -% However this is not true for English. -% \begin{macrocode} -\newcommand{\bib@monthname}{% - \ifcase 0\bib@month - \or January\or February\or March\or April\or May\or June\or - July\or August\or September\or October\or November\or December\or - Winter\or Spring\or Summer\or Fall\else Unknown Month% - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintYear} -% You can use \cn{PrintYear} if you want to suppress month/day even -% when supplied in the data. -% \begin{macrocode} -\newcommand{\PrintYear}[1]{\bib@year} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintDatePosted} -% This one is special for AMS use. -% \begin{macrocode} -\newcommand{\PrintDatePosted}[1]{\unskip, posted on \print@date} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintEdition} -% \begin{macrocode} -\newcommand{\PrintEdition}[1]{% - \afterassignment\print@edition - \count@ 0#1\relax\@nil -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\print@edition} -% If the number assignment swept up all the contents, produce a -% cardinal number from \cs{count@}. -% \begin{macrocode} -\def\print@edition#1#2\@nil{% - \ifx\relax#1\relax - \ifnum\count@>\z@ - \CardinalNumeric\count@ - \else - ??th% - \fi - \ \editiontext - \else - \ifnum \count@>\z@ \number\count@ \fi - #1#2\relax - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\editiontext} -% \begin{macrocode} -\newcommand{\editiontext}{ed.} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\CardinalNumber} -% \begin{macrocode} -\newcommand{\CardinalNumeric}[1]{% - \number#1\relax - \if - \ifnum#1<14 - \ifnum#1>\thr@@ T\else F\fi - \else - F% - \fi - T% - th% - \else - \@xp\keep@last@digit\@xp#1\number#1\relax - \ifcase#1th\or st\or nd\or rd\else th\fi - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\keep@last@digit} -% \begin{macrocode} -\def\keep@last@digit#1#2{% - \ifx\relax#2% - \@xp\@gobbletwo - \else - #1=#2\relax - \fi - \keep@last@digit#1% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\SentenceSpace} -% Note how careful we are here to preserve \cn{frenchspacing}. -% \begin{macrocode} -\newcommand{\SentenceSpace}{\relax\ifhmode\spacefactor`\. \fi} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\eprint} -% For now, this does nothing. Could do a url/hyperlink or something. -% \begin{macrocode} -\newcommand{\eprint}[1]{\url{#1}} -% \end{macrocode} -% \end{macro} -% The \url{www.arXiv.org} recommendations for citing their eprints are -% found at \url{http://xxx.lanl.gov/help/faq/references}, including -% these examples: -% \begin{verbatim} -% arXiv:hep-th/9910001 -% arXiv:math.AT/9910001 -% arXiv:physics.acc-ph/9911027 -%\end{verbatim} -% -% \subsection{\BibTeX\ support} -% -% \begin{macro}{\bibliographystyle} -% Disable \cn{bibliographystyle} since we're going to handle that -% behind the scenes. -% \begin{macrocode} -\let\bibliographystyle\@gobble -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bibtex@style} -% \begin{macrocode} -\def\bibtex@style{amsrn} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\AtBeginDocument{ - \if@filesw - \immediate\write\@auxout{\string\bibstyle{\bibtex@style}}% - \fi -} -% \end{macrocode} -% -% \subsection{Implementing package options} -% -% \subsubsection{The \opt{alphabetic} option} -% -% \begin{macrocode} -\IfOption{alphabetic}{% - \def\bibtex@style{amsra}% - \def\alpha@label{% - \ifx\@empty\bib'label - \def\thebib{\CurrentBib}% - \else - \let\thebib\bib'label - \fi - }% - \let\generate@label\generate@alphalabel - \let\process@citelist\process@citelist@unsorted - \def\numeric@refs{01}% -}{} -% \end{macrocode} -% -% \subsubsection{The \opt{shortalphabetic} option} -% \label{opt:shortalphabetic} -% -% \begin{macrocode} -\IfOption{shortalphabetic}{% - \def\bibtex@style{amsrs}% - \def\alpha@label{% - \ifx\@empty\bib'label - \def\thebib{\CurrentBib}% - \else - \let\thebib\bib'label - \fi - }% - \let\@suffix@format\@arabic - \def\calc@author@part{% - \@xp\@multiauthorlabel\@xp{\@tempa}% - }% - \let\append@label@year\@empty - \let\generate@label\generate@alphalabel - \let\process@citelist\process@citelist@unsorted - \def\numeric@refs{01}% -}{} -% \end{macrocode} -% -% \subsubsection{The \opt{backrefs} option} -% -% \begin{macrocode} -\IfOption{backrefs}{% - \let\PrintBackRefs\print@backrefs - \@ifundefined{Hy@backout}{% - \amsrefs@warning{backref option requires hyperref package}% - }{% - \let\BackCite\back@cite - \AtBeginDocument{\@starttoc{brf}{}}% - }% -}{% -} -% \end{macrocode} -% -% \subsubsection{The \opt{citation-order} option} -% -% \begin{macrocode} -\IfOption{citation-order}{% - \IfOption{alphabetic}{% - \amsrefs@warning@nl{% - The 'citation-order' and 'alphabetic' options are - incompatible% - }% - }{ - \def\bibtex@style{amsru}% - } -}{} -% \end{macrocode} -% -% \subsubsection{The \opt{initials} option} -% -% \begin{macrocode} -\IfOption{initials}{% TRUE: - \BibSpec{nameLE}{ - +{}{}{initials} - +{}{\IfEmptyBibField{initials}{}{ }}{surname} - +{}{ }{jr} - } - - \BibSpec{nameBE}{ - +{}{}{surname} - +{}{ }{initials} - % +{}{ }{jr} - } - - \BibSpec{nameinverted}{ - +{} {} {surname} - +{,}{ } {initials} - +{,}{ } {jr} - } -}{% initials? FALSE: -% \let\extract@initials\@gobble -} % end conditional code for initials option -% \end{macrocode} -% -% \subsubsection{The \opt{jpa} option} -% -% \begin{macrocode} -\IfOption{jpa}{% - \amsrefs@warning{The 'jpa' option is obsolete}% - \typeout{Trying \string\usepackage{amsjpa} instead ...}% - \RequirePackage{amsjpa}[2000/02/02] -}{} -% \end{macrocode} -% -% \subsubsection{The \opt{logical-quotes} option} -% -% \begin{macro}{\deferredquotes} -% \begin{macrocode} -\let\deferredquotes\@empty -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\deferredquoteslogical} -% \begin{macrocode} -\IfOption{logical-quotes}{% - \def\deferredquoteslogical{\deferredquotes}% -}{% - \let\deferredquoteslogical\relax -} -% \end{macrocode} -% \end{macro} -% -% \subsubsection{The \opt{non-compressed-cites} option} -% -% \begin{macrocode} -\IfOption{non-compressed-cites}{% - \let\cite@compress\cite@print -}{} -% \end{macrocode} -% -% \subsubsection{The \opt{non-sorted-cites} option} -% -% \begin{macrocode} -\IfOption{non-sorted-cites}{% - \let\process@citelist\process@citelist@unsorted -}{} -% \end{macrocode} -% -% \subsubsection{The \opt{short-journals} option} -% -% \begin{macrocode} -\IfOption{short-journals}{% - \renewcommand{\DefineJournal}[4]{% - \bib*{#1}{periodical}{ - issn={#2}, - journal={#3}, - }% - } -}{} -% \end{macrocode} -% -% \subsubsection{The \opt{short-publishers} option} -% -% \begin{macrocode} -\IfOption{short-publishers}{% - \renewcommand{\DefinePublisher}[4]{% - \bib*{#1}{publisher}{% - publisher={#2},% -% \end{macrocode} -% Maybe \opt{short-publishers} should suppress the \fld{address}? Or -% is that a separate option? I sense a combinatorial explosion -% coming on.\ldots -% \begin{macrocode} - address={#4}, - }% - }% -}{} -% \end{macrocode} -% -% \subsubsection{The \opt{short-months} option} -% -% \begin{macrocode} -\IfOption{short-months}{% - \renewcommand{\bib@monthname}{% - \ifcase 0\bib@month - \or Jan.\or Feb.\or Mar.\or Apr.\or May\or June\or - July\or Aug.\or Sep.\or Oct.\or Nov.\or Dec.\or - Winter\or Spring\or Summer\or Fall\else Unknown Month% - \fi - }% -}{} -% \end{macrocode} -% -% \subsubsection{The \opt{y2k} option} -% -% \begin{macrocode} -\IfOption{y2k}{% - \IfOption{alphabetic}{% - \def\year@short#1\@nil{#1}% - \def\bibtex@style{amsry}% - }{% - \amsrefs@warning@nl{% - The 'y2k' option can only be used with the^^J% - 'alphabetic' option% - }% -} -}{} -% \end{macrocode} -% -% \subsubsection{The \opt{bibtex-style} option} -% -% \begin{macrocode} -\IfOption{bibtex-style}{% - \RequirePackage{amsbst} -}{} -% \end{macrocode} -% -% \subsubsection{The \opt{author-year} option} -% -% Here ends the \pkg{amsrefs} package, unless the \opt{author-year} -% option is in effect; then we want to use some different -% bibspecs. -% \begin{macrocode} -\IfOption{author-year}{}{\PopCatcodes \endinput} -% \end{macrocode} -% -% \begin{macro}{\generate@label} -% \begin{macrocode} -\def\generate@label{% -% \end{macrocode} -% If the user supplied an explicit \fld{label} field, we use it. -% Otherwise, we generate our own. -% \begin{macrocode} - \ifx\bib'label\@empty - \begingroup -% \end{macrocode} -% We begin by saving the previous stem and initializing the -% current stem to the empty string. -% \begin{macrocode} - \global\let\previous@stem\current@stem - \global\let\current@stem\@empty - \global\let\previous@year\current@year - \global\let\current@year\bib@year -% \end{macrocode} -% The list of primary contributors is available to us in -% \cs{current@primary} in the form -% \begin{quote} -% \cnm{name}{$\mathrm{Last}_1, \mathrm{First}_1$}% -% \cnm{name}{$\mathrm{Last}_2, \mathrm{First}_2$} -% \ldots -% \cnm{name}{$\mathrm{Last}_n, \mathrm{First}_n$} -% \end{quote} -% We will be executing this list multiple times with various -% definitions of \cs{name}. So the first thing we want to do is -% establish a safe environment and normalize the names. -% \begin{macrocode} - \@apply\auto@protect\amsrefs@textsymbols - \@apply\auto@protect\amsrefs@textaccents - \def\name##1{\@nx\name{\lnscan@a##1,\@nil}}% - \auto@protect\etaltext - \normalize@edef\current@stem{\current@primary}% - \xdef\current@stem{\current@stem}% -% \end{macrocode} -% At this point, the \cs{current@stem} is complete and we're ready -% to determine what (if any) suffix is needed to disambiguate -% it from the previous label. -% \begin{macrocode} - \calc@alpha@suffix -% \end{macrocode} -% We have all the pieces now. Arrange to end the current group and -% then define \cs{bib@label} in the enclosing group. (This keeps -% \cs{bib@label} from being defined outside the group started by -% \cs{bib@start}. This isn't strictly necessary, but it provides a -% bit of compartmentalization.) -% \begin{macrocode} - \edef\@tempa{% - \def\@nx\cite@label{\current@stem}% - \def\@nx\bib@label@year{% - \current@year - \alpha@label@suffix - }% - } - \@xp\endgroup - \@tempa - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\lnscan@a} -% \begin{macrocode} -\def\lnscan@a#1,#2\@nil{#1} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\citesel@author} -% \begin{macrocode} -\def\citesel@author#1#2#3#4#5{\PrintCiteNames{#3}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\citesel@authoryear} -% \begin{macrocode} -\def\citesel@authoryear#1#2#3#4#5{\PrintCNY{#3}{#4}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\citesel@object} -% \begin{macrocode} -\def\citesel@object#1#2#3#4#5{\PrintCiteNames{#3} \citeleft#4} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\citesel} -% \begin{macrocode} -\let\citesel\citesel@authoryear -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\numeric@refs} -% \begin{macrocode} -\def\numeric@refs{01}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\citeleft} -% \begin{macrocode} -\def\citeleft{(}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\citeright} -% \begin{macrocode} -\def\citeright{)}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@citeleft} -% \begin{macrocode} -\def\@citeleft{\ifx\citesel\citesel@object\else\citeleft\fi}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\citepunct} -% \begin{macrocode} -\def\citepunct{; } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\BibLabel} -% \begin{macrocode} -\let\BibLabel\@empty -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\process@citelist} -% \begin{macrocode} -\let\process@citelist\process@citelist@unsorted -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ycite} -% \begin{macrocode} -\DeclareRobustCommand{\ycite}[1]{% - \star@{\cite@a\citesel@year{#1}}{}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ycites} -% \begin{macrocode} -\DeclareRobustCommand{\ycites}[1]{% - \begingroup - \def\citepunct{, }% - \let\citesel\citesel@year - \cites{#1}% - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ocite} -% \begin{macrocode} -\DeclareRobustCommand{\ocite}[1]{% - \star@{\cite@a\citesel@object{#1}}{}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ocites} -% \begin{macrocode} -\DeclareRobustCommand{\ocites}[1]{% - \begingroup - \let\@citelist\@ocitelist - \cites{#1}% - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\ocitelist} -% \begin{macrocode} -\def\@ocitelist#1{% - \PrintSeries{\InnerCite}% - {\ocite}% - {}{ and \ocite}% -% \end{macrocode} -% For three or more names: print `et al' instead of the last name. -% Have to putz around with the space factor a bit or the comma -% between name and year will not be applied. -% \begin{macrocode} - {,}{ \ocite}% - {,}{ and \ocite}% - {}% - {#1}% - {}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\citeauthor} -% \begin{macrocode} -\DeclareRobustCommand{\citeauthor}[1]{% - \star@{\cite@a\citesel@author{#1}}{}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\citeauthory} -% \begin{macrocode} -\DeclareRobustCommand{\citeauthory}[1]{% - \citeauthor{#1} \ycite{#1}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\fullcite} -% \begin{macrocode} -\DeclareRobustCommand{\fullcite}[1]{% - \begingroup - \let\print@citenames\CiteNamesFull - \star@{\cite@a\citesel@authoryear{#1}}{}% - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\fullocite} -% \begin{macrocode} -\DeclareRobustCommand{\fullocite}[1]{% - \begingroup - \let\print@citenames\CiteNamesFull - \star@{\cite@a\citesel@object{#1}}{}% - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% Invert the first author's name. -% \begin{macrocode} -\def\set@firstname#1{% - \set@name{#1}\setbib@nameinverted -} -% \end{macrocode} -% -% \begin{macro}{\PrintCNY} -% \begin{macrocode} -\def\PrintCNY#1#2{% - \PrintCiteNames{#1}% - \@ifnotempty{#2}{\@addpunct{,} #2}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintCiteNames} -% \begin{macrocode} -\def\PrintCiteNames#1{% - \leavevmode - \def\@tempa{#1}% - \ifx\@tempa\prev@names - \else - \gdef\prev@names{#1}% - \@xp\ifx\@car#1.\@nil\CitePrintUndefined - #1\relax - \else - \print@citenames{#1}% - \fi - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\CiteNames} -% \begin{macrocode} -\newcommand{\CiteNames}[1]{% - \PrintSeries{\name}% - {}% - {}{ and }% -% \end{macrocode} -% For three or more names: print `et al' instead of the last name. -% Have to putz around with the space factor a bit or the comma -% between name and year will not be applied. -% \begin{macrocode} - {}{\@gobble}% - {}{ \etaltext\@\@gobble}% - {}% - {#1}% - {}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\print@citenames} -% \begin{macrocode} -\let\print@citenames\CiteNames -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\CiteNamesFull} -% \begin{macrocode} -\newcommand{\CiteNamesFull}[1]{% - \PrintSeries{\name}% - {}% - {}{ and }% -% \end{macrocode} -% For three or more names: print `et al' instead of the last name. -% Have to putz around with the space factor a bit or the comma -% between name and year will not be applied. -% \begin{macrocode} - {,}{ }% - {,}{ and }% - {}% - {#1}% - {}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintDate} -% No parentheses around the year. -% \begin{macrocode} -\renewcommand{\PrintDate}[1]{\bib@label@year} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\print@date} -% Only print the year, not the month or day. -% \begin{macrocode} -\def\print@date{% - \IfEmptyBibField{date}{% - \IfEmptyBibField{year}{\BibField{status}}{\bib@year}% - }{% - \bib@year - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\BibSpec{article}{% - +{} {\PrintAuthors} {author} - +{.} { \PrintDate} {date} - +{.} { \textit} {title} - +{.} { } {part} - +{:} { \textit} {subtitle} - +{,} { \PrintContributions} {contribution} - +{.} { \PrintPartials} {partial} - +{,} { } {journal} - +{} { \textbf} {volume} - +{,} { \issuetext} {number} - +{,} { \eprintpages} {pages} - +{,} { } {status} - +{,} { \PrintDOI} {doi} - +{,} { available at \eprint} {eprint} - +{} { \parenthesize} {language} - +{} { \PrintTranslation} {translation} - +{;} { \PrintReprint} {reprint} - +{.} { } {note} - +{.} {} {transition} - +{} {\SentenceSpace \PrintReviews} {review} -} - -\BibSpec{book}{% - +{} {\PrintPrimary} {transition} - +{.} { \PrintDate} {date} - +{.} { \textit} {title} - +{.} { } {part} - +{:} { \textit} {subtitle} - +{,} { \PrintEdition} {edition} - +{} { \PrintEditorsB} {editor} - +{,} { \PrintTranslatorsC} {translator} - +{,} { \PrintContributions} {contribution} - +{,} { } {series} - +{,} { \voltext} {volume} - +{,} { } {publisher} - +{,} { } {organization} - +{,} { } {address} - +{,} { } {status} - +{} { \parenthesize} {language} - +{} { \PrintTranslation} {translation} - +{;} { \PrintReprint} {reprint} - +{.} { } {note} - +{.} {} {transition} - +{} {\SentenceSpace \PrintReviews} {review} -} - -\BibSpec{collection.article}{% - +{} {\PrintAuthors} {author} - +{.} { \PrintDate} {date} - +{.} { \textit} {title} - +{.} { } {part} - +{:} { \textit} {subtitle} - +{,} { \PrintContributions} {contribution} - +{,} { \PrintConference} {conference} - +{} {\PrintBook} {book} - +{,} { } {booktitle} - +{,} { pp.~} {pages} - +{,} { } {status} - +{,} { \PrintDOI} {doi} - +{,} { available at \eprint} {eprint} - +{} { \parenthesize} {language} - +{} { \PrintTranslation} {translation} - +{;} { \PrintReprint} {reprint} - +{.} { } {note} - +{.} {} {transition} - +{} {\SentenceSpace \PrintReviews} {review} -} - -\BibSpec{report}{% - +{} {\PrintPrimary} {transition} - +{.} { \PrintDate} {date} - +{.} { \textit} {title} - +{.} { } {part} - +{:} { \textit} {subtitle} - +{,} { \PrintEdition} {edition} - +{,} { \PrintContributions} {contribution} - +{,} { Technical Report } {number} - +{,} { } {series} - +{,} { } {organization} - +{,} { } {address} - +{,} { \eprint} {eprint} - +{,} { } {status} - +{} { \parenthesize} {language} - +{} { \PrintTranslation} {translation} - +{;} { \PrintReprint} {reprint} - +{.} { } {note} - +{.} {} {transition} - +{} {\SentenceSpace \PrintReviews} {review} -} - -\BibSpec{thesis}{% - +{} {\PrintAuthors} {author} - +{.} { \PrintDate} {date} - +{.} { \textit} {title} - +{:} { \textit} {subtitle} - +{,} { \PrintThesisType} {type} - +{,} { } {organization} - +{,} { } {address} - +{,} { \eprint} {eprint} - +{,} { } {status} - +{} { \parenthesize} {language} - +{} { \PrintTranslation} {translation} - +{;} { \PrintReprint} {reprint} - +{.} { } {note} - +{.} {} {transition} - +{} {\SentenceSpace \PrintReviews} {review} -} -% \end{macrocode} -% -% \begin{macrocode} -\PopCatcodes -%</pkg> -% \end{macrocode} -% -% \subsection{The \pkg{amsbst} package} -% -% \begin{macrocode} -%<*bst> -% \end{macrocode} -% -% \begin{macrocode} -\NeedsTeXFormat{LaTeX2e}[1995/12/01] -\ProvidesPackage{amsbst}[2004/03/29 v1.68] -%\RequirePackage{amsrefs}[2004/03/29] -% \end{macrocode} -% -% \begin{macrocode} -\BibSpec{article}{% - +{} {\PrintAuthors} {author} - +{.} { } {title} - +{.} { } {part} - +{:} { } {subtitle} - +{.} { \PrintContributions} {contribution} - +{.} { \PrintPartials} {partial} - +{.} { \emph} {journal} - +{} { } {volume} - +{} { \parenthesize} {number} - +{:} {} {pages} - +{,} { \PrintDateB} {date} - +{,} { } {status} - +{.} { \PrintTranslation} {translation} - +{.} { Reprinted in \PrintReprint} {reprint} - +{.} { } {note} - +{.} {} {transition} -} - -\BibSpec{partial}{% - +{} {} {part} - +{:} { } {subtitle} - +{.} { \PrintContributions} {contribution} - +{.} { \emph} {journal} - +{} { } {volume} - +{} { \parenthesize} {number} - +{:} {} {pages} - +{,} { \PrintDateB} {date} -} - -\BibSpec{book}{% - +{} {\PrintPrimary} {transition} - +{.} { \emph} {title} - +{.} { } {part} - +{:} { \emph} {subtitle} - +{.} { } {series} - +{,} { \voltext} {volume} - +{.} { Edited by \PrintNameList} {editor} - +{.} { Translated by \PrintNameList}{translator} - +{.} { \PrintContributions} {contribution} - +{.} { } {publisher} - +{.} { } {organization} - +{,} { } {address} - +{,} { \PrintEdition} {edition} - +{,} { \PrintDateB} {date} - +{.} { } {note} - +{.} {} {transition} - +{.} { \PrintTranslation} {translation} - +{.} { Reprinted in \PrintReprint} {reprint} - +{.} {} {transition} -} - -\BibSpec{collection.article}{% - +{} {\PrintAuthors} {author} - +{.} { } {title} - +{.} { } {part} - +{:} { } {subtitle} - +{.} { \PrintContributions} {contribution} - +{.} { \PrintConference} {conference} - +{.} { \PrintBook} {book} - +{.} { In } {booktitle} - +{,} { pages~} {pages} - +{.} { \PrintDateB} {date} - +{.} { \PrintTranslation} {translation} - +{.} { Reprinted in \PrintReprint} {reprint} - +{.} { } {note} - +{.} {} {transition} -} - -\BibSpec{conference}{% - +{} {} {title} - +{} {\PrintConferenceDetails} {transition} -} - -\BibSpec{innerbook}{% - +{.} { \emph} {title} - +{.} { } {part} - +{:} { \emph} {subtitle} - +{.} { } {series} - +{,} { \voltext} {volume} - +{.} { Edited by \PrintNameList} {editor} - +{.} { Translated by \PrintNameList}{translator} - +{.} { \PrintContributions} {contribution} - +{.} { } {publisher} - +{.} { } {organization} - +{,} { } {address} - +{,} { \PrintEdition} {edition} - +{,} { \PrintDateB} {date} - +{.} { } {note} - +{.} {} {transition} -} - -\BibSpec{report}{% - +{} {\PrintPrimary} {transition} - +{.} { \emph} {title} - +{.} { } {part} - +{:} { \emph} {subtitle} - +{.} { \PrintContributions} {contribution} - +{.} { Technical Report } {number} - +{,} { } {series} - +{.} { } {organization} - +{,} { } {address} - +{,} { \PrintDateB} {date} - +{.} { \PrintTranslation} {translation} - +{.} { Reprinted in \PrintReprint} {reprint} - +{.} { } {note} - +{.} {} {transition} -} - -\BibSpec{thesis}{% - +{} {\PrintAuthors} {author} - +{,} { \emph} {title} - +{:} { \emph} {subtitle} - +{.} { \PrintThesisType} {type} - +{.} { } {organization} - +{,} { } {address} - +{,} { \PrintDateB} {date} - +{.} { \PrintTranslation} {translation} - +{.} { Reprinted in \PrintReprint} {reprint} - +{.} { } {note} - +{.} {} {transition} -} -% \end{macrocode} -% -% \begin{macro}{\PrintEditorsA} -% When we consider editor names we have to think about some further -% complications. First, for the case of a book where editor names are -% listed in place of author names, just copy the same style with a -% bit of added text at the end. -% \begin{macrocode} -\renewcommand{\PrintEditorsA}[1]{% - \def\current@bibfield{\bib'editor}% - \PrintNames{}{, editor\Plural{s})}{#1}% - \erase@field\bib'editor -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrintTranslatorsA} -% \begin{macrocode} -\renewcommand{\PrintTranslatorsA}[1]{% - \def\current@bibfield{\bib'translator}% - \PrintNames{}{, translator\Plural{s}}{#1}% - \erase@field\bib'translator -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -%</bst> -% \end{macrocode} -% -% The usual \cs{endinput} to ensure that random garbage at the end of -% the file doesn't get copied by \fn{docstrip}. -% \begin{macrocode} -\endinput -% \end{macrocode} -% -% \CheckSum{5005} -% \Finale diff --git a/Master/texmf-dist/source/latex/amslatex/amstext.dtx b/Master/texmf-dist/source/latex/amslatex/amstext.dtx deleted file mode 100644 index 0ef49f67a64..00000000000 --- a/Master/texmf-dist/source/latex/amslatex/amstext.dtx +++ /dev/null @@ -1,314 +0,0 @@ -%%% ==================================================================== -%%% @LaTeX-file{ -%%% filename = "amstext.dtx", -%%% version = "2.01", -%%% date = "2000/06/29", -%%% time = "08:34:33 EDT", -%%% checksum = "09860 314 1647 12368", -%%% author = "American Mathematical Society", -%%% copyright = "Copyright 1995, 1999 American Mathematical Society, -%%% all rights reserved. Copying of this file is -%%% authorized only if either: -%%% (1) you make absolutely no changes to your copy, -%%% including name; OR -%%% (2) if you do make changes, you first rename it -%%% to some other name.", -%%% address = "American Mathematical Society, -%%% Technical Support, -%%% Electronic Products and Services, -%%% P. O. Box 6248, -%%% Providence, RI 02940, -%%% USA", -%%% telephone = "401-455-4080 or (in the USA and Canada) -%%% 800-321-4AMS (321-4267)", -%%% FAX = "401-331-3842", -%%% email = "tech-support@ams.org (Internet)", -%%% supported = "yes", -%%% keywords = "latex, math, text", -%%% abstract = "This is a \LaTeX{} package that defines a -%%% \cn{\text} macro, which makes it easy to -%%% incorporate fragments of text inside a displayed -%%% equation or a sub or superscript. Font sizes -%%% are automatically scaled in sub/superscripts.", -%%% docstring = "The checksum field above contains a CRC-16 -%%% checksum as the first value, followed by the -%%% equivalent of the standard UNIX wc (word -%%% count) utility output of lines, words, and -%%% characters. This is produced by Robert -%%% Solovay's checksum utility.", -%%% } -%%% ==================================================================== -% \iffalse -%<*driver> -\documentclass{amsdtx} -\usepackage{amstext} -\begin{document} -\title{The \pkg{amstext} package} -\author{Frank Mittelbach \and Rainer Sch\"opf} -\date{Version \fileversion, \filedate} -\hDocInput{amstext.dtx} -\end{document} -%</driver> -% \fi -% -% \maketitle -% -% \MakeShortVerb\| -% -% \section{Introduction} -% -% This style file implements the \AmSTeX{} macro \cn{text} for use -% with the new font selection scheme. The \cn{text} macro is a -% sophisticated command which allows the user to insert ``normal text'' -% into math formulas without worrying about correct sizes in sub- or -% superscripts. It can also be used in ordinary text; there it -% produces an unbreakable unit similar to \cn{mbox}. -% -% Here is an example demonstrating some of its features: -% \[ -%^^A mathbin spacing is nonscript glue, disappears in superscript -% x^{2\,\times\,\text{size of $y$}} -% \leq -% z_{i_{\text{upper bound of the array}}} -% \] -% This was produced by -% \begin{verbatim} -% \[ -% x^{2\,\times\,\text{size of $y$}} -% \leq -% z_{i_{\text{upper bound of the array}}} -% \] -% \end{verbatim} -% -% Additionally this style file redefines an internal \fn{plain.tex} -% macro called \cs{mathhexbox} so that commands like \cn{dag} -% or \cn{P} will change sizes if used in math subscripts. -% -% \StopEventually{} -% Package information. -% \begin{macrocode} -\NeedsTeXFormat{LaTeX2e}% LaTeX 2.09 can't be used (nor non-LaTeX) -[1994/12/01]% LaTeX date must be December 1994 or later -\ProvidesPackage{amstext}[2000/06/29 v2.01] -% \end{macrocode} -% -% \section{The implementation} -% We need a few tools from \fn{amsgen.sty}. -% \begin{macrocode} -\RequirePackage{amsgen} -% \end{macrocode} -% -% \begin{macro}{\text} -% Now we come to the \cn{text} macro which is used to place -% ordinary text inside of math formulas. If it is used outside -% math it will produce an unbreakable unit of text. -% \begin{macrocode} -\DeclareRobustCommand{\text}{% - \ifmmode\expandafter\text@\else\expandafter\mbox\fi} -% \end{macrocode} -% At the present time (late 1994) the \latex/ internal function -% |\nfss@text| is used in |\ref|, in font commands like |\textbf|, -% and in a few text symbol definitions like |\$| and |\pounds|. By -% equating |\nfss@text| to |\text| we give it the ability of -% |\text| to change sizes properly if used in a subscript. -% \begin{macrocode} -\let\nfss@text\text -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\text@} -% If \cn{text} is encountered inside math mode the macro -% \cs{text@} is called. It has one mandatory argument, the text -% which should be produced. Since we do not know in which math -% style we are currently in we call \cs{mathchoice} to tyeset -% our text in all four possible styles. -% \begin{macrocode} -\def\text@#1{{\mathchoice -% \end{macrocode} -% To save token space we call a macro \cs{textdef@} which takes -% three arguments: the current math style, the corresponding size -% macro and the text to typeset possibly with some additional -% information for typesetting. -% \begin{macrocode} - {\textdef@\displaystyle\f@size{#1}}% -% \end{macrocode} -% The other three cases are similar except for the -% \cs{iffirstchoice} switch which we set to false. This is -% done to prevent \LaTeX{} macros like \cn{ref} or \cn{index} -% from writing their arguments more than once. -% \begin{macrocode} - {\textdef@\textstyle\f@size{\firstchoice@false #1}}% - {\textdef@\textstyle\sf@size{\firstchoice@false #1}}% - {\textdef@\textstyle \ssf@size{\firstchoice@false #1}}% -% \end{macrocode} -% Here we need to check whether a math size-change occurred inside -% the argument of \cn{text}. If so, restore -% \begin{macrocode} - \check@mathfonts - }% -} -% \end{macrocode} -% The macros \cs{f@size}, \cs{sf@size} and \cs{ssf@size} hold the -% sizes which should be used when we are loading a new font for use -% in \cs{textfont}, \cs{scriptfont} and \cs{scriptscriptfont}. There -% is some question whether we should use use \cs{tf@size} or -% \cs{f@size} for the main size, but since the primary purpose of the -% \cn{text} macro is to switch back to text within a display, it -% seems that \cs{f@size} is the better choice. (Indeed it could be -% said that the \cn{text} actually provides two different functions: -% one for escaping out of math mode in a display to print some words, -% and the other for handling math objects that are named by a -% fragment of text, when \cn{operatorname} isn't the right choice. -% For the latter \cs{tf@size} might be more correct but for the -% former \cs{f@size} is clearly better.) -% \end{macro} -% -% \begin{macro}{\textdef@} -% To typeset the argument of \cn{text} correctly we have to make -% several actions. We start by placing everything inside an -% \cs{hbox}. But this is not enough: we need one extra level of -% grouping. These extra braces are necessary because of the new -% font selection scheme which might produce an \cs{aftergroup} -% to globally restore some font values after the current group. To -% prevent any damage by this mechanism we add the braces thereby -% bringing the token inserted by \cs{aftergroup} inside the -% \cs{hbox}.\footnote{The mechanism will not produce a second -% \cs{aftergroup}. For more details see the technical documentation -% for NFSS2.} -% \begin{macrocode} -\def\textdef@#1#2#3{\hbox{{% -% \end{macrocode} -% Since text typeset inside an \cs{hbox} always stays in the size -% of the text surrounding the formula we have to adjust this for -% script and scriptscript sizes. For any math formula inside this -% argument this will be achieved by setting \cs{everymath} to -% the first argument of \cs{textdef@} since this argument -% contains the math size in the current typeset case of -% \cs{mathchoice}. -% Since \latex/ also knows about \cn{parbox}es and the -% \env{minipage} environment it might be neccessary to adjust -% \cs{everydisplay} too but this has to be tested further. -% \begin{macrocode} - \everymath{#1}% -% \end{macrocode} -% The next line of code changes locally (i.e.\ inside the current -% \cs{hbox}) the value of \cs{f@size}. This macro holds the -% size for typesetting ordinary text (e.g.\ loading or selecting a -% new font via \cs{selectfont}). By changing it to a smaller -% value a following \cs{selectfont} will switch to the wanted -% size. -% \begin{macrocode} - \let\f@size#2\selectfont -% \end{macrocode} -% Now we simply call the third argument and close all open groups. -% \begin{macrocode} - #3}}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\iffirstchoice@} -% Here is the switch that we use to decide if \cn{ref} etc.\ -% should print its warnings. The default is true since -% normally these warnings shouldn't be suppressed. -% \begin{macrocode} -\newif\iffirstchoice@ -\firstchoice@true -% \end{macrocode} -% \end{macro} -% -% \subsection{Re-definition of \latex/ macros to work with \cn{text}} -% -% If a counter-changing command occurs inside the argument of -% \cn{text}, we don't want the counter to be changed four times -% because \cn{stepcounter} and \cn{addtocounter} have global effect. -% So we add the \cs{iffirstchoice@} test to make the counter -% operations execute only once. -% -% \begin{macro}{\stepcounter} -% Use \cs{def} rather than \cn{renewcommand*} because the star-form -% (for non-\cs{long} definitions) doesn't work with the June 1994 -% release of \latex/. -% \begin{macrocode} -\def\stepcounter#1{% - \iffirstchoice@ - \addtocounter{#1}\@ne - \begingroup \let\@elt\@stpelt \csname cl@#1\endcsname \endgroup - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\addtocounter} -% \begin{macrocode} -\def\addtocounter#1#2{% - \iffirstchoice@ - \@ifundefined {c@#1}{\@nocounterr {#1}}% - {\global \advance \csname c@#1\endcsname #2\relax}% - \fi} -% \end{macrocode} -% \end{macro} -% -% For \cn{ref}, \cn{pageref}, and indeed anything else that issues a -% warning or error, \cn{text} will produce four copies of the -% warning/error message. To suppress the last three copies, we change -% \cs{GenericInfo}, \cs{GenericWarning}, \cs{GenericError}. -% \begin{macrocode} -\let\m@gobble\@empty -\@xp\let\csname m@gobble4\endcsname\@gobblefour -\long\@xp\def\csname m@gobble6\endcsname#1#2#3#4#5#6{} -% \end{macrocode} -% -% \begin{macrocode} -\toks@{% - \csname m@gobble\iffirstchoice@\else 4\fi\endcsname - \protect} -\edef\GenericInfo{\the\toks@ - \@xp\@nx\csname GenericInfo \endcsname} -% -\edef\GenericWarning{\the\toks@ - \@xp\@nx\csname GenericWarning \endcsname} -% -\toks@{% - \csname m@gobble\iffirstchoice@\else 6\fi\endcsname - \protect} -\edef\GenericError{\the\toks@ - \@xp\@nx\csname GenericError \endcsname} -% \end{macrocode} -% -% At one time \cn{label}, \cs{@wrindex} and \cs{@wrglossary} were -% changed here too to use the \cs{iffirstchoice@} test but it seems -% that was a mistake because those are non-immediate writes. -% Something like -% \begin{verbatim} -% \text{something \index{foo}} -% \end{verbatim} -% within a math formula would therefore \emph{lose the index term} if -% the surrounding context was not displaystyle. (Unlikely in -% practice, but not impossible.) [mjd,1994/12/09] -% -%\subsection{Applications of \cn{text}} -% -% \begin{macro}{\mathhexbox} -% We start with an re-definition of the \fn{plain.tex} macro -% \cs{mathhexbox}. (Although M. Spivak in \amstex/ uses the name -% \cs{mathhexbox@} for this purpose, I [FMi] don't see any reason -% to use a new name since the new definition is superior, has the -% same syntax and is used for the same purpose.) -% \begin{macrocode} -\begingroup \catcode`\"=12 -\gdef\mathhexbox#1#2#3{\text{$\m@th\mathchar"#1#2#3$}} -\endgroup -% \end{macrocode} -% This redefinition means that now symbols like \S, \P, \dag, \ldots, -% which are defined via \cs{mathhexbox} in \fn{plain.tex} or -% elsewhere now correctly change sizes if they are used in math mode. -% \end{macro} -% -% The usual \cs{endinput} to ensure that random garbage at the end of -% the file doesn't get copied by \fn{docstrip}. -% \begin{macrocode} -\endinput -% \end{macrocode} -% -% \CheckSum{129} -% \Finale diff --git a/Master/texmf-dist/source/latex/amslatex/amsxport.dtx b/Master/texmf-dist/source/latex/amslatex/amsxport.dtx deleted file mode 100644 index 308a8c2698c..00000000000 --- a/Master/texmf-dist/source/latex/amslatex/amsxport.dtx +++ /dev/null @@ -1,1822 +0,0 @@ -%%% ==================================================================== -%%% @BibTeX-source-file{ -%%% filename = "amsxport.dtx", -%%% version = "2.00", -%%% date = "2004/06/28", -%%% time = "14:50:12 EDT", -%%% author = "Michael J Downes", -%%% address = "American Mathematical Society, -%%% Publications Technical Group, -%%% PO Box 6248, -%%% Providence, RI 02940, -%%% USA", -%%% email = "tech-support at ams.org", -%%% URL = "http://www.ams.org/", -%%% abstract = "The BibTeX style file amsxport.bst produces .bbl -%%% entries where most of the database structure is -%%% retained. This is intended for processing by a smart -%%% bibliography package such as the amsrefs package.", -%%% checksum = "40425 1822 6396 51551", -%%% docstring = "The checksum field, produced by Robert Solovay's -%%% checksum utility, gives CRC-16 checksum, lines, -%%% words, and characters.", -%%% } -%%% ==================================================================== -% \iffalse -%<*driver> -\NeedsTeXFormat{LaTeX2e} -\documentclass[draft,oneside]{amsdtx}[1999/11/01] - -\providecommand{\vn}[1]{\emph{#1}}% variable name - -\renewcommand*\descriptionlabel[1]{\hspace\labelsep - \normalfont\bfseries #1:} - -%% Use normal typesize instead of \small for code listings. - -\def\MacroFont{% - \fontencoding\encodingdefault - \fontfamily\ttdefault - \fontseries\mddefault - \upshape -} - -\makeatletter - -%% Don't prepend \ to macro names. - -\def\SpecialIndex@#1#2{% - \@SpecialIndexHelper@#1\@nil - \def\@tempb{ }% - \ifcat \@tempb\@gtempa - \special@index{\quotechar\space\actualchar - \string\verb\quotechar*\verbatimchar - \quotechar\space\verbatimchar#2}% - \else - \def\@tempb##1##2\relax{\ifx\relax##2\relax - \def\@tempc{\special@index{\quotechar##1\actualchar - \string\verb\quotechar*\verbatimchar - \quotechar##1\verbatimchar#2}}% - \else - \def\@tempc{\special@index{##1##2\actualchar - \string\verb\quotechar*\verbatimchar - ##1##2\verbatimchar#2}}% - \fi}% - \expandafter\@tempb\@gtempa\relax - \@tempc - \fi} - -\makeatother - -\PageIndex - -\begin{document} -\title{The AMS Export Bib\TeX{} style [\fn{amsxport}]} -\author{American Mathematical Society\\Michael Downes\\David M. Jones} -\date{Version \fileversion, \filedate} -\hDocInput{amsxport.dtx} -\PrintIndex -\end{document} -%</driver> -% \fi -% -% \MakeShortVerb{\|} -% -% \maketitle -% -% \tableofcontents -% -% \section{Introduction} -% -% \bst{amsxport} is the collective name for a collection of -% \bibtex/ styles that form a bridge between \BibTeX\ and -% \pkg{amsrefs}. It produces output in which the structural -% information of the original \bibtex/ database file is -% retained. No ad hoc visual formatting is introduced that would -% hamper the application of alternative design specifications when -% rendering the information on paper or screen. This makes it -% possible to have \bibtex/ handle only extraction and sorting and -% leave the visual appearance to be controlled entirely by -% \latex/. The process of applying typical bibliography specs to -% exported data is illustrated in the \pkg{amsrefs} package. The -% authoritative description of the export format is in the -% \pkg{amsrefs} documentation, inasmuch as interpreting the format -% is the chief task of the \pkg{amsrefs} package. -% -% Each of the five \fn{.bst} files generated from this file -% corresponds to a combination of \pkg{amsrefs} package options, as -% follows: -% \begin{description} -% -% \item[amsrn] -% -% This is the default style, used when none of the following is -% appropriate. -% -% \item[amsru] -% -% This is used when the \opt{citation-order} option is specified. -% It is identical to \bst{amsrn} except that the bibliography items -% are not sorted. -% -% \item[amsra] -% -% This is when with the \opt{alphabetic} option is specified, byt -% the \opt{y2k} option is \emph{not} also specified. -% -% \item[amsry] -% -% This is used when both the \opt{alphabetic} and \opt{y2k} options -% are specified. -% -% \item[amsrs] -% -% This is used when the \opt{shortalphabetic} option is specified. -% -% \end{description} -% -% Readers may wish to refer also to the standard \bibtex/ -% documentation (\fn{btxdoc.tex}, \fn{btxhak.tex}, \fn{btxbst.doc}) -% for background information. -% -% \StopEventually{} -% -% \section{Implementation} -% -% The list below gives the fields that are expected to occur. (Other -% fields will be discarded without comment.) -% suggested fields. -% \begin{macrocode} -%<*bst> -ENTRY - { - address institution number status - archive isbn organization subtitle - author issn pages title - booktitle journal part translator - chapter key pii type - date language preprint url - edition meeting publisher volume - editor month review xid - eprint mrnumber school year - howpublished note series - } - { } - { label } -% \end{macrocode} -% -% Some comments about specific fields: -% \begin{description} -% \item[archive] The archive that holds the eprint listed in the -% \fn{eprint} field. -% \item[author] \bibtex/ doesn't allow this field (or any field) to be -% used more than once, but in the output its contents will be split -% into a separate key-value pair for each name. Likewise for -% \fn{editor} and \fn{translator}. -% \item[crossref] This is a built-in field type, so it doesn't occur in -% the argument of ENTRY above. -% \item[date] This is a generalization of the \fn{year} and \fn{month} -% fields. Its value should be written in ISO 8601 format, e.g., -% 1987-06-05; but the day and month are omissible, so this can be -% easily be used instead of the \fn{year} field. -% \item[edition] For books. The \bibtex/ documentation suggests that the -% value of this field should be an ordinal word such as \qq{Second}. -% This may be because the \bibtex/ language provides only the weakest -% sort of support for an \emph{is-numeric} test. -% \item[eprint] Electronic preprint information such as for -% \url{www.arXiv.org}. -% \item[institution] What's the difference between an \fn{institution} -% and an \fn{organization}? The \bibtex/ documentation says that -% \fn{institution} should be used for technical reports and -% \fn{organization} for other entry types. -% \item[isbn] International Standard Book Number. -% \item[issn] International Standard Serial Number. See the discussion -% of journal abbreviations. -% \item[language] Language of the work. This is especially desirable -% when the value of the title field is a translation of the true -% title (most often when the original language is one like Arabic or -% Chinese that poses rendering problems for non-native software). -% \item[meeting] Since \bibtex/ doesn't allow a field name to be the -% same as a function name, we have to use \fn{meeting} instead of -% \fn{conference} if we want to give the title of a conference in a -% dedicated field. -% \item[mrnumber] An alias for \fn{review} which we provide because -% MathSciNet has been using it in the \bibtex/ output that it -% provides for a couple of years already. -% \item[organization] See the comment for \fn{institution}. -% \item[pii] Publisher Item Identifier -% \item[part] This is for a long journal article that is published in -% separate issues of the same journal. There should be a separate -% \bibtex/ entry for each part (though all the ones after part 1 -% could crossref the first one). -% -% \item[preprint] It is not possible quite yet to assume that all -% preprints should be classified as eprints. If you have a preprint -% that is not an eprint, use this field to give the \qq{address} -% where the preprint may be found (institution, preprint number, -% etc.). -% -% \item[review] Review numbers or similar pointers, e.g., for -% Mathematical Reviews or Zentralblatt. -% -% \item[school] The analog of \qq{organization}, for a thesis. -% -% \item[status] Typically used for notes such as ``to appear'' or ``in -% preparation'' with journal articles. -% -% \item[subtitle] Typically used with a multipart journal article to -% give a subtitle for each part. -% -% \item[translator] This needs no explanation, surely? Except perhaps to -% note that the standard \bibtex/ styles don't provide it. -% -% \item[url] Universal Resource Locator. -% -% \item[xid] This is used by a cross-referenced item to pass its -% identity to child entries that refer to it. It would not be -% necessary if \bibtex/ left the \fn{crossref} field value -% accessible, but for some reason that I have not found yet (skimming -% in the source code) it is cleared internally before there is any -% opportunity to save it. -% -% Practically speaking: For every \fn{crossref} in your \fn{.bib} -% files, the target should contain a matching \fn{xid} field. -% -% \end{description} -% -% More on extra fields. In the Shelah bibliography, the \fn{author} -% field is given without any accents in the author names, and the -% normal \tex/ version of the author names is given in a separate -% field called \fn{trueauthor}. -% -% Also, for MR reviews: -% \begin{verbatim} -% review = {MR 48:3735}, -%\end{verbatim} -% And for each author a country is indicated with the \fn{fromwhere} -% field, e.g., -% \begin{verbatim} -% fromwhere = {UK, IL}, -%\end{verbatim} -% This means the first author is from the United Kingdom and the -% second one from Israel. -% -% \section{Macros for month names} -% -% \begin{macrocode} -MACRO {jan} {"-01"} -MACRO {feb} {"-02"} -MACRO {mar} {"-03"} -MACRO {apr} {"-04"} -MACRO {may} {"-05"} -MACRO {jun} {"-06"} -MACRO {jul} {"-07"} -MACRO {aug} {"-08"} -MACRO {sep} {"-09"} -MACRO {oct} {"-10"} -MACRO {nov} {"-11"} -MACRO {dec} {"-12"} -% \end{macrocode} -% -% Some scratch variables and global variables. -% \begin{macrocode} -STRINGS { p s t l } -% \end{macrocode} -% -% \begin{macrocode} -INTEGERS { len ptr } -%<bst> -% \end{macrocode} -% -% \begin{footnotesize}\itshape -% Note: \bibtex/ 0.99 requires a blank line in certain contexts, such -% as after the \fn{READ} command, and will choke if it is missing. -% When it is necessary to add a blank line at the boundary of a macro -% code section we use a \verb'<bst>' marker.\par -% \end{footnotesize} -% -% Some utility functions. -% \begin{macrocode} -FUNCTION {NOT} { { #0 } { #1 } if$ } - -FUNCTION {AND} { 'skip$ { pop$ #0 } if$ } - -FUNCTION {OR} { { pop$ #1 } 'skip$ if$ } - -FUNCTION {TRUE} { #1 } - -FUNCTION {FALSE} { #0 } -%<bst> -% \end{macrocode} -% -% \begin{macro}{incr.ptr} -% \begin{macrocode} -FUNCTION {incr.ptr} { ptr #1 + 'ptr := } -%<bst> -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{current.char} -% Returns: first character of STRING -% \begin{macrocode} -FUNCTION {current.char} { ptr #1 substring$ } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{copy.two.chars} -% The function \fn{copy.two.chars} appends the next two characters -% from s to STRING. -% -% Arg: STRING (partial copy of pages string) -% -% Returns: Modified version of STRING -% -% Side effects: advances ptr -% \begin{macrocode} -FUNCTION {copy.two.chars} { t * incr.ptr s current.char * incr.ptr } -%<bst> -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{is.digit} -% \begin{macrocode} -FUNCTION {is.digit} { - chr.to.int$ - duplicate$ - "0" chr.to.int$ #1 - > - swap$ - "9" chr.to.int$ #1 + < - AND -} -%<bst> -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{is.lowercase.letter} -% In a previous implementation the \fn{is.letter} function first -% lowercased the character using \verb'change.case$', then tested it -% against the range a--z. But \verb'change.case$' issues a warning if -% it is applied to a lone brace character. -% \begin{macrocode} -FUNCTION {is.lowercase.letter} { - chr.to.int$ duplicate$ - "a" chr.to.int$ #1 - > - swap$ - "z" chr.to.int$ #1 + < - AND -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{is.uppercase.letter} -% \begin{macrocode} -FUNCTION {is.uppercase.letter} { - chr.to.int$ duplicate$ - "A" chr.to.int$ #1 - > - swap$ - "Z" chr.to.int$ #1 + < - AND -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{is.letter} -% \begin{macrocode} -FUNCTION {is.letter} { - duplicate$ - is.lowercase.letter - { pop$ TRUE } - { is.uppercase.letter } - if$ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{skip.accent} -% This implementation of \fn{skip.accent} simply skips ahead one -% character whenever a backslash is found. This handles things like -% \verb'\v', \verb'\u', \verb'\k', \verb'\r'. Although this is overly -% simplistic it is still an improvement over the previous method -% which was to not even make the attempt. [mjd,2001-10-27] -% \begin{macrocode} -FUNCTION {skip.accent} { pop$ incr.ptr } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{strip.label} -% \begin{macrocode} -FUNCTION {strip.label} { - 's := - #1 'ptr := - "" - { s ptr #1 substring$ duplicate$ empty$ NOT } - { duplicate$ is.letter - { * } - { duplicate$ "\" = - { skip.accent } - 'pop$ - if$ - } - if$ - incr.ptr - } - while$ -% \end{macrocode} -% When the loop ends we have an extra empty-string on top of the -% stack to get rid of. -% \begin{macrocode} - pop$ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{sortify} -% \begin{macrocode} -FUNCTION {sortify} { - purify$ - "l" change.case$ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{rpad} -% Warning: The use of |text.length$| here and in \fn{lpad} -% restricts their use to strings that we know do not contain any -% special characters. Since we only use \fn{lpad} for field names -% and \fn{rpad} for |purify$|ed strings, this is ok. -% -% \<string> \<int> \fn{rpad} -% \begin{macrocode} -FUNCTION {rpad} { - swap$ - 'l := - l text.length$ - 'len := - { len #0 > } - { - l " " * 'l := - len #1 - 'len := - } - while$ - l -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{lpad} -% \<string> \<int> \fn{lpad} -% \begin{macrocode} -FUNCTION {lpad} { - swap$ - 'l := - l text.length$ - 'len := - { len #0 > } - { - " " l * 'l := - len #1 - 'len := - } - while$ - l -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{field.or.null} -% \begin{macrocode} -FUNCTION {field.or.null} { - duplicate$ empty$ - { pop$ "" } - 'skip$ - if$ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{missing.or.empty} -% \begin{macrocode} -FUNCTION {missing.or.empty} { duplicate$ missing$ swap$ empty$ OR } -%<bst> -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{append.ndash.and.skip.hyphens} -% The function \fn{append.ndash.and.skip.hyphens} adds \verb'\ndash' -% to STRING when a hyphen is found and advances ptr to the next -% non-hyphen character in \fn{s}. -% -% Arg: STRING (partial copy of pages string) -% -% Returns: modified version of STRING -% -% Side effects: advances ptr -% \begin{macrocode} -FUNCTION {append.ndash.and.skip.hyphens} { - "\ndash " * - incr.ptr - { s current.char "-" = } - { incr.ptr } - while$ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{n.dashify} -% In the \fn{n.dashify} function we store the given string in \fn{s}, -% push an empty string on the stack, and start examining the -% characters of \fn{s}. For a non-hyphen character, we just append a -% copy of it to the top string. For a hyphen, we append \cs{ndash} to -% the top string and advance the pointer until we reach a non-hyphen -% character. And there is one more exceptional case: for a backslash, -% we copy two characters instead of one. This keeps us from -% erroneously translating \verb'\-' to \verb'\\ndash'. One would -% scarcely expect to see an instance of \verb'\-' in a page number -% field but let's face it, in actual use nearly anything can and does -% happen. -% -% Arg: STRING (value of \fn{pages} field) -% -% Returns: STRING (dashified version of input string) -% \begin{macrocode} -FUNCTION {n.dashify} { - 's := - #1 'ptr := - "" - { s current.char 't := t "" = NOT } - { t "\" = - { copy.two.chars } - { t "-" = - { append.ndash.and.skip.hyphens } - { t * incr.ptr } - if$ - } - if$ - } - while$ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{missing.warning} -% Standard warning message for a missing or empty field. For the user -% we call any such field `missing' without respect to the distinction -% made by \bibtex/ between missing and empty. -% \begin{macrocode} -FUNCTION {missing.warning} { - "missing " swap$ * " in " * cite$ * warning$ -} -%<bst> -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{string.length} -% Because \bibtex/ doesn't provide a straightforward -% \fn{string.length} function (\verb'text.length$' counts ``special -% characters'' as a single character), it appears necessary to -% implement one the hard way. -% \begin{macrocode} -INTEGERS { string.ptr } - -FUNCTION {string.length} { - #1 'string.ptr := - { duplicate$ string.ptr #1 substring$ "" = 'FALSE 'TRUE if$ } - { string.ptr #1 + 'string.ptr := } - while$ - pop$ - string.ptr #1 - -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{format.title} -% \begin{macrocode} -FUNCTION {format.title}{ - duplicate$ - missing.or.empty - { pop$ "" } - { "t" change.case$ } - if$ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{start.field} -% \begin{macrocode} -FUNCTION {start.field} { - #12 lpad "={" * write$ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{fin.field} -% \begin{macrocode} -FUNCTION {fin.field} { "}," write$ newline$ } -%<bst> -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{write.field} -% \begin{macrocode} -FUNCTION {write.field} { - duplicate$ - missing$ - { pop$ missing.warning } - { duplicate$ empty$ - { pop$ missing.warning } - { swap$ start.field write$ fin.field } - if$ - } - if$ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{optional.field} -% \begin{macrocode} -FUNCTION {optional.field} { - duplicate$ - missing.or.empty - { pop$ pop$ } - { swap$ start.field write$ fin.field } - if$ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{optional.title.field} -% \begin{macrocode} -FUNCTION {optional.title.field} { - duplicate$ - missing.or.empty - { pop$ pop$ } - { format.title swap$ start.field write$ fin.field } - if$ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{optional.pages.field} -% \begin{macrocode} -FUNCTION {optional.pages.field} { - duplicate$ - missing.or.empty - { pop$ pop$ } - { swap$ start.field - n.dashify - write$ fin.field - } - if$ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{optional.mr.field} -% \begin{macrocode} -FUNCTION {optional.mr.field} { - duplicate$ - missing.or.empty - { pop$ pop$ } - { - swap$ start.field - "\MR{" swap$ * "}" * write$ fin.field - } - if$ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{remove.ordinal.suffix} -% \begin{macrocode} -FUNCTION {remove.ordinal.suffix} { - 's := - s string.length 'len := - #1 'ptr := - { ptr len < s ptr #1 substring$ is.digit AND } - 'incr.ptr - while$ - s ptr global.max$ substring$ 'p := - p "st" = - { TRUE } - { p "nd" = - { TRUE } - { p "rd" = - { TRUE } - { p "th" = - { TRUE } - { FALSE } - if$ - } - if$ - } - if$ - } - if$ - { s #1 ptr #1 - substring$ } - { s } - if$ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{optional.edition.field} -% \begin{macrocode} -FUNCTION {optional.edition.field} { - duplicate$ missing.or.empty - { pop$ pop$ } - { swap$ start.field - remove.ordinal.suffix - write$ fin.field - } - if$ -} -% \end{macrocode} -% \end{macro} -% -% \section{Formatting author names and editor names} -% -% Take a name list in \bibtex/ form (names separated by the word -% \qq{and}) and output the desired form of each name. -% \begin{macrocode} -INTEGERS { nameptr numnames namesleft } -STRINGS { namelist fieldname } -% \end{macrocode} -% -% \begin{macro}{format.name} -% The \fn{format.name} function operates on a single name, producing -% a string of the form -% \begin{verbatim} -% von Last, First, Jr. -%\end{verbatim} -% -% Args: \vn{namelist}, \vn{index} (top; integer) -% -% Returns: formatted version of the $n$th name in \vn{namelist} where -% integer \vn{index} specifies $n$. -% \begin{macrocode} -FUNCTION {format.name} { "{vv~}{ll}{, ff}{, jj}" format.name$ } -%<bst> -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{optional.name.field} -% The function \fn{optional.name.field} handles the task of splitting -% a multiple-name field value into multiple fields with single -% values. -% -% Args: \vn{fieldname}, \vn{namelist} (top) -% -% Side effects: writes a key/value pair to the output file for each -% name in \vn{namelist}. -% \begin{macrocode} -FUNCTION {optional.name.field}{ - duplicate$ missing.or.empty - { pop$ pop$ } - { swap$ 'fieldname := - duplicate$ num.names$ - 'namesleft := - #1 'ptr := - { namesleft #0 > } - { fieldname start.field -% \end{macrocode} -% Copy the name string before running \fn{format.name} on it. -% \begin{macrocode} - duplicate$ ptr format.name write$ - fin.field - ptr #1 + 'ptr := - namesleft #1 - 'namesleft := - } - while$ -% \end{macrocode} -% At this point we have an extra copy of the name string on the -% stack. -% \begin{macrocode} - pop$ - } - if$ -} -% \end{macrocode} -% \end{macro} -% -% \section{Handling year, month, date} -% -% \begin{macro}{assemble.date.field} -% In the output we produce a \fn{date} field instead of the year and -% month fields normally used in \bibtex/ files. In the date field we -% use ISO date notation (e.g., 1987-06-05) to facilitate switching -% between full and abbreviated month names. The month and day parts -% are frequently absent, making the date field equivalent to a year -% field. -% \begin{macrocode} -FUNCTION {assemble.date.field} -{ date missing$ - { year missing.or.empty - { status missing.or.empty - { "No year or other date information for " - cite$ * warning$ } - 'skip$ - if$ - "status" - } - { year month missing$ { "" } { month } if$ * } - if$ - } - { date } - if$ -% \end{macrocode} -% If the date string is now equal to \qq{status}, it means that we -% have a status field or we already gave a warning about lack of date -% info; in either case omit the date field. -% \begin{macrocode} - duplicate$ "status" = - { pop$ pop$ } - { swap$ start.field write$ fin.field } - if$ -} -% \end{macrocode} -% \end{macro} -% -% \section{Journal abbreviations} -% -% Use of journal abbreviations is recommended to make supplying ISSN -% numbers easier. To use this feature, you need a STRING definition -% of the form -% \begin{verbatim} -% @STRING{cpam="cpam/0010-3640/" -% #"Communications in Pure and Applied Mathematics"} -%\end{verbatim} -% Then when you write -% \begin{verbatim} -% journal=cpam, -%\end{verbatim} -% exporting with \fn{amsxport} will produce -% \begin{verbatim} -% journal={cpam}, -% ISSN={0010-3640}, -%\end{verbatim} -% The text before the ISSN number in the STRING definition is -% preferably a repetition of the abbreviation name (leaving expansion -% to be done on the \latex/ side); or it could be the full journal -% name. -% -% \textbf{Warning:} If you include braces and write -% \verb'journal={cpam},' \bibtex/ will not expand the abbreviation -% but leave it as the field value; and then you will not get -% automatic lookup of the ISSN number. -% -% \begin{macro}{optional.journal.field} -% \begin{macrocode} -FUNCTION {optional.journal.field} { - duplicate$ missing.or.empty - { pop$ pop$ } - { - 's := - start.field - #1 'ptr := - s current.char is.lowercase.letter - { - s "/" * 's := - { s ptr #1 substring$ "/" = NOT } - { incr.ptr } - while$ -% \end{macrocode} -% Journal name started with a lowercase letter, but we couldn't find -% no slash? All right, just let it go through as it is. -% \begin{macrocode} - s ptr #1 + #1 substring$ empty$ - { s #1 ptr #1 - substring$ } -% \end{macrocode} -% But if we did find a slash, then we probably have found us an ISSN -% number that we can write out. -% \begin{macrocode} - { - s #1 ptr #1 - substring$ - write$ - fin.field -% \end{macrocode} -% ISSNs are always nine characters in length (four digits, hyphen, -% four digits). -% \begin{macrocode} - "ISSN" start.field - s ptr #1 + #9 substring$ - } - if$ - } - { s } - if$ - write$ - fin.field - } - if$ -} -% \end{macrocode} -% \end{macro} -% -% \section{Type info} -% -% \begin{macro}{optional.type.field} -% Putz around with the type info a little, for theses mainly. Two -% types here: the type field, and the entry type. -% \begin{macrocode} -FUNCTION {optional.type.field} -{ duplicate$ missing.or.empty - { type$ "mastersthesis" = { "Master's Thesis" } - { type$ "phdthesis" = { "Ph.D. Thesis" } - { "" } if$ } if$ - swap$ pop$ - } - 'skip$ - if$ - duplicate$ empty$ - { pop$ pop$ } - { swap$ start.field write$ fin.field } - if$ -} -% \end{macrocode} -% \end{macro} -% -% \section{Miscellaneous tail-end information} -% -% \begin{macro}{url.note.status.review} -% The following items are common to all entry types are output at -% the tail end of the entry. -% \begin{macrocode} -FUNCTION {url.note.status.review} { - "url" url optional.field - "note" note optional.field - "status" status optional.field -% \end{macrocode} -% The \fn{review} field should perhaps be translated into multiple -% fields like author names, if more than one review is given. -% \begin{macrocode} - "review" review optional.field -% \end{macrocode} -% Data from MathSciNet will have the Math Reviews number in an -% mrnumber field. We assume that a given entry will have a review -% field or an mrnumber field but not both. -% \begin{macrocode} - "review" mrnumber optional.mr.field -} -% \end{macrocode} -% \end{macro} -% -% \section{Wrapper for each entry} -% -% \begin{macro}{start.entry} -% \begin{macrocode} -FUNCTION {start.entry} { - newline$ - "\bib{" cite$ * "}{" * -% \end{macrocode} -% Merge Master's thesis and Ph.D. thesis into a single type. -% \begin{macrocode} - type$ "mastersthesis" = type$ "phdthesis" = OR - { "thesis" } - { type$ } - if$ - * "}{" * write$ - newline$ -%<*debug> - "sort.label" label sortify optional.field - "sort.key" sort.key$ optional.field -%</debug> -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{fin.entry} -% \begin{macrocode} -FUNCTION {fin.entry} { - "}" write$ - newline$ -} -% \end{macrocode} -% \end{macro} -% -% \section{Entry types} -% -% Here are the types of entries that are normally allowed in a -% \bibtex/ file: -% \begin{description} -% -% \item[book] A book with an explicit publisher. -% -% \item[booklet] A work that is printed and bound, but without a named -% publisher or sponsoring institution. -% -% \item[inbook] A part of a book, which may be a chapter (or section or -% whatever) and/or a range of pages. -% -% \item[incollection] A part of a book having its own title. -% -% \item[manual] Technical documentation. -% -% \item[mastersthesis] A Master's thesis. -% -% \item[phdthesis] A PhD thesis. -% -% \item[proceedings] The proceedings of a conference. -% -% \item[techreport] A report published by a school or other institution, -% usually numbered within a series. -% -% \item[article] An article from a journal or magazine. -% -% \item[inproceedings] An article in a conference proceedings. -% -% \item[conference] An alias for \fn{inproceedings}. -% -% \item[unpublished] A document having an author and title, but not -% formally published. -% -% \item[misc] Use this type when nothing else fits. -% -% \end{description} -% -% \begin{macro}{article} -% A journal article differs from an inproceedings article by not -% having booktitle, publisher, editor, and other such info. -% \begin{macrocode} -FUNCTION {article} { - start.entry - "author" author optional.name.field - "translator" translator optional.name.field - "title" title format.title write.field - "subtitle" subtitle optional.title.field - "language" language optional.field - "organization" organization optional.field - "how" howpublished optional.field -% \end{macrocode} -% Construct a date value from date, year, month fields -% \begin{macrocode} - "date" assemble.date.field - "ISSN" issn optional.field - "journal" journal optional.journal.field - "volume" volume optional.field - "number" number optional.field - "pages" pages optional.pages.field - "PII" pii optional.field - "archive" archive optional.field - "eprint" eprint optional.field - "preprint" preprint optional.field - url.note.status.review - fin.entry -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{inproceedings} -% An inproceedings entry may have xid, booktitle, meeting, publisher -% info; it is not expected to have journal, eprint, or preprint info. -% \begin{macrocode} -FUNCTION {inproceedings} { - start.entry - "author" author optional.name.field - "translator" translator optional.name.field - "title" title format.title write.field - "subtitle" subtitle optional.title.field - "language" language optional.field - "organization" organization optional.field - "how" howpublished optional.field -% \end{macrocode} -% Construct a date value from date, year, month fields -% \begin{macrocode} - "date" assemble.date.field - "xid" xid optional.field -% \end{macrocode} -% The following fields might be inherited from the parent of an -% article in a proceedings volume or collection. -% \begin{macrocode} - "conference" meeting optional.field - "booktitle" booktitle optional.title.field -% \end{macrocode} -% Include the edition in case this is an inbook entry. -% \begin{macrocode} - "edition" edition optional.edition.field - "editor" editor optional.name.field - "series" series optional.field - "volume" volume optional.field - "publisher" publisher optional.field - "address" address optional.field - "pages" pages optional.pages.field - url.note.status.review - fin.entry -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{inbook} -% \begin{macrocode} -FUNCTION {inbook} { inproceedings } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{incollection} -% \begin{macrocode} -FUNCTION {incollection} { inproceedings } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{inproceedings} -% \begin{macrocode} -FUNCTION {conference} { inproceedings } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{book} -% The book type includes a meeting field because otherwise we'd have -% to repeat the entire definition for the proceedings type with that -% as the sole difference. -% \begin{macrocode} -FUNCTION {book} { - start.entry - "author" author optional.name.field - "editor" editor optional.name.field - "translator" translator optional.name.field - "title" title missing$ { booktitle } { title } if$ - format.title write.field - "subtitle" subtitle optional.title.field - "type" type optional.type.field - "language" language optional.field - "conference" meeting optional.field - "edition" edition optional.edition.field - "series" series optional.field - "publisher" publisher optional.field - organization missing.or.empty - { "institution" institution optional.field } - { "organization" organization optional.field } - if$ - "address" address optional.field - "how" howpublished optional.field - "date" year write.field - "volume" volume optional.field -% \end{macrocode} -% The number here is intended for a tech report. -% \begin{macrocode} - "number" number optional.field - "ISBN" isbn optional.field - url.note.status.review - fin.entry -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{booklet} -% \begin{macrocode}{booklet} -FUNCTION {booklet} { book } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{manual} -% \begin{macrocode} -FUNCTION {manual} { book } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{mastersthesis} -% \begin{macrocode} -FUNCTION {mastersthesis} { book } - -FUNCTION {phdthesis} { book } - -FUNCTION {proceedings} { book } - -FUNCTION {collection} { book } - -FUNCTION {techreport} { book } - -FUNCTION {unpublished} { book } - -FUNCTION {misc} { book } - -FUNCTION {default.type} { misc } -%<bst> -% \end{macrocode} -% \end{macro} -% -% \bibtex/ 0.99 keels over if READ does not have a blank line after -% it. -% \begin{macrocode} -%<bst> -READ -%<bst> -% \end{macrocode} -% -% \section{Sorting the entries} -% -% Since the final labels will be produced by the \pkg{amsrefs} -% package, we don't need to worry about generating suffixes to -% disambiguate between equal stems. All we have to do is strive to -% generate stems that are identical to the ones that \pkg{amsrefs} -% will generate, so that \bst{amsxport} will sort its output in a -% fashion that will be consistent with the labels. -% -% Overall, this simplifies our job, since we don't have to keep -% track of duplicate labels, so we can process each entry in -% isolation. However, we do have to be more careful about the -% handling of text accents and text symbols in order to maintain -% compatibility with \pkg{amsrefs}. -% -% See (\emph{inter alia}) the sections ``Lexical structure of -% names'' and ``Generating alphabetic lables'' in the -% \pkg{amsrefs} implementation documentation for more information. -% -% \begin{macrocode} -%<*sort> -% \end{macrocode} -% -% \begin{macro}{chop.word} -% \begin{macrocode} -FUNCTION {chop.word} { - 's := - 'len := - s #1 len substring$ = - { s len #1 + global.max$ substring$ } - 's - if$ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{sort.format.title} -% \begin{macrocode} -FUNCTION {sort.format.title} { - 't := - "A " #2 - "An " #3 - "The " #4 t chop.word - chop.word - chop.word - sortify - #1 global.max$ substring$ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{format.lab.names} -% \begin{macrocode} -%<*alpha|short> -FUNCTION {format.lab.names} { - 's := - s num.names$ 'numnames := - numnames #1 > - { numnames #4 > - { #3 'namesleft := } - { numnames 'namesleft := } - if$ - #1 'nameptr := - "" - { namesleft #0 > } - { nameptr numnames = - { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" = - { "{\etalchar{+}}" * } - { s nameptr "{v{}}{l{}}" format.name$ * } - if$ - } - { s nameptr "{v{}}{l{}}" format.name$ * } - if$ - nameptr #1 + 'nameptr := - namesleft #1 - 'namesleft := - } - while$ - numnames #4 > - { "{\etalchar{+}}" * } - 'skip$ - if$ - } - { s #1 "{v{}}{l{}}" format.name$ - duplicate$ text.length$ #2 < -%<alpha> { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ } -%<short> { pop$ s #1 "{ll}" format.name$ #1 text.prefix$ } - 'skip$ - if$ - } - if$ -} - -FUNCTION {author.key.label} -{ author empty$ - { key empty$ - { cite$ #1 #3 substring$ } - { key #3 text.prefix$ } - if$ - } - { author format.lab.names } - if$ -} - -FUNCTION {author.editor.key.label} -{ author empty$ - { editor empty$ - { key empty$ - { cite$ #1 #3 substring$ } - { key #3 text.prefix$ } - if$ - } - { editor format.lab.names } - if$ - } - { author format.lab.names } - if$ -} - -FUNCTION {author.key.organization.label} -{ author empty$ - { key empty$ - { organization empty$ - { cite$ #1 #3 substring$ } - { "The " #4 organization chop.word #3 text.prefix$ } - if$ - } - { key #3 text.prefix$ } - if$ - } - { author format.lab.names } - if$ -} - -FUNCTION {editor.key.organization.label} -{ editor empty$ - { key empty$ - { organization empty$ - { cite$ #1 #3 substring$ } - { "The " #4 organization chop.word #3 text.prefix$ } - if$ - } - { key #3 text.prefix$ } - if$ - } - { editor format.lab.names } - if$ -} - -FUNCTION {calc.label}{ - type$ "book" = type$ "inbook" = OR - 'author.editor.key.label - { type$ "proceedings" = - 'editor.key.organization.label - { type$ "manual" = - 'author.key.organization.label - 'author.key.label - if$ - } - if$ - } - if$ - strip.label - sortify -%<*alpha> - year field.or.null -%<!y2k> #3 #8 substring$ - purify$ * -%</alpha> - 'label := -} -%</alpha|short> -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{sort.format.names} -% \begin{macrocode} -FUNCTION {sort.format.names} { - 's := - #1 'ptr := - "" - s num.names$ 'numnames := - numnames 'namesleft := - { namesleft #0 > } - { ptr #1 > - { " " * } - 'skip$ - if$ - s ptr "{ll}{ ff}{ jj}" format.name$ 't := - ptr numnames = t "others" = AND - { "et al" } - { t sortify } - if$ - #20 rpad * - ptr #1 + 'ptr := - namesleft #1 - 'namesleft := - } - while$ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{sort.warning} -% \begin{macrocode} -FUNCTION {sort.warning} { - "to sort, need " swap$ * " or key in " * cite$ * warning$ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{author.sort} -% \begin{macrocode} -FUNCTION {author.sort} -{ author empty$ - { key empty$ - { "author" sort.warning - "" - } - { key sortify } - if$ - } - { author sort.format.names } - if$ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{author.editor.sort} -% \begin{macrocode} -FUNCTION {author.editor.sort} -{ author empty$ - { editor empty$ - { key empty$ - { "author, editor," sort.warning - "" - } - { key sortify } - if$ - } - { editor sort.format.names } - if$ - } - { author sort.format.names } - if$ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{author.organization.sort} -% \begin{macrocode} -FUNCTION {author.organization.sort} -{ author empty$ - { organization empty$ - { key empty$ - { "author, organization," sort.warning - "" - } - { key sortify } - if$ - } - { "The " #4 organization chop.word sortify } - if$ - } - { author sort.format.names } - if$ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{editor.organization.sort} -% \begin{macrocode} -FUNCTION {editor.organization.sort} -{ editor empty$ - { organization empty$ - { key empty$ - { "editor, organization," sort.warning - "" - } - { key sortify } - if$ - } - { "The " #4 organization chop.word sortify } - if$ - } - { editor sort.format.names } - if$ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{presort} -% \begin{macrocode} -FUNCTION {presort} { -%<*alpha|short> - calc.label - label #20 rpad -%</alpha|short> - type$ "book" = type$ "inbook" = OR type$ "collection" = OR - 'author.editor.sort - { type$ "proceedings" = - 'editor.organization.sort - { type$ "manual" = - 'author.organization.sort - 'author.sort - if$ - } - if$ - } - if$ -%<alpha|short> * " " * -%<!alpha|short> year field.or.null sortify #12 rpad * " " * - title field.or.null sort.format.title * - #1 entry.max$ substring$ - 'sort.key$ := -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -ITERATE {presort} - -SORT -% \end{macrocode} -% -% \begin{macrocode} -%</sort> -% \end{macrocode} -% -% \section{Final pass for output} -% -% \begin{macro}{write.with.newlines} -% The \fn{write.with.newlines} functions stores a string in \fn{s} -% and runs through it looking for occurrences of \verb'^^M'; when one -% is found, the substring before it is written out with a newline, -% the remainder is left in \fn{s}, and the cycle begins again. -% \begin{macrocode} -FUNCTION {write.with.newlines} -{ 's := #1 'ptr := - { s ptr #2 + #1 substring$ "" = NOT } - { s ptr #3 substring$ "^^M" = - { s #1 ptr #1 - substring$ write$ newline$ - ptr #3 + 'ptr := - s ptr global.max$ substring$ 's := - #1 'ptr := - } - { incr.ptr } - if$ - } - while$ - s write$ newline$ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{begin.bin} -% \begin{macrocode} -FUNCTION {begin.bib} { - preamble$ empty$ - 'skip$ - { preamble$ write.with.newlines } - if$ - "% \bib, bibdiv, biblist are defined by the amsrefs package." - write$ newline$ - "\begin{bibdiv}" write$ newline$ - "\begin{biblist}" write$ newline$ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{end.bin} -% \begin{macrocode} -FUNCTION {end.bib} { - newline$ - "\end{biblist}" write$ newline$ - "\end{bibdiv}" write$ newline$ -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -EXECUTE {begin.bib} - -ITERATE {call.type$} - -EXECUTE {end.bib} -%</bst> -% \end{macrocode} -% -% \section{Journal abbreviations} -% -% By putting the ISSN into the \latex/ document, we make it easier to -% construct www queries from the bibliography data. These string -% definitions tie together journal abbreviations, ISSN numbers, and -% journal names. -% -% These are the journals that are cited most frequently by American -% Mathematical Society authors at the present time (2000 CE). -% -% The format used here is designed to make it easy for BibTeX -% to retrieve an ISSN number when given a journal abbreviation. -% \begin{macrocode} -%<*abbrevs> -@string{aa="aa/0065-1036/" - #"Acta Arithmetica"} -@string{actamath="actamath/0001-5962/" - #"Acta Mathematica"} -@string{asms="asms/0001-6969/" - #"Acta Scientiarum Mathematicarum"} -@string{advmath="advmath/0001-8708/" - #"Advances in Mathematics"} -@string{ajm="ajm/0002-9327/" - #"American Journal of Mathematics"} -@string{amm="amm/0002-9890/" - #"American Mathematical Monthly"} -@string{aifg="aifg/0373-0956/" - #"Annales de l'Institut Fourier"} -@string{am2="am2/0003-486X/Annals of Mathematics"} -@string{ap="ap/0091-1798/" - #"The Annals of Probability"} -@string{asens4="asens4/0012-9593/" - #"Annales Scientifiques de l'\'{E}cole Normale Sup\'{e}rieure"} -@string{amb="amb/0003-889X/Archiv der Mathematik"} -@string{arma="arma/0003-9527/" - #"Archive for Rational Mechanics and Analysis"} -@string{bamsn="bamsn/0273-0979/" - #"Bulletin (New Series) of the American Mathematical Society"} -@string{bams="bams/0004-9727/" - #"Bulletin of the Australian Mathematical Society"} -@string{blms="blms/0024-6093/" - #"Bulletin of the London Mathematical Society"} -@string{bsmf="bsmf/0037-9484/" - #"Bulletin de la Soci\'{e}t\'{e} Math\'{e}matique de France"} -@string{craspi="craspi/0764-4442/" - #"Comptes Rendus de l'Acad\'{e}mie des Sciences (Paris)" - #" S\'{e}rie I Math\'{e}matique"} -@string{cjm="cjm/0008-414X/Canadian Journal of Mathematics"} -@string{cmb="cmb/0008-4395/" - #"Canadian Mathematical Bulletin"} -@string{colloqmath="colloqmath/0010-1354/" - #"Colloquium Mathematicum"} -@string{commalgebra="commalgebra/0092-7872/" - #"Communications in Algebra"} -@string{cmp="cmp/0010-3616/" - #"Communications in Mathematical Physics"} -@string{cpam="cpam/0010-3640/" - #"Communications on Pure and Applied Mathematics"} -@string{cmh="cmh/0010-2571/" - #"Commentarii Mathematici Helvetici"} -@string{cvta="cvta/0278-1077/" - #"Complex Variables"} -@string{compositiomath="compositiomath/0010-437X/" - #"Compositio Mathematica"} -@string{c="c/0010-485X/Computing"} -@string{constrapprox="constrapprox/0176-4276/" - #"Constructive Approximation"} -@string{dmj="dmj/0012-7094/" - #"Duke Mathematical Journal"} -@string{eraams="eraams/1079-6762/" - #"Electronic Research Announcements" - #" of the American Mathematical Society"} -@string{etds="etds/0143-3857/" - #"Ergodic Theory and Dynamical Systems"} -@string{fm="fm/0016-2736/" - #"Fundamenta Mathematicae"} -@string{gd="gd/0046-5755/" - #"Geometriae Dedicata"} -@string{illinoisjmath="illinoisjmath/0019-2082/" - #"Illinois Journal of Mathematics"} -@string{iumj="iumj/0022-2518/" - #"Indiana University Mathematics"} -@string{im="im/0020-9910/" - #"Inventiones Mathematicae"} -@string{israeljmath="israeljmath/0021-2172/" - #"Israel Journal of Mathematics"} -@string{iansm="iansm/??/" - #"Izvestiya Akademii Nauk SSSR. Seriya Matematicheskaya"} -@string{ja="ja/0021-8693/" - #"Journal of Algebra"} -@string{jams="jams/0894-0347/" - #"Journal of the American Mathematical Society"} -@string{jam="jam/0021-7670/" - #"Journal d'Analyse Math\'{e}matique"} -@string{jamm="jamm/0021-8928/" - #"Journal of Applied Mathematics and Mechanics"} -@string{jat="jat/0021-9045/" - #"Journal of Approximation Theory"} -@string{jamsa="jamsa/0263-6115/" - #"Journal of the Australian Mathematical Society"} -@string{jcta="jcta/0097-3165/" - #"Journal of Combinatorial Theory"} -@string{jde="jde/0022-0396/" - #"Journal of Differential Equations"} -@string{jdg="jdg/0022-040X/Journal of Differential Geometry"} -@string{jfa="jfa/0022-1236/" - #"Journal of Functional Analysis"} -@string{jlms2="jlms2/0024-6107/" - #"Journal of the London Mathematical Society"} -@string{jmaa="jmaa/0022-247X/" - #"Journal of Mathematical Analysis and Applications"} -@string{jmp="jmp/0022-2488/" - #"Journal of Mathematical Physics"} -@string{jmsj="jmsj/0025-5645/" - #"Journal of the Mathematical Society of Japan"} -@string{jnt="jnt/0022-314X/Journal of Number Theory"} -@string{jot="jot/0379-4024/" - #"Journal of Operator Theory"} -@string{jpaa="jpaa/0022-4049/" - #"Journal of Pure and Applied Algebra"} -% Braces instead of quotes, to hide the embedded \" control sequence -@string{jram={jram/0075-4102/} - #{Journal f\"{u}r die Reine und Angewandte Mathematik}} -@string{jsl="jsl/0022-4812/" - #"The Journal of Symbolic Logic"} -@string{laa="laa/0024-3795/" - #"Linear Algebra and its Applications"} -@string{mm="mm/0025-2611/" - #"Manuscripta Mathematica"} -@string{matzametki="matzametki/0025-567X/Matematicheskie Zametki"} -@string{ma="ma/0025-5831/" - #"Mathematische Annalen"} -@string{mc="mc/0025-5718/" - #"Mathematics of Computation"} -@string{mj="mj/0025-5513/" - #"Mathematica Japonica"} -@string{mn="mn/0025-584X/Mathematische Nachrichten"} -@string{mpcps="mpcps/0305-0041/" - #"Mathematical Proceedings of the" - #" Cambridge Philosophical Society"} -@string{mrl="mrl/1073-2780/" - #"Mathematical Research Letters"} -@string{ms="ms/0025-5521/" - #"Mathematica Scandinavica"} -@string{mathz="mathz/0025-5874/" - #"Mathematische Zeitschrift"} -@string{m="m/0025-5793/" - #"Mathematika"} -@string{mmj="mmj/0026-2285/" - #"The Michigan Mathematical Journal"} -@string{nmj="nmj/0027-7630/" - #"Nagoya Mathematical Journal"} -@string{na="na/0362-546X/Nonlinear Analysis"} -@string{nm="nm/0029-599X/Numerische Mathematik"} -@string{ojm="ojm/0030-6126/" - #"Osaka Journal of Mathematics"} -@string{pjm="pjm/0030-8730/" - #"Pacific Journal of Mathematics"} -@string{pams="pams/0002-9939/" - #"Proceedings of the American Mathematical Society"} -@string{pems2="pems2/0013-0915/" - #"Proceedings of the Edinburgh Mathematical Society"} -@string{pjaa="pjaa/0386-2194/" - #"Proceedings of the Japan Academy"} -@string{plms3="plms3/0024-6115/" - #"Proceedings of the London Mathematical Society"} -@string{qjmo2="qjmo2/0033-5606/" - #"The Quarterly Journal of Mathematics"} -@string{rmi="rmi/0213-2230/" - #"Revista Matem\'{a}tica Iberoamericana"} -@string{rmjm="rmjm/0035-7596/" - #"Rocky Mountain Journal of Mathematics"} -@string{sjam="sjam/0036-1399/" - #"SIAM Journal on Applied Mathematics"} -@string{sjc="sjc/0097-5397/" - #"SIAM Journal on Computing"} -@string{sjma="sjma/0036-1410/" - #"SIAM Journal on Mathematical Analysis"} -@string{sjna="sjna/0036-1429/" - #"SIAM Journal on Numerical Analysis"} -@string{sr="sr/0036-1445/" - #"SIAM Review"} -@string{sm="sm/0039-3223/" - #"Studia Mathematica"} -@string{tjm="tjm/0387-3870/" - #"Tokyo Journal of Mathematics"} -@string{ta="ta/0166-8641/" - #"Topology and its Applications"} -@string{t="t/0040-9383/" - #"Topology"} -@string{tams="tams/0002-9947/" - #"Transactions of the American Mathematical Society"} -%</abbrevs> -% \end{macrocode} -% -% \section{To Do} -% -% ---When there is no author or editor info to create a label from: Use -% the initial letters of all the words in the title. Plus the year. -% Maybe year first. -% -% ---Add linelength and indent options to control the output? -% -% ---Discuss apacite "originalfoo" fields etc. -% -% ---Discuss Beebe's work. -% -% ---Add bibliography. -% -% ---Add AUDIO, VIDEO entry types. -% -% ---Add a field for MR subject classification numbers and the like? -% -% ---Write a converter to convert from typical .bib data to preferred -% form. Have to go via perl or something to capture STRING defs and -% PREAMBLE and interspersed comments? Or emacs lisp? Provide .bst -% version as fallback. -% -% ---Alpha labels: add numbers after sorting? subscript option? L3Y2a -% option. -% -% ---Test multi-author articles with ten-plus authors. What happens -% with the alpha labels then? -% -% ---For url field especially, check length and prebreak by hand instead -% of relying on \bibtex/'s slapdash stick-in-a-percent-at-column-72 -% regardless of where it happens to fall. -% -% ---How about a general `contributor' field. -% -% ---Test with a wimpy older version of \bibtex/. -% -% \CheckSum{24} -% \Finale diff --git a/Master/texmf-dist/source/latex/amslatex/amsxtra.dtx b/Master/texmf-dist/source/latex/amslatex/amsxtra.dtx deleted file mode 100644 index b0f19da7d07..00000000000 --- a/Master/texmf-dist/source/latex/amslatex/amsxtra.dtx +++ /dev/null @@ -1,136 +0,0 @@ -%%% ==================================================================== -%%% @LaTeX-file{ -%%% filename = "amsxtra.dtx", -%%% version = "1.2c", -%%% date = "1999/11/15", -%%% time = "14:15:41 EST", -%%% author = "American Mathematical Society", -%%% copyright = "Copyright 1995, 1999 American Mathematical Society, -%%% all rights reserved. Copying of this file is -%%% authorized only if either: -%%% (1) you make absolutely no changes to your copy, -%%% including name; OR -%%% (2) if you do make changes, you first rename it -%%% to some other name.", -%%% address = "American Mathematical Society, -%%% Technical Support, -%%% Electronic Products and Services, -%%% P. O. Box 6248, -%%% Providence, RI 02940, -%%% USA", -%%% telephone = "401-455-4080 or (in the USA and Canada) -%%% 800-321-4AMS (321-4267)", -%%% FAX = "401-331-3842", -%%% checksum = "41382 136 533 5124", -%%% email = "tech-support@ams.org (Internet)", -%%% codetable = "ISO/ASCII", -%%% keywords = "latex, accentedsymbol, fracwithdelims, sphat", -%%% supported = "yes", -%%% abstract = "This package contains some seldom-used commands -%%% ported from AMS-TeX in 1989.", -%%% docstring = "The checksum field above contains a CRC-16 -%%% checksum as the first value, followed by the -%%% equivalent of the standard UNIX wc (word -%%% count) utility output of lines, words, and -%%% characters. This is produced by Robert -%%% Solovay's checksum utility.", -%%% } -%%% ==================================================================== -%\iffalse -%<*driver> -\documentclass{amsdtx} -\begin{document} -\title{The \pkg{amsxtra} package} -\author{American Mathematical Society\\Michael Downes} -\date{Version \fileversion, \filedate} -\hDocInput{amsxtra.dtx} -\end{document} -%</driver> -%\fi -% -% \maketitle -% -% \MakeShortVerb\| -% -% \section{Introduction} -% The \pkg{amsxtra} package contains a few rarely used commands that -% were present in version 1.1 of the \pkg{amstex} package: -% \cn{fracwithdelims}, {accentedsymbol}, \cn{sphat}, \cn{spcheck}, -% \cn{sptilde}, \cn{spdot}, \cn{spddot}, \cn{spdddot}, \cn{spbreve}. -% If any of these commands were used in existing documents, the -% \pkg{amsxtra} package provides a way to get them. But for 99\% of -% documents using the \pkg{amstex} package these commands are just -% wasted overhead. -% -% \StopEventually{} -% -% \begin{macrocode} -\ProvidesPackage{amsxtra}[1999/11/15 v1.2c] -% \end{macrocode} -% We need to ensure that either the \pkg{amstex} package or the -% \pkg{amsmath} package is loaded. This means we need something a -% little more complicated than \cn{RequirePackage}. -% \begin{macrocode} -\@ifpackageloaded{amstex}{}{% - \RequirePackage{amsmath}[1996/10/01 v1.2]} -% \end{macrocode} -% -% Superscripted accent characters. -% \begin{macrocode} -\def\sphat{^{\mathchoice{}{}% - {\,\,\smash[b]{\hbox{\lower4\ex@\hbox{$\m@th\widehat{\null}$}}}}% - {\,\smash[b]{\hbox{\lower3\ex@\hbox{$\m@th\hat{\null}$}}}}}} -\def\spcheck{^\vee} -\def\sptilde{^\sim} -\def\spdot{^{\hbox{\raise\ex@\hbox{\normalfont .}}}} -\def\spddot{^{\hbox{\raise\ex@\hbox{\normalfont ..}}}} -\def\spdddot{^{\hbox{\raise\ex@\hbox{\normalfont...}}}} -\def\spbreve{^{\!\smash[b]{\hbox{\lower4\ex@\hbox{\u{}}}}}} -% \end{macrocode} -% -% The \cn{fracwithdelims} command is skipped if the base package is -% \pkg{amsmath}; it is only needed if the base package is -% \pkg{amstex}. -% \begin{macrocode} -\@ifpackageloaded{amstex}{% -\def\fracwithdelims#1#2{\new@ifnextchar[{\fracwithdelims@#1#2}% - {\fracwithdelims@#1#2[\@empty]}} -\def\fracwithdelims@#1#2[#3]#4#5{\relax - \ifx\@empty#3{#4\overwithdelims#1#2#5}\else - {#4\abovewithdelims#1#2#3\relax#5}\fi} -}{} -% \end{macrocode} -% -% Perhaps |\accentedsymbol| should use |\newsavebox|, but I don't -% know of any compelling reason at the moment.[mjd,5-Sep-1994] -% |\accentedsymbol| can only produce a single size of -% the given symbol, so you'd need two different versions for main -% size and subscript size. -% \begin{macrocode} -\def\accentedsymbol#1#2{% - \expandafter\newbox - \csname\expandafter\@gobble\string#1@box\endcsname - \expandafter\setbox - \csname\expandafter\@gobble\string#1@box\endcsname - \hbox{$\m@th#2$}% - \newcommand{#1}{% - \expandafter\copy - \csname\expandafter\@gobble\string#1@box\endcsname{}}% -} -% \end{macrocode} -% -% Change the definition of \qc{\~} to automatically remove a -% preceding space as well as a following space, if present. -% \begin{macrocode} -\def~{\nobreakspace} -\DeclareRobustCommand{\nobreakspace}{\unskip\nobreak\ \ignorespaces} -% \end{macrocode} -% -% The usual \cs{endinput} to ensure that random garbage at the end of -% the file doesn't get copied by \fn{docstrip}. -% \begin{macrocode} -\endinput -% \end{macrocode} -% -% \CheckSum{113} -% \Finale diff --git a/Master/texmf-dist/source/latex/amslatex/ifoption.dtx b/Master/texmf-dist/source/latex/amslatex/ifoption.dtx deleted file mode 100644 index 4bb4670a72a..00000000000 --- a/Master/texmf-dist/source/latex/amslatex/ifoption.dtx +++ /dev/null @@ -1,170 +0,0 @@ -%%% ==================================================================== -%%% @LaTeX-doc-source-file{ -%%% filename = "ifoption.dtx", -%%% version = "1.02", -%%% date = "2002/03/04", -%%% time = "16:33:16 EST", -%%% author = "Michael J Downes", -%%% address = "American Mathematical Society, -%%% Publications Technical Group, -%%% PO Box 6248, -%%% Providence, RI 02940, -%%% USA", -%%% email = "tech-support@ams.org", -%%% URL = "http://www.ams.org/", -%%% abstract = "", -%%% checksum = "06695 170 563 5432", -%%% docstring = "The checksum field, produced by Robert Solovay's -%%% checksum utility, gives CRC-16 checksum, lines, -%%% words, and characters.", -%%% } -%%% ==================================================================== -% \iffalse -%<*driver> -\NeedsTeXFormat{LaTeX2e} -\documentclass{amsdtx} -\providecommand{\mdash}{\textemdash} -\newcommand{\xt}[1]{\texttt{#1}} -\providecommand{\qq}[1]{``#1''} -\providecommand{\lat}[1]{\protect\LaTeX{}} -\begin{document} -\title{The \pkg{ifoption} package} -\author{Michael~J. Downes\\American Mathematical Society} -\date{Version \fileversion, \filedate} -\hDocInput{ifoption.dtx} -\end{document} -%</driver> -% \fi -% -% \maketitle -% \section{Introduction} -% -% The \pkg{ifoption} package provides an \cn{IfOption} command that -% has certain advantages over the \cs{@ifpackagewith} command\mdash -% e.g., default options specified with \cs{ExecuteOptions} test as -% true rather than false. In order for this to work properly, -% mutually exclusive options should be specified with -% \cs{DeclareExclusiveOptions}, another command defined by the -% \pkg{ifoption} package. -% \StopEventually{} -% -% \section{Implementation} -% \subsection{Package info} -% -% Standard declaration of package name and date. -% \begin{macrocode} -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{ifoption}[2002/03/04 v1.02] -% \end{macrocode} -% -% \subsection{Some utility functions} -% -% \begin{macrocode} -\let\@xp\expandafter \let\@nx\noexpand -% \end{macrocode} -% -% \begin{macrocode} -\def\@True{00} -\def\@False{01} -% \end{macrocode} -% -% \subsection{Background} -% See the definitions of \cs{@onefilewithoptions} and -% \cs{@pushfilename} in the \lat/ kernel. -% -% When we have -%\begin{verbatim} -%\DeclareOption{foo}{some code} -%\end{verbatim} -% in a file named \fn{bar.sty}, \lat/ defines \cs{ds@foo} to contain -% \emph{some code}. Then if the package is invoked with -%\begin{verbatim} -%\usepackage[foo]{bar} -%\end{verbatim} -% there are two consequences: \opt{foo} is added to the options list -% for package \pkg{bar}, which is the control sequence -% \cs{opt@bar.sty}; and when \cs{ProcessOptions} is called, it -% executes \cs{ds@option-name} for each option found in the list. -% When it is finished running the options, \cs{ProcessOptions} -% undefines all the \cs{ds@whatever} for the current package, which -% are listed in the control sequence \cs{@declaredoptions}. At the -% end of \fn{bar.sty}, \cs{@declaredoptions} is globally reset to -% empty. Thus subordinate packages with options cannot be loaded in -% the \qq{first half} of a package that also has options, where first half -% means the area leading up to the \cs{ProcessOptions} call. -% -% For mutually exclusive options \xt{a}, \xt{b}, \xt{c}, when option -% \xt{b} is invoked it should remove all of its sibling options from -% the options-actually-used list and add itself to the list. For this -% task we make use of the fact that \cs{ProcessOptions} ends by -% undefining all the declared options of the current package or -% documentclass. -% -% \begin{macrocode} -\def\CurrentPackage{\@currname} -\let\CurrentClass\CurrentPackage -% \end{macrocode} -% -% \begin{macrocode} -\newcommand{\IfOption}{} -\def\IfPackageOption{\@ifpackagewith} -\def\IfClassOption{\@ifclasswith} -\def\IfOption{% - \ifx\@currext\@pkgextension \@xp\IfPackageOption - \else \@xp\IfClassOption - \fi - \@currname -} -% \end{macrocode} -% -% \begin{macrocode} -\newcommand{\DeclareExclusiveOptions}[1]{% - \xdef\@declaredoptions{\@declaredoptions,#1}% - \gdef\ProcessExclusiveOptions{\relax}% - \@for\CurrOption:=#1\do{% - \@xp\deo@a\csname ds@\CurrOption\@xp\endcsname\@xp{\CurrOption}{#1}% - }% -} -\def\DeclareBooleanOption{\DeclareExclusiveOptions} -% \end{macrocode} -% -% \begin{macrocode} -\def\deo@a#1#2#3{% - \def#1{% - \g@addto@macro\ProcessExclusiveOptions{\OptionsFalseTrue{#3}{#2}}% - }% -} -% \end{macrocode} -% -% \begin{macrocode} -\def\cull@options#1,{% - \@xp\ifx\csname ds@#1\@gobble\@percentchar\@empty\endcsname\@False - \else #1,\fi - \cull@options -} - -\newcommand{\OptionsFalseTrue}[2]{% - \begingroup - \@for\CurrentOption:=#1\do{% - \@xp\let\csname ds@\CurrentOption\endcsname\@False - }% - \let\ds@\@False - \@xp\xdef\csname opt@\@currname.\@currext\endcsname{% - \@xp\@xp\@xp\cull@options\csname opt@\@currname.\@currext\endcsname -% \end{macrocode} -% Lacking \cs{@secondofthree} and not keen on defining it \ldots -% \begin{macrocode} - ,\@firstoftwo\@firstoftwo,#2% - }% - \endgroup -} -% \end{macrocode} -% -% The usual \cs{endinput} to ensure that random garbage at the end of -% the file doesn't get copied by \fn{docstrip}. -% \begin{macrocode} -\endinput -% \end{macrocode} -% -% \CheckSum{112} -% \Finale diff --git a/Master/texmf-dist/source/latex/amslatex/mathscinet.dtx b/Master/texmf-dist/source/latex/amslatex/mathscinet.dtx deleted file mode 100644 index 78e01159ad6..00000000000 --- a/Master/texmf-dist/source/latex/amslatex/mathscinet.dtx +++ /dev/null @@ -1,595 +0,0 @@ -%%% ==================================================================== -%%% @LaTeX-doc-source-file{ -%%% filename = "mathscinet.dtx", -%%% version = "2.01", -%%% date = "2004/06/30", -%%% time = "12:00:17 EDT", -%%% author = "Michael J Downes and David M. Jones", -%%% address = "American Mathematical Society, -%%% Publications Technical Group, -%%% PO Box 6248, -%%% Providence, RI 02940, -%%% USA", -%%% email = "tech-support@ams.org", -%%% URL = "http://www.ams.org/", -%%% abstract = "", -%%% checksum = "34681 595 2175 20194", -%%% docstring = "The checksum field, produced by Robert Solovay's -%%% checksum utility, gives CRC-16 checksum, lines, -%%% words, and characters.", -%%% } -%%% ==================================================================== -%%% -% \iffalse -%<*driver> -\NeedsTeXFormat{LaTeX2e} -\documentclass[draft]{amsdtx} - -\usepackage{mathscinet} - -\newcommand{\uchar}[1]{{\small \texttt{U+#1}}} - -\newcommand{\enc}{\texttt} - -\newenvironment{chartable}{% - \begin{tabular}{% - l@{\extracolsep{1em}}% - l@{\extracolsep{1em}}% - r@{\extracolsep{2em}}% - l@{\extracolsep{1em}}% - l@{\extracolsep{1em}}% - r}% -}{% - \end{tabular}% -} - -\makeatletter - -\DeclareTextCommandDefault{\xudot}{\@underaccent\@empty{'137}} - -\makeatother - -\MakeShortVerb{\|} - -\begin{document} -\title{The \pkg{mathscinet} package} -\author{American Mathematical Society} -\date{Version \fileversion, \filedate} -\hDocInput{mathscinet.dtx} -\end{document} -%</driver> -% \fi -% -% \maketitle -% \section{Introduction} -% -% The \pkg{mathscinet} packages provides definitions for certain -% commands that occasionally occur in bibliographic data exported -% from MathSciNet and that are not provided by \latex/. -% -% \textbf{Warning:} Although the macros provided in this package -% are probably acceptable if all you need to do is format an entry -% downloaded from MathSciNet, they should probably not be used for -% other purposes. In general, if you are trying to typeset -% material in any languages that require these characters, you are -% better off using specialized fonts and encodings for those -% languages. -% -% All Unicode character references are taken from \emph{The Unicode -% Standard, Version~3.0} (Addison-Wesley, 2000). -% -% \StopEventually{} -% -% \section{Implementation} -% Standard declaration of package name and date. -% \begin{macrocode} -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{mathscinet}[2002/04/17 v1.05] -\RequirePackage{textcmds}\relax -% \end{macrocode} -% -% \begin{macro}{\setboxz@h} -% A useful abbreviation borrowed from \pkg{amsgen}. -% \begin{macrocode} -\providecommand\setboxz@h{\setbox\z@\hbox} -% \end{macrocode} -% \end{macro} -% -% \subsection{Math font commands} -% -% \begin{macro}{\bold} -% \begin{macro}{\scr} -% These are simple aliases of core \latex/ commands. -% \begin{macrocode} -\providecommand{\bold}{\mathbf} -\providecommand{\scr}{\mathcal} -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\germ} -% Since this doesn't correspond to a core \latex/ command, we -% generate an error if no appropriate definition is available. -% \begin{macrocode} -\AtBeginDocument{% - \@ifundefined{mathfrak}{% - \providecommand{\germ}{% - \PackageError{mathscinet}{To use the \string\germ\space - command, please load the amsfonts package}\@ehc - }% - }{% - \providecommand{\germ}{\mathfrak}% - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\romsup} -% \begin{macro}{\asup} -% The \cs{tsup} command comes from the \pkg{textcmds} package. -% \begin{macrocode} -\providecommand{\romsup}{\tsup} -\providecommand{\asup}{\tsup} -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\hslash} -% Planck's constant over~$2\pi$:~$\hslash$ (\uchar{210F}). -% -% If the \pkg{amssymb} package isn't loaded, we just want this to -% be an alias for |\hbar|, which is defined in the \latex/ kernel -% (and then redefined by the \pkg{amssymb} package). If the -% \pkg{amssymb} package is loaded, we want to use its definition -% of~|\hslash|. To prevent problems if \pkg{amsrefs} is loaded -% before \pkg{amssymb}, we defer our definition of \cn{hslash} -% until after all packages have been loaded. -% \begin{macrocode} -\AtBeginDocument{\providecommand{\hslash}{\hbar}} -% \end{macrocode} -% \end{macro} -% -% \subsection{Arabic transliteration} -% -% \begin{macro}{\rasp} -% Transliteration of the Arabic letter \emph{hamza} -% (\uchar{0621}):~\rasp\ (\uchar{02BE}). -% \begin{macrocode} -\ProvideTextCommandDefault{\rasp}{\leavevmode\raise.45ex\hbox{$\rhook$}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\lasp} -% Transliteration of the Arabic letter \emph{ain} -% (\uchar{0639}):~\lasp\ (\uchar{02BF}). -% \begin{macrocode} -\ProvideTextCommandDefault{\lasp}{\leavevmode\raise.45ex\hbox{$\lhook$}} -% \end{macrocode} -% \end{macro} -% -% \subsection{Latin Extended-A (\texttt{latin1}) characters} -% -% These are based on Barbara Beeton's definitions from -% \fn{amsclass.dtx}. -% -% \begin{macro}{\Dbar} -% Latin capital letter D with stroke:~\Dbar\ (\uchar{0110}). In the -% T1 encoding, we just use |\DJ|; otherwise we fake it. -% \begin{macrocode} -\ProvideTextCommand{\Dbar}{T1}{\DJ} - -\ProvideTextCommandDefault{\Dbar}{% - \leavevmode\lower.5ex\rlap{\hskip-.07em\accent"16}D% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\dbar} -% Latin lower letter~d with stroke:~\dbar\ (\uchar{0111}). In the -% T1 encoding, we just use |\dj|; otherwise we fake it. -% \begin{macrocode} -\ProvideTextCommand{\dbar}{T1}{\dj} -% \end{macrocode} -% If it looks like this is a small-caps font, we adjust the spacing -% appropriately. -% \begin{macrocode} -\ProvideTextCommandDefault{\dbar}{% - \begingroup - \edef\@tempa{\scdefault}% - \ifx\@tempa\f@shape - \dimen@-.75ex - \dimen@i-.08em - \else - \dimen@.02ex - \dimen@i.1em - \fi - \leavevmode\raise\dimen@\rlap{\hskip\dimen@i\char"16}d% - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \subsection{Cyrillic transliteration} -% -% \begin{macro}{\cprime} -% Transliteration of the Cyrillic letter soft sign -% (\uchar{042C}):~\cprime. -% \begin{macrocode} -\ProvideTextCommandDefault{\cprime}{\tprime} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cdprime} -% Transliteration of the Cyrillic letter hard sign -% (\uchar{042A}):~\cdprime. -% \begin{macrocode} -\ProvideTextCommandDefault{\cdprime}{\tprime\tprime} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\bud} -% Ditto. -% \begin{macrocode} -\ProvideTextCommandDefault{\bud}{\cdprime} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cydot} -% Vertically centered dot. -% \begin{macrocode} -\ProvideTextCommandDefault{\cydot}{\leavevmode\raise.4ex\hbox{.}} -% \end{macrocode} -% \end{macro} -% -% \subsection{Miscellaneous diacritics (aka Frankenstein's\\ -% diacritics)} -% -% \begin{macro}{\save@sf} -% When putting together an accented character from bits and pieces, -% the |\spacefactor| of the base character often gets lost in the -% shuffle. We use essentialy the same technique as |\add@accent| -% to save and restore the spacefactor, but we wrap in in a pair of -% macros for convenience. -% \begin{macrocode} -\def\save@sf{% - \ifmmode\else\global\mathchardef\accent@spacefactor\spacefactor\fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\restore@sf} -% And here's the corresponding restore. -% \begin{macrocode} -\def\restore@sf{\ifmmode\else\spacefactor\accent@spacefactor\fi} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@underaccent} -% This is perhaps the most interesting macro in this package (which -% admittedly isn't saying much). It attempts to convert a character -% (usually one of the standard above-letter diacritics like~\"{}) -% into an underhanging diacritic (like~\dudot{\hbox to -% .5em{\hss}}). This is similar in spirit to the way that the -% \enc{OT1} \cn{b} command converts a macron into a bar-under -% accent, or the way that \cn{d} converts a period into an -% underhanging dot. However, the technique used here is a little -% more complicated and, hopefully, a little more general, in the -% sense of requiring fewer ad-hoc parameters. It only contains one -% magic constant (.2\,ex), which seems to provide reasonable -% results for all of the Computer Modern fonts. -% -% The basic algorithm is as follows: -% -% \begin{enumerate} -% -% \item -% Create a box~$B$ containing the base character at its natural -% height, depth, and width. -% -% \item -% Create a box~$d$ consisting of the diacritic centered in a space -% equal to the width of~$B$. -% -% \item -% Lower box~$d$ by the sum of its height (to bring the top of~$d$ -% down to the baseline) plus the depth of $B$ (to bring the top -% of~$d$ down to the bottom of~$B$) plus .2\,ex (to provide the -% spacing between the bottom of the letter and the top of the -% diacritic). Call the new box~$d'$. -% -% \item -% Create a new box~$C$ by superimposing boxes $B$ and~$d'$. -% -% \item -% If the height of~$d$ was greater than 1\,ex, reset the depth of -% box~$C$ to the sum of the depth of~$B$ and 1\,ex less than the -% height of~$d$. (See the appendix for a discussion of this step.) -% -% \end{enumerate} -% -% \begin{macrocode} -\def\@underaccent#1#2#3{% - \leavevmode - \begingroup - \ifmmode\let\@mathtoggle$\else\let\@mathtoggle\relax\fi - \setboxz@h{\@mathtoggle#3\save@sf\@mathtoggle}% - \setbox\@ne\hb@xt@\wd\z@{% - \hss\fontshape\updefault\rmfamily#1\char#2\hss - }% - \dimen@\ht\@ne - \advance\dimen@\dp\z@ - \advance\dimen@.2ex - \setboxz@h{\lower\dimen@\rlap{\copy\@ne}\unhbox\z@}% - \ifdim\ht\@ne>1ex - \advance\dimen@-1.2ex - \dp\z@\dimen@ - \fi - \box\z@ - \restore@sf - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\utilde} -% Tilde below (\uchar{0330}): -% -% \begin{chartable} -% |\utilde{E}| & \utilde{E} & \uchar{1E1A} & -% |\utilde{e}| & \utilde{e} & \uchar{1E1B} \\ -% |\utilde{I}| & \utilde{I} & \uchar{1E2C} & -% |\utilde{i}| & \utilde{i} & \uchar{1E2D} \\ -% |\utilde{U}| & \utilde{U} & \uchar{1E74} & -% |\utilde{u}| & \utilde{u} & \uchar{1E75} -% \end{chartable} -% \begin{macrocode} -\DeclareTextCommandDefault{\utilde}{\@underaccent\@empty{`\~}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\uarc} -% Breve below (\uchar{032E}): -% -% \begin{chartable} -% |\uarc{H}| & \uarc{H} & \uchar{1E2A} & -% |\uarc{h}| & \uarc{h} & \uchar{1E2B} -% \end{chartable} -% \begin{macrocode} -\DeclareTextCommandDefault{\uarc}{\@underaccent\@empty{'025}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\lfhook} -% Comma below (\uchar{0326}): -% -% \begin{chartable} -% |\lfhook{S}| & \lfhook{S} & \uchar{0218} & -% |\lfhook{s}| & \lfhook{s} & \uchar{0219} \\ -% |\lfhook{T}| & \lfhook{T} & \uchar{021A} & -% |\lfhook{t}| & \lfhook{t} & \uchar{021B} -% \end{chartable} -% \begin{macrocode} -\DeclareTextCommandDefault{\lfhook}{\@underaccent\supsize{`\,}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\dudot} -% Diaeresis below (\uchar{0324}): -% -% \begin{chartable} -% |\dudot{U}| & \dudot{U} & \uchar{1E72} & -% |\dudot{u}| & \dudot{u} & \uchar{1E73} -% \end{chartable} -% \begin{macrocode} -\DeclareTextCommandDefault{\dudot}{\@underaccent\@empty{'177}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\udot} -% Dot below (\uchar{0323}): There are two options for implementing -% this: either map to the standard \cn{d} accent or define using -% \cs{@underaccent}. If we choose the former, we have two -% problems: (a)~when applied to capital letters, the standard -% \enc{T1} and \enc{OT1} implementations of~|\d| produce -% \cs{spacefactor}s of~1000 instead of~999, and (b)~the -% underspacing of the \cs{udot} accent will differ from that of the -% \cs{dudot} accent:~\udot{x}\dudot{x}. On the other hand, if we -% choose the latter, course, \cn{d} and \cn{udot} will -% differ:~\d{x}\xudot{x}. -% Neither solution appeals, but it's easier to stick with~\cs{d}, -% so that's what I'll do. -% \begin{macrocode} -\DeclareTextCommandDefault{\udot}{\d} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\polhk} -% Ogonek (Polish hook) (\uchar{0328}): -% -% \begin{chartable} -% |\polhk{A}| & \polhk{A} & \uchar{0104} & -% |\polhk{a}| & \polhk{a} & \uchar{0105} \\ -% |\polhk{E}| & \polhk{E} & \uchar{0118} & -% |\polhk{e}| & \polhk{e} & \uchar{0119} \\ -% |\polhk{I}| & \polhk{I} & \uchar{012E} & -% |\polhk{i}| & \polhk{i} & \uchar{012F} \\ -% |\polhk{U}| & \polhk{U} & \uchar{0172} & -% |\polhk{u}| & \polhk{u} & \uchar{0173} \\ -% |\polhk{O}| & \polhk{O} & \uchar{01EA} & -% |\polhk{o}| & \polhk{o} & \uchar{01EB} -% \end{chartable} -% -% The \enc{T1} and \enc{OT4} encodings implement the |\k| accent, -% so we just use it for most characters, although we will -% supplement them later with -% \begin{macrocode} -\DeclareTextCommand{\polhk}{OT4}{\k} -\DeclareTextCommand{\polhk}{T1}{\k} -% \end{macrocode} -% -% \begin{macrocode} -\DeclareTextCommand{\polhk}{OT1}[1]{\TextSymbolUnavailable{\k{#1}}#1} -% \end{macrocode} -% -% \begin{macrocode} -\DeclareTextCompositeCommand{\polhk}{OT1}{a}{\msc@ogonek {.6}{.07} a} -\DeclareTextCompositeCommand{\polhk}{OT1}{A}{\msc@ogonek {.6}{.07} A} -\DeclareTextCompositeCommand{\polhk}{OT1}{e}{\msc@ogonek 0 {.06} e} -\DeclareTextCompositeCommand{\polhk}{OT1}{E}{\msc@ogonek{.35}{.07} E} -\DeclareTextCompositeCommand{\polhk}{OT1}{i}{\msc@ogonek {.2}{.07} i} -\DeclareTextCompositeCommand{\polhk}{OT1}{I}{\msc@ogonek {.2}{.07} I} -\DeclareTextCompositeCommand{\polhk}{OT1}{u}{\msc@ogonek {.6}{.07} u} -\DeclareTextCompositeCommand{\polhk}{OT1}{U}{\msc@ogonek 0 {.05} U} -\DeclareTextCompositeCommand{\polhk}{OT1}{o}{\msc@ogonek 0 {.07} o} -\DeclareTextCompositeCommand{\polhk}{OT1}{O}{\msc@ogonek 0 {.05} O} -% \end{macrocode} -% -% \begin{macrocode} -\DeclareTextCompositeCommand{\polhk}{T1}{i}{\msc@ogonek@a 0 i} -\DeclareTextCompositeCommand{\polhk}{T1}{I}{\msc@ogonek@a 0 I} -\DeclareTextCompositeCommand{\polhk}{T1}{u}{\msc@ogonek@a {.6} u} -\DeclareTextCompositeCommand{\polhk}{T1}{U}{\msc@ogonek@a 0 U} -\DeclareTextCompositeCommand{\polhk}{T1}{o}{\msc@ogonek@a 0 o} -\DeclareTextCompositeCommand{\polhk}{T1}{O}{\msc@ogonek@a 0 O} -% \end{macrocode} -% -% \begin{macrocode} -\DeclareTextCompositeCommand{\polhk}{OT4}{i}{\msc@ogonek {.2}{.07} i} -\DeclareTextCompositeCommand{\polhk}{OT4}{I}{\msc@ogonek {.2}{.07} I} -\DeclareTextCompositeCommand{\polhk}{OT4}{u}{\msc@ogonek {.6}{.07} u} -\DeclareTextCompositeCommand{\polhk}{OT4}{U}{\msc@ogonek 0 {.05} U} -\DeclareTextCompositeCommand{\polhk}{OT4}{o}{\msc@ogonek 0 {.07} o} -\DeclareTextCompositeCommand{\polhk}{OT4}{O}{\msc@ogonek 0 {.05} O} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\msc@ogonek} -% \begin{macrocode} -\def\msc@ogonek#1#2#3{% - \begingroup - \setboxz@h{#3\save@sf}% - \dimen@\wd\z@ - \ooalign{% - \unhbox\z@\crcr - \hidewidth - \setboxz@h{\kern#1\dimen@\supsize$\lhook$}% - \dimen@\ht\z@ - \advance\dimen@-#2ex\relax - \lower\dimen@\box\z@ - \hidewidth - }% - \restore@sf - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\msc@ogonek@a} -% \begin{macrocode} -\def\msc@ogonek@a#1#2{% - \begingroup - \ooalign{% - #2\save@sf\crcr - \hidewidth - \raise0.02ex\hbox{\kern#1ex\char'014}% - \hidewidth - }% - \restore@sf - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\soft} -% Polish `soft' letters T, D, L: -% -% \begin{chartable} -% |\soft{T}| & \soft{T} & \uchar{0164} & -% |\soft{t}| & \soft{t} & \uchar{0165} \\ -% |\soft{D}| & \soft{D} & \uchar{010E} & -% |\soft{d}| & \soft{d} & \uchar{010f} \\ -% |\soft{L}| & \soft{L} & \uchar{013B} & -% |\soft{l}| & \soft{l} & \uchar{013C} -% \end{chartable} -% \begin{macrocode} -\DeclareTextCommand{\soft}{OT4}{\v} -\DeclareTextCommand{\soft}{T1}{\v} -\DeclareTextCommand{\soft}{OT1}{\v} - -\DeclareTextCompositeCommand{\soft}{OT1}{t}{\msc@soft{t}\@ne{.5ex}} -\DeclareTextCompositeCommand{\soft}{OT1}{d}{\msc@soft{d}{.925}{.95ex}} -\DeclareTextCompositeCommand{\soft}{OT1}{l}{\msc@soft{l}{.95}{.4ex}} -\DeclareTextCompositeCommand{\soft}{OT1}{L}{\msc@soft{L}{.975}{.8ex}} - -\DeclareTextCompositeCommand{\soft}{OT4}{t}{\msc@soft{t}\@ne{.5ex}} -\DeclareTextCompositeCommand{\soft}{OT4}{d}{\msc@soft{d}{.925}{.95ex}} -\DeclareTextCompositeCommand{\soft}{OT4}{l}{\msc@soft{l}{.95}{.4ex}} -\DeclareTextCompositeCommand{\soft}{OT4}{L}{\msc@soft{L}{.975}{.8ex}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\msc@soft} -% \begin{macrocode} -\def\msc@soft#1#2#3{% - \leavevmode - \begingroup - \setboxz@h{#1}% - \raise#2\ht\z@\rlap{\kern#3\supsize,}\unhbox\z@ - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \section*{\raggedright Appendix: Plumbing the depths of -% underhanging diacritics: Notes on the magic constant 0.2\,ex and -% an exegesis of certain obscure corners of the \cn{@underaccent} -% macro} -% -% \tex/ assumes that a combining accent can be superimposed -% directly on top of any character whose height is 1\,ex. If the -% actual height of the base character differs from 1\,ex, the -% accent is shifted up or down to maintain the same vertical -% separation. Put another way, subtracting 1\,ex from the height -% of a combining accent tells us how much a character's height is -% increased when that accent is added. Call this -% distance~$\delta$. -% -% This distance can be analyzed into two pieces: $\delta = \sigma + -% \eta$, where $\sigma$ is the separation between the top of -% the base character and the \emph{bottom} of the accent, and -% $\eta$ is the height of the bounding box of the accent. -% -% If we now consider moving the accent to the bottom of a -% character, we have a new relation $\delta' = \sigma' + \eta$, -% where $\sigma'$ is the distance between the bottom of the base -% and the \emph{top} of the accent, and $\delta'$ is the amount by -% which the depth of the base character is increased. -% -% If the placement of the underhanging version of an accent were -% strictly symmetrical with the overhanging version, then we would -% have $\sigma' = \sigma$ and thus $\delta' = \delta$. However, the -% placement is not symmetric since for aesthetic reasons we have -% chosen to set $\sigma' = .2\,\mathrm{ex}$, which seems in general -% to be a little less than the corresponding~$\sigma$. -% Unfortunately, this means we can't calculate~$\delta'$ accurately -% since there is no way to deduce $\eta$ (or, equivalently, -% $\sigma$) from the font metric information available to us -% within~\TeX.\footnote{By exploiting symmetries present in some -% fonts, one can calculate $\eta$ for some of the accents in those -% fonts, but this doesn't help us much since both $\sigma$ -% and~$\eta$ vary between accents.} -% -% This leaves us in a bit of a bind, since it means there is no way -% to calculate the depth accurately. In despair, I've decided just -% to pretend that $\delta' = \delta$ for now. -% -% \subsection*{Finis} -% -% The usual \cs{endinput} to ensure that random garbage at the end of -% the file doesn't get copied by \fn{docstrip}. -% \begin{macrocode} -\endinput -% \end{macrocode} -% -% \CheckSum{365} -% \Finale diff --git a/Master/texmf-dist/source/latex/amslatex/pcatcode.dtx b/Master/texmf-dist/source/latex/amslatex/pcatcode.dtx deleted file mode 100644 index 192cb201871..00000000000 --- a/Master/texmf-dist/source/latex/amslatex/pcatcode.dtx +++ /dev/null @@ -1,359 +0,0 @@ -%%% ==================================================================== -%%% @LaTeX-doc-source-file{ -%%% filename = "pcatcode.dtx", -%%% version = "1.04", -%%% date = "2002/04/16", -%%% time = "09:20:52 EDT", -%%% author = "Michael J Downes", -%%% copyright = "Copyright 2001 American Mathematical Society", -%%% address = "American Mathematical Society, -%%% Publications Technical Group, -%%% PO Box 6248, -%%% Providence, RI 02940, -%%% USA", -%%% email = "tech-support@ams.org", -%%% URL = "http://www.ams.org/", -%%% abstract = "The pcatcode package changes LaTeX package loading -%%% internals so that all subsequently loaded packages -%%% can rely on having normal catcodes in effect.", -%%% license = "Artistic", -%%% checksum = "25118 359 1469 13319", -%%% docstring = "The checksum field, produced by Robert Solovay's -%%% checksum utility, gives CRC-16 checksum, lines, -%%% words, and characters.", -%%% } -%%% ==================================================================== -% \iffalse -%<*driver> -\documentclass{amsdtx} -%\usepackage{pcatcode}\relax -\begin{document} -\title{The \pkg{pcatcode} package} -\author{Michael~J. Downes\\American Mathematical Society} -\date{Version \fileversion, \filedate} -\hDocInput{pcatcode.dtx} -\end{document} -%</driver> -% \fi -% -% \maketitle -% \section{Introduction} -% -% The \pkg{pcatcode} package provides mechanisms for robustly -% changing the catcode environment for the duration of a package and -% restoring it afterwards to whatever it was before the package was -% loaded. -% -% Motivation: The \pkg{amsmath} package (for example), makes a number -% of assignments using characters such as double-quote and -% left-quote, because these are hard-wired into the \tex/ syntax for -% numbers and other things. If a package that makes double-quote an -% active character is loaded before \pkg{amsmath}, all the -% statements that use double-quote turn into error messages. -% -% But now! Groan and grumble no more, ye package writers, for putting -% a magical invocation of the pcatcode package at the beginning of -% your package file, as shown here, will ensure that your -% package contents will be processed with completely normal catcodes. -%\begin{verbatim} -%\NeedsTeXFormat{LaTeX2e}[1995/12/01] -%\@ifundefined{PushCatcodes}{% -% \RequirePackage{pcatcode}\relax\PushCatcodes\NormalCatcodes -%}{} -%\ProvidesPackage{foo}[2002/04/16 v1.04] -%\end{verbatim} -% -% It must be followed by a matching \cs{PopCatcodes} command, -% typically used in conjunction with \cs{endinput}. -% -% WARNING: This functionality would work best if it were built into -% the \LaTeX{}2e kernel, but it cannot be usefully added to the -% kernel now without adversely affecting document compatibility -% across different systems. This package therefore modifies one or -% two of the low-level package-loading functions defined by the -% kernel. This means that there may be trouble if any other package, -% or some future version of \LaTeX{}, changes the definitions of -% those functions. -% -% NOTE: Packages that do not call \cs{PushCatcodes} -% \cs{NormalCatcodes} will remain transparent to the external catcode -% environment in the usual way (i.e., for all characters except the -% \verb'@' character). -% -% \StopEventually{} -% -% \section{Implementation} -% \subsection{Preliminary Remarks} -% -% At the document level, we assume that the following characters -% always have their standard catcode: -% \begin{center} -% \begin{tabular}{lp{.75\columnwidth}} -% \verb'\{}' & for commands and arguments\\ -% \verb'%' & for comments\\ -% \verb'#' & for use with \cn{newcommand}\\ -% \verb'*' & cannot be changed without breaking star-form commands\\ -% \verb'[]' & cannot be changed without breaking optional arguments\\ -% \verb'~' & already active, no reason to change catcode -% \end{tabular} -% \end{center} -% -% One might think that we could assume hyphen, period (and comma, for -% European decimal notation) are always catcode 12. Experience has -% shown, however, that for just about every character there is some -% plausible application that would be facilitated by making that -% character active and giving it a complex definition. Surely hyphen -% and period must stay catcode 12 in order to work in statements like -% the following? -%\begin{verbatim} -%\addtocounter{section}{-1} -%\addtolength{\columnwidth}{-1.5cm} -%\end{verbatim} -% Yet hyphen and period are important constituents of ordinary text -% and therefore special applications arise. For example, -% what if you would like -% mdashes to be surrounded by extra space but your authors prefer to -% continue writing \verb'---' in the accustomed manner? -% -% Theoretically speaking, the \pkg{pcatcode} package itself has to -% guard against the kind of catcode problems that it is intended to -% circumvent. If you would like a nice little \tex/nician's -% exercise, try your hand, before looking at the code below, at the -% task that I set for myself: Find the minimal set of catcode -% assumptions that one has to make before attempting to establish -% normalcy, where normalcy is defined as the state at the end of -% \fn{latex.ltx}, just before the last \cs{makeatother}. This is the -% state that may normally be expected at the beginning of a -% documentclass file, if the \LaTeX{} format file does not have any -% extensions (e.g., babel) compiled in. -% -% Ready to look, now? -% -% In order for the following code to work it is only necessary that -% backslash, letters, and digits have their normal catcodes: 0, 11, -% 12 respectively. One could argue that if \fn{pcatcode.sty} is -% invoked through a standard \cs{RequirePackage} call, it can be -% assumed that curly braces also have their normal catcodes. But I -% suppose it is not utterly inconceivable that in some special -% circumstances one might want to load the package with the -% \cs{@@input} primitive, sans braces. And in any case the extra -% overhead to handle braces as well is trivial so for esthetic -% reasons I'm gonna put it in. -% -% If you look really hard you'll find one or two other assumptions, -% such as ``endlinechar is not a letter''. Wait, come to think of it, -% I can fix that \ldots -% -% The purpose of the group is chiefly to localize the temporarily -% changed definitions of \cs{e}, \cs{n}, etc. -% \begin{macrocode} -\begingroup\let\e\endlinechar\iffalse\ -\fi\chardef\E\e\e13\chardef\n\catcode\e\catcode\e5\relax\relax -\chardef\s\catcode32\chardef\t10\catcode32\t -\chardef\c\catcode37 \catcode37 14 % percent -\chardef\=\catcode61 \catcode61 12 % equal sign -\chardef\l=\catcode123 \catcode123=1 % left brace -\chardef\r=\catcode125 \catcode125=2 % right brace -\chardef\[=\catcode91 \catcode91=12 % left bracket -\chardef\]=\catcode93 \catcode93=12 % right bracket -\chardef\^=\catcode94 \catcode94=7 % hat -\chardef\.=\catcode46 \catcode46=12 % period -\chardef\/=\catcode47 \catcode47=12 % slash -\edef\c{% - \endgroup - \def\noexpand\pcat@restore{% - \catcode\number\e=\number\n \catcode32=\number\s - \catcode123=\number\l \catcode125=\number\r - \catcode37=\number\c \catcode61=\number\=% - \catcode91=\number\[\catcode93=\number\]\catcode94=\number\^% - \catcode46=\number\.\catcode47=\number\/% - \endlinechar=\number\E \relax - }% -} -\c -\endlinechar13\catcode13\string=5\relax\relax -\catcode32\string=10 \catcode37 14\relax\relax -\catcode61 12\catcode123=1\catcode125=2\catcode91=12\catcode93=12\relax -\catcode46=12\catcode47=12\catcode94=7\relax -% \end{macrocode} -% -% This code was postponed until now to avoid all but the most -% essential assumptions. -% \begin{macrocode} -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{pcatcode}[2002/04/16 v1.04] -% \end{macrocode} -% -% \begin{macrocode} -\def\NormalCatcodes{% - \endlinechar=13% - \catcode33=12\catcode34=12\catcode35=6\catcode36=3\catcode37=14% - \catcode38=4\catcode39=12\catcode40=12\catcode41=12\catcode42=12% - \catcode43=12\catcode44=12\catcode45=12\catcode46=12\catcode47=12% - \catcode58=12\catcode59=12\catcode60=12\catcode61=12\catcode62=12% - \catcode63=12\catcode91=12\catcode92=0\catcode93=12\catcode94=7% - \catcode95=8\catcode96=12\catcode123=1\catcode124=12\catcode125=2% - \catcode126=13\catcode32=10\catcode13=5\catcode9=10\catcode10=12% - \relax -} -% \end{macrocode} -% -% \begin{macrocode} -\def\CatcodeStack{} -% \end{macrocode} -% -% Notably absent from the following list: the \verb'@' character and -% whitespace characters. The former is already handled in the -% \LaTeX{} kernel, and I hesitate to interfere with its current -% catcode transitions. -% \begin{macrocode} -\begingroup \escapechar=\m@ne \let\s\string -\xdef\pcat@otherchars{% - \s\!\s\"\s\#\s\$\s\%\s\&\s\'\s\(\s\)\s\*\s +\s\,\s\-\s\.\s\/\s\:% - \s\;\s\<\s\=\s\>\s\?\s\[\s\\\s\]\s\^\s\_\s\`\s\{\s\|\s\}\s\~% -} -\endgroup -% \end{macrocode} -% -% \begin{macrocode} -\gdef\PushCatcodes{% - \xdef\CatcodeStack{% - \expandafter\PushCat@a\pcat@otherchars\ \ - \^^I\^^J{T \@gobbletwo}\@empty - \relax - {\CatcodeStack}}% -} -\def\PushCat@a#1{\catcode\number`#1=\number\catcode`#1 \PushCat@a} -% \end{macrocode} -% -% \begin{macrocode} -\PushCatcodes \NormalCatcodes -% \end{macrocode} -% -% \begin{macrocode} -\def\PopCatcodes{\expandafter\PopCat@a\CatcodeStack} -\def\PopCat@a#1#{#1\xdef\CatcodeStack} -% \end{macrocode} -% -% \subsection{Checking current settings} -% -% This can be used to store a copy of the current settings. Or print -% it with \cs{typeout}. -% \begin{macrocode} -\def\CCSdo#1{ (\string#1\@iden{:\number\catcode`#1)\CCSdo}} -\def\CurrentCatcodesSubset{% - \romannumeral 0\CCSdo\^^I\^^J\^^L\^^M\ \!\"\#\$\%\&\'\(\)\*+\,\-\.\/\:\;\<\=\>\?\@\[\\\]\^\_\`\{\|\}{\~\@gobbletwo}:\number\catcode`\~)% -} -% \end{macrocode} -% -% \subsection{Futurelet support} -% -% For code that does futureletting to see if a punctuation character -% follows, it is distressing to handle the case when some characters -% might be made active (e.g., by the babel package). -% -% The \cs{FutureLetSetup} function attempts to minimize the -% difficulties by defining canonical control sequences to represent -% all the visible ASCII characters (i.e., ranging from space to -% \qc{\~}, 32--126, plus TAB) whose catcode could be changed without -% transgressing the limits of standard \LaTeX{} syntax. -% \begin{macrocode} -\begingroup\pcat@restore -\begingroup -\catcode`\3="3 \catcode`\4="4 \catcode`\7="7 \catcode`\8="8 -\catcode`\A="A \catcode`\B="B \catcode`\C="C \catcode`\D="D -\gdef\fls@let#1#2{% - \ifx\@@undefined#1\else\errmessage{\string#1 already defined}\fi - \begingroup - \lccode`\3=`#2\lccode`\7=`#2\lccode`\8=`#2% - \lccode`\B=`#2\lccode`\C=`#2\lccode`\D=`#2\relax - \ifnum\catcode`#2=\active - \def\do##1{\noexpand\do\noexpand##1\noexpand}% - \lowercase{% - \xdef\fls@active@characters{% - \fls@active@characters - \do#1D}% - }% - \fi - \aftergroup\global \aftergroup\let \aftergroup#1\aftergroup=% - \lowercase{\aftergroup} % - \lowercase{\expandafter\endgroup - \ifcase\catcode`#2 % - 0\or \bgroup\or \egroup\or 3\or 4\or 5\or 6\or 7\or 8\or 9\or - \@sptoken\or B\or C\else D\fi - }% -} -\endgroup -% \end{macrocode} -% \cs{dl@@dblquote} means ``document-level double quote'': a -% character token number 34 that has the catcode which is in effect -% at \verb'\begin{document}' for double quotes. -% \begin{macrocode} -\gdef\FutureLetSetup{% - \gdef\fls@active@characters{}% -% \end{macrocode} -% This will normally be the same as \cs{@sptoken}. -% \begin{macrocode} - \fls@let\dl@@space\ % - \fls@let\dl@@exclam\!% - \fls@let\dl@@dblquote\"% - \fls@let\dl@@hash\#% - \fls@let\dl@@dollar\$% -% \end{macrocode} -% At document level, this cannot occur as a separate token. -% \begin{macrocode} -% \fls@let\dl@@percent\%% - \fls@let\dl@@ampersand\&% - \fls@let\dl@@rquote\'% - \fls@let\dl@@lparen\(% - \fls@let\dl@@rparen\)% - \fls@let\dl@@star\*% - \fls@let\dl@@plus\+% - \fls@let\dl@@comma\,% - \fls@let\dl@@hyphen\-% - \fls@let\dl@@period\.% - \fls@let\dl@@slash\/% - \fls@let\dl@@colon\:% - \fls@let\dl@@semicolon\;% - \fls@let\dl@@less\<% - \fls@let\dl@@equal\=% - \fls@let\dl@@greater\>% - \fls@let\dl@@question\?% - \fls@let\dl@@lbracket\[% -% \end{macrocode} -% At document level, this cannot occur as a separate token. -% \begin{macrocode} -% \fls@let\dl@@backslash\\% - \fls@let\dl@@rbracket\]% - \fls@let\dl@@hat\^% - \fls@let\dl@@underscore\_% - \fls@let\dl@@lquote\`% -% \end{macrocode} -% Here one would normally use \cs{bgroup}. -% \begin{macrocode} - \fls@let\dl@@lbrace\{% - \fls@let\dl@@vert\|% -% \end{macrocode} -% Here one would normally use \cs{egroup}. -% \begin{macrocode} - \fls@let\dl@@rbrace\}% - \fls@let\dl@@tilde\~% -} -\AtBeginDocument{\FutureLetSetup} -% \end{macrocode} -% -% \begin{macrocode} -\gdef\FutureLetReset{% - \def\do##1##2{\let##1= ##2}% - \fls@active@characters - \let\do\relax -} -\endgroup -% \end{macrocode} -% -% \begin{macrocode} -\endinput \PopCatcodes\pcat@restore -% \end{macrocode} -% -% \CheckSum{530} -% \Finale diff --git a/Master/texmf-dist/source/latex/amslatex/rkeyval.dtx b/Master/texmf-dist/source/latex/amslatex/rkeyval.dtx deleted file mode 100644 index 88d4642df27..00000000000 --- a/Master/texmf-dist/source/latex/amslatex/rkeyval.dtx +++ /dev/null @@ -1,1116 +0,0 @@ -%%% ==================================================================== -%%% @LaTeX-doc-source-file{ -%%% filename = "rkeyval.dtx", -%%% version = "2.00", -%%% date = "2004/06/28", -%%% time = "15:19:29 EDT", -%%% author = "Michael J Downes and David M. Jones", -%%% address = "American Mathematical Society, -%%% Publications Technical Group, -%%% PO Box 6248, -%%% Providence, RI 02940, -%%% USA", -%%% email = "tech-support@ams.org", -%%% URL = "http://www.ams.org/", -%%% abstract = "Key-value scanning functions with more restrictive -%%% syntax than the standard keyval package. This permits -%%% some improvements in the error-checking.", -%%% checksum = "44721 1116 3178 30537", -%%% docstring = "The checksum field, produced by Robert Solovay's -%%% checksum utility, gives CRC-16 checksum, lines, -%%% words, and characters.", -%%% } -%%% ==================================================================== -% \iffalse -%<*driver> -\documentclass[draft,oneside]{amsdtx} -\pagestyle{myheadings} - -\makeatletter -\DeclareRobustCommand{\fld}{\@category@index{field}} -\makeatother - -\DoNotIndex{\@emptytoks,\@temptokenb} - -\CodelineIndex - -\begin{document} -\title{The \pkg{rkeyval} package:\protect\linebreak[1] - Syntactically restricted key-value scanning} -\author{Michael Downes and David M. Jones\\American Mathematical Society} -\date{Version \fileversion, \filedate} -\hDocInput{rkeyval.dtx} -\PrintIndex -\end{document} -%</driver> -% \fi -% -% \MakeShortVerb{\|} -% -% \maketitle -% \markboth{The \protect\pkg{rkeyval} package} -% {Version \protect\fileversion, \protect\filedate} -% -% \tableofcontents -% -% \section{Introduction} -% -% The \pkg{rkeyval} package provides functions for scanning key-value -% notation similar to the kind of scanning supported by the standard -% \pkg{keyval} package. However, the syntax is more restrictive in -% order to make some improved error-checking possible. In particular, -% if a comma is omitted between two instances of |key={value}| -% form, the \cn{RestrictedSetKeys} command will spot the missing -% comma and issue a suitable error message (and it will be given at -% the point where the missing comma is detected, before reading any -% further in the \tex/ file). The standard \cn{setkeys} command, by -% contrast, will append the second key name to the value of the first -% key and discard the second value, without any notification to the -% user that anything has gone wrong. But that is partly because the -% standard \cn{setkeys} command allows implied values and does not -% require braces around explicit values (except when necessary to -% hide material that has a syntactic resemblance to a key-value -% pair). With \cn{RestrictedSetKeys} the value must always be present -% and it must be enclosed in braces. -% -%^^A Maybe commas should be optional. -% -% Further restrictions of the \cn{RestrictedSetKeys} command and its -% companion commands reduce memory consumption in certain ways. -% Defining a key creates only one control sequence, a container for -% holding the value. Processing of key values is normally limited to -% storing a value given by the user; any additional processing must -% be supplied separately by the programmer. -% -% Generally speaking, the error-checking done by -% \cn{RestrictedSetKeys} is better for applications where all the -% keys are expected to have textual values, while \cn{setkeys} is -% better when one wants to silently recover as far as possible from -% syntactic errors, instead of notifying the user of the errors; or -% when keys have nontrivial default values (i.e., not empty) or other -% kinds of special processing. -% -% \begin{verbatim} -% \RestrictedSetKeys{setup-code}{group}{code}{key={val}, ...} -%\end{verbatim} -% Normally \cn{RestrictedSetKeys} simply carries out the following -% assignment for each key-value pair: -% \begin{verbatim} -% \def\group'key{val} -%\end{verbatim} -% The first argument is normally empty, but the exact nature of the -% warnings given and other aspects of the processing can be affected -% by putting extra setup code there. The \pkg{amsrefs} package uses -% this to implement a copying operation where field name and value -% are written out immediately to another file instead of being stored -% in the usual way. -% -% Some examples for defining the key names associated with a given -% group. This defines ``title'' as a recognized key for the \fn{bib} -% group: -% \begin{verbatim} -% \DefineSimpleKey{bib}{title} -%\end{verbatim} -% If a key is defined with \cs{DefineSimpleKey}, the result of using -% the same key more than once in a single entry will be an error -% message. -% -% This defines ``title'' to be a repeatable key: -% \begin{verbatim} -% \DefineSupersedingKey{bib}{title} -%\end{verbatim} -% If it occurs more than once, the last value supersedes the earlier -% ones, instead of getting an error. This variation is not needed for -% simple usage, but in more complicated situations where key values -% are combined from multiple sources, it may be useful. -% -% This defines ``author'' to be a repeatable key, with each value -% being appended to a list of values: -% \begin{verbatim} -% \DefineAdditiveKey{bib}{author}{\name} -%\end{verbatim} -% The third argument specifies a wrapper function that should be -% applied to each item in the list. I.e., suppose that two author -% names are given: -% \begin{verbatim} -% author={Smith, J. Q.}, -% author={Taylor, X. Y.}, -%\end{verbatim} -% Then they will be stored in the form -% \begin{verbatim} -% \name{Smith, J. Q.}\name{Taylor, X. Y.} -%\end{verbatim} -% -% This defines ``transition'' to be a dummy key with a value that is -% superficially nonempty but effectly empty: -% \begin{verbatim} -% \DefineDummyKey{bib}{transition} -%\end{verbatim} -% Defining a dummy key like this can be useful in dealing with -% certain boundary situations that sometimes arise. -% -% \StopEventually{} -% -% \section{Implementation} -% Standard declaration of package name and date. -% \begin{macrocode} -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{rkeyval}[2004/05/05 v1.08] -% \end{macrocode} -% -% \begin{macro}{\@xp} -% \begin{macro}{\@nx} -% \begin{macrocode} -\let\@xp\expandafter -\let\@nx\noexpand -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@gobblethree} -% \begin{macro}{\@nilgobble} -% Not in the \latex/ kernel yet. -% \begin{macrocode} -\long\def\@gobblethree#1#2#3{} -\long\def\@nilgobble#1\@nil{} -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@emptytoks} -% Using \cs{@ifundefined} here avoids problems with really old -% versions of \latex/ that choke on \cs{newtoks} if it is written -% directly in the false branch of a conditional. -% \begin{macrocode} -\@ifundefined{@emptytoks}{\csname newtoks\endcsname\@emptytoks}{} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@temptokenb} -% \begin{macrocode} -\@ifundefined{@temptokenb}{\csname newtoks\endcsname\@temptokenb}{} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@append} -% \begin{macrocode} -\def\@append#1#2#3{\@xp\def\@xp#2\@xp{#2#1{#3}}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\star@} -% Test for a trailing option marked by a star. Usage: -% \begin{verbatim} -% \newcommand{\blub}[1]{\star@{\blubaux{#1}}{default}} -%\end{verbatim} -% Arg 1 of \cs{star@} is the code to -% be run, arg 2 is the default value of the option (could be empty). -% If arg 1 is \ncn{moo}, this test discards a star and expands to -% \ncn{moo} if a star is found, or expands to |\moo{#2}| if -% not. As the example shows, arg 1 need not be a single token. -% \begin{macrocode} -\def\star@#1#2{% - \def\star@a##1{#1}% - \def\star@b{#1{#2}}% - \futurelet\@let@token\star@test -} - -\def\star@test{\ifx*\@let@token \let\star@b\star@a\fi \star@b} -% \end{macrocode} -% -% Please note: If there is a space before the star, then the star is -% not treated as an option char. -% -% Why use a star? Since it's already part of standard \latex/ -% command syntax, it's unlikely to suffer from catcode changes. -% -% Why not just put the star at the beginning in the usual way? It -% seemed to me that the lack of a trailing option -% feature was a deficiency in current \latex/ and could be given an -% experimental implementation in a package like this without any -% adverse effect on existing documents. -% \end{macro} -% -% Ensure non-weird catcode for relevant characters. -% \begin{macrocode} -\@ifundefined{NormalCatcodes}{\RequirePackage{pcatcode}\relax}{} -\PushCatcodes\NormalCatcodes -% \end{macrocode} -% -% \begin{macro}{\extract@group} -% Extracts ``group'' from |\group'field|. -% \begin{macrocode} -\def\extract@group#1{% - \@xp\extract@group@a\string#1\@nil -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\extract@group@a} -% \begin{macrocode} -\def\extract@group@a#1#2'{#2\@nilgobble} -% \end{macrocode} -% \end{macro} -% -% \section{Data structures} -% -% The result of scanning the key/value pairs is an assignment statement -% for \cs{rsk@toks}. For example, consider the entry -% \begin{verbatim} -% \bib{LelekZ1962}{article}{ -% author={Lelek, A.}, -% author={Zaremba, D.}, -% title={Dimensions of irreducible ...}, -% journal={Fund. Math.}, -% date={1962/63}, -% } -%\end{verbatim} -% The scanned result is to assign -% \begin{verbatim} -% \global\rsk@toks{% -% \set:bib'author{Lelek, A.}{}% -% \set:bib'author{Zaremba, D.}{}% -% \set:bib'title{Dimensions of irreducible ...}{}% -% \set:bib'journal{Fund. Math.}{}% -% \set:bib'date{1962/63}{}% -% } -%\end{verbatim} -% The extra empty arguments on each line are for auxiliary -% properties (see below). -% What happens thereafter with \cs{rsk@toks} depends on the code in -% the last arg of \cs{RestrictedSetKeys}. -% -% \section{Auxiliary properties} -% -% Unfortunately, the previous section isn't the entire story. In -% addition to the values of each field, we need to store a set of -% auxiliary properties associated with those values. Note that -% properties are explicitly associated with \emph{values}, not with -% keys, because each value of an additive key could have different -% properties. -% -% All such extra data will be stored in a special field named -% ``aux'', with embedded tags to indicate which field each piece of -% the \fld{aux} field is associated with. The extra bits can be -% extracted on demand using standard techniques, and the primary -% value of each field is not burdened with any attachments, so that -% comparisons or scanning of the field contents can remain as -% simple as possible. -% -% Thus in practice there is at least one bit of auxiliary information -% in every bib item, and our previous example would have the title -% language indicated: -% \begin{verbatim} -% \DSK@def\bib'title{Eine Bemerkung zur Darstellung von Polynomen -% \"{u}ber Verb\"{a}nden}% -% \@append\bib'title\bib'aux{\selectlanguage{german}}% -%\end{verbatim} -% -% \begin{macro}{\set@property} -% \begin{macrocode} -\def\set@property#1{% - \begingroup - \edef\@tempa{\extract@group#1}% - \edef\@tempa{% - \@nx\@append\@nx#1\@xp\@nx\csname \@tempa,aux\endcsname - }% - \@xp\endgroup - \@tempa -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\get@property} -% \begin{macrocode} -% \get@property\destination\bib'title -\def\get@property#1#2{% - \get@nth@property#1#2\m@ne -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\get@nth@property} -% \begin{macrocode} -% \get@nth@property\destination\bib'title N -\def\get@nth@property#1#2#3{% - \begingroup - \edef\@tempa{\extract@group#2}% - \@tempcnta#3\relax - \@tempcntb\z@ - \@xp\scan@properties\@xp#2\csname \@tempa,aux\endcsname - \edef\@tempa{\def\@nx#1{\@tempa}}% - \@xp\endgroup - \@tempa -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\scan@properties} -% \begin{macrocode} -\def\scan@properties#1#2{% - \begingroup - \def\@tempa{#1}% - \let\@tempc\@empty - \@xp\find@property #2 \@nil\@nil - \edef\@tempa{\def\@nx\@tempa{\@tempc}}% - \@xp\endgroup - \@tempa -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\find@property} -% \begin{macrocode} -\def\find@property#1#2{% - \ifx\@nil#1% - \else - \def\@tempb{#1}% - \ifx\@tempa\@tempb - \ifnum\@tempcnta<\z@ - \def\@tempc{#2}% - \else - \advance\@tempcntb\@ne - \ifnum\@tempcntb=\@tempcnta - \def\@tempc{#2}% - \fi - \fi - \fi - \@xp\find@property - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\reset@property} -% \begin{macrocode} -\def\reset@property#1#2{% - \reset@nth@property#1\m@ne{#2}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\reset@nth@property} -% \begin{macrocode} -% \reset@nth@property\bib'title N VALUE -\def\reset@nth@property#1#2#3{% - \begingroup - \edef\@tempa{\extract@group#1}% - \@tempcnta#2\relax - \@temptokena{#3}% - \toks@\@emptytoks - \@tempcntb\z@ - \@xp\reset@scan\@xp#1\csname \@tempa,aux\endcsname - \edef\@tempa{% - \def\@xp\@nx\csname \@tempa,aux\endcsname{\the\toks@}% - }% - \@xp\endgroup - \@tempa -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\reset@scan} -% \begin{macrocode} -\def\reset@scan#1#2{% - \begingroup - \def\@tempa{#1}% - \@xp\reset@scan@a #2 \@nil\@nil - \edef\@tempa{\toks@{\the\toks@}}% - \@xp\endgroup - \@tempa -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\find@property} -% \begin{macrocode} -\def\reset@scan@a#1#2{% - \ifx\@nil#1% - \else - \def\@tempb{#1}% - \ifx\@tempa\@tempb - \ifnum\@tempcnta<\z@ - \@temptokenb\@temptokena - \else - \advance\@tempcntb\@ne - \ifnum\@tempcntb=\@tempcnta - \@temptokenb\@temptokena - \fi - \fi - \else - \@temptokenb{#2}% - \fi - \edef\@tempb{% - \toks@{\the\toks@ \@nx#1{\the\@temptokenb}}% - }% - \@tempb - \@xp\reset@scan@a - \fi -} -% \end{macrocode} -% \end{macro} -% -% \section{Some machinery for finite state automata} -% -% Coincidentally I needed to write two finite state automaton parsers -% for two related packages, so after writing them separately I spent -% some time analyzing the code fragments they shared in common and -% abstracted them so that the cs names could be shared. -% -% \begin{macro}{\fsa@l} -% FSA lookahead. -% \begin{macrocode} -\def\fsa@l{\futurelet\@let@token\fsa@t} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\fsa@b} -% FSA bypass a token. Don't delete the space at the end! -% \begin{macrocode} -\def\fsa@b{\afterassignment\fsa@l \let\@let@token= } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\fsa@c} -% FSA copy a token (not space, bgroup, egroup). -% \begin{macrocode} -\def\fsa@c#1{\aftergroup#1\fsa@l} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\fsa@n} -% FSA next action. This is just a placeholder definition. -% \begin{macrocode} -\let\fsa@n\@empty -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\fsa@t} -% FSA test. This is just a placeholder definition. -% \begin{macrocode} -\let\fsa@t\@empty -% \end{macrocode} -% \end{macro} -% -% \section{Now some of the real work} -% -% \begin{macro}{\rsk@toks} -% \begin{macrocode} -\newtoks\rsk@toks -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rkvIfEmpty} -% Beginning here. -% \begin{macrocode} -\def\rkvIfEmpty#1#2{% - \@xp\ifx\csname#1'#2\endcsname\@empty - \@xp\@firstoftwo - \else - \@xp\@secondoftwo - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rkvIfAdditive} -% \begin{macrocode} -\def\rkvIfAdditive#1{% - \@xp\let\@xp\@let@token \csname \rkv@setter#1\endcsname - \afterassignment\@nilgobble - \@xp\let\@xp\@let@token \@let@token \@empty\@empty\@nil - \ifx\@let@token\DSK@append - \@xp\@firstoftwo - \else - \@xp\@secondoftwo - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rkv@setter} -% It irritates me that I can't embed the \ncn{csname} and -% \ncn{endcsname} in here. -% \begin{macrocode} -\def\rkv@setter#1{set:\@xp\@gobble\string#1} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rkv@DSAK} -% Define a simple, superseding, or additive key. -% \begin{macrocode} -\def\rkv@DSAK#1#2{% - \addto@group@reset#1{\let#1\@empty}% - \edef\@tempa{\def\csname \rkv@setter#1\endcsname}% - \@tempa{#2#1}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rkv@DDK} -% This function is used for a dummy key whose value (expansion) -% should be empty but that should appear non-empty to -% \cs{rkvIfEmpty}. -% \begin{macrocode} -\def\rkv@DDK#1{% - \addto@group@reset#1{\def#1{\@empty}}% - \@xp\let\csname \rkv@setter#1\endcsname\@gobble -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DSK@def} -% \begin{macrocode} -\def\DSK@def#1{% - \ifx#1\@empty\else - \PackageWarningNoLine{rkeyval}% - {Key \string#1 should not be repeated}% - \fi - \DSK@redef#1% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DSK@redef} -% We weed out empty field values for consistency with -% \cs{DSK@append}. -% \begin{macrocode} -\def\DSK@redef#1#2{% - \@ifempty{#2}{\@gobble}{% - \def#1{#2}% - \set@property#1 - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\init@group@reset} -% \begin{macrocode} -\def\init@group@reset#1{% - \begingroup - \edef\@tempb{\@xp\@nx\csname #1@reset\endcsname}% - \@xp\ifx\@tempb\relax - \@xp\xdef\@tempb{\let \csname #1,aux\endcsname\@nx\@empty} - \fi - \endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\addto@group@reset} -% \begin{macrocode} -\def\addto@group@reset#1{% - \begingroup - \edef\@tempa{\extract@group#1}% - \init@group@reset\@tempa - \edef\@tempa{% - \@nx\g@addto@macro\@xp\@nx\csname\@tempa @reset\endcsname - }% - \@xp\endgroup - \@tempa -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DefineSimpleKey} -% \begin{macrocode} -\newcommand{\DefineSimpleKey}[2]{% - \@xp\rkv@DSAK - \csname #1'#2\endcsname - {\DSK@def}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DefineSupersedingKey} -% \begin{macrocode} -\newcommand{\DefineSupersedingKey}[2]{% - \@xp\rkv@DSAK - \csname #1'#2\endcsname - {\DSK@redef}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DefineAdditiveKey} -% \begin{macrocode} -\newcommand{\DefineAdditiveKey}[3]{% - \@xp\rkv@DSAK - \csname #1'#2\endcsname - {\DSK@append#3}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DSK@append} -% We weed out empty field values (e.g., |editor={}| or -% \verb*|editor={ }|) because otherwise an additive field could -% end up with a value like |\name{}| which appears non-empty to -% \cs{rkvIfEmpty} but produces no output on the page. -% \begin{macrocode} -\def\DSK@append#1#2#3{% - \@ifempty{#3}{\@gobble}{% - \@append#1#2{#3}% - \set@property#2 - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DefineDummyKey} -% \begin{macrocode} -\newcommand{\DefineDummyKey}[2]{% - \@xp\rkv@DDK \csname #1'#2\endcsname -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\RestrictedSetKeys} -% \begin{macrocode} -\newcommand{\RestrictedSetKeys}[3]{% - \global\rsk@toks\@xp{\csname #2@reset\endcsname}% - \def\rsk@finish{#3}% - \gdef\rsk@set{\@xp\rsk@set@a\csname#2'}% - #1\relax - \begingroup - \rsk@changecase - \aftergroup\rsk@set -% \end{macrocode} -% Start by removing the opening brace. -% \begin{macrocode} - \let\fsa@t\rsk@z - \fsa@l -} -% \end{macrocode} -% \end{macro} -% -% The aftergroup tokens end up looking like this: -% \begin{verbatim} -% \lowercase{\rsk@set FIELDNAME\endcsname} -% --> \@xp\rsk@set@a\csname bib'fieldname\endcsname -% --> \rsk@set@a\bib'abcdef -%\end{verbatim} -% -% \begin{macro}{\rsk@unknown@key} -% \begin{macrocode} -\def\rsk@unknown@key#1{% - \PackageWarning{rkeyval}{Unknown key: \string#1}% - \@xp\def\csname\rkv@setter#1\endcsname {\DSK@redef#1}% -} -% \end{macrocode} -% \end{macro} -% -% \section{The state machine} -% -%\begin{verbatim} -% State 0: Skip opening brace (\rsk@z). -% space -> 0 -% { -> 2 -% other -> error "Missing open brace" -% -% State 1: Skip comma (\rsk@a). -% space -> 1 -% \par -> 1 -% comma -> 2 -% @ -> read optional arg; 1 -% } -> 6 -% other -> error "Missing comma"; 2 -% -% State 2: Find field name (\rsk@b). -% space -> 2 -% \par -> 2 -% comma -> 2 -% letter -> 3 -% { -> error "Missing key name"; 4 -% } -> 6 -% other -> error "Invalid key name character"; 2 -% -% State 3: Scan field name (\rsk@c). -% letter -> 3 -% comma -> error "Invalid key name character"; 3 -% equal -> 4 -% other punct -> 3 -% space -> 4 -% { -> error "Missing equal sign"; 4 -% } -> error "Missing equal sign"; 4 -% other -> error "Invalid key name character"; 3 -% -% State 4: Skip equals (\rsk@d). -% space -> 4 -% equal -> 4 -% { -> 5 -% other -> error "Missing { for value of current key"; 5 -% -% State 5: Read field value (\rsk@set@a). -% any -> 1 -% -% State 6: Done (\rsk@end). -%\end{verbatim} -% -% \begin{macro}{\rsk@z} -% State 0: Skip opening brace. -% \begin{macrocode} -\def\rsk@z{% - \ifx\bgroup\@let@token - \let\fsa@t\rsk@b - \let\fsa@n\fsa@b - \else - \ifx\@sptoken\@let@token - \let\fsa@n\fsa@b - \else - \rsk@errf - \fi - \fi - \fsa@n -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rsk@a} -% State 1: Skip comma. -% \begin{macrocode} -\def\rsk@a{% - \ifx\@let@token\@sptoken - \let\fsa@n\fsa@b - \else - \ifx\@let@token\par - \let\fsa@n\fsa@b - \else - \ifx,\@let@token - \endgroup - \let\fsa@t\rsk@b - \let\fsa@n\fsa@b - \else - \ifx\egroup\@let@token - \endgroup - \let\fsa@n\rsk@end - \else - \endgroup - \let\fsa@n\rsk@erraa - \fi - \fi - \fi - \fi - \fsa@n -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rsk@b} -% State 2: Find field name. -% -% Allow \cs{par} here to permit a blank line after -% the end of one key-val pair and the start of the next (perhaps to -% break up a long list into sections). -% \begin{macrocode} -\def\rsk@b{% - \ifcat\@nx\@let@token A% - \let\fsa@t\rsk@c - \let\fsa@n\fsa@c - \else - \ifx\@sptoken\@let@token - \let\fsa@n\fsa@b - \else - \rsk@bb - \fi - \fi - \fsa@n -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rsk@bb} -% \begin{macrocode} -\def\rsk@bb{% - \ifx,\@let@token - \let\fsa@n\fsa@b - \else - \ifx\bgroup\@let@token - \let\fsa@n\rsk@errb - \else - \ifx\egroup\@let@token - \let\fsa@n\rsk@end - \else - \ifx\par\@let@token - \let\fsa@n\fsa@b - \else - \let\fsa@n\rsk@errc - \fi - \fi - \fi - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rsk@c} -% State 3: Scan field name. -% \begin{macrocode} -\def\rsk@c{% - \ifcat\@nx\@let@token A% - \let\fsa@n\fsa@c - \else - \ifx\@sptoken\@let@token - \let\fsa@t\rsk@d - \let\fsa@n\fsa@b - \else - \ifx=\@let@token - \let\saw@equal T% - \let\fsa@t\rsk@d - \let\fsa@n\fsa@b - \else - \rsk@cb - \fi - \fi - \fi - \fsa@n -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rsk@cb} -% \begin{macrocode} -\def\rsk@cb{% - \ifx,\@let@token - \let\fsa@n\rsk@errc - \else - \ifcat\@nx\@let@token .% - \let\fsa@n\fsa@c - \else - \ifx\bgroup\@let@token - \let\fsa@n\rsk@noequal - \else - \ifx\egroup\@let@token - \let\fsa@n\rsk@noequal - \else - \let\fsa@n\rsk@errc - \fi - \fi - \fi - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\saw@equal} -% \begin{macrocode} -\let\saw@equal=F -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rsk@d} -% State 4: Skip equals. -% -% If no equal sign ever came -% along, then give a warning about it and set \cs{saw@equal} to true -% so that when \cs{rsk@noequal} cycles through again it will take the -% other branch. -% \begin{macrocode} -\def\rsk@d{% - \ifx\bgroup\@let@token - \ifx\saw@equal T% - \aftergroup\endcsname - \rsk@endcase - \let\fsa@n\endgroup - \else - \let\saw@equal T% - \let\fsa@n\rsk@noequal - \fi - \else - \ifx\@sptoken\@let@token - \let\fsa@n\fsa@b - \else - \ifx=\@let@token - \let\saw@equal T% - \let\fsa@n\fsa@b - \else - \let\fsa@n\rsk@erre - \fi - \fi - \fi - \fsa@n -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rsk@casesensitive} -% \begin{macrocode} -\def\rsk@casesensitive{% - \let\rsk@changecase\@empty - \let\rsk@endcase\@empty -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rsk@startlc} -% \begin{macrocode} -\def\rsk@startlc{\aftergroup\lowercase\aftergroup{\iffalse}\fi} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rsk@endlc} -% \begin{macrocode} -\def\rsk@endlc{\iffalse{\fi\aftergroup}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rsk@lowercase} -% \begin{macrocode} -\def\rsk@lowercase{% - \let\rsk@changecase\rsk@startlc - \let\rsk@endcase\rsk@endlc -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\rsk@lowercase -% \end{macrocode} -% -% \begin{macro}{\rsk@resume} -% Here we get improved reporting of error context by changing -% end-of-line to be different from normal space. If we don't find a -% comma on the current line, assume it is an error. -% \begin{macrocode} -\def\rsk@resume{% - \begingroup - \rsk@changecase - \aftergroup\rsk@set - \let\fsa@t\rsk@a - \begingroup - \catcode\endlinechar=\active - \lccode`\~=\endlinechar - \lowercase{\let~\par}% - \fsa@l -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rsk@set@a} -% State 5: Read field value. -% \begin{macrocode} -\def\rsk@set@a#1#2{% - \star@{\rsk@set@b#1{#2}}{}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rsk@set@b} -% \begin{macrocode} -\def\rsk@set@b#1#2#3{% - \@xp\ifx \csname\rkv@setter#1\endcsname \relax - \rsk@unknown@key#1% - \fi - \edef\@tempa{\@xp\@nx\csname \rkv@setter#1\endcsname}% - \toks@\@xp{\@tempa{#2}{#3}}% - \edef\@tempa{% - \global\rsk@toks{\the\rsk@toks \the\toks@}% - }% - \@tempa - \rsk@resume -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rsk@end} -% State 6: Done. -% -% Lets see, now why did I add this? -% \begin{macrocode} -\def\rsk@end{% - \global\let\rsk@set\rsk@terminate - \rsk@endcase - \endgroup - \endcsname - \afterassignment\rsk@finish - \toks@\bgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rsk@terminate} -% \begin{macrocode} -\def\rsk@terminate{\@xp\@gobble\csname} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\NoCommaWarning} -% \begin{macrocode} -\def\NoCommaWarning{\PackageWarning{rkeyval}{Missing comma}}% -% \end{macrocode} -% \end{macro} -% -%% % \begin{macro}{\NoCommaError} -%% % \begin{macrocode} -%% \def\NoCommaError{\rsk@err{Missing comma}\@ehc} -%% % \end{macrocode} -%% % \end{macro} -% -% \begin{macro}{\rsk@nocomma} -% \begin{macrocode} -\def\rsk@nocomma{\NoCommaWarning} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rsk@err} -% \begin{macrocode} -\def\rsk@err{\PackageError{rkeyval}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rsk@errf} -% \begin{macrocode} -\def\rsk@errf{\rsk@err{Missing open brace}\@ehc\rsk@b} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rsk@erraa} -% \begin{macrocode} -\long\def\rsk@erraa{\rsk@nocomma \let\fsa@t\rsk@b \fsa@l} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rsk@errb} -% \begin{macrocode} -\def\rsk@errb{\rsk@err{Missing key name}\@ehc\rsk@d} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rsk@errc} -% \begin{macrocode} -\def\rsk@errc{\rsk@err{Invalid key name character}\@ehc\fsa@b} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rsk@noequal} -% \begin{macrocode} -\def\rsk@noequal{\rsk@err{Missing equal sign}\@ehc\rsk@d} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\rsk@erre} -% In this case we guess that the value is without braces but probably -% terminated with a comma. We want to scan up to the comma in order -% to get back in synch. -% \begin{macrocode} -\def\rsk@erre#1,{% - \rsk@err{Missing open brace for key value}\@ehc - \iffalse{\fi - \endgroup - \endcsname - \rsk@endcase }{#1},% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -\PopCatcodes -% \end{macrocode} -% -% The usual \cs{endinput} to ensure that random garbage at the end of -% the file doesn't get copied by \fn{docstrip}. -% \begin{macrocode} -\endinput -% \end{macrocode} -% -% \CheckSum{871} -% \Finale diff --git a/Master/texmf-dist/source/latex/amslatex/textcmds.dtx b/Master/texmf-dist/source/latex/amslatex/textcmds.dtx deleted file mode 100644 index cbd82171c0a..00000000000 --- a/Master/texmf-dist/source/latex/amslatex/textcmds.dtx +++ /dev/null @@ -1,283 +0,0 @@ -%%% ==================================================================== -%%% @LaTeX-doc-source-file{ -%%% filename = "textcmds.dtx", -%%% version = "1.05", -%%% date = "2002/04/16", -%%% time = "08:47:47 EDT", -%%% author = "Michael J Downes", -%%% address = "American Mathematical Society, -%%% Publications Technical Group, -%%% PO Box 6248, -%%% Providence, RI 02940, -%%% USA", -%%% email = "tech-support@ams.org", -%%% URL = "http://www.ams.org/", -%%% abstract = "Short forms for textemdash and the other LaTeX -%%% commands that correspond to ligatures of -%%% convenience.", -%%% checksum = "55773 283 1136 10227", -%%% docstring = "The checksum field, produced by Robert Solovay's -%%% checksum utility, gives CRC-16 checksum, lines, -%%% words, and characters.", -%%% } -%%% ==================================================================== -% \iffalse -%<*driver> -\NeedsTeXFormat{LaTeX2e} -\documentclass{amsdtx} -% Undo some things defined by amsdtx.cls -\let\qq=\UnDefined \let\mdash=\UnDefined \let\ndash=\UnDefined -\usepackage{textcmds} -\begin{document} -\title{The \pkg{textcmds} package} -\author{Michael~J. Downes\\American Mathematical Society} -\date{Version \fileversion, \filedate} -\hDocInput{textcmds.dtx} -\end{document} -%</driver> -% \fi -% -% \maketitle -% \section{Introduction} -% -% The \pkg{textcmds} package provides shorthand commands for all the -% text symbols that are traditionally produced in \LaTeX{} documents -% by non-letter ligatures. One of the principal benefits of using -% these commands is that it makes translating your document from -% \LaTeX{} to some other form (e.g., HTML) easier and less bug-prone. -% But it also makes your document less dependent on the use of -% special font metric files having the required ligature information, -% and it makes it far easier to achieve special effects for the -%^^A Either don't use \mdash here, or add textcmds pkg in the driver. -% characters in question\textemdash for example, to add or not to add -% a small amount of extra space around an em-dash character. With the -% ligature method you have to manually add the space for each -% instance, whereas if you use the \verb'\mdash' command, it suffices -% to change the definition of \verb'\mdash' to suit your wishes. -% -% All of these definitions use the preferred -% font-encoding-independent \LaTeX{} commands to obtain the -% characters in question. -% \begin{center} -% \begin{tabular}{lll} -% \textbf{Command}& \textbf{Definition}& \textbf{Result}\\ -% \cn{mdash}& \cn{textemdash}& \mdash\\ -% \cn{ndash}& \cn{textendash}& \ndash\\ -% \cn{qd}& \cn{textquestiondown}& \qd\\ -% \cn{xd}& \cn{textexclamdown}& \xd\\ -% \cn{ldq}& \cn{textquotedblleft}& \ldq\\ -% \cn{rdq}& \cn{textquotedblright}& \rdq\\ -% \cn{lq}& \cn{textquoteleft}& \lq\\ -% \cn{rq}& \cn{textquoteright}& \rq -% \end{tabular} -% \end{center} -% -% This package also provides short forms for certain text -% symbols whose generic name is too long for convenient entry. -% (The \cn{cwm} command does not produce visible output but marks -% word boundaries in a compound word.) -% \begin{center} -% \begin{tabular}{lll} -% \textbf{Command}& \textbf{Definition}& \textbf{Result}\\ -% \cn{bul}& \cn{textbullet}& \bul\\ -% \cn{vsp}& \cn{textvisiblespace}& \vsp\\ -% \cn{pdc}& \cn{textperiodcentered}& \pdc\\ -% \cn{vrt}& \cn{textbar}& \vrt\\ -% \cn{cir}& \cn{textasciicircum}& \cir\\ -% \cn{til}& \cn{textasciitilde}& \til\\ -% \cn{bsl}& \cn{textbackslash}& \bsl\\ -% \cn{cwm}& \cn{textcompwordmark}& \cwm -% \end{tabular} -% \end{center} -% -% Finally, a few other miscellaneous commands are provided, including -% a quoting command \cn{qq}. It seems clearly consonant with other -% parts of \LaTeX{} to write \verb'\qq{...}' to quote a word or short -% phrase rather than \verb'\ldq ...\rdq'; and the use of higher-level -% markup is groundwork that must be laid if one should ever want to -% do anything more sophisticated at the boundaries of a quoted -% expression (such as automatically transposing the quote character -% with following punctuation, if traditional rather than logical -% punctuation style is desired). -% -% \begin{center} -% \begin{tabular}{lll} -% \textbf{Example}& \textbf{Definition}& \textbf{Result}\\ -% \verb'\qq{some text}'& \verb'\ldq#1\rdq'& \qq{some text}\\ -% \verb'\lara{some text}'& \verb'\textlangle#1\textrangle'& -% \lara{some text}\\ -% \verb'Jello\tsup{TM}'& \textit{raise .9ex}\verb'{\supsize#1}'& -% Jello\tsup{TM}\\ -% \verb'Jello\tsub{TM}'& \textit{lower .6ex}\verb'{\supsize#1}'& -% Jello\tsub{TM}\\ -% \verb'a\tprime b'& \verb'\tsup{\textprimechar}'& -% a\tprime b -% \end{tabular} -% \end{center} -% -% \StopEventually{} -% -% \begin{macrocode} -%<*pkg> -% \end{macrocode} -% -% \section{Implementation} -% -% Package name, date, version number. -% \begin{macrocode} -\ProvidesPackage{textcmds}[2002/04/16 v1.05] -% \end{macrocode} -% -% Dashes and inverted beginning-of-sentence punctuation. -% \begin{macrocode} -\providecommand{\mdash}{\textemdash\penalty\exhyphenpenalty} -\providecommand{\ndash}{\textendash\penalty\exhyphenpenalty} -\newcommand{\qd}{\textquestiondown} -\newcommand{\xd}{\textexclamdown} -% \end{macrocode} -% -% Quote commands. Note that \cs{lq} and \cs{rq} are defined in the -% \LaTeX{} kernel to produce functionally different quote characters. -% \begin{macrocode} -\newcommand{\ldq}{\textquotedblleft} -\newcommand{\rdq}{\textquotedblright} -\newcommand{\lsq}{\textquoteleft} -\newcommand{\rsq}{\textquoteright} -% \end{macrocode} -% -% \begin{macrocode} -\newcommand{\bul}{\textbullet}% -\newcommand{\vsp}{\textvisiblespace}% -\newcommand{\pdc}{\textperiodcentered}% -\newcommand{\vrt}{\textbar}% -\newcommand{\cir}{\textasciicircum}% -\newcommand{\til}{\textasciitilde}% -\newcommand{\bsl}{\textbackslash}% -\newcommand{\cwm}{\textcompwordmark}% -% \end{macrocode} -% -% \begin{macrocode} -\providecommand{\qq}[1]{\ldq#1\/\rdq} -% \end{macrocode} -% -% Unlike \cs{textsuperscript} and \cs{textsubscript}, these do not -% use math mode at all. The difference between \cn{scriptsize} and -% \cn{supsize} is that the former is fixed at a single constant size -% regardless of context, whereas the latter adapts to the current -% font size. -% \begin{macrocode} -\newcommand{\supsize}{% -% \end{macrocode} -% Cf \cs{glb@settings}. -% \begin{macrocode} - \expandafter\ifx\csname S@\f@size\endcsname\relax - \calculate@math@sizes - \fi - \csname S@\f@size\endcsname - \fontsize\sf@size\z@\selectfont -} -\DeclareRobustCommand{\tsup}[1]{% - \leavevmode\raise.9ex\hbox{\supsize #1}% -} -\DeclareRobustCommand{\tsub}[1]{% - \leavevmode\lower.6ex\hbox{\supsize #1}% -} -% \end{macrocode} -% -% The \LaTeX{} kernel contains fallback definitions for various -% symbols that traditionally came from the \texttt{cmsy} font: -%\begin{verbatim} -%\DeclareTextSymbolDefault{\textbraceleft}{OMS} -%\end{verbatim} -% But there is no definition of that kind for the cmsy prime -% character that we want to use for \cn{tprime}. So we need to do it -% here. -% \begin{macrocode} -\DeclareTextSymbolDefault{\textprimechar}{OMS} -\DeclareTextSymbol{\textprimechar}{OMS}{48} -\DeclareRobustCommand{\tprime}{\tsup{\textprimechar}} -% \end{macrocode} -% -% And one more pair of symbols that are sometimes useful in text, yet -% do not have suitable text definitions in the \LaTeX{} kernel. (They -% do in the \pkg{textcomp} package.) -% -% If the \pkg{textcmds} package is loaded together with the -% \pkg{textcomp} package, we don't want to clobber the TS1 default. -% \begin{macrocode} -\@ifundefined{textlangle}{% - \DeclareTextSymbolDefault{\textlangle}{OMS} - \DeclareTextSymbolDefault{\textrangle}{OMS} -}{} -\DeclareTextSymbol{\textlangle}{OMS}{"68} -\DeclareTextSymbol{\textrangle}{OMS}{"69} -% \end{macrocode} -% Not sure what's the best name for the angle-brackets analog of the -% \cn{qq} command. How about ``lara'' for ``left-angle right-angle''? -% -% Unlike the quotes case, it is highly unlikely that the font -% contains kern information for the rangle character and the -% character preceding it! So let's put in an italic correction. -% \begin{macrocode} -\DeclareRobustCommand{\lara}[1]{\textlangle#1\/\textrangle} -% \end{macrocode} -% -% \begin{macrocode} -\csname endinput\endcsname -%</pkg> -% \end{macrocode} -% -% Do you want some Emacs code to convert \verb"--" to \cn{ndash} while -% you write? And \verb"``" to \verb'\qq{' ? Try this. -% \begin{macrocode} -<*emacs> -(defvar latex-ndash-command "\\ndash" - "*String to insert for an n-dash in LaTeX mode.") - -(defvar latex-mdash-command "\\mdash" - "*String to insert for an m-dash in LaTeX mode.") - -(defvar latex-quote-command "\\qq" - "*String to insert for quotes in LaTeX mode.") - -(defun latex-maybe-start-quotes (arg) - "Insert the beginning of a \\qq{...} structure if the preceding char is -a left quote." - (interactive "*p") - (if (= (preceding-char) ?\`) - (progn - (delete-backward-char 1) - (insert-and-inherit (concat latex-quote-command "\{"))) - (self-insert-command arg))) - -(defun latex-maybe-end-quotes (arg) - "Insert the end of a \\qq{...} structure if appropriate." - (interactive "*p") - (if (= (preceding-char) ?\') - (progn - (delete-backward-char 1) - (insert-and-inherit "\}")) - (self-insert-command arg))) - -(defun latex-maybe-dash (arg) - "Convert two or three hyphens to \\mdash or \\ndash." - (interactive "*p") - (cond - ((re-search-backward - (concat (regexp-quote latex-ndash-command) " *\\=") nil t) - (replace-match (concat (regexp-quote latex-mdash-command) " "))) - ((= (preceding-char) ?-) - (delete-backward-char 1) - (insert-and-inherit (concat latex-ndash-command " "))) - (t (self-insert-command arg)))) - -(add-hook 'TeX-mode-hook - '(lambda - (define-key LaTeX-mode-map "\`" 'latex-maybe-start-quotes) - (define-key LaTeX-mode-map "\'" 'latex-maybe-end-quotes) - (define-key LaTeX-mode-map "-" 'latex-maybe-dash))) -</emacs> -% \end{macrocode} -% -% \CheckSum{133} -% \Finale diff --git a/Master/texmf-dist/source/latex/amslatex/upref.dtx b/Master/texmf-dist/source/latex/amslatex/upref.dtx deleted file mode 100644 index 843126b3b58..00000000000 --- a/Master/texmf-dist/source/latex/amslatex/upref.dtx +++ /dev/null @@ -1,151 +0,0 @@ -%%% ==================================================================== -%%% @LaTeX-file{ -%%% filename = "upref.dtx", -%%% version = "2.01", -%%% date = "2004/07/29", -%%% time = "16:37:01 EDT", -%%% checksum = "07926 151 617 5530", -%%% author = "American Mathematical Society", -%%% copyright = "Copyright 1996 American Mathematical Society, -%%% all rights reserved. Copying of this file is -%%% authorized only if either: -%%% (1) you make absolutely no changes to your copy, -%%% including name; OR -%%% (2) if you do make changes, you first rename it -%%% to some other name.", -%%% address = "American Mathematical Society, -%%% Technical Support, -%%% Electronic Products and Services, -%%% P. O. Box 6248, -%%% Providence, RI 02940, -%%% USA", -%%% telephone = "401-455-4080 or (in the USA and Canada) -%%% 800-321-4AMS (321-4267)", -%%% FAX = "401-331-3842", -%%% email = "tech-support@ams.org (Internet)", -%%% codetable = "ISO/ASCII", -%%% keywords = "latex, amslatex, ams-latex, cross references", -%%% supported = "yes", -%%% abstract = "This is a LaTeX package that provides printing -%%% of \cn{ref}s in an upright font even if the -%%% current context is italic or slanted.", -%%% docstring = "The checksum field above contains a CRC-16 -%%% checksum as the first value, followed by the -%%% equivalent of the standard UNIX wc (word -%%% count) utility output of lines, words, and -%%% characters. This is produced by Robert -%%% Solovay's checksum utility.", -%%% } -%%% ==================================================================== -% -%\iffalse -%<*driver> -\documentclass{amsdtx} -\begin{document} -\title{The \pkg{upref} package} -\author{American Mathematical Society\\ Michael Downes\\ - updated by Barbara Beeton} -\date{Version \fileversion, \filedate} -\hDocInput{upref.dtx} -\end{document} -%</driver> -%\fi -% -% \maketitle -% -% \MakeShortVerb\| -% -% \section{Introduction} -% -% This package changes the \cn{ref} command so that it never applies -% a slanted font shape to its argument, regardless of context. This -% was the default behavior in \cls{amsart} version 1.1. Starting with -% \cls{amsart} version 1.2, upright references must be obtained via -% |\usepackage{upref}|. -% -% \StopEventually{} -% -% \section{Implementation} -% Give package name, date, version. -% \begin{macrocode} -\NeedsTeXFormat{LaTeX2e}[1995/06/01] -\ProvidesPackage{upref}[2004/07/29 v2.01] -% \end{macrocode} -% -% \begin{macro}{\@noref} -% Give a warning if a cited reference isn't defined. -% \begin{macrocode} -\newcommand{\@noref}[1]{% - \G@refundefinedtrue - \nfss@text{\reset@font\bfseries ??}% - \@latex@warning{Reference `#1' on page \thepage\space undefined}% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@setref} -% If the current fontshape is italic or slanted, we want to switch to -% upright/roman for printing the number of a \cn{ref}. This requires -% changing the \cs{@setref} command. -% -% Since \cs{@setref} is modified by the \pkg{hyperref} package, delay -% the definition until \cs{AtBeginDocument}. Then check whether -% \pkg{hyperref} is loaded. If it is, we have to redefine some -% control sequences that \pkg{hyperref} defined in order to get -% upright references even in a \pkg{hyperref} environment. -% [tjk,bnb, 2004/07/29] -% \begin{macrocode} -\AtBeginDocument{% - \@ifpackageloaded{hyperref}{% -% \end{macrocode} -% We overload \cs{Hy@setref@link} as this is where the upright -% references get clobbered. Used in overloaded \cs{@setref}. -% \begin{macrocode} - \def\Hy@setref@link#1#2#3#4#5#6\@nil#7{% - \begingroup - \toks0{\hyper@@link{#5}{#4}}% - \toks1\@xp{#7{\textup{#1}\hbox{}}{#2}{#3}{#4}{#5}}% - \edef\x{\endgroup\the\toks0{\the\toks1}}\x - }% -% \end{macrocode} -% We should not have to overload \cs{@setref}, but there is -% a chance that an author is using an old version of hyperref -% which does not use \cs{Hy@setref@link} in \cs{@setref}. -% \begin{macrocode} - \def\@setref#1#2#3{% - \ifx#1\relax - \@xp\protect\@noref{#3}% - \else - \@xp\Hy@setref@link#1\@empty\@empty\@nil{#2}% - \fi - }% - }{% - \def\@setref#1#2#3{\ifx#1\relax - \protect\@noref{#3}% - \else - \protect\textup{\@xp#2#1\hbox{}}% - \fi - }% - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@upn} -% The function \cs{\@upn} is used to force theorem numbers and -% similar elements to be upright in sloped or italic contexts. -% If a suitable italic font with upright numbers and punctuation is -% available, this function should be redefined to be a no-op. -% \begin{macrocode} -\providecommand\@upn{\textup} -% \end{macrocode} -% \end{macro} -% -% The usual \cs{endinput} to ensure that random garbage at the end of -% the file doesn't get copied by \fn{docstrip}. -% \begin{macrocode} -\endinput -% \end{macrocode} -% -% \CheckSum{61} -% \Finale |