我正在尝试在仍使用 LaTeX 2020-02-02 PL 5 的系统上模拟 LaTeX 2020-10-01。我已下载了最新版本的latexrelease.sty
已从GitHub。但是,以下 MWE 失败:
\RequirePackage[2020/10/01]{latexrelease}
\documentclass{article}
\begin{document}
Test.
\end{document}
我得到:
! Undefined control sequence.
l.1911 \NewDocumentCommand
\NewHook { m }{ \hook_new:n {#1} }
?
我究竟做错了什么?
答案1
正如评论中提到的,主要原因是latexrelease
能够回滚。前滚更难管理(和测试),而且考虑到我们现在提供的是比正式版本更早的开发版本,所以前滚的必要性就小了。
话虽如此,当前版本latexrelease
在向前滚动时确实存在一些问题。首先,它的代码顺序与内核中的顺序不同(这在回滚时并不重要,但在向前滚动时却很重要)。当我尝试使用早期的 TeXLive 版本作为起点进行向前滚动时,还发现了许多其他问题。
我认为我已经修复了所有问题,但我仅从年度版本进行测试,因为构建一个从 2020-02-02 开始的版本仅用于测试相当困难。所以祝你好运,但你可能想看看以下文件是否适合你:
https://pastebin.com/raw/sZFgEwMr
pastebin 告诉我它可能是令人反感的内容:-)(可能是因为 latex 这个词出现了很多次?)但它应该只是包装代码。
更新
我应该指出,使用前滚latexrelease
显然只是前滚内核文件(因为只有这些文件可以通过这种方式修补)。虽然也可以对软件包进行回滚,但前滚时显然是不可能的,因为 2019 年的软件包无法知道 2020 年需要进行哪些更改。对于内核,这也只能通过获取 2020 年的新 LaTeX 版本并使用它来修补 2019 年内核来实现。
因此,关于以下评论:amsmath 仍然使用 2019 版本,并且该版本用于\newcommand
并且\negmedspace
这会发生中断,因为将内核修补到 2020 定义了内核中已经存在的该命令。
可能的解决方案:将 amsmath 更新到 2020 或尝试
\RequirePackage[2020/10/01]{latexrelease}
\AddToHook{package/before/amsmath}{%
\let\negmedspace\relax
\let\negthickspace\relax
}
解释:使用latexrelease
新的钩子管理方案后可用,因此我们可以声明,在加载 amsmath 之前它应该取消定义问题命令。
但这并不意味着这只因为这里的改变微不足道而有效。如果 amsmath 中需要更新的改变更多,那么它真的会失控。