升级 MiKTeX 导致 AddToHook 出现问题

升级 MiKTeX 导致 AddToHook 出现问题

我有一组非常简单的 LaTeX 文档,可以在一台 Windows 10 机器上编译,但不能在另一台机器上编译。两台机器上都安装了相同的 MiKTeX 包,并且设置相似。LaTeX 的版本似乎是区别所在。

在编译失败的机器上,“latex --version”给出

MiKTeX-pdfTeX 4.1 (MiKTeX 20.11)

而在编译工作的机器上,我得到了

MiKTeX-pdfTeX 4.0.1 (MiKTeX 20.7)

以下是编译日志的最后一段:

("C:\Users\username\AppData\Local\Programs\MiKTeX\tex/latex/etoolbox\etoolbox.sty"
Package: etoolbox 2020/10/05 v2.5k e-TeX tools for LaTeX (JAW)
 (C:/texmf\tex/latex/misc\etex.sty
Package: etex 1998/03/26 v2.0 eTeX basic definition package (PEB)
\et@xins=\count104
)
\etb@tempcnta=\count105
)
(C:/texmf\tex/latex/oberdiek\centernot.sty
Package: centernot 2010/03/29 v1.2 Centers the not symbol horizontally (HO)
)
\tx@cntz=\count106

("C:\Users\username\AppData\Local\Programs\MiKTeX\tex/generic/binhex\binhex.tex")
\tx@Isdigit=\count107
\tx@IsAlNum=\count108
\tx@tA=\toks31
\tx@tB=\toks32
\tx@su=\read2

! Undefined control sequence.
\AtEndPreamble ->\AddToHook 
                            {begindocument/before}
l.305 \AtEndPreamble
                    {%
? 
! Emergency stop.
\AtEndPreamble ->\AddToHook 
                            {begindocument/before}
l.305 \AtEndPreamble
                    {%

根据我的推测,newtxmath.sty 包含一个 \AtEndPreamble 命令,由于未定义 \AddToHook,因此会触发错误。我相信 \AddToHook 是 2020 年秋季版本中包含的一个较新的 LaTeX 命令。为什么在装有 MiKTeX 20.11 的系统上未定义该命令,但文档在旧版本中编译得很好?

我该如何排除可能出错的地方?

我尝试过卸载并重新安装新版本的 MiKTeX,但似乎没有用。我不确定如何安装以前版本的 MiKTeX,所以目前我编译此文档的唯一方法是使用旧电脑。

答案1

复制 texfile 最开头的补丁代码。它适合我!

% Patch to make old LaTeX understand dates in yyyy-mm-dd format
\makeatletter
\@ifundefined{@parse@version@dash}{%
\def\@parse@version#1{\@parse@version@0#1}
\def\@parse@version@#1/#2/#3#4#5\@nil{%
\@parse@version@dash#1-#2-#3#4\@nil}
\def\@parse@version@dash#1-#2-#3#4#5\@nil{%
  \if\relax#2\relax\else#1\fi#2#3#4 }
}{}
\makeatother

参考资料: 旧版 TeX 发行版的 revtex4-2.cls 错误

相关内容