Glyphs 官方教程 | OpenType 特性(二):上下文替换

你肯定已经知道了如何在 InDesign 中打开上下文替代字。而且,你可能也听说过有些字体用这一功能做出了非常酷的东西。本文就将介绍如何在你的字体里也创建出这样的功能。
我们要关注的特性是calt(上下文变体)和 clig(上下文合字)。这两者都通过 InDesign 中的“上下文替代字”开关来打开。
创建替代字符形
那么,找一款你自己的字体,我们来在其中加入一个替代字符形。这个替代形式应该仅在特定情况下替换常规字符形。作为例子,我们选择字母 j。

我想在这个例子中,当 j 位于字母 g 之后时,它的末端应该稍微收缩一点。所以我们通过“字符 > 添加字符形…”新建一个字符形。在弹出的文本框中输入j=j.alt并点击“生成”。这样就会创建一个名为j.alt的字符形,其中带有一个作为部件的 j。然后你可以在右键菜单中释放部件,并调节末端长度。
你可以这样在编辑视图中“输入” j 的变体:按下 Cmd-F,在弹出窗口的搜索框中输入j.alt。

编写上下文替换规则
现在,我们需要编写calt特性。按下 Cmd-I 打开“字体信息”,切换到“特性”选项卡。点击加号按钮创建新特性,新建的特性会保持名称选定以便修改。我们将其命名为calt。在上方的输入框中,输入:
1 sub g j' by j.alt;
如果一切正常,你的特性窗口将如图所示:

在sub和by之间,时这一特性所查找的完整上下文内容。本例中,是g后接j。但我们只想替换j,而不是g。所以我们在j后标记一个单直引号: j’。关键词by后面的替换内容,j.alt,仅会对带有单引号标记的字母生效,本例中即为j。
我们来试一下特性是否有效。点击“编译”按钮,然后在字体窗口中新建一个编辑选项卡,在左下角的“特性”菜单中选择calt并输入一个包含“gj”的单词。
为替换规则添加分类
当我们的j位于g之后时,就会缩短尾巴——这是个不错的注意。不过,如果前面是其他带有下降部的字母,比如q、y或另一个j时,也应当如此。当然了,我们可以在calt特性中这样写:
1 sub g j' by j.alt;
2 sub q j' by j.alt;
3 sub y j' by j.alt;
4 sub j j' by j.alt;
但是这就很繁琐,尤其是之后如果想修改什么内容的话。对于同样的作用,这里有一种更为有效的写法:
1 sub [g j q y] j' by j.alt;
方括号会创建一个“类别”(class),其含义为“这些字母中的任何一个”。所以这个特性就是在说,“如果跟在 g、j、q 或 y 中的任何字母之后,就将 j 替换为 j.alt。”
在替换结果中也可以使用类别。你只需要确保两个类别包含同等数量的内容,且顺序一致。假如我们还有一个对应字母 ĵ 的jcircumflex.alt,那么特性代码可以这样:
1 sub [g j q y] [j jcircumflex]' by [j.alt jcircumflex.alt];
当你经常使用一个类别时,就不想一次次地反复输入整个类别。尤其是当你发现类别中漏掉了一个字符形,你就要全盘修改。有一个更好的办法是,点击加号按钮并创建一个类别定义。你可以通过双击xxxx来对其进行重命名,和重命名特性标签时的操作相同。类别名称必须由大写字母 A-Z 或小写字母 a-z 开头,也可包含下划线_、句点.和数字。名称不限于四个字母长。我将这一类别命名为descender_on_the_right,并在其中添加gj q y:

现在,我们可以像这样重写calt特性:
1 sub @descender_on_the_right [j jcircumflex]' by [j.alt jcircumflex.alt];
@ 符号用于标记类别名称。如果你不写 @,Glyphs 会将其识别为字符形名称并报错。
就是这样了。实际上,这还不是全部内容。在下一篇,OpenType 特性(三):上下文替换中,我们会更进一步,编写高阶的上下文特性代码。
by Rainer Erich Scheichelbauer Chinese translation by Willie Liu (刘育黎) from3type(三言).

