该包gitver
需要-shell-escape
从本地文件系统上的手稿的 git 存储库中获取 git 元数据。
shell-escape
但是,在 VCS 存储库之外编译源代码时(例如在我的顾问的机器上) ,无需传递该标志git
。适当地注释掉和注释掉此行很繁琐。也很难改变其他合作者不启用编译的(好)习惯-shell-escape
。但是,gitver
如果没有检测到 shell-escape,则会大声抱怨并出现错误/停止。
因此,我是否可以改变我的序言,使得通用源代码行(不仅适用于加载gitver
包,而且相同的参数适用于minted
其他通用 latex 命令)仅在使用 shell-escape 编译时执行?
最小概念示例:
\documentclass{article}
%%% Somehow detect shell-escape here
\usepackage{gitver} % <-- load only if compiled with shell-escape
%%% end of test
\begin{document}
Hello world!
\end{document}
答案1
expl3 有一个测试:
\documentclass{article}
\usepackage{expl3}
\csname sys_if_shell_unrestricted:T\endcsname{\usepackage{gitver}}
\begin{document}
Hello world!
\end{document}
答案2
您可以使用pdftexcmds
并定义三分支测试:
\usepackage{pdftexcmds}
\makeatletter
\newcommand{\ShellEscapeURN}[3]{%
\ifcase\pdf@shellescape
\expandafter\@firstofthree % 0 = no shell escape
\or
\expandafter\@secondofthree % 1 = unrestricted
\or
\expandafter\@thirdofthree % 2 = restricted
\else
\expandafter\@firstofthree
\fi
{#3}{#1}{#2}%
}
\providecommand{\@firstofthree}[3]{#1}
\providecommand{\@secondofthree}[3]{#2}
\providecommand{\@thirdofthree}[3]{#3}
\makeatother
这三个参数分别是“无限制 shell 逃逸代码”、“受限 shell 逃逸代码”和“无 shell 逃逸代码”。
就你的情况来说,
\ShellEscapeURN{\usepackage{gitver}}{}{}
使用起来可能更方便,expl3
这样就不会暴露表示 shell 转义状态的整数变量的实际值。
\usepackage{expl3}
\ExplSyntaxOn
\cs_new:Npn \ShellEscapeURN #1 #2 #3
{
\sys_if_shell_unrestricted:TF
{ #1 } % unrestricted shell
{
\sys_if_shell_restricted:TF
{ #2 }
{ #3 }
}
}
\ExplSyntaxOff