考虑以下文件:
\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
。但建议进行外部基准测试:)