PDF 书签中的内容

PDF 书签中的内容

我正在使用 KOMA-Script ( scrreprt) 和hyperref

PDF 书签是根据目录生成的,但我希望有一个额外的内容书签指向目录本身(不包括目录中的条目) - 就像 KOMA 手册本身一样。

(如果我包含图表和表格的话,也请附上清单)

做这个的最好方式是什么?

我可以手动添加\pdfbookmark,但我不知道如何让它正确指向节的开头 - 如果我在之后添加,它将位于错误的页面(多页目录),如果我在之前添加,它将位于之前的页面(因为这样做\tableofcontents\cleardoublepage)。我想我必须以\tableofcontents某种方式重新定义。

答案1

scrreprt以下代码应为和创建正确的 ToC 书签scrbook

\makeatletter
\usepackage{etoolbox}
\pretocmd{\tableofcontents}{%
  \if@openright\cleardoublepage\else\clearpage\fi
  \pdfbookmark[0]{\contentsname}{toc}%
}{}{}%
\makeatother

答案2

基类使用的一般方式\addtocontents是:

\addtocontents{toc}{\protect{\pdfbookmark[0]{\contentsname}{toc}}}

\listfigurenamelof 和 lot 与和类似\listtablename

但是,由于 KOMA-Script 使用tocbasic,这将是更好的方法并且非常简单:

\BeforeTOCHead[toc]{{\pdfbookmark[0]{\contentsname}{toc}}}

仅此一行即可获得目录的书签。

这是一个可编译的示例,用于\BeforeTOCHead创建书签全部诸如 toc、lof 和 lot 之类的列表。

\documentclass{scrbook}
\usepackage{hyperref}
\makeatletter
\BeforeTOCHead{%
  \cleardoublepage
    \edef\@tempa{%
      \noexpand\pdfbookmark[0]{\list@fname}{\@currext}%
    }\@tempa
}
\makeatother
\begin{document}
\tableofcontents
\listoffigures
\listoftables
\chapter{One}
text
\end{document}

无需重新定义\tableofcontents,也无需 etoolbox。babel 支持不同的名称。

答案3

使用 KOMA 脚本,这里有用于将参考书目和“列表”添加到目录中的文档类选项:

\documentclass[
    a4paper,
    bibliography=totoc,
    listof=totoc,
    final
]{scrreprt} 

如果您只想添加 pdf 书签,可以使用以下命令\pdfbookmark

\pdfbookmark{\contentsname}{toc}
\tableofcontents

相关内容