CI 作业中出现 pdflatex 编译错误,但在交互式 shell 中没有出现

CI 作业中出现 pdflatex 编译错误,但在交互式 shell 中没有出现

在 Gitlab CI 作业期间在 Ubuntu 22.04 Docker 容器内编译文档时出现错误:

!pdfTeX error: /usr/bin/pdflatex (file tcrm1000): Font tcrm1000 at 600 not found
==> Fatal error occurred, no output PDF file produced!

最奇怪的是,如果我手动启动容器,然后编译文档,则不会出现任何错误。我需要更多有关什么会产生上述错误的见解(例如环境变量?)才能对其进行故障排除。

编辑:更仔细地检查编译失败的日志我发现了这一点:

kpathsea: Running mktexpk --mfmode / --bdpi 600 --mag 1+0/600 --dpi 600 tcrm1000
mktexpk: /usr/share/texlive/texmf-dist/web2c/mktexdir ./.texlive2021/texmf-var/fonts/pk/ljfour/jknappen/ec failed.
kpathsea: Appending font creation commands to missfont.log.

对于成功的手动执行,我得到:

kpathsea: Running mktexpk --mfmode / --bdpi 600 --mag 1+0/600 --dpi 600 tcrm1000
mktexpk: Running mf-nowin -progname=mf \mode:=ljfour; mag:=1+0/600; nonstopmode; input tcrm1000
This is METAFONT, Version 2.71828182 (TeX Live 2022/dev/Debian) (preloaded base=mf)
. . . 

看起来这可能是主要错误,但我不明白为什么它只发生在 CI 中。

答案1

我发现了问题:CI 生成的 shell 缺少 HOME 环境变量的定义。这导致 texmf.cnf 中定义的 TEXMFVAR 中的 ~ 扩展不正确(在我的系统中是 ~/.texlive2021/texmf-var),进而导致 mktexdir 脚本尝试创建的文件夹名称不正确。所有这些在手动编译中都没有发生,因为我是在同一容器内的交互式 shell 中执行此操作,并且对于此 shell,HOME 已正确定义。

我可以通过添加以下行来修复:

- export HOME=/root

在调用 pdflatex 之前添加到 CI 脚本中。

相关内容