使用 \clearpage 中断 \hyperref 书签

使用 \clearpage 中断 \hyperref 书签

这个问题我用过

\usepackage{titlesec}
\newcommand{\sectionbreak}{\clearpage}

以确保各节从其自己的页面开始。然而,当使用该hyperref包时,这会导致节书签指向上一节的结尾,而不是新节的开头。

以下是 MWE:

\documentclass{article}
\usepackage[pdftex]{hyperref} % Generate PDF links and bookmarks.
\hypersetup{
  bookmarks=true,
  bookmarksnumbered=true
}

\usepackage{titlesec}
\newcommand{\sectionbreak}{\clearpage}

\begin{document}
\section{First}
Some text

\section{Second}
More Text

\end{document}

如果您在 OSX 上使用 Adob​​e Reader 或 Preview 并使用书签,您会注意到第二个书签位于上一节末尾的第一页,而不是第二节开始的第二页。

我怎样才能解决这个问题?

答案1

切换加载顺序hyperreftitlesec

\usepackage{titlesec}% http://ctan.org/pkg/titlesec
\usepackage{hyperref}% http://ctan.org/pkg/hyperref

来自hyperref文档(部分2 隐性行为):

该包可以与任何普通的 LaTeX 文档一起使用,只需在文档序言中指定即可

\usepackage{hyperref}

确保它位于您最后加载的包中,以使其有机会不被覆盖,因为它的工作是重新定义许多 LaTeX 命令。

之后可以加载的软件包哪些包应该在 hyperref 之后加载而不是之前加载?

答案2

\sectionbreak\refstepcounter在设置节 (by ) 的锚点后,会在错误的时间执行。\clearpage也可以通过重新定义 来添加 \section。这\clearpage是最先执行的方式。

\documentclass{article}
\usepackage{hyperref} % Generate PDF links and bookmarks.        
\hypersetup{         
  bookmarksnumbered=true
}
\usepackage{bookmark}

\usepackage{titlesec}

\newcommand*{\OrgSection}{}
\let\OrgSection\section
\renewcommand*{\section}{\clearpage\OrgSection}

\begin{document}
\section{First} 
Some text

\section{Second}
More Text

\end{document}

评论:

  • 选项bookmarks不能仅设置为 中的包选项\usepackage。否则您会收到警告:

    软件包 hyperref 警告:选项 `bookmarks' 已被使用,(hyperref)设置该选项对第 6 行输入没有影响。

  • 您可以省略选项pdftex。软件包hyperref会自动设置它能够检测到的驱动程序选项(PDF 模式下的 pdfTeX/LuaTeX、XeTeX)。

  • 我推荐包bookmark,那么您不需要运行两次 LaTeX 即可在此处获取更新的书签。

相关内容