到目前为止,我一直认为 TeXLive 的包只有在调用时才会更新tlmgr update ...
。
但今天我第一次注意到,确实有其他进程正在更新 TeXLive 软件包。但我无法确定是哪个进程。因此,我正在寻找有关如何确定导致这些更新的原因的建议,以及有关如何阻止这些自动更新发生的可能的帮助。如果您想继续阅读,下面有更多详细信息;-)
结论:TeXLive 软件包会通过一些神秘的进程不定期自动更新。其中一个更新导致我的安装失败,现在我希望能够禁用 TeXLive 的任何自动更新。
我在 Ubuntu 18.04.5 上安装了 TeXLive 2020。我还有一个旧的 2019 安装,但所有路径早已为 TL2020 正确设置。我使用 Ansible 安装和维护 TeXLive(实际上是整个系统)(由于某些原因,我尚未公开这些剧本,但如果您认为它有助于解决这个问题,我很乐意与您分享相关部分)。
我如何确定 TeXLive 的软件包已更新?
好吧,在对完全相同的 LaTeX 文档进行重新编译后(在同一个 git 提交、干净的存储库中),第二次编译突然失败,并出现一个错误filehook-2019.sty not found
,这毫无意义,我在 TeXLive 树中查找最近(即今天)更新过的任何文件,并找到了一堆,最值得注意的是(显示选择):
$ find /usr/local/texlive -newermt "2020-12-16"
/usr/local/texlive/2020/texmf-var/web2c/tlmgr.log
/usr/local/texlive/2020/texmf-dist/doc/latex/filehook
/usr/local/texlive/2020/texmf-dist/tex/latex/filehook
/usr/local/texlive/2020/texmf-dist/source/latex/filehook
/usr/local/texlive/2020/tlpkg/tlpobj/filehook.tlpobj
/usr/local/texlive/2020/tlpkg/backups/filehook.r56291.tar.lz4
/usr/local/texlive/2020/tlpkg/backups/...
关键在于tlmgr.log
文件的内容(再次仅显示选定的部分):
[Sun Nov 29 04:34:29 2020] update: bookcover (46410 -> 56947)
[Tue Dec 15 21:27:05 2020] update: beamer (55908 -> 57140)
[Tue Dec 15 23:11:08 2020] update: decision-table (56164 -> 57094)
[Tue Dec 15 23:11:08 2020] update: denisbdoc (55474 -> 56664)
[Wed Dec 16 02:41:56 2020] update: fgruler (42966 -> 56854)
[Wed Dec 16 02:41:57 2020] update: filehook (56291 -> 56479)
这些更新的时间表明它们与我的活动无关(包括跑步、、latexmk
)。此外,这不是lualatex
knitr::knit()
全部可用TeXLive 包只是一个小子集,我可以通过tlmgr update --self --all
稍后自行运行来确认这一点,它更新了大约 100 个包,之后我的 LaTeX 文档就可以再次正常编译了。
我已阅读TeXLive和tlmgr
文档,但没有发现有关自动更新的提及。
在我的计算机上,我检查了用户和系统 cron 作业,没有发现与 tlmgr 相关的任何内容。我还检查了 systemd 作业,同上。
如果碰巧不是tlmgr
导致这些更新的原因,那么可能是什么?我还在这台机器上安装了 R(我经常编织 Rnw/Rmd 文档),其中包括tinytex
R 包,我知道其中包含包装器tlmgr
。但除非这些是按照某个时间表激活的,或者在以下情况下调用:knitr::knit()
被称为,我不明白为什么它们是罪魁祸首(此外,我几乎每天都运行 knitr::knit(),并且 TeXLive 包自动更新似乎发生在更长的间隔,如日志文件所示)。
答案1
当编译.Rnw
或.Rmd
将文档转换为 PDF 时,将调用 R 函数tinytex::latexmk()
,默认情况下,该函数会尝试安装缺少的 LaTeX 包。可以通过以下选项禁用此行为:
options(tinytex.install_packages = FALSE)
在尝试安装缺失的 LaTeX 包之前,它会尝试运行tlmgr update --self --all
。这很可能是导致您观察到的问题的原因。