我正在编写一份包含许多章节和小节的文档。我希望每个章节都有一个目录。我正在使用titlesec
、titletoc
和titleps
。
我有以下 MWE:
\documentclass[10pt]{article}
\usepackage{hyperref}
\usepackage[]{titlesec}
\usepackage{titletoc}
\usepackage{titleps}
\hypersetup{colorlinks=true,
linkcolor=blue,
filecolor=blue,
urlcolor=blue}
\usepackage[margin=15mm,
paperheight=15cm,paperwidth=13cm
]{geometry}
%for demonstation purposes, not contributing to MWE.
\setcounter{tocdepth}{1}
%this has no apparent effect
\newcommand{\sectionbreak}{\clearpage}
%this causes near duplicated entries in the table of contents
% if a \clearpage is added
\titleformat{\section}[block]
{%\clearpage
\normalfont\Large\bfseries}{\thesection}{1em}{}[]
\begin{document}
\tableofcontents
\section{First Section}\label{First}
The section TOC:
\hfill\hrule\hfill
\startcontents[sections]
\printcontents[sections]{}{-1}{\setcounter{tocdepth}{2}}
\hfill\hrule
\subsection{Sub1}
\section{Second}\label{Second Section}
The section TOC:
\hfill\hrule\hfill
\startcontents[sections]
\printcontents[sections]{}{-1}{\setcounter{tocdepth}{2}}
\hfill\hrule
\subsection{Sub1}
\section{Second}\label{Third Section}
The section TOC:
\hfill\hrule\hfill
\startcontents[sections]
\printcontents[sections]{}{-1}{\setcounter{tocdepth}{2}}
\hfill\hrule
\subsection{Sub1}
\end{document}
我对此有三个问题:
- 如果我添加 clearpage,
\titleformat{section}
我会在目录中得到重复的条目;如果我添加\newcommand{\sectionbreak}{\clearpage}
它显然没有效果。 - 章节目录包含来自前面或后面章节的信息;我不希望
- 我不确定这是否相关,在
clearpage
后面似乎有一个table of contents
;在这种情况下我不会介意,但将来我可能不想要它。(它可能是\sectionbreak
,但为什么它以后不起作用?)
下面是渲染的(lualatex
)版本(我不知道将它们缩小到连续三个):
答案1
正确的加载顺序是
\usepackage[]{titlesec}
\usepackage{titletoc}
\usepackage{titleps}
\usepackage{hyperref}
因为hyperref
重新定义了与分段和目录相关的命令,其他三个包也完成了同样的工作。
因此,如果您hyperref
先加载,这三个包会根据对标准命令的重新titleX
定义重新定义命令。 混乱随之而来。hyperref
为了在每个部分之前设置分页符,添加
\usepackage{etoolbox}
在命令之前hyperref
和之后\titleformat{\section}...
,还添加
\pretocmd{\section}{\clearpage}{}{}
当然,如果后面紧接着一个部分,这将在目录后添加分页符。我认为在所有部分之前设置分页符但没有在第一个部分之前设置分页符是没有意义的。
为了只显示部分目录中的子部分,请使用
\startcontents[sections]
\printcontents[sections]{}{2}{\setcounter{tocdepth}{2}}
答案2
也许您想将部分章节的目录合并到其格式中。这是 PDFLaTeX 的一种方法,但相关设置也适用于 LuaLaTeX。
\documentclass[11pt]{article}
\usepackage[T1]{fontenc}
\usepackage{geometry}
\usepackage[pagestyles]{titlesec} % option `pagestyles` loads »titleps«
\usepackage{titletoc}
\usepackage{blindtext} % drop in actual document
\usepackage{hyperref}
\hypersetup{
breaklinks,
colorlinks
}
\titleformat{name=\section}
{\normalfont\Large\bfseries}
{\thesection}
{1em}
{}
[\normalsize\normalfont\vspace*{1pc}%
\hbox{\large\bfseries\contentsname}\vspace{6pt}\titlerule\vspace{3pt}
\startcontents
\printcontents{l}{2}{\setcounter{tocdepth}{3}}\vspace{1pt}
\titlerule\vspace{1pc}\thispagestyle{plain}]
\titleformat{name=\section,numberless}
{\normalfont\Large\bfseries}
{}
{0em}
{}
[\thispagestyle{plain}]
\newpagestyle{front}{
\sethead{\sectiontitle}{}{\thepage}
\headrule
\setfoot{}{}{}
}
\newpagestyle{main}{
\sethead{\thesection\enspace\sectiontitle}{}{\thepage}
\headrule
\setfoot{}{}{}
}
\setcounter{tocdepth}{1}
\newcommand*{\sectionbreak}{\clearpage}
% \assignpagestyle{\section}{plain} % does not work
\begin{document}
\pagestyle{front}
\tableofcontents
\pagestyle{main}
\blinddocument % drop in actual document
\end{document}
当然可以进行进一步的定制。