将 TikZ 路径制作成超链接

将 TikZ 路径制作成超链接

我想知道是否有办法将 TikZ 中的任意闭合路径变成超链接;直接或通过将其变成节点。以下是可使用的代码示例:

\documentclass[10pt,letterpaper]{article}
\usepackage{tikz}
\usepackage[colorlinks=true,urlcolor=blue,filecolor=magenta]{hyperref}
\begin{document}
\section{The Diagram}
\begin{center}
\begin{tikzpicture}
\node[draw,align=center] at (12, 0.2+.5) {Even \\ more};
\node[draw,align=center] at (12, 1.4+.5) {And \\ more1};
\node[draw,align=center] at (15, 2.8+.5) {Some \\ text };
\node[draw,align=center] at (15,1.8+.5) {More \\ text};
\draw[blue] (11,-.4+.5)--(13,-.4+.5)--(13,1.3+.5)--(16.5,1.3+.5)--(16.5,3.5+.5)--(11,3.5+.5) --(11,-.4+.5);
\end{tikzpicture}
\end{center}
\section{this is the target}
\hypertarget{target}{}
\end{document}

我希望蓝色路径成为指向标记为目标的超目标的链接。由于该路径形状奇怪,因此它与 TikZ 中任何已知的节点形状都不对应。

我尝试过改变\hyperlink{target}命令\draw[blue],但没有成功。我既可以接受蓝线作为链接,也可以接受蓝线内的区域作为链接。我也不在乎链接激活后它是否仍然是蓝色;我只是给它涂上颜色,让这个问题更清楚。

感谢您的时间。

答案1

好吧,这是一个关于简单矩形路径的想法,这些路径必须被分割成凸子矩形。

为了获得这些子矩形,我保存了三个坐标以供以后使用,即最左下角、最右上角以及凹角。它们以它们的子矩形(ab)和它们相对于此子矩形的位置命名(bl= 左下角,tr= 右上角),但当然,它们可以随意命名(TikZ 允许)。子矩形的右上角坐标a是通过使用 找到的,即子矩形(@b@bl |- @b@tr)的左上角。b

路径上的坐标非常复杂。我将在这里使用(累积)相对坐标,但当然也可以使用您的原始路径(请参阅注释部分)。

我已经填充了子矩形以便于澄清。

提供path picture了一个特殊的矩形节点,path picture bounding box通常可以通过(path picture bounding box)和它们的锚点访问,例如(path picture bounding box.south west)。不过,我将使用低级 PGF 宏来提取X  左下角 ( south west) 和右上角 ( north east) 的值。在和中,我将在尺寸中获得路径图片的尺寸\pgf@?b

\pgftext是一个非常低级的宏,用于将文本放置在图片中的某个位置。它将以其右上角 ( right,top) 放置在north east路径图片的锚点处(\pgf@x并且\pgf@y仍保留来自锚点的值north east)。

的内容\pgftext将是\vrule路径图片高度 ( \pgf@yb),没有深度和宽度,以及\vrule宽度为path picture且没有其他尺寸的。这实际上使 (TeX) 框的大小与路径图片的大小相同,但没有可见内容。

所有这些都包含在名为 的两个参数样式中hyper。但这只是样式使用的辅助样式hyperlink。您可以根据\href需要使用 或 来扩展它。

TeX/PGF 中的实现使其兼容并且速度稍快。

在图书馆的帮助下,calc您可以做到:

\path let \p{@ppbb@dim}=
         ($(path picture bounding box.north east)-(path picture bounding box.south west)$)
      in  node[inner sep=+0pt,
               outer sep=+0pt,
               anchor=north east,
               at=(path picture bounding box.north east)]
                             {#1{#2}{\rule{\x{@ppbb@dim}}{0pt}\rule{0pt}{\y{@ppbb@dim}}}};

代码

\documentclass[10pt,letterpaper]{article}
\usepackage{tikz}
\usepackage[colorlinks=true,urlcolor=blue,filecolor=magenta]{hyperref}
\makeatletter
\tikzset{
  hyper/.style 2 args={
    path picture={%
      \pgfpointanchor{path picture bounding box}{south west}%
      \pgf@xb-\pgf@x
      \pgf@yb-\pgf@y
      \pgfpointanchor{path picture bounding box}{north east}%
      \advance\pgf@xb\pgf@x
      \advance\pgf@yb\pgf@y
      \pgftext[at={\pgfqpoint{\pgf@x}{\pgf@y}},right,top]{#1{#2}{\vrule height\pgf@yb depth0ptwidth0pt\vrule height0ptdepth0ptwidth\pgf@xb}}%
    }
  },
  hyperlink/.style={hyper=\hyperlink{#1}}
}
\makeatother

\begin{document}
\section{The Diagram}
\begin{center}
\begin{tikzpicture}
\node[draw,align=center] at (12, 0.2+.5) {Even \\ more};
\node[draw,align=center] at (12, 1.4+.5) {And \\ more1};
\node[draw,align=center] at (15, 2.8+.5) {Some \\ text};
\node[draw,align=center] at (15, 1.8+.5) {More \\ text};
%\draw[blue] (11,-.4+.5) coordinate (@a@bl) -- (13,-.4+.5)
%         -- (13,1.3+.5) coordinate (@b@bl) -- (16.5,1.3+.5)
%       -- (16.5,3.5+.5) coordinate (@b@tr) -- (11,3.5+.5) -| (@a@bl) -- cycle;

\draw[blue] (11,-.4+.5) coordinate (@a@bl)
         -| ++ (3  ,1.7) coordinate (@b@bl)
         -| ++ (3.5,2.2) coordinate (@b@tr) -| (@a@bl) -- cycle;
\fill[blue!20, fill opacity=.7, hyperlink=target] (@a@bl) rectangle (@b@bl |- @b@tr);
\fill[blue!40, fill opacity=.7, hyperlink=target] (@b@bl) rectangle (@b@tr);
\end{tikzpicture}
\end{center}
\section{This is the target}
\hypertarget{target}{Here is the target!}
\end{document}

输出

在此处输入图片描述

相关内容