TikZ/pgf:使用 `graphdrawing` 库时,如果我使用“简单”语法,如何在 TikZ 范围周围绘制一个圆圈?

TikZ/pgf:使用 `graphdrawing` 库时,如果我使用“简单”语法,如何在 TikZ 范围周围绘制一个圆圈?

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}

相关内容