考虑以下 mwe:
\documentclass{article}
\usepackage{tcolorbox}
\tcbuselibrary{skins,breakable}
\usetikzlibrary{calc}
\usepackage{lipsum}
\begin{document}
\begin{tcolorbox}[enhanced,breakable,segmentation code={\draw[red]($(segmentation.west)+(1,0)$)--($(segmentation.east)+(-1,0)$);}]
test
\tcblower
Works as expected
\end{tcolorbox}
\begin{tcolorbox}[enhanced,breakable,segmentation code={\draw[red]($(segmentation.west)+(1,0)$)--($(segmentation.east)+(-1,0)$);}]
\lipsum
\tcblower
Does not work as expected
\end{tcolorbox}
\end{document}
未破损的盒子结果:
破箱结果:
目标是拥有具有给定分割样式的 tcolorbox,例如比框宽度短一点的红线。
如果盒子没有破损,代码可以正常工作,但是如果盒子破损,代码似乎会被忽略。我做错了什么?
编辑:我刚刚发现我可以在中断后强制分段代码并将其放入其中extend freelance last
,但这不是一个可行的解决方案,因为它也会以不受欢迎的方式改变框架的外观。
答案1
对于tcolorbox
3.00 (2014/05/08) 之前的版本,如果您想使用,segmentation code
则需要freelance
密钥而不是enhanced
(事实上,使用您的原始设置,您的代码不会生成您在问题中显示的图像;在两种情况下,如果使用 和不使用 ,segmentation code
该选项都会被忽略):enhanced
freelance
\documentclass{article}
\usepackage{tcolorbox}
\tcbuselibrary{skins,breakable}
\usetikzlibrary{calc}
\usepackage{lipsum}
\begin{document}
\begin{tcolorbox}[freelance,breakable,segmentation code={\draw[red]($(segmentation.west)+(1,0)$)--($(segmentation.east)+(-1,0)$);}]
test
\tcblower
Works as expected
\end{tcolorbox}
\begin{tcolorbox}[freelance,breakable,segmentation code={\draw[red]($(segmentation.west)+(1,0)$)--($(segmentation.east)+(-1,0)$);}]
\lipsum
\tcblower
Works as expected
\end{tcolorbox}
\end{document}
但是,使用freelance
皮肤会改变框在分页时的行为方式,因此您需要重新做框的某些部分才能获得原始行为。
从tcolorbox
3.00 (2014/05/08) 开始,segmentation code
也可以与 一起使用enhanced
,但我建议使用segmentation style
而不是segmentation code
(这适用于所有版本):
\documentclass{article}
\usepackage{tcolorbox}
\tcbuselibrary{skins,breakable}
\usetikzlibrary{calc}
\usepackage{lipsum}
\newtcolorbox{mybox}{
enhanced,
breakable,
segmentation style={red,solid,shorten >= 1cm,shorten <= 1cm}
}
\begin{document}
\begin{mybox}
test
\tcblower
Works as expected
\end{mybox}
\begin{mybox}
\lipsum
\tcblower
Works as expected
\end{mybox}
\end{document}