我的文档中有带星号和不带星号的版本,我想将这两种类型都添加到目录中。我使用的是 titletoc,并尝试按如下方式解决:
\titleformat{\section}[hang]
{\Large\bfseries}
{}{0em}{\MakeUppercase{#1}}
\titleformat{name=\section,numberless}[block]
{\large\filcenter\bfseries}
{}{0em}{#1\addcontentsline{toc}{section}{#1}}
\titlecontents*{section}[0em]{\normalsize}{}{}{~\thecontentspage}
[, ][.\vspace{0.5em}]
除了两个问题外,这几乎按我想要的方式工作:
- 当我在文档中使用 \section* 时,收到以下警告:
软件包 hyperref 警告:书签的锚点和其父级的锚点不能 (hyperref) 相同。在输入行 160 处添加了一个新锚点。
- 有时在生成的目录中,章节标题末尾和将其与下一个标题分开的逗号之间有一个空格,如下所示:
第 1 部分:部分标题 1
一个部分标题 1,一个带星号的部分标题 1,另一个部分标题 1。
我尝试将 titlecontents 定义的结尾更改为:
[\unskip, ][.\vspace{0.5em}]
这确实消除了一些不需要的空间,但不是全部。我不知道是什么导致了额外的空间的产生。救命!
答案1
我建议您创建自己的分段命令:
\newcommand{\nonumsection}[1]{\section*{#1}%
\addcontentsline{toc}{section}{#1}}
您需要为 nonum-chapter、-subsection 等创建一个命令。我一直都是这么做的。
答案2
好的,经过反复尝试,我终于找到了解决方案。
要摆脱超链接警告:使用 \phantomsection:
\titleformat{name=\section,numberless}[block]
% how to handle \section*
{\large\filcenter\bfseries}
{}{0em}{#1\phantomsection\addcontentsline{toc}{section}{#1}}
要删除目录中出现 section* 条目时逗号分隔符前的空格:
即使我没有显示目录中的子部分或更低部分:
\protect\setcounter{tocdepth}{1}
仍然需要为 subsection 和 subsubsection 定义一个 \titlecontents 行。然后神秘的空格就消失了。