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}