继森林重新指定分支位置 2,如果有奇数个节点,我希望中间的节点位于中心。
手册(p71)说使用这个:
\begin{forest}
[manual correction of B
[A[1][2][3][4]]
[B,before computing xy={s/.average={s}{siblings}}]
[C[1][2][3][4]]
]
\end{forest}
这使得 B 很好地居中。
但是,如果我更改锚点,使边从节点的东点发出,它仍会使用节点的中心点进行计算。我该如何调整,使锚点成为节点的新中心。
\documentclass[10pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage{forest}
\begin{document}
\begin{forest}
[top, s sep=1cm,child anchor=90
[A,child anchor=90]
[B,parent anchor =south,before computing xy={s/.average={s}{siblings}}]
[{CDDDDDDDD}, parent anchor=-10
[A]
[B]
[C,before computing xy={s/.average={s}{siblings}}]
[D]
[E]
]
]
\end{forest}
\end{document}
即底行中的 C 垂直位于通向 ABCDE 的边的起点下方,而不是垂直位于父节点的中间下方?可能需要根据父节点内容的长度进行一些水平移动。
答案1
你想要这样的东西吗?
如果是这样,我建议使用我用来对齐中间子节点的样式(如果有的话)。如果这样做,您还可以通过消除获取平均值等的需要来大大简化现有代码,并且可以删除一些(但不是全部)锚点规范。
child anchor
请注意,指定根节点几乎没有任何意义。有时是有意义的,但这种情况很少见。您可能想要的是parent anchor
这里。
\documentclass[border=10pt]{standalone}
\usepackage[utf8]{inputenc}
\usepackage{forest}
\forestset{
align middle child/.style={
before typesetting nodes={
if={
> Ow+P {n children}{isodd(##1)}
}{
calign child/.process={
Ow+n {n children}{(##1+1)/2}
},
calign=child edge,
}{},
},
},
align middle children/.style={
for tree={align middle child},
},
}
\begin{document}
\begin{forest}
align middle children
[top, s sep=1cm
[A, child anchor=90]
[B]
[{CDDDDDDDD}, parent anchor=-10
[A]
[B]
[C]
[D]
[E]
]
]
\end{forest}
\end{document}