latexrelease:无法模拟较新的内核

latexrelease:无法模拟较新的内核

我正在尝试在仍使用 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 中需要更新的改变更多,那么它真的会失控。

相关内容