请考虑以下示例:
\documentclass{article}
\usepackage{newtxtext}
% \usepackage{newpxtext}
\usepackage{fontspec}
\setmainfont{SourceHanSerifSC-Regular}
\begin{document}
Some text
\end{document}
会出现错误(无论是使用 LuaLaTeX 还是 XeLaTeX):
Package fontspec: The font "SourceHanSerifSC-Regular" cannot be found.
(详细信息请参见 XeLaTeX)
Font TU/SourceHanSerifSC-Regular(0)/m/n/10=[SourceHanSerifSC-Regular.otf]/OT at 10.0pt not loadable: Metric (TFM) file or installed font not found.
<to be read again>
(详细信息请见LuaLaTeX)
Font \TU/SourceHanSerifSC-Regular(0)/m/n/10=[SourceHanSerifSC-Regular.otf]:mode=node;language=dflt;-ss05;+tlig; at 10pt not loadable: metric data not found or bad.
<to be read again>
relax
但是,没有包newtxtext
或newpxtext
加载,fontspec
可以成功找到字体并且编译成功。
这似乎仅发生在较新版本newtx
(v1.724, 2023/08/20) 和newpx
(v1.521, 2023/09/27) 中。
这里发生了什么?如何修复这个错误?
抱歉,我使用这个 CJK 字体,似乎无法用其他字体产生同样的错误。字体来自https://github.com/adobe-fonts/source-han-serif/releases,我使用的版本是名为“Static Super OTC”的版本——我不确定此信息是否相关。
上面的 MWE 并未使用,
ctex
只是为了最小化所需的包,因此 CJK 字符将不可见。以下是原始的 MWE:\documentclass{article} \usepackage{newtxtext} % \usepackage{newpxtext} \usepackage[fontset=none]{ctex} \setCJKmainfont{SourceHanSerifSC-Regular} \begin{document} Some text. 一些中文 \end{document}
答案1
我建议不要将过时的 8 位字体包与现代 Unicode 字体混合使用,而是使用所有字体的 Unicode 版本。这样可以解决许多兼容性问题。
由于另一个答案已经讨论了 XeCJK,我将使用 Babel 在 LuaLaTeX 中给出一个示例。这适用于主要包含英文且包含一些中文单词和短语的文档。
这是使用 Palatino 克隆的版本(也经过调整以适用于 Source Han Serif 的 OTC 版本,但在实践中您可能希望将任何非标准字体放在子目录中./fonts
)。
\documentclass{article}
\usepackage[english]{babel}
\usepackage{unicode-math}
\babelprovide[import=zh-hans, onchar=ids fonts]{chinese}
\defaultfontfeatures{Scale=MatchUppercase, Ligatures=TeX}
\defaultfontfeatures[SourceHanSerifSC]{
Ligatures=Common,
UprightFont={* Medium},
BoldFont={* Bold}
}
\babelfont{rm}
[Scale=1.0]{TeX Gyre Pagella}
\babelfont[chinese]{rm}
{SourceHanSerifSC}
\setmathfont{Asana Math} % If you would need newpxmath.
\begin{document}
\noindent
Some text. 一些中文 \\
\textbf{Some bold text. 一些中文}
\end{document}
时代:
\documentclass{article}
\usepackage[english]{babel}
\usepackage{unicode-math}
\babelprovide[import=zh-hans, onchar=ids fonts]{chinese}
\defaultfontfeatures{Scale=MatchUppercase, Ligatures=TeX}
\defaultfontfeatures[SourceHanSerifSC]{
Ligatures=Common,
UprightFont={* Medium},
BoldFont={* Bold}
}
\babelfont{rm}
[Scale=1.0]{TeX Gyre Termes}
\babelfont[chinese]{rm}
{SourceHanSerifSC}
\setmathfont{TeX Gyre Termes Math} % If you would need newtxmath.
\begin{document}
\noindent
Some text. 一些中文 \\
\textbf{Some bold text. 一些中文}
\end{document}
答案2
使用xecjk
或ctex
包代替包,并在或包之后fontspec
调用newtxtext
或包。也可以使用代替。newpxtext
xecjk
ctex
\setCJKmainfont
\setmainfont
\RequirePackage[no-math]{fontspec}%
\documentclass{article}
\usepackage{xeCJK}%or ctex package for Chinese documents
\setCJKmainfont{SourceHanSerifSC-Regular}
\usepackage{newtxtext}
%\usepackage{newpxtext}
\begin{document}
Some text 中国
\end{document}