Fontspec:\setmainfont 和 \newfontfamily + \def\rmfamily{...} 之间有实际区别吗?

Fontspec:\setmainfont 和 \newfontfamily + \def\rmfamily{...} 之间有实际区别吗?

正如这个问题的标题所暗示的。

\setmainfont{font name}

\newfontfamily\familyname{font name}
\def\rmfamily{\familyname}

我查看了字体规范的源代码。我认为上述两个实际上是相同的。但是,我仍然不太熟悉 latex3 语法,所以我可能会错过一些东西。

答案1

通常\rmdefault应扩展为表示字体名称的字符串;按照您的定义,它会扩展为\familyname,其扩展为不是字符串:例如,使用\newfontfamily\familyname{Hoefler Text},扩展\familynameis \protect\familyname (末尾有一个空格,与“健壮”命令一样)。扩展\familyname is

\fontencoding {EU1}\fontfamily {HoeflerText(0)}\selectfont

\rmdefault之后的展开\setmainfont{Hoefler Text}

HoeflerText(0)

所以它们是完全不同的。

此外,使用\rmfamily\rmdefault不是 不会产生等效结果:首先,\rmfamily应该是一个强大的命令;它的扩展导致 \protect\rmfamily 然后在

\not@math@alphabet\rmfamily\mathrm\fontfamily\rmdefault\selectfont

因此,再次,也\DeclareRobustCommand{\rmfamily}{\familyname}不会起到同样的作用。

相关内容