当我在同一个文档中使用titlesec
和hyperref
包时,当我尝试使用此代码向目录添加子部分标题时收到警告:
\subsection*{This is subsection}
\addcontentsline{toc}{subsection}{This is a subsection}
警告指出:
软件包 hyperref 警告:书签的锚点和其父级的锚点不能相同。在输入行 12 处添加了一个新锚点。
仅当出现以下情况时才会出现此警告小节以这种方式添加到 ToC,而不是部分。第 12 行是添加子部分的地方。下面是显示 isse 的最小工作代码(此处进行现场演示);部分章节不会触发警告,只有小节章节才会触发警告:
\documentclass[11pt,a4paper]{article}
\usepackage{titlesec}
\usepackage{hyperref}
\begin{document}
\section*{This is a section}
\addcontentsline{toc}{section}{This is a section}
\subsection*{This is subsection 1}
\addcontentsline{toc}{subsection}{This is a subsection 1}
\subsection*{This is subsection 2}
\addcontentsline{toc}{subsection}{This is a subsection 2}
\end{document}
我发现删除任何一个titlesec
或hyperref
包都会消除警告。如何修复包之间的冲突并消除警告?
答案1
\phantomsection
每次手动将 添加\subsection*
到(和书签) 之前,请使用ToC
来重新建立超级锚点。
\documentclass[11pt,a4paper]{article}
\usepackage{titlesec}
\usepackage{hyperref}
\begin{document}
\section*{This is a section}
\addcontentsline{toc}{section}{This is a section}
\clearpage
\phantomsection
\subsection*{This is subsection 1}
\addcontentsline{toc}{subsection}{This is a subsection 1}
\clearpage
\phantomsection
\subsection*{This is subsection 2}
\addcontentsline{toc}{subsection}{This is a subsection 2}
\end{document}
答案2
遇到了类似的问题和复杂的前言,并且还有几个\addcontentsline
s,我找到了一个简单的解决方案,即确保hyperref
在 之后加载,正如手册titlesec
中实际建议的那样。hyperref
答案3
您还可以在序言中包含:
\newcommand{\sectionbreak}{\phantomsection}
这似乎不会弄乱已编号的章节,并在整个文档中保持一致性。您还可以\clearpage
在定义中添加一个,以自动获得“章节从新页面开始”的效果。