在最近的 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
):有一个未决问题为此提出一个内核级接口。