Usando mdframed após o título de uma seção

Usando mdframed após o título de uma seção

O exemplo a seguir é muito elaborado, mas ilustra um problema que não consigo resolver com o mdframedpacote. Quando o mdframedambiente segue um título de seção, mas não há espaço suficiente para colocar o ambiente de conteúdo, o título de seção fica órfão.

Substituir mdframedpor minipageou qualquer outra coisa não resulta em órfão e alterar \clubpenaltynão tem efeito.

O mesmo resultado ocorre, por exemplo, se o ambiente contiver apenas uma linha, mas tiver um valor grande para skipaboveou innertopmargin; o conteúdo inquebrável que uso no MWE abaixo é apenas para demonstrar facilmente o resultado.

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

Existe alguma maneira de usar esse ambiente seguindo o título de uma seção sem quebrar as páginas manualmente quando isso ocorrer?

Responder1

Na sala de bate-papoDavid Carlisleeegrégiame ajudou a apontar o problema. Obrigado pelo seu envolvimento.

Depois \sectionnormalmente você não tem nenhuma pausa evitando órfãos. Normalmente implica que temos exceções.

Para permitir a especificação de cores, você está comprando um ponto de interrupção indesejado. Para demonstrar isso utilizo o seguinte exemplo:

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

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

No logarquivo você encontrará:

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

Agora modificamos o exemplo desta forma que usamos 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}

A saída no logarquivo é:

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

Você pode ver um arquivo glue 0. Aí a ruptura acontece. Não posso evitar o glue 0! Com base no seu exemplo aqui, cuja modificação minipageresulta no mesmo problema:

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

Portanto, o problema é baseado no uso de cores.

informação relacionada