tcolorbox 和 TikZ 外部的问题

tcolorbox 和 TikZ 外部的问题

我正在写一本书,里面会包含很多 TikZ 图形和 tcolorbox。为了加快速度,我想使用 TikZ 外部库。但是,我遇到了一些问题,我想了解一下。也许这是一个错误?问题是,即使我使用\tcbset{shield externalize},tcolorbox 的一些键似乎也会导致问题。

我可以给出的一个小例子如下:

\documentclass[a4paper]{book} 
\usepackage[many]{tcolorbox}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize
\tcbset{shield externalize} 

\begin{document}

\chapter{First Chapter}     

\begin{tcolorbox}[enhanced, attach boxed title to top left, title=Title]
    Hello
\end{tcolorbox}

\end{document}

这会给出错误,暗示 TikZ 尝试外部化标题框时出现问题。删除其中一个\tikzexternalizeattach boxed title to top left将使问题消失。

我在 tcolorbox 手册(非常出色)中找不到任何关于此问题的信息。有人能解释一下这是怎么回事吗?或者这可能是一个错误shield externalize

在这个特殊情况下,我的解决方法是使用\tikzexternalenable\tikzexternaldisable围绕每个tikzpicture,但是,我非常想避免这种情况。所以,也许有人也可以给我一些外部化 tikz 图形的替代方法,例如使用 latexmk?

为了完整性:我正在使用“pgf 2019/02/02 v3.1.1 (3.1.1)”和“tcolorbox 2018/12/07 版本 4.15 文本颜色框”。

答案1

问题的原因在于,框选的标题tcolorbox本身就是 ,但具有更高的层数。对于这个更高的层, 的全局设置shield externalize被重置为默认值,即false

对于几乎所有选项,此重置都很有用(记录在第 4.16 节中)。但是,我认为,这shield externalize不是真的。此外,文档声称\tcbset{shield externalize}在序言中屏蔽了tcolorbox文档中的任何内容。

\tcbset{shield externalize}如果用替换,问题就会消失,\tcbsetforeverylayer{shield externalize}因为这适用于所有图层上的所有框:

\documentclass[a4paper]{article}
\usepackage[most]{tcolorbox}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize
%\tcbset{shield externalize}
\tcbsetforeverylayer{shield externalize}% <--- interim solution before bug fix


\begin{document}

\begin{tcolorbox}[enhanced, attach boxed title to top left, title=Title]
    Test
\end{tcolorbox}

\end{document}

由于我无法想象一个用例,其中人们不想将其应用于所有层,因此我将更改下一版本的实现tcolorbox。未来的更改将从操作shield externalize中删除reset。之后,\tcbset{shield externalize}将足以满足文档的要求。

相关内容