检测正在使用哪个版本的 L3 编程层

检测正在使用哪个版本的 L3 编程层

我正在编写的 LaTeX3 包使用了 中\prop_gput_from_keyval引入的。我试图保护我的包不受旧 TeX 安装用户的侵害。为了让他们看到一条信息丰富的错误消息,我想用我在这里见过的东西来中止加载,如下所示:2021-05-16expl3

! LaTeX3 Error: Mismatched LaTeX support files detected.
(LaTeX3)        
(LaTeX3)        The L3 programming layer in the LaTeX format
(LaTeX3)        is dated 2021-02-18, but in your TeX tree the files require
(LaTeX3)        at least 2021-05-16.

这个错误信息有接口吗?

当然,我有\NeedsTeXFormat{LaTeX2e}[2021-05-16]检查 LateX2e 格式版本的命令,但它只会发出警告而不是错误。所以我可以做一些类似的事情,\IfFormatAtLeastTF比如分支到\PackageError,但是,这只会读取 LaTeX 格式的日期,而我需要防范的是 中的 L3 编程层日期\ExplLoaderFileDate。特别是,我需要检查expl3版本是否足够新。我可以这样做

\IfPackageAtLeastTF{expl3}{2021-05-16}
{
    % Package version new enough
}{
    \PackageError{MyPackageName}
        {The L3 programming layer in the LaTeX format
        is dated \ExplLoaderFileDate, but in your TeX tree the files require
        at least 2021-05-16.
        }
}

手动编写这个 LaTeX3 错误消息感觉很奇怪。此外,这不适用于 2020-10-01 之前的 LaTeX 版本。所以我应该先检查一下\IfFormatAtLeastTF我可以使用哪个 LaTeX 版本来逃脱

\providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}

然后是expl3带有\IfPackageAtLeastTF?的版本

我读过这个 github 问题似乎 LaTeX 团队建议,与其检查发布日期,不如通过类似这样的方式检查控制序列是否存在

\cs_if_exist:NTF \prop_gput_from_keyval:Nn { TRUE } { FALSE }

但这感觉不太自然,因为现在我需要以某种方式跟踪expl3我使用的 功能。如果将来我使用另一个较新的功能,我需要手动添加或替换\cs_if_exist我正在使用的每个新控制序列。

是否有一个接口可供软件包作者使用,通过调用上述 LaTeX3 错误消息来保护旧安装的用户?我想我要求的是类似的东西, \NeedsExplVersion{2021-05-16}\IfExplAtLeastTF{2021-05-16}{TRUE}{FALSE}会抛出错误而不是警告。

相关内容