我怎样才能在文本周围伪造一个超链接风格的彩色框?

我怎样才能在文本周围伪造一个超链接风格的彩色框?

默认情况下,该hyperref包将在 URL 周围添加青色框:

\documentclass{amsart}
\usepackage{hyperref}
\begin{document}
    \url{https://www.baidu.com}
\end{document}

我怎样才能在任何一段文本周围添加一个青色框,使其看起来像 URL 但不可点击?此框不应显示在打印版本中。“演示”:

\documentclass{amsart}
%???????????????????????????
\begin{document}
    \fakeurl{any piece of code}
\end{document}

答案1

Hyperref 框式链接是使用子类型的 PDF 注释实现的/Link。大多数 PDF 查看器都会识别此类型,并将鼠标光标更改为此类注释上的链接图标,即使链接目标实际上为空。这会产生可点击的外观,即使当链接目标为空时单击此类“链接”实际上没有任何效果。

注释还有其他子类型。其中一个子类型是/Square,其在 PDF 1.4 参考中定义如下:

方形和圆形注释(PDF 1.3)分别在页面上显示一个矩形或椭圆形。打开时,它们会显示一个弹出窗口,其中包含相关注释的文本。

虽然乍一看这似乎并不满足“不可点击”的要求,但在我尝试过的每个 PDF 查看器中,这种没有操作规范的注释类型确实是不可点击的。

此外,您可以为注释设置各种注释标志,其中之一是ReadOnly(使用 设置/F 64)。此标志描述如下:

如果设置,则不允许注释与用户交互。注释可以显示或打印(取决于 NoView 和 Print 标志的设置),但不应响应鼠标点击或根据鼠标移动改变其外观。

因此,大概(但也许不是), 使用设置了只读标志的子类型/Square将使大多数 PDF 查看器显示该框,但不会改变鼠标光标或在点击时执行任何操作。

Hyperref 为每个编译器和工具链(pdflatex、xelatex、lualatex、dvips、dvipdfm 等)提供了单独的定义文件。以下代码取自 ,hpdftex.def并应与 一起使用pdflatex。对于其他编译器,请进行相应修改。该代码是从常规超链接( )的定义中复制而来,\hyper@linkurl我在其中更改了子类型、删除了操作规范并添加了只读标志。

\documentclass{amsart}
\usepackage{hyperref}
\makeatletter
\def\fakeurl#1{%
  \begingroup
    \hyper@chars
    \leavevmode
    \pdfstartlink
      attr{%
        \Hy@setpdfborder
        \Hy@setpdfhighlight
        \ifx\@urlbordercolor\relax
        \else
          /C[\@urlbordercolor]%
        \fi
      }%
      user{%
       /Subtype/Square%
       /F 64%
      }%
      \relax
    \Hy@colorlink\@urlcolor#1\Hy@xspace@end
    \close@pdflink
  \endgroup
}
\makeatother


\begin{document}
    \url{https://www.baidu.com}
    
    \vspace{5mm}
    \fakeurl{any piece of code}
\end{document}

结果:

在此处输入图片描述

第二个框不可点击,并且在我测试的查看器(Adobe Reader 9、Evince、Okular、Firefox pdf viewer)打印时不会显示。

相关内容