1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251
|
%%% ====================================================================
%%% @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
|