The euler package

Frank Jensen^{∗}

1995/03/05

1 Introduction

The euler package provides a setup for using the AMS Euler family of fonts for math in L^{A}TEX documents. The AMS Euler family was designed by Hermann Zapf, commissioned by the American Mathematical Society. “The underlying philosophy of Zapf’s Euler design was to capture the flavor of mathematics as it might be written by a mathematician with excellent handwriting.” [2]

The euler package is based on Knuth’s macros for the book “Concrete Mathematics” [1]. Knuth’s macros can be found through anonymous ftp to labrea.

stanford.edu: look for the file gkpmac.tex in directory pub/tex/local/lib.

The Euler fonts can be found through anonymous ftp to e-math.ams.org: look

in directory pub/tex/amsfonts.

The purpose of the euler package is to provide the math part of the look of [1]. The other part (text fonts) is provided by the beton package. The reason for creating two packages is to make it easy to use the Euler math fonts together with other text fonts (in particular, it appears that the Euler fonts match many of the popular PostScript fonts pretty well).

Basically, the euler package provides the same setup (the same definitions, math codes, etc.) as gkpmac.tex with respect to the Euler fonts. However, Knuth [2] admits that the macros were written for one specific project, namely to typeset the “Concrete Mathematics” book [1]. So, the euler package actually does a little more than gkpmac.tex: for example, some ‘exotic’ symbols, present in CM math italic, are missing from the Euler fonts; the euler package takes care of this (whereas gkpmac.tex does not).

The use of the euler package requires a lot of care when entering the manuscript, since the package will cause, e.g., math numerals to come from the Euler Roman fonts; these numerals are easily distinguished from the normal text numerals. This implies that sloppy typing is clearly exposed: imagine how “$x$ is either 1 or $-1$” will appear when typeset! In general, the typist will in each case have to decide whether an input fragment is a math or a nonmath entity. This holds true even for the tiniest details, such as punctuation characters (parentheses, colons, semicolons, commas, and periods).

∗Updates by Frank Mittelbach.

Finally, a few words about the technical quality of the fonts (there are no doubts about their artistic quality): The fonts are not tuned for low resolution rendering: I recommend at least 600dpi. The fonts employ none of the tuning machinery of CM: e.g., they do not use the ‘blacker’ parameter specified in each Metafont mode definition, indicating that they might look somewhat light on printers that normally require a large ‘blacker’ value.

2 What the euler package provides

The euler package defines two new math alphabet identifiers, \mathscr (Euler Script, uppercase letters only) and \mathfrak (Euler Fraktur, both lowercase and uppercase letters).

By default, the original meaning of \mathcal is preserved, but if the euler package is loaded with the mathcal option, \mathcal will produce Euler Script letters instead of the usual Computer Modern calligraphic letters.

Also, by default, the euler package does not redefine the \mathbf math alphabet identifier; it will still produce bold CM letters and digits. However, loading the euler package with the mathbf option will cause \mathbf to produce bold Euler Roman letters and digits. Another way to get bold symbols is to use the \boldsymbol command provided by the amsbsy package (part of AMS-L^{A}TEX).

Some users do not like the \hat accent glyph present in the Euler fonts (the euler package uses this accent glyph be default). To use the \hat accent glyph from the text font instead, load the euler package with the text-hat-accent option.

In [1], the space around relations in displays was increased (from ‘5mu plus 5mu’ to ‘10mu minus 3mu’). The euler package does not change this space, since this is (for most cases) controlled by the L^{A}TEX eqnarray environment. Also, in [1], displays are left justified with a suitable indentation; we leave such matters to the general layout.

3 Hello world

First, we announce the package. 1 ⟨∗package⟩

 2 \NeedsTeXFormat{LaTeX2e}[1994/12/01]
 3 \ProvidesPackage{euler}[\filedate\space\fileversion]
 4 \typeout{Package: `euler' \fileversion\space <\filedate> (FJ and FMi)}

4 Font and other definitions

The AMS Euler family consists of: Euler Roman (medium and bold), Euler Fraktur (medium and bold), Euler Script (medium and bold), and Euler Extension (medium only). The .fd files for these fonts are defined in the amsfonts.fdd file (part of the AMSFonts distribution).

4.1 Euler Roman

The Euler Roman fonts replace the Computer Modern Math Italic fonts, located in the ‘letters’ math symbol font:

 5 \DeclareSymbolFont{letters}{U}{eur}{m}{n}
 6 \SetSymbolFont{letters}{bold}{U}{eur}{b}{n}

In math mode, digits should come from the Euler Roman fonts. As in standard L^{A}TEX, we assign the type \mathalpha to the digits which means that they will vary with math alphabets. One of the reasons for this is that footnote numbers are set in math mode, and we want these numbers to come from the text font; this is accomplished by setting the TEX primitive \fam to zero. (See Section 7 below.)

 7 \DeclareMathSymbol{0}\mathalpha{letters}{"30}
 8 \DeclareMathSymbol{1}\mathalpha{letters}{"31}
 9 \DeclareMathSymbol{2}\mathalpha{letters}{"32}
10 \DeclareMathSymbol{3}\mathalpha{letters}{"33}
11 \DeclareMathSymbol{4}\mathalpha{letters}{"34}
12 \DeclareMathSymbol{5}\mathalpha{letters}{"35}
13 \DeclareMathSymbol{6}\mathalpha{letters}{"36}
14 \DeclareMathSymbol{7}\mathalpha{letters}{"37}
15 \DeclareMathSymbol{8}\mathalpha{letters}{"38}
16 \DeclareMathSymbol{9}\mathalpha{letters}{"39}

The uppercase greek letters are also taken from the Euler Roman fonts. We make them ordinary symbols (i.e., of type \mathord) as opposed to plain.tex, gkpmac.tex, and standard L^{A}TEX, which make them vary according to \fam.

17 \DeclareMathSymbol\Gamma  \mathord{letters}{"00}
18 \DeclareMathSymbol\Delta  \mathord{letters}{"01}
19 \DeclareMathSymbol\Theta  \mathord{letters}{"02}
20 \DeclareMathSymbol\Lambda \mathord{letters}{"03}
21 \DeclareMathSymbol\Xi     \mathord{letters}{"04}
22 \DeclareMathSymbol\Pi     \mathord{letters}{"05}
23 \DeclareMathSymbol\Sigma  \mathord{letters}{"06}
24 \DeclareMathSymbol\Upsilon\mathord{letters}{"07}
25 \DeclareMathSymbol\Phi    \mathord{letters}{"08}
26 \DeclareMathSymbol\Psi    \mathord{letters}{"09}
27 \DeclareMathSymbol\Omega  \mathord{letters}{"0A}

Euler doesn’t have the special variants of \sigma and \rho:

28 \let\varsigma=\sigma
29 \let\varrho=\rho

\mathbf If the euler package is loaded with the mathbf option, \mathbf should produce bold Euler Roman letters and digits.

30 \DeclareOption{mathbf}
31 {\AtBeginDocument{\DeclareMathAlphabet\mathbf{U}{eur}{b}{n}}}

Note the use of \AtBeginDocument; it ensures that the redefinition overrides the default settings (Section 6).

4.2 Euler Fraktur

\mathfrak The Euler Fraktur fonts get their own math symbol font. We define a math alphabet identifier—\mathfrak—to access this symbol font. For compatibility with previous versions of the euler package, we define \frak as an alias for \mathfrak (the amsfonts package also provides this alias).

32 \DeclareSymbolFont{EulerFraktur}{U}{euf}{m}{n}
33 \SetSymbolFont{EulerFraktur}{bold}{U}{euf}{b}{n}
34 \DeclareSymbolFontAlphabet\mathfrak{EulerFraktur}
35 \@ifpackageloaded{amsfonts}{}{\newcommand\frak{\mathfrak}}

The following characters come from the Euler Fraktur symbol font (as defined

in gkpmac.tex):
36 \DeclareMathSymbol{!}\mathord  {EulerFraktur}{"21}
37 \DeclareMathSymbol{(}\mathopen {EulerFraktur}{"28}
38 \DeclareMathSymbol{)}\mathclose{EulerFraktur}{"29}
39 \DeclareMathSymbol{+}\mathbin  {EulerFraktur}{"2B}
40 \DeclareMathSymbol{-}\mathbin  {EulerFraktur}{"2D}
41 \DeclareMathSymbol{=}\mathrel  {EulerFraktur}{"3D}
42 \DeclareMathSymbol{[}\mathopen {EulerFraktur}{"5B}
43 \DeclareMathSymbol{]}\mathclose{EulerFraktur}{"5D}

There is a curious detail here: The type of ‘!’ is \mathclose in plain.tex (and standard L^{A}TEX) but \mathord in gkpmac.tex. The reason for this is probably that one should not use Euler punctuation characters as part of the text,^{1} and punctuation characters in math are usually operators. E.g., in CSP (Communicating Sequential Processes), ‘!’ denotes an output operation, a tightly binding binary operator; there is usually no space around this operator (to indicate the high precedence).

The Euler Fraktur symbol font contains more punctuation characters than defined above. We want to use these characters as they look better when they appear in math formulas (there are some strange looking formulas in [1]). Even if one may argue that, e.g., semicolon is most often used in the text sense (in displays), it is more consistent and easier to remember if everything in math mode is Euler.

44 \DeclareMathSymbol{"}\mathord  {EulerFraktur}{"7D}
45 \DeclareMathSymbol{&}\mathord  {EulerFraktur}{"26}
46 \DeclareMathSymbol{:}\mathrel  {EulerFraktur}{"3A}
47 \DeclareMathSymbol{;}\mathpunct{EulerFraktur}{"3B}
48 \DeclareMathSymbol{?}\mathord  {EulerFraktur}{"3F}
49 \DeclareMathSymbol{^}\mathord  {EulerFraktur}{"5E}
50 \DeclareMathSymbol{`}\mathord  {EulerFraktur}{"12}

Here, we also changed the type of ‘?’ to \mathord to be consistent with the type of ‘!’. Regarding the math codes assigned by INITEX: The Euler fonts do not have the glyphs for \#, \$, \%, and @, so these glyphs are still taken from the text fonts.

1In particular, one should watch out for punctuation characters in displays: Is, e.g., an exclamation point part of a formula or part of the text? (With Computer Modern, it didn’t really matter, but it does matter with Euler!)

Note also that we do not set the math code for the other quote character: it is active in math mode (code "8000); it produces primes (and should continue to do so).

51 \DeclareMathDelimiter{(}{EulerFraktur}{"28}{largesymbols}{"00}
52 \DeclareMathDelimiter{)}{EulerFraktur}{"29}{largesymbols}{"01}
53 \DeclareMathDelimiter{[}{EulerFraktur}{"5B}{largesymbols}{"02}
54 \DeclareMathDelimiter{]}{EulerFraktur}{"5D}{largesymbols}{"03}
\oldstylenums \TextOldstyle \MathOldstyle We provide a new definition of the \oldstylenums macro: this definition allows

us to modify the generation of non-aligning (aka “oldstyle”) numerals in text and in math separately, using two hooks, \TextOldstyle and \MathOldstyle.

55 \DeclareRobustCommand\oldstylenums[1]%
56 {\begingroup
57  \spaceskip\fontdimen\tw@\font
58  \TextOldstyle \MathOldstyle #1%
59 \endgroup}

In math, the \oldstylenums macro should produce Euler oldstyle digits (located in the Euler Fraktur fonts):

60 \def\MathOldstyle{\mathgroup\symEulerFraktur}

By default, oldstyle digits in text come from the Computer Modern fonts:

61 \providecommand\TextOldstyle{\usefont{OML}{cmm}\f@series{it}}

4.3 Euler Script

\mathscr Like the Euler Fraktur fonts, the Euler Script fonts also get their own symbol font. We define a math alphabet identifier—\mathscr—to access this symbol font. For compatibility with previous versions of the euler package, we define \scr as an alias for \mathscr.

62 \DeclareSymbolFont{EulerScript}{U}{eus}{m}{n}
63 \SetSymbolFont{EulerScript}{bold}{U}{eus}{b}{n}
64 \DeclareSymbolFontAlphabet\mathscr{EulerScript}
65 \newcommand\scr{\mathscr}

\mathcal If the euler package is loaded with the mathcal option, \mathcal should produce Euler Script letters.

66 \DeclareOption{mathcal}{\renewcommand\mathcal{\mathscr}}

The following is equivalent to the definitions in gkpmac.tex concerning the Euler Script fonts:

67 \DeclareMathSymbol\aleph\mathord{EulerScript}{"40}
68 %\DeclareMathSymbol\equiv\mathrel{EulerScript}{"11}
69 %\let\cong=\equiv % lowres bars weren't spaced right
70 %\DeclareMathSymbol\leq \mathrel{EulerScript}{"14}
71 %\let\le=\leq % seems to have been eliminated
72 %\DeclareMathSymbol\geq \mathrel{EulerScript}{"15}
73 %\let\ge=\geq % ditto

74 \DeclareMathSymbol\Re   \mathord{EulerScript}{"3C}
75 \DeclareMathSymbol\Im   \mathord{EulerScript}{"3D}

Knuth used a slightly different version of the Euler Script fonts that had special ‘≤’ and ‘≥’ glyphs. Actually, the source for the AMS Euler Script medium (but not the bold) font also contains these glyphs; however, they are commented out (no explanation is given). The definitions of \equiv and \cong are also commented out in gkpmac.tex (with the reason as given above, i.e., problems with low resolution rendering).

76 \DeclareMathDelimiter\vert
77  \mathord{EulerScript}{"6A}{largesymbols}{"0C}
78 \DeclareMathDelimiter\backslash
79  \mathord{EulerScript}{"6E}{largesymbols}{"0F}

The Euler Script fonts constitute a partial replacement for the Computer Modern ‘symbols’ math symbol fonts. (None of the remaining definitions in this section were included in gkpmac.tex.)

80 %\DeclareMathSymbol{-}\mathbin{EulerScript}{"00} % already done
81 \DeclareMathSymbol{|}\mathord{EulerScript}{"6A}
82 \DeclareMathDelimiter{|}{EulerScript}{"6A}{largesymbols}{"0C}

(The minus signs in the Euler Fraktur and Script fonts are identical, i.e., the sources are identical.)

83 \DeclareMathSymbol\neg     \mathord{EulerScript}{"3A}
84 \let\lnot=\neg
85 \DeclareMathSymbol\wedge   \mathbin{EulerScript}{"5E}
86 \let\land=\wedge
87 \DeclareMathSymbol\vee     \mathbin{EulerScript}{"5F}
88 \let\lor=\vee
89 \DeclareMathSymbol\setminus\mathbin{EulerScript}{"6E}
90 \DeclareMathSymbol\sim     \mathrel{EulerScript}{"18}
91 \DeclareMathSymbol\mid     \mathrel{EulerScript}{"6A}
92 \DeclareMathDelimiter\arrowvert
93  \mathord{EulerScript}{"6A}{largesymbols}{"3C} % ???

(There are no \approx or \simeq to go with \sim.) In Plain TEX, the characters {, \, and } are assigned math codes (and \ is also given a delimiter code); these are the only visible ASCII (7-bit) characters that we don’t give a math code (we don’t assign math codes to any of the invisible ASCII characters).

The Euler Script fonts also contain a section sign (§):

94 \DeclareMathSymbol\mathsection\mathord{EulerScript}{"78}

4.4 Euler Extension

We allocate a new symbol font group for this font:

95 \DeclareSymbolFont{EulerExtension}{U}{euex}{m}{n}

This font contains some alternative versions of some Computer Modern symbols. The amsmath package (part of AMS-L^{A}TEX) redefines the \coprod, \prod, and \sum symbols; to make the euler package work correctly with the amsmath package, we need to take different actions depending on whether the amsmath package has been loaded before the euler package or not. Note: This will not work with the amstex package.

 96 \@ifpackageloaded{amsmath}
 97 {\DeclareMathSymbol\coprod@\mathop{EulerExtension}{"60}%
 98  \DeclareMathSymbol\prod@  \mathop{EulerExtension}{"51}%
 99  \DeclareMathSymbol\sum@   \mathop{EulerExtension}{"50}}
100 {\DeclareMathSymbol\coprod \mathop{EulerExtension}{"60}%
101  \DeclareMathSymbol\prod   \mathop{EulerExtension}{"51}%
102  \DeclareMathSymbol\sum    \mathop{EulerExtension}{"50}}

We shall respectfully ask the user not to use the amstex package.

103 \AtBeginDocument
104 {\@ifpackageloaded{amstex}%
105  {\PackageWarningNoLine{euler}{Please do not use `amstex'.
106  Use `amsmath' instead}{}}}
107 \DeclareMathSymbol\intop  \mathop {EulerExtension}{"52}
108 \DeclareMathSymbol\ointop \mathop {EulerExtension}{"48}
109 \DeclareMathSymbol\braceld\mathord{EulerExtension}{"7A}
110 \DeclareMathSymbol\bracerd\mathord{EulerExtension}{"7B}
111 \DeclareMathSymbol\bracelu\mathord{EulerExtension}{"7C}
112 \DeclareMathSymbol\braceru\mathord{EulerExtension}{"7D}
113 \DeclareMathSymbol\infty  \mathord{EulerExtension}{"31}

It is not enough to substitute the Euler integral sign for the Computer Modern integral sign, if we are using the amsmath package. The multiple integral signs will look bad. The following will make them look better.

114 \AtBeginDocument
115 {\@ifpackageloaded{amsmath}%
116  {\def\intkern@{\mkern -6mu }%
117  \def\ints@#1{\mkern -3mu
118  \mathop{\mkern 3mu
119  \intop
120  \ifnum #1=\z@ \intdots@ \else
121  \intkern@
122  \ifnum #1>\tw@ \intop\intkern@
123  \ifnum #1>\thr@@ \intop\intkern@ \fi
124  \fi
125  \fi
126  \intop
127  }\ilimits@

128 }%

129  }{}}

All Euler arrows come from the Euler Extension font:

130 \DeclareMathSymbol\nearrow\mathrel{EulerExtension}{"25}
131 \DeclareMathSymbol\searrow\mathrel{EulerExtension}{"26}
132 \DeclareMathSymbol\nwarrow\mathrel{EulerExtension}{"2D}
133 \DeclareMathSymbol\swarrow\mathrel{EulerExtension}{"2E}

134 \DeclareMathSymbol\Leftrightarrow\mathrel{EulerExtension}{"2C}
135 \DeclareMathSymbol\Leftarrow     \mathrel{EulerExtension}{"28}
136 \DeclareMathSymbol\Rightarrow    \mathrel{EulerExtension}{"29}
137 \DeclareMathSymbol\leftrightarrow\mathrel{EulerExtension}{"24}
138 \DeclareMathSymbol\leftarrow     \mathrel{EulerExtension}{"20}
139 \let\gets=\leftarrow
140 \DeclareMathSymbol\rightarrow    \mathrel{EulerExtension}{"21}
141 \let\to=\rightarrow
142 \DeclareMathDelimiter\uparrow
143  \mathrel{EulerExtension}{"22}{largesymbols}{"78}
144 \DeclareMathDelimiter\downarrow
145  \mathrel{EulerExtension}{"23}{largesymbols}{"79}
146 \DeclareMathDelimiter\updownarrow
147  \mathrel{EulerExtension}{"6C}{largesymbols}{"3F}
148 \DeclareMathDelimiter\Uparrow
149  \mathrel{EulerExtension}{"2A}{largesymbols}{"7E}
150 \DeclareMathDelimiter\Downarrow
151  \mathrel{EulerExtension}{"2B}{largesymbols}{"7F}
152 \DeclareMathDelimiter\Updownarrow
153  \mathrel{EulerExtension}{"6D}{largesymbols}{"77}
154 \DeclareMathSymbol\leftharpoonup   \mathrel{EulerExtension}{"18}
155 \DeclareMathSymbol\leftharpoondown \mathrel{EulerExtension}{"19}
156 \DeclareMathSymbol\rightharpoonup  \mathrel{EulerExtension}{"1A}
157 \DeclareMathSymbol\rightharpoondown\mathrel{EulerExtension}{"1B}

Note the funny mixture of the Euler Script and Extension fonts:

158 \DeclareMathDelimiter\lbrace
159  \mathopen{EulerScript}{"66}{EulerExtension}{"08}
160 \DeclareMathDelimiter\rbrace
161  \mathclose{EulerScript}{"67}{EulerExtension}{"09}

5 More math

Actually, we still need some Computer Modern fonts: We need the equals sign for long/extensible (horizontal) double arrows, and we need the minus sign for the single arrows! The Euler Extension font is based on the Metafont code for Computer Modern, and we need the Computer Modern equals and minus signs to make long/extensible arrows.

We allocate math alphabets to produce the equals and minus signs for arrows. Note that since Euler arrows are only available in medium weight (they come from the Euler Extension font which is only available in medium weight), we let all math versions of these math alphabets refer to medium weight fonts.

162 \DeclareMathAlphabet\cm@equals@alphabet{OT1}{cmr}{m}{n}
163 \DeclareMathAlphabet\cm@minus@alphabet{OMS}{cmsy}{m}{n}

Note that we use OT1 encoding for the \cm@equals@alphabet, even though T1 encoding may be the default for the users system.

Also, note that we already have the Computer Modern cmsy family assigned to a symbol font (namely the ‘symbols’ symbol font). However, taking the minus sign directly from this symbol font would make long/extensible arrows come out wrong in the ‘bold’ math version. (It is perhaps “overkill” to allocate a math alphabet just for this purpose?)

\Relbar \relbar The long arrows are made using the macros \Relbar (for double arrows) and \relbar (for single arrows). The standard L^{A}TEX definitions of these macros use the ‘=’ and ‘-’ characters to produce the extension part of the long arrows. Since we have changed the math codes of these characters (they are now taken from the Euler Fraktur fonts in math mode), we have to redefine the \Relbar and \relbar macros.

164 \def\Relbar{\mathrel{\cm@equals@alphabet{\mathchar"703D}}}
165 \def\cm@minus{{\cm@minus@alphabet{\mathchar"7000}}}
166 \def\relbar{\mathrel{\smash\cm@minus}}
167  % \smash, because - has the same height as +

\leftarrowfill \rightarrowfill Unfortunately, since the definitions of the “arrow-filling” macros (\leftarrowfill and \rightarrowfill) in standard L^{A}TEX still use explicit minus signs (instead of \relbar), we also have to redefine those macros:

168 \def\leftarrowfill
169 {$\m@th\mathord\leftarrow\mkern-6mu%
170  \cleaders\hbox{$\mkern-2mu\cm@minus\mkern-2mu$}\hfill
171  \mkern-6mu\cm@minus$}
172 \def\rightarrowfill
173 {$\m@th\cm@minus\mkern-6mu%
174  \cleaders\hbox{$\mkern-2mu\cm@minus\mkern-2mu$}\hfill
175  \mkern-6mu\mathord\rightarrow$}

We have defined \cm@minus to produce a Computer Modern minus sign of type \mathord. We thereby save a few \mathord tokens (compared to the definitions

 of \leftarrowfill and \rightarrowfill in standard L^{A}TEX).

There are a few symbols in the original Computer Modern Math Italic fonts that are not present in the Euler fonts. We simply take them from the CM fonts.

176 \DeclareSymbolFont{cmmigroup}{OML}{cmm}{m}{it}
177 \SetSymbolFont{cmmigroup}{bold}{OML}{cmm}{b}{it}
178 \DeclareMathAccent\vec          \mathord{cmmigroup}{"7E}
179 \DeclareMathSymbol\triangleleft \mathbin{cmmigroup}{"2F}
180 \DeclareMathSymbol\triangleright\mathbin{cmmigroup}{"2E}
181 \DeclareMathSymbol\star         \mathbin{cmmigroup}{"3F}
182 \DeclareMathSymbol\lhook        \mathrel{cmmigroup}{"2C}
183 \DeclareMathSymbol\rhook        \mathrel{cmmigroup}{"2D}
184 \DeclareMathSymbol\flat         \mathord{cmmigroup}{"5B}
185 \DeclareMathSymbol\natural      \mathord{cmmigroup}{"5C}
186 \DeclareMathSymbol\sharp        \mathord{cmmigroup}{"5D}
187 \DeclareMathSymbol\smile        \mathrel{cmmigroup}{"5E}
188 \DeclareMathSymbol\frown        \mathrel{cmmigroup}{"5F}

Note that the arrow head of \vec is slanted; this looks a bit strange in combination with an upright font such as Euler Roman.

Also, note that in the ‘bold’ math version, arrows with hooks will come out wrong (the hooks will be bold, but the arrow heads will be of medium weight). This can be repaired in a similar way as the long/extensible arrows, but is it worth it to allocate a math alphabet just for this purpose?

Finally, Knuth wanted a little extra space before the prime superscript:

189 \begingroup
190 \catcode`\'=\active
191 \gdef'{^\bgroup\mskip2mu\prim@s} % more space before '
192 \endgroup

Open question: The \dots and \ldots macros produce dots (periods) from the Euler fonts; the \ddots and \vdots macros produce dots from the text font; and the \cdots macro produces dots from the Computer Modern ‘symbols’ math symbol font. Should we do something about this?

6 Text fonts in math

The text fonts used in math through math alphabets and the ‘operators’ symbol font should be the same as the fonts used for the main text. (It is now easy to replace the fonts for the ‘operators’ symbol font, since the uppercase greek letters are now taken from the Euler Roman fonts.)

In order to reduce the total number of fonts needed, we shall—if possible—use text fonts in the same encoding for both text and math. We therefore determine whether T1 encoding has been selected as the default encoding. We define a switch—\ifCorkEncoding—for that purpose.

193 \newif\ifCorkEncoding
194 \edef\@tempa{\encodingdefault}\def\@tempb{T1}
195 \ifx\@tempa\@tempb
196 \CorkEncodingtrue
197 \else
198 \CorkEncodingfalse
199 \fi

Note that we determine the encoding to use at the time the euler package is loaded (not at the end of the preamble). This allows the user to retain OT1 encoding for text fonts used in math (other packages may depend on that) by selecting T1 encoding after the euler package has been loaded.

We redefine the ‘operators’ symbol font and all math alphabets defined by the L^{A}TEX kernel. Due to the current implementation of math accents that take their glyphs from text fonts, all text fonts must be used in a common encoding. The only L^{A}TEX ‘base’ package that defines extra math alphabets is the oldlfont package. However, this package cannot be used together with the euler package (it allocates too many symbol fonts). In other words, the following setup should suffice for most users.

200 \ifCorkEncoding

201 \AtBeginDocument
202  {\DeclareSymbolFont{operators}{T1}\rmdefault\mddefault\updefault
203  \SetSymbolFont{operators}{bold}{T1}\rmdefault\bfdefault\updefault
204  \DeclareMathAlphabet\mathbf{T1}\rmdefault\bfdefault\updefault
205  \DeclareMathAlphabet\mathsf{T1}\sfdefault\mddefault\updefault
206  \DeclareMathAlphabet\mathit{T1}\rmdefault\mddefault\itdefault
207  \DeclareMathAlphabet\mathtt{T1}\ttdefault\mddefault\updefault
208  \SetMathAlphabet\mathsf{bold}{T1}\sfdefault\bfdefault\updefault
209  \SetMathAlphabet\mathit{bold}{T1}\rmdefault\bfdefault\itdefault}
210 \else
211 \AtBeginDocument
212  {\DeclareSymbolFont{operators}{OT1}\rmdefault\mddefault\updefault
213  \SetSymbolFont{operators}{bold}{OT1}\rmdefault\bfdefault\updefault
214  \DeclareMathAlphabet\mathbf{OT1}\rmdefault\bfdefault\updefault
215  \DeclareMathAlphabet\mathsf{OT1}\sfdefault\mddefault\updefault
216  \DeclareMathAlphabet\mathit{OT1}\rmdefault\mddefault\itdefault
217  \DeclareMathAlphabet\mathtt{OT1}\ttdefault\mddefault\updefault
218  \SetMathAlphabet\mathsf{bold}{OT1}\sfdefault\bfdefault\updefault
219  \SetMathAlphabet\mathit{bold}{OT1}\rmdefault\bfdefault\itdefault}
220 \fi

Note that we perform the setup at the end of the preamble (and not while the euler package is being input). This implies that any changes made to, e.g., \rmdefault by a package loaded after the euler package are seen.

The standard L^{A}TEX math setup assumes that OT1 encoded text fonts are used in math. When using T1 encoded fonts, we have to redefine the macros that access accents from the text fonts.

221 \ifCorkEncoding
222 \DeclareMathAccent\grave\mathalpha{operators}{"00}
223 \DeclareMathAccent\acute\mathalpha{operators}{"01}
224 \DeclareMathAccent\tilde\mathalpha{operators}{"03}
225 \DeclareMathAccent\ddot \mathalpha{operators}{"04}
226 \DeclareMathAccent\check\mathalpha{operators}{"07}
227 \DeclareMathAccent\breve\mathalpha{operators}{"08}
228 \DeclareMathAccent\bar  \mathalpha{operators}{"09}
229 \DeclareMathAccent\dot  \mathalpha{operators}{"0A}
230 \fi

\hat There is one more accent that is normally taken from the ‘operators’ symbol font, namely the \hat accent. This is the only accent provided by the Euler fonts; we shall use this accent by default. (A curious fact is that Knuth devoted a fairly large portion of gkpmac.tex to the construction of a ϕ with a hat accent—using the \widehat macro).

231 \DeclareMathAccent\hat\mathalpha{EulerFraktur}{"5E}

However, some users do not like this \hat accent. They prefer the accent glyph to be taken from the text font (similar to the other accents).

232 \DeclareOption{text-hat-accent}
233 {\ifCorkEncoding
234  \DeclareMathAccent\hat\mathalpha{operators}{"02}%

235  \else
236  \DeclareMathAccent\hat\mathalpha{operators}{"5E}%
237  \fi}

\hbar The \hbar macro in standard L^{A}TEX is composed of the letter ‘h’ from the ‘letters’ symbol font and the macron (‘bar’) accent from the ‘operators’ symbol font. With the ‘letters’ symbol font now being Euler Roman, the bar is no longer positioned correctly. We choose the following definition (the 9mu in the original definition has been changed to 8mu):

238 \ifCorkEncoding
239 \DeclareMathSymbol\euler@hbar\mathord{operators}{"09}
240 \else
241 \DeclareMathSymbol\euler@hbar\mathord{operators}{"16}
242 \fi
243 \def\hbar{{\euler@hbar\mkern-8muh}}

7 Footnotes

\@makefnmark Footnote numbers are not math entities, so they should be produced by digits from the text font. Since footnote markers (whether they are numbers or symbols) are produced in math mode, we can accomplish this by selecting \operator@font; this will cause digits to be taken from the ‘operators’ symbol font (which is the same as the font used for text; see previous section).

244 \def\@makefnmark{\hbox{$\operator@font^{\@thefnmark}\m@th$}}

8 Processing options

Finally, we must remember to process the options:

245 \ProcessOptions

246 ⟨/package⟩

References

[1] R. L. Graham, D. E. Knuth, and O. Patashnik. Concrete Mathematics. Addison-Wesley, 1989.

[2] D. E. Knuth. Typesetting Concrete Mathematics. TUGboat 10(1):31–36, 1989.