我已经为此寻找了几个小时的例子,但不幸的是我找不到一个可以用的例子,很抱歉造成您的不便...在下面的例子中,我希望父级$v_1$
和第二个子级之间有垂直对齐$v_4$
,因为它稍微向右,但这个问题对于几个子级和他们的父级来说更为普遍,我希望它具有一定的“对称性”,这是我的例子。
\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath, forest, tikz}
\begin{document}
\begin{forest}
for tree={anchor=center},
[$v_1$
[$v_2$
[$v_3$[\scriptsize $3$, edge=densely dotted, l=.75cm]]
[$v_4$[\scriptsize $2$, edge=densely dotted, l=.75cm]]
[$v_6$[\scriptsize $2$, edge=densely dotted, l=.75cm]]
]
[$v_4$
[$v_2$[\scriptsize $2$, edge=densely dotted, l=.75cm]]
[$v_5$[\scriptsize $1$, edge=densely dotted, l=.75cm]]
[$v_7$[\scriptsize $2$, edge=densely dotted, l=.75cm]]
]
[$v_5$
[$v_3$[\scriptsize $3$, edge=densely dotted, l=.75cm]]
[$v_4$[\scriptsize $2$, edge=densely dotted, l=.75cm]]
]
]
\end{forest}
\end{document}
答案1
该包具有您想要在根上使用的密钥forest
:calign
calign child
[v_1, calign=child, calign child=2 …]
如果您有三个以上的孩子,calign child
则需要进行更改或自动评估forest
(例如,calign child=int(n_children/2)+1
孩子数量为偶数)。
我擅自使用它math content
来制作您的树,并将叶子的选项放入一种自动样式中,该样式仅在节点没有子节点时才应用。
代码
\documentclass[12pt,tikz]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={
math content,
where={n_children==0}{font=\scriptsize, edge=densely dotted, l=.75cm}{}
}
[v_1, calign=child, calign child=2
[v_2
[v_3[3]]
[v_4[2]]
[v_6[2]]
]
[v_4
[v_2[2]]
[v_5[1]]
[v_7[2]]
]
[v_5
[v_3[3]]
[v_4[2]]
]
]
\end{forest}
\end{document}
输出
答案2
不确定这是否正是您想要的,但您可以通过使用和计算平均值来强制位于和v_4
的中点。潜在的不良后果是后续子代的间距不均匀。v_2
v_5
before computing xy
\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath, forest, tikz}
\begin{document}
\begin{forest}
for tree={anchor=center},
[$v_1$
[$v_2$
[$v_3$[\scriptsize $3$, edge=densely dotted, l=.75cm]]
[$v_4$[\scriptsize $2$, edge=densely dotted, l=.75cm]]
[$v_6$[\scriptsize $2$, edge=densely dotted, l=.75cm]]
]
[$v_4$, before computing xy={s/.average={s}{siblings}}
[$v_2$[\scriptsize $2$, edge=densely dotted, l=.75cm]]
[$v_5$[\scriptsize $1$, edge=densely dotted, l=.75cm]]
[$v_7$[\scriptsize $2$, edge=densely dotted, l=.75cm]]
]
[$v_5$
[$v_3$[\scriptsize $3$, edge=densely dotted, l=.75cm]]
[$v_4$[\scriptsize $2$, edge=densely dotted, l=.75cm]]
]
]
\end{forest}
\end{document}