如何以全局方式将目录中没有数字的章节标题与有数字的章节标题对齐?

如何以全局方式将目录中没有数字的章节标题与有数字的章节标题对齐?

第一个 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}

相关内容