使用 tikzpicture 创建带注释的不连通子图

使用 tikzpicture 创建带注释的不连通子图

我正在尝试创建这样的图表

未连接的网络

但是,这是我尝试的结果:

latex 中的子图

\begin{tikzpicture}[nodes={draw, circle}, ->]
    \node{B1 } 
        child { node [label=left:\tiny{$\{t_2^d, s_2^d \}$}] (B2) {B2} 
            child {node [label=left:\tiny{$\{t_4^d, s_4^d \}$}] {B4} }
            child { node [label=below:\tiny{$\{t_5^d, s_5^d \}$}] {B5} }  
        }
        child { node [label=right:\tiny{$\{t_3^d, s_3^d \}$}] (B3) {B3} 
            child [ missing ]
            child { node [label=right:\tiny{$\{t_6^d, s_6^d \}$}] {B6} 
                child { node [label=right:\tiny{$\{t_7^d, s_7^d \}$}] {B7}}
            }  
        };
        \node[right = 100pt of B3, label={[label distance=2pt]-90:\tiny{$\{t_6^d, s_6^d \}$}}] (B8) {B8}; \end{tikzpicture}

主要问题:

  • 如何注释父节点

  • 一个节点如何拥有两个父节点。

  • 如何改变节点之间的距离以将注释放在每个节点的右侧。

答案1

一个孩子不能有两个父母。1实际上,我会为此使用矩阵。可以通过添加标签(这就是为什么必须添加才能获得正确的边界框的原因)overlay\path (l-7.east);

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{matrix}
\begin{document}
\begin{tikzpicture}[b/.style={circle,draw,execute at begin node={$b_{#1}$},
    alias=b-#1,label={[rectangle,draw=none,overlay,alias=l-#1]right:{$[s_{#1},t_{#1}]$}}}]
\node[matrix of nodes,column sep=1em,row sep=2em]{
 & & |[b=1]|& & |[b=2]| & & &|[b=7]|\\
 &  |[b=3]|& & |[b=4]| &  & &|[b=8]| &\\
   |[b=5]|& & |[b=6]| &  & & &|[b=9]| &\\
};
\path[-stealth] foreach \X/\Y in {1/3,3/5,3/6,1/4,2/4} {(b-\X) edge (b-\Y)};
\draw (b-8) -- (b-9);
\path (l-7.east); %<- for the bounding box
\end{tikzpicture}
\end{document}

在此处输入图片描述

1这并不排除手动添加第二个父级的可能性。

相关内容