我想要拥有forest
允许非常有限的多重支配的树,如下图所示:
基本思想是终端节点A位于两个X节点之间并受其支配。
这是通过以下黑客方式生成的:我制作了一个带有幻影中间边缘的三元分支树,以便终端是中间分支的终端节点,然后手动绘制多主分支。这很好用,但我想知道是否有一种不那么黑客的方式来做到这一点。
\documentclass{article}
\usepackage[linguistics]{forest}
\forestset{multi/.style={before typesetting nodes={
prepend={[X,name=X1,tier=x]},
append={[X,name=X2,tier=x]}}}}
\begin{document}
\begin{forest}
[A,s sep=0pt,multi
[X,phantom, tier=x [a,tier=s,name=X ]]
]
\draw (X1.south) -- (X.north);
\draw (X2.south) -- (X.north);
\end{forest}
\end{document}
答案1
\documentclass[border=9pt]{standalone}
\usepackage[linguistics]{forest}
\forestset{
declare toks={multi name}{},
multi dom/.style={
if={>On={level}{0}}{}{%
delay/.process={OOw2}{name}{multi name}{
insert before={[##2,tier=##1]},
insert after={[##2,tier=##1]},
!u.s sep'=0pt,
},
before typesetting nodes={
replace by/.process={OOw2}{name}{multi name}{[##2, phantom, before drawing tree={content=, no edge, phantom=0, typeset node}, tier=##1, delay={append=##1}]}
},
edge path'={(!up.parent anchor) -- (.child anchor) -- (!un.parent anchor)},
},
},
multi/.style={
multi name=#1,
multi dom,
},
}
\begin{document}
\begin{forest}
[A
[a,multi=X ]
]
\end{forest}
\begin{forest}
[A
[a,multi=X ]
[b [c,multi=C] ]
[f [g,multi=H] ]
]
\end{forest}
\begin{forest}
for tree={multi name=J}
[A
[a,multi dom ]
[b [c,multi=C] ]
[f [g,multi dom] ]
]
\end{forest}
\begin{forest}
[C [A
[a, multi=C ]
]
[B [c,multi=V ]]
]
\end{forest}
\end{document}