使用本地安装的字体时出现问题

使用本地安装的字体时出现问题

我在 $HOME/texmf 下本地安装了字体,运行后texhash一切似乎都正常:

> kpsewhich mtpro2.map
/home/mafp/texmf/fonts/map/dvips/mtpro2/mtpro2.map
> kpsewhich mt2exe.tfm
/home/mafp/texmf/fonts/tfm/pctex/mtpro2/mt2exe.tfm
> kpsewhich mt2exe.pfb
/home/mafp/texmf/fonts/type1/pctex/mtpro2/mt2exe.pfb

然后我就跑了

> updmap --enable Map=mtpro2.map
updmap is using the following updmap.cfg files (in precedence order):
  /etc/texmf/web2c/updmap.cfg
  /usr/share/texmf/web2c/updmap.cfg
updmap is using the following updmap.cfg file for writing changes:
  /etc/texmf/web2c/updmap.cfg
/etc/texmf/web2c/updmap.cfg unchanged.  Map files not recreated.
updmap: Updating ls-R files.

这听起来有点可疑,我猜它应该使用 TEXMFHOME 下的 updmap.cfg。事实上,使用字体翻译一个简单的测试文件会得到

> pdflatex mtpro2test
This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013/TeX Live for SUSE Linux)
 restricted \write18 enabled.
entering extended mode
(./mtpro2bug.tex
LaTeX2e <2011/06/27>
Babel <3.9f> and hyphenation patterns for 78 languages loaded.
(/usr/share/texmf/tex/latex/base/article.cls
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
(/usr/share/texmf/tex/latex/base/size10.clo))
(/home/mafp/texmf/tex/latex/amsmath/amsmath.sty
For additional information on amsmath, use the `?' option.
(/home/mafp/texmf/tex/latex/amsmath/amstext.sty
(/home/mafp/texmf/tex/latex/amsmath/amsgen.sty))
(/home/mafp/texmf/tex/latex/amsmath/amsbsy.sty)
(/home/mafp/texmf/tex/latex/amsmath/amsopn.sty))
(/home/mafp/texmf/tex/latex/mtpro2/mtpro2.sty) (./mtpro2test.aux) [1{/usr/share/
texmf/fonts/map/pdftex/updmap/pdftex.map}] (./mtpro2test.aux)
kpathsea: Running mktexpk --mfmode / --bdpi 600 --mag 2+0/600 --dpi 1200 mt2exe
mktexpk: don't know how to create bitmap font for mt2exe.
mktexpk: perhaps mt2exe is missing from the map file.
kpathsea: Appending font creation commands to missfont.log.
 )
!pdfTeX error: pdflatex (file mt2exe): Font mt2exe at 1200 not found
 ==> Fatal error occurred, no output PDF file produced!

我在这里遗漏了什么?

答案1

TEXMFHOME对于没有超级用户权限或更准确地说没有写权限的人来说,安装字体应该是最后的手段TEXMFLOCAL

环境变量TEXMFLOCAL指向

/usr/local/texlive/texmf-local

在“vanilla” TeX Live 安装上,

/usr/local/share/texmf

在 TeX Live/Debian 上。我不知道它在 SuSE Linux 上指向什么,但这并不重要,因为 shell 命令

kpsewhich --var-value=TEXMFLOCAL

总会给出正确答案。

从 2013 年版本开始,TeX Live 使用略有不同的机制来构建pdftex.mapupdmapupdmap-sys三棵树中的每一棵TEXMFMAINTEXMFLOCAL和都可以在子目录下TEXMFHOME有一个文件,建议的程序是将地图文件添加到相关文件中;因此,而不是一个应该updmap.cfgweb2cupdmap.cfgupdmap(-sys) --enable Map=mtpro2.map附加线

Map mtpro2.map

到所选updmap.cfg文件,然后运行updmapupdmap-sys 没有參數。

因此,对于用户的唯一添加,该行应附加到

$(kpsewhich --var-value=TEXMFHOME)/web2c/updmap.cfg

(我假设是 Bash shell),而对于更好的方法(如果有人有写入权限TEXMFLOCAL),该行应该附加到

$(kpsewhich --var-value=TEXMFLOCAL)/web2c/updmap.cfg

然后updmap在第一种情况下运行,sudo updmap-sys在第二种情况下运行(或者仅从updmap-sys超级用户 shell 运行,取决于您的操作系统特性)。

当然,所有字体相关的文件都将使用适当的树进行安装。绝不用于TEXMFDIST安装 TeX Live 中未包含的字体。

TEXMFLOCAL为什么尽可能使用更好?因为当tlmgr(vanilla TeX Live)或操作系统特定的包管理器对涉及字体包的 TeX Live 进行更新时,它们将运行updmap-sys当然不会使用的updmap.cfg文件TEXMFHOME(这只会引用用户特定的文件root)。

因此,任何参加跑步的人updmap都会有他们的pdftex.map档案未更新,因此updmap应定期手动运行,以反映对主要、分发管理updmap.cfg文件可能发生的更改。始终使用updmap-sys(带有附加字体TEXMFLOCAL)可避免此问题。请注意,TEXMFLOCAL更新永远不会触及,并将按原样用于 TeX Live 的未来版本。

安装某些后来出现在主发行版中的东西总是有风险的TEXMFLOCAL(例如,我在安装 STIX 字体时就遇到过这种情况)。

无论如何,我的建议是只使用原始 TeX Live,即使是在 Debian、Fedora、SuSE 或其他系统上。

答案2

只需在终端中输入

sudo updmap-sys

就是这样。我花了几个小时解决这个问题,因为我尝试了许多解决方案,但都没有用,而上面的命令才有效。我不是 LaTeX 的专业人士,只是一个中级用户,所以不知道很多细节,但我理解的是:

它的作用是读取updmap.cfg文件并重新创建地图文件。因此,您想要通过以下命令创建的文件:

updmap-sys --enable Map=xxx.map

被创造出来!!

答案3

对于 SuSE 用户:您应该检查TEXMFVAR中的定义/etc/texmf/web2c/texmf.conf。它可能指向 中定义的系统范围目录TEXMFSYSVAR。您应该将其更改为TEXMFHOME

TEXMFVAR = ${TEXMFHOME}

然后以非 root 用户身份使用updmap即可按照广告宣传完成工作。

相关内容