昨天我找到了我以前的论文,发现有一个新版本的 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
仅当外部化作业运行时才会处理真分支(根据包文档)。
也许可以通过更漂亮、更优雅的编码来解决问题,但目前它对我来说已经够用了。