\write18 对 svg-package 的依赖

\write18 对 svg-package 的依赖

在以下 MWE 中,我遇到了(对我来说)非常奇怪的命令\write18svg包的依赖关系。

\documentclass{article}

\RequirePackage{svg}

\begin{document}
    \immediate\write18{echo 'test' >> test.txt}

    Some content
\end{document}

按照提供的格式编译文档时,test.txt将创建具有正确内容的文件。但是,如果我在文档标题中注释掉,\usepackage{svg}则不会创建此文件。

我使用latexmk进行lualatex编译(当然启用了 shell-escape),甚至尝试通过 编译控制台中的文档lualatex --shell-escape test.tex
使用 时pdflatex问题消失。

使用控制台时,我看到echo 'test' >> test.txt控制台上打印了内容,这表明(对我来说)它\write18正在按预期执行其工作。但是(如上所述)除非我使用该svg包,否则不会创建文件。

我认为包装\RequirePackage{...}内的某些东西svg可以起到这个作用。

有人对此有解释吗?或者我是否遇到了一个错误lualatex

答案1

LuaTeX 0.87 及更新版本支持最多 256 个写入流,因此\write18不再特殊处理。LaTeX3 项目准备shellesc包,由包加载svg,提供统一的接口来执行外部命令。

\documentclass{article}
\usepackage{shellesc}
\begin{document}
\ShellEscape{echo 'foo' >> foo.txt}
\end{document}

此包还使我们能够在最近的 LuaTeX 中使用旧语法\write18{...},但需要注意的是,它始终按 执行\immediate。如果您需要在 时运行命令\shipout,请改用\DelayedShellEscape

相关内容