![在部分之前插入新页但防止在部分之后插入分页符](https://linux22.com/image/282219/%E5%9C%A8%E9%83%A8%E5%88%86%E4%B9%8B%E5%89%8D%E6%8F%92%E5%85%A5%E6%96%B0%E9%A1%B5%E4%BD%86%E9%98%B2%E6%AD%A2%E5%9C%A8%E9%83%A8%E5%88%86%E4%B9%8B%E5%90%8E%E6%8F%92%E5%85%A5%E5%88%86%E9%A1%B5%E7%AC%A6.png)
也许你们中的一些人已经猜到我想要实现什么;我想重新定义一些命令,结果如下:每个命令都\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}