[背景:由于空间不足和耐心不足,我清除了系统驱动器并从零开始重新安装了 Catalina。我现在正在逐个重新安装我仍在使用的所有应用程序。] 我从http://www.tug.org/mactex/mactex-download.html并且它基本上可以正常工作,但我需要安装一个额外的非免费字体 Sabon,我有它的许可证和相关文件。几年前给自己的笔记告诉我(给定我一次准备的 sabon2.tgz 文件,其中包含一个目录结构和一堆与 Sabon 相关的文件)我应该在 创建一个个人 texmf 目录~/Library/texmf/
。在那里,
tar zxvf sabon2.tgz
texhash
updmap --enable Map=psb.map
这个配方是我改编自在 Linux 上运行的某个配方,2017 年左右我在 Mac 上成功运行过。如果在此期间我更改了任何内容,我就会忘记记下来。然而,当我今天尝试自己的说明时,它们不起作用。Texhash 说一堆目录不可写:
$ texhash
texhash: /usr/local/texlive/2020/texmf-config: directory not writable. Skipping...
texhash: /usr/local/texlive/2020/texmf-dist: directory not writable. Skipping...
texhash: /usr/local/texlive/2020/texmf-var: directory not writable. Skipping...
texhash: /usr/local/texlive/texmf-local: directory not writable. Skipping...
texhash: Done.
我通过以 sudo 身份运行 texhash 解决了这个问题,尽管我不确定这是否是我应该做的。常见问题解答 QM05https://tug.org/mactex/faq/faq.html#qm05说在将文件添加到 ~/Library/texmf 时不需要运行 texhash,所以我推测这一步在 2020 年已经变得没有必要了。好的,我们继续。下一个失败:
$ updmap --enable Map=psb.map
updmap [ERROR]: Either -sys or -user mode is required.
updmap [ERROR]: In nearly all cases you should use updmap -sys.
updmap [ERROR]: For special cases see https://tug.org/texlive/scripts-sys-user.html
在错误消息后面我添加了 -sys...
$ updmap -sys --enable Map=psb.map
updmap will read the following updmap.cfg files (in precedence order):
/usr/local/texlive/2020/texmf-dist/web2c/updmap.cfg
updmap may write changes to the following updmap.cfg file:
/usr/local/texlive/2020/texmf-config/web2c/updmap.cfg
updmap: can't write to /usr/local/texlive/2020/texmf-config/web2c/updmap.cfg: Permission denied at /Library/TeX/texbin/updmap line 1589.
...但再次出现权限错误。在这里,我也添加 sudo 并重试:
$ sudo updmap -sys --enable Map=psb.map
updmap [WARNING]: resetting $HOME value (was /Users/XXX) to root's actual home (/var/root).
updmap will read the following updmap.cfg files (in precedence order):
/usr/local/texlive/2020/texmf-dist/web2c/updmap.cfg
updmap may write changes to the following updmap.cfg file:
/usr/local/texlive/2020/texmf-config/web2c/updmap.cfg
Creating new config file /usr/local/texlive/2020/texmf-config/web2c/updmap.cfg
dvips output dir: "/usr/local/texlive/2020/texmf-var/fonts/map/dvips/updmap"
pdftex output dir: "/usr/local/texlive/2020/texmf-var/fonts/map/pdftex/updmap"
dvipdfmx output dir: "/usr/local/texlive/2020/texmf-var/fonts/map/dvipdfmx/updmap"
updmap [ERROR]: The following map file(s) couldn't be found:
updmap [ERROR]: psb.map (in /usr/local/texlive/2020/texmf-config/web2c/updmap.cfg)
updmap [ERROR]: Did you run mktexlsr?
You can disable non-existent map entries using the option
--syncwithtrees.
我猜想 updmap 找不到 psb.map 的原因是 psb.map 位于我的用户的 ~/Library/texmf 中,但如果我以 root 身份运行 updmap,它就不会搜索该位置。另一方面,如果我以我的身份运行它,它就无法更新文件。
感谢这个问题,本地字体安装问题之后,我发现我可以写入不带空格的 updmap-sys,而且不需要 sudo 也能工作:
$ updmap-sys --enable Map=psb.map
updmap will read the following updmap.cfg files (in precedence order):
/usr/local/texlive/2020/texmf-config/web2c/updmap.cfg
/usr/local/texlive/2020/texmf-dist/web2c/updmap.cfg
updmap may write changes to the following updmap.cfg file:
/usr/local/texlive/2020/texmf-config/web2c/updmap.cfg
/usr/local/texlive/2020/texmf-config/web2c/updmap.cfg unchanged. Map files not recreated.
updmap: Updating ls-R files.
现在该文件只包含一行“Map psb.map”:
$ cat /usr/local/texlive/2020/texmf-config/web2c/updmap.cfg
Map psb.map
然而,在编译使用 Sabon 的已知良好的 tex 文件时,我得到了
$ pdflatex test.tex
...
kpathsea: Running mktexpk --mfmode / --bdpi 600 --mag 1+264/600 --dpi 864 psbb8r
mktexpk: don't know how to create bitmap font for psbb8r.
mktexpk: perhaps psbb8r is missing from the map file.
kpathsea: Appending font creation commands to missfont.log.
(see the transcript file for additional information)
!pdfTeX error: pdflatex (file psbb8r): Font psbb8r at 864 not found
==> Fatal error occurred, no output PDF file produced!
它为什么首先要创建位图字体?无论如何,我只想要矢量字体。现在已经不是 20 世纪了。
我遗漏了什么以及我应该做什么?
答案1
在评论中讨论一番后,最好的解决方案是解压TEXMFLOCAL
目录中的文件(此处,/usr/local/texlive/texmf-local
),而不是TEXMFHOME
(此处,~/Library/texmf
)。
MacTeX FAQ 建议将本地文件放在后者中,但 8 位字体映射是个例外。您永远不想updmap
在用户模式下运行。这是一个陷阱,它会覆盖您的系统字体映射而不是补充它们,并且随着您更新系统树而变得越来越过时。但是,updmap-sys
不搜索TEXMFHOME
。