tcolorbox 高度的分页问题已修复

tcolorbox 高度的分页问题已修复

height fixed for=first and middle当在 上使用该选项时tcolorbox,分页行为会变得很尴尬。

尝试取消注释以下 MWE 中已标识的行,看看会发生什么。

attach boxed title to top left有趣的是,如果注释掉该选项,则不会出现此问题。这似乎表明tcolorbox在使用时无法计算可用的剩余高度boxed title。也许盒子的高度和/或框架高度没有被考虑在此计算中(可能是tcolorbox错误?)...

有人能解决这个问题吗?我真的很想让firstmiddle框垂直填充页面,同时保持某种“正常”的分页行为。

今天我电脑上的所有软件包都已更新,但以前的版本也存在这个问题。

平均能量损失

\documentclass[12pt,letterpaper]{article}

\usepackage{parskip}
\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}
\usepackage{tcolorbox}
  \tcbuselibrary{breakable}
  \tcbuselibrary{skins}
\usepackage{lipsum}

\tcbset{%
  contourskin/.style={%
      enhanced,
      breakable,
      frame hidden,
      %height fixed for=first and middle,%% <-- This causes the issue!
      parbox=false,
      colback=white,
      attach boxed title to top left={xshift=12pt},%% <-- Issue does not occur if this line is commented...
      boxed title style={enhanced,top=4pt,left=12pt,right=12pt,
          frame hidden,
          interior style={left color=blue!20,right color=white},
          overlay={%
              \draw[blue!60,line width=2pt]
                  ([xshift=-.5em,yshift=-1pt]frame.north west)--([xshift=.5em,yshift=-1pt]frame.north east);%
          }%
      },
      coltitle=blue!60!black,
      fonttitle=\bfseries\large,
      before skip=\baselineskip,
      left=12pt,
      top=.8em,
      drop large lifted shadow,
      underlay unbroken={%
          \coordinate (coin) at (title.north-|frame.west); 
          \draw[blue!60,line width=1pt] ([yshift=-1pt]title.north east) -- ([xshift=-0.5pt,yshift=-1pt]coin) -- +(0,-1.2cm);
          \draw[blue!60,line width=2pt] ([xshift=-0.5pt,yshift=-1pt-1.2cm]coin) -- ([xshift=-0.5pt]frame.south west);
          \draw[blue!60,line width=2pt] ([xshift=-0.5pt]frame.south west) -- (frame.south east);%
      },
      underlay first={%
          \coordinate (coin) at (title.north-|frame.west); 
          \draw[blue!60,line width=1pt] ([yshift=-1pt]title.north east) -- ([xshift=-0.5pt,yshift=-1pt]coin) -- +(0,-1.2cm);
          \draw[blue!60,line width=2pt] ([xshift=-0.5pt,yshift=-1pt-1.2cm]coin) -- ([xshift=-0.5pt]frame.south west);
      },
      underlay middle={%
          \draw[blue!60,line width=2pt] ([xshift=-0.5pt]frame.north west) -- ([xshift=-0.5pt]frame.south west);%
      },
      underlay last={%
          \draw[blue!60,line width=2pt] ([xshift=-0.5pt]frame.north west) -- ([xshift=-0.5pt]frame.south west);
          \draw[blue!60,line width=2pt] ([xshift=-0.5pt]frame.south west) -- (frame.south east);%
      },%
  },
}

\newtcolorbox{mycontourbox}[1][]{contourskin,#1}

\begin{document}

\lipsum[1-2]

\begin{mycontourbox}[title={Example}]
  \lipsum[4]
  \lipsum[4]
  \lipsum[4]
  \lipsum[4]
\end{mycontourbox}

\end{document}



height fixed for注释行的输出

输出带有 <code>height fixed for</code> 行注释

输出height fixed for未注释行

输出 <code>height fixed for</code> 行取消注释

attach boxed title to top left注释行的输出

输出带有 <code>attach boxed title to top left</code> 行注释

答案1

tcolorbox version 3.72 (2015/08/12)(及更高版本)不存在此问题。以下补丁可用于旧版本。

这是一个tcolorbox只有通过组合height fixed forheight fill与边界框更改一起出现的错误。在内部,boxed title更改边界框以包含此分离标题。

以下补丁通过将边界框更改纳入部分高度计算中来纠正此错误。此补丁适用于tcolorbox版本3.71 (2015/07/23),也适用于几个较旧的版本3.35 (2015/01/07)

% ......

\usepackage{tcolorbox}
  \tcbuselibrary{breakable}
  \tcbuselibrary{skins}

\makeatletter

\def\tcb@height@fill@unbroken#1{%
  \tcb@prepare@break@operation%
  \tcb@breakat@init%
  \tcbset{compress page=#1}%
  \tcb@comp@h@page%
  \tcbset{height=\tcb@h@page-\kvtcb@bbtop@stand-\kvtcb@bbbottom@stand,after=\eject}%
}

\def\tcb@break@ch@fixed{%
  \ifdim\tcb@natheight<\tcb@h@page\relax%
    \tcbdimto\kvtcb@height@fixed{\tcb@h@page-\kvtcb@bbtop-\kvtcb@bbbottom}%
    \tcb@ch@fixed%
  \else%
    \tcb@ch@natural%
  \fi%
}

\makeatother

% ......

此补丁将集成到下一tcolorbox版本3.72(或更高版本)中。此错误修复版本将很快出现。

相关内容