我想呈现一个可分解的、tcolorbox
包含多个短文本段落的内容,其中每对段落由一条规则分隔。
\documentclass{article}
\usepackage{pgffor}
\usepackage{tcolorbox}
\tcbuselibrary{breakable}
\begin{document}
\begin{tcolorbox}[breakable]
\foreach \n in {1, ..., 10}
{
text\par
\hrulefill\par
}
\end{tcolorbox}
\end{document}
分页符应仅出现在规则处。当出现分页符时,我想删除分页符之前或之后的规则,因为段落已被分页符分隔。有没有办法识别可分页符中分页符发生的位置tcolorbox
?
答案1
简短的回答是:
- 将不应损坏的文本部分放入其中以保护它们
minipage
。 \cleaders
将分隔规则放入带有 eg或 的构造中\xleaders
。这将使线条在框中断处消失。
长答案使用\tcbline*
当前tcolorbox
开发的内容(尚未发布;将在版本中发布3.10
)。我将其作为补丁放入以下源代码中。
这\tcbline*
会在框中断处消失。此外,可以使用 设置其样式segmentation style
。我的示例显示了两种变体。
从你的问题来看,我推测你想要关闭部分盒子:
\documentclass{article}
\usepackage[many]{tcolorbox}
\usepackage{lipsum}
\makeatletter
%%%% begin patch for tcolorbox older than 3.10 %%%%%
\def\tcb@draw@pseudo@segmentation#1{%
\begingroup\tcb@shield@externalize\begin{tikzpicture}%
\path[use as bounding box] (0,{\the\dimexpr-\kvtcb@middle-\kvtcb@boxsep\relax})
rectangle (\linewidth,{\the\dimexpr\kvtcb@middle+\kvtcb@boxsep\relax});
\node[line width=0mm,inner sep=0mm,draw=none,fill=none,rectangle,
name=segmentation,at={({\the\dimexpr-\kvtcb@boxsep-(#1)\relax},0)},right,%
minimum width=\tcb@innerwidth,minimum height=\the\dimexpr\kvtcb@middle*2\relax]{};
\tcb@drawlower@path%
\end{tikzpicture}\endgroup}
\def\tcbline@star#1{%
{\parskip\z@\par\nointerlineskip}%
\xleaders\vbox{\tcb@draw@pseudo@segmentation{#1}}\vskip\dimexpr(\kvtcb@middle+\kvtcb@boxsep)*2\relax%
{\parskip\z@\par\nointerlineskip}}
\def\tcbline@#1{%
{\parskip\z@\par\nointerlineskip}%
\tcb@draw@pseudo@segmentation{#1}%
{\parskip\z@\par\nointerlineskip}}
\def\tcbline{%
\@ifstar{\iftcb@hasLower\tcbline@star{\kvtcb@leftlower}\else\tcbline@star{\kvtcb@leftupper}\fi}%
{\iftcb@hasLower\tcbline@{\kvtcb@leftlower+\@totalleftmargin}\else\tcbline@{\kvtcb@leftupper+\@totalleftmargin}\fi}}
%%%% end patch for tcolorbox older than 3.10 %%%%%
\makeatother
\begin{document}
%%% Example with thick complete lines
\begin{tcolorbox}[breakable,
enhanced standard,% for segmentation style
segmentation style={solid,line width=0.5mm},
]
\foreach \n in {1,...,10}
{
\begin{minipage}{\linewidth}
\lipsum[\n]
\end{minipage}
\tcbline*
}
\end{tcolorbox}
\clearpage
%%% Example with hrule style line (in red, for fun)
\begin{tcolorbox}[breakable,
enhanced standard,% for segmentation style
segmentation style={solid,line width=0.4pt,
shorten >=5mm,shorten <=5mm,red},
]
\foreach \n in {1,...,10}
{
\begin{minipage}{\linewidth}
\lipsum[\n]
\end{minipage}
\tcbline*
}
\end{tcolorbox}
\end{document}
第一个示例部分用粗线表示:
第二个示例部分采用细红线(且更短):