我有这个:
\documentclass{article}
\usepackage{forest,tikz}
\forestset{
ptree/.style={
for tree={
grow'=east, %grow' reverses direction of reading...for horizontal to the right, use it
l=2.5cm, %length of the branches
%s sep=1em, %spreads out ends of branches
parent anchor=children,
child anchor=west,
anchor=west, %child anchor west w/ anchor west lines up words on left edge
% calign=first %to match tree tab of Workbooks
},
before typesetting nodes={
for tree={
split option={content}{:}{content, my edge label},
},
},
},
my edge label/.style={
if={n_children("!u")>2
}{edge label={node [pos=.55, above=2ex, font=\footnotesize,draw,anchor=center] {#1} }%true
}{%false
if={ > O_= {n'}{1} }
{ edge label={node [pos=.55, below=.5ex, font=\footnotesize] {#1} }
}{
edge label={node [pos=.55, above=.5ex, font=\footnotesize] {#1} }
},
}%end false
}%end style
}%end forestset
\begin{document}
\pagestyle{empty}
Looks good with decimals above:
\begin{forest}
ptree
[[W:.5[W][L]][L:.5[W][L]]]
\end{forest}
\begin{forest}
ptree
[[A:0.1[Def:.3][Good:.7]]
[B:0.3[Def:.03][Good:.97]]
[C:0.6[Def:.02][Good:.98]]]
\end{forest}
\end{document}
使用的代码来自使用带边标签的森林的水平概率树
对于两个分支来说,太惊人了!(第一个森林)对于三个分支来说,中间分支上的 .3 设置得太高了(第二个森林)。
我希望边缘标签与线条的正交距离相同且不倾斜,实际上数字总是位于线的上方就可以了。我还希望它们都位于相同的水平位置(因此 pos=.55),因此“auto”不起作用(因为它会改变水平对齐方式)。
我对森林非常陌生,我知道我可以用 tikz 手动完成这项工作。我希望有人知道一个简单的解决方案,让每个级别的标签在水平方向上处于相同的位置,而垂直位置由文本最近点到它所标记的行之间的正交距离决定。
感谢您的任何帮助!
编辑:是否有某种方法可以控制边缘标签中的 n 个子节点或 n_children,以使其在 3 个或更多分支上方,并且按原样显示 2 个分支?(我在森林中的“控制”上遇到了语法问题。)
编辑:——我解决了这个问题... if={n_children("!u")>2} 作为条件。
我仍然想知道如何保持正交距离相同,因为当倾斜分支的标签看起来不错时,中间分支的边缘标签似乎太高。