使用 luatex 将 Latin Modern Sans 设置为数学字体

使用 luatex 将 Latin Modern Sans 设置为数学字体

这是我使用 pdflatex 的代码

\DeclareMathVersion{sans}
% Math letters from Latin Modern Sans
\SetSymbolFont{letters}{sans}{OML}{cmbr}{m}{it}
% Math operators
\SetSymbolFont{operators}{sans}{OT1}{lmss}{m}{n}
% Math symbols
\SetSymbolFont{symbols}{sans}{OMS}{lmsy}{m}{n}
% Large symbols
\SetMathAlphabet{\mathrm}{sans}{OT1}{lmr}{m}{n}
\SetMathAlphabet{\mathsf}{sans}{OT1}{lmss}{m}{n}
\SetMathAlphabet{\mathit}{sans}{OT1}{lmr}{m}{it}

在代码中我可以使用

\mathversion{sans}

现在我正在寻找与 luatex 类似的东西。Latin Modern Sans 的数学版本未定义

\setmathfont{Latin Modern Sans Math}    % does not compile

唯一已知的解决方法是这个,但是

\setmainfont{Latin Modern Sans} 
\usepackage[italic]{mathastext}
\setmainfont{Latin Modern Roman}
\setsansfont{Latin Modern Sans}
\setmonofont{Latin Modern Mono}

它不允许在代码中选择数学字体。我该如何实现上述 lualatex 和 fontspec 以及 unicode-math 的代码?

答案1

首先,请注意既有unicode-math\symsfup字母\symsfit(用于无衬线数学符号),也有\mathsfup和(用于数学模式下的无衬线单词)。如果这能满足您的需求,\mathsfit您可能不需要数学版本。sans

假设您这样做:您在标题中询问了 Latin Modern Sans,但实际上您在代码示例中使用的是 Computer Modern Bright,而不是 Latin Modern Sans 或 Computer Modern Sans。在此 MWE 中,我将使用 New Computer Modern Sans,它(与 Latin Modern Sans 不同)支持希腊语。

如果您想始终使用无衬线数学字母(但使用默认数学符号),则可以使用

\documentclass{article}
\usepackage{unicode-math}

\setmainfont{NewCM10-Book}
\setsansfont{NewCMSans10-Book}
\setmonofont{NewCMMono10-Book}
\setmathfont{NewCMMath-Book}
\setmathfont{NewCMSans10-Book}[range=up,
                               script-font=NewCMSans08-Book,
                               sscript-font=NewCMSans08-Book]
\setmathfont{NewCMsans10-BookOblique}[range=it,
                                      script-font=NewCMSans08-BookOblique,
                                      sscript-font=NewCMSans08-BookOblique]
% Define bfup and bfit fonts here, if needed.

\begin{document}

\[ v = \symup{e}^{\theta_t} + \symup{c} \]

\end{document}

新计算机现代书籍样本

如果您仍想要带有 的 New Computer Modern Bright unicode-math,则必须使用支持希腊语的CMUBright-Roman和。CMUBright-Oblique

但是,这不会为您提供\mathversion{sans}可以切换到的字体。您可以使用选项来实现这version=一点\setmathfont,但只能在衬线和无衬线数学字体之间切换,例如:

\documentclass{article}
\usepackage{unicode-math}

\setmainfont{KPRoman}
\setmathfont{KPSans}
\setmonofont{KPMono}
\setmathfont{KPMath-Regular}
\setmathfont{KPMath-Sans}[version=sans]

\newcommand\sansmath{\mathversion{sans}}

\begin{document}

\[ v = \symup{e}^{\theta_t} + \symup{c} \]
\sansmath
\[ v = \symup{e}^{\theta_t} + \symup{c} \]

\end{document}

开普勒字体样本

自 2022 年起,很遗憾您无法在同一文档中合并range=和。您可以version=任何一个使用来自不同文本字体的字母组合数学字体,或者定义另一个数学版本,但不能同时定义两者。

最后,您可以继续在 LuaLaTeX 中使用相同的 NFSS 数学模式命令。加载fontspec不会改变数学模式,除了\mathrm\mathsf等。

相关内容