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

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

我想用箭头连接两棵森林树,以类似的方式讨论这里对于普通的 tikz 树。但是,似乎不可能以类似的方式向森林环境添加选项。简单地引用节点只会将箭头放在右侧树的右侧。(为了避免混淆:我不是在谈论$\Rightarrow_G$第一个森林环境中,而是谈论弯曲的森林环境,它应该连接两个特定的节点。)

\documentclass{beamer}
\usepackage{tikz}
\newcommand{\false}{\mathbf{f}}
\usetikzlibrary{calc, positioning}
\usetikzlibrary{arrows}
\usepackage{forest}
\setbeamercovered{transparent}
\begin{document}

\begin{frame}{}  

% Tree 1
\begin{forest}
    [$\sigma$, calign=last
        [$a$]
        [{\langle \sigma, \{1,2\},\false \rangle}% 
                , math content, calign=first, baseline, draw=blue, ellipse,  name = replaceNode
            [$\sigma_*$]
            [$a$]
        ]
    ]
  \node at (current bounding box.east)
        [anchor=west]
        {$\Rightarrow_G$};
\end{forest}
%
% Tree 2
\begin{forest}
    [$\sigma$, calign=last
        [$a$]
        [$\sigma$, calign=last
            [$b$]
            [{\langle \sigma, \{1,2\},\false \rangle}% 
                , math content, calign=first, baseline, name = t1
                [$\sigma$, calign=first
                    [$\sigma_*$]
                    [$a$]
                ]
                [$b$]
            ]
        ]
    ]
\end{forest}
%
% This arrow should connect two nodes of both trees.
\begin{tikzpicture}
\draw[->, black, dashed, bend angle=45, bend left] (replaceNode) to (t1);
\end{tikzpicture}


\end{frame}

\end{document}

似乎有一种解决方法,就是将两棵树放在同一个森林环境中,并使用幻影父节点。但是,我希望有一个覆盖解决方案,以便更好地模块化我的图形,特别是如果涉及两棵树以上的话。

答案1

正如@cfr 在评论部分所建议的那样,这可以通过利用tikzmark库来实现。

您需要添加\usetikzlibrary{tikzmark}到您的序言中。然后,您可以\subnode在每个forest环境中放置一个,然后tikzpicture在其后添加一个带有选项overlay和的remember picture

发出命令时,如果您想将其视为坐标点,则可以在 s\draw的名称前加上前缀(否则不要使用前缀)。请注意,您还需要编译文档两次。subnodepic cs:subnodepic cs:

($()+()$)我还使用指定坐标位置的语法将箭头的起点和终点稍微向上移动了一点。

\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\newcommand{\false}{\mathbf{f}}
\usetikzlibrary{calc, positioning}
\usetikzlibrary{arrows}
\usepackage{forest}
\setbeamercovered{transparent}
\begin{document}

\begin{frame}{}  

% Tree 1
\begin{forest}
    [$\sigma$, calign=last
        [$a$]
        [\subnode{replaceNode}{$\langle\sigma, \{1,2\},\false \rangle$}, calign=first, baseline, draw=blue, ellipse
            [$\sigma_*$]
            [$a$]
        ]
    ]
  \node at (current bounding box.east)
        [anchor=west]
        {$\Rightarrow_G$};
\end{forest}
%
% Tree 2
\begin{forest}
    [$\sigma$, calign=last
        [$a$]
        [$\sigma$, calign=last
            [$b$]
            [\subnode{t1}{$\langle\sigma, \{1,2\},\false \rangle$}, calign=first, baseline
                [$\sigma$, calign=first
                    [$\sigma_*$]
                    [$a$]
                ]
                [$b$]
            ]
        ]
    ]
\end{forest}
%
% This arrow should connect two nodes of both trees.
\begin{tikzpicture}[overlay,remember picture]
\draw[->, black, dashed, bend angle=45, bend left] ($(pic cs:replaceNode)+(0.25,.2)$) to ($(pic cs:t1)+(0.25,.2)$);
\end{tikzpicture}

\end{frame}

\end{document}

在此处输入图片描述

相关内容