我想在文档中编写 LaTeX 代码片段,因此我加载了 minted 包。但在编译时,弹出以下错误:
!软件包 minted 错误:您必须使用 -shell-escape 标志调用 LaTeX。请参阅 minted 软件包文档以了解解释。
请帮助我解决这个问题!
提前致谢!
答案1
由于 minted 包需要访问 shell,因此应在编辑器中允许这样做。为此,您必须在编辑器-shell-escape
中将 LaTex、PdfLaTex、XeLaTex 和 LuaLaTex 添加到命令列表中。在“TexWorks”中,通过进入“选项 > 配置 TexWorks > 命令”修改这些命令,通过添加以下命令更改以下命令-shell-escape
:
latex.exe -shell-escape -src -interaction=nonstopmode %.tex
pdflatex.exe -shell-escape -synctex=1 -interaction=nonstopmode %.tex
xelatex.exe -shell-escape -synctex=1 -interaction=nonstopmode %.tex
lualatex.exe -shell-escape -synctex=1 -interaction=nonstopmode %.tex
启用了 pdflatex 和 shellescape 的 TeXworks
\write18 enabled
一旦上述操作在文件上运行,控制台就会显示
或者
您还可以将代码保存在 tex 文件中(假设您将其命名为testMinted.tex
),然后通过进入文件所在的文件夹(假设它在C:\Users\uqapourm\Desktop\testMinted
)并pdflatex.exe -shell-escape -synctex=1 -interaction=nonstopmode testMinted.tex
在命令行中运行来从命令行对其进行编译。
安全
有时,能够从 tex 文件内部运行外部命令很有用:例如,它允许外部化某些排版,或使用 bibtex 等外部工具。这可通过 tex\write18
原语实现。
The problem is that it allows for almost everything.
tex 文件旨在便于携带,因此在编译第三方文件时不必担心任何安全问题。因此默认情况下,此原语是禁用的。
如果用户需要使用它,他需要明确地告诉编译器他信任该文件的作者并且与 shell 进行交互,这正是可选参数的意义所在--shell-escape
。
多年来\write18
一直被用作操作系统的后门。从语法上讲,TeX 将其视为写入文件,但register 18
实际上将其视为预先打开的文件并执行命令。
“不受限制”write18
意味着您可以执行任何命令,因此如果您允许这样做并运行某人发送的 TeX 文件,它可能会执行任意代码,将您的密码文件通过电子邮件发送给垃圾邮件机器人或其他什么。
这显然是一种安全风险,但是有些命令自然是 Tex 发行版的一部分,您可能希望始终允许它们(例如图像和字体转换),因此 web2c 允许您(或默认的 texlive 维护者)设置一组“允许的、安全的”命令,并且允许这些命令在受限模式下运行。
第三种选择是根本不执行命令\write18
。
“restricted \write18 enabled”是什么意思,为什么 TexLive 一直报告它?
如何在 TeXworks 中启用 shell-escape?
附言
有时,您需要清除缓存才能使包正常工作。这会减慢操作速度,但可以避免错误。为此,请将选项添加到\usepackage[cache=false]{minted}
。