当同一页面上出现第二部分时,如何开始新页面?

当同一页面上出现第二部分时,如何开始新页面?

我有一章包含许多部分,但它们的长度各不相同。我希望在前一节结束后立即出现新的部分(这很正常) - 除非 - 两个部分最终出现在同一页上。现在,如果两个部分出现在同一页上,我会手动添加 \newpage。有没有通用的方法可以做到这一点?我正在研究书籍类。

\documentclass[12pt]{book}
\begin{document}
\chapter{thefirstchapter}
\section{long section}
\section{long section}
\section{short section}
\newpage
\section{long section}
\section{short section}
\newpage
\section{long section}
\end{document}

答案1

以下方法使用 TeX 的\label-\ref系统来检查 是否\section已出现在当前页面上。它通过创建/检查一个名为 的宏\section-on-page-<pnum>(其中<pnum>是要设置的部分的页面)来实现。如果此宏对于给定的 存在<pnum>(通过 检查\ifcsname <csname>\endcsname),则\section已存在于该页面上<pnum>并发出\newpage。如果它不存在,它会\section在之前设置 并(重新)创建\section-on-page-<pnum>

\documentclass{book}

\usepackage{lipsum,refcount}

\NewCommandCopy{\oldsection}{\section}
\RenewDocumentCommand{\section}{ s o m }{%
  \label{before-section-\thesection}% Set \label for section
  % Check if there is already a section on the current page by
  % examining the existence of \section-on-page-<pnum>
  \ifcsname section-on-page-\getpagerefnumber{before-section-\thesection}\endcsname
    \newpage% Action if a section already exists
  \fi
  \IfBooleanTF{#1}
    {\oldsection*{#3}}% \section*{..}
    {\IfValueTF{#2}
      {\oldsection[#2]{#3}}% \section[.]{..}
      {\oldsection{#3}}% \section{..}
    }%
  \label{section-\thesection}% Set new label for section (could be on a following page)
  % Update \section-on-page-<pnum>
  \expandafter\xdef\csname section-on-page-\getpagerefnumber{section-\thesection}\endcsname{Section on page \getpagerefnumber{section-\thesection}}%
}

\begin{document}

\chapter{A chapter}
\section{Long section}\lipsum[1-10]
\section{Long section}\lipsum[1-10]
\section{Short section}\lipsum[1]
\section{Long section}\lipsum[1-10]
\section{Short section}\lipsum[1]
\section{Long section}\lipsum[1-10]

\end{document}

前:

在此处输入图片描述

后:

在此处输入图片描述

\ref使用以下功能提取文章的页码:refcount

由于使用了\label-\ref系统,文档布局的更改可能需要多次运行。文档的构建以及 的条件发布\newpage都是连续的。因此,\newpage可以在整个文档中引起连锁反应。继续编译,直到所有引用都已解决。

答案2

基于此条目,我开始使用\clearpage{}指令反而因为\newpage{}前者不仅会开始新的一页,还会确保(仍然浮动的)对象(如旧部分的表格和图形)出现进入新的部分。(否则,如果实验部分包含理论部分的表格,可能会分散读者的注意力,因为 LaTeX 的浮动算法假设“现在这里有足够的空间吗?”)

这样,新的部分将从新页面的顶部开始。

或者,您可以分割文档——每个部分都是自己的文件,最终以\include{file}模式汇集到主文档中。

相关内容