lualatex 在独立使用 convert 时出现问题

lualatex 在独立使用 convert 时出现问题

convert对于以下文件,我在使用以下选项时遇到错误standalone lualatex。切换到pdflatex(由于其他原因,我无法将其用于此绘图)或者手动转换(不方便)确实有效。

\RequirePackage{luatex85}
%\documentclass{standalone}         % Does work but does not convert
\documentclass[convert]{standalone} % Does not work
\begin{document}
    MWE
\end{document}

我如何使用lualatex这个convert选项?

我正在使用lualatex --shell-escape filename(或pdflatex --shell-escape filename) 和更新的 MikTeX。


根据要求提供的其他信息:

我得到的错误lualatex --shell-escape

\sa@box=\box37

! Bad number (18).
l.921     \ifeof18 
                 \else 3\fi
? 

Class standalone Warning: Shell escape disabled! Cannot convert file 'test.pdf'.

这让我很困惑,因为我明确使用了--shell-escale(并且--enable-write18没有区别)。

添加\RequirePackage{shellesc}没有帮助(我尝试在之前和之后luatex85以及之后添加它\documentclass)。


更多信息

有问题的调用源自文件standalone.cls[2015/07/15 v1.2] 中从第 919 行开始的以下代码片段:

\ifcase0%
    \expandafter\ifx\csname pdfshellescape\endcsname\relax
    \ifeof18 \else 3\fi
    \else\the\pdfshellescape\fi
\relax% 0
    \sa@convert@failuremsg
        {standalone}{Shell escape disabled! Cannot convert file '\infile'.}{}%
    \global\let\sa@convert@stop\relax
\or% 1
    \sa@convert{Conversion unsuccessful!\MessageBreak
                There might be something wrong with your\MessageBreak
                conversation software or the file permissions!}%
\else% 2 or 3
    \sa@convert{Conversion failed! Please ensure that shell escape\MessageBreak is enabled (e.g. use '-shell-escape').}%
\fi

我是否可以正确地假设这是用来测试\write18(shellescape) 功能的可用性,而该功能之所以被调用是因为出现了问题pdfshellescape

答案1

ArTourter 的评论向我指出了以下解决方案(即解决方法)。

问题似乎有两个方面:

  1. pdfTeX 原语\pdfshellescape在较新的 LuaTeX 中不再定义
  2. \write18功能并未按 standalone预期实现。

问题 1pdftexcmds可以通过定义\pdf@shellescape哪些或多或少实现了\pdfshellescape预期功能的包来解决。因此我们可以使用

\RequirePackage{pdftexcmds}
\makeatletter
  \let\pdfshellescape\pdf@shellescape
\makeatother

定义一个工作\pdfshellescape宏。

问题 2shellesc已通过重新定义的包解决了该问题,以便能够按照独立要求\write访问该功能。\write18

以下内容成功规避了错误standalone并生成了 pdf 以及转换的位图。

\RequirePackage{shellesc}                % implement \write18

\RequirePackage{pdftexcmds}              % fake \pdfshellescape so
\makeatletter                            % standalone knows about it
  \let\pdfshellescape\pdf@shellescape
\makeatother

\RequirePackage{luatex85}
%\documentclass{standalone}
\documentclass[convert]{standalone}

\begin{document}

\begin{tikzpicture}
  MWE
\end{tikzpicture}

\end{document}

拨打lualatex --shell-escape

相关内容