所以,我见过这,但我需要部分仅在第一页之后开始新的一页
我尝试了很多不同的方法,我想我可以在某个地方创建一个 if 语句,如果部分编号超过 2,它就会开始添加\clearpage
。但理论上,我需要这个 if 语句在创建每个新部分时运行
我的主要尝试是在我已经存在的命令中执行此操作\titleformat
,因为我认为它将在每个新部分运行if
,它看起来像这样:
\newcommand{\sectionbreak}{} % create it empty at first to modify later
\titleformat{\section}
{\large\bfseries}
{\thesection}
{0pt}
{
\ifnum\value{section} > 1
{\renewcommand{\sectionbreak}{\clearpage}}
\else{\renewcommand{\sectionbreak}{}}
\fi
}
{}
我认为它会在每个部分之后运行if
,因为在另一个文档中,我还有另一个\ifnum
与此类似的语句\hspace
,如果部分号大于 10,则分隔符中的值会变小
book
但是,这不管用,我不知道还能尝试什么。那么,有什么解决办法吗?这将在和 documentclass 中都用到article
。所以,class 不太相关
答案1
只需\sectionbreak
正确定义:
\documentclass{book}
\usepackage{titlesec}
\titleformat{\section}
{\large\bfseries}
{\thesection}
{1em}
{}
\newcommand{\sectionbreak}{\ifnum\value{section}>0 \clearpage\fi}
\begin{document}
\tableofcontents
\chapter{One:}
\section{on same page}
Some text
\section{On new page}
Some text
\section{On new page}
Some text
\chapter{Two:}
\section{on same page}
Some text
\section{On new page}
Some text
\section{On new page}
Some text
\end{document}
答案2
该解决方案适应了您已经很有前景的方法\ifnum
。
但是,我发现(在我制作的 MWE 中),将条件代码放在 的第 5 个参数中\titleformat
,就像您所做的那样,会弄乱节标题。也就是说,所需的分页符被放置在之间章节编号和标题。第五个参数正式before-code
执行“标题正文之前”但显然后章节编号。
在这些情况下,我喜欢的方法是使用\preto
宏etoolbox
,因为条件语句 then 会变为有效就在之前这全部的的运作\section
。
\usepackage{etoolbox}
\preto\section{\ifnum\value{section}=0
\else\clearpage\fi}
假设您正在处理的文档类除了章节外还有章节(例如book
),并且“第一”节指的是第一节在每一章中,这将是一个 MWE:
\documentclass{book}
\usepackage{etoolbox}
\usepackage{titlesec}
\titleformat{\section}
{\large\bfseries}
{\thesection}
{0pt}
{}
{}
\preto\section{\ifnum\value{section}=0
\else\clearpage\fi}
\begin{document}
\tableofcontents
\chapter{One:}
\section{on same page}
\section{On new page}
\section{On new page}
\chapter{Two:}
\section{on same page}
\section{On new page}
\section{On new page}
\end{document}