%%% ==================================================================== %%% @LaTeX-file{ %%% filename = "amsfonts.dtx", %%% version = "2.2f", %%% date = "2001/10/25", %%% time = "11:51:34 EDT", %%% checksum = "12894 459 2125 19071", %%% author = "American Mathematical Society", %%% copyright = "Copyright 2001 American Mathematical Society, %%% all rights reserved. Copying of this file is %%% authorized only if either: %%% (1) you make absolutely no changes to your copy, %%% including name; OR %%% (2) if you do make changes, you first rename it %%% to some other name.", %%% address = "American Mathematical Society, %%% Technical Support, %%% Publications Technical Group, %%% P. O. Box 6248, %%% Providence, RI 02940, %%% USA", %%% telephone = "401-455-4080 or (in the USA and Canada) %%% 800-321-4AMS (321-4267)", %%% FAX = "401-331-3842", %%% email = "tech-support@ams.org (Internet)", %%% codetable = "ISO/ASCII", %%% keywords = "latex, amslatex, ams-latex, amsfonts, msam, %%% msbm, eufm, blackboard bold", %%% supported = "yes", %%% abstract = "This file is part of the AMSFonts distribution. %%% It provides easy access in \LaTeXe{} to certain %%% math fonts for extra math symbols, fraktur %%% letters, and blackboard bold letters. See the %%% AMSFonts user's guide for more information.", %%% 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{amsfonts} package} \author{Frank Mittelbach\\Rainer Sch\"opf\\Michael Downes} \date{Version \fileversion, \filedate} \hDocInput{amsfonts.dtx} \end{document} % % \fi % % \maketitle % % \MakeShortVerb\| % % \section{Introduction} % % The package \pkg{amsfonts} makes some of the math fonts from the % AMSFonts package usable within \latex/. For wholesale substitution % of Euler math, see Frank Jensen's \pkg{euler} package. % % \StopEventually{} % % Provide package info. % \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{amsfonts}[2001/10/25 v2.2f] % \end{macrocode} % % \section{Package options} % % \subsection{The \opt{psamsfonts} option} % % The \opt{psamsfonts} option is intended to mean that the Y\&Y/Blue Sky % Research PostScript versions of the AMSFonts should be used. In % that font set, the only \fn{.tfm} files provided below size 10 are % 5 and 7, rather than 5,6,7,8,9. This means that if the standard % \fn{.fd} files are used, any attempt to use 6,8,9 point math will % result in error messages about missing \fn{.tfm} files. In order to % ensure that the proper \fn{.fd} files are used for the PS case, we % load them immediately. Otherwise the \fn{.fd} files would be % auto-loaded when \LaTeX{} encounters the first math formula in a % document, and the standard auto-loading mechanisms don't provide a % way [that I know of---mjd, 7-Oct-1994] to choose the `57' varieties % of the \fn{.fd} files. % \begin{macrocode} \DeclareOption{psamsfonts}{% \ifnum\cmex@opt=7 \def\cmex@opt{10}% \else \def\cmex@opt{0}\fi \DeclareFontFamily{U}{msa}{}% \DeclareFontShape{U}{msa}{m}{n}{<-6>msam5<6-8>msam7<8->msam10}{}% \DeclareFontFamily{U}{msb}{}% \DeclareFontShape{U}{msb}{m}{n}{<-6>msbm5<6-8>msbm7<8->msbm10}{}% \DeclareFontFamily{U}{euf}{}% \DeclareFontShape{U}{euf}{m}{n}{<-6>eufm5<6-8>eufm7<8->eufm10}{}% \DeclareFontShape{U}{euf}{b}{n}{<-6>eufb5<6-8>eufb7<8->eufb10}{}% } % \end{macrocode} % % \subsection{Font definitions for \fn{cmex}} % The AMSFonts distribution provides some extra sizes of the % \fn{cmex} font; these will not be used by \latex/ unless we change % the font definition that refers to \fn{cmex}. However, when the % Y\&Y/Blue Sky Research PostScript versions of the AMSFonts are % used, there is only \fn{cmex10}, and no smaller sizes. Because of % complications in the order of option processing, we use a flag that % will be set to `0' by the \opt{psamsfonts} option, and initialize % it to `1'. This means that sizes 7--9 of \fn{cmex} will be used, % unless the \opt{psamsfonts} option is in effect. There's probably a % better way to do this (please submit your suggestions to % \fn{tech-support@ams.org}) but I don't see anything obvious at % the moment [mjd, 1995/01/31]. If the flag is already defined, then % we assume that it was set by an earlier load of \pkg{amsmath}, and % we don't override its value. % \begin{macrocode} \@ifundefined{cmex@opt}{\def\cmex@opt{1}}{} % \end{macrocode} % % Process the options for this package. % \begin{macrocode} \ProcessOptions\relax % \end{macrocode} % % Processing the \opt{cmex7} and \opt{cmex10} options 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=1 \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=10 % need to override cmex7 fontdef from amsmath % \end{macrocode} % Force reloading of the OMX/cmex font definition file. % \begin{macrocode} \begingroup \expandafter\let\csname OMX+cmex\endcsname\relax \fontencoding{OMX}\fontfamily{cmex}% \try@load@fontshape \endgroup % \end{macrocode} % The \fn{cmex10} font gets special preload handling in the building % of the \latex/ format file; we need an extra bit here to work around % that. % \begin{macrocode} \expandafter\let\csname OMX/cmex/m/n/10\endcsname\relax \def\cmex@opt{0}% \fi \fi % \end{macrocode} % % \section{Miscellaneous} % In case the \pkg{amsfonts} package is used apart from the % \pkg{amsmath} package, we need to define the following functions. % \begin{macrocode} \providecommand*{\@mathmeasure}[3]{% \setbox#1\hbox{\frozen@everymath\@emptytoks\m@th$#2#3$}} % \end{macrocode} % \cs{newtoks} was still outer in early releases of \LaTeXe, so % we need to take a little extra care here. % \begin{macrocode} \@ifundefined{@emptytoks}{\csname newtoks\endcsname\@emptytoks}{} % \end{macrocode} % % \section{Preparing to use the extra math fonts} % % We declare the encoding schemes for two AMS math symbol fonts. % \texttt{U} encoding with \cs{noaccents@} for math is already % provided in base NFSS. % % The AMS symbol fonts will be assigned via \cs{DeclareSymbolFont} % since most of their characters are accessed with the \cs{mathchardef} % primitive. This means that these fonts are loaded for the % particular size whenever a size or version switch is requested by % the user. At the present time bold forms of these fonts don't % exist. So there are no overriding \cs{SetSymbolFont} commands for % mathversion `bold'. % \begin{macrocode} \DeclareSymbolFont{AMSa}{U}{msa}{m}{n} \DeclareSymbolFont{AMSb}{U}{msb}{m}{n} % \end{macrocode} % % The next constructs are symbols that work the same in text or math. % They are built the hard way using |\hexnumber@\sym...|. % We can't use \cs{DeclareTextSymbol} since it only specifies the % font by its encoding, which, being \texttt{U} for both \fn{msam} % \fn{msbm}, is ambiguous. % \begin{macrocode} \@ifundefined{yen}{% \edef\yen{\noexpand\mathhexbox{\hexnumber@\symAMSa}55} }{} \@ifundefined{checkmark}{% \edef\checkmark{\noexpand\mathhexbox{\hexnumber@\symAMSa}58} }{} \@ifundefined{circledR}{% \edef\circledR{\noexpand\mathhexbox{\hexnumber@\symAMSa}72} }{} \@ifundefined{maltese}{% \edef\maltese{\noexpand\mathhexbox{\hexnumber@\symAMSa}7A} }{} % \end{macrocode} % % We now define a few symbols which reside in the \fn{msam} and \fn{msbm} % fonts. The \cs{catcode} change is to ensure that the double-quote % character is not active (which at one time was a problem when something % like \fn{german.sty} was used). % \begin{macrocode} \begingroup \catcode`\"=12 \DeclareMathDelimiter{\ulcorner}{\mathopen} {AMSa}{"70}{AMSa}{"70} \DeclareMathDelimiter{\urcorner}{\mathclose}{AMSa}{"71}{AMSa}{"71} \DeclareMathDelimiter{\llcorner}{\mathopen} {AMSa}{"78}{AMSa}{"78} \DeclareMathDelimiter{\lrcorner}{\mathclose}{AMSa}{"79}{AMSa}{"79} % \end{macrocode} % % The next two definitions redefine the \cn{widehat} and % \cn{widetilde} command to use a special accent if their % argument is suitably wide. (In plain \TeX{} these commands can % produce three different accents depending on the size of the % argument.) The current implementation will tend to give wrong results % (tilde or hat symbol too wide) if these accents are used in script % or scriptscript math style. But making that part work properly is % too much effort given the limitations of \TeX{} 3.x. % \begin{macrocode} \xdef\widehat#1{\noexpand\@mathmeasure\z@\textstyle{#1}% \noexpand\ifdim\noexpand\wd\z@>\tw@ em% \mathaccent"0\hexnumber@\symAMSb 5B{#1}% \noexpand\else\mathaccent"0362{#1}\noexpand\fi} % \xdef\widetilde#1{\noexpand\@mathmeasure\z@\textstyle{#1}% \noexpand\ifdim\noexpand\wd\z@>\tw@ em% \mathaccent"0\hexnumber@\symAMSb 5D{#1}% \noexpand\else\mathaccent"0365{#1}\noexpand\fi} % \end{macrocode} % Now we define two special arrows which are built with special % characters from the first symbol font. % \begin{macrocode} \DeclareMathSymbol{\dabar@}{\mathord}{AMSa}{"39} \xdef\dashrightarrow{\mathrel{\dabar@\dabar@ \mathchar"0\hexnumber@\symAMSa 4B}}% \xdef\dashleftarrow{\mathrel{\mathchar"0\hexnumber@\symAMSa 4C\dabar@ \dabar@}}% % \global\let\dasharrow\dashrightarrow % \end{macrocode} % To avoid using too many control sequence names by defining all % new symbols provided with the two fonts, we defined so far only % symbols which are not assigned via \cs{mathchardef}. The majority % however will be defined only if the user loads the \fn{amssymb} % package or explicitly defines symbols using the % \cs{DeclareMathSymbol} macro. % % Finally we test the \cs{DeclareMathSymbol} command by redefining the % \PlainTeX{} symbols which were made up from different characters % (and thus could not change sizes properly) but are now available % as real characters. Note that we have to make them undefined % first, otherwise \cs{DeclareMathSymbol} will complain that they are % already defined. % \begin{macrocode} \global\let\rightleftharpoons\undefined \DeclareMathSymbol{\rightleftharpoons}{\mathrel}{AMSa}{"0A} \global\let\angle\undefined \DeclareMathSymbol{\angle} {\mathord}{AMSa}{"5C} \global\let\hbar\undefined \DeclareMathSymbol{\hbar} {\mathord}{AMSb}{"7E} % \end{macrocode} % % Include a few common symbols which are both in \fn{msam} or \fn{msbm} % and also in \fn{lasy}, which might have been loaded already, so it % is a good idea to make them undefined. % \begin{macrocode} \global\let\sqsubset\undefined \DeclareMathSymbol{\sqsubset} {\mathrel}{AMSa}{"40} \global\let\sqsupset\undefined \DeclareMathSymbol{\sqsupset} {\mathrel}{AMSa}{"41} \global\let\mho\undefined \DeclareMathSymbol{\mho} {\mathord}{AMSb}{"66} % \end{macrocode} % % Now we close the group so that |"| will get its old \cs{catcode} % back. % \begin{macrocode} \endgroup % \end{macrocode} % % \section{Defining \protect\meta{math alphabet identifiers}} % % \begin{macro}{\mathfrak} % The Fraktur alphabet will be accessed by the command % \cn{mathfrak} inside of math mode. % \begin{macrocode} \DeclareMathAlphabet{\mathfrak}{U}{euf}{m}{n} \SetMathAlphabet{\mathfrak}{bold}{U}{euf}{b}{n} % \end{macrocode} % \end{macro} % % \begin{macro}{\mathbb} % The AMS symbol font B contains the blackboard bold math alphabet. % There is only a single weight of this alphabet so it is used in % all math versions. % \begin{macrocode} \DeclareSymbolFontAlphabet{\mathbb}{AMSb} % \end{macrocode} % \end{macro} % % \subsection{Setting up the fonts for correct accents in math} % % There are a few \meta{math alphabets} which don't have any or % enough accents for math in the corresponding fonts. For example the % \cn{mathbb} \meta{math alphabet identifier} comes from a symbol font % with none of the normal accents in the correct places. \AmSTeX{} % has a sophisticated solution for this problem: all math % accents are defined in a way that the font where the accents are % taken from depends on the current value of a macro called % \cs{accentclass@}. To support this idea \meta{math alphabet % identfiers} which come with their own accents should set this macro % to the number \texttt{7} (variable family in the terminology of the % \TeX{}book); all others should set it to \texttt{0} so that the accents % are taken from the \meta{math group} zero in the current \emph{math % version}. % % There is a \cs{DeclareFontEncodingDefaults} macro which declares such % defaults. For the \pkg{amsfonts} package we set this default in the % following way. This information will be ignored unless the \pkg{amsmath} % package is also loaded. % \begin{macrocode} \DeclareFontEncodingDefaults{\relax}{\def\accentclass@{7}} % \end{macrocode} % % \section{Some backward compatibility definitions} % % The following commands are provided for compatibility with pre-1995 % versions of the \pkg{amsfonts} package. If a \cn{documentclass} % command is used the \cs{@obsolete} function will issue a warning % saying that the command is obsolete. % % Upgraded to robust commands. [bnb, 1996/09/29] % \begin{macro}{\frak} % \begin{macro}{\Bbb} % \begin{macro}{\bold} % \begin{macrocode} \DeclareRobustCommand{\frak}[1]{% {\@subst@obsolete{amsfonts}\frak\mathfrak{#1}}} \DeclareRobustCommand{\Bbb}[1]{% {\@subst@obsolete{amsfonts}\Bbb\mathbb{#1}}} \DeclareRobustCommand{\bold}[1]{% {\@subst@obsolete{amsfonts}\bold\mathbf{#1}}} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % The \cs{newsymbol} command has different syntax than % \cs{DeclareMathSymbol} so it cannot use the direct substitution % function \cs{@subst@obsolete}. % \begin{macrocode} \begingroup \catcode`\"=12 \relax \gdef\newsymbol#1#2#3#4#5{% \@obsolete{amsfonts}\newsymbol\DeclareMathSymbol \@ifdefinable#1{% \edef\next@ {\ifcase #2 \or \hexnumber@\symAMSa\or \hexnumber@\symAMSb\fi}% \ifx\next@\@empty \PackageError{amsfonts}{\Invalid@@\newsymbol}\@ehd% \else \global\mathchardef#1"#3\next@#4#5 \fi}} \endgroup % \end{macrocode} % % \begin{macro}{\@obsolete} % This command gives a warning on the first use that the command given % as second argument is deprecated/obsolete, with the third argument % recommended as a substitute. In compatibility mode we just continue % silently. % \begin{macrocode} \long\def\@gobblethree#1#2#3{} \if@compatibility \let\@obsolete\@gobblethree \else \def\@obsolete#1#2#3{\PackageWarning{#1}{% Obsolete command \protect#2; \protect#3 should be used instead}}% \fi % \end{macrocode} % \end{macro} % % \begin{macro}{\@subst@obsolete} % For obsolete commands that have a substitute command. % \begin{macrocode} \def\@subst@obsolete#1#2#3{\@obsolete{#1}#2#3\gdef#2{#3}#2} % \end{macrocode} % \end{macro} % % First we load the symbols under the official AMS names and then % define the \latex/ names via \cs{let} unless they are already % defined (which probably means that the \fn{lasy} fonts are defined). % \begin{macrocode} \begingroup \catcode`\"=12 \DeclareMathSymbol{\square} {\mathord}{AMSa}{"03} \DeclareMathSymbol{\lozenge} {\mathord}{AMSa}{"06} \DeclareMathSymbol{\vartriangleright} {\mathrel}{AMSa}{"42} \DeclareMathSymbol{\vartriangleleft} {\mathrel}{AMSa}{"43} \DeclareMathSymbol{\trianglerighteq} {\mathrel}{AMSa}{"44} \DeclareMathSymbol{\trianglelefteq} {\mathrel}{AMSa}{"45} \DeclareMathSymbol{\rightsquigarrow} {\mathrel}{AMSa}{"20} % \end{macrocode} % Check if the \pkg{latexsym} package has already been loaded % \begin{macrocode} \@ifpackageloaded{latexsym}{\@tempswafalse}{\@tempswatrue} \if@tempswa \global\let\Box\square \global\let\Diamond\lozenge \global\let\leadsto\rightsquigarrow % \end{macrocode} % \cn{lhd} and its relatives look like \cn{vartriangleleft} and its % relatives, but the math atom types are different (according to the % \latex/ book). So we need to issue different \cs{DeclareMathSymbol} % statements. % \begin{macrocode} \global\let\lhd\@@undefined \global\let\unlhd\@@undefined \global\let\rhd\@@undefined \global\let\unrhd\@@undefined \DeclareMathSymbol{\lhd} {\mathbin}{AMSa}{"43} \DeclareMathSymbol{\unlhd} {\mathbin}{AMSa}{"45} \DeclareMathSymbol{\rhd} {\mathbin}{AMSa}{"42} \DeclareMathSymbol{\unrhd} {\mathbin}{AMSa}{"44} % \end{macrocode} % No equivalent of the \cn{\Join} symbol in \fn{lasy} is available in % \fn{msam} or \fn{msbm} so we make do with a composite of two characters. % \begin{macrocode} \xdef\Join{\mathrel{\mathchar"0\hexnumber@\symAMSb 6F\mkern-13.8mu% \mathchar"0\hexnumber@\symAMSb 6E}} \fi \endgroup % \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 % \end{macrocode} % % \changes{v1.2beta}{1994/10/25}{Made every@math@size code explicitly global} % \changes{v1.2}{1994/12/08}{Exported non-font stuff elsewhere} % \changes{v2.2}{1995/01/05}{Moved square, Box, etc to compat-only section} % \changes{v2.2a}{1995/01/30}{Added missing def for @mathmeasure} % \changes{v2.2b}{1995/02/01}{Dealt with cmex font complications} % % \CheckSum{373} % \Finale