gnuplottex 和 lualatex

gnuplottex 和 lualatex

编辑:这个问题涵盖了一个错误gnuplottex该问题将在 TeXLive 2013 中修复。如果您仍希望修复该错误,请从 CTAN 下载最新的上游版本并自行编译。


gnu.tex

\documentclass[border=3mm]{standalone}
\usepackage{gnuplottex} % use gnuplot
\usepackage{epstopdf} % convert resulting eps to pdf
\begin{document}

\begin{gnuplot}[terminal=epslatex,terminaloptions=color]
    set xlabel '$x$'
    set ylabel '$y$'
    plot sin(x) title '$\sin x$'
\end{gnuplot}

\end{document}

我现在正尝试编译lualatex;不幸的是,这不起作用。我lualatex以这种方式调用

$ lualatex --shell-escape gnu.tex

日志文件内容如下

...
 \write18 enabled.
...
Package gnuplottex Warning: Shell escape not enabled.
(gnuplottex)                You'll need to convert the graphs yourself..
...

如果我使用pdflatex命令行进行编译

$ pdflatex --shell-escape gnu.tex

它运行良好。

概括:不相容?gnuplottexlualatex

答案1

我认为这是一个错误gnuplottex.sty:该包通过写入文件/tmp并为其分配名称来测试 shell 逃逸没有扩展名。TeX 实现在处理文件名中缺少的扩展名时可能会有所不同,但在找到扩展名时应该做同样的事情。因此,如果测试是

%% test if shell escape really works
\ifShellEscape
  \def\tmpfile{/tmp/w18-test-\the\year\the\month\the\day\the\time.tex}
  \ifmiktex
    \def\tmpfile{w18-test-\the\year\the\month\the\day\the\time.tex}
    \immediate\write18{echo t > "\tmpfile"}
  \else
    \immediate\write18{touch \tmpfile}
  \fi
  \IfFileExists{\tmpfile}{\ShellEscapetrue}{\ShellEscapefalse}
  \ifmiktex
    \immediate\write18{del "\tmpfile"}
  \else
    \immediate\write18{rm -f \tmpfile}
  \fi
\fi

一切都将起作用(我已经添加了一个明确的.tex扩展)。

您可以通过添加自己的测试来解决此错误:

\documentclass[border=3mm]{standalone}
\usepackage{gnuplottex} % use gnuplot
\usepackage{pdftexcmds,ifluatex}
\makeatletter
\ifluatex
  \ifnum\pdf@shellescape=\@ne
    \ShellEscapetrue
  \fi
\fi
\makeatother

\usepackage{epstopdf} % convert resulting eps to pdf
\begin{document}

\begin{gnuplot}[terminal=epslatex,terminaloptions=color]
    set xlabel '$x$'
    set ylabel '$y$'
    plot sin(x) title '$\sin x$'
\end{gnuplot}

\end{document}

您仍会收到消息,但当-shell-escape在命令行中给出时,文档将正确编译。不过,您需要 LuaTeX 版本 >0.67 才能实现此解决方法。

相关内容