在 \tikzexternalize 之后加载 minted 时出现问题

在 \tikzexternalize 之后加载 minted 时出现问题

昨天我找到了我以前的论文,发现有一个新版本的 minted(2.0+),但由于所有列表都没有突出显示,因此它无法与我的旧论文一起使用。

不幸的是,我认为存在一个问题,该问题取决于\tikzexternalize命令的位置。如果此命令位于\usepackage{minted}我的列表之前,则根本不会突出显示。但是放在作品\usepackage{minted}之前\tikzexternalize。使用旧版本\usepackage{minted1}也可以正常工作。因此,这似乎只是 minted 2.0+ 的问题。

以下是该问题的 MWE(参见注释行):

\documentclass[11pt,a4paper]{article}
\usepackage[T1]{fontenc}

\usepackage{pgf,tikz}
\usetikzlibrary{external}
\tikzset{external/system call={pdflatex --shell-escape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"}}

% Loading minted here and everything is fine
%\usepackage{minted}

\tikzexternalize

% Loading minted here will result in no highlighting
\usepackage{minted}

\begin{document}

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

\begin{minted}[frame=none,fontsize=\small,linenos=true]{c}
int main(int argc, char*argv[])
{
    (void) printf("Hello World\n");

    return EXIT_SUCCESS;
}
\end{minted}

\end{document}

所以我的问题是:这种行为是正常的还是有意的?

有关我正在使用的设置的一些信息:

MikTeX version:   miktex-2.9.5721
Minted version:   2015/09/09 v2.1 Yet another Pygments shim for LaTeX
Python version:   Python 3.5.0
Pygments version: Pygments version 2.0.2, (c) 2006-2014 by Georg Brandl.

为了撰写我的论文,我使用(在 Windows 8 下)

pdflatex --shell-escape --enable-write18 mwe

答案1

我认为我找到了解决这个问题的方法:

简单交换(在 minted.sty 文件中)

\ifcsname tikzexternalrealjob\endcsname
    \minted@drafttrue
    \minted@cachefalse
\else
\fi

和:

\ifcsname tikzifexternalizing\endcsname 
    % if \tikzexternalize is set before \usepackage{minted} this branch is used
    % the true branch of the \tikzifexternalizing will only be used if the tikz externalizing job is running at the moment
    \tikzifexternalizing{\minted@drafttrue\minted@cachefalse}{}
\else
    % else this old code will be used which will definitely work in all other cases (when \tikzexternalize is set after \usepackage{minted})
    \ifcsname tikzexternalrealjob\endcsname
        \minted@drafttrue
        \minted@cachefalse
    \else
    \fi
\fi

\tikzifexternalizing仅当外部化作业运行时才会处理真分支(根据包文档)。

也许可以通过更漂亮、更优雅的编码来解决问题,但目前它对我来说已经够用了。

相关内容