如何使用 TikZ 链接不同的树

如何使用 TikZ 链接不同的树

这是我当前的情况:我有两棵定义为 的树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 提出的一个有希望的解决方案:

使用 tikz 覆盖/记住森林树木的图片选项

可悲的是,似乎 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,所以我给了eh节点一个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}

相关内容