OpenType 特性(一):简单替换
一款现代字体,如果没有这些功能就是不完整的,而 Glyphs 可以帮你创建这些。在这第一篇关于 OpenType 特性的教程中,我们将探索最基础的内容,了解 Glyphs 能够为你实现的自动化功能。
特性能做什么
特性可以实现两件事:替换字符形和移动字符形。本篇教程中,我们会专注于“替换”。注意我说的是字符形而非字符。特性不会改变用户输入的文本(即 “字符”),只能改变文本呈现的形态(即你在字体中所绘制的 “字符形”)。
闲言少叙,我们直接为字体创建一个特性。进入 “字体信息”(Cmd-I)并切换到 “特性” 选项卡。看上去应该像这样:
在左侧,你会看到 “前缀”、“特性” 和 “类别” 的总览。右侧,则是两个文本输入框,上面一个用于输入特性代码,下面一个用于记录备注,或着存放当前弃用、但以后可能还会用到的代码内容。在文本框上面,你还可以看到两个复选框,一个用来自动生成特性,一个用来停用特性。
所以现在,我们需要的就是一个特性。点击左下角的加号按钮,会弹出一个小小的菜单,我们选择 “特性”。现在,窗口会如图所示:
祝贺你!你刚刚创建了一个名为 xxxx
的特性。耶!现在你就可以在上面的文本框中输入代码了。当然,xxxx
并不是一个真正的特性名称。像 InDesign 或 XPress 这样的排版软件,甚至像 macOS “文本编辑” 这样的文字处理软件,都要求特性的命名遵循“四字母标签”的规则。为了简单起见,特性标签应该告知用户该特性的功能。(Microsoft 的优秀员工编写了特性标签名称清单,以及如何使用它们的建议。我建议你把这个链接放在枕边,保存在你最喜欢的书签列表中。相信我,你会经常要看它的。)
当你创建了名为 xxxx
的特性后,他会保持选定状态以便你进行重命名。我们以 liga
为例来开始介绍。这一特性标签代表着 “标准合字”(Standard Ligatures)。根据 Microsoft 和 Adobe 的介绍,liga
特性会 “将一系列字符形替换为一个更适用于字体排印的单一字符形”。听上去不错。
字符形替换
当你创建一个特性时,你实际上是将一系列规则归了类。“规则” 决定了哪些内容被什么东西替换,看上去是类似于这样:
sub f f k by f_f_k;
我们来逐字看看。首先,是一个单词 sub
,定义了我们在处理的规则属于哪一类。如前所述,规则可以是替换或移动。这里 sub
代表它是用于替换(substitution)的规则。
其次,因为我们要做一个替换,所以我们要确定被替换的一串字符形。本例中,我们有这样三个字符形:f
,后接另一个 f
,再接 k
。注意,这些必须是字符形名称,所以 “ä” 要被拼成 adieresis
,“ñ”拼成 ntilde
,“字”拼成 uni5B57
,等等。
如果这一系列字符形没有关键词 by
来结尾,那么 “由什么来替换什么” 就无法明确。假设代码是 sub f f k f_f_k
,那么就也可能被理解成 “将 f f
替换为 k f_f_k
”。
在 by
之后,我们告知字体 “需要替换成的内容”。记住合字的命名规则:单独字母的名称由下划线相连。本例中,我们将三个字母 f、f 和 k 合在一起,所以合字称为 f_f_k
。
然后,最最重要的一点:每条规则必须以分号 ;
结尾。很简单,确实,不过这却是出现错误最多的一点。所以万一你的特性没有正常工作,有可能就是你遗漏了分号。
当然,你可以将几个规则依次排在一起,像这样:
sub f k by f_k;
sub f h by f_h;
sub f i by fi;
sub f l by fl;
sub f f k by f_f_k;
sub f f h by f_f_h;
sub f f i by f_f_i;
sub f f l by f_f_l;
注:你可能发现了,“fi” 和 “fl” 并不符合命名规则。这是因为这两个字符形名称在命名规则出现之前就已经存在了,现在想纠正也为时已晚。历史原因,不用在意。另外,如果你喜欢的话,也可以将所有规则写在同一行。只要你不忘记分号,一切就都可以正常工作。
想看一下你所做的是否正确吗?点击窗口下方的 “编译” 按钮,Glyphs 会让你编写的特性在编辑视图中可被调用。在编辑视图左下角的“特性”弹出菜单中选择特性,在键入文字,即可测试该特性。
当然了,只有在你字体里确实具备这些字符形的前提下,你才能将特性编译进字体。如果你不这样做,Glyphs 会大声而合理地抱怨:
自动特性生成
现在,让你大失所望的是,我必须承认前面做的这些没有什么意义。为什么呢?因为,如果你遵循了以上的字符形命名规则,Glyphs 可以自动地生成合字特性。你可以通过圆形箭头按钮,来启动自动生成。
自动生成特性时,大部分合字规则会被放入 dlig
(风格合字,discretionary ligatures),不过你可以在合字的字符形名称后面添加 .liga
来强制其进入 liga
特性,例如 f_f_h.liga
。此外,Glyphs 不仅可以自动创建 liga
和 dlig
。在 Glyphs 手册的附录中,你可以找到一份清单,列出了能够识别的字符形名称及名称后缀。
不过至少我们理解了替换特性的工作原理,并且如果哪里出现了错误,我们也可以指出问题所在。另外,我们也充分准备好了接下来的第二篇教程,关于 “上下文替换” 的内容!所以,请持续关注……
听上去还挺好玩?那么继续阅读这系列冒险故事的第二部吧,OpenType 特性(二):上下文替换。
资源
好,特性代码让你着迷了吗?你可以啃一下 Adobe 的完整技术规范,以及为了完整起见,我要在这里重复一遍Microsoft 的特性标签清单。
或者,如果你觉得这些内容太过硬核,也可以看看由了不起的 Tal Leming 维护的 OpenType 烹饪手册。还有一份很棒的 OpenType 特性介绍,由 Martin Wenzel 和 Christoph Köberlin 编写。
2015-07-02 更新:更新为 Glyphs 2。
2018-07-24 更新:更新链接,添加了 “资源” 中的链接。
2019-03-28 更新:更新了 Adobe 技术规范的链接。
2019-04-09 更新:更新了 Glyphs 手册的链接。
Chinese translation by Willie Liu (刘育黎) from 3type (三言).