使用 minted 选项加载 tcolorbox 会破坏 tikzexternalize 并导致 makeglossaries 出现编译错误

使用 minted 选项加载 tcolorbox 会破坏 tikzexternalize 并导致 makeglossaries 出现编译错误

我遇到了一个奇怪的问题,目前已经确定是以下任一情况:

\usepackage[minted]{tcolorbox} 
\makeglossaries{}

在我的序言中。我正在使用luatex启用shell-escape的(用于 minted)。

我正在为我的博士论文使用自定义文档类PhDthesiscustomCls(可在此处下载要点在这里

该类文件加载tikzpgfplots以及一些其他 tikz/pgf 相关的库,并设置 tikz 外部化。

如果我从包使用中排除该minted选项,一切都会正常tcolorbox工作。如果我注释掉该makeglossaries命令,一切也会正常。但是,当同时包含这两个选项时,代码运行时不会出错仅有的如果 tikzexternalisation 在本地被禁用,即

  • minted加载时无需该选项即可工作tcolorbox
  • 无需makeglossaries
  • tikz但是当我们希望同时拥有上述两个功能时,只有在本地禁用外部化时,代码才会编译。

为什么会发生这种情况?我该如何解决?

这是复制问题的最小示例。

\documentclass[oneside,12pt,online,a4paper,pdfa1,biblatex,fontC]{PhDthesiscustomCls}
%\tikzset{external/force remake}

\usepackage[minted]{tcolorbox} % problematic with the "minted" option

\usepackage{graphics} % for improved inclusion of graphics
\usepackage{csquotes}
\usepackage{xcolor}

\loadglsentries{glossary}
\makeglossaries{}

%%%%%%%%%%% Document %%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}

\tableofcontents
\cleardoublepage
\listoffigures
\cleardoublepage

% \printglossaries{}

\tikzexternaldisable % force disable externalisation to compile without errors
\begin{figure}[h]
    \centering
    \includegraphics[width=\textwidth]{example1.tikz}
    \caption{\LaTeX contributions}
\end{figure}

Hello world

\end{document}

这里的文件example1.tikz

\begin{tikzpicture}
  \begin{axis}[title  = Contributions per category
                          at LaTeX-Community.org,
    xbar,
    y axis line style = { opacity = 1 },
    axis x line       = none,
    tickwidth         = 0pt,
    enlarge y limits  = 0.2,
    enlarge x limits  = 0.02,
    symbolic y coords = {LaTeX, Tools, Distributions, Editors},
    nodes near coords,
  ]
  \addplot coordinates { (57727,LaTeX)         (5672,Tools)
                         (2193,Distributions)  (11106,Editors) };
  \addplot coordinates { (14320,LaTeX)         (1615,Tools)
                         (560,Distributions)   (3075,Editors)  };
  \legend{Topics, Posts}
  \end{axis}
\end{tikzpicture}

答案1

该问题可以归结为以下例子。

\documentclass{book}

\newwrite\blubi
\newwrite\blubii
\newwrite\blubiii
\newwrite\blubiv
\newwrite\blubv
\newwrite\blubvi
\newwrite\blubvii
\newwrite\blubviii
\newwrite\blubix
\newwrite\blubx
\newwrite\blubxi
\newwrite\blubxii


\RequirePackage{tikz}
\usetikzlibrary{external}
\tikzexternalize

\tikzset{external/system call={lualatex
\tikzexternalcheckshellescape -halt-on-error -interaction=batchmode
                              -jobname "\image" "\texsource"}}

\begin{document}

\tableofcontents % \tf@toc=\write16

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

Hello world

\end{document}

这个例子打开了很多写入流(就像你自己的例子一样:和两个打开的流minted的选项)。tcolorbox\makeglossaries

pdflatex 会得到在\tableofcontents尝试打开流 16 时众所周知的错误

  ! No room for a new \write.

lualatex 有更多的写入流,所以不会抱怨。但现在你遇到了问题pgf:包在各个地方使用\immediate\write16它来记录日志消息。

这意味着你会突然进入目录,像这样

  ===== Image 'test-utf8-figure0' is up-to-date. ======

这会导致各种错误。我认为这是 pgf 中的一个错误,应该在那里报告。

\newwrite\blub您可以在之前尝试一种解决方法\tableofcontents。这样日志消息将不再以目录结尾。请注意,文档中每次更改写入流的数量都可能再次导致错误。

我添加了 pgf 的错误报告:https://sourceforge.net/p/pgf/bugs/488/

相关内容