我想在我的文档中使用名为 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 没有给出这个错误)。
在寻找这个的时候,我发现了一些不错的小应用程序,称为ttfencinst
和afmtoenc
(通过[电子邮件保护]邮件列表存档:回复:新 Новые версии шрифтов Хартия и Эвристика和[电子邮件保护]邮件列表存档:回复:回复:如何使用 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 表值错误:
我检查了这些特定的字体,因为我在用电子阅读器显示它们时遇到了问题。如果我没有弄错的话,电子阅读器中的 Adobe 软件似乎无法理解 OS/2 表格的第 4 版。
我可以将 OS/2 表版本中的版本 4 降级为 1 吗?我会失去什么?
您可以从字体信息对话框中的 OS/2 选项卡中进行设置,但如果这是问题所在,我会感到惊讶。
这里唯一的问题是找到这个“字体信息对话框”在哪里,因为http://fontforge.github.io/fontinfo.html只说“字体信息对话框在所有视图中都可用。”;这已经解决了,感谢使用 FontForge 进行设计:最终输出,生成字体文件:
从“元素”菜单打开“字体信息”窗口。
因此,Pecita.ttf 在 FontForge 的“字体信息”中的样子如下:
看到 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 中的表格:
显然,大多数 OTF 字体(现在?)都有一个版本 4 的 OS/2 表,如果你使用 FontForge 将它们转换为 TTF,该表就会保留,因此这显然让人很pdftex
恼火;幸运的是,降级 FontForge 中的表版本的解决方案似乎很容易 - 只要知道在哪里查找:)
好吧,希望这对某人有帮助,
干杯!