新的 cs 变体

新的 cs 变体

在最近的 2023-10-10l3kernel更新中(参见https://www.ctan.org/pkg/l3kernel:),似乎许多现有控制序列的新参数说明符变体被添加到内核中,主要是从扩展变体切换x而来e

我编写了一个以 开头的包\NeedsTeXFormat{LaTeX2e}[YYYY-MM-DD]。我的包使用了一些最近添加的未使用 的新 cs 变体\cs_generate_variant:Nn。例如,使用e而不是x消息、\str_set:NV\msg_error:nnV\keys_define:ne等的扩展。

我的问题是:我是否有必要现在写\NeedsTeXFormat{LaTeX2e}[2023-10-10]而不是以前的日期?我担心使用旧版本 LaTeX 的人无法使用我的软件包。

编辑:更新 2023-11-11。2023-11-01 内核更新添加了\IfExplAtLeastTF测试 LaTeX3 编程层版本的命令。
https://www.latex-project.org/news/latex2e-news/ltnews38.pdf

答案1

这里有两个方面:这个变化对程序员意味着什么以及如何检查expl3版本。

团队从x-e类型转换为 - 类型的原因有很多:我已在我的博客。 这包括贬低类型x变体,但不是移除它们。即使是“活跃”的开发人员也需要很长时间才能expl3完成转换(如果他们选择这样做的话)。因此,您可以x“永远”继续使用 -type 变体。

话虽如此,e现在将您自己的函数内部更改为 -type 将非常安全:例如,我计划这样做siunitx。此时您决定切换您使用的核心变体是一个政策问题:我可能会等待 TL'23 冻结并更新 TL'24。

如果您想使用变体但不确定它们是否存在,您可以随时应用\cs_generate_variant:Nn- 它被设计成可以多次调用并且只有在变体不存在时才会生成变体。

检测expl3版本时,\NeedsTeXFormat不会有帮助:这将检查 的版本latex.ltx。目前,我们没有一个好的界面来检查expl3版本,所以你需要类似

\@ifundefined{ExplLoaderFileDate}
  {\RequirePackage{expl3}}
  {}
\@ifl@t@r\ExplLoaderFileDate{2022-11-09}
  {}
  {%
    \PackageError{siunitx}{Support package expl3 too old}
      {%
        You need to update your installation of 'l3kernel'.\MessageBreak
        Loading~siunitx~will~abort!%
      }%
    \endinput
  }%

(再次取自siunitx):有一个未决问题为此提出一个内核级接口。

相关内容