如何防止在逐项列表之前出现分页符?

如何防止在逐项列表之前出现分页符?

在冒号后立即设置分页符并让列表在新的一页上开始是不好的:

And here, finally, is the list of mission-critical items:
\begin{itemize}
...
\end{itemize}

我怎样才能防止这种情况发生?

答案1

\makeatletter 
\newcommand\mynobreakpar{\par\nobreak\@afterheading} 
\makeatother
.....
text\mynobreakpar
\begin{itemize}
....

答案2

LaTeX 将其放在\beginparpenalty列表的开头。标准类别设置\@beginparpenalty-\@lowpenalty(-51),即它们在某种程度上鼓励在列表前分页。如果您想不惜一切代价避免在列表前分页,请\@beginparpenalty在文档的序言中将其设置为 10000。

\documentclass{article}

\makeatletter
\@beginparpenalty=10000
\makeatother

\usepackage{lipsum}

\begin{document}

\lipsum[1-5]

\begin{itemize}
\item \lipsum*[6]
\end{itemize}

\end{document}

答案3

enumitembeginpenalty参数在这里仍然缺失,并且特别方便(适应lockstep 的 MWE):

\documentclass{article}

\usepackage{enumitem}
\usepackage{lipsum}

\begin{document}

\lipsum[1-5]

\begin{itemize}[beginpenalty=10000]
\item \lipsum*[6]
\end{itemize}

\end{document}

答案4

\mynobreakpar解决方案对于用户 87690 来说确实有效(请参阅\mynobreakpar解决方案的评论),因为在他的范围内,段落分隔符为零,但列表顶部分隔符不是。因此,最好使用\nolisttopbreak下面的宏。

\makeatletter
\newcommand{\nolisttopbreak}{\vspace{\topsep}\nobreak\@afterheading}
\makeatother
.....
text\nolisttopbreak
\begin{itemize}
....

如您所见,then 为 no \par,因此不使用段落分隔符。

相关内容