在节标题后使用 mdframed

在节标题后使用 mdframed

以下是一个非常不自然的例子,但它说明了我无法用该mdframed包解决的一个问题。当mdframed环境跟在节标题后面,但没有足够的空间放置内容环境时,节标题就会变得孤立。

mdframed用或其他任何内容替换minipage都不会导致出现孤儿现象,并且更改\clubpenalty不会产生任何效果。

例如,如果环境仅包含一行但或的值较大,则会出现相同的结果skipaboveinnertopmargin我在下面的 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}

因此该问题基于颜色的使用。

相关内容