这是我当前的情况:我有两棵定义为 的树forest
,并排放置,每棵树都在 内minipage
:
\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{fit}
\usepackage{forest}
\begin{document}
\begin{minipage}{0.3\textwidth}
\begin{forest}
[a
[b
[c]
[d]
]
[e,draw,dashed]
]
\end{forest}
\end{minipage}%
\begin{minipage}{0.3\textwidth}
\begin{forest}
[f
[g]
[,phantom]
[h,tikz={\node [draw,dashed,fit=() (!1) (!l)] {};}
[i]
[j]
]
]
\end{forest}
\end{minipage}
\end{document}
到目前为止,一切都很好!
现在我想将e
树 1 中的节点与h
树 2 中的节点链接起来。现在事情开始变得令人沮丧。我试图给这些节点起一个合适的名字,然后应用remember picture
,但似乎名称在环境之间并不持久(值得一提的是,Alan 提供了一种替代解决方案,即仅使用一棵树模仿两棵树这里;它解决了我眼前的问题,但我仍然有兴趣看看正确的链接是怎样的)。
我在 TeX.sx 中的搜索表明这tikzmark
是最简单、最直接的解决方案,所以我们就开始吧。我在这里找到了 Adam Liter 提出的一个有希望的解决方案:
可悲的是,似乎 TeX 世界中的一切都发生了一些更新,导致我的树木倒塌,发生了一场噩梦般的事故等等:
Package tikz Error: Cannot parse this coordinate.
链接问题中提供的答案不再起作用,我的代码也不起作用。所以我恳求你的智慧!在老树上系一条黄丝带forest
似乎很简单,然而,我在两棵独立的树之间创建一个潜在吊床的计划forest
已经破灭了。:)
有人知道什么东西坏了吗?
答案1
您可以使用 \subnode:
\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{forest}
\usetikzlibrary{tikzmark}
\begin{document}
\begin{minipage}{0.3\textwidth}
\begin{forest}
[a
[b
[c,name=c]
[d,name=d]
]
[\subnode{marke}{e},draw,dashed]
]
\end{forest}
\end{minipage}%
\begin{minipage}{0.3\textwidth}
\begin{forest}
[f
[g]
[,phantom]
[\subnode{markh}{h},name=h,tikz={\node [draw,dashed,fit=() (!1) (!l)] {};}
[i]
[j]
]
]
\end{forest}
\end{minipage}
\begin{tikzpicture}[overlay,remember picture]
\draw[green](marke.east)--(markh.west);
\end{tikzpicture}
\end{document}
答案2
不知道哪里出了问题,但是这种解决方法可以吗?
本质上,对两棵树使用一个forest
,以根作为phantom
节点。s sep
确定两棵树之间的距离。
我不知道在中节点是否/如何命名forest
,所以我给了e
和h
节点一个alias
我在\draw
最后使用的。
\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{fit}
\usepackage{forest}
\begin{document}
\begin{forest}
[,phantom,s sep=3cm
[a
[b
[c]
[d]
]
[e,draw,dashed,alias=e]
]
[f
[g]
[,phantom]
[h,alias=h,tikz={\node [draw,dashed,fit=() (!1) (!l)] {};}
[i]
[j]
]
]
]
\draw [-stealth](e) to[bend right] (h.west);
\end{forest}
\end{document}