使用 \addfontfeatures 比定义 \newfontface 效率低吗?

使用 \addfontfeatures 比定义 \newfontface 效率低吗?

考虑以下文件:

\documentclass{article}

\usepackage{fontspec}

\setmainfont[Numbers={Lining,Proportional},Ligatures=Common]{EB Garamond}
\newfontface\garamondoldstylenumbers[Numbers={OldStyle,Proportional},Ligatures=Common]{EB Garamond}

\begin{document}

EB Garamond 123

\typeout{1st use of \addfontfeatures}
{\addfontfeatures{Numbers={OldStyle,Proportional}}EB Garamond 123\par}
\typeout{2nd use of \addfontfeatures}
{\addfontfeatures{Numbers={OldStyle,Proportional}}EB Garamond 123\par}

\typeout{1st use of \garamondoldstylenumbers}
{\garamondoldstylenumbers EB Garamond 123\par}
\typeout{2nd use of \garamondoldstylenumbers}
{\garamondoldstylenumbers EB Garamond 123\par}

\end{document}

如果这是在 XeLaTeX 或 LuaLaTeX 下编译的,则检查日志文件会显示以下消息

.................................................
. Font family 'EBGaramond(2)' created for font 'EB Garamond' with options
. [Numbers={Lining,Proportional},Ligatures=Common,Numbers={OldStyle,Proportional}].
. 
. This font family consists of the following shapes:
. 

等之后两个都使用了\addfontfeatures,但在使用 之后却没有。(当然,当和在前导码中处理\garamondoldstylenumbers时,也会发生类似的消息。)\setmainfont\newfontface

解析选项会对性能造成一定影响\addfontfeatures。但是除此之外,还会对性能造成影响吗fontspec?因为似乎每次都要重新定义字体。

我在 fontspec 手册中找到的唯一相关内容是“当具有特定功能集的特定字体将在文档中多次重复使用时,\fontspec每次使用时都不断调用是低效的。虽然\fontspec命令在第一次调用后不会定义新的字体实例,但仍必须解析和处理功能选项。”我假设\addfontfeatures使用了该\fontspec命令,但我不知道实现的细节。

(我将排版一份长文档,需要频繁使用商业字体的斜体和花饰斜体:我在示例中使用了旧式数字和 EB Garamond,因为它是免费提供的。当然,我通常会为其定义一个宏\addfontfeatures{...}。)

答案1

我的开发版本fontspec可能与当前的 TeX Live 版本在这个问题上不同步——我知道我最近修复了一个涉及\addfontfeatures错误创建新字体系列的问题。

在我的开发版本中,2nd use of \addfontfeatures日志文件中的行不会导致“字体系列 (…) 已创建”消息。但是,我在浏览代码时注意到,在字体系列的预先存在性检查方面可以进行一些重大改进。

简短的回答是:如果fontspec表现正确,那么\addfontfeatures应该比 效率低一些,但不会低很多\newfontface。但建议进行外部基准测试:)

相关内容