查找缺失的 hyperref 超目标

查找缺失的 hyperref 超目标

我有一份很长的文档,其中我在单独的“定义”部分中将特定单词与其定义链接起来。我使用 hyperref 包执行此操作。

如果某个特定超链接的目标缺失,则不会出现任何错误,在最终的 PDF 中,该链接不会执行任何操作。有没有办法找到缺少目标的超链接,而无需尝试单击每个链接?这只是一个健全性检查,我没有忽略添加任何链接,也没有在超链接中出现拼写错误或其他问题。

我不在乎它是在 Latex 中(也许是我在编译期间缺少一个记录它们的选项)还是在 PDF 之后——我知道我可以转储 PDF 目的地列表,但我还没有找到一种方法来转储链接列表以与之进行比较......

有什么想法吗?

编辑 xelatex 不会报告缺少的超目标,但 pdflatex 会报告。

答案1

您没有显示任何代码,但您应该在日志中收到有关没有目标的链接的警告

\documentclass{article}
\usepackage{hyperref}
\begin{document}

\hypertarget{aaa}{ABC definition}

\clearpage
xxx  \hyperlink{aaa}{ABC used}

xxx  \hyperlink{aaax}{ABC used}

\end{document}

第一个链接应该可以工作,第二个链接如果目标名称输入错误则会产生警告

pdfTeX warning (dest): name{aaax} has been referenced but does not exist, repla
ced by a fixed one

在日志的末尾。

答案2

如果您使用 pdfTeX 进行编译,则可以使用grep -1 "fixed one" <filename>.log获取缺失目标的列表。或者,您可以按照您喜欢的任何其他方式在日志文件中搜索此字符串。

然而,这本身并不能总是告诉你有问题的链接在哪里。所以我也做了类似的事情

\NewDocumentCommand \noisyhyperlink { mm }
{%
  \hyperlink{#1}{#2}%
  \PackageInfo{noisy}{Hyperlinking #2 to #1}%
}
\NewDocumentCommand \noisyhypertarget { mm }
{%
  \hypertarget{#1}{#2}%
  \PackageInfo{noisy}{Hypertarget #1 set}%
}

然后,您可以使用\noisyhypertarget{}{}\noisyhyperlink{}{}代替\hypertarget{}{}\hyperlink{}{}。根据 的结果grep,您可以搜索.log文件以找出有问题的链接在哪里。

\noisyhypertarget对此来说并非必不可少,但如果您想弄清楚由于某些更复杂的命令而究竟发生了什么,它会很有用。

相关内容