![tikz-qtree 中的超链接](https://linux22.com/image/400762/tikz-qtree%20%E4%B8%AD%E7%9A%84%E8%B6%85%E9%93%BE%E6%8E%A5.png)
我正在尝试将超链接包含到由 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}