背景
不久前,我在 Mac 上更新了 TeX Live 安装,但出现了错误
LaTeX3 Error: Mismatched LaTeX support files detected.
我找到了解决方案检测到不匹配的 LaTeX 支持文件据我所知(不是很了解),有系统格式和本地格式,而 TeX Live 更新的是错误的格式。解决方法是更新格式。
使用fmtutil-user --all
对我有用。它吐出一大堆东西,然后输出
fmtutil [INFO]: log file copied to: /Users/<user>/Library/texlive/2020/texmf-var/web2c/luatex/dvilualatex.log
fmtutil [INFO]: /Users/<user>/Library/texlive/2020/texmf-var/web2c/luatex/dvilualatex.fmt installed.
我不知道这告诉我什么,但是我的 TeX Live 偏好设置中 TeX 程序设置为/Library/TeX/texbin
,这似乎是 的链接/usr/local/texlive/2020/bin
。
问题
每次我更新 TeX Live 时,我都必须再次应用该解决方案。
问题
有没有办法让 TeX Live 永久使用正确的格式,这样我就不必fmtutil-user --all
在每次 TeX Live 更新后继续运行?
额外的信息
检查是否存在一些隐藏系统格式的本地格式。(例如
kpsewhich --all --engine=pdftex pdflatex.fmt
)
当我这样做时,它输出
/Users/<user>/Library/texlive/2020/texmf-var/web2c/pdftex/pdflatex.fmt
/usr/local/texlive/2020/texmf-var/web2c/pdftex/pdflatex.fmt
但我不知道这在告诉我什么。
答案1
目前还不太清楚为什么这些本地格式是在更新时出现的,所以目前还没有明确的解决办法。等找到原因后,我会更新这个答案;同时,以下是解决问题的步骤(这种情况最多发生在l3kernel
更新时,但不是那经常):
总结
首先从命令行运行:
kpsewhich --all --engine=pdftex pdflatex.fmt
如果你使用 pdfLaTeXkpsewhich --all --engine=luahbtex lualatex.fmt
如果你使用 LuaLaTeXkpsewhich --all --engine=xetex xelatex.fmt
如果你使用 XeLaTeX
然后查看输出。如果你有二输出行如下:
/home/<user>/.texlive2021/texmf-var/web2c/pdftex/pdflatex.fmt
/usr/local/texlive/2021/texmf-var/web2c/pdftex/pdflatex.fmt
然后从启动路径中删除该文件/home/<user>/.texlive<year>
(或者/Users/<user>/Library
如果你使用的是 Mac),问题就解决了!
问题仍然存在
如果仍然收到错误:
kpsewhich
检查您是否对所使用的引擎使用了正确的调用;- 检查调用的输出
kpsewhich
是否只返回一行; - 如果你使用的是 LaTeX-dev,那么在调用中添加文件
-dev
,例如,检查上面的两行;.fmt
kpsewhich
pdflatex-dev.fmt
如果没有任何效果,请继续阅读。
稍长版本
此错误消息是在 2020 年中期集成到 LaTeX 内核后故意添加的,因为生成本地文件expl3
时经常发生这种情况。此文件未更新,因此与旧版本的 LaTeX(预装了旧版本)一起冻结,然后当您更新时,两个不同的版本不兼容[1]。tlmgr
.fmt
.fmt
expl3
错误信息如下(大致如下):
! LaTeX3 Error: Mismatched LaTeX support files detected.
(LaTeX3) Loading 'expl3.sty' aborted!
(LaTeX3)
(LaTeX3) The L3 programming layer in the LaTeX format
(LaTeX3) is dated 2021-02-18, but in your TeX tree the files require
(LaTeX3) at least 2021-05-11.
For immediate help type H <return>.
...
l.77 \ExplLoaderFileDate{expl3.sty}}
%
?
这意味着检测到了expl3
的不同版本expl3
。如果您从命令行运行,您可以H <enter>
在上面的提示符下键入,则错误消息可能会显示两个不同的文本,具体取决于某些启发式方法。通过远的最常见的是:
The cause seems to be an old format file in the user tree.
LaTeX found these files:
- /home/<user>/.texlive2021/texmf-var/web2c/pdftex/pdflatex.fmt
- /usr/local/texlive/2021/texmf-var/web2c/pdftex/pdflatex.fmt
Try deleting the file in the user tree then run LaTeX again.
它指向我上面提到的两个文件(这个错误消息实际上只是该kpsewhich
调用的包装器)。
但是,问题可能不是格式文件过时。在这种情况下,错误消息的错误帮助将显示为:
The most likely causes are:
- A recent format generation failed;
- A stray format file in the user tree which needs to be removed or rebuilt;
- You are running a manually installed version of expl3.sty
which is incompatible with the version in LaTeX.
这可能是导致问题的原因。顺序如下:
格式生成过程中出现错误非常不太可能,但您可以尝试运行
fmtutil-sys --all
(您可能需要sudo
取决于您安装 TeX Live 的方式)并查看输出是否显示可疑内容;杂散格式是上面描述的问题,但取决于您如何运行 LaTeX(即如果您使用 运行
-no-shell-escape
),那么它将无法运行kpsewhich
;您可能手动安装了较新版本的
l3kernel
而不是更新 LaTeX。如果这是您想要做的,那么您必须将文件复制l3kernel
到本地TEXMF
树,然后运行mktexfmt pdflatex
(或lualatex
或xelatex
)以重建 LaTeX 格式(或fmtutil-sys --all
重建所有)。重建格式将使 的更改生效l3kernel
。请注意,运行mktexfmt
将创建一个本地.fmt
文件,因此您可能需要在更新后删除(或重新生成)该文件。
1并非完全不兼容,但通常会导致调试的暗路才发现问题出在陈旧的.fmt
文件上。