如果加载了特定的包则有条件地执行命令

如果加载了特定的包则有条件地执行命令

我正在gitver根据expl3我的问题所接受的解决方案加载包这里

但是,我需要根据包是否已实际加载来使用一些命令。例如,使用 和 的组合hyperxmphyperref可以gitver为命令提供一个选项pdfversionid = \gitVerhypersetup参见下面的代码)。

问题是,我如何有条件地检测已加载包的存在(gitver在我的示例中)并设置此条件编译?

最小概念示例:

\documentclass{article}
\usepackage{expl3}
\csname sys_if_shell_unrestricted:T\endcsname{\usepackage{gitver}}
\usepackage{hyperxmp}
\usepackage{hyperref}


% this commented paragraph is conceptual & needs fixing through a solution from this forum
% \hypersetup{%
% pdfversionid = {detect if gitver has been loaded & set to \gitVer if so; otherwise set to empty {}}
% }%

\begin{document}
Hello world!

% The following again describes my intended requirements in words
% detect if gitver has been loaded & print \versionBox{} if so; otherwise print "gitver not loaded"

\end{document}

答案1

通常情况下,您只需要使用\@ifpackageloaded,但该命令仅限于前言。要在文档正文中使用它,您需要\ltx@ifpackageloadedltxcmds包裹。由于宏名称中带有@,因此需要将其包装在\makeatletter和 中\makeatother

\documentclass{article}
\usepackage{expl3}
\usepackage{ltxcmds}
%\csname sys_if_shell_unrestricted:T\endcsname{\usepackage{gitver}}
\usepackage{hyperxmp}
\usepackage{hyperref}

\makeatletter
% this commented paragraph is conceptual & needs fixing through a solution from this forum
\@ifpackageloaded{gitver}{
  \hypersetup{pdfversionid = \gitVer}
}{
  \hypersetup{pdfversionid = {}}
}
\makeatother

\begin{document}
Hello world!

\meaning\gitVer
% The following again describes my intended requirements in words
% detect if gitver has been loaded & print \versionBox{} if so; otherwise print "gitver not loaded"
\makeatletter
\ltx@ifpackageloaded{gitver}{\versionBox{}}{gitver not loaded}
\makeatother

\end{document}

答案2

假设\gitVer\VersionBox定义为gitver,只需添加

\providecommand{\gitVer}{}
\providecommand{\VersionBox}[1]{gitver not loaded}

条件加载后。

\providecommand这利用了如果命令已经定义则不执行任何操作的事实。

相关内容