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 腳本。

相關內容