我需要为要使用的包启用 shell 转义。shell 转义到底是什么?如何在编辑器或编译工具链中启用它?
不同编辑器/工具链的答案链接(按字母顺序排列):
- 阿拉拉
- AUCTeX (Emacs)图形用户界面,用户功能
- 基勒(链接到其他问题)
- 乳胶
- 背页
- 终端/命令提示符
- 纺织机械商
- 泰克帕德(链接到其他问题)
- 特克斯沃克斯(链接到其他问题)
- 特克斯工作室
- VimTeX
- Visual Studio Code 与 LaTeX 研讨会
- 编辑(链接到其他问题)
- 使用 texify:需要
--tex-option
(链接到其他问题)
注意:这是一篇常见问题解答帖子。相关元问题:关于在不同编辑器中启用 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 "
:
输入自定义输入(Emacs 术语)
M-x customize-option RET TeX-command-extra-options RET
(即 Alt+X,然后customize-option
,ENTER,TeX-command-extra-options
,ENTER)在编辑框中输入
-shell-escape
,确保 前后有空格-shell-escape
。然后单击
Apply and Save
以使更改永久生效。
要针对每个文件进行设置,请使用文件局部变量来设置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