在我的文档中,我需要使用 Constantia 作为主字体,并使用 Arial 作为文档的不同部分。因此,我使用 LuaLaTeX 来编译文档。此外,我还需要 siunitx 和 unicode-math。实际问题出现在我第一次在文档中使用 \SI{}{} 时,因为之后数学运算符再次设置为 Arial(即使主字体是 Constantia)。
梅威瑟:
\documentclass{scrreprt}
\usepackage{fontspec}
\setmainfont{Constantia}
\usepackage[output-decimal-marker=.,exponent-product=\cdot,per-mode=symbol]{siunitx}
\sisetup{detect-all}
\AtBeginDocument{\sisetup{math-rm = \symup}}
\usepackage{unicode-math}
\setmathfont{Latin Modern Math}
\begin{document}
\setmainfont{Arial}
\setmainfont{Constantia}
$\lim\limits_{x\rightarrow \infty}$ \SI{25}{\percent} $\lim\limits_{x\rightarrow \infty}$
\end{document}
产量:
可以看出,“lim” 设置为 Arial。注释 \setmainfont{Arial} 有帮助:
有人知道这是怎么回事吗?如何修复?不幸的是,我需要使用不同的字体。
先感谢您!
问候朱利安
答案1
该包应该将操作员字体设置为文档的主字体。我发现这有时会出错。在这里,它似乎与和unicode-math
之间的交互有关,但您知道这一点。fontspec
siunitx
我还没有尝试调试这个问题,但我知道一个解决方法:\setoperatorfont{\rmfamily}
。如果您要更改文档字体或想要为操作员名称加载不同的字体系列,这可能会非常方便。
\documentclass[varwidth, preview]{standalone}
\usepackage{fontspec}
\setmainfont{Constantia}
\defaultfontfeatures{Scale=MatchLowercase}
\usepackage[output-decimal-marker=.,exponent-product=\cdot,per-mode=symbol]{siunitx}
\sisetup{detect-all}
\AtBeginDocument{\sisetup{math-rm = \symup}}
\usepackage{amsmath}
\usepackage{unicode-math}
\setmathfont{Latin Modern Math}
\setoperatorfont{\rmfamily}
\begin{document}
% These confuse `unicode-math`:
\setmainfont{Arial}
\setmainfont{Constantia}
$\lim\limits_{x\rightarrow \infty}$ \SI{25}{\percent} $\lim\limits_{x\rightarrow \infty}$
\end{document}
除此之外,我还添加了另外两行:设置Scale=
为默认字体功能,以便您加载的所有字体都会匹配,并明确包括amsmath
。
不过,我强烈建议不要\setmainfont
在文档正文中使用。最好在序言中加载所需的系列,例如\setsansfont{Arial}
或\newfontfamily\yourfavoritefont{Comic Sans}
,然后在文档内选择一个字体系列。您还可以将它们设置为运算符字体,并使用 选项range=
更改\setmathfont
数学符号以匹配文本字体。