复用形状:智能部件

教程
作者:Rainer Erich Scheichelbauer
en fr zh

30 三月 2015

Smart Components are a fantastic way for re-using partial glyph shapes, especially for CJK radicals, but also for Latin letter parts. Be smart, and find out how to do it!

假设你想要复用小写字母 n 的字肩(即弧笔),用在小写 m 或 h 上。当然,你可以像我们做粗衬线那样地使用部件。不过,使用常规部件会有一个问题:它们是固定不变的。

但是我们需要调整 m 的字肩。大多数人喜欢让它们稍微窄一点。这是因为两个字肩会在一个字母中增加过多的内白空间。

而且,在小写 h 上,多数设计师会将分叉处下移,使白色切口看上去和 n 的一样深。这是因为 h 的字干不像 n 的顶端衬线一样容易调节。

这就是为什么在这里常规的、固定不变的部件对我们没有用处。我们需要一个更好的解决方案。

设置智能字符形

我们需要把字肩转换为一个“智能字符形”。双击 n 的字肩来选择它。然后右键单击,呼出上下文菜单,选择“将所选内容转为部件”:

当你被要求输入“部件字符形名称”时,输入一个由 _part 开头的名称,因为这是一个可以在其他字符形中复用的部件(part)。而且,由下划线开头的字符形会被默认设置为不导出,这对我们而言是有意义的。假定你的字体中会有不止一个智能部件,你需要以“点后缀名”结尾。在本例中,我建议用 .shoulder

这样会创建一个名为 _part.shoulder 的字符形。让我们添加锚点,这样字肩部件可以与其他部件相连。首先,我们添加一个供后续部件连接于其上的锚点,这样就可以做 m 了。我们将它命名为 connect,然后对齐在字干的右边缘。

提示:除了 _part,你也可以用 _smart 作为智能部件名称的前缀。

然后我们还需要一个锚点,这样 _part.shoulder 可以和连接在前一个部件上。假设前一个部件中有一个 connect 锚点,那么相应的锚点一定要命名为前面加上下划线的 _connect。因为它们都需要位于同样的高度(即 y 坐标),我建议把锚点都放在基线上。做完之后,看上去应该像这样:

因为命名以 _part 开头,它被视作一个“智能字符形”。不过它现在还没有任何额外的图层,所以还并不智能。那么我们将当前图层复制两次,分别命名为 NarrowShoulderLowCrotch 。这些工作在右侧边栏(Cmd-Opt-P)中的“图层”面板中完成:

现在,你可以激活 NarrowShoulder 图层,微调使其稍稍紧缩:选中字肩的右半边,按住 Ctrl 和 Option 键,然后按左箭头。所选部分会向左移动,同时周边的手柄会成比例调节。同时再按住 Shift 以 10 单位为增量移动:

LowCrotch 图层上同样操作,不过这次是选中最左侧的两个节点,向下微移,得到较低的分叉。这样简单的微移应该仅作为开始,稍后你可以优化形状。

现在,保持 _part.shoulder 处于活跃状态,右击画布呼出上下文菜单,选择“显示智能字符形设定选项”。或者,执行“编辑 > 所选内容信息”(Cmd-Opt-I),效果相同。

在出现的对话框列表中,点击“+”按钮添加一条名为 shoulderWidth 的属性,“限制”处键入 0100 。属性名称和这两个数值基本上可以随意设置,不过“底部”值须小于“顶部”。使用你能够理解的数值,本例中,我用 0 代表字肩的最小宽度,100 代表最大宽度。

然后,再添加一条名为 crotchDepth 的属性,“限制”值设为 -1000。于我而言,-100 代表了最低的分叉位置,0 代表正常的分叉位置。

然后,前往这个对话框中的“图层”选项卡。在这里,你告诉 Glyphs 哪个图层对应哪个属性值。本例中,应该如下设置:

  • Regular:crotchDepth 0shoulderWidth 100
  • NarrowShoulder:crotchDepth 0shoulderWidth 0
  • LowCrotch:crotchDepth -100shoulderWidth 100

为所有图层设置好属性后,点击“OK”按钮确认对话框。

调节智能部件

现在,回到 h、m、n 之类的字符形中,你可以删掉字肩路径,通过“字符 > 添加部件”(Cmd-Shift-C),将 _part.shoulder 作为部件插入。

如果右键单击部件,在上下文菜单中选择“显示智能字符形设定选项”,或者选中部件后执行“编辑 > 所选内容信息”(Cmd-Opt-I),出现的将是一个带有滑块的对话框。使用滑块来为智能部件设置一个合适的插值:

为了能发挥锚点的作用,把字干转换为一个带有 connect 锚点的智能字符形会比较好。你或许也可以添加一个图层让顶部衬线的弯曲程度有所不同,这样你就可以得到不同角度的切口。不管怎样,_part.stem 看上去应该像这样:

通过锚点实现的自动对齐仅在全部由部件组成的字符形中有效。一旦该字符形中出现了常规路径,自动对齐则失效,锚点也会被无视。

现在,以小写 m 为例,首先摆好 _part.stem 部件,然后是两个 _part.shoulder。你可以看到它们在锚点处很好地连在一起。同样,你可以调节智能部件的参数:

用智能部件做汉字偏旁

智能部件的初衷是为设计 CJK 字符提供一种更好的方式。在中国、日本和韩国,一些字符会在另一些更复杂的字中重复出现。这样的字符被称作“偏旁”,其英文 radical 源于拉丁文 radix,意味着它们形成了其他字的“根基”。

因为这一原因,不仅命名以 _part 开头的字符形会被算作智能字符形,CJK 偏旁也会。

译者注:指 Unicode“康熙字典偏旁”2F00—2FDF 和 “CJK 偏旁增补”2E80—2EFF。当这些字符活跃时,右键单击画布,上下文菜单中也会出现“显示智能字符形设定选项”。不过不同于以 _part 开头的智能字符形,CJK 偏旁是默认导出的。

自然,在这些字符形中,智能部件的设定和会更加复杂:

通过边界框智能缩放

如果有名为 HeightWidth 的属性(注意首字母大写),你可以打开“显示 > 边界框”(Cmd-Opt-Shift-B),框上的手柄会直接控制 HeightWidth 属性:

相比那些糟糕的滑块,用这种方式调整智能部件的尺寸更加方便直观。

智能手柄

所以,宽度和高度可以考虑摆脱丑陋的滑块了,那么其他属性呢?好吧,现在就有:从 Glyphs 2.5 开始,你可以在智能部件中添加自定义手柄了!像这样操作:

在智能字符形的每个图层中,添加和属性同名的锚点,将其摆在一个合理的位置。看下面这个 CJK 偏旁中的两个智能图层,注意其中“Right Arm”锚点的位置:

确保锚点名称和属性名称完全相同。你不需要为所有属性都添加同名锚点,但是一旦添加了,就要在所有图层中出现。然后,在智能部件上,Glyphs 就会显示出可以拖拽的手柄,用以代替属性滑块。

挺酷的吧,嗯?


示例字体:Vesper,谨感谢 Rob Keller 和 Kimya Gandhi 提供。
2017-12-11 更新:添加 _smart 也可用于名称的说明。添加智能缩放和智能手柄。
2018-12-07 更新:改正录入错误,是“高度”而不是“字重”。嘿呀。(英文原文 Height 和 Weight 仅一字之差,且也指“身高”和“体重”。)

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