使用 otftotfm 安装字体后出错 - “OS/2 表的未知版本 (0004)”

使用 otftotfm 安装字体后出错 - “OS/2 表的未知版本 (0004)”

我想在我的文档中使用名为 Lato 的开源 .TTF 字体。这是一组字体,可从以下网址免费下载:http://www.latofonts.com/

我尝试使用otftotfm以下参数来安装字体:

otftotfm -a -e ec  -fkern -fliga --verbose --vendor Lato Lato-Regular.ttf T1--Lato-Regular

之后我创建了一个名为的小fd文件t1lato.fd,内容如下:

\ProvidesFile{t1lato.fd}
   [2014/06/07 scalable font definitions for T1/Lato.]

\DeclareFontFamily{T1}{Lato}{}

\DeclareFontShape{T1}{Lato}{m}{n}{<-> T1--Lato--Regular}{}
\DeclareFontShape{T1}{Lato}{m}{it}{<->ssub * Lato/m/n}{}
\DeclareFontShape{T1}{Lato}{m}{sl}{<->ssub * Lato/m/n}{}
\DeclareFontShape{T1}{Lato}{m}{sc}{<->ssub * Lato/m/n}{}

\DeclareFontShape{T1}{Lato}{b}{n}{<->ssub * Lato/m/n}{}
\DeclareFontShape{T1}{Lato}{b}{it}{<->ssub * Lato/m/n}{}
\DeclareFontShape{T1}{Lato}{b}{sl}{<->ssub * Lato/m/n}{}
\DeclareFontShape{T1}{Lato}{b}{sc}{<->ssub * Lato/m/n}{}

\DeclareFontShape{T1}{Lato}{bx}{n}{<->ssub * Lato/m/n}{}
\DeclareFontShape{T1}{Lato}{bx}{it}{<->ssub * Lato/m/n}{}
\DeclareFontShape{T1}{Lato}{bx}{sl}{<->ssub * Lato/m/n}{}
\DeclareFontShape{T1}{Lato}{bx}{sc}{<->ssub * Lato/m/n}{}

\DeclareFontShape{T1}{Lato}{sb}{n}{<->ssub * Lato/m/n}{}
\DeclareFontShape{T1}{Lato}{sb}{it}{<->ssub * Lato/m/n}{}

\DeclareFontShape{T1}{Lato}{l}{n}{<->ssub * Lato/m/n}{}
\DeclareFontShape{T1}{Lato}{l}{it}{<->ssub * Lato/m/n}{}
\DeclareFontShape{T1}{Lato}{l}{sl}{<->ssub * Lato/m/n}{}
\DeclareFontShape{T1}{Lato}{l}{sc}{<->ssub * Lato/m/n}{}

\endinput

(老实说,我只想使用常规的罗马字体,只是为了完整起见,我提到了各种不同的字体形状。)

我制作了一个小测试文件lato.tex来测试结果:

\documentclass[a4paper,12pt]{article}

\usepackage[top=10mm,bottom=10mm,left=10mm,right=10mm]{geometry}

\usepackage[T1]{fontenc}

\usepackage{microtype}

\pdfmapfile{Lato.map}

\renewcommand\rmdefault{Lato}
\renewcommand\sfdefault{Lato}

\begin{document}

aaa \large  bbb
\end{document}

上述文件产生一个致命错误:

!pdfTeX error: pdflatex.exe (file .../.texlive2013/texmf-var/fonts/
truetype/Lato/Lato/Lato-Regular.ttf): unknown version of OS/2 table (0004)
 ==> Fatal error occurred, no output PDF file produced!

我找不到与该错误相关的太多信息。无论是在 TeX.SX 上,还是在谷歌上(我只得到与 Macintosh 电脑问题相关的结果)。结果很奇怪;对于我安装的任何其他字体,我总是能立即得到结果。我仍然想使用这种字体,但我不知道如何使用。有人知道这个问题的解决方案吗?

我希望fontspec尽可能避免使用 LuaLaTeX 和该软件包;否则我将不得不在主文档中更改十几种字体来代替fontspec(我使用相同的方法安装了这些字体,没有任何问题)。

答案1

TeX Live(以及根据 Bernard 的说法,还有 MiKTeX)具有完整的 Lato 字体分布,包括 Type1 和 TrueType。

对于pdflatex(Type1 字体),只需执行

\usepackage{lato}

使用 XeLaTeX 或 LuaLaTeX,只需加载字体即可fontspec

调试错误otftotfm可能相当困难,但由于我们已经有了字体包,所以它似乎没什么用。请注意,它otftotfm针对的是 OpenType 字体,而不是 TrueType 字体。


警告:如果你手动将地图文件添加到文档中,则应在文件名前加上+=(区别在于+会覆盖可能已存在于中的条目pdftex.map,而=会忽略附加地图文件中的重复条目),因此

\pdfmapfile{+GillSans.map}

例如。

答案2

我刚刚遇到了同样的错误,我真的很想知道发生了什么,所以这里(希望)是一个可重现的测试用例。(出于某种原因,在这个测试中,Lato 没有给出这个错误)。

在寻找这个的时候,我发现了一些不错的小应用程序,称为ttfencinstafmtoenc(通过[电子邮件保护]邮件列表存档:回复:新 Новые версии шрифтов Хартия и Эвристика[电子邮件保护]邮件列表存档:回复:回复:如何使用 XeTeX,或者其他人?),我将在这里使用它。

这是测试的第一部分:下载字体和应用程序,运行 FontForge(版本 20100501)进行转换,并运行它们直至失败,以bash命令形式提供(在旧的 Ubuntu 11.04 上测试):

mkdir -p /tmp/fontest
cd /tmp/fontest

# Lato passes this without a problem
# wget -nc http://www.latofonts.com/download/Lato2OFL.zip
wget -nc http://dl.1001fonts.com/pecita.zip
unzip -n pecita.zip
if [ ! -f Pecita.ttf ]; then
  fontforge -lang=ff -c 'Open($1); Generate($2)' Pecita.otf Pecita.ttf
fi

# this contains `ttfencinst` script, that uses `afmtoenc`
wget -nc http://litwr.narod.ru/afmtoenc-1.05.zip
unzip -n afmtoenc-1.05.zip
cd afmtoenc-1.05/
if [ ! -f afmtoenc ] ; then
  make # many warnings, but compiles
fi

# ttfencinst will only work with font in its directory
if [ ! -f Pecita.ttf ]; then
  cp ../Pecita.ttf .
fi
# call ttfencinst with a path specification:
PATH="$PWD:$PATH" ./ttfencinst Pecita.ttf T1

# here it should fail with:
# (./Pecita-T1.tex{/media/disk/texlive/2014/texmf-var/fonts/map/pdftex/updm
# ap/pdftex.map} [1] ){Pecita-T1.enc}<Pecita.ttf
# !pdfTeX error: pdftex (file Pecita.ttf): unknown version of OS/2 table (0004)

这时我发现回复:[Fontforge-devel] FontForge 生成的字体中的 OS/2 表值错误

我检查了这些特定的字体,因为我在用电子阅读器显示它们时遇到了问题。如果我没有弄错的话,电子阅读器中的 Adob​​e 软件似乎无法理解 OS/2 表格的第 4 版。

我可以将 OS/2 表版本中的版本 4 降级为 1 吗?我会失去什么?

您可以从字体信息对话框中的 OS/2 选项卡中进行设置,但如果这是问题所在,我会感到惊讶。

这里唯一的问题是找到这个“字体信息对话框”在哪里,因为http://fontforge.github.io/fontinfo.html只说“字体信息对话框在所有视图中都可用。”;这已经解决了,感谢使用 FontForge 进行设计:最终输出,生成字体文件

从“元素”菜单打开“字体信息”窗口。

因此,Pecita.ttf 在 FontForge 的“字体信息”中的样子如下:

fforge 的源代码

看到 OS/2 版本默认为 4 了吗?这是“未知版本的 OS/2 表 (0004)”中的“(0004)”。因此,只需从下拉菜单中将其设置为 3,然后单击“确定”。然后,不要单击文件/保存(或另存为),这会以 FontForge 的内部格式 ( .sfd) 保存;您需要的是文件/生成字体... - 并在保存之前确保文件名为 Pecita.ttf(出现警告时选择“是”,验证后在“检测到错误”上选择“保存”(无论如何)。

现在确保您已经替换了afmtoenc-1.05/文件夹中的 Pecita.ttf(您可能希望首先直接从 FontForge 进行保存);然后再次重新运行上述脚本(如果发现文件存在,它就不会下载等) - 这次您应该会收到一条成功关闭的消息:

(./Pecita-T1.tex{/media/disk/texlive/2014/texmf-var/fonts/map/pdftex/updm
ap/pdftex.map} [1] ){Pecita-T1.enc}<Pecita.ttf></media/disk/texlive/2014/
texmf-dist/fonts/type1/public/amsfonts/cm/cmbx10.pfb></media/disk/texlive
/2014/texmf-dist/fonts/type1/public/amsfonts/cm/cmtt12.pfb></media/disk/t
exlive/2014/texmf-dist/fonts/type1/public/amsfonts/cm/cmtt8.pfb>
Output written on Pecita-T1.pdf (1 page, 50909 bytes).
Transcript written on Pecita-T1.log.

...您可以查看生成的 Pecita-T1.pdf 中的表格:

Pecita-T1.png

显然,大多数 OTF 字体(现在?)都有一个版本 4 的 OS/2 表,如果你使用 FontForge 将它们转换为 TTF,该表就会保留,因此这显然让人很pdftex恼火;幸运的是,降级 FontForge 中的表版本的解决方案似乎很容易 - 只要知道在哪里查找:)

好吧,希望这对某人有帮助,
干杯!

相关内容