更改主字体后,数学运算符(例如 \lim)的字体设置错误

更改主字体后,数学运算符(例如 \lim)的字体设置错误

在我的文档中,我需要使用 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之间的交互有关,但您知道这一点。fontspecsiunitx

我还没有尝试调试这个问题,但我知道一个解决方法:\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数学符号以匹配文本字体。

相关内容