所以我正在写一本编程书,我会\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
通常会有帮助(但出于某些原因并不总是有帮助)