我如何启用 shell-escape?

我如何启用 shell-escape?

我需要为要使用的包启用 shell 转义。shell 转义到底是什么?如何在编辑器或编译工具链中启用它?

不同编辑器/工具链的答案链接(按字母顺序排列):

注意:这是一篇常见问题解答帖子。相关元问题:关于在不同编辑器中启用 shell-escape 的典型问题。如果缺少答案,请为您自己的编辑器/工具链添加答案。谢谢!

添加答案时,请指明设置是永久的还是每个文档的,以及/或者描述如何添加按钮、快捷方式、菜单项等,以便轻松地在 shell-escape 和常规编译之间切换。

答案1

一般信息:什么是 shell escape?

许多 LaTeX 软件包需要使用外部工具才能运行。此类工具是使用系统命令从 LaTeX 源代码调用的。但是,默认情况下,LaTeX 不允许不受限制地使用外部系统调用。这是一种安全措施,旨在防止恶意 LaTeX 代码删除文件、更改系统设置、允许远程访问等。因此,当您尝试使用默认设置编译文档时,如果您使用需要外部工具的软件包,您将收到错误消息和/或错误输出。

为了能够使用此类软件包,您可以更改当前文档的安全设置。这可以通过使用编译器标志称为shell-escape。请注意,这会带来上述风险,因此,只有当您信任尝试编译的源代码时,才应使用此标志。

一些使用 shell escape 的示例包:

  • 铸造
  • SVG
  • 不对称图像B
  • 伊玛克
  • 格努普特克斯
  • 图形可视化
  • tikz(外部化)
  • 独立(转换选项)
  • pgfplots (gnuplot)

默认设置通常是“受限 Shell 转义”,这允许默认调用少量程序(以不允许 shell 重定向的受限形式),这些是(在默认的 TeX Live 2021 配置中)

  • 比博特
  • bibtex8
  • 提取bb
  • 格雷戈里奥
  • 卡普塞维德
  • 制作索引
  • 韓國
  • r-mpost
  • texosquery-jre8

如果您甚至不想允许这些程序运行,那么您可以使用下面
--no-shell-escape
描述的所有方式的选项--shell-escape

要检查 shell 逃逸机制是否处于活动状态,您可以使用这个小文档(取自这里),但稍加修改以便它产生输出 --- 日志消息通常隐藏在某些编辑器/集成环境中):

\documentclass{article}
  \usepackage{shellesc}
  \begin{document}

  \ifcase\ShellEscapeStatus
    No shell escape\or
    Unrestricted shell escape\or
    Restricted shell escape%
  \fi

\end{document}

它将创建一个显示当前 shell 转义设置的文档。

答案2

AUCTeX (Emacs)

自定义变量TeX-command-extra-options以获得值" -shell-escape "

  1. 输入自定义输入(Emacs 术语)M-x customize-option RET TeX-command-extra-options RET(即 Alt+X,然后customize-option,ENTER,TeX-command-extra-options,ENTER)

  2. 在编辑框中输入-shell-escape,确保 前后有空格-shell-escape

  3. 然后单击Apply and Save以使更改永久生效。

Emacs 截图

要针对每个文件进行设置,请使用文件局部变量来设置TeX-command-extra-options。您可以通过以下方式进行设置M-x add-file-local-variable RET TeX-command-extra-options RET "-shell-escape" RET

这增加了

% Local Variables:
% TeX-command-extra-options: "-shell-escape"
% End:

到文件底部,告诉 emacs 使用"-shell-escape"此文件的值。

M-x describe-variable RET您可以检查是否可以通过变量名在文件本地设置通用变量RET,并检查是否有类似“设置时自动变为缓冲区本地”的内容。

答案3

阿拉拉

Arara 使用文件顶部的“魔术注释”.tex来确定选项。对于 shell 转义,您需要添加选项shell: true或等效选项shell: yes。选项在花括号之间指定,并用逗号分隔。示例:

% arara: pdflatex: { shell: true }
% arara: xelatex: { synctex: 1, shell: yes }
% arara: lualatex: { shell: true, interaction: nonstopmode }

答案4

乳胶

要在 Latexmk 中启用 shell 转义,您需要-shell-escape向 Latexmk 调用添加选项,如下所示:

latexmk -shell-escape yourfile.tex

相关内容