选择性关闭超链接

选择性关闭超链接

我正在编写一个文档,其中包含我希望可点击的 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*

我有两个问题:

  1. 我如何使这个临时的重新定义\ref起作用?
  2. 或者,我该如何全局关闭方程式链接,但仍然让 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如果您不介意一点手动劳动,已经为您提供了它。

相关内容