需要某个软件包的某个版本(或更高版本)吗?

需要某个软件包的某个版本(或更高版本)吗?

有没有办法强制在构建文档时加载某个软件包的某个版本或更高版本?我发现在软件包版本不同的其他平台上编译文档可能会导致问题,这些问题可能很难确定,也可能不难确定。因此,我希望能够在文档中说“您至少需要此软件包的这个版本”,并在它不成立时产生明确的错误。

有什么办法可以做到这一点?

答案1

\usepackage[<options>]{<name>}[<min.date>]您可以使用(或)的尾随可选参数请求最低版本/日期\RequirePackage。但是,如果安装的版本比请求的版本旧,它只会打印警告文本,而不会导致错误。

该功能由 LaTeX 核心中的宏实现\@ifpackagelater{<name>}{<date>}{<yes>}{<no>},您也可以自己使用它(如果在包或类文件中未使用,则需要\makeatletter.. )。\makeatother

必须<date>采用以下格式year/month/day,例如 2022/08/10 表示 2022 年 8 月 10 日。

如果包裹早于指定日期,则可以使用以下代码引发错误。但是,这只有效包裹已经装载。

\makeatletter
\usepackage{<name>}%
\@ifpackagelater{<name>}{<date>}{%
    % Package is new enough
}{%
    \PackageError{<your package or document name>}{Package <name> is to old <...>}%
}
\makeatother

请注意,尽管名称为\@ifpackagelater,据我所知,该宏实际上会检查软件包日期是否晚于或等于 。更准确的名称应该是 因此ifpackagenotolder。如果您想检查软件包是否实际上比您所知的最新版本更新,只需在日期上加一天即可。


这里有一个基于mwe包的示例,它还检查包是否已安装:

\IfFileExists{mwe.sty}{%
    \RequirePackage{mwe}%
    \@ifpackagelater{mwe}{2018/03/30}{%
        % Package version new enough
    }{%
        % Package version too old
    }
}{%
   % Package not installed
}

答案2

在较新的 LaTeX 版本中,\@ifpackagelater也可以\IfPackageAtLeastTF

source2e.pdf 片段

使用方式相同。

相关内容