Использование mdframed после заголовка раздела

Использование mdframed после заголовка раздела

Следующий пример очень надуманный, но он иллюстрирует проблему, которую я не могу решить с помощью пакета mdframed. Когда mdframedокружение следует за заголовком раздела, но недостаточно места для размещения окружения содержимого, заголовок раздела становится бесхозным.

Замена mdframedна minipageили что-либо еще не приводит к появлению сироты, и изменение \clubpenaltyне имеет никакого эффекта.

Тот же результат возникает, например, если среда содержит только одну строку, но имеет большое значение для skipaboveили innertopmargin; неразрывное содержимое, которое я использую в MWE ниже, предназначено только для простой демонстрации результата.

\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}

Есть ли способ использовать эту среду после заголовка раздела, не разрывая страницы вручную, когда это происходит?

решение1

В чатеДэвид Карлайлиэгрегпомогли мне указать на проблему. Спасибо за вашу вовлеченность.

После того, \sectionкак обычно у вас нет перерывов, избегая сирот. Обычно подразумевает, что у нас есть исключения.

Чтобы разрешить цветовую спецификацию, вы покупаете нежелательную точку останова. Чтобы продемонстрировать это, я использую следующий пример:

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

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

В logфайле вы найдете:

.\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

Теперь мы изменим пример таким образом, чтобы использовать 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}

Вывод в logфайле:

.\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

Вы можете увидеть glue 0. Там происходит разрыв. Я не могу избежать glue 0!. Основываясь на вашем примере, модификация minipageкоторого приводит к той же проблеме:

\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}

Итак, проблема в использовании цвета.

Связанный контент