tikz-qtree 中的超链接

tikz-qtree 中的超链接

我正在尝试将超链接包含到由 tikz-qtree 包创建的树中。编译后,所有节点看起来都像链接,但似乎只有树右侧分支中的链接才真正起作用。

\documentclass{amsart}
\usepackage[english]{babel}
\usepackage[colorlinks=true, allcolors=blue]{hyperref}
\usepackage{tikz}
\usepackage{tikz-qtree}

\begin{document}

\hypertarget{main}{The main part} \\
\hypertarget{case1}{The first case} \\
\hypertarget{case2}{The second case} \\

\newpage

\begin{tikzpicture}
\Tree
[.\node[draw]{\hyperlink{main}{The main part}};
        [.\node[draw]{\hyperlink{case1}{The first case}};]
        [.\node[draw]{\hyperlink{case2}{The second case}};]
]
\end{tikzpicture}

\end{document}

答案1

不清楚为什么tikz-qtree不能正确地做到这一点,但使用forest,可以做到这一点。该forest包还使许多其他事情比 更容易tikz-qtree。例如,因为树中的每个节点都是一个 TikZ 节点,所以您不需要显式\node命令来引用节点,只需添加name。我在两个底部节点之间添加了一条曲线作为您可以做的事情的示例。

\documentclass{amsart}
\usepackage[english]{babel}
\usepackage[colorlinks=true, allcolors=blue]{hyperref}

\usepackage[linguistics]{forest}

\begin{document}

\hypertarget{main}{The main part}

\hypertarget{case1}{The first case}

\hypertarget{case2}{The second case}

\newpage



\begin{forest}for tree=draw
[\hyperlink{main}{the main part}
    [\hyperlink{case1}{The first case},name=first ]
    [\hyperlink{case2}{The second case},name=second ]
]
\draw[<->,red,very thick] (first.south) [bend right] to (second.south);
\end{forest}

\end{document}

代码输出

间距问题

确实,forest我们试图让树尽可能紧凑,但对于某些应用来说,这可能并不理想。但几乎没有什么做不到forest,而且调整兄弟节点的距离让树不那么紧凑也相当容易。这是您的树的一个版本,右侧有更多分支,左侧只有一个女儿。我们可以调整前两个女儿的间距,这样右侧的后代就不会与左侧女儿重叠。当然,如果您不想要重叠的材料,树很快就会变得难以管理的大。

\begin{forest}for tree=draw
[\hyperlink{main}{the main part},s sep=6cm
    [\hyperlink{case1}{The first case},name=first ]
    [\hyperlink{case2}{The second case},name=second
        [Another daughter
            [This is a granddaughter ]
            [This is another granddaughter] 
        ]
        [This is another daughter]
    ]
]
\end{forest}

第二个代码的输出

答案2

它与普通的 TikZ 配合良好。

在此处输入图片描述

\documentclass{amsart}
\usepackage{tikz}
\usepackage[colorlinks=true,allcolors=blue]{hyperref}
\begin{document}
\hypertarget{main}{The main part}
\vspace*{3cm}

\hypertarget{case1}{The first case}
\vspace*{3cm}

\hypertarget{case2}{The second case}
\newpage

\begin{tikzpicture}[every node/.style={draw,fill=yellow!50,rounded corners}]
\path
(0,0)    node (main)   {\hyperlink{main}{the main part}}
+(2,-2)  node (first)  {\hyperlink{case1}{The first case}}
+(-2,-2) node (second) {\hyperlink{case2}{The second case}};
\draw 
(main.south)--++(-90:.75)-|(first)
(main.south)--++(-90:.75)-|(second);
\end{tikzpicture}
\end{document}

相关内容