Wenn Sie tcolorbox
mit dieser breakable
Option 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}
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 skip
am unteren Rand von Seite 1 befindet, obwohl der eigentliche tcolorbox
Teil 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
tcolorbox
Versionen vor gültig3.90 (2016/02/29)
. Ab dieser Versionbefore skip
sollte die Option bei einem Seitenumbruch keine Spuren hinterlassen.
tcolorbox
muss 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 skip
den 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}