我遇到了“神秘的”
\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
超链接选项下看起来要好得多。