我有一组非常简单的 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