TikZ/pgf 手册中的内容:
在第 27.10 节第 391 页中,该手册首先以“简单”语法示例的形式提供了一个示例,说明如何设置范围以及它们可能有何用途:
\tikz [spring layout]
{
\begin{scope}[tree layout]
\node (a) {a};
\node (b) {b};
\node (c) {c};
\draw (a) edge (b) edge (c);
\end{scope}
\begin{scope}[tree layout]
\node (1) {1};
\node (2) {2};
\draw (1) edge (2);
\end{scope}
\draw (a) edge (1);
}
可以使用不同的算法来绘制整个图形的不同“子布局”。太好了。然后我尝试使用第 391 页本身提供的语法来指定一些子布局选项,以便在子布局周围绘制一个圆圈。
然而,什么也没发生。一切都像往常一样编译,一切看起来也和平常一样。
妇女权利委员会:
\documentclass{standalone}
%======================================
\usepackage{tikz}
\usetikzlibrary{graphdrawing}
\usetikzlibrary{arrows}
\usetikzlibrary{graphs}
\usetikzlibrary{decorations.pathmorphing}
\usegdlibrary{force, layered, trees}
%======================================
\begin{document}
\tikz [rounded corners, spring layout, node distance=20mm]
{
\begin{scope}
\node (a) {a};
\end{scope}
// [draw, circle]
{
\begin{scope}[tree layout, node distance=5mm]
\node (b) {b};
\node (c) {c};
\node (d) {d};
\draw
(b) edge[->] (c)
(b) edge[->] (d)
(c) edge[->] (d);
\end{scope}
}
\draw
(a) edge[->] (b);
}
\end{document}
那么,在由子布局组成的“节点”周围绘制圆圈的正确方法是什么?
答案1
您可以使用fit
库在子布局的节点周围绘制一个圆圈。但在这种情况下,您必须使用布局范围。
\documentclass[tikz,margin=5pt]{standalone}
\usetikzlibrary{graphs,graphdrawing,arrows}
\usetikzlibrary{fit}
\usegdlibrary{force, trees}
\begin{document}
\tikz [>=latex']{
\begin{scope}[spring layout, node distance=20mm]
\node (a) {a};
//{
\begin{scope}[tree layout, node distance=5mm]
\node (b) {b};
\node (c) {c};
\node (d) {d};
\draw
(b) edge[->] (c)
(b) edge[->] (d)
(c) edge[->] (d);
\end{scope}
\draw(a) edge[->] (b);
}
\end{scope}
\node[circle,draw,fit=(b) (c) (d)]{};
}
\end{document}
或者得到相同的结果:
\documentclass[tikz,margin=5pt]{standalone}
\usetikzlibrary{graphs,graphdrawing,arrows}
\usegdlibrary{force,trees}
\begin{document}
\tikz[spring layout, node distance=20mm,>=latex']
\graph{
a,
mytree[subgraph text none,draw,circle]//[tree layout]{b->{c,d}, c->d},
a->b
};
\end{document}