Update LuaTeX testfiles for ^@ change
[latex2e.git] / latex2e-20170101 / required / amsmath / amsbsy.dtx
blob213d995347fef0c4af02bd26e9b1c8af8f0660b9
2 % \iffalse meta-comment
4 % Copyright 1995, 1999 American Mathematical Society.
5 % Copyright 2016 LaTeX3 Project and American Mathematical Society. 
7 % This work may be distributed and/or modified under the
8 % conditions of the LaTeX Project Public License, either version 1.3c
9 % of this license or (at your option) any later version.
10 % The latest version of this license is in
11 %   http://www.latex-project.org/lppl.txt
12 % and version 1.3c or later is part of all distributions of LaTeX
13 % version 2005/12/01 or later.
14
15 % This work has the LPPL maintenance status `maintained'.
16
17 % The Current Maintainer of this work is the LaTeX3 Project.
19 % \fi
21 %\iffalse
22 %<*driver>
23 \documentclass{amsdtx}
24 \def\MaintainedByLaTeXTeam#1{%
25 \begin{center}%
26 \fbox{\fbox{\begin{tabular}{@{}l@{}}%
27 This file is maintained by the \LaTeX{} Project team.\\%
28 Bug reports can be opened (category \texttt{#1}) at\\%
29 \url{http://latex-project.org/bugs.html}.\end{tabular}}}\end{center}}
30 \usepackage{amsbsy}
31 \GetFileInfo{amsbsy.sty}
32 \begin{document}
33 \title{The \pkg{amsbsy} package}
34 \author{Frank Mittelbach\and Rainer Sch\"opf\and Michael Downes}
35 \date{Version \fileversion, \filedate}
36 \DocInput{amsbsy.dtx}
37 \end{document}
38 %</driver>
39 %\fi
41 % \maketitle
42 % \MaintainedByLaTeXTeam{amslatex}
44 % \MakeShortVerb\|
46 % \section{Introduction}
48 %    The package \texttt{amsbsy}, first written in 1989, implements a
49 %    few commands for producing \textbf{bold} characters in the `normal'
50 %    \emph{math version}.
51 % \begin{quote}\em
52 %    Note: It is recommended nowadays to use the \pkg{bm} package, which
53 %    became available in 1997.
54 % \end{quote}
56 %    If we have bold fonts which contain the character in question then
57 %    we will use these fonts to produce the wanted character. But
58 %    sometimes math fonts are only available in a certain weight
59 %    (e.g.\ the AMS symbol fonts).
60 % \DescribeMacro\pmb
61 %    For these cases we provide a command which is called \verb+\pmb+ (an
62 %    acronym for \textbf{p}oor \textbf{m}an's \textbf{b}old) with one argument.
63 %    The bolder weight is achieved by copying the argument three times in
64 %    slightly different positions which is better than nothing but no
65 %    match for a real bold font.
67 % \DescribeMacro\boldsymbol
68 %    There also exists the \verb+\boldsymbol+ command which is better in
69 %    all cases where bold fonts exists. This command will internally
70 %    switch to the corresponding `bold' \emph{math version} typeset its
71 %    argument in this version.
73 %    Both commands will preserve the nature of their arguments, i.e.\ if
74 %    they get a relational atom their result will again be a relation as
75 %    far as \tex/'s mathspacing is concerned.
77 %    Since it is good policy to make at least a small test we try to
78 %    typeset the infinity sign ($\infty$) first with \verb+\pmb+ and then
79 %    with \verb+\boldsymbol+.
80 % \[
81 %           \pmb{\infty} = \boldsymbol{\infty} \quad ?
82 % \]
83 % \StopEventually{}
85 %    Standard package info.
86 %    \begin{macrocode}
87 \NeedsTeXFormat{LaTeX2e}% LaTeX 2.09 can't be used (nor non-LaTeX)
88 [1994/12/01]% LaTeX date must December 1994 or later
89 \ProvidesPackage{amsbsy}[1999/11/29 v1.2d Bold Symbols]
90 %    \end{macrocode}
92 % \section{The implementation}
94 %    We need some functions from the \pkg{amsgen} package.
95 %    \begin{macrocode}
96 \RequirePackage{amsgen}
97 %    \end{macrocode}
99 %\begin{macro}{\boldsymbol}
100 %    In implementing boldsymbol, we must take into account \tex/'s
101 %    limitation of only 16 mathgroups (math families, in Knuth's
102 %    terminology). If we wanted to maintain mathgroups for both the bold
103 %    and non-bold version of each math font, it would not take long to
104 %    run out of mathgroups. Therefore what we do instead for a bold
105 %    symbol is embed it in an \verb|\hbox|; inside that \verb|\hbox|,
106 %    when we start another math formula, we can change all the
107 %    mathgroups to their bold equivalents.
109 %    However, to get the correct math style inside the hbox (display,
110 %    text, script or scriptscript) we have to use \verb|\mathchoice|.
111 %    Since \verb|\mathversion{bold}| has a lot of overhead, and
112 %    \verb|\mathchoice| typesets the argument text four times, we would
113 %    rather not put the \verb|\mathversion| command inside each
114 %    \verb|\hbox| in the \verb|\mathchoice|; on the other hand,
115 %    \verb|\mathversion| gives an error message if it's used in math
116 %    mode. Therefore if we want to execute \verb|\mathversion{bold}|
117 %    before starting the \verb|\mathchoice| we have to temporarily
118 %    disable the \verb|\@nomath| error. (The error message is intended
119 %    to keep people from accidentally emboldening a preceding part of a
120 %    math formula, since only the mathgroups defined at the end of a
121 %    math formula will determine the fonts used in that formula; but we
122 %    are going to typeset our bold symbol not in the current formula but
123 %    in an embedded formula, so that this danger doesn't apply here.)
124 %    \begin{macrocode}
125 \DeclareRobustCommand{\boldsymbol}[1]{%
126 %    \end{macrocode}
127 %    Start a group to localize the change of \verb|\@nomath|:
128 %    \begin{macrocode}
129   \begingroup
130 %    \end{macrocode}
131 %    Disable \verb|\@nomath| so that we don't have to leave math
132 %    mode before executing \verb|\mathversion|:
133 %    \begin{macrocode}
134   \let\@nomath\@gobble \mathversion{bold}%
135 %    \end{macrocode}
136 %    \cs{math@atom} is a test macro which looks at its argument and
137 %    produces a math atom of the proper class.
138 %    \begin{macrocode}
139   \math@atom{#1}{%
140 %    \end{macrocode}
141 %    Although it is tempting to use \verb|\text| here, to save some
142 %    main memory, that caused a bug in the past due to some internal
143 %    interactions with \verb|\mathversion|.
144 %    \begin{macrocode}
145   \mathchoice%
146     {\hbox{$\m@th\displaystyle#1$}}%
147     {\hbox{$\m@th\textstyle#1$}}%
148     {\hbox{$\m@th\scriptstyle#1$}}%
149     {\hbox{$\m@th\scriptscriptstyle#1$}}}%
150 %    \end{macrocode}
151 %    End the group we started earlier.
152 %    \begin{macrocode}
153   \endgroup}
154 %    \end{macrocode}
155 % \end{macro}
157 % \begin{macro}{\math@atom}
158 %    The macro \verb+\math@atom+ looks at its argument and produce a
159 %    correct math atom, i.e.\ a primitive like \verb+\mathopen+.
160 %    Until the day we have a real implementation for all cases we use
161 %    the \verb+\binrel@+ command from \amstex/ which can distinguish
162 %    between binary, relation and ord atoms.
163 %    \begin{macrocode}
164 \def\math@atom#1#2{%
165    \binrel@{#1}\binrel@@{#2}}
166 %    \end{macrocode}
167 % \end{macro}
169 % \begin{macro}{\pmb}
170 %    Poor man's bold command, works by typesetting multiple copies of
171 %    the given argument with small offsets.
172 %    \begin{macrocode}
173 \DeclareRobustCommand{\pmb}{%
174   \ifmmode\else \expandafter\pmb@@\fi\mathpalette\pmb@}
175 %    \end{macrocode}
177 %    \cs{pmb@@} is called by \cn{pmb} in the non-math-mode case.
178 %    Discard the first two arguments which are for the math-mode case.
179 %    \begin{macrocode}
180 \def\pmb@@#1#2#3{\leavevmode\setboxz@h{#3}%
181    \dimen@-\wdz@
182    \kern-.5\ex@\copy\z@
183    \kern\dimen@\kern.25\ex@\raise.4\ex@\copy\z@
184    \kern\dimen@\kern.25\ex@\box\z@
186 %    \end{macrocode}
188 %    \begin{macrocode}
189 \newdimen\pmbraise@
190 %    \end{macrocode}
191 %    Note: because of the use of \cs{mathpalette}, if \cs{pmb@} is applied to a
192 %    single math italic character (or a single character from some other
193 %    slanted math font), the italic correction will be added. This will
194 %    cause subscripts to fall too far away from the character in some
195 %    cases, e.g., $\pmb{T}_1$ or $\pmb{\mathcal{T}}_1$.
196 %    \begin{macrocode}
197 \def\pmb@#1#2{\setbox8\hbox{$\m@th#1{#2}$}%
198   \setboxz@h{$\m@th#1\mkern.5mu$}\pmbraise@\wdz@
199   \binrel@{#2}%
200   \dimen@-\wd8 %
201   \binrel@@{%
202     \mkern-.8mu\copy8 %
203     \kern\dimen@\mkern.4mu\raise\pmbraise@\copy8 %
204     \kern\dimen@\mkern.4mu\box8 }%
206 %    \end{macrocode}
207 % \end{macro}
209 %    \begin{macrocode}
210 \def\binrel@#1{\begingroup
211   \setboxz@h{\thinmuskip0mu
212     \medmuskip\m@ne mu\thickmuskip\@ne mu
213     \setbox\tw@\hbox{$#1\m@th$}\kern-\wd\tw@
214     ${}#1{}\m@th$}%
215 %    \end{macrocode}
216 %    The \cn{noexpand} here should be unnecessary, but just in case
217 %    \ldots
218 %    \begin{macrocode}
219   \edef\@tempa{\endgroup\let\noexpand\binrel@@
220     \ifdim\wdz@<\z@ \mathbin
221     \else\ifdim\wdz@>\z@ \mathrel
222     \else \relax\fi\fi}%
223   \@tempa
225 %    \end{macrocode}
226 %    For completeness, assign a default value for \cs{binrel@@}.
227 %    \begin{macrocode}
228 \let\binrel@@\relax
229 %    \end{macrocode}
231 %    The usual \cs{endinput} to ensure that random garbage at the end of
232 %    the file doesn't get copied by \fn{docstrip}.
233 %    \begin{macrocode}
234 \endinput
235 %    \end{macrocode}
237 % \CheckSum{131}
238 % \Finale