使用 usepackage{titlesec} 时,如果部分从页面顶部开始,则目录超链接指向错误的页面

使用 usepackage{titlesec} 时,如果部分从页面顶部开始,则目录超链接指向错误的页面

长而准确的标题。当我包含 titlesec 包(即使没有真正使用它)时,当一个部分从新页面的顶部开始时,目录会链接到上一页。这是一个 MWE。当单击目录中的“第二部分”时,我会到达上一页(第一部分)。如果我删除\usepackage{titlesec} 或者如果我在第一部分中添加或删除几个句子,让第二部分不从顶部开始,问题就消失了。

\documentclass[a4paper,11pt]{article}
\usepackage{hyperref}

\usepackage{titlesec}



\begin{document}

\tableofcontents

\newpage 

\section{Section One}

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est.

\section{Section Two}

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam

\end{document}

答案1

你的问题是一个很好的例子,说明了为什么hyperref应该是你最后加载的软件包在序言中,

让它有机会不被覆盖,因为它的工作是重新定义许多 LATEX 命令

根据文档

hyperref重新定义 LaTeX 内部结构和宏,例如\section\footnote以及其他应作为超链接或超目标执行的内容。要使其正常工作,hyperref必须调整自身以适应可能先前已重新定义相同内部结构的所有其他包。

titlesec是这些包之一:它\section通过一系列重新定义来改变分段命令的外观和功能。中的定义titlesec有可能覆写所做的操作hyperref,实际上撤消了它所做的一些工作 - 从而导致超文本功能的丧失。

为了避免这种情况,hyperref必须加载 titlesec(以及类似的软件包)。颠倒序言中两个软件包的顺序可以解决您的问题:

\documentclass[a4paper,11pt]{article}

\usepackage{titlesec}
\usepackage{hyperref}

\begin{document}

这条规则只有少数例外:参见哪些包应该在 hyperref 之后加载而不是之前加载?

相关内容