使用 fontspec,如何定义字体系列的变体?

使用 fontspec,如何定义字体系列的变体?

我一直遇到以下情况字体规格特克斯

  • 我使用 定义了一个“基础”字体系列\newfontfamily
  • 然后,我想使用LetterSpace该集合内的功能来访问“间隔小型大写字母”变体SmallCapsFeatures
  • 然后,我想定义前一个小型大写字母间距设置的另一种变体,以便在段落内的不同上下文中使用。

到目前为止,我知道的唯一方法是定义完全独立的字体系列对于这三种变化中的每一种(不调整间距、调整一次间距以及对间距进行其他一些调整),如下所示:

\setmainfont[BoldFont={* Semibold},
             Numbers={OldStyle,Proportional}]
            {Adobe Garamond Pro}

\newfontfamily\rmaltfamily
  [BoldFont={* Semibold},
   Numbers={OldStyle,Proportional},
   SmallCapsFeatures={LetterSpace=2.5}]
  {Adobe Garamond Pro}

\newfontfamily\rmaltloosefamily
  [BoldFont={* Semibold},
   Numbers={OldStyle,Proportional},
   SmallCapsFeatures={LetterSpace=4.0}]
  {Adobe Garamond Pro}

从不重复自己的精神上来说,这太糟糕了。我唯一能做的打算在它们之间进行改变的是特征的存在和值LetterSpace

我尝试使用\addfontfeature示例 42 中所示的命令fontspec 手册这些更改会对当前字体产生影响,但是,尽管手册上有建议,但至少对于我的字体而言,该LetterSpace功能仅适用于SmallCapsFeature集合内的规范,而集合内的规范又仅适用于或\newfontfamily命令内的规范\fontspec

作为参考,手册宣称以下操作是可能的:

\fontspec{Didot}
\addfontfeature{LetterSpace=0.0}
USE TRACKING FOR DISPLAY CAPS TEXT \\
\addfontfeature{LetterSpace=2.0}
USE TRACKING FOR DISPLAY CAPS TEXT

虽然我的三个独立\fontfamily定义确实有效,但感觉它不适合这项工作。有没有更好的方法来定义一个基本的字体系列,然后在其中分层添加一些更改,以便这些更改可以在某些上下文中使用,并且范围受到限制?

答案1

这对我有用

\documentclass[a4paper]{article}
\usepackage{fontspec}
\setmainfont[BoldFont={* Semibold},
             Numbers={OldStyle,Proportional}]
            {Adobe Garamond Pro}

\begin{document}

{\scshape Abcde fghi}

{\addfontfeatures{SmallCapsFeatures={LetterSpace=2.5}}\scshape Abcde fghi \upshape Abcde fghi}

{\addfontfeatures{SmallCapsFeatures={LetterSpace=4.0}}\scshape Abcde fghi \upshape Abcde fghi}

\end{document}

小型大写字母的单词有字母间距,而直立字母的单词则没有。

在此处输入图片描述

据我所知,不可能将新的字体系列定义为另一个字体系列的变体,但

\newcommand{\spacedsc}{\normalfont
  \addfontfeatures{SmallCapsFeatures={LetterSpace=2.5}}%
  \scshape}

非常相似。从.log文件中我可以看到字体规格一旦使用了这种变体,就不会重新计算字体分配;换句话说,每次后续使用\spacedsc都会加载第一次计算的字体系列。也许 Will Robertson 可以更准确地回答这个问题。

相关内容