上下文字偶距

教程
作者:Rainer Erich Scheichelbauer
en fr zh

11 四月 2013 发布日期: 10 四月 2013

Glyphs offers a smart way to add your own contextual kerning in a separate OpenType feature. Warning: rather advanced level.

所以,你已经调节过了字符形的边距,然后在需要的地方添加了字偶距对。但是,你还是会遇到一些情况,某三个字符形之间的字间空白不在最佳状态。

有一些常见的可能出问题的地方。比如,一个右边距为负的字符形,后接空格,再接一个左边距为负的字符形,比如 f space Tf space Vf space W。在这种情况下,词间距就会被两边的负边距吃掉。对于读者而言,结果看上去就像是丢掉了空格。所以,这里的白空间需要增大一点。

或者看一下 L quoteright A 的三字组合,这里撇号(我们假设 quoteright 用作撇号)总是会和 A 太近、和 L 太远。我们需要修正一下:

常见的三字组合通常包含空格、标点和引号,比如 period quoteright space。另外,也不一定都是三字组合,还可能是四字组合,比如 f period space V 等。当然了,根据不同的设计,实际情况会有很大的不同。找出你需要哪些组合的唯一方法,就是用你的字体中设置大段的文本,最好是带有很多不同语言的标点符号,并寻找那些白空间看起来混乱的地方。

上下文字偶距 lookup

进入 kern 特性。实际上 Glyphs 在你导出的时候,使用你设置的字偶距对自动创建了这个特性。现在,你可以通过向 kern 特性添加一个单独的 lookup,在现有的字偶距之上添加一些额外的字偶距。

要这样做的话,前往 “文件 > 字体信息 > 特性” 并点击窗口左下角的加号按钮添加一个名为 kern 的新特性。现在假设我们想要修正包含 f space 的三字组合,以及对于法语和意大利语而言很重要的 L quoteright A 组合。好的,这是我们要在 kern 中放入的内容:

pos f' 50 space [T V W Y];
pos L' -40 quoteright' 80 [A Aacute Agrave];

第一行查找一个后接空格的 f,但这只发生在 T、V、W 或 Y 之前。只有在这时,f space 这对字母之间会增加 50 单位的白空间。

第二行查找一个 L 后接撇号,和一个有或者没有变音符的 A。在这种情况下,撇号向 L 中挤进 40 单位,撇号和 A 之间的距离则增大 80 单位,最终效果就是将撇号移近了 L,并增大了 L 和 A 之间的空间,避免了二者相撞。

这被称作使用标记子字串的连锁上下文定位。如果你熟悉 AFDKO 特性代码,这个定位规则的结构可能会让你吃一惊。字偶距的数值不位于行尾,而是位于受影响的字符形名称之间。此外,与任何上下文规则一样,一些字符形需要使用 “直引号” 标记。在这种情况下,我们需要标记每一个后接字偶距数值的字符形。

技术细节

在后台代码中,Glyphs 在 kern 特性末尾添加了一个名为 kernCustom 的 lookup:

这一串带直引号标记的字符形,即 “标记的子字串”,不能被其他无标记的字符形打断。这意味着,你可以有 x x' x' x' x 但不能有 x' x' x x' x’。否则你会收到这样的错误信息:“Unsupported contextual GPOS target sequence: only one run of marked glyphs is supported”(不支持的上下文 GPOS 目标序列:只支持一串带标记的字符形)。

而且你不能混用常规字偶距和上下文字偶距,因为它们是不同的 lookup 类型。如果你混用了它们,你会收到这样的错误信息:“Lookup type different from previous rules in this lookup block”(Lookup 类型和此 lookup 段落中的前一规则不同)。

两个小缺点

因为我们的 lookup 是在导出时插入到每个子样中的特性代码,所以上下文字偶距不会插值。但这通常不是什么大问题。请记住,额外的上下文字偶距并不会替换你已经拥有的其他字偶距对,而是在它们之上添加的。

除了常规的、非上下文的字偶距,Glyphs 不会在编辑视图中为你显示 GPOS 预览。这对于做上下文字偶距的人而言就不是什么好运气了。不过有一种简单的变通办法:只要坚持将你的字体导出到 Adobe 字体文件夹中,你就可以立刻在 InDesign 中测试你的三字、四字或五字组的字偶距了。毕竟,这才是它会起到作用的地方,因为人们会在这里实际使用它。


示例字体:PLAYFAIR DISPLAY,谨感谢 CLAUS EGGERS SØRENSEN 提供。

2020-01-08 更新:更正 “字体信息” 菜单条目(感谢 @Galifer)。
2020-03-30 更新:更正录入错误。

Chinese translation by Willie Liu (刘育黎) from 3type (三言).