突出显示缺少目的地的超链接

突出显示缺少目的地的超链接

我正在使用 hyperref 包。我的 .tex 文件包含一些自动生成的内容,这些内容使用 \hyperlink 来引用 .tex 文件中通常不包含的内容。很难找到这些内容出现的位置,因为这些超链接是由宏引入的。是否可以在 PDF 中以明亮的方式突出显示这些损坏的引用?

这是一个具体的最小示例:

\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{hyperref}

\begin{document}
\hypertarget{correctDest}{This can be used as a destination of some hyperlink}
The line below has 2 hyperlinks, one to the above destination
and another to an undefined destination.\\
Clicking \hyperlink{correctDest}{here} should be good.
Clicking \hyperlink{undefined}{here} is bad because
there is no destination in this document that defined the
destination undefined. Is there a way that the latter hyperlink
is highlighted in the PDF so that it is easy to find and fix them?
\end{document}

我收到的错误消息甚至没有告诉我损坏引用所在的行号

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

答案1

因为我们不确定文本

pdfTeX warning (dest): name{undefined} has been referenced

不间断地写到更多行,使用起来grep更复杂。也许这个检查可以在宏级别更简单地实现。例如,当我们使用纯 TeX 和 OPmac 时,代码应该是:

\input opmac

\hyperlinks\Blue\Blue
\def\link[#1]#2#3{%
   \expandafter\ifx\csname islink:#1\endcsname\relax {\localcolor\Red #3}%
   \else \linkactive[#1]{\localcolor\Blue}{#3}\fi
}
\def\dest[#1]{\openref\immediate\wref\sdef{{islink:#1}{}}\destactive[#1]}

%% Testing:    

\def\hyperlink[#1]#2{\link[hyp:#1]{\localcolor\Blue}{#2}}
\def\hypertarget[#1]{\dest[hyp:#1]}

\hypertarget[correctDest]
Clicking \hyperlink[correctDest]{here} should be good.
Clicking \hyperlink[undefined]{here} is bad because there is no destination
in this document.

\bye

OPmac 使用工作 REF 文件\jobname.ref,其中积累了所有需要再次读取的数据。这类似于aux,但只有这个文件,没有其他文件(没有toc等)。\dest[mark]宏将 打印\sdef{isindent:mark}{}到 REF 文件中,并且\link宏可以询问是否定义了此控制序列。如果这是真的,则\linkactive处理正常情况,否则只打印\Red彩色文本。

抱歉,我不会为 LaTeX 和 hyperref 包重写这个想法,因为我不支持 LaTeX。我拒绝深入研究 8803 行hyperref.sty代码,而 OPmac 中只有 44 行简单的代码解决了大部分相同的问题(超链接)。但你可以从中得到启发,并尝试为你正在使用的宏包实现这一点。

相关内容