排除字体无法导出的故障

教程
作者:Rainer Erich Scheichelbauer
en fr zh

24 一月 2020 发布日期: 12 六月 2013

Sometimes, you try to export a font but instead you get weird error messages. Here is how to fix that.

这种情况时有发生:你试图通过 “文件 > 导出” 导出一款字体,但是只得到了一个奇怪的报错信息,写着 “makeotfGlyphs”。哈?

现在,这意味着软件内建的 makeotf 命令(你可能已经猜到了,它用于生成 OTF 文件)被所提供的字体数据卡住了。造成此问题的最可能原因是字符形名称有误。但是要找出问题的确切原因,我们需要自己运行一下 makeotf 命令,看看发生了什么。

为此,你只需点击报错对话框的 “详细” 按钮。你会被直接带去字当前体工程文件的 Temp 文件夹。你可以跳过后面两段内容。

或者、如果你的对话框上没有 “详细” 按钮,我们需要前往 ~/Application Support/Glyphs/Temp/。最快的办法是通过 “脚本 > 打开脚本文件夹” 命令。Glyphs 会在访达中打开这个文件夹。啊实际上,是打开了它的上层文件夹,Glyphs 的 Application Support 文件夹。在这里,你可以看到很多东西:除了 Scripts 文件夹外,还可能有 Plugins 和 Info 文件夹。但我们现在感兴趣的,是 Temp 文件夹。

现在,在 Temp 文件夹中,你会看到 OTF 文件以及一系列子文件夹,包含你最近的字体项目,整齐地整理在子文件夹中。每个文件夹中包含大量对于生成 OTF 非常重要的文件。其中之一是你刚刚试图导出的字体的临时文件夹。提示:按修改日期整理文件会很有帮助。

字体的临时文件夹中有一个文件名为 generateFont.command

双击它,你的 “终端” 会打开。在终端中,makeotf 命令会弹出各种通知,记录你 OTF 的产生过程。你可以跳过备注和警告,但要寻找以 [FATAL] 开头的那些行。这些是阻止了字体文件生成的 “致命” 错误。通常在输出末尾左右,在 [Process completed] 上面,你会看到类似以下的内容:

本例中,[FATAL] 这行中说,“multiple glyphs euro Euro mapped to code 20ac”。意思是字体里有两个欧元符号,一个叫 euro,另一个叫 Euro,它们都有 20AC 这个 Unicode 值。现在你知道该做什么了:回到 Glyphs 中,并删掉其中一个欧元符号,然后再导出一遍。

当然了,你的实际情况可能会大有不同。另外,我们一直在努力让 Glyphs 能够为你提供描述性的错误消息。Glyphs 手册中也有一个详细的 “Error Handling” 章节,描述了可能出现的各种消息。

Subtable 溢出

有时你会收到一条错误信息,关于 “GPOS Subtable 溢出”。这里 GPOS 是存储 “字符形位置” 信息的 OpenType 表,如其名所示。其中包含字偶距和标符位置。可能产生这一错误最可能的原因是,你的字偶距对过多,或是字偶距群组过大,以及组中例外字偶距或例外组过多。

有几种方式来解决这一问题。按顺序尝试这些步骤,直到可以正常导出:

  1. 向 “文件 > 字体信息 > 字体 > 自定义参数” 中添加名为 Use Extension Kerning 的自定义参数并将其启用。
  2. 如果可以,去掉 markmkmk 特性,它们是用于存储结合标符位置信息的。不要担心,这并不会影响你的组合字符形。在 “文件 > 字体信息 > 子样” 中,对于无法导出的每个子样,都添加名为 Remove Features 的自定义参数。点击其 “值”,并在不同行中添加 markmkmk
  3. 前往 “窗口 > 字偶距”,着手删掉一些字偶距对。,可能从齿轮菜单中合并一些。考虑使用 mekkablue 脚本中的 “Kerning” 子菜单。这里有一系列以 “Remove Kerning” 开头的脚本,可能对你有所帮助。

祝你好运。

一直在导出个没完

你在导出对话框中一直转个不停?比如说,已经等了好几分钟?

有可能是因为你在导出一个带有复杂轮廓的 CFF 字体。最有可能导致导出不停的原因是轮廓的子程序化,它仅在简单整洁的结构中才能良好而有效地运作。在 “文件 > 字体信息 > 字体” 使用一个名为 Disable Subroutines 的简单自定义参数,并启用其值,即可解决问题。

不论如何,去阅读一下关于复杂轮廓的教程,看看能不能找到更方便的提示。

MakeOTF 句法错误

OpenType 特性代码中的句法错误是一类特殊情形。尤其是你在 “文件 > 字体信息 > 特性” 中有着过时的或手动的代码,你可能会得到题为 “MakeOTF 错误” 的对话框,指出包括错误代码的某一行:

如果你的对话框中有 “显示” 按钮,点击它。Glyphs 会带你前往特性代码中可能出问题的点。如果代码是自动生成的(即,“自动生成特性” 的选项为打开),尝试一下 “字体信息 > 特性” 窗口底部的 “更新” 和 “编译” 按钮。如果这不能解决问题,或者你有手动的特性代码,你就必须要细看一下错误信息说了什么(同样,手册中的 “Error Handling” 一节也会对此大有帮助),以及错误信息具体指向哪一点

但是请当心:MakeOTF 错误信息有时会缺少出问题的点。如果它指出了出问题的点,比如说 “句法错误,位于 "Udieresisgrave" 在 Class Uppercase”,显然,你需要看一下 Udieresisgrave 中是否有可疑之处。这个字符形是不是真的存在?它是否被设定为导出?是否有恰当的 Unicode 值?但是如果你在有问题的字符形中找不到任何错误,有可能是问题出现在与它相临的前一个字符形中。所以,在 Udieresisgrave 之前提到的字符形又怎样?是不是存在不对的句法,比如缺少分号或方括号?有非 ASCII 字符?甚至有可能是有不可见的字符,尤其是当这一行代码以所提到的字符形名称开始时。

你看,它可能是任何情况,但至少你知道要从哪里看。


2016-12-30 更新:添加了关于 “详细” 按钮的备注,以及关于 MakeOTF 句法错误的一节。
2020-01-24 更新:添加了 “Subtable 溢出” 和 “一直在导出个没完”。
2020-02-10 更新:修正录入错误(删除了单词 “very own”),将单词 “Overflow” 改为 “Overview”,更正了手册链接。

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