使用 tikz/forest 绘制复杂的依赖关系图

使用 tikz/forest 绘制复杂的依赖关系图

tikz我想用/绘制以下单词语法图forest在此处输入图片描述

我非常喜欢forest这种图表,也希望为它设计一种风格,但我认为这对于这种类型的图表来说并不简单/不可能,因为树节点被分成几个实例(例如:子节点、子节点'和子节点'')。所以我会使用一个表格,将文本放入其中的框中,并通过显式命令绘制连接器。或者有没有更“时尚”的方式来做到这一点?

答案1

一个想法是使用具有空内容的节点来标记拆分节点。更准确地说,stylewg被定义为用其父节点的内容填充空节点的内容。此外,它还会将 附加'到父节点内容中。

为了使依赖箭头的绘制更容易,节点根据其内容进行命名。

\documentclass{article}
\usepackage{forest}
\usetikzlibrary{arrows.meta}
\forestset{
  wg/.style={
    for tree={
      no edge,
      draw,
      outer ysep=1pt,
    },
    copy label/.style={
      for children={
        if content={}{
            content/.pgfmath={content("!u")},
            calign with current,
            edge={draw,{-Triangle[open,reversed]}},
            copy label,
            !u.content/.pgfmath={content},
            !u.content+=',
        }{
          copy label,
        }
      }
    },
    delay={
      copy label,
      for tree={name/.pgfmath={content}},
    },
    for tree={content format={\strut\forestoption{content}}},
    where n children={0}{
      tier=word,
    }{},
  },
}
\tikzset{deparrow/.style={-Latex,blue}}
\begin{document}
\begin{forest}
  wg
  [were
    [children
      [
        [small]
        []
      ]
    ]
    [
      []
    ]
    [playing
      [
        []
        [outside]
      ]
    ]
  ]
  \draw[deparrow] (were'') to[out=west, in=north] (children'');
  \draw[deparrow] (children') to[out=west, in=north] (small);
  \draw[deparrow] (were') to[out=60, in=120] (playing'');
  \draw[deparrow] (playing'') to[out=220, in=east] (children');
  \draw[deparrow] (playing') to[out=east, in=north] (outside);
\end{forest}
\end{document}

相关内容