![如何防止在逐项列表之前出现分页符?](https://linux22.com/image/232053/%E5%A6%82%E4%BD%95%E9%98%B2%E6%AD%A2%E5%9C%A8%E9%80%90%E9%A1%B9%E5%88%97%E8%A1%A8%E4%B9%8B%E5%89%8D%E5%87%BA%E7%8E%B0%E5%88%86%E9%A1%B5%E7%AC%A6%EF%BC%9F.png)
在冒号后立即设置分页符并让列表在新的一页上开始是不好的:
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
enumitem
的beginpenalty
参数在这里仍然缺失,并且特别方便(适应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
,因此不使用段落分隔符。