如何验证与 XeLaTeX、fontspec 一起使用的字体

如何验证与 XeLaTeX、fontspec 一起使用的字体

我有以下最少的文档:

\documentclass{article}
\usepackage{fontspec}
\setmainfont{jizura3b}
\begin{document}
\end{document}

文档中的单个字符应使用所示字体显示;这是我自己创建的字体https://github.com/loveencounterflow/svgttf,进而使用https://github.com/fontello/svg2ttf将 SVG 文件转换为 TTF 字体。

确实,这在 OSX 和 Tex Live 2013 和 2014 上按预期工作;然而,在使用 Tex Live 2015 的 Ubuntu 上,我得到了核心转储:

This is XeTeX, Version 3.14159265-2.6-0.99992 (TeX Live 2015) (preloaded format=xelatex)
...
(/usr/local/texlive/2015/texmf-dist/tex/latex/fontspec/fontspec.cfg)))
(./test.aux) (/usr/local/texlive/2015/texmf-dist/tex/latex/tipa/t3cmr.fd)
[1] (./test.aux) )
Segmentation fault (core dumped)
(see the transcript file for additional information)
Error 35584 (driver return code) generating output;
file test.pdf may not be valid.
Transcript written on test.log.

通过谷歌搜索错误编号,35584确实会表明错误可能与字体有关,这正是我得出的结论,尽管 OSX 和 Ubuntu 字体查看器上的多个应用程序都能正常显示字体而没有错误。

另一方面,这不是我发现的第一个除了 XeLaTeX 之外在其他地方都能正常工作的字体。

假设 XeLaTeX(或 fontspec?)遇到字体问题,建议采取哪些步骤来测试问题出在 XeLaTeX/fontspec 还是字体上?

有关的:如何准确找出字体中的哪些细节导致 LaTeX 脱轨?

另外,我认为无论字体是否有效,LaTeX 都不应该出现段错误,而应该以有用的错误消息和错误代码终止。据我所知,没有发出任何错误代码,所以我的工具链一开始忽略了这个问题;唯一正式表明存在问题的迹象是Segmentation fault (core dumped)发送到了stderr,而不是stdout

答案1

@Thérèse 非常感谢你的提示!我等了一会儿,想看看是否会有更多人参与进来,但由于没有其他人参与,我只能报告我如何解决这个问题。

首先,用 替换xelatex确实luatex有效。但是,这样做的缺点是,luatex运行所需的时间比 长得多xelatex,因此我进一步研究并尝试了fontlint;基于此,我曾经fontforge修复过损坏的字体。为了进行比较,首先查看fontlint损坏字体和正常工作字体的输出:

$ fontlint <path to broken font>
Copyright (c) 2000-2012 by George Williams.
 Executable based on sources from 14:57 GMT 31-Jul-2012-ML.
 Library based on sources from 14:57 GMT 31-Jul-2012.
Missing required table: "post"
Validation jizura3b ...Failed
  Self Intersecting Glyph
  Wrong Direction
  Missing Points at Extrema

$ fontlint <path to working font>
Copyright (c) 2000-2012 by George Williams.
 Executable based on sources from 14:57 GMT 31-Jul-2012-ML.
 Library based on sources from 14:57 GMT 31-Jul-2012.
Validation jizura3b ...Failed
  Self Intersecting Glyph
  Wrong Direction
  Missing Points at Extrema

您可以看到,虽然报告了多个问题,但关键问题确实存在Missing required table: "post"(我真的很希望 FontForge 能够修复所有缺陷,但没能做到)。

现在让 FontForge 修复字体的最简单方法是用 FontForge 的脚本语言准备一个非常短的脚本,如下所示:

#!/usr/bin/fontforge -lang=ff
Print("Reading "+$1);
Open($1);
Generate($1:r + ".rewritten-by-fontforge.ttf");

以您喜欢的任何名称保存它,使文件可执行,使用损坏字体的路径调用它,然后就好了。

相关内容