将 kpsewhich 的输出写入文件时出现问题

将 kpsewhich 的输出写入文件时出现问题

我在文件夹中创建了一个文件“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}

相关内容