Hyperref 与 titlesec 冲突和警告

Hyperref 与 titlesec 冲突和警告

当我在同一个文档中使用titlesechyperref包时,当我尝试使用此代码向目录添加子部分标题时收到警告:

\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}

我发现删除任何一个titlesechyperref包都会消除警告。如何修复包之间的冲突并消除警告?

答案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

遇到了类似的问题和复杂的前言,并且还有几个\addcontentslines,我找到了一个简单的解决方案,即确保hyperref在 之后加载,正如手册titlesec中实际建议的那样。hyperref

答案3

您还可以在序言中包含:

\newcommand{\sectionbreak}{\phantomsection}

这似乎不会弄乱已编号的章节,并在整个文档中保持一致性。您还可以\clearpage在定义中添加一个,以自动获得“章节从新页面开始”的效果。

相关内容