我正在尝试在图中两个节点周围建立一个云,如下所示:
然而,云永远不会围绕节点,而只会出现在图表的右侧。是否有不同的语法来设置一组节点的样式或在图表中命名它们。我使用了该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}