我正在编写一个文档,其中包含我希望可点击的 URL 列表,因此我使用 hyperref 来实现这一点。这有一个尴尬的副作用,那就是我的方程式编号(其中一些我不希望是可点击的链接)也可以点击。我通过提供hypersetup
选项隐藏了它colorlinks, linkcolor={black}
但这不是最理想的,因为链接仍然可以点击。我尝试了以下 MWE,但没有成功(* 只显示在环境上方。)
\documentclass{article}
\usepackage{xcolor}
\usepackage{hyperref}
\hypersetup{colorlinks, linkcolor={black}}
\title{This is the title}
\begin{document}
\let\oldref\ref
\let\ref\ref*
\begin{equation}
\label{eq:one}
e^{i\pi} + 1 = 0
\end{equation}
This is a link to the equation \ref{eq:one}, when it shouldn't be...
\let\ref\oldref %% Changing it back to normal behaviour
\end{document}
我也尝试使用 renewcommand,但是也失败了。
这与 * 有关,因为\let\ref\autoref
运行良好。
我不能只找到并替换我想要取消链接的那些,因为它们在LTXexample
环境中,并且我希望代码显示为\ref
不像\ref*
我有两个问题:
- 我如何使这个临时的重新定义
\ref
起作用? - 或者,我该如何全局关闭方程式链接,但仍然让 URL 链接正常工作?(如果可能的话,有没有办法让一些使用不同命令的方程式链接)
答案1
而不是\ref*
使用\@refstar
:
\makeatletter
\let\ref\@refstar
\makeatother
为什么?hyperref 以\ref
这种方式重新定义。
\DeclareRobustCommand\ref{\@ifstar\@refstar\T@ref}%
\@ifstar
是一个 LaTeX 命令,用于测试下一个字符是否为*
。在这种情况下,*
将被吞噬,并执行以下命令中的第一个 ( \@refstar
),否则执行第二个 ( \T@ref
)。
因此,\ref*
本质上与 und 相同\@refstar
,您可以使用它来代替。
如果你想更深入地了解:源代码文档hyperref(或hyperref.dtx
在 CTAN或您当地的 TeX 系统上)表示\HyRef@StarSetRef
属于\ref*
并且不会被链接,并且\@refstar
定义如下:
\def\@refstar#1{%
\HyRef@StarSetRef{#1}\@firstoffive
}
答案2
仅供记录之用,其中定义的另一种简单方法hyperref package
是执行以下操作:
\begin{NoHyper} %% hyperref hyperlinking disabling environment!
\begin{equation}
\label{eq:one}
e^{i\pi} + 1 = 0
\end{equation}
\end{NoHyper}
同意,这不会一次性禁用所有必要的方程式超链接,但如果需要的话,hyperref
如果您不介意一点手动劳动,已经为您提供了它。