diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/amsmath/amstext.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/amsmath/amstext.dtx | 314 |
1 files changed, 314 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/amsmath/amstext.dtx b/Master/texmf-dist/source/latex/amsmath/amstext.dtx new file mode 100644 index 00000000000..0ef49f67a64 --- /dev/null +++ b/Master/texmf-dist/source/latex/amsmath/amstext.dtx @@ -0,0 +1,314 @@ +%%% ==================================================================== +%%% @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 |