如果不合适,则在新页面上添加子部分

如果不合适,则在新页面上添加子部分

我的文档中有许多小节。每个小节都很短(每个小节由五到十行组成)。我希望每页有多个小节,但不希望小节分成两页。如果小节无法放在一页的剩余部分,我希望将其放在下一页。

\newpage是否存在当页面某部分不适合时可自动执行的页面布局?

答案1

我无法想象这种没有从新页面开始的章节的样式。所以这里是:我们\clearpage在所有\section命令之前(第一个命令之后)和\filbreak每个命令之前添加\subsection

\documentclass{article}
\usepackage{etoolbox}

\preto{\section}{\clearpageafterfirst}
\preto{\subsection}{\filbreak}
\newcommand{\clearpageafterfirst}{%
  \gdef\clearpageafterfirst{\clearpage}%
}

\usepackage{lipsum} % to generate dummy text for the MWE

\begin{document}

\title{Title}
\author{author}
\maketitle

\section{A section} 
\subsection{A subsection}\lipsum[1-2] 
\subsection{A subsection}\lipsum[2]
\subsection{A subsection}\lipsum[3-4] 
\subsection{A subsection}\lipsum[4]
\subsection{A subsection}\lipsum[5]
\subsection{A subsection}\lipsum[6]
\subsection{A subsection}\lipsum[7]
\subsection{A subsection}\lipsum[8]
\subsection{A subsection}\lipsum[9]
\subsection{A subsection}\lipsum[10]
\subsection{A subsection}\lipsum[11]

\section{B section}

\subsection{A subsection}\lipsum[12]
\subsection{A subsection}\lipsum[13]
\subsection{A subsection}\lipsum[14]
\subsection{A subsection}\lipsum[15]
\subsection{A subsection}\lipsum[16]
\subsection{A subsection}\lipsum[17]
\subsection{A subsection}\lipsum[18]
\subsection{A subsection}\lipsum[19]
\subsection{A long subsection}\lipsum[20-25]
\subsection{A subsection}\lipsum[26]

\end{document}

如果某个小节长度超过一页,它将毫无问题地转到下一个小节。

在此处输入图片描述

如果您不希望这些部分从新页面开始,则情况会稍微复杂一些:

\documentclass{article}
\usepackage{etoolbox}

\newtoggle{aftersection}
\preto{\section}{\filbreak\global\toggletrue{aftersection}}
\preto{\subsection}{\iftoggle{aftersection}{\global\togglefalse{aftersection}}{\filbreak}}
\newcommand{\clearpageafterfirst}{%
  \gdef\clearpageafterfirst{\clearpage}%
}

\usepackage{lipsum} % to generate dummy text for the MWE

\begin{document}

\title{Title}
\author{author}
\maketitle

\section{A section} 
\subsection{A subsection}\lipsum[1-2] 
\subsection{A subsection}\lipsum[2]
\subsection{A subsection}\lipsum[3-4] 
\subsection{A subsection}\lipsum[4]
\subsection{A subsection}\lipsum[5]
\subsection{A subsection}\lipsum[6]
\subsection{A subsection}\lipsum[7]
\subsection{A subsection}\lipsum[8]
\subsection{A subsection}\lipsum[9]

\section{B section}

\subsection{A subsection}\lipsum[12]
\subsection{A subsection}\lipsum[13]
\subsection{A subsection}\lipsum[14]
\subsection{A subsection}\lipsum[15]
\subsection{A subsection}\lipsum[16]
\subsection{A subsection}\lipsum[17]
\subsection{A subsection}\lipsum[18]
\subsection{A subsection}\lipsum[19]
\subsection{A long subsection}\lipsum[20-25]
\subsection{A subsection}\lipsum[26]

\end{document}

在此处输入图片描述

您可以享受\filbreak在 TeXbook 中阅读的乐趣。另请参阅禁止在 titletoc 的 titlecontents* 块中使用分页符

答案2

一种方法是使用包在子节上方固定一个可变间距,titlesec然后让 LaTeX 来做最好的处理。下面的 MWE 是从到,2.8ex因此9exLaTeX 在可能的情况下使用间距3ex,否则会或多或少地放大,甚至缩小到几乎不可察觉的程度,以获得最佳效果。

您还可以将其与可变段落跳过相结合以获得更好的结果(如 MWE 中所示)。

请注意,如果应用较大的间距范围,几乎可以完全避免段落/小节拆分,但我认为对于超过 3 或 4 行的情况,这不是一个好主意。您应该在最终文本中使用这些值来找到合理的范围,并在某些情况下允许段落分隔(即检查页面中几行之后没有难看的分页符)。另请参阅如何防止出现孤儿线?

无论如何,请记住,您始终可以使用minipage环境或\parblock命令(手动进行一些最终调整或在宏中进行一般用途,如在 MWE 中)强制使用大型不可破坏的块。

\documentclass{article}
\usepackage{lipsum} % to generate dummy text for the MWE

\usepackage{titlesec} 
\titlespacing*{\subsection}{0em}{3ex plus 9ex minus .2ex}{1ex plus .0ex minus .0ex}

\setlength{\parskip}{1ex plus 3ex minus 0ex}

\newcommand\monoliticsubsec[2]{
\noindent
\begin{minipage}{\textwidth}
\subsection{#1}#2
\end{minipage}} 

\begin{document}
\section{A section} 
\subsection{A subsection}\lipsum[1-2] 
\subsection{A subsection}\lipsum[2]
\subsection{A subsection}\lipsum[3-4] 
\subsection{A subsection}\lipsum[4]
\subsection{A subsection}\lipsum[5]
\monoliticsubsec{A unbreakable section}{\lipsum[1-3]}
\subsection{A subsection}\lipsum[6]
\subsection{A subsection}\lipsum[7]
\subsection{A subsection}\lipsum[8]
\subsection{A subsection}\lipsum[9]
\subsection{A subsection}\lipsum[10]
\subsection{A subsection}\lipsum[11]
\subsection{A subsection}\lipsum[12]
\subsection{A subsection}\lipsum[13]
\subsection{A subsection}\lipsum[14]
\subsection{A subsection}\lipsum[15]
\subsection{A subsection}\lipsum[16]
\subsection{A subsection}\lipsum[17]
\subsection{A subsection}\lipsum[18]
\subsection{A subsection}\lipsum[19]
\subsection{A long subsection}\lipsum[20-25]

\end{document}

答案3

如果你有一个相当一致的(最大)子节长度,那么一个基本的方法是使用needspace包裹12\baselineskip如果页面上可用的内容较少(比如说),则插入分页符。

在此处输入图片描述

\documentclass{article}
\usepackage{needspace}% http://ctan.org/pkg/needspace

\let\oldsubsection\subsection
\renewcommand{\subsection}{\needspace{12\baselineskip}\oldsubsection}

\newcommand{\lorem}{Lorem ipsum dolor sit amet, consectetur adipiscing elit.}
\newcommand{\dummytext}{\lorem{} \lorem{} \lorem{} \lorem{} \lorem}

\begin{document}
\section{A section} 
\subsection{A subsection}\dummytext
\subsection{A subsection}\dummytext\dummytext
\subsection{A subsection}\dummytext\dummytext\dummytext
\subsection{A subsection}\dummytext\dummytext\dummytext
\subsection{A subsection}\dummytext\dummytext
\section{Another section}\dummytext
\subsection{A subsection}\dummytext
\subsection{A subsection}\dummytext
\subsection{A subsection}\dummytext\dummytext
\subsection{A subsection}\dummytext
\subsection{A subsection}\dummytext
\subsection{A subsection}\dummytext
\subsection{A subsection}\dummytext\dummytext\dummytext\dummytext
\subsection{A subsection}\dummytext\dummytext
\subsection{A subsection}\dummytext\dummytext\dummytext
\subsection{A subsection}\dummytext
\subsection{A subsection}\dummytext\dummytext
\subsection{A subsection}\dummytext
\subsection{A subsection}\dummytext\dummytext\dummytext\dummytext
\subsection{A subsection}\dummytext\dummytext\dummytext\dummytext
\subsection{A subsection}\dummytext\dummytext\dummytext\dummytext

\end{document}

12\baselineskip大约10 行常规段落文本加一个\subsection标题。

相关内容