覆盖由 \addcontentsline 创建的 pdfbookmarks

覆盖由 \addcontentsline 创建的 pdfbookmarks

我想要一个名为“Frontmatter”的书签,其级别为 0,以及“Preface”、“Acknowledgements”和“Contents”的书签,其级别为 1。

我的问题是它\addcontentsline{toc}{chapter}{<x>}会自动在章节级别(级别=0)创建书签,但我不知道如何用级别=1 的书签覆盖它们。我在下面的 MWE 中注释掉的行表示我想要的书签结构。该bookmark包似乎也没有提供解决方案,因此我没有在 MWE 中加载它。

\documentclass{book}

\usepackage{lipsum}
\usepackage{hyperref}

\begin{document}

\frontmatter

%\pdfbookmark[0]{Frontmatter}{frontmatter}
\chapter*{Preface}
%\pdfbookmark[1]{Preface}{preface}
\addcontentsline{toc}{chapter}{Preface}
\lipsum[1]

\chapter*{Acknowledgements}
%\pdfbookmark[1]{Acknowledgements}{acknowledgements}
\addcontentsline{toc}{chapter}{Acknowledgements}
Thanks to everyone for everything.

\cleardoublepage
\pdfbookmark[0]{Contents}{toc}
%\pdfbookmark[1]{Contents}{toc}
\tableofcontents

\mainmatter

\chapter{Lipsum 2}
\lipsum[2]

\end{document}

答案1

在这种情况下,包也bookmark可以提供帮助。可以在部分级别添加书签“Frontmatter”,并\mainmatter使用选项重新启动书签层次结构 startatroot

\documentclass{book}

\usepackage{lipsum}
\usepackage{hyperref}
\usepackage{bookmark}

\begin{document}

\frontmatter

\pdfbookmark[-1]{Frontmatter}{frontmatter}
\chapter*{Preface}
\addcontentsline{toc}{chapter}{Preface}
\lipsum[1]

\chapter*{Acknowledgements}
\addcontentsline{toc}{chapter}{Acknowledgements}
Thanks to everyone for everything.

\cleardoublepage
\pdfbookmark[0]{Contents}{toc}
\tableofcontents

\bookmarksetup{startatroot}
\mainmatter

\chapter{Lipsum 2}
\lipsum[2]

\end{document}

另一种解决方案是重新定义\toclevel@chapterto1并在前置内容之后重置。

答案2

解决方案:使用bookmark包,然后\bookmarksetup{depth=-1}对前言和\bookmarksetup{depth=4}主要内容进行处理。

\documentclass{book}

\usepackage{lipsum}
\usepackage{hyperref}
\usepackage{bookmark}

\begin{document}

\bookmarksetup{depth=-1}

\frontmatter

\pdfbookmark[0]{Frontmatter}{frontmatter}
\chapter*{Preface}
\pdfbookmark[1]{Preface}{preface}
\addcontentsline{toc}{chapter}{Preface}
\lipsum[1]

\chapter*{Acknowledgements}
\pdfbookmark[1]{Acknowledgements}{acknowledgements}
\addcontentsline{toc}{chapter}{Acknowledgements}
Thanks to everyone for everything.

\cleardoublepage
\pdfbookmark[1]{Contents}{toc}
\tableofcontents

\bookmarksetup{depth=4}

\mainmatter

\chapter{Lipsum 2}
\lipsum[2]

\end{document}

相关内容