newtx/newpx 在某些情况下会干扰字体选择

newtx/newpx 在某些情况下会干扰字体选择

请考虑以下示例:

\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 

但是,没有包newtxtextnewpxtext加载,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}

TeX Gyre Pagella + Source Han Serif 示例

时代:

\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}

TeX Gyre Termes + Source Han Serif 示例

答案2

使用xecjkctex包代替包,并在或包之后fontspec调用newtxtext或包。也可以使用代替。newpxtextxecjkctex\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}

相关内容