正如 TeXbook 第 433 页所解释的那样,每个 TeX 字体至少有 7 个参数:倾斜,空间,拉紧,收缩,x 高度,四倍宽度,额外空间。
在使用 XeLaTeX 加载字体时,有没有办法更改这些参数\setmainfont
?
我知道 TrueType/OpenType 字体不再有 TFM 文件,但是当我
\the\fontdimen1\font
\the\fontdimen2\font
\the\fontdimen3\font
\the\fontdimen4\font
我确实得到了当前字体(OpenType 字体)的一些合理值。所以如果这些值存在于系统中,这意味着它们是在某个时候根据字体中存储的数据计算出来的,也许在加载字体时有某种方法可以改变它们?我特别想尝试一下拉紧和收缩,优化文档的外观。
答案1
大多数 fontdimens 对于 OpenType 字体来说并不重要,或者可以使用更高级别的选项来影响。
让我们看看 7 种标准字体尺寸:
- 1 (
slant
) 和 5 (x-height
):使用\accent
基本字符放置重音符号。此基本字符不用于 OpenType 字体,因此通常不使用字体尺寸。(x 高度还决定了 的长度1ex
,但您通常不想更改它。) - 2-4(单词间
space
,stretch
,shrink
):可以使用 进行缩放fontspec
。WordSpace
例如,设置Wordspace=2
会将所有三个值加倍,但您也可以设置例如WordSpace={1, 2, 0.5}
将 加倍stretch
,将 减半shrink
并保持space
不变。 - 6(
quad
宽度):用于设置1em
。大多数情况下,没有必要更改此值。 - 7(
extra
空格):可以缩放PunctuationSpace=<factor>
有时您可能有特殊要求,需要\fontdimens
以特殊方式调整这些。对于这些情况,您可以使用未记录的FontAdjustment
选项,在为字体定义低级 TeX 字体时运行一些自定义代码(参数将附加到 的最后一个参数\DeclareFontShape
)。在这里,您可以重写fontdimen
s,而不必担心可能会遗漏一些尺寸。
答案2
可以设置大多数这些参数的等效值。例如,Scale=
字体选项可以更改字体的高度。这将缩放所有字母,而不会更改 x 高度与大写字母高度的比率,但我曾经Scale=
通过将大写字母缩放为 x 高度与大写字母高度的比率来伪造小写字母。您还可以结合Scale=
使用FakeStretch=
以按不同的水平和垂直值缩放字体。(请注意,TeXbook 的 x 高度参数会影响重音符号的定位,而不会缩放字体。)
我通常在 LaTeX 3 中用于与拉伸参数等效的参数是\emergencystretch
,它将减少难懂段落中糟糕的连字符,但不会破坏好的段落。另一个在这里有用但功能不完全相同的软件包是microtype
。在 LuaTeX(但不是 XeTeX)中,它可以启用字体扩展。
单词间距可以用 TeX\spaceskip
命令单独设置,也可以用WordSpace=
中的字体选项设置fontspec
。 的三元组形式WordSpace
同时设置单词间距、拉伸和收缩。
如您所知,TeX 中的参数slant
会影响斜体和倾斜字母上的重音符号的位置。在 OpenType 字体中,这不需要更改,因为您通常不会使用组合重音符号。如果您需要用非组合重音符号组成基本字符,您可能会为字体设置倾斜字符,并适当设置默认重音符号位置。您仍然可以使用 手动调整重音符号位置\skew
,因为我偶尔不得不在具有非组合重音符号但不是组合重音符号的字体中伪造一个卡龙,或者甚至使用 创建一个穷人的倾斜字体FakeSlant=
。
\quad
LaTeX 内核中和的默认定义\qquad
是(根据我查找的第一个来源),
\def\quad{\hskip1em\relax}
\def\qquad{\hskip2em\relax}
您可以根据需要更改这些值。TeX 参数的作用是更改一个的宽度em
。