使用 minted 和 TikZ externalize 与 xelatex 时出错

使用 minted 和 TikZ externalize 与 xelatex 时出错

请参阅以下 MWE。

\documentclass{article}
\usepackage{minted, tikz}
\usepackage{fontspec}
\setmainfont{Arial}
\usetikzlibrary{external}
\tikzset{external/system call={%
    xelatex \tikzexternalcheckshellescape
    -halt-on-error -interaction=batchmode
    -jobname "\image" "\texsource"}}
\tikzexternalize

\begin{document}
\begin{tikzpicture}
  \draw (0,0) --(1,2);
\end{tikzpicture}
\end{document}

如果我尝试使用以下命令进行编译

xelatex -shell-escape bug.tex

我收到以下错误

This is XeTeX, Version 3.1415926-2.2-0.9995.2 (TeX Live 2009/Debian)
entering extended mode

! Package tikz Error: Sorry, the system call 'xelatex -halt-on-error -interacti
on=batchmode -jobname "bug-figure0" "\def\tikzexternalrealjob{bug}\input{bug}"'
 did NOT result in a usable output file 'bug-figure0' (expected one of .pdf:.jp
g:.jpeg:.png:). Please verify that you have enabled system calls. For pdflatex,
 this is 'pdflatex -shell-escape'. Sometimes it is also named 'write 18' or som
ething like that. Or maybe the command simply failed? Error messages can be fou
nd in 'bug-figure0.log'. If you continue now, I'll try to typeset the picture.

See the tikz package documentation for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.15 \end{tikzpicture}

笔记:

  1. 使用 Debian squeeze 版的 Tex Live 2009 进行测试。版本minted
    (不在 Tex Live 2009 中) 为 v1.7 (当前版本)。

  2. 删除\tikzexternalize\usepackage{minted}或 tikz 图片中的任意一个都
    可以消除错误。

  3. \tikzset在寻找让 tikz externalize 与 xelatex 协同工作的方法时,我发现了里面的神奇咒语 。它一直有效,直到我开始使用 minted。

  4. xelatex是因为 而需要fontspec,并且fontspec
    因为 而需要Arial。如果没有\setmainfont{Arial}\usepackage{fontspec},该示例将编译为

    pdflatex -shell-escape bug.tex
    

    xelatex奇怪的是,由于我添加了\tikzset一些东西,它仍然在某些地方有用

  5. 我之所以使用是Arial因为期刊的要求太过疯狂。我意识到我
    不需要使用它,因此也不需要使用xelatex。由于pdflatex
    此示例运行良好,因此整个问题对我来说都消失了。但是,这
    对我来说仍然像是一个错误,因此发布。

  6. 错误出现在外部化文件中,这里默认为bug-figure0bug-figure0.log

     ! Package minted Error: You must invoke LaTeX with the -shell-escape flag.
    

    在我看来,由于
    某种原因,minted 和 tikz externalize 正在相互碰撞。

答案1

也许尚未准备好的一个原因是您的接受率。

运行后出现xelatex --shell-escape bug.tex错误信息给出提示:

 Error messages can be found in 'bug-figure0.log'

在此文件中你会发现以下提示:

Package ifplatform Warning: 
    shell escape is disabled, so I can only detect \ifwindows.

! Package minted Error: You must invoke LaTeX with the -shell-escape flag.

此错误表明该选项shell-escape不会被继承。

为了避免错误,您必须/tikz/external/system call指定--shell-escape

这里是例子:

\documentclass{article}
\usepackage{minted, tikz}
\usepackage{fontspec}
\setmainfont{Arial}
\usetikzlibrary{external}
\tikzset{
    external/system call={%
    xelatex \tikzexternalcheckshellescape
    -halt-on-error -interaction=batchmode --shell-escape
    -jobname "\image" "\texsource"}}
\tikzexternalize

\begin{document}
\begin{tikzpicture}
  \draw (0,0) --(1,2);
\end{tikzpicture}
\end{document}

相关内容