升级到 TeX Live 2022 后,我发现很多以前的代码由于newtx
和之间的冲突而无法正常工作fontspec
。这是一个最小的例子(Windows 下的引擎是 XeLaTeX):
\documentclass[11pt]{article}
\usepackage{xeCJK}
\usepackage{newtxtext} % !!!
\usepackage{newtxmath} % !!!
\usepackage{fontspec}
\setsansfont{TeX Gyre Heros}
\setCJKmainfont{Noto Serif CJK SC}
\begin{document}
\[ x^2+y^2=z^2 \]
Test English.
测试中文。
\end{document}
代码无法编译并显示错误:
! Package fontspec Error: The font "TeX Gyre Heros" cannot be found.
...
! Package fontspec Error: The font "Noto Serif CJK SC" cannot be found.
但是,如果我用 注释掉这两行!!!
,那么它就可以编译。
通过这个 A/B 测试,我知道是 unicode-engine 的最新(官方)支持newtx
破坏了我的代码,因为现在newtx
使用fontspec
。我试图传递,[nofontspec]
但newtx
字体却是错误的。
这里到底发生了什么?有什么建议可以修复我的所有代码(我大量使用newtx
)fontspec
而无需做太多工作吗?
答案1
答案2
除非您坚决致力于采用 xeCJK 方法,否则我建议您使用该unicode-math
包并发布合适的\setmainfont
、\setsansfont
和\setmathfont
指令。
由于您使用 Noto Serif SC 字体系列作为主(衬线)文本字体,因此我不会使用 Helvetica 作为主无衬线字体。相反,我会使用 Noto Sans SC 字体系列。如果您必须使用 Times Roman 克隆作为数学字体,我会放弃数学newtxmath
字体,而是发出指令\setmathfont{Stix Two Math}
。
我使用 MacTeX2022 和 LuaLaTeX 编译了以下代码。
\documentclass[11pt]{article}
\usepackage{unicode-math}
\setmainfont{Noto Serif SC}
\setsansfont{Noto Sans SC}[Scale=MatchLowercase]
\setmathfont{Stix Two Math}[Scale=MatchLowercase]
\begin{document}
Test serif font.
\textsf{Test sans-serif.}
$x^2+y^2=z^2$.
测试中文。\quad \textsf{测试中文。}
\end{document}