这是我使用 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
等。