第一个 MWE 如下。
\documentclass{book}
\usepackage{tocloft}
\begin{document}
\tableofcontents
\chapter{Chapter title}
\section{Section title with numbers}
\phantomsection
\section*{Section title without numbers}
\addcontentsline{toc}{section}{Section title without numbers}
\end{document}
编译结果如下,如你所见,第一张图片中没有数字的章节标题没有与带有数字的章节标题左对齐。
替换代码
\addcontentsline{toc}{section}{Section title without numbers}
经过
\addcontentsline{toc}{section}{\hspace{2.3em}Section title without numbers}
\cftsecnumwidth
(包中的值为 2.3em tocloft
),编译结果如下,并且可以看到,第二张图中不带编号的节标题与带编号的节标题左对齐。
但我使用的是本地方式,\hspace{2.3em}
每次我想在内容中添加不带数字的章节标题时都必须添加,那么,有没有一种全局的方法可以获得如上图第二张所示的所需结果?
答案1
顺便说一句,也可以使用\string\numberline{}
而不是\hspace(2.3em}
。
section
中的参数用于\addcontentsline
选择\l@section
格式化此条目的目录。同样,可以定义一个\l@newsection
来设置序言中没有数字的章节标题的缩进,然后使用代码\addcontentsline{toc}{newsection}{}
.显然这是全球性的方法。
或者,可以\thesection
暂时重新定义并直接使用\section
。另一方面,这也会增加部分计数器。
\documentclass{book}
\usepackage{tocloft}
\makeatletter
\newcommand*\l@newsection[2]{\@dottedtocline{1}{1.5em}{2.3em}{\numberline{}#1}{#2}}
\newcommand*{\toclevel@newsection}{1}
\makeatother
\begin{document}
\tableofcontents
\chapter{Chapter title}
\section{Section title with numbers}
\phantomsection
\section*{Section title without numbers}
\addcontentsline{toc}{section}{\string\numberline{}Section title without numbers}
\addcontentsline{toc}{newsection}{Section title without numbers}
\renewcommand{\thesection}{}
\section{Section title without numbers}
\addtocounter{section}{-1}%
\renewcommand{\thesection}{\thechapter.\arabic{section}}
\end{document}