如何永久解决“LaTeX 支持文件不匹配”问题

如何永久解决“LaTeX 支持文件不匹配”问题

背景

不久前,我在 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 更新后继续运行?


额外的信息

原始解决方案有 Ulrike Fischer 的评论

检查是否存在一些隐藏系统格式的本地格式。(例如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如果你使用 pdfLaTeX
  • kpsewhich --all --engine=luahbtex lualatex.fmt如果你使用 LuaLaTeX
  • kpsewhich --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,例如,检查上面的两行;.fmtkpsewhichpdflatex-dev.fmt

如果没有任何效果,请继续阅读。


稍长版本

此错误消息是在 2020 年中期集成到 LaTeX 内核后故意添加的,因为生成本地文件expl3时经常发生这种情况。此文件未更新,因此与旧版本的 LaTeX(预装了旧版本)一起冻结,然后当您更新时,两个不同的版本不兼容[1]tlmgr.fmt.fmtexpl3

错误信息如下(大致如下):

! 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(或lualatexxelatex)以重建 LaTeX 格式(或fmtutil-sys --all重建所有)。重建格式将使 的更改生效l3kernel。请注意,运行mktexfmt将创建一个本地.fmt文件,因此您可能需要在更新后删除(或重新生成)该文件。


1并非完全不兼容,但通常会导致调试的暗路才发现问题出在陈旧的.fmt文件上。

相关内容