我在文档类中使用 Times New Roman 字体作为主要字体。该字体在 Windows 下工作正常,但在 macOS 下无法显示小写字体形状。事实证明,macOS 附带的相对较旧的版本(5.01.3x
与 Windows 下相比7.00
)未嵌入 smcp 功能。
那么问题就是,如果 smcp 功能缺失,如何提前警告用户,并自动将主字体替换为 TeX Gyre Termes。据我所知,我使用的 XeLaTeX 包没有提供此类功能的明确 API。同时,我已经追踪到中fontspec
的内核警告,但不知道如何适应这一点,因为我的理解有限 :(source2e
\wrong@fontshape
我将非常感激您所获得的任何帮助。
答案1
该fontspec
包提供了\fontspec_if_small_caps:TF
检查当前字体是否具有小型大写字母(作为功能或作为单独的字体)的功能,以及\fontspec_if_feature:nTF
测试任意 OpenType 功能,例如smcp
,这些功能记录在fontspec
手册的第 5.3 节中,并且需要\ExplSyntaxOn
。
另一种方法是加载 TeX Gyre Termes,它是 Times 的克隆版,每个 TeX 发行版都包含它,并且它确实包含小型大写字母。在tex-gyre
安装了该软件包的正确配置的系统上,\setmainfont{TeX Gyre Termes}
应该可以正常工作(但有些发行版出厂时配置不正确)。
SmallCapsFont
您还可以使用手册第 4.1 节中记录的选项仅为小写字母加载此字体fontspec
。如果您真的想以这种方式将 Times New Roman 与 TeX Gyre Termes 混合,请按以下步骤操作:
\documentclass{article}
\usepackage{fontspec}
\setmainfont{Times New Roman}[
UprightFeatures = {SmallCapsFont = texgyretermes-regular.otf,
SmallCapsFeatures = {Letters=SmallCaps, Scale=MatchUppercase}},
BoldFeatures = {SmallCapsFont = texgyretermes-bold.otf,
SmallCapsFeatures = {Letters=SmallCaps, Scale=MatchUppercase}},
ItalicFeatures = {SmallCapsFont = texgyretermes-italic.otf,
SmallCapsFeatures = {Letters=SmallCaps, Scale=MatchUppercase}},
BoldItalicFeatures = {SmallCapsFont = texgyretermes-bolditalic.otf,
SmallCapsFeatures = {Letters=SmallCaps, Scale=MatchUppercase}}
]
\begin{document}
\noindent
Regular \textsc{Small Caps}\\
\textbf{Bold \textsc{Small Caps}}\\
\textit{Italic \textsc{Small Caps}}\\
\textit{\textbf{Bold Italic \textsc{Small Caps}}}
\end{document}