我想为可破坏的 tcolorbox 的下部定义一种特殊设计。lowerpart
我指的是之后定义的所有内容\tcblower
。我想为下部定义一些覆盖或边框或其他内容,而不管它覆盖了多少页或何时在破坏的框中启动。
假设
一条交叉线覆盖了框的下部。当 tcolorbox 不可破坏时,不会出现问题,因为segmentation
节点可以用作 的顶部参考lowerpart
。
当将此设计应用于破损的盒子时,我希望这条交叉线出现在所有包含下部部分的碎片中。如果某个碎片包含上部和下部的一部分,则该线将仅覆盖碎片的下部(如上图所示),但如果它们仅包含下部,则将覆盖整个碎片。
例如,下图显示的左页“正确”,但右页不正确,因为红线不是从左上角开始。
另一个例子,左页有一个完整的方框,上面有一条“正确”的红线,还有一个破损的方框的第一部分,上面有一条“错误”的红线。它不应该出现在这里,因为这个部分不包含任何下部文本。
从前面的例子来看,似乎是segmentation
从以前的使用或定义中记住的,并且没有在不应该存在的片段中删除。
先前的例子有以下变化:
\documentclass[a5paper]{article}
\usepackage[most]{tcolorbox}
\usepackage{geometry}
\usepackage{lipsum}
\newtcolorbox{mybox}[1][]{%
enhanced,
breakable,
overlay unbroken={%
\path[draw=red] (segmentation.west)--(frame.south east);},
overlay broken={%
\path[draw=red] (segmentation.west)--(frame.south east);},
#1
}
\begin{document}
\begin{mybox}
This is the upper part
\tcblower
\lipsum[3]
\end{mybox}
\begin{mybox}
\lipsum[1-2]
\tcblower
\lipsum[3-4]
\end{mybox}
\end{document}
作为替代方案,我尝试使用bicolor
皮肤,但segmentation style
选项不够灵活,并且segmentation code
不符合框架格式。
您能建议一个替代解决方案吗?
答案1
有一个名为 的宏,tcbsegmentstate
其中包含0
、1
或2
。此宏针对每个未破损的框和每个破损的部分框设置,含义如下:
0
:当前(部分)框仅包含上部。1
:当前(部分)框包含上部和下部。该segmentation
节点可用于定位。2
:当前(部分)框仅包含下部。
示例代码可以做如下修改:
\documentclass[a5paper]{article}
\usepackage[most]{tcolorbox}
\usepackage{geometry}
\usepackage{lipsum}
\makeatletter
\newtcolorbox{mybox}[1][]{%
enhanced,
breakable,
overlay={%
\ifcase\tcbsegmentstate
% 0 = Box contains only an upper part
\or%
% 1 = Box contains an upper and a lower part
\path[draw=red] (segmentation.west)--(frame.south east);
\else%
% 2 = Box contains only a lower part
\path[draw=red] (frame.north west)--(frame.south east);
\fi%
}
#1
}
\makeatother
\begin{document}
\begin{mybox}
This is the only part
\end{mybox}
\begin{mybox}
This is the upper part
\tcblower
\lipsum[3]
\end{mybox}
\begin{mybox}
\lipsum[1-2]
\tcblower
\lipsum[3-4]
\end{mybox}
\end{document}
得出: