默认情况下,TeX 处于受限 write18 模式,这意味着它只能调用少数几个外部程序。我该如何编辑该程序列表?这将使我能够使用需要调用除默认允许的程序之外的其他程序的软件包,而不必牺牲受限 write18 的所有安全性。
我正在寻找适用于 MiKTeX 和 TeX Live 的解决方案。
答案1
对于 TeX Live,从终端发出
kpsewhich texmf.cnf
这应该回答
/usr/local/texlive/2019/texmf.cnf
(年份可能有所不同)。这是最高级别,texmf.cnf
此处设置的值不会被稍后加载的类似配置文件覆盖。
主texmf.cnf
文件/usr/local/texlive/2019/texmf-dist/web2c/texmf.cnf
包含
shell_escape_commands = \
bibtex,bibtex8,\
extractbb,\
gregorio,\
kpsewhich,\
makeindex,\
repstopdf,\
r-mpost,\
texosquery-jre8,\
检查列表,因为新版本的 TeX Live 可能会更改列表。
现在将上面的列表附加到顶层texmf.cnf
文件(您需要适当的权限才能编辑它),并以相同的方式添加您希望在受限 shell 中可用的程序。请仔细注意格式:尾随反斜杠避免在逗号后添加空格。
但是如果您的系统因在受限 shell 转义中运行危险程序而受到损坏,请不要怪我。
pdflatex
您可以在从命令行调用(或其他引擎)时动态添加一个或多个程序,例如(Bash 语法)
shell_escape_commands=$(kpsewhich -var-value=shell_escape_commands),ls pdflatex file
这里是添加的程序ls
。