创建阿拉伯文字体

教程
作者:Rainer Erich Scheichelbauer
en zh

8 September 2017 Published on 6 October 2012

Been looking for a quick and easy introduction to Arabic in Glyphs? This is it.

从独立字母开始

和其他语言一样,要将阿拉伯文字符形加入你的字体,可以单击左侧边栏中的 “语言” 条目并右键单击你想添加的组:

选择你想要添加的字符形,或直接全选,然后点击 “生成”。你会发现 Glyphs 使用人类可读的名称比如 alef-ar,而不是 “uni0627” 或 “afii57415”。你可能已经猜到了,-ar 后缀表明该字符形属于阿拉伯文种。(万一你在担心的话:Glyphs 会在导出的时候将这些名称替换为合适的对应名称。)

创建了这些字符形之后,你就可以开工在其中添上阿拉伯字母的独立形了。有时,你会发现某个字符形是由部件构成的,比如 beh-ar

本例中,我停用了自动对齐,用鼠标拖动来将两个部件占位符分开。这时,它们指向空字符形,因此你看到它们写着 “empty base glyph”。如果你点击这些占位符,信息面板中会显示它们所指向的字符形:

你看,其中一个是 dotlessbeh-ar,另一个是 dotbelow-ar。现在,它们还是缺失的,但你可以通过双击 “Missing Base Glyph” 占位符来创建它们。我们从 dotlessbeh-ar 开始,这是不带点的 beh 字母。只要绘制弓形笔画,在灰色信息面板中设置字宽,并通过 “字符 > 设定锚点”(Cmd-U)添加相应的锚点。Glyphs 会自动添加一个 “top” 锚点和一个 “bottom” 锚点。锚点指示点状笔画所连接的位置。“top” 锚点可能太高了,你可以通过拖动来轻松修正它们的位置。最终,你的 dotlessbeh-ar 看上去差不多是这样:

现在,我们对 dotbelow-ar 做同样的事情。在基线以下绘制点状笔画,并再次让 Glyphs 设定锚点。这次,我们得到了一个前面带下划线(“_”)的 “_bottom” 锚点。发音符号中(带下划线)的 “_bottom” 锚点会连接到基础字母中(不带下划线)的 “bottom” 锚点。这样,我们就可以将其他字符形作为部件来组装字母,就像乐高砖块一样。

不管怎么说,最后你的 dotbelow-ar 看上去差不多会是这样的:

现在,因为我们的 beh-ar 已经有了指向 dotlessbeh-ar 的部件和指向 dotbelow-ar 的部件,我很好奇我们的 beh-ar 看上去会是什么样:

哇哦,还不错!图形是灰色的,代表它们是指向其他字符形的部件。如果你修改了那些原始字符形,部件也会随之改变。你看,部件的效果很像 Mac 上的 “替身”Unix 中的 “链接”

当然了,这只是一个字母。和你想象的一样,对于其他字母而言做法相似,那些部件也可以在其他字母中复用。比如,dotlessbeh-ar 可以是 teh-artheh-ar 等等字母中的部件。

添加词首、词中和词尾形式

你知道,阿拉伯文从右向左数写,多数字母都是互相连接的。这意味着,字母必须根据其在单词中的位置改变造型。如果位于开头,就需要是词首形,在当中是词中形,如果在单词末尾,就应该是词尾形。到目前为止,我们只有独立形,即,脱离单词环境之外的字母形式。

技术上来说,这相当复杂,因为字体必须根据上下文切换字符形。这意味着大量的变体字符形和特性代码,另外字母必须被设计成能够轻易连起来的方式。听上去是很多很多工作……不过别灰心,因为这次,Glyphs 也能帮你做很多很多。

让我们只看 beh-ar 这个例子。我们已经创建了独立形,称之为 beh-ar。到目前为止都还不错。要想创建词首词中词尾造型,我们在字体中添加这些字符形:

beh-ar.init
beh-ar.medi
beh-ar.fina

你可以将上面的字符形名称拷贝到剪贴板,选择 “字符 > 添加字符形…”(Cmd-Shift-G)然后将它们粘贴到出现的文本框中:

点击 “生成” 后,你的字体就会包含 beh-ar词首词中词尾形式。好消息是,它们同样都是由部件构建的。而且 dotbelow-ar 刚刚已经完成了!很棒,这节省了我们一半的工作量。现在,我么需要做的只有构建不带点的 dotlessbeh-ar.initdotlessbeh-ar.medidotlessbeh-ar.fina,摆好 “top” 和 “bottom” 锚点的位置,最后我们会得到像这样的东西:

让我们打开编辑标签页并输入三次 beh-ar,然后(重要!)点击窗口右下角的 “从右至左” 按钮:

很酷,使用是正确的造型了。不过,字母之间还没有连接。怎么解决呢?

使字母连接

如果我们像之前在点状笔画上所做的一样添加锚点,但这次是在笔画的首尾添加,然后告诉字体在这些锚点的位置将字母相连,这是不是会很好?

嗯,确实如此,咳咳,我们确实可以这样做,哈哈!

我们只需要在 beh-ar.init 中,右键单击并在上下文菜单中选择 “添加锚点”。然后,我们将新锚点移动到笔画末端,并在灰色信息面板中将其重命名为 exit。差不多就像这样:

在中间形中,我们同样在笔画末端添加一个 exit 锚点,同时也在首端添加一个 entry 锚点:

然后,你就猜到了,在词尾形中,我们只在笔画首端天加一个 entry 锚点:

这样,我们就可以测试三个连写的 beh-ar 了。同样,别忘了切换到从右至左的书写方向,否则就不会有效果。就这样:

搞定!顺便说,我们使用 entryexit 点的技术称作 “连写对位”。

合字及其后缀名

关于合字再说一句。技术上讲,合字是对于其他字符形(通常是字母)的替换。被替换的字符形以一种简单的方式体现在合字的名称中:以下划线相连。所以,例如,xyz 的合字被称作 x_y_z。在此之后再接文种后缀,对于阿拉伯文而言就是 -ar再之后接可选的点后缀名,通常是四个字母的 OpenType 特性标签,比如 .ss01。所以,我们合字的名称有一个基本的结构:字符形1_字符形2-某文种.后缀名,这意味着这个合字用于替换属于 某文种字符形1 字符形2 序列,由 后缀名 所指示的 OpenType 特性机制触发。

当然了,在阿拉伯文中,合字也显然需要带有所出现的位置。换句话说,一个合字可能是词首、词中、词尾或是独立形,就像其他字母一样。现在,让我们按照逻辑:

  • 词首合字必须替换一个词首字符形后接一个或多个词中字符形。这是合理的,因为词首合字必须位于单词开头,因此所替换的第一个字符形也必须是词首形。但是词首合字必须和后面跟着的内容相连,这意味着所替换的第二个字符形也需要和什么相连,因此它必须是词中形。所以 xxx_yyy-ar.init 用来替换 xxx-ar.init yyy-ar.medi
  • 按同样的逻辑,词中合字必须由词中字符形组成。换句话说,xxx_yyy-ar.medi 替换 xxx-ar.medi yyy-ar.medi
  • 词尾合字必须包含一个以上的词中字符形,以词尾形结尾。这意味着,xxx_yyy-ar.fina 替换 xxx-ar.medi yyy-ar.fina
  • 独立合字必须以词首形开始、以词尾形结束。所以,xxx_yyy-ar.isol 后缀是可有可无的)替换 xxx-ar.init yyy-ar.fina。特例:如果替换三个以上的字符形,当中的那些必须是词中形。这意味着:xxx_yyy_zzz-ar 替换 xxx-ar.init yyy-ar.medi zzz-ar.fina

我知道这个初看上去有点麻烦,不过一旦你掌握了窍门,它就显得很有道理了。总结一下,以下就是 OpenType 特性代码中所表达的上述全部内容:

# 词首合字:
sub xxx-ar.init yyy-ar.medi by xxx_yyy-ar.init;
sub xxx-ar.init yyy-ar.medi zzz-ar.medi by xxx_yyy_zzz-ar.init;

# 词中合字:
sub xxx-ar.medi yyy-ar.medi by xxx_yyy-ar.medi;
sub xxx-ar.medi yyy-ar.medi zzz-ar.medi by xxx_yyy_zzz-ar.medi;

# 词尾合字:
sub xxx-ar.medi yyy-ar.fina by xxx_yyy-ar.fina;
sub xxx-ar.medi yyy-ar.medi zzz-ar.fina by xxx_yyy_zzz-ar.fina;

# 独立合字:
sub xxx-ar.init yyy-ar.fina by xxx_yyy-ar; # .isol 后缀名可有可无
sub xxx-ar.init yyy-ar.medi zzz-ar.fina by xxx_yyy_zzz-ar; # .isol 后缀名可有可无

现在,在我讲完了这些东西之后,有一个好消息要告诉你:Glyphs 可以自动创建位置合字的特性代码。哈哈!当然了,这需要你的字体中包含所有的字符形,软件才会为你生成代码。但现在你知道了它的工作原理,以及如何为你的阿拉伯文合字命名,这对你来说就是小菜一碟了。

更多字母

当然了,除了 beh-ar 之外还有更多的阿拉伯文字母。你可以在一些地方找到很棒的说明。注意,不是所有字母都有四种不同的造型(独立、词首、词中、词尾)。许多字体的例子中,使用了另一种字母连接的方式,而没有用到上面介绍的 “连写对位”。

再一次,Glyphs 可以帮你做很多。只需打开 “窗口 > 字符形信息” 并在搜索框中键入 -ar.init-ar.medi-ar.fina。要想找到所有字母变体,搜索 -ar. 等等。你懂的。

起步就这么简单。当然了,还有更多的内容,我们将在不久的将来讨论它们。与此同时,不妨尝试一下阿拉伯字母的设计。


示例字体:Salom by Igor Labudovic
2012-10-07 更新:删去了一个多余段落。
2016-02-19 更新:更新到 Glyphs 2 截图。
2017-09-08 更新:更换了一个错误的截图。
2020-03-25 更新:更换了标题。
2020-04-08 更新:添加了关于合字的章节。

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