\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
),前面有一个句子。我想让它们保持在一起。此外,我希望块在视觉上与周围环境保持一致的垂直空间。我使用addvspace
before 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}