在部分之前插入新页但防止在部分之后插入分页符

在部分之前插入新页但防止在部分之后插入分页符

也许你们中的一些人已经猜到我想要实现什么;我想重新定义一些命令,结果如下:每个命令都\section应该从新的一页开始除了对于直接放置在 \part 之后的部分。

梅威瑟:

\documentclass[a4paper,10pt]{article}
\usepackage{lipsum}

\begin{document}

\part{Part one}
\section{First section}
\lipsum[1]

\section{Second section}
\lipsum[2]

\section{Third section}
\lipsum[1]


\part{Part two}
\section{First section}
\lipsum[3]

\section{Second section}
\lipsum[1]

\end{document}

在上面的例子中,每个都\section应该创建一个新页面,但不应该创建“第一部分”,因为它们位于命令之后\part

我开始

\let\oldsection\section
\renewcommand\section{\newpage\oldsection}

但是后来我却找不到关于如何建立例外的问题的答案(以便将其\part与以下内容放在\section同一页上)。

我希望你知道如何应对我的问题——你可能知道;我从未见过你无法解决问题!

答案1

使用条件关闭某部分之后的分页符:

\documentclass[a4paper,10pt]{article}

\usepackage{etoolbox}
\newtoggle{afterpart}
\pretocmd{\section}
  {\iftoggle{afterpart}
    {\global\togglefalse{afterpart}}% we're after a part
    {\clearpage}% we're not immediately after a part
  }{}{}
\pretocmd{\part}
  {\clearpage % do a page break
   \global\toggletrue{afterpart}% tell \section we're just after a part
  }
  {}{}

\usepackage{lipsum}

\begin{document}

\part{Part one}
\section{First section}
\lipsum[1]

\section{Second section}
\lipsum[2]

\section{Third section}
\lipsum[1]


\part{Part two}
\section{First section}
\lipsum[3]

\section{Second section}
\lipsum[1]

\end{document}

如果你想从机制中排除某些部分,请添加

\newcommand{\sectionnobreak}{%
  \global\toggletrue{afterpart}%
  \section
}

到你的序言中,使用\sectionnobreak代替\section。或者,添加

\newcommand{\NPB}{%
  \global\toggletrue{afterpart}%
}

序言和类型

\NPB\section{Title}

您想要从自动分页符中排除的部分。之后的第一部分\part无论如何都不需要进行任何调整。

答案2

\clearpage与使用条件相比,我更喜欢根据上下文定义或不定义的命令。

\documentclass[a4paper,10pt]{article}
\usepackage{lipsum}

\let\oldsection\section
\renewcommand\section{\znewpage\oldsection}

\let\oldpart\part
\renewcommand\part{\clearpage\gdef\znewpage{\global\let\znewpage\clearpage}\oldpart}

\global\let\znewpage\clearpage

\begin{document}

\part{Part one}
\section{First section}
\lipsum[1]

\section{Second section}
\lipsum[2]

\section{Third section}
\lipsum[1]


\part{Part two}
\section{First section}
\lipsum[3]

\section{Second section}
\lipsum[1]

\end{document}

答案3

LaTeX 社区上的答案几乎是同一个问题。为了 TeX.SX 上答案的完整性,我在这里“剽窃”了该答案:

\documentclass[a4paper,10pt]{article}
\usepackage{lipsum}

\makeatletter
\newif\iffirstsection \firstsectiontrue
\let\@partOLD\@part
\renewcommand{\@part}[2][]{\clearpage\@partOLD[#1]{#2}\firstsectiontrue}
\let\@spartOLD\@spart
\renewcommand{\@spart}[1]{\clearpage\@spartOLD{#1}\firstsectiontrue}
\renewcommand{\section}{%
     \iffirstsection\firstsectionfalse\else\clearpage\fi%
     \@startsection {section}{1}%
      {\z@}{-3.5ex \@plus -1ex \@minus -.2ex}%
      {2.3ex \@plus.2ex}{\reset@font\Large\bfseries}}
\@addtoreset{section}{part}
\makeatother

\begin{document}
\part{Part one}
\section{First section}
\lipsum[1]

\section{Second section}
\lipsum[2]

\section{Third section}
\lipsum[1]

\part{Part two}
\section{First section}
\lipsum[3]

\section{Second section}
\lipsum[1]

\end{document}

相关内容