如果 \section 不适合当前页面,如何强制其从新页面开始?

如果 \section 不适合当前页面,如何强制其从新页面开始?

所以我正在写一本编程书,我会\section针对每个主题使用。例如,我会写,

\section{Another way to double-space a file}

\begin{lstlisting}
awk 'BEGIN { ORS="\n\n" }; 1'
\end{lstlisting}

BEGIN is a special kind of pattern which ...

\section{Triple-space a file}

....

有时我会遇到这样的情况:部分标题位于页面的最底部,而示例位于新页面的开头,等等。

有人知道\section如果所有内容不适合当前页面,我该如何强制将其放在新页面上吗?

顺便说一句,我正在使用memoir文档类。

答案1

我的建议是,在处理此类细节之前,先集中精力整理好文档的内容和结构。原因是,在添加内容时,文档的布局会不断变化。因此,最有效的时间利用方式是专注于写作,忽略这些细节,直到草稿完成。

草稿准备好后,您可以在编辑过程中通过插入、等来\goodbreak清除这些不好的部分分解。\newpage

答案2

看一下这个\Needspace命令。将它放在命令之前,\section除非页面上有足够的剩余空间,否则该部分将不会启动。

例如:

\Needspace{5\baselineskip}
\section{Another way to double-space a file}

\begin{lstlisting}
awk 'BEGIN { ORS="\n\n" }; 1'
\end{lstlisting}

BEGIN is a special kind of pattern which ...

\section{Triple-space a file}

....

除非有至少 5 个 '\baselineskip' 的可用空间,否则从下一页开始该部分。\usepackage{needspace}如果您未memoir在该行前使用,请务必将其包括在内\begin{document}

答案3

在章节标题之后立即启动lstlisting环境会触发列表错误。可以通过以下方法解决

\usepackage{etoolbox}
\makeatletter
\preto\lstlisting{\@nobreakfalse}
\makeatother

在这种情况下,为了避免添加不必要的垂直空间,请lstlisting调用

\begin{lstlisting}[aboveskip=0pt]

这可能无法完全解决您的问题,因为分页符可能会在之后发生lstlisting,而我不知道如何避免它。:(

答案4

\raggedbottomsectiontrue通常会有帮助(但出于某些原因并不总是有帮助)

相关内容