前段时间,我发过一篇文章这个问题。我忘了它,昨天才因为一条评论而弹出。它处于糟糕的状态,有人建议我问一个新的问题,只留下一个问题。如下所示。我尝试使用该bickham
包,出现与未找到tfm
文件相关的错误。更准确地说,让我在这里粘贴问题的摘录。
< 摘录 >
我真的不知道我尝试的时候出了什么问题bickham
。我所能看到的是我的一个文件当前显示以下内容:
\documentclass[a4paper]{report}
\usepackage{amsfonts,fontinst,bickham}
\installfont{bickham}{latin}{t1}{T1}{ptm}{m}{n}{}
\begin{document}
$$\mathcal{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$$
$$\mathfrak{ABCDEFGHIJKLMNOPQRSTUVWXYZ}$$
$$\mathfrak{abcdefghijklmnopqrstuvwxyz}$$
$$\mathcal{a\,b\,c\,d\,e\,f\,g\,h\,i\,j\,k\,l\,m\,n\,o\,p\,q\,r\,s\,t\,u\,v\,w\,x\,y\,z}$$
\end{document}
编译后结果为:
[…]
This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014) (preloaded format=pdflatex)
restricted \write18 enabled.
entering extended mode
(./mathcal_fontinst.tex
LaTeX2e <2014/05/01>
Babel <3.9k> and hyphenation patterns for 78 languages loaded.
(/usr/local/texlive/2014/texmf-dist/tex/latex/base/report.cls
Document Class: report 2007/10/19 v1.4h Standard LaTeX document class
(/usr/local/texlive/2014/texmf-dist/tex/latex/base/size10.clo))
(/usr/local/texlive/2014/texmf-dist/tex/latex/amsfonts/amsfonts.sty)
(/usr/local/texlive/2014/texmf-dist/tex/fontinst/base/fontinst.sty
No file fontinst.rc.
) (/Users/michelegorini/Library/texmf/tex/latex/bickham/bickham.sty
(/usr/local/texlive/2014/texmf-dist/tex/latex/xkeyval/xkeyval.sty
(/usr/local/texlive/2014/texmf-dist/tex/generic/xkeyval/xkeyval.tex
(/usr/local/texlive/2014/texmf-dist/tex/generic/xkeyval/keyval.tex))))
(./mathcal_fontinst.aux)
(/usr/local/texlive/2014/texmf-dist/tex/latex/amsfonts/umsa.fd)
(/usr/local/texlive/2014/texmf-dist/tex/latex/amsfonts/umsb.fd)
(/Users/michelegorini/Library/texmf/tex/latex/bickham/ubickham.fd)
kpathsea: Running mktextfm bickham-r
mktextfm: Running mf-nowin -progname=mf \mode:=ljfour; mag:=1; nonstopmode; input bickham-r
This is METAFONT, Version 2.7182818 (TeX Live 2014) (preloaded base=mf)
kpathsea: Running mktexmf bickham-r
! I can't find file `bickham-r'.
<*> ...jfour; mag:=1; nonstopmode; input bickham-r
Please type another input file name
! Emergency stop.
<*> ...jfour; mag:=1; nonstopmode; input bickham-r
Transcript written on mfput.log.
grep: bickham-r.log: No such file or directory
mktextfm: `mf-nowin -progname=mf \mode:=ljfour; mag:=1; nonstopmode; input bickham-r' failed to make bickham-r.tfm.
kpathsea: Appending font creation commands to missfont.log.
./mathcal_fontinst.tex:6: Font U/bickham/m/n/10=bickham-r at 10.0pt not loadabl
e: Metric (TFM) file not found.
<to be read again>
relax
extract@font ...ont font@name external@font relax
font@name relax csname f@e...
define@newfont ...ong@fontshape else extract@font
fi endgroup
pickup@font ...ifx font@name relax define@newfont
fi
getanddefine@fonts ...size endcsname }pickup@font
let textfont@name font@nam...
select@group ...me c@mv@math@version endcsname }#3
globaldefs @ne math@fonts ...
l.6 $$\mathcal{ABCDEFGHIJKLMNOPQRSTUVWXYZ}
$$
?
希腊语,希腊语,胡言乱语。\installfont
这是注释的。取消注释,就会发生以下情况:
This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014) (preloaded format=pdflatex)
restricted \write18 enabled.
entering extended mode
(./mathcal_fontinst.tex
LaTeX2e <2014/05/01>
Babel <3.9k> and hyphenation patterns for 78 languages loaded.
(/usr/local/texlive/2014/texmf-dist/tex/latex/base/report.cls
Document Class: report 2007/10/19 v1.4h Standard LaTeX document class
(/usr/local/texlive/2014/texmf-dist/tex/latex/base/size10.clo))
(/usr/local/texlive/2014/texmf-dist/tex/latex/amsfonts/amsfonts.sty)
(/usr/local/texlive/2014/texmf-dist/tex/fontinst/base/fontinst.sty
No file fontinst.rc.
) (/Users/michelegorini/Library/texmf/tex/latex/bickham/bickham.sty
(/usr/local/texlive/2014/texmf-dist/tex/latex/xkeyval/xkeyval.sty
(/usr/local/texlive/2014/texmf-dist/tex/generic/xkeyval/xkeyval.tex
(/usr/local/texlive/2014/texmf-dist/tex/generic/xkeyval/keyval.tex))))
./mathcal_fontinst.tex:3: Too many }'s.
\input_metrics ...t \curr_file_list \else \egroup
\bgroup #1\expandafter \pr...
\installfont ...al =\x_relax \input_metrics {}{#2}
\etxtovpl {#3}{#1}\install...
l.3 ...llfont{bickham}{latin}{t1}{T1}{ptm}{m}{n}{}
?
< /摘录 >
似乎tfm
找不到该文件。奇怪的是,如果我打开包的文件夹bickham
,我会看到很多tfm
s,确切地说,该文件夹包含以下屏幕截图中的文件:
但是,由于调用了包,所以肯定找到了该文件夹。并且.fd
还加载了文件夹中的几个文件。有人告诉我应该安装字体,但如果我有fd
和tfm
文件,TeX 就不必知道我是否在计算机上安装了字体,因为这些是它使用的文件。那么为什么tfm
找不到这个文件呢?
答案1
限制声明
本回答涉及在 TeX 和 pdfTeX 中使用 type1 字体。声明不适用于 XeTeX 或 LuaTeX。我也不关心 METAFONT 字体的使用。这些主题只是偶然提及的。如果您想了解在这些情况下准备、安装或使用字体的信息,本回答只会让您感到困惑!
回答
问题中的代码反映出相当大的混乱。该代码是一个 LaTeX 文档,它试图调用方廷斯特作为一个包。这混淆了两个根本不同的活动,并忽略了第三个活动:
- 准备 LaTeX(和 TeX)需要使用字体的文件。
- 安装字体以及准备支持其使用的文件。
- 在文档中使用已安装的字体。
当你编写 LaTeX(或 TeX)文档时,1 和 2 必须已经完成。
fontinst
是一个包,您可以使用它来完成第 1 阶段所需的一些步骤。仅凭它不足以完成第 1 阶段。此外,它与第 2 阶段或第 3 阶段无关。fontinst
的工作完成了前第一阶段完成。
它永远不应该在常规 LaTeX 文档中被称为包。
以下是 CTAN 对此的评论:
TeX 宏用于将 Adobe Font Metric 文件转换为 TeX metric 和虚拟字体格式。Fontinst 主要帮助处理字体安装的数字运算和挖掘部分。这意味着在实践中,它会创建许多文件,这些文件为字体系列提供 TeX 度量(和相关信息),(La)TeX 需要这些字体进行任何排版。此外,Fontinst 还可以轻松创建包含来自多个基本字体的字形的字体,从而利用(例如)“专家”字体集。
Fontinst 无法检查文件是否包含任何有用的信息,也无法自动搜索文件或处理二进制文件格式;这些任务通常必须手动完成或借助其他工具(例如 pltotf 和 vptovf 程序)完成。
但是,当您下载字体支持包时,第 1 阶段通常已经完成。事实上,使用此类包的意义在于您不必担心第 1 阶段。
因此,一旦有了bickham
,您只需要担心第 2 和第 3 阶段。至少,典型的字体支持包就是这样的。对于bickham
,还需要从 Adobe 获取字体。没有这些字体,什么都无法工作。
但是,如果您坚持继续,因为您对制作实际文档不感兴趣,或者当我告诉您需要字体副本才能工作时您不相信我,那么您可以按以下步骤操作。
快速方法
我在创建字体支持包进行测试时会用到它。它非常快捷,而且当我发现犯了错误时,无需安装和重新安装。
将一个简单的测试文档和.map
、.fd
、以及(如果适用).tfm
和文件与测试文件一起放入一个目录中:.pfb
.vf
.sty
- 当然,如果你没有这些
.pfb
文件,你就不能把它们放在目录中。这是一个问题,这一点将变得显而易见。
对于bickham
pdfLaTeX 使用
\documentclass{article}
\pdfmapfile{+bickham.map}
\usepackage{bickham}
\begin{document}
abc $\mathcal{abc}$ abc
\end{document}
对于 LaTeX 使用
\documentclass{article}
\usepackage{bickham}
\begin{document}
abc $\mathcal{abc}$ abc
\end{document}
如果.pfb
丢失了会发生什么?
在这种情况下:
- 首次尝试使用其中一种字体时,pdfLaTeX 将遇到致命错误。这是因为如果没有文档所需的 type1 字体,它就无法生成 PDF。
- 然而,LaTeX 将成功生成
.dvi
。
为什么会有差异? TeX 将整个宇宙视为由盒子组成的。不同的盒子具有不同的高度、宽度和深度,并且有时存在关于当一个特定盒子后面跟着另一个盒子时该如何处理的规则。 和.tfm
文件.vf
提供与 支持的字体排版相关的盒子信息bickham
。.tfm
特别是 s ,它告诉 TeX 该包支持的字体中每个字符的盒子尺寸。它们还提供字距调整信息。例如,某种.tfm
字体的 可能告诉 TeX,如果插槽 131 中的字符后面是插槽 126 中的字符,那么后者的盒子应该向左或向右移动一点点。它们甚至可能告诉 TeX 这两个盒子应该被插槽 45 中字符的盒子替换。
对于 TeX 而言,.tfm
文件只是字体。这是因为字体只是关于框的信息。
TeX 不知道或不关心字体通常还包含图片每个字符的字形。它不需要字形来确定如何排列框。
因此,当您使用 LaTeX 编译上述示例时,TeX 会找到所需的一切。它.dvi
会顺利生成文件。只有当您查看文档时才会出现错误。具体来说,您的查看器会抱怨它既找不到也无法构建文档要求的字体。
因此上面的例子产生以下结果:
当然,Computer Modern 中的字符显示得很好。间隙是bickham
字形应该显示的地方。请注意,为它们留出了正确的空间量(我假设),因为 TeX 知道每个字符的框有多大,以及在b
Followinga
或c
Following时是否需要调整b
。但如果没有字形本身,您的查看器就无法向您显示内容那些盒子。
相比之下,pdfLaTeX 遇到了致命错误,因为 pdfTeX 将图片放在文档中。它同时使用了文件中关于框的.tfm
信息和图片来自.pfb
。如果找不到type1字体,则编译失败。
因此,除非您有可用的 type1 字体或者喜欢在sbickham
中使用隐形框,否则安装是没有意义的。.dvi
安装
尽管如此,如果您出于某些奇怪的原因想要这样做,建议将其安装到本地texmf
树中。
kpsewhich -var TEXMFLOCAL
会告诉你这是哪里。很可能/usr/local/texlive/texm-local
。
首先bickham.tds.zip
从 CTAN 下载。将此文件复制到您指定的目录TEXMFLOCAL
。(您可能需要进行身份验证才能执行此操作。)
更改为TEXMFLOCAL
,解压并安装:
cd $(kpsewhich -var TEXMFLOCAL)
sudo unzip bickham.tds.zip
sudo rm bickham.tds.zip
sudo mktexlsr $(kpsewhich -var TEXMFLOCAL)
确保已消除了 的所有bickham
痕迹TEXMFHOME
。
sudo updmap-sys --enable Map=bickham.map
现在,您可以生成致命错误或使用隐形框,而无需工作目录中的包文件。恭喜。
现在,您可以修改 pdfLaTeX 示例以删除该\pdfmapfile
行,即 pdfLaTeX 的示例现在与 LaTeX 的示例相同。这是因为您已将.map
文件片段添加bickham
到 pdfTeX 用于将 TeX 字体映射到 type1 字体的文件中。(基本上,这是一种目录,它告诉 pdfTeX 所知道的每种字体的图片保存在哪里。)
- 请注意,当您尝试使用字体时,这将破坏一切,因为如前所述,pdfTeX 将查找文件
.pfb
。使用updmap-sys
启用bickham.map
片段或使用添加它\pdfmapfile
本质上是在告诉 pdfTeX 谎言。您声称拥有您没有的字体文件。因此,当它编译失败并出现致命错误时,抱怨是没有用的。您故意给了它一本包含虚假信息的电话簿。当它擅离职守去北极寻找圣诞老人时,责任将完全由您承担。