hyperref 错误引用

hyperref 错误引用

清理我的项目并连续 10 次编译 tex 文件后:

rm temp.toc temp.pdf temp.out temp.html temp.aux
xelatex temp.tex # executed 10 times!

我仍然会使用 hyperref 获得错误的引用。在目录中,我看到了超链接。目录中的页码是正确的。但引用指向不同的页面。

我无法提供最小的工作示例,因为该问题只发生在长文档中。(为两页的文章制作目录根本没有意义。)根据要求,我可以上传整个文档,但这可能没有必要。

更新:问题仍然存在。我已在此处上传了完整的示例:https://rapidshare.com/files/1197222879/output.zip- 包含所有 tex 文件、aux 文件和生成的最终 pdf 文件。引擎是 xelatex。我已经执行了 10 次编译,但超链接仍然错误。在目录中,当您单击显示“第 25 页”的链接时,您将被定向到第 23 页。换句话说,目录中的页码是正确的,但超链接引用不正确。

更新:这是一个错误。如果我同时使用\usepackage[hungarian]{babel}\usepackage{hyperref},它们的引用就会出错。如果我删除 hungarian babel,那么引用就会变好(但连字符就会出错,段落看起来很糟糕)

答案1

你的情况的主要问题是,当前版本magyar.ldf加载了

\usepackage[hungarian]{babel}

与 的交互被破坏了hyperref

TeX Live 系统上有一个不同的版本,位于

/usr/local/texlive/2012/texmf-dist/doc/latex/magyar/magyar.ldf

您可以将其复制到工作目录或文件夹中

~/texmf/tex/latex/magyar

~/Library/texmf/tex/latex/magyar/使用 Mac OS X 上的 MacTeX)您需要创建。

然后babel调用

\def\magyarOptions{suggestions=no}
\usepackage[magyar]{babel}

第一行只是为了避免虚假和几乎毫无意义的信息。

这不是官方的版本magyar.ldf,但它似乎有效。

另一方面,匈牙利语的 Polyglossia 模块似乎可以工作,因此你可以考虑在使用 XeLaTeX 时调用

\usepackage{polyglossia}
\setmainlanguage{magyar}

答案2

百分之九十(或多或少)都属于这种情况(这已经是解决办法):

\cleardoublepage % new page to move the anchor to the right page
\phantomsection % anchor setting
\addcontensline{toc}{section}{\indexname}% bookmark with latest anchor
\printindex

当然,你得根据自己的需要采用它,chapter而不是section,用书目代替索引,……

采用目录:

\cleardoublepage
\phantomsection
\addcontentsline{toc}{section}{\contentsname}%
\tableofcontents

或者不将目录添加到目录中,而只添加到书签中:

\cleardoublepage
\pdfbookmark[1]{\contentsname}{toc}% for section level
% \pdfbookmark[0]{\contentsname}{toc}% for chapter level
\tableofcontents

答案3

有一个使用官方的解决方法magyar.ldf,只需在你的序言中包含以下宏(我从旧的 Debian teTex 邮件列表中获得)。

\makeatletter
\let\Hy@magyar@saved@refstepcounter\refstepcounter
\addto\extrasmagyar{%
  \let\H@refstepcounter\refstepcounter
  \let\refstepcounter\Hy@magyar@saved@refstepcounter
  \expandafter\renewcommand\expandafter*\expandafter\@ssect
      \expandafter[\expandafter 5\expandafter]\expandafter{%
    \expandafter\def\expandafter\@currentlabelname\expandafter{%
      \expandafter #\expandafter 5\expandafter
    }%
    \@ssect{#1}{#2}{#3}{#4}{#5}%
    \phantomsection
  }%
  \expandafter\Hy@magyar@patch@sect\expandafter{%
    \@sect{#1}{#2}{#3}{#4}{#5}{#6}[{#7}]{#8}%
  }{#1#2#3#4#5#6[#7]#8}{#2}{#7}%
}
\def\Hy@magyar@patch@sect#1#2#3#4{%
  \def\@sect#2{%
    \setcounter{section@level}{#3}%
    \def\@currentlabelname{#4}%
    \ifnum #3>\c@secnumdepth
      \Hy@GlobalStepCount\Hy@linkcounter
      \xdef\@currentHref{section*.\the\Hy@linkcounter}%
    \fi
    #1%
    \ifnum #3>\c@secnumdepth
      \Hy@raisedlink{\hyper@anchorstart{\@currentHref}\hyper@anchorend}%
    \fi
  }%
}
\makeatother

来源:Bug#306586:hyperref:错误嵌套书签

相关内容