tikz-qtree
我已经就()问过这个问题通过箭头将 tikz-qtree 中的文本与其他文本连接起来),但也许有更好的方法来做到这一点forest
。
我有以下树:
\documentclass{article}
\usepackage{forest}
\forestset{
sn edges/.style={for tree={parent anchor=south, child anchor=north,align=center,base=bottom,where n children=0{tier=word}{}}},
}
\begin{document}
\begin{forest}
sn edges
[V{[\textit{fin,} SUBCAT $<>$]}
[1 NP{[\textit{nom}]}
[er]]
[V{[\textit{fin}, SUBCAT $<1>$]}
[2 NP{[\textit{acc}]}
[das Buch]]
[V{[\textit{fin}, SUBCAT $<1,2>$]}
[3 NP{[\textit{dat}]}
[dem Mann]]
[V{[\textit{fin}, SUBCAT $<1,2,3>$]}
[gibt]]]]]
\end{forest}
\end{document}
我想用双箭头连接 的实例fin
。最好的方法是\node
围绕各种 进行一些声明fin
并连接这些节点。但这不知何故不起作用。有办法吗?
答案1
您只需设置名称,因为它们是真正的节点:
\documentclass{article}
\usepackage{forest}
\forestset{
sn edges/.style={for tree={parent anchor=south, child anchor=north,align=center,base=bottom,where n children=0{tier=word}{}}},
}
\begin{document}
\begin{forest}
sn edges
[V{[\textit{fin,} SUBCAT $<>$]}
[1 NP{[\textit{nom}]}
[er]]
[V{[\textit{fin}, SUBCAT $<1>$]},name=fin1 %new code
[2 NP{[\textit{acc}]}
[das Buch]]
[V{[\textit{fin}, SUBCAT $<1,2>$]},name=fin2 %new code
[3 NP{[\textit{dat}]}
[dem Mann]]
[V{[\textit{fin}, SUBCAT $<1,2,3>$]},name=fin3 %new code
[gibt]]]]]
\draw[<->] ($(fin1.south west)+(1,.1)$) -- ($(fin2.north west)+(.5,-.1)$);
\draw[<->] ($(fin2.south west)+(1,.1)$) -- ($(fin3.north west)+(.5,-.1)$);
\end{forest}
\end{document}
我不确定您想要连接什么,您可以使用标准节点锚点来移动箭头或弯曲箭头等。
编辑:为了对箭头的起点和终点进行更细粒度的控制,可以使用 tikzmarks:
\documentclass{article}
\usepackage{forest}
\usetikzlibrary{tikzmark}
\forestset{
sn edges/.style={for tree={parent anchor=south, child anchor=north,align=center,base=bottom,where n children=0{tier=word}{}}},
}
\begin{document}
\begin{forest}
sn edges
[V{[\textit{fin,} SUBCAT $<>$]}
[1 NP{[\textit{nom}]}
[er]]
[V{[\textit{fin}, SUBCAT $<1\tikzmark{m1}>$]},name=fin1 %new code
[2 NP{[\textit{acc}]}
[das Buch]]
[V{[\textit{fin}, SUBCAT $<\tikzmark{m2}1,2>$]},name=fin2 %new code
[3 NP{[\textit{dat}]}
[dem Mann]]
[V{[\textit{fin}, SUBCAT $<1,2,3>$]},name=fin3 %new code
[gibt]]]]]
\draw[<->] ($(fin1.south west)+(1,.1)$) -- ($(fin2.north west)+(.5,-.1)$);
\draw[<->] ($(fin2.south west)+(1,.1)$) -- ($(fin3.north west)+(.5,-.1)$);
\end{forest}
\begin{tikzpicture}[overlay,remember picture]
\draw[<->](pic cs:m1)--(pic cs:m2);
\end{tikzpicture}
\end{document}