Tcolorbox parbox=false Option bricht durch Höhenfülloption

Tcolorbox parbox=false Option bricht durch Höhenfülloption

Tcolorbox- parbox=falseOption bricht durch height fillOption

\documentclass[]{article}
\usepackage[most, many]{tcolorbox}
\usepackage{lipsum}

\begin{document}

\begin{tcolorbox}[
parbox=false, 
height fill % this option breaks parbox=false option
]
\lipsum[1-3]
\end{tcolorbox}

\end{document}

Bildbeschreibung hier eingeben

Antwort1

Typischerweise tcolorboxwird der Inhalt einer Box in ein oder mehrere interne Boxregister verarbeitet. Anschließend werden diese Box/en mit dem entsprechenden Zeichencode etc. versehen.

Für height fillgibt es einige Ausnahmen. Insbesondere beforewird der Code ausgeführt, bevor der Inhalt verarbeitet wird. Dies kann leider zu Nebeneffekten führen. Hier greift eine Einstellung von beforedurch.

Mit einem Patch lässt sich dies für das aktuelle Beispiel beheben:

\documentclass[]{article}
\usepackage[most, many]{tcolorbox}
\usepackage{lipsum}

\makeatletter
\tcbset{
  parskip/.style={before={\ifnum\lastnodetype=-1\relax\else\par%
      \ifvmode\edef\tcb@prevdepth{\the\glueexpr\prevdepth+\lineskip+\parskip}%
      \def\tcb@undo@before{\addvspace{-\glueexpr\tcb@prevdepth}}%
      \pagebreak[0]\fi\fi\noindent},
    after={\tcb@parfillskip@check\par}},
  noparskip/.style={before={\ifnum\lastnodetype=-1\relax\else\par%
      \ifvmode\edef\tcb@prevdepth{\the\glueexpr\prevdepth+\lineskip}%
      \def\tcb@undo@before{\addvspace{-\glueexpr\smallskipamount+\tcb@prevdepth}}%
      \pagebreak[0]\smallskip\fi\fi\noindent},
    after={\tcb@parfillskip@check\par\smallskip}},
}
\makeatother

\begin{document}

\begin{tcolorbox}[
parbox=false,
height fill
]
\lipsum[1-3]
\end{tcolorbox}

\end{document}

Ich werde diesen Patch der nächsten tcolorboxVersion hinzufügen, wenn nichts Neues herauskommt.

verwandte Informationen