创建全大写字体

教程
作者:Rainer Erich Scheichelbauer
en fr zh

13 四月 2018 发布日期: 12 四月 2018

In an all-cap font, the same capital letter should appear whether the user types the key for the lowercase or the uppercase. Read the following easy step-by-step tutorial to make this happen.

全大写字体的关键在于,无论用户键入的是小写字母还是大写字母,它应该总是生成大写字母的字符形。

计算机通过 Unicode 值来区分字母(因此也区分大小写)。例如,大写字母 K 的 Unicode 值为 U+004B,而相应的小写 K 则表示为 U+006B

如果你想知道 U+ 是什么意思:它是 Unicode 十六进制编码的标志。最重要的编码是那些位于所谓“基本多文种平面”(BMP)上的编码,它们由四位十六进制数码组成,从 U+0000U+FFFF 共 65,536 个码位,包含了所有现代书写系统中的字符。阅读这篇教程来了解更多关于 Unicode 的内容。

字体中的字符形可以通过其 Unicode 值来调用,或者对于带有“点后缀名”的字符形,通过 OpenType 替换特性来调用——这样的特性可以将带有 Unicode 值的字符形替换为相关联的、没有 Unicode 值的字符形。通常而言,带有 Unicode 值的字符形能够被键入(也就是说,通过合适的键盘布局),或者作为文本而被复制粘贴。

双 Unicode 码

幸运的是,自从 Glyphs 2.5 版本开始,你可以为每个字符形指定多个 Unicode 值。你甚至可以通过一次操作来让 Glyphs 自动为它们指定:

  1. 在字体试图(Cmd-Opt-1)中,前往左侧边栏并选择“类别 > 字母 > 小写”。
  2. 选择全部字符形(“编辑 > 全选”,Cmd-A)。
  3. 选择“字符 > 移除字符形”(Cmd-Delete)。确认弹出的对话框:
Remove Glyphs dialog
This is the dialog you will see after selecting glyphs in Font View (Cmd-Opt-1) and pressing Cmd-Delete.
  1. 在左侧边栏中,选择“类别 > 字母 > 大写”。
  2. 再次全选字符形(“编辑 > 全选”,Cmd-A)。
  3. 选择“字符 > 更新字符形信息”。

现在,所有大写字母都应该被指定了两个 Unicode 值:它原来大写的 Unicode 值,加上相应的小写值。

带点的 i 的难处

不过,大小写字母之间的关系在不同语言中并不相同。在土耳其的语言,包括土耳其语、阿塞拜疆语和鞑靼语中,小写(不带点的)ı 对应的是大写(不带点的)I,小写(带点的)i 对应大写(带点的 )İ,而在非土耳其语言,包括法语、英语、西班牙语和德语中,小写(带点的)i 对应的是大写(不带点的)I。

这样,逻辑上的问题就来了:哪个大写字母应该被指定小写(带点的)i 的 Unicode 值?如果你的答案是 I,那么你的字体就不兼容土耳其语言。如果是 Idotaccent,它就不兼容使用拉丁字母的非土耳其语言。这就很难选择。

不过别怕,有一种办法可用。为了同时支持土耳其和非土耳其语言(至少在支持 Opentype 和语言区分的应用程序,例如 Adobe 软件中),我们需要保留以下三个小写的 i 字符:i,“不带点的 i”idotless 以及“带点标符的 i” idotaccent。选择“字符 > 添加字符形…”(Cmd-Shift-G)并在弹出的对话框中运行这个配方

I=i
I=idotless
Idotaccent=idotaccent

换句话说,在全大写字体中,原本的小写 iidotless“ı” 中应该是不带点的大写 I,而“带点标符的 i” idotaccent中则是带点的大写 İ,就像这样:

然后执行“文件 > 字体信息 > 特性”并点击“更新”按钮,Glyphs 会插入一条 locl 特性,在语言被设置为土耳其语、阿塞拜疆语和鞑靼语等的情况下,将 i 替换为 idotaccent。并且,大小写字母间的适当关系也得以保留。

特性和字符集

别忘了在“文件 > 字体信息 > 特性”(Cmd-I)中更新自动和手动的 OpenType 特性。有些特性在没有小写字母的情况下将不再有意义,比如 casecpsp,请考虑删除它们。

你可能也要重新考虑一下字符集。全大写字体通常不需要老式数字,齐行数字可能也不需要做高度补正,和大写字母一样高就可以。或许还要重新考虑圆括号、方括号和花括号的设计。引号、破折号、竖线和斜杠也只需要匹配大写字母即可。

量度设置

如果你把一款大小写组合的字体转换为全大写,并且设置了 cpsp 特性来增大字距,你可能会想要把这额外的字距整合进每个字母的左右边距。这一设置只需要应用在包含路径的大写字母字符形中。对于由部件组成的字符形,如果你开启了自动对齐,那么它们也会自动随之增大边距。做法如下:

  1. 在字体视图中(Cmd-Opt-1),打开左下角的齿轮菜单,并选择“添加智能过滤器”。
  2. 在“智能过滤器”选项中,取一个合适的名字,然后添加条件“路径数量:多于 0”以及“分类:是文字”,并点击“OK”确认。
  3. 确保智能过滤器选中,并全选视图中的字符形(Cmd-A)。
  4. 在“滤镜 > 变换 > 量度”中,选择“相对”选项,并为字符形添加你的 cpsp 增量(通常是 5 或 10 单位这样的数值)。点击“OK”确认。

现在你的大写字母就增加了所需要的边距设置。

专业提示:你或许需要复查一下是否有未对齐的部件,以防变音符号发生偏移,以及右侧边距可能和预想中有差异。同样,你可以使用智能过滤器查明问题所在。这次使用选项“部件数量:多于 0”以及“完成自动对齐:否”。

垂直量度

在“文件 > 字体信息 > 字体母版”(Cmd-I)中,你可以删去 x 高度线、上升部和下降部线处的“对齐区域”。你的“标准字干宽度”只需要和大写字母字干匹配即可。

不过,还是要保留“上升部”和“下降部”的值,因为它们会被用于生成垂直量度的数值,写入相应的 OpenType 字体表 OS/2hhea 中(参见垂直量度教程来了解更多)。最好将其设置为字体母版中最高和最低的边界框数值,尤其是在带有变音符号的字幕上,比如 Ccedilla Ç 和 Ohungarumlaut Ő。

双编码的问题

尽管双编码可以减小文件大小,但在特定的 PDF 工作流中也存在一个问题。从 PDF 中复制选定的文本可能导致剪贴板中字符流的大小写混乱,像这样:coPiED tExt caN END uP looKiNg liKE tHiS。除非 PDF 是通过特定的方式创建的(提示:不通过 Acrobat Distiller)且文字提取也通过特定方式,否则就可能出现上面的结果。不要担心,这只会影响剪贴板中的文本,PDF 中的显示不会有问题。重复一遍,从 PDF 中提取文本可能会出些差错,如果这对你来说问题不大,那么就没什么事了。

否则,你唯一的选择便是为小写字母复制一套字符形。最好的办法是通过在“字符 > 添加字符形…”中运行单一组件的配方将大写字母作为组件放入副本中,如字符形配方的教程所述。


2018-04-24 更新:添加“问题”一节。感谢 Aaron Bell、Khaled Hosny 和 John Hudson。
2018-06-29 更新:添加“带点的 i 的难处”一节。感谢 Mark Richardson(@superfried)。
2018-02-21 更新:更正录入错误。

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