我的要求是:
- 使用 Calibri 作为主要字体。使用 XeLaTeX 可以轻松实现这一点。
- 使用 Calibri 作为数学字体。使用例如也相当容易
mathspec
。但这只处理字母和数字。 - 使用 Calibri 作为方程式中数学符号(例如,=,+)的字体
\times
。这是最困难的部分。
我花了几年时间,经过两次迭代才弄清楚,但我终于找到了解决方案。下面的答案中讨论了这两个问题。
答案1
迭代 1
\documentclass[10pt]{article}
\usepackage[MnSymbol]{mathspec} % Includes amsmath.
\setmathsfont(Digits,Latin,Greek,Symbols)[Numbers={Lining,Proportional}]{Calibri}
\setmainfont[Mapping=tex-text, Ligatures={NoRequired,NoCommon,NoContextual}]{Calibri}
\usepackage[italic]{mathastext}
\begin{document}
ABCDEFGHIJKLMNOPQRSTUVWXYZ
\begin{align}
\dfrac{5a + 10b}{10} &= c \times |XY| - \alpha\beta\gamma^{2}\\
x &= 5~\mathsf{°C}
\end{align}
\end{document}
这满足了我的要求中的前两个条件,您可以获得以下结果:
- 分数线未按照 Calibri“样式”排版。
- 该
\times
符号不是使用 Calibri 排版的。 - (度数)符号
\circ
完全缺失。 - 公式中的“C”未使用 Calibri 排版。因为我使用了
\mathsf
。因此,使用了 Computer Modern sans 字体。
迭代 2
我的第一个解决方案足够好,所以我坚持了几年。然而,在那段时间里,伟大的unicode-math
软件包出现了。
满足我的第三个要求的关键因素(或技巧)是以下这行代码,\setmathfont[range={"0000-"FFFF}]{Calibri}
意思是:“对所有 Unicode 字符使用 Calibri 0x0000
,0xFFFF
即我想要在方程式中使用的绝大多数符号。”
还要注意\setmathfont[slash-delimiter=frac]{Cambria Math}
。这是必要的,因为 Calibri 不提供 LaTeX 数学字体。因此我们使用 Cambria Math,因为它在风格上与 Calibri 更匹配,例如,它有更多匹配的分数线。但是,我们使用上面描述的技巧将 Calibri 用于大多数人都会看到的 Unicode 范围的字符。
\documentclass[10pt]{article}
\usepackage{amsmath} % Same for amsmath.
\usepackage{fontspec}
\usepackage{unicode-math}
\setmainfont[Mapping=tex-text,Ligatures={NoRequired,NoCommon,NoContextual}]{Calibri}
\setmathfont[slash-delimiter=frac]{Cambria Math}
\setmathfont[range={"0000-"FFFF}]{Calibri}
\setmathfont[range=up]{Calibri}
\setmathfont[range=sfup]{Calibri}
\setmathfont[range=it]{Calibri Italic}
\setmathfont[range=bfup]{Calibri Bold}
\setmathfont[range=bfit]{Calibri Bold Italic}
\setsansfont{Calibri} % Make \mathsf and \textsf also Calibri
\begin{document}
ABCDEFGHIJKLMNOPQRSTUVWXYZ
\begin{align}
\dfrac{5a + 10b}{10} &= c \times |XY| - \alpha\beta\gamma^{2}\\
x &= 5~\mathsf{°C}
\end{align}
\end{document}
以下是可爱的结果:
最后说明
- 我验证了它适用于 XeLaTeX。它应该也适用于 LuaTeX。
- 这应该适用于任何其他字体。
- 我希望这能帮助您排版漂亮的文档。
答案2
我也为此苦苦挣扎,尝试使用setmainfont
但setmathfont
最终起作用的是:
\setallmainfonts[
Path = /path/,
Extension=.otf,
BoldFont = LocalFont-Cond,
ItalicFont = LocalFont-ExtObl,
BoldItalicFont = LocalFont-BoldExtObl]{LocalFont}