多母版(二):保持轮廓兼容

  • by Rainer Erich Scheichelbauer
  • Tutorial
  • – Modified on

理解轮廓兼容性

当进行插值时,实际上被插值的是每个节点、手柄、部件和锚点的 x 和 y 坐标。点和部件以特定的顺序存储,这个顺序也必须在每个母版中都相同。

简而言之,要想进行插值,我们需要兼容的轮廓。要实现轮廓兼容,我们需要确保:

  • 所有母版均具有相同数量的路径、节点和手柄,以及部件
  • 所有部件、路径、节点和手柄在所有母版间顺序相同
  • 所有母版具有相同的锚点设置

好了!这些就是我们要让插值魔法成为现实所需要的全部内容。

确保轮廓是兼容的

Glyphs 会帮你保持轮廓兼容。带有不兼容轮廓的字符形,会在字体视图中被标记红色三角,在编辑视图中被标记顶部红色横条。不过,仅在至少一个字体子样所设置的轴坐标和母版不同的情况下,红色标记才会出现。换句话说,Glyphs 只会在你确实试图做插值的时候,才会提示轮廓的不兼容错误。

所以,在我们创建子样之前,我们可以充分利用方便的“显示 > 母版兼容性”(Ctrl-Opt-Cmd-N)命令。“兼容性显示”会显示以下内容:

  • 兼容的轮廓被标记为绿色。
  • 兼容的轮廓,但具有潜在的角度偏移问题,被标记为黄色。
  • 不兼容的轮廓被标记为红色。
  • 已选的节点会显示出蓝色线条,将它与其他母版中的对应点连起来。
  • 数字显示路径顺序和它们的起始节点。

如果一切无误,看上去差不多会是这样:

如果你不满意 Glyphs 显示兼容性的方式,你可以通过在“偏好设置 > 用户设定”中取消勾选“爆炸显示字体母版”来改变它:

有些人偏好这样的显示方式:

耶!你看,只有绿色的线段,并且所有的蓝线都将正确的节点连在一起。无论如何都没有什么需要修改的地方时,我们就可以进军下一个字母了。

这种情况就是另一个故事了:

轮廓呈现黄色。这意味着形状是兼容的,所以可以正确的插值,但是可能仍然有一些地方不对。这样,有时只是一个误报,因为 Glyphs 一定会做一些猜测,但不一定总是能猜对。不过通常,它能够正确地指出某个角度偏离了太多。本例中,蓝色线条指出有些垂直的部分在另一个母版中变成了水平的,或者反过来。

这样的状况通常可以通过在所有母版中执行“路径 > 修正路径方向”(Cmd-Shift-R)来解决,或许“路径 > 清理路径”(Cmd-Opt-Shift-T)也可以。如果不想麻烦,你也可以按下 Cmd-Opt-Shift-R 同时修正所有母版中的路径方向。要想快速确定是否所有路径的顺序都正确,前往“滤镜 > 修复兼容性”。现在,如果需要,你可以通过拖动至正确的顺序来修正错误。

现在,看一下这个无助的状况:

哦,不。蓝色连线以各种方式随意穿过画面。而且,我的天哪,还有一个完全不兼容的红色线段。这个字母的插值子样将无法被导出。那么,我们怎么办呢?

嗯,并非没救了,因为我们仍然可以通过 Cmd-1 和 Cmd-2 在母版间切换。我们的工作只是要确保每个母版中都有同样数量和顺序的节点和手柄,以及同样数量和顺序的路径。并且要记得,每个母版中有相同数量的锚点也是非常重要的。同样,如果怕麻烦,试一下 mekkablue 的脚本,它可以确保所有锚点都在各图层中,出现在对应的位置上。

时刻注意

带有两个兼容路径的字符形中存在着一个潜在的陷阱,即便 Glyphs 标记该字符形为兼容。试想这些例子:equal 等号(=),colon 冒号(:),左侧下双引号 quotedblbase(„),以及除号 divide(÷),还有更多类似的。如果你通过“显示 > 母版兼容性”看一下这些字符形,会发现连线彼此交叉穿越,嗯,出问题了。

母版完美兼容,所有轮廓都是绿色。但是连线指出,上部的圆点正和下部的圆点插值,反过来也是。不妙,非常不妙。除非你想让你的除号用这些圆点打乒乓球:

这种情况下,你可以按下 Cmd-Opt-Shift-R 修正所有母版中的路径方向。这应该可以自动将你的路径重新排序。如果这样没有修正它,你可以尝试手动重排:依次将路径剪切到剪贴板(Cmd-X)并立即粘贴(Cmd-V),或者使用“滤镜 > 修复兼容性”。

要找到所有具有乒乓球隐患的字符形,你可以使用 mekkablue 的 Github 中的“Masters > Open Tab with Dangerous Glyphs for Interpolation”脚本。

保留重叠

你可能听说过,字体中需要去除掉所有的路径重叠。忘掉这个吧,因为这是一个 Glyphs 可以很好地处理的技术性问题。事实上,若要为了插值,那么保留重叠部分会更明智。这是一个能够理解其原因的典型例子:

看一下 R 的字腿。可以看到,它穿过了字碗部分最低的节点。保持字腿和字碗分离可以让插值更简单。此外,这样还可以让 R 的编辑更简单些,这样很好。

万一你已经去除过重叠了,或者从一开始就在避免出现重叠路径,你可以通过选择一个角节点、在上下文菜单中选择“展开角”来重新建立重叠。或者选择两个节点,在上下文菜单中选择“重新连接节点”:

避免弯折

有一个严重的问题你需要了解。它仅会发生在你使用三个共线的点来做某种平滑连接的情况下,就像这样:

现在,相信我。如果这群点同时符合以下两个条件,就会出问题:一,不同母版中角度不同;二,点间距离的比例不同,即第一个点到中点的距离和中点到最后一个点的距离之比。如果某条路径上同时发生了这两者,那么插值时就会发生弯折:

这意味着角度或者比例两者之一必须在母版间保持一致,至少在你可能想要避免这种弯折发生的情况下。

避免陷入此种问题的一个好办法是,保持你的平滑曲线点水平或垂直:使用钢笔工具(P)按住 Shift 单击来添加极值点,然后逐个删除斜向的点。这样,角度永远保持一致,我们就不需担心发生弯折了。哦豁!

不过有时,你的设计中需要这样的点的组合,并且你无法在两个母版中保持角度一致。这种情况下,你需要保持比例一致。

你有两个选择。可以手动解决:选择中间的一点,确保它是绿色的,即定义该点为曲线点而非角点。你可以通过按下 Return 键来在曲线点(绿色)和角点(蓝色)之间切换。然后,按住 Option 键在首尾两点间移动中间这个点,用鼠标或方向键均可:

或者使用 Mekkablue 的 Glyphs 脚本集中的“Masters > Dekink Masters”(去除母版弯折)脚本。这种方法的操作如下:前往你认为比例最佳的母版中,选中这三点中的一个,然后从“脚本”菜单中运行这一脚本。这个脚本会在其他所有母版中寻找对应的组合,然后将对应的点移动到同当前母版中和另外两点间距离比例一致的位置。吁,听上去超级复杂,但其实并没有那么难。看一下这个短片,然后自己判断吧。

另一个轻松去除弯折的方法是 Tim Ahrens 的 Remix Harmonizer,确切地说,是其中的“Dekink Only”(仅去除弯折)选项。这种方法最棒的一点是,它让你可以在插值之后展平这些小弯折。换句话说,你不需要避免弯折,而是在导出的时候修正它们。这样做:在“滤镜”菜单下执行“RMX Harmonizer”,但不要操作任何按钮,而是打开窗口左下角的齿轮图标,选择“Copy custom parameter: Dekink only”(复制自定义参数:仅去除弯折):

现在你的剪贴板里存储了参数代码。只需在“文件 > 字体信息 > 字体子样”中,把它粘贴进所有受影响字样的“自定义参数”中即可:

如果担心这一参数会影响你的图形太多,你可以添加一个带有逗号分隔的字符形名称列表的 include 声明,把它仅限制在特定的字符形中。这样做之后,这一自定义参数的“值”看上去差不多应该是这样:

RMXHarmonizer; dekink; include: A, V, W, K, X, X.ss01

就是这样了。当你导出字体家族时,Harmonizer 就会修正所遇到的任何“插值弯折”的情况。

现在,大家都去让自己的母版兼容吧!

继续阅读:多母版(三):建立子样


2014-03-07 更新:添加了“时刻注意”一节中的 Python 脚本链接。
2014-08-23 更新:更新“去除弯折”演示视频链接。
2015-07-21 更新:更新至 Glyphs 2。
2017-10-30 更新:添加“RMX Harmonizer > Dekink only”。
2018-07-05 更新: 关于“去除母版弯折”用法的微小更新。

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