正确地为字符形命名
如果你的字符形名称很糟糕(硬核玩家会称其 “非法”),那么你的字体可能无法正确编译,或是导致其他各种不兼容的问题。所以,确保你的字符形名称正确会比较好。
事实上,Glyphs 会检查你在 “字符形名称” 中输入的内容,首先就避免了可能出现的问题。比如,如果你输入了 ä
,那么它会被自动转换为 adieresis
。如果你设法跨过了这道检测,Glyphs 便会抱怨:
不过,如果你打开一款字体,而它是由某个不检查字符形名称的软件所创建的,你最终的 Glyphs 文件中还是会出现非法名称。如果你遇到了这种情况,那么本文便是为你写就。
友好名称
Glyphs 遵循自己的命名规则,尤其是对于西里尔字母、阿拉伯字母等非拉丁文种。我们称它为 “友好名称”,因为我们相信 beh-ar
和 Zhe-cy
比 afii57416
和 uni0416
直观得多。在 “窗口 > 字符形信息” 中,可以看到标注了描述性名称的字符形列表:
如你所见,这里有一个 “添加至字体” 按钮。当然,你也可以一次选择多个,只需按住 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 (数字)
_ (下划线)
. (句点)
- (连字符)
就是这样。再说一遍,不用空格、不用声调、不用任何花哨的东西。不过请看,这其中的某些符号具有特殊含义。
下划线
下划线 _
用于合字。合字中的每个字母的字符形名称由下划线连接,因此,下划线之间的部分应该是正确的字符形名称,就像在 “字符形信息” 面板中所出现的一样。
我知道这听上去很复杂,但其实很简单。假设你有一个 f
和 h
的合字,那么这个合字的名称即为 f_h
。 如果一个 f
和 adieresis
(ä)的合字?那么合字的名称应该叫——你猜对了,f_adieresis
。想要把自己的名字做成一个合字?那就用 M_a_r_y
或 P_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
会同时触发两个小型大写字母特性,smcp
和 c2sc
。而 .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 (三言).