我有一份很长的文档,其中我在单独的“定义”部分中将特定单词与其定义链接起来。我使用 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
对此来说并非必不可少,但如果您想弄清楚由于某些更复杂的命令而究竟发生了什么,它会很有用。