正确地为字符形命名

教程
作者:Rainer Erich Scheichelbauer
en fr zh

21 九月 2015 发布日期: 14 八月 2012

如果你的字符形名称很糟糕(硬核玩家会称其 “非法”),那么你的字体可能无法正确编译,或是导致其他各种不兼容的问题。所以,确保你的字符形名称正确会比较好。

事实上,Glyphs 会检查你在 “字符形名称” 中输入的内容,首先就避免了可能出现的问题。比如,如果你输入了 ä,那么它会被自动转换为 adieresis。如果你设法跨过了这道检测,Glyphs 便会抱怨:

不过,如果你打开一款字体,而它是由某个不检查字符形名称的软件所创建的,你最终的 Glyphs 文件中还是会出现非法名称。如果你遇到了这种情况,那么本文便是为你写就。

友好名称

Glyphs 遵循自己的命名规则,尤其是对于西里尔字母、阿拉伯字母等非拉丁文种。我们称它为 “友好名称”,因为我们相信 beh-arZhe-cyafii57416uni0416 直观得多。在 “窗口 > 字符形信息” 中,可以看到标注了描述性名称的字符形列表:

如你所见,这里有一个 “添加至字体” 按钮。当然,你也可以一次选择多个,只需按住 Shift 键点击来连续选择,或者按住 Cmd 键点击来逐个选择。

产品名称

上述友好名称仅在 Glyphs 内部处理。在导出的 OpenType 字体文件中,应用程序所希望处理和最终在你字体中展示的是不同的字符形名称:我们称之为 “产品名称”。产品名称遵循 Adobe 字符形列表技术文档,简称 “AGL”。事实上,Glyphs 使用的友好名称在某种程度上是基于 AGL 的。

AGL 在历史中成长,并定义了许多字符形(主要是拉丁和希腊字母)的名称。超出 AGL 范围的所有内容都应标记为 uni,后接它所映射 Unicode 值的四位十六进制代码。 例如 uni2AC0 代表 ⫀(Glyphs 中的友好名称:supersetWithPlusSignBelow)。映射到增补平面的字符形,即有 5 位和 6 位 Unicode 值的字符形,仅以 u 为前缀,例如 u1F381 代表 🎁(友好名称:wrappedPresent)。

Glyphs 会在导出时自动进行名称转换,除非你启用了 “文件 > 字体信息 > 其他设定 > 使用自定义命名”。如果该选项启用,就不会发生名称换转,归你控制。除非你有一个很好的理由这样做,否则我们建议保持取消勾选这一复选框,让 Glyphs 施展其魔法。

如果你想知道某个特定字符形的产品名称,看一下它的信息即可。前往字体视图(Cmd-Opt-1),选择一个字符形,并选择 “编辑 > 所选内容信息”(Cmd-Opt-I):

本例中,产品名称为 uni1E9E,符合字符形的指定 Unicode 值。某些字符形的产品名称会显示为空白框,这种情况下,友好名称和产品名称相同。否则就会被转换。

更新字符形信息

要修正字符形名称,第一步最好是 “字体 > 更新字符形信息”。这一操作会尝试将 Unicode 值和字符形名称相同步,字符形名称会被重置为 Glyphs 内置数据库中所记录的默认名称(见下文)。不过,如果你应用了自定义字符形数据,转换过过程中会保留这些内容。

如果你要导入现有字体,你可能需要检查两个设置:第一,全局设置 “Glyphs > 偏好设置 > 用户设置 > 保留导入文件的字符形名称”。如果该选项打开,新导入的文件中将自动打开仅在本字体中生效的 “文件 > 字体信息 > 其他设置 > 使用自定义名称”。当启用了这些设置时,将禁止转换为优化名称。如果你采用了与众不同的特殊工作流程,这将非常有用。

Unicode 特征

有时候,你想让自己的字符形和某个确定的 Unicode 字符相对应,而这个字符在 “字符形信息” 中没有记录。一个典型的例子是 “私用区”(Private Use Areas,PUA)中的字符。在这种情况下,将字符形名称以 uni 开头,后接十六进制编码(字母用大写),例如 uniE000。顺便说,一旦设置了 Unicode 值,你就可以将字符形命名为你认为有意义的任何名称,例如 twitterIcon。私用区的 Unicode 值会和新名称一同保留。

对于那些对应基本多文种平面之外的 Unicode 的字符形,名称会以 u 开头,后接 5 位编码。例如,U+10102 AEGEAN CHECK MARK 的字符形将被命名为 u10102

译者注:基本多文种平面(Basic Multilingual Plane,BMP),是 Unicode 中的一个编码区段,从 U+0000 至 U+FFFF,即 4 位十六进制编码。我们常用的中外文字和符号大都位于这一区段上。

应用自定义名称

但是,如果你一定要创建自定义的字符形名称,最好是要遵循以下命名方案。只要是需要被导出的字符形,其名称中的第一个字符必须是以下字符之一:

ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz

就是这样了。如果你的第一个字符不是其中之一,你的字符形名称很可能是非法的。字体警察会过来把你铐起来,但更惨的是,你的字体无法被正确编译。

不过,有两个例外。第一,不可见(不导出)的字符形名称可以以下划线开头,详见下文。第二,.notdef,用于替换文本中未定义字符的替代字符形。通常是一个带 X 或是 ? 的方块(译者注:即所谓 “豆腐块”),或者如果你不做特别设计的话,Glyphs 会默认使用这个图形:

所以,看我口型:不要用声调符号、不要用变音标记、不要用时髦的韩文字母,只用普通的 ASCII 字母。是字母,所以也没有数字,尤其不要用空格、逗号、连字符,或者任何标点符号。只有普通的大写 A 到 Z 或小写 a 到 z。

字符名称中剩下的部分,你还可以使用以下字符之一:

1234567890 (数字)
_ (下划线)
. (句点)
- (连字符)

就是这样。再说一遍,不用空格、不用声调、不用任何花哨的东西。不过请看,这其中的某些符号具有特殊含义。

下划线

下划线 _ 用于合字。合字中的每个字母的字符形名称由下划线连接,因此,下划线之间的部分应该是正确的字符形名称,就像在 “字符形信息” 面板中所出现的一样。

我知道这听上去很复杂,但其实很简单。假设你有一个 fh 的合字,那么这个合字的名称即为 f_h。 如果一个 fadieresis(ä)的合字?那么合字的名称应该叫——你猜对了,f_adieresis。想要把自己的名字做成一个合字?那就用 M_a_r_yP_e_t_e_r,或随便你叫什么名字。如果你严格按照这一规则操作,Glyphs 甚至可以为你建立相应的 OpenType 合字特性。

自动特性生成会把大部分合字放在 dlig(风格合字)中,你可以通过 .liga 后缀名强制将合字放在 liga(标准合字)里。例如 f_adieresis.liga。阅读合字教程了解更多内容。

在 “字符形 > 添加字符形”(Shift-Cmd-G)中,指定名称以下划线开头,这样生成的字符形默认不导出。因此,以下划线开头的名称被用于一些特殊的字符形上,比如智能字符形角部件特殊部件技巧之类。

句点

句点 . 用于在字符形名称中添加描述性的扩展名。在很多情况下,扩展名会是该字符形所应该出现于其中的 OpenType 特性名称,比如 e.ss01 用于小写字母 e 在第一套风格组合(Stylistic Set 01)中的变体。

如果句点之前的部分是 “窗口 > 字符形信息” 中的有效字符形名称,那么 Glyphs 会将其链接到一个字符。这意味着你的字体在某些特殊情况下的表现会更好,比如从使用该字体的 PDF 文件中拷贝文本的时候。

同样,你也可以通过 .loclXXX 后缀来制作某一字符形的地区版本,其中 XXX 代表语言系统标签。例如 adieresis.loclSVE 用作瑞典语的小写 ä,oacute.loclPLK 用作波兰语的小写 ó。然后,Glyphs 可以自动处理 locl 特性。

某些情况下,字符形后缀名和 OpenType 特性标签之间的关系更为复杂,而非简单的一一对应。比如,.sc 会同时触发两个小型大写字母特性smcpc2sc。而 .osf.tosf.lf 以及 .tf 这四个后缀中任意三个的组合会触发相关的数字特性。Glyphs 能够通过字符形的巧妙命名自动生成一些 OpenType 特性,要查看其完整列表,请查阅 Glyphs 使用手册,其英文版可以从开始页面免费下载。

连字符

Glyphs 使用连字符 - 来附加某种文字系统,例如 -cy 对应西里尔文,-ar 对应阿拉伯文,-deva 对应天城文,等等。当然了,我最喜欢的要数 -phaistosDisc原因在此。(译者注:斐斯托斯圆盘文字,是一种尚未被解读出来的古文字,由花鸟鱼虫等符号组成,已被 Unicode 编码。)打开 “字符形信息” 面板,在搜索栏中键入一个连字符,即可查看其中都有哪些文字,你一定可以理解的。


2012-09-21 更新:添加关于非基本多文种平面 Unicode 编码的内容。
2015-09-21 更新:更新为 Glyphs 2。
2016-12-06 更新:更新截图,修正录入错误,部分重写。
2019-07-06 更新:更新 AGL 链接,感谢 Norbert Lindenberg。
2019-08-07 更新:修正录入错误,感谢 Nathalie Dumont。
2020-03-21 更新:添加了关于产品名称和 AGL 的一节,修改了第一段的措辞,细小的格式修改。
2020-09-06 更新:将 “产品名称” 一节中 “超出此范围” 改为 “超出 AGL 范围”。

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