无需删除垂直空间即可防止分页

无需删除垂直空间即可防止分页

我有一个单句段落,用于介绍列表,而 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}

相关内容