目录点中的索引链接并非指向索引,而是指向索引之前的内容

目录点中的索引链接并非指向索引,而是指向索引之前的内容

我的 LaTeX 文档包含一个索引,该索引也通过 引用到目录中\addcontentsline。目录中显示的页码是正确的。但是链接不正确。(如果我在 PDF 查看器 Evince 中查看文档结构,页码似乎也是错误的。)

我发现链接似乎总是指向文档结构中索引之前的内容(例如sectionsubsectionparagraph)。

在我的示例中,Pdflatex 生成的链接指向索引之前的段落“Und so weiter”。如果我删除“Und so weiter”并再次编译,链接将指向子部分“Hallo”。

最小工作示例

\documentclass[11pt, titlepage]{article}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{makeidx}
\usepackage{hyperref}

\pagestyle{plain}
\makeindex

\title{Stichwortverzeichnis bei \LaTeX\ korrekt verlinken}
\author{Kunigunde Knitterkleid}

%%%%% DOCUMENT %%%%%

\begin{document}
\maketitle

\setcounter{tocdepth}{3}
\tableofcontents
\thispagestyle{empty}
\clearpage

\section{Abschnitt 1}
\subsection{Blabla}
Lorem\index{Lorem|see{Lorem ipsum}} ipsum\index{Lorem ipsum} dolor sit amet, consectetuer adipiscing elit.
Donec ullamcorper, felis non sodales\index{sodales} commodo, lectus\index{lectus} velit ultrices augue, a dignissim nibh lectus placerat pede.
\clearpage

\section{Abschnitt 2}
\subsection{Hallo}
\paragraph{Und so weiter}
\blindtext
\clearpage

%%%%% INDEX %%%%%

\renewcommand{\indexname}{Stichwortverzeichnis}
\addcontentsline{toc}{section}{Stichwortverzeichnis}
\printindex

\end{document}

奇怪的是,当使用 KOMA 脚本类时,它可以完美运行。

我所做的唯一更改是将文档类更改为scrartcl带有选项index=totoc并删除不必要的\addcontentsline行。

使用 KOMA 脚本的最小工作示例

\documentclass[11pt, titlepage, index=totoc]{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{makeidx}
\usepackage{hyperref}

\pagestyle{plain}
\makeindex

\title{Stichwortverzeichnis bei \LaTeX\ korrekt verlinken}
\author{Kunigunde Knitterkleid}

%%%%% DOCUMENT %%%%%

\begin{document}
\maketitle

\setcounter{tocdepth}{3}
\tableofcontents
\thispagestyle{empty}
\clearpage

\section{Abschnitt 1}
\subsection{Blabla}
Lorem\index{Lorem|see{Lorem ipsum}} ipsum\index{Lorem ipsum} dolor sit amet, consectetuer adipiscing elit.
Donec ullamcorper, felis non sodales\index{sodales} commodo, lectus\index{lectus} velit ultrices augue, a dignissim nibh lectus placerat pede.
\clearpage

\section{Abschnitt 2}
\subsection{Hallo}
\paragraph{Und so weiter}
\blindtext
\clearpage

%%%%% INDEX %%%%%

\renewcommand{\indexname}{Stichwortverzeichnis}
\printindex

\end{document}

有人知道如何让链接指向正确的位置吗(除了使用 KOMA 脚本)?

我在 Linux 上使用 Tex Live 2009。

答案1

\addcontentsline不设置锚点;它仅引用设置锚点的最新上一个位置,这就是超链接指向错误位置(在您的情况下为分段单元)的原因。要获得正确的结果,请使用\phantomsectionfrom 在hyperref正确位置设置锚点:

\phantomsection
\addcontentsline{toc}{section}{Stichwortverzeichnis}
\printindex

另一个选择是使用tocbibind包裹:

\documentclass[11pt, titlepage]{article}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[nottoc]{tocbibind}
\usepackage{makeidx}
\usepackage{hyperref}

\pagestyle{plain}
\makeindex

\title{Stichwortverzeichnis bei \LaTeX\ korrekt verlinken}
\author{Kunigunde Knitterkleid}

%%%%% DOCUMENT %%%%%

\begin{document}
\maketitle

\setcounter{tocdepth}{3}
\tableofcontents
\thispagestyle{empty}
\clearpage

\section{Abschnitt 1}
\subsection{Blabla}
Lorem\index{Lorem|see{Lorem ipsum}} ipsum\index{Lorem ipsum} dolor sit amet, consectetuer adipiscing elit.
Donec ullamcorper, felis non sodales\index{sodales} commodo, lectus\index{lectus} velit ultrices augue, a dignissim nibh lectus placerat pede.
\clearpage

\section{Abschnitt 2}
\subsection{Hallo}
\paragraph{Und so weiter}
\blindtext
\clearpage

%%%%% INDEX %%%%%

\renewcommand{\indexname}{Stichwortverzeichnis}

\printindex

\end{document}

相关内容