如何结合 addvspace 和 nobreak?

如何结合 addvspace 和 nobreak?

\nobreak似乎中断了\addvspace,如下例所示。 如何addvspace在不中断 的情况下防止在 ,添加的空格之前和之后出现分页符addvspace

\documentclass{article}
\setlength{\parindent}{0pt}

\begin{document}
No breaks:
\par{}\nobreak\addvspace{5em} \nobreak\addvspace{5em} \nobreak\addvspace{5em}
\par{}(ends here)

With breaks:
\par{}\addvspace{5em} \addvspace{5em} \addvspace{5em}
\par{}(ends here)
\end{document}

这是一个更具体的例子:

\documentclass{article}

\usepackage{lipsum}
\setlength{\parindent}{0pt}
\newcommand{\block}{\fbox{\begin{minipage}{\textwidth}\lipsum[1]\end{minipage}}}

\begin{document}
\clearpage
\lipsum[1-4]
\par{}Here's a block
\par\addvspace{4em}\nobreak\block % Does not work

\clearpage
\lipsum[1-4]
\par{}Here's a block
\par\nobreak\addvspace{4em}\block % Works, but…
\subsection*{Here's a second block}
\par\nobreak\addvspace{4em}\block % … addvspace behaves as vspace
\end{document}

在此示例中,我有一个文本块 ( \block),前面有一个句子。我想让它们保持在一起。此外,我希望块在视觉上与周围环境保持一致的垂直空间。我使用addvspacebefore each\block来确保这一点。

不幸的是,\nobreak混淆了 vspace:章节标题后面的空间没有与块前面的空间结合在一起。

我如何确保\block前面总是有5em垂直空间,同时防止在块之前出现分页符,并且不在章节标题和紧随其后的块之间添加虚假空间?

答案1

使用\addpenalty类似于的\addvspace,但用于处罚。

\documentclass{article}

\usepackage{lipsum}
\setlength{\parindent}{0pt}
\newcommand{\block}{\fbox{\begin{minipage}{\textwidth}\lipsum[1]\end{minipage}}}

\begin{document}
\clearpage
\lipsum[1-4]
\par{}Here's a block
\par\addpenalty{10000}\addvspace{4em}\block  Does not work

\clearpage
\lipsum[1-4]
\par{}Here's a block
\par\addpenalty{10000}\addvspace{4em}\block % Works, but…
\subsection*{Here's a second block}
\par\addpenalty{10000}\addvspace{4em}\block % … addvspace behaves as vspace
\end{document}

相关内容