神秘错误:\pdfendlink 最终与 \pdfstartlink 处于不同的嵌套级别

神秘错误:\pdfendlink 最终与 \pdfstartlink 处于不同的嵌套级别

我遇到了“神秘的”

\pdfendlink ended up in different nesting level than \pdfstartlink

错误。根据http://www.tug.org/errors,“当hyperref在 pdftex 下使用时,如果引用跨越页面边界,就会发生这种情况”。给出的解决方案是手动修复引用,使其不跨越页面边界。

但是,这种解决方法对我来说是不可行的,因为文档是在服务器上自动生成的,无需用户交互。

是否有任何已知的解决方案,也许是实验性hyperref措施或 pdftex 补丁?(可能可以使用 luatex 来解决问题,但由于其他原因,luatex 不是该项目的选项。)

梅威瑟:

\documentclass[%draft
              ]{article}
\usepackage{hyperref}
\setlength{\textwidth}{3cm}
\setlength{\textheight}{3cm}

\begin{document}
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
nonumy eirmod tempor invidunt ut labore et dolore magna
\href{http://www.tug.org/errors}{aliquyam erat, sed diam voluptua.}
\end{document}

答案1

根据海科·奥伯迪克,这个错误是在 的更改中引入的atbegshi。使用hyperref v6.82r,它应该被修复。我用v6.82v(今天在 texlive 2012 上发布)进行了测试,MWE 运行正常,没有错误。

答案2

以下根据空格和明确的连字符拆分参数,并使每个单词成为不可断开的链接,但允许链接之间断开。

 \documentclass[%draft
              ]{article}
\usepackage{hyperref}
\setlength{\textwidth}{3cm}
\setlength{\textheight}{3cm}

\def\linkspace#1#2{\leavevmode
\def\tmp##1{\nolinebreak[2]\href{#1}{\hbox{##1}}}%
\xlinkspace#2 \relax}

\def\xlinkspace#1 #2{%
 \ifx\relax#2%
 \xlinkdash#1-\relax
 \else
 \xlinkdash#1 -\relax
 \expandafter\xlinkspace\expandafter#2%
 \fi}

\def\xlinkdash#1-#2{%
 \ifx\relax#2%
 \tmp{#1}%
 \else
 \tmp{#1-}%
 \expandafter\xlinkdash\expandafter#2%
 \fi}

\begin{document}

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
nonumy eirmod tempor invidunt ut labore et dolore magna
\linkspace{http://www.tug.org/errors}{aliquyam erat, sed diam vol-uptua.  Cons-etetur sadi-pscing elitr,}%

\end{document}

答案3

您可以尝试将链接放在 中\mbox(编辑:最初是\hbox),并生成溢出的 hbox 警告。下面的代码对我而言是可以编译的(而且我确实在您的最小示例中遇到了错误)。根据具体情况,这可能看起来相当丑陋。

\documentclass[%draft
              ]{article}
\usepackage{hyperref}
\setlength{\textwidth}{3cm}
\setlength{\textheight}{3cm}

\begin{document}
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
nonumy eirmod tempor invidunt ut labore et dolore magna
\mbox{\href{http://www.tug.org/errors}{aliquyam erat, sed diam voluptua.}}
\end{document}

编辑(以下关于多列的评论):鉴于这是自动生成的,一个非常棘手的解决方法可能是执行以下操作:

\mbox{\href{http://www.tug.org/errors}{aliquyam}} 
\mbox{\href{http://www.tug.org/errors}{erat,}}
\mbox{\href{http://www.tug.org/errors}{sed}} 
\mbox{\href{http://www.tug.org/errors}{diam}}
\mbox{\href{http://www.tug.org/errors}{voluptua.}}

那么希望溢出框不会那么普遍/难看。至少在您的测试用例中看起来并不糟糕。此外,此 hack 中的链接在colorlinks超链接选项下看起来要好得多。

相关内容