我遇到了一个奇怪的问题,目前已经确定是以下任一情况:
\usepackage[minted]{tcolorbox}
\makeglossaries{}
在我的序言中。我正在使用luatex
启用shell-escape
的(用于 minted)。
我正在为我的博士论文使用自定义文档类PhDthesiscustomCls
(可在此处下载要点在这里。
该类文件加载tikz
,pgfplots
以及一些其他 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/