Zerbrechliche Farbbox verursacht einen ausgefransten Boden

Zerbrechliche Farbbox verursacht einen ausgefransten Boden

Wenn Sie tcolorboxmit dieser breakableOption ein verwenden, kann dies in einigen speziellen Situationen zu einem „ausgefransten Boden“ führen. Das folgende MWE demonstriert dieses Verhalten:

\documentclass[DIV=10, BCOR=10mm, twoside]{scrreprt}

\usepackage[ngerman]{babel}
\usepackage{lmodern}
\usepackage{amsmath}
\usepackage{microtype}
\usepackage{lipsum}

\usepackage{tcolorbox}
\tcbuselibrary{theorems, skins, breakable}
\newtcbtheorem[auto counter]{mytheo}{My Theorem}{
  enhanced, breakable, colback=white, colbacktitle=black!15, coltitle=black, fonttitle=\bfseries,
  before skip=15pt plus 4pt minus 2pt,
  after skip =15pt plus 4pt minus 2pt
}{th}

\begin{document}

\lipsum[1-5]

\begin{mytheo}{This is my title}{theoexample}
\lipsum[6]
\end{mytheo}

\lipsum[6-10]

\end{document}

zerlumpter Boden

Wie Sie auf dem Screenshot sehen können, ist der untere Teil der ersten Seite nicht ausgerichtet. Trotzdem gibt LaTeX keine Warnungen aus, dass die Vbox nicht voll ist. Es sieht so aus, als ob sich ein Teil des Unsichtbaren before skipam unteren Rand von Seite 1 befindet, obwohl der eigentliche tcolorboxTeil vollständig auf Seite 2 liegt.

Wenn Sie die Option entfernen breakable, ändert dies nicht das Erscheinungsbild der Box (da die Box ohnehin nicht beschädigt wurde), aber LaTeX warnt wie erwartet vor der nicht vollen Vbox.

Gibt es eine Möglichkeit, dieses Problem zu lösen, ohne auf zerbrechliche Kartons zu verzichten?

Antwort1

Die folgende Antwort ist für tcolorboxVersionen vor gültig 3.90 (2016/02/29). Ab dieser Version before skipsollte die Option bei einem Seitenumbruch keine Spuren hinterlassen.

tcolorboxmuss bestimmter Code (einschließlich des vorherigen Sprungs) eingefügt werden, bevor die Resthöhe berechnet werden kann. Dabei wird der eingefügte Sprung anscheinend nicht automatisch entfernt.

Ich kann den folgenden „Hotfix“ anbieten, der einen negativen Sprung am einfügt \pagebreak. Derzeit habe ich keine Zeit, mögliche negative Auswirkungen dieses Patches weiter zu untersuchen, aber für before skipden Fall scheint Folgendes zu funktionieren:

\documentclass[DIV=10, BCOR=10mm, twoside]{scrreprt}

\usepackage[ngerman]{babel}
\usepackage{lmodern}
\usepackage{amsmath}
\usepackage{microtype}
\usepackage{lipsum}


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

%--- begin patch ---
\makeatletter

\def\tcb@undo@before{}

\tcbset{
  before skip/.style={before={%
    \ifnum\lastnodetype=-1\relax%
    \else%
      \par\ifvmode\nointerlineskip%
      \addvspace{\glueexpr#1-\parskip}%
      \def\tcb@undo@before{\addvspace{-\glueexpr#1}}%
      \fi%
    \fi%
    \lineskip=0pt\noindent%
    }},
}

\def\tcb@split@start{%
  \tcb@breakat@init%
  \tcb@comp@h@page%
  % height calculation
  \tcb@comp@h@total@standalone%
  %
  \let\tcb@split@next=\relax%
  \tcb@check@for@final@box%
  \iftcb@final@box%
    \tcb@drawcolorbox@standalone%
  \else%
    \iftcb@break@allowed%
      \ifdim\dimexpr\tcb@h@page-\tcb@h@padding-\tcb@h@padtitle<\kvtcb@breakminlines\baselineskip\relax%
        \tcb@undo@before\iftcb@multicol\columnbreak\else\pagebreak\fi%            
        \tcb@nobreak@warning%
        \tcb@enlbreak@init\tcb@break@allowedfalse%
        \tcb@comp@h@page%
        \tcb@check@for@final@box%
        \iftcb@final@box%
          \tcb@drawcolorbox@standalone%
        \else%
          \let\tcb@split@next=\tcb@split@first%
        \fi%
      \else%
        \let\tcb@split@next=\tcb@split@first%
      \fi%
    \else%
      \let\tcb@split@next=\tcb@split@first%
    \fi%
  \fi%
  \tcb@split@next%
}

\makeatother
%--- end patch ---

\newtcbtheorem[auto counter]{mytheo}{My Theorem}{
  enhanced,
  breakable,
  colback=white, colbacktitle=black!15, coltitle=black, fonttitle=\bfseries,
  before skip=15pt plus 4pt minus 2pt,
  %before=,
  after skip =15pt plus 4pt minus 2pt
}{th}

\begin{document}

\lipsum[1-5]

\begin{mytheo}{This is my title}{theoexample}
\lipsum[6]
\end{mytheo}

\lipsum[6-10]

\end{document}

verwandte Informationen