我在文件夹中创建了一个文件“blub.temp”,然后尝试了以下操作
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{shellesc}
%correct small bug in shellesc:
\protected\def\ShellEscape{\immediate\write18 }
\begin{document}
\ShellEscape{kpsewhich article.cls >> blub.temp}
\immediate\write18{kpsewhich book.cls >> blub.temp}
\end{document}
当我编译这个(miktex、texlive 2015、texlive 2016 上的 pdflatex)没有shell-escape 我在日志文件中看到类似这样的消息
runsystem(kpsewhich book.cls >> blub.temp)...executed safely (allowed).
但是 blub.temp 没有内容。
当我编译时和--shell-escape 我看到类似的消息
runsystem(kpsewhich book.cls >> blub.temp)...executed.
并且 blub.temp 包含两个路径。
为什么命令执行后不执行任何操作--shell-escape
?可以纠正吗?
编辑
正如 texlive 列表所确认的,重定向(>
, >>
)在受限模式下不起作用。所以问题是是否有其他方法可以捕获 kpsewhich 的输出(不使用管道或 --shell-escape)...
答案1
那么 Lua 怎么样?
\documentclass{article}
\begin{document}
\directlua{
local fp = io.popen("kpsewhich article.cls")
local fh = io.open("blub.temp", "a")
while true do
local line = fp:read()
if line == nil then
break
end
fh:write(line, "\noexpand\n")
end
fh:close()
fp:close()
}
\end{document}