工作于排版具有不连续成分的依存语法树我尝试设置一个具有两个不连续点的图。
第一个图满足我的要求。它nacc
和另一个 N 按tier
规范对齐,并且由于第二个 N 是 V-ptr 的子级,因此它低于 V-ptr。在第二个图中,对应的 N 从ich
技术上讲是最顶层 V 的子级,因此它不低于 V-ptr。有没有办法(没有幻影)来获取两个 N 或 V-ptr 下面的层?
\documentclass{article}
\usepackage{forest}
\forestset{
dg edges/.style={for tree={parent anchor=south, child anchor=north,align=center,base=bottom,where n children=0{tier=word,edge=dotted,calign with current edge}{}}},
}
\begin{document}
\begin{forest}
dg edges
[V
[ N,name=nacc,no edge,tier=mytier, [wen\\who] ]
[glaubst\\believes]
[N [du\\you] ]
[Subjunction
[dass\\that]
[V-fin
[V-prt, name=vprt
[N,tier=mytier, [ich\\I ] ]
[gesehen\\seen] ]
[habe\\have] ] ] ]
\draw (vprt.south)--(nacc.north);
\end{forest}
\begin{forest}
dg edges
[V
[N,name=nacc,no edge,tier=mytier, [wen\\who] ]
[glaubst\\believes]
[N,name=nich,no edge,tier=mytier, [ich\\I ] ]
[N [du\\you] ]
[Subjunction
[dass\\that]
[V-fin
[V-prt, name=vprt
[gesehen\\seen] ]
[habe\\have] ] ] ]
\draw (vprt.south)--(nacc.north);
\draw (vprt.south)--(nich.north);
\end{forest}
\end{document}
编辑:实现我想要的目标的一种方法是使用幻影女儿V-ptr
并将其与层级结合起来:
\documentclass{article}
\usepackage{forest}
\forestset{
dg edges/.style={for tree={parent anchor=south, child anchor=north,align=center,base=bottom,where n children=0{tier=word,edge=dotted,calign with current edge}{}}},
}
\begin{document}
\begin{forest}
dg edges
[V
[N,name=nacc,no edge,tier=mytier, [wen\\who] ]
[glaubst\\believes]
[N,name=nich,no edge,tier=mytier, [ich\\I ] ]
[N [du\\you] ]
[Subjunction
[dass\\that]
[V-fin
[V-prt, name=vprt
[down,phantom,tier=mytier]
[gesehen\\seen] ]
[habe\\have] ] ] ]
\draw (vprt.south)--(nacc.north);
\draw (vprt.south)--(nich.north);
\end{forest}
\end{document}
但我不知为何想到可以指定节点应该位于其他节点之下,即使用tikz
语法来直接表达不在树中的支配关系。
答案1
这个解决方案使用了一个phantom
节点,我知道 Stefan 不想要它,但如果不存在节点,我不知道如何将tier
第一级子节点与第五级子节点对齐 ( )。第一个例子有一个引用节点,但第二个例子中却没有。当然,我愿意接受更好的解决方案。
\documentclass{article}
\usepackage{forest}
\forestset{
dg edges/.style={for tree={parent anchor=south, child anchor=north,align=center,base=bottom,where n children=0{tier=word,edge=dotted,calign with current edge}{}}},
}
\begin{document}
\begin{forest}
dg edges
[V
[N,name=nacc,no edge,tier=mytier, [wen\\who] ]
[glaubst\\believes]
[N,name=nich,no edge,tier=mytier, [ich\\I ] ]
[N [du\\you] ]
[Subjunction
[dass\\that]
[V-fin
[V-prt, name=vprt
[A, phantom, tier=mytier, [gesehen\\seen, name=seen] ]]
[habe\\have] ] ] ]
\draw[dotted] (vprt.south)--(seen.north);
\draw (vprt.south)--(nacc.north);
\draw (vprt.south)--(nich.north);
\end{forest}
\end{document}
第二版本
虽然使用以前的版本,结果符合预期,但将phantom
节点放置为父节点会带来一些不便。如果节点是 兄弟节点,尽管与节点对齐,[gesehen\\seen]
则更容易。幻影节点不占用垂直空间,并且不需要将边缘重新绘制到。该解决方案由 Stefan Müller 提出。phantom
[gesehen\\seen]'s
N
[gesehen\\seen]
\begin{forest}
dg edges
[V
[N,name=nacc,no edge,tier=mytier, [wen\\who] ]
[glaubst\\believes]
[N,name=nich,no edge,tier=mytier, [ich\\I ] ]
[N [du\\you] ]
[Subjunction
[dass\\that]
[V-fin
[V-prt, name=vprt
[A, phantom, tier=mytier]
[gesehen\\seen] ]
[habe\\have] ] ] ]
\draw (vprt.south)--(nacc.north);
\draw (vprt.south)--(nich.north);
\end{forest}
这两个代码的结果是:
答案2
我不太确定我理解了这个问题。也就是说,我不确定你为什么要避免,phantom
那么可接受的答案的标准是什么。但是,以下内容确实避免了phantom
。它是否做了你认为同样令人讨厌的事情,我不太确定 ;)。
\documentclass[border=5pt]{standalone}
\usepackage{forest}
\forestset{
dg edges/.style={for tree={parent anchor=south, child anchor=north,align=center,base=bottom,where n children=0{tier=word,edge=dotted,calign with current edge}{}}},
}
\begin{document}
\begin{forest}
dg edges
[V
[N,name=nacc,no edge,tier=mytier, l*=5.5, [wen\\who] ]
[glaubst\\believes]
[N,name=nich,no edge,tier=mytier, [ich\\I ] ]
[N [du\\you] ]
[Subjunction
[dass\\that]
[V-fin
[V-prt, name=vprt
[gesehen\\seen]
]
[habe\\have]
]
]
]
\draw (vprt.south)--(nacc.north);
\draw (vprt.south)--(nich.north);
\end{forest}
\end{document}