在 Tikz 中绘制 AND/OR 树

在 Tikz 中绘制 AND/OR 树

有没有简单的方法来实现这种类型的图表?

在此处输入图片描述

显然比这整洁得多...但重要的特征是 P 的两个子项之间的连接。

答案1

该解决方案将强大的forest软件包与anglesPGF/TikZ 库一起使用。

定义了一种特殊样式,tree angle标记子节点和下一个同级节点之间的角度。

通过这种组合,树本身可以非常简洁地指定:

\documentclass[tikz,border=5pt]{standalone}
\usepackage{forest}
\usetikzlibrary{arrows.meta, angles}
\begin{document}
\forestset{
  tree angle/.style={
    tikz={\path () coordinate (A) -- (!u) coordinate (B) -- (!n) coordinate (C) pic [draw] {angle};}
  }
}
\begin{forest}
  for tree={
    draw,
    circle,
    edge={-{Stealth[]}},
    l sep+=7.5pt
  },
  [P
  [Q, tree angle
      [T, tree angle]
      [U]
    ]
    [R]
    [S
      [V]
      [W, tree angle]
      [X]
    ]
  ]
\end{forest}
\end{document}

森林里的树角

答案2

您应该学习 pgfmanual(我的是 v2.10)的trees库(第 18 节“使树生长”、“53.树库”)以及如何将节点放置在直线或曲线上(第 16.8 和 16.9 节)。

\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{trees}
\begin{document}
\begin{tikzpicture}[level distance=1.5cm, grow=down,
    every node/.style={draw, circle, thin},
    edge from parent/.style={-latex, thick, draw}
]
\node (P) {P}
    child {node (Q) {Q}
        child {node (T) {T}}
        child {node (U) {U}}
    }
    child {node (R) {R}}
    child {node (S) {S}};

\path (P) -- coordinate[midway] (PQ) (Q);
\path (P) -- coordinate[midway] (PR) (R);

\draw (PQ) to[bend right=22] (PR);
\end{tikzpicture}
\end{document}

代码输出

相关内容