完整代码

完整代码

似乎没有办法画导演边使用新的(?)树形图布局和子语法。

\documentclass{standalone}

\usepackage{tikz}
\usepackage{lmodern}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{graphs}
\usetikzlibrary{graphdrawing}
\usegdlibrary{trees}

\tikzset{
  ->, % doesn't work
  nodes={draw, circle, minimum size = .5cm},
  >=Stealth[], % doesn't work
}

\begin{document}

\tikz[tree layout,
edge from parent/.style={draw,-latex}, % doesn't work
-> % doesn't work
] {
  \node {$\land$}
  child {
    node {$\lnot$}
    child {
      node {$a$}
    }
  }
  child {
    node {$\rightarrow$}
    child {
      node {$b$}
    }
    child {
      node {$c$}
    }
  };
}

\end{document}

证明我是错的!

在此处输入图片描述

编辑:我认为我确实使用了新的图形布局引擎,因为使用常规tikzpicture环境,树看起来像这样:

在此处输入图片描述

答案1

如果您使用图语法,则有向边在树规范本身中指定。例如,

{ r -> a }

r表示从到 的有向边a

图形绘制库的全部要点在于您指定关系并让 Lua 找出详细的结构。

使用这种语法,有向边没有问题。而且,多亏了Gonzalo Medina 的评论,现在我也能够将数学内容放入节点中。

例如,使用图形语法,我可以生成

图形

使用此规范:

% modified from Gonzalo Medina's comment (below)
\tikz [tree layout] \graph [math nodes, nodes={draw, circle, minimum size = .5cm}, sibling sep=0pt]
{aaaa [as=$\land$] -> {aa [as=$\lnot$] -> a , aaa [as=$\rightarrow$] -> {b , c}} };

如果你的图表都是树木即只有一个根,您可能希望使用专门的树绘制包,例如forestqtreetikz-qtree。如果它们不是全部都是树,您仍然可以这样做,但只能通过欺骗包认为您真的在画树,因此会变得更加复杂。

例如,对于你的树,forest规范如下所示:

\begin{forest}
  for tree={
    edge = {->},
    circle,
    minimum size=5mm,
    inner sep=0pt,
    draw,
    math content,
    tier/.wrap pgfmath arg={tier #1}{level()},
    anchor=center
  },
  [\land
    [\lnot
      [a]
    ]
    [\rightarrow
      [b]
      [c]
    ]
  ]
\end{forest}

树

这里在节点中包含数学知识更加直接一些,但显然您必须指定您想要的树的精确结构 - 您不能像使用图形绘制库那样仅仅指定关系。

完整代码

\documentclass[tikz,multi,border=10pt]{standalone}
\usetikzlibrary{arrows.meta,graphs,graphdrawing}
\usegdlibrary{trees}
\usepackage{forest}
\tikzset{
  >=Stealth[], % does work
}

\begin{document}

% modified from 406 of manual, and using Gonzalo Medina's comment (below)
\tikz [tree layout] \graph [math nodes, nodes={draw, circle, minimum size = .5cm}, sibling sep=0pt]
{aaaa [as=$\land$] -> {aa [as=$\lnot$] -> a , aaa [as=$\rightarrow$] -> {b , c}} };

\begin{forest}
  for tree={
    edge = {->},
    circle,
    minimum size=5mm,
    inner sep=0pt,
    draw,
    math content,
    tier/.wrap pgfmath arg={tier #1}{level()},
    anchor=center
  },
  [\land
    [\lnot
      [a]
    ]
    [\rightarrow
      [b]
      [c]
    ]
  ]
\end{forest}

\end{document}

编辑

如果您愿意坚持使用树的旧语法,那么您可以这样做,只要您不以有问题的方式将其与图形绘制环境混合即可。

\documentclass[tikz,border=10pt]{standalone}
\usetikzlibrary{arrows.meta}
\tikzset{
  my tree/.style={
    ->,
    nodes={draw, circle, minimum size = .5cm},
    >=Stealth[],
  },
}
\begin{document}
\tikz [ my tree ]
  \node {$\land$}
  child {
    node {$\lnot$}
    child {
      node {$a$}
    }
  }
  child {
    node {$\rightarrow$}
    child {
      node {$b$}
    }
    child {
      node {$c$}
    }
  };
\end{document}

我没有看到屏幕截图中显示的重叠节点问题只要我不加载graphdrawingTikZ 库

旧树语法

相关内容