我正在gitver
根据expl3
我的问题所接受的解决方案加载包这里。
但是,我需要根据包是否已实际加载来使用一些命令。例如,使用 和 的组合hyperxmp
,hyperref
可以gitver
为命令提供一个选项pdfversionid = \gitVer
(hypersetup
参见下面的代码)。
问题是,我如何有条件地检测已加载包的存在(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@ifpackageloaded
从ltxcmds
包裹。由于宏名称中带有@
,因此需要将其包装在\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
这利用了如果命令已经定义则不执行任何操作的事实。