![无需删除垂直空间即可防止分页](https://linux22.com/image/274526/%E6%97%A0%E9%9C%80%E5%88%A0%E9%99%A4%E5%9E%82%E7%9B%B4%E7%A9%BA%E9%97%B4%E5%8D%B3%E5%8F%AF%E9%98%B2%E6%AD%A2%E5%88%86%E9%A1%B5.png)
我有一个单句段落,用于介绍列表,而 LaTeX 试图在段落和列表之间插入分页符,我认为这是不可接受的。我可以使用 来防止分页符\@nobreaktrue
,但这样就会丢失段落和列表之间的垂直空间。如何才能防止段落和列表之间的分页符,而不会丢失我期望的正常垂直空间?
梅威瑟:
\documentclass{article}
\makeatletter
\newcommand{\reallynopagebreak}{\par\@nobreaktrue\nopagebreak}
\makeatother
\begin{document}
Paragraph introducing list:\reallynopagebreak{}
\begin{itemize}
\item list
\end{itemize}
\end{document}
不想要的结果,段落和列表之间没有空格:
现在我刚刚完成了\vspace{\baselineskip}
段落的末尾,但这肯定不是最好的方法?
答案1
我认为今天我想要的答案是lockstep 的答案是防止在 itemize 之前分页。下面是我为证明这一点而改编的上述 MWE:
\documentclass{article}
\usepackage{lipsum}
\begin{document}
% Provide enough content such that LaTeX would normally break between
% "Paragraph introducing list:" and the actual list. Please forgive
% my imperial units.
\vspace*{1.1in}
\lipsum[1-4]
Paragraph introducing list:
\begingroup
\makeatletter
% Strongly encourage LaTeX not to break before this list.
% http://tex.stackexchange.com/a/46795/1680
\@beginparpenalty=10000
\makeatother
\begin{itemize}
\item list
\end{itemize}
\endgroup
\end{document}
答案2
我采用了不同的策略,引入了\ListIntro
宏,它会自动检查是否有足够的空间来让列表运行,否则会分页。
为了测试替代方案,无需任何干预,取消注释将\ListIntro
宏重新定义为的行{#1}
,该行仅原封不动地传递参数。
\documentclass{article}
\usepackage{needspace}
\usepackage{calc}
\usepackage{lipsum}
\newcommand\ListIntro[1]{%
\def\intpar{\parbox{\textwidth}{#1}}%
\needspace{\heightof{\intpar}+3\baselineskip}%
#1%
}
\begin{document}
\lipsum[1-4]
%\def\ListIntro#1{#1}
\ListIntro{\lipsum[5]}
\begin{itemize}
\item list
\end{itemize}
\end{document}