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