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 的评论向我指出了以下解决方案(即解决方法)。
问题似乎有两个方面:
- pdfTeX 原语
\pdfshellescape
在较新的 LuaTeX 中不再定义 - 该
\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
。