我正在写一本书,里面会包含很多 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 尝试外部化标题框时出现问题。删除其中一个\tikzexternalize
或attach 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}
将足以满足文档的要求。