这个问题涉及字体规范在更改 OpenType 功能时的“最佳实践”。我只使用 lualatex,尽管我认为这也适用于 xelatex。
我指的是编译器效率以及良好的编程习惯。缓存中多或少几 KiB,或编译时间多或少几毫秒,都不重要。我只使用文本,不使用数学,如果这有很大区别的话。
在第一个 MWE 中,字体在未选择任何功能的情况下加载,然后在打印任何文本之前添加 OldStyle,以便它成为默认字体:
\documentclass{article}
\usepackage{fontspec}
\setmainfont{Latin Modern Roman}
\AtBeginDocument{\addfontfeature{Numbers=OldStyle}}
\begin{document}
Hello 196 World.\par
{\addfontfeature{Numbers=ResetAll,Numbers=Lining}Hello 196 Again, World.}\par
\end{document}
在第二个 MWE 中,字体加载并选择了 OldStyle:
\documentclass{article}
\usepackage{fontspec}
\setmainfont{Latin Modern Roman}[Numbers=OldStyle]
\begin{document}
Hello 196 World.\par
{\addfontfeature{Numbers=ResetAll,Numbers=Lining}Hello 196 Again, World.}\par
\end{document}
在第三个 MWE 中,字体加载时选择了 OldStyle,但使用 Lining 定义了新字体。然后字体发生了变化:
\documentclass{article}
\usepackage{fontspec}
\setmainfont{Latin Modern Roman}[Numbers=OldStyle]
% I realize that this font uses Lining by default, but for MWE purposes:
\newfontfamily\linemup{Latin Modern Roman}[Numbers=Lining]
\begin{document}
Hello 196 World.\par
{\linemup Hello 196 Again, World.}\par
\end{document}
从技术上讲,以上哪种方式最好?它们都产生相同的打印效果。我的设备运行的是受限的 Linux 子系统,其中较大的系统经常在做其他事情,因此很难进行直接比较。
答案1
正如上述评论所揭示的,最佳做法将取决于更改是重复使用还是很少使用。我不知道频率和稀有性之间有什么特殊的交叉标准,但就我自己的情况而言,情况很明显:
我使用了很多默认使用 OldStyle 数字的文本(不是数学)。但在版权页面上,最好打印版权年份、ISBN 以及可能的图书馆目录号,并配上内衬数字。这将是“罕见的”,并且适合本地更改。
页码通常会使用主字体(带有 OldStyle 数字)。但如果我想要使用 Lining 数字,那么它们将被打印数百次。这种情况很常见,因此将其自己的字体定义为Numerals=Lining
默认字体是合理的。
我想其他人可能会用到这些信息,所以我把它写成了答案。如果不正确,请评论,我会修改或删除它。或者发布一个更好的答案!