It really bugs me when numbers are typeset with two different fonts on the same
line, say in MS Word if you type 0.01 in the text and then the same in an
equation field, they won’t look the same because they use different fonts. For
my dissertation (written in LaTeX), I wanted to be sure to avoid this pitfall.
Unfortunately, it is rather more complicated than it seems on the face. First,
you must use XeLaTeX (which I am). Second, the packages fontspec
and
unicode-math
are necessary. fontspec
lets you set the main body font,
while unicode-math
lets you control the fonts used in math environments
(between $
, or in an equation environment, etc.). However, by default,
unicode-math
will typeset all of the numbers in whatever font you choose with
that package so the default must be changed. For instance, in my
dissertation, I have
\usepackage{fontspec}
\setmainfont[Ligatures=TeX]{Times New Roman}
\usepackage{unicode-math}
\unimathsetup{math-style=TeX}
\setmathfont[range=\mathup/{num}]{Times New Roman}
\setmathfont[range=\mathit/{greek,Greek,latin,Latin}]{Cambria Math}
\setmathfont[range=\mathup/{greek,Greek,latin,Latin}]{Cambria Math}
\setmathfont[range={"2212,"002B,"003D,"0028,"0029,"005B,
"005D,"221A,"2211,"2248,"222B,"007C,"2026,"2202,"00D7,"0302,
"2261,"0025,"22C5,"00B1,"2194,"21D4}]{Cambria Math}
The lines starting \setmathfont
are what control the font for different
characters. The option \mathup
means the upright math style, while the
\mathit
option means the italic math style. The /{num}
means to use the
given font for all the numbers in the style given immediately prior and the
/{greek,Greek,latin,Latin}
means to use the given font for all the lower- and
upper-case Greek and Latin letters in the given style. The last two lines are
required because the /{num}
option also includes a bunch of characters like
square brackets [
, the integral symbol, etc., but Times New Roman does not
have definitions of these symbols. The following table shows the characters that
did not print for me:
Unicode |
Character |
2212 |
− |
002B |
+ |
003D |
= |
0028 |
( |
0029 |
) |
005B |
[ |
005D |
] |
221A |
√ |
2211 |
∑ |
2248 |
≈ |
222B |
∫ |
007C |
| |
2026 |
… |
2202 |
∂ |
00D7 |
× |
0302 |
̂ |
2261 |
≡ |
0025 |
% |
22C5 |
⋅ |
00B1 |
± |
2194 |
↔ |
21D4 |
⇔ |
2260 |
≠ |
These lines reset these characters to use the Cambria Math font. Now, all of my
numerals are set in Times New Roman, no matter where they’re used.
Finally, note that unicode-math
should be loaded after any other packages that
mess with the math functionality, such as amsmath
or mathtools
.