以下 MWE 显示,每当我\clearpage
在 的重新定义中发出 时\section
,它都会在目录中生成一个附加条目。为什么会发生这种情况?我应该如何修复它?我想保留explicit
的键titlesec
,并且我仍然希望能够在 的重新定义期间进行分页\section
。
\documentclass{extbook}
\makeatletter
\RequirePackage[explicit]{titlesec}%
\titleformat{name=\section}{}{}{\z@}
{\clearpage}
[\clearpage]
\makeatother
\begin{document}
\tableofcontents
\section{First section}
\subsection{This is a section}
\subsection{This is another section}
\section{A section}
\subsection{Another section}
\subsection{One more section}
\end{document}
\documentclass{extbook}
\usepackage[explicit]{titlesec}%
\usepackage{changepage}
\makeatletter
\titleformat{name=\section}
{}
{}
{\z@}
{%
\ifnum\c@page=1
\thispagestyle{empty}%
\clearpage
\else
\clearpage
\checkoddpage
\ifoddpage
\null\clearpage
\fi\fi
\thispagestyle{empty}%
{\Huge%
#1}%
\vskip10pt
{\normalsize\itshape Some box}%
}
[\clearpage
\null
\vskip20pt
]
\titlespacing*{\section}{\z@}{\z@}{\z@}
\makeatother
\begin{document}
\tableofcontents
\section{Magnetism}
\subsection{This is a section}
\subsection{This is another section}
\section{The Hubbard Model}
\subsection{Another section}
\subsection{One more section}
\end{document}
答案1
要在节前添加分页符,您需要定义并将\sectionbreak
的类设置为。然后从中删除命令。\section
top
\clearpage
\titleformat
\documentclass{extbook}
\makeatletter
\RequirePackage[explicit]{titlesec}%
\titleclass{\section}{top}
\newcommand{\sectionbreak}{\clearpage}
\titleformat{name=\section}{}{}{\z@}
{#1}
[]
\makeatother
\begin{document}
\tableofcontents
\section{First section}
\subsection{This is a section}
\subsection{This is another section}
\section{A section}
\subsection{Another section}
\subsection{One more section}
\end{document}
但正如您所注意到的,这不允许您\clearpage
在节标题后使用。我不知道为什么会出现这种情况(也许是 中的一个错误titlesec
),但肯定有一个解决方法,即重新定义,\section
以便在其后发出分页符。
\documentclass{extbook}
\makeatletter
\usepackage[explicit]{titlesec}%
\newcommand{\sectionbreak}{%
\ifnum\c@page=1
\thispagestyle{empty}%
\clearpage
\else
\clearpage
\checkoddpage
\ifoddpage
\null\clearpage
\fi\fi
}
\titleclass{\section}{top}
\usepackage{changepage}
\titleformat{name=\section}
{}
{}
{\z@}
{%
\thispagestyle{empty}%
{\Huge%
#1}%
\vskip10pt
{\normalsize\itshape Some box}%
}
[]
\titlespacing*{\section}{\z@}{\z@}{\z@}
\makeatother
\usepackage{letltxmacro}
\LetLtxMacro{\oldsection}{\section}
\renewcommand{\section}[2][]{%
\if\relax\detokenize{#1}\relax
\oldsection{#2}
\else\oldsection[#1]{#2}
\fi
\vspace{\fill}\par\pagebreak\null\vskip20pt}
\begin{document}
\tableofcontents
\section[This is TOC]{Magnetism}
\subsection{This is a section}
\subsection{This is another section}
\section{The Hubbard Model}
\subsection{Another section}
\subsection{One more section}
\end{document}
答案2
处罚、标记等必须与分页符正确同步。这就是\sectionbreak
存在的原因(以便在正确的位置发出它),以及page
类,在标题前后有分页符:
\documentclass{extbook}
\RequirePackage[explicit]{titlesec}%
\titleclass{\section}{page}
\titleformat{name=\section}{}{}{0pt}{#1}
手册必须明确指出“之前”和“之后”不是惩罚的适当位置。但是 中有一个缺陷titlesec
,但是 - 没有直接的方法来设置分页符后的空间(在新页面的顶部)或是否必须有一个空白页(它使用类设置openright
和openany
)。