我想打印文档的 git 修订版本latexgit包,需要该--shell-escape
选项才能工作。
由于此功能对于构建文档来说非常可选,因此我想使加载包和打印版本依赖于开关的存在--shell-escape
,这样就可以在有或没有开关的情况下构建文档而不会失败。
我怎能这样做?
梅威瑟:
\documentclass{article}
\usepackage{latexgit}
\begin{document}
Git: \#\gitcommithash
\end{document}
答案1
pdftex
维护一个\pdfshellescape
只读整数变量,该变量可以有三个值
- 0 如果引擎被调用
-no-shell-escape
- 1 如果引擎被调用
-shell-escape
- 否则为 2(意味着受限 shell 逃逸可用)
您可以通过加载使其独立于引擎pdftexcmds
:
\usepackage{pdftexcmds} % \RequirePackage in a .sty file
\makeatletter % if not in a .sty file
\ifcase\numexpr\pdf@shellescape\relax
<code for -no-shell-escape>%
\or
<code for -shell-escape>%
\or
<code for the standard>%
\fi
\makeatother
很有可能 0 和 2 的代码相同,因此可以采用不同的策略
\usepackage{pdftexcmds} % \RequirePackage in a .sty file
\makeatletter % if not in a .sty file
\ifnum\pdf@shellescape=1
<code for -shell-escape>%
\else
<code for no option>%
\fi
\makeatother
围绕这个的包装:
\documentclass{article}
\usepackage{pdftexcmds}
\makeatletter
\newcommand{\doifshellescape}{%
\ifnum\pdf@shellescape=1
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
}
\makeatother
\begin{document}
\doifshellescape{YES}{NO}
\end{document}
如果 shell 转义处于活动状态,\doifshellescape
则将使用该宏,否则。YES
NO
我们expl3
只需要创建一个用户级别名;更好的是,我们有三种可能性
\documentclass{article}
\usepackage{expl3}
\ExplSyntaxOn
\cs_set_eq:NN \shellescapeTF \sys_if_shell_unrestricted:TF
\cs_set_eq:NN \shellescapeF \sys_if_shell_unrestricted:F
\cs_set_eq:NN \shellescapeT \sys_if_shell_unrestricted:T
\ExplSyntaxOff
\begin{document}
\shellescapeTF{YES}{NO}
\shellescapeT{YES}
\shellescapeF{NO}
\end{document}