非常大的 tcolorbox

非常大的 tcolorbox

我有一个非常大的breakable tcolorbox

\documentclass{article}

\usepackage{blindtext}
\usepackage{tcolorbox}
\tcbuselibrary{breakable}

\begin{document}

\begin{tcolorbox}[breakable]
\blindtext[150]
\end{tcolorbox}

\end{document}

超出最大尺寸并导致以下错误。

! Dimension too large.
<argument> \ht \tcb@upperbox 
                             +\dp \tcb@upperbox 
l.11 \end{tcolorbox}

当我batchmode按照建议使用非常大的mdframed环境我得到一个只有一页的文档,并且有一个不包含内容的彩色框。文档tcolorbox说明如下

The box content is a TEX \vbox register which has a restricted capacity`.
Therefore, you cannot place hundreds of pages inside a tcolorbox.

处理非常大的彩色盒子的适当方法是什么?

编辑

为了补充一些背景信息,因为我的问题可能还有更好的解决方案,我有一个很大的小段落列表(可能是一两行)。我不知道静态地有多少个段落或单个段落有多长。我想将这些段落一个接一个地放在一页上,只要它们适合,否则就做分页。每页的内容都应该被一个框包围。事实上,我还想用分隔符将每对连续的段落分开,如所述这里。我也寻找过多页表格环境但也没有找到合适的。

答案1

花了一些时间,也得到了其他人的帮助,例如 egreg 和 Heiko Oberdiek,才找到合适的解决方案,现在我找到了。

我制作了一个新的增强版本,tcolorbox在撰写本文时是3.10pre1 (2014/07/16)。这是预览版,可从以下网址获取GitHub,但它将与稍后出现的官方 CTAN 版本兼容。

在这个新版本中,正常的可拆分tcolorbox内容长度从大约 16384pt 扩展因子 4大约为 65536pt。如果需要,可以通过选项键将此最大值扩展到编译器内存允许的范围内。

因此,您的示例可以顺利编译。无需进一步调整,以下内容也可以顺利编译:

\documentclass{article}

\usepackage{blindtext,pgffor}
\usepackage{tcolorbox}
\tcbuselibrary{breakable}

\begin{document}

\begin{tcolorbox}[breakable]
\foreach \n in {1,...,455}
  {\textbf{\color{red}(\n)} \blindtext[1]\par}
\end{tcolorbox}

\end{document}

这将汇编成一份文件,其中包含125 页

此页数取决于单页的实际大小tcolorbox。但它应该被保存起来以备其他情况,比如最多 100 页的盒装内容。

可以使用使用另一种算法的新选项来克服此限制breakable=unlimited。此算法并不完美,但可以影响每 65536pt 的一个行间空间(我想说:这还不算太糟……)。由于 breakabletcolorbox\box完全在内存中处理的,因此编译器内存是下一个限制。使用pdflatexMiKTeX,以下示例无需调整即可在我的系统上进行编译:

\documentclass{article}

\usepackage{blindtext,pgffor}
\usepackage{tcolorbox}
\tcbuselibrary{breakable}

\begin{document}

\begin{tcolorbox}[breakable=unlimited]
\foreach \n in {1,...,1300}
  {\textbf{\color{red}(\n)} \blindtext[1]\par}
\end{tcolorbox}

\end{document}

这将汇编成一份文件,其中包含355 页

同样,页数取决于几何形状以及盒子的内容。

如果这还不够,可以增加编译器内存。我拿了重锤(MiKTeX 依赖)来处理庞大的文档,即

pdflatex --pool-size=10000000 --max-strings=500000 --save-size=50000 --extra-mem-bot=4000000 --extra-mem-top=4000000 jobname.tex

使用这把锤子,下面的代码在我的系统上编译:

\documentclass{article}

\usepackage{blindtext,pgffor}
\usepackage{tcolorbox}
\tcbuselibrary{breakable}

\begin{document}

\begin{tcolorbox}[breakable=unlimited]
\foreach \n in {1,...,5000}
  {\textbf{\color{red}(\n)} \blindtext[1]\par}
\end{tcolorbox}

\end{document}

这将汇编成一份文件,其中包含1364 页

相关内容