如何检测特定字体形状是否存在

如何检测特定字体形状是否存在

我在文档类中使用 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}

Times New Roman + TeX Gyre Termes 示例

相关内容