Verwenden von mdframed nach einer Abschnittsüberschrift

Verwenden von mdframed nach einer Abschnittsüberschrift

Das folgende Beispiel ist sehr konstruiert, veranschaulicht aber ein Problem, das ich mit dem mdframedPaket nicht lösen kann. Wenn die mdframedUmgebung einer Abschnittsüberschrift folgt, aber nicht genügend Platz vorhanden ist, um die Inhaltsumgebung zu platzieren, wird die Abschnittsüberschrift verwaist.

Das Ersetzen mdframeddurch minipageoder irgendetwas anderes führt nicht zum Waisenkind, und eine Änderung \clubpenaltyhat keine Auswirkung.

Dasselbe Ergebnis tritt beispielsweise auf, wenn die Umgebung nur eine einzige Zeile enthält, aber einen großen Wert für skipaboveoder hat innertopmargin; der nicht umbrechbare Inhalt, den ich im folgenden MWE verwende, dient nur dazu, das Ergebnis einfach zu demonstrieren.

\documentclass{article}

\usepackage{mdframed}

\newcommand{\BoxContents}{top\par\vspace*{2in}bottom}

\begin{document}

\vspace*{5in}

\section{Section}

\begin{mdframed}% this orphans the section heading
    \BoxContents
\end{mdframed}

\newpage

\vspace*{5in}

\section{Section}

\begin{minipage}[t]{\linewidth}% this does not orphan the section heading
    \BoxContents
\end{minipage}

\end{document}

Gibt es eine Möglichkeit, diese Umgebung nach einer Abschnittsüberschrift zu verwenden, ohne in diesem Fall die Seiten manuell umzubrechen?

Antwort1

Im ChatroomDavid CarlisleUndegreghat mir geholfen, auf das Problem hinzuweisen. Danke für Ihr Engagement.

Danach \sectiongibt es normalerweise keine Unterbrechungen, um Waisen zu vermeiden. Normalerweise bedeutet das, dass wir Ausnahmen haben.

Um die Farbspezifikation zu ermöglichen, kaufen Sie einen unerwünschten Haltepunkt. Um dies zu demonstrieren, verwende ich das folgende Beispiel:

\documentclass{article}
\begin{document}
\showoutput\setbox0\vbox{%
\section{Section}

\penalty10000
\begin{minipage}[t]{\linewidth}
    top\par\vspace*{2in}bottom
\end{minipage}
}\showbox0
\end{document}

In der logDatei finden Sie:

.\write1{\@writefile{toc}{\protect \contentsline {section}{\protect \numberline
 \ETC.}
.\penalty 10000
.\glue 9.90276 plus 0.86108
.\penalty 10000
.\glue(\parskip) 0.0 plus 1.0
.\glue(\baselineskip) 5.84921

Nun ändern wir das Beispiel so ab, dass wir verwenden mdframed.

\documentclass{article}
\usepackage{mdframed}
\begin{document}
\showoutput\setbox0\vbox{%
\section{Section}

\penalty10000

\begingroup\color{red}
\begin{minipage}[t]{\linewidth}
    top\par\vspace*{2in}bottom
\end{minipage}
\endgroup
}\showbox0

\showoutput\setbox0\vbox{
\section{Sectionaa}

\penalty10000
\begin{mdframed}% this orphans the section heading
    top\par\vspace*{2in}bottom
\end{mdframed}
}\showbox0
\end{document}

Die Ausgabe in der logDatei lautet:

.\write1{\@writefile{toc}{\protect \contentsline {section}{\protect \numberline
 \ETC.}
.\penalty 10000
.\glue 9.90276 plus 0.86108
.\penalty 10000
.\rule(0.0+0.0)x345.0
.\pdfcolorstack 0 push {0 g 0 G}
.\glue 0.0
.\glue(\parskip) 0.0
.\hbox(0.0+0.0)x345.0, glue set 345.0fil

Sie können ein sehen glue 0. Dort erfolgt der Bruch. Das ! kann ich nicht vermeiden glue 0. Basierend auf Ihrem Beispiel hier minipageführt die Änderung davon zum selben Problem:

\documentclass{article}
\usepackage{color}
\begin{document}
\vspace*{5in}

\section{Section}
\begingroup\color{red}
\begin{minipage}[t]{\linewidth}
    top\par\vspace*{2in}bottom
\end{minipage}
\endgroup

\end{document}

Das Problem liegt also in der Farbverwendung.

verwandte Informationen