在图中的节点周围绘制边界框

在图中的节点周围绘制边界框

我正在尝试在图中两个节点周围建立一个云,如下所示:

围绕两个节点的云形图

然而,云永远不会围绕节点,而只会出现在图表的右侧。是否有不同的语法来设置一组节点的样式或在图表中命名它们。我使用了该name=选项,尽管以前我总是可以使用括号中的名称。

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{graphs, graphdrawing, fit, shapes.callouts}
\usegdlibrary{layered}

\begin{document}
\begin{tikzpicture}[
layered layout,
grow'=right,
level sep=.5cm,
sibling sep=.75cm,
nodes={draw, circle},
]
\graph {
  S[rectangle, inner sep=3mm]
  -- A
  -- { B[name=B, nudge down=4mm] -- C[name=C, nudge up=4mm] }
  -- D
  -- { E -- F, G -- H }
  -- I
  -- J
  -- K
  -- Z[rectangle, inner sep=3mm]
};
\node[draw, cloud, fit=(B)(C)] {uvw};
\end{tikzpicture}
\end{document}

答案1

根据手册第 282 页,该name键指定了 (子) 图的名称,而不是节点的名称。但是,那里描述的方法可以正常工作。

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{graphs, graphdrawing, fit, shapes.callouts}
\usegdlibrary{layered}

\begin{document}
\begin{tikzpicture}
\begin{scope}[
layered layout,
grow'=right,
level sep=.5cm,
sibling sep=.75cm,
nodes={draw, circle},
]
\graph[]  {
  S[rectangle, inner sep=3mm]
  -- A
  -- {[name separator=-,name=grph] B[nudge down=4mm] -- C[nudge up=4mm] }
  -- D
  -- { E -- F, G -- H }
  -- I
  -- J
  -- K
  -- Z[rectangle, inner sep=3mm]
};
\end{scope}
\node[draw, cloud,fit=(grph-B)(grph-C)] {};
\end{tikzpicture}
\end{document}

在此处输入图片描述

只要您的节点具有唯一的名称,即您不使用B两次,您就可以name完全删除该密钥。

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{graphs, graphdrawing, fit, shapes.callouts}
\usegdlibrary{layered}

\begin{document}
\begin{tikzpicture}
\begin{scope}[
layered layout,
grow'=right,
level sep=.5cm,
sibling sep=.75cm,
nodes={draw, circle},
]
\graph[]  {
  S[rectangle, inner sep=3mm]
  -- A
  -- { B[nudge down=4mm] -- C[nudge up=4mm] }
  -- D
  -- { E -- F, G -- H }
  -- I
  -- J
  -- K
  -- Z[rectangle, inner sep=3mm]
};
\end{scope}
\node[draw, cloud,fit=(B)(C)] {};
\end{tikzpicture}
\end{document}

答案2

实际上,我是在看到@Schrödinger's cat 的回答后才发现这个问题的。问题实际上是layered layout在整个环境而不是仅在图形上设置选项。这会以某种方式覆盖正常定位并将云放在右侧。移动它可以解决问题:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{graphs, graphdrawing, fit, shapes.callouts}
\usegdlibrary{layered}

\begin{document}
\begin{tikzpicture}[
  grow'=right,
  level sep=.5cm,
  sibling sep=.75cm,
  nodes={draw, circle},
]
\graph[layered layout] {
  S[rectangle, inner sep=3mm]
  -- A
  -- B[nudge down=4mm]
  -- C[nudge up=4mm]
  -- D
  -- { E -- F, G -- H }
  -- I
  -- J
  -- K
  -- Z[rectangle, inner sep=3mm]
};
\node[draw, cloud, fit=(B)(C)] {};
\end{tikzpicture}
\end{document}

相关内容