识别 tcolorbox 分页符

识别 tcolorbox 分页符

我想呈现一个可分解的、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}

第一个示例部分用粗线表示:

在此处输入图片描述

第二个示例部分采用细红线(且更短):

在此处输入图片描述

相关内容