tcolorbox:“最后放大底部”并非在所有情况下都有效

tcolorbox:“最后放大底部”并非在所有情况下都有效

我想确保 tcolorbox 后面的短文本(签名)不会在自己的页面上结束。我正在使用\raisebox并尝试使用 来放大 tcolorbox 的边界框enlarge bottom finally by

\documentclass{article}
\usepackage[many]{tcolorbox}
\usepackage{lipsum}

\begin{document}
 \begin{tcolorbox}[
  enlarge bottom finally by=1cm,
  enhanced,
  show bounding box,
  breakable,
  title={my title},title after break={my title}]
  %\lipsum[1] %for a box with a break.
  \lipsum[1-4]b\\c\\d\\e%
  \raisebox{-1cm}[0pt][0pt]{some text}
 \end{tcolorbox}
\end{document}

大多数情况下,边界框都符合预期。

在此处输入图片描述

但是如果框本身可以放在页面上,但考虑到额外的底部,框就会太大,那么就会出现问题。在这种情况下,额外的底部被挤压,我的文本位于页脚中:

在此处输入图片描述

我怎样才能告诉 tcolorbox 尽早打破这个框,而不需要采取一些手动微调参数(该框位于自动创建的文档中)?

答案1

输出可能不符合预期,但算法运行正常。

这里的问题是:

  • 如果盒子破损,第一部分或中间部分的高度与视觉框架一致,
  • 盒子的最后部分或未破损部分延长1cm(不可见)。

临界情况是,当箱子内容物完全适合第一部分或中间部分的容器时,但不适合最后一部分或未破损部分的容器(该容器较小,因为保留了 1cm)。

为了处理这个案例,我认为有以下几种可能性:

  • 打破盒子,在下一页放一个空的盒子结尾,
  • 实现一些循环来找到更早的断点(如果有的话);断点会短得多,一两行会转到下一页,
  • 关闭页面上所有内容(第一部分和中间部分)的框,并在需要时从页面底部窃取空间。这是当前的实现。

这三种可能性都不理想。对于许多用例来说,最后一种是最好的,特别是因为算法还必须考虑可选的下部框部分。

现在,对于此处的应用程序,您可以添加一个shrink break goal以缓解或至少改变效果。此参数实际上会缩小算法所看到的页面上的可用空间。破碎的框会变小,但任何延伸到页面底部的框也会变小。例如:

\documentclass{article}
\usepackage[many]{tcolorbox}
\usepackage{lipsum}

\begin{document}
  \begin{tcolorbox}[
  enlarge bottom finally by=1cm,
  shrink break goal=5mm,%<-----------------------
  enhanced,
  show bounding box,
  breakable,
  title={my title},title after break={my title}]
  %\lipsum[1] %for a box with a break.
  \lipsum[1-4]b\\c\\d\\e%
  \raisebox{-1cm}[0pt][0pt]{some text}
  \end{tcolorbox}
\end{document}

相关内容