取决于 --shell-escape 选项值的条件输出

取决于 --shell-escape 选项值的条件输出

我想打印文档的 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则将使用该宏,否则。YESNO

我们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}

相关内容