标符附着
Non-spacing combining marks allow the user to put any accent on any character. It is possible through the magic powers of mark attachment, and easy to implement in Glyphs.
有两种方法可以在你的字体里添加变音字母。其一,可以直接将它们预创建为组合字符形。我们已经在一篇变音符教程中讲过这个。导出为 CFF 时,部件会被释放,并在需要的地方去除重叠。尽管这会让你的字体中带有很多重复路径,但因为这种方式兼容性更好,所以还是广泛使用。如果你无法预测你的字体会在何种环境中出现,你可能无论如何都需要采用这种方式。
不过还有其二,你可以保持标符和基础字符形分开,让渲染引擎动态地将它们固定在一起。这就叫做 “标符附着”。你可能已经猜到了,其最大优点是最终字体的文件体积大大减小。你甚至可以通过所谓的 “标符对基字母” 附着,自由地在任何基础字符形上添加任何变音符。更重要的是,你甚至可以叠加变音符。这同样有一个名称:字体专家称之为标符对标符附着。
这种有趣玩意儿的缺点在于支持的应用程序不多。但是渐渐地有越来越多的软件支持标符连接。所以,应对这个现实的最好办法就是把这两样东西都放到你的字体里:预构建的组合字符形,以及用于连接的标符。
添加结合标符
要让标符附着工作,我们需要一些名为 “结合标符” 的东西,或称,“无宽度标符”。标符附着无法作用于旧版的有宽度标符。
结合标符的名称后面一般带有 comb
,并且除了那些自带结合标符的文种外,结合标符通常居于这些 Unicode 范围中:
U+0300-036F COMBINING DIACRITICAL MARKS
U+20D0-20FF COMBINING DIACRITICAL MARKS FOR SYMBOLS
U+1DC0-1DFF COMBINING DIACRITICAL MARKS SUPPLEMENT
U+FE20-FE2F COMBINING HALF MARKS
“但对于我需要添加到字体中的语言来说,我需要哪些标符呢?” 我听见你这样问了。别怕,在左侧边栏的语言分类中,你可以右击语言条目来添加:
你可能要向下滚动才能看到结合标符。比如对于 西欧
而言,就需要这些:
acutecomb
cedillacomb
circumflexcomb
dieresiscomb
dotaccentcomb
gravecomb
ringcomb
strokeshortoverlaycomb
tildecomb
添加锚点
基本上,现在所有我们所需要的,就是一系列定义的位置,用于字母和标符的连接。你通过在基字母和标符上添加锚点来实现这个目的。换句话说,锚点作为位置标记,告知 Glyphs 字母和标符在什么地方连在一起。你可以通过 “字符 > 设定锚点”(Cmd-U)快速地向所选字符形添加默认锚点。如果你觉得自己搞乱了,可以按住 Option 键并选择 “字符 > 重设锚点”(Cmd-Opt-U)。
一个字符形中的锚点拥有独特的名称。基字符形中有名为 top
、bottom
、center
和 ogonek
的锚点。如果锚点选中,你可以在当前字符形中看到它所可以连接的标符云团:
标符字符形中有名称相同、不过前方带有下划线的锚点,即 _top
、_bottom
、_center
和 _ogonek
。实际上,标符中包含带下划线的和不带下划线的两种锚点,所以标符可以堆叠:
对我们而言最重要的是 top
和 bottom
锚点,以及标符中它们的下划线版本。默认锚点是个不错的开始,并且 Glyphs 拥有一个巨大的数据库,记录了哪些字符形中有哪些锚点。当你按上述方式添加默认锚点时,Glyphs 还会尽量将它们放在默认的位置。所以,你可能需要在很多字符形中调整锚点的位置。如果你需要添加自己的锚点,你可以在某个字符形中右键单击,并在上下文菜单中选择 “添加锚点”。
现在,这里发生的是:带下划线的锚点会尽量连接到前面最近的字符形中对应的基锚点上。如果标符没有在它的前一个标符中找到对应的锚点,它会在再之前的标符中寻找,直到最后连上基字母。
例如,尖音符(字符形名称 acutecomb
)知道在小写 e 上要在什么位置,通过将它的 _top
锚点和基字母的 top
锚点相连。如果尖音符和 e 之间还有一个分音符(即 dieresiscomb
),就会使用 dieresiscomb
中的 top
,如果有的话。
所以,请明智地选择你的锚点位置。我们强烈建议如下:
- 尽可能地保持锚点位于竖向量度线上,比如
bottom
在基线上、top
在小写字母的 x 高度或上升部线 上、大写字母的大写高度线上。 - 因为你已经将
_top
锚点明智地放在了 x 高度线上,那么将小写标符保持在 x 高度之上。 - 对于大写标符使用大小写变体:复制标符(Cmd-D)将其移动到大写高度以上,重设锚点(Cmd-Opt-U)再将后缀名改为
.case
。这样当你创建大写组合时,会偏好使用.case
变体,如果有的话。你可以通过 “字符 > 创建组合字符形”(Cmd-Opt-Shift-C)重新组合部件。
派生出有宽度的变音符
因此,从 Glyphs 2.0 起,默认为结合标符。然而,出于兼容原因,你的字体中仍然需要包含旧版的有宽度标符。
当你完成结合标符之后,只需添加旧版标符,就可以自动生成。为什么可以这样?因为旧版标符是结合标符的组合字符形:
键入结合标符
为了测试字体中的标符附着,你需要能够在诸如 InDesign 的软件中键入无宽度变音符。首先,将你的字体导出到 Adobe 字体文件夹中,然后新建文档,键入基字符形,比如 a
,然后添加结合标符。这样做:
首先,从工具栏中的输入法菜单里选择 “显示表情与符号”(菜单中带有旗子符号的那个)。如果你没有这个菜单,在 “系统偏好设置 > 键盘 > 输入法” 中,打开选项 “在菜单栏中显示输入法菜单”:
然后,如果 “Unicode” 没有在你的 “字符检视器” 左侧边栏出现,从齿轮菜单中选择 “自定列表…”:
……并从出现的对话框列表中选择 “代码表 > Unicode”:
现在你可以从左侧边栏选择 “Unicode”,向下滚动到 0300
区域,位于拉丁文和希腊文之间,在那里选择任意结合变音符,双击来插入:
不用担心。你只需要这样设置一次。InDesign 甚至允许你分别选择每个结合变音符,并为其上色:
同样,聪明的孩子们实际上会使用 Ukelele 创建他们自己的键盘布局,这一工具来自 SIL 的热心人们。不过这就是另一件事了。
零宽度什么?
无宽度结合标符的字宽应该是 0。另外,它们需要向左侧偏移(即左侧边距为负)以便它能够呆在任何字母上方。这是当标符特性不起作用时的回退方式。
但是:在 .glyphs 文件中,你不需要将结合变音符的宽度设置为 0。你可以让软件帮你处理:导出时,Glyphs 会自动将左侧边线缩到右侧边线的位置上。这让编辑变得更容易,并且你只需要关心右侧边距就行了。这意味着你可以将左侧边距设置得舒服一些,比如 50 或者其他适合你的数值。这是件好事,因为零宽字符形很难在编辑视图中双击到。很棒!
2016-02-19 更新:更新了截图。
2018-02-01 更新:添加了关于 “零宽度” 的解释。
2020-02-13 更新:添加了遗漏的单词。
Chinese translation by Willie Liu (刘育黎) from 3type (三言).