是否有一种合理简单/有效的方法可以使用该hyperref
包有条件地停用超链接,即超目标在 LaTeX 输出中不存在,即仅针对此特定参考不显示超链接?
解释性说明:您可能会问为什么超目标不存在?
答案:因为数据是从数据库输入到预定义的乳胶模板中的,并且超链接已预编码,例如传递给模板的数据库代码包括\hyperlink{XYZ}{ABC}
例如 - 想想 Word Mailmerge 相同的概念,只是我们“还”不能从数据库中定义是否也将包括相应的超目标。因此,在某些情况下,文本详细信息将插入到乳胶输出中,但超目标可能会或可能不会包含在文档中,这取决于数据选择和排序标准,因此特定引用的目标是可变的,并且不一定包含在乳胶输出中。但是,即使输出不需要目标,也必须包含文本。
在过去的 72 小时内一直在检查软件包和 Stackexchange 以寻找解决方案 - 如果存在的话,但到目前为止还无济于事。
如能得到任何指导/指点我将非常感激。
本来会提供 MWE,但代码不会被视为 MWE....
目前一切正常,只是当编译输出中不包含缺少的超目标时,链接显示(为真),然而却将读者引导到 PDF 中的第 1 页,显然是因为定义的目标没有包含在输出中,所以理想情况下,我希望链接显示为假的,即不是蓝色的。
答案1
以下内容似乎足以\hyperlink{<link>}{<text>}
根据附带的 有条件地进行工作\hypertarget{<link>}{<text>}
。它使用 (La)TeX 的\label
-系统,为中的\ref
每个 写一个标签。然后,在 内,显示被调节为或是否存在。<link>
\hypertarget
\hyperlink
\hyperlink{<link>}{<text>}
<text>
<link>
\documentclass{article}
\usepackage{hyperref}
\let\oldhypertarget\hypertarget
\renewcommand{\hypertarget}[2]{%
\label{ht@#1}% Set a \label
\oldhypertarget{#1}{#2}% Set regular \hypertarget
}
\let\oldhyperlink\hyperlink
\renewcommand{\hyperlink}[2]{%
\ifcsname r@ht@#1\endcsname
\oldhyperlink{#1}{#2}% \hypertarget exists
\else
#2% \hypertarget doesn't exist
\fi
}
\begin{document}
\hyperlink{link}{text1}
\hypertarget{link}{text2}
\hyperlink{link2}{text3}
\end{document}