我正在使用 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}}}
\listfigurename
lof 和 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