答案1
第一个警告
请注意,我认为我不应该回答“为我做”,尽管我和其他人有时也会回答。不过,我喜欢树,毕竟这是你的第一个问题。
然而,因为我回答的是代做独自 为了我,只有在我觉得特别有吸引力的情况下,我才会接受调整、改进、更正和解释的请求。通常,我对代做问题的回答都是“按原样”提供的。如果它回答了你的问题,那你很幸运,有人帮你做了工作。如果没有,那就太糟了。我只是为自己回答,所以如果它符合我的目的,那就没关系了。
第二个警告
我回答这个问题是为了练习使用最新版本的 Forest。因此,代码存在的理由是利用 2.1 版中新增的功能。因此,代码不适用于早期版本的 Forest。如果您希望使用它,您必须更新您的 TeX 安装并确保它提供 2.1 版。或者,您可以查阅您拥有的版本的手册,并使用早期版本中也支持的等效代码替换新代码。
如果这不是一件需要我亲自去做的事情,我会尝试响应与 Forest 早期版本兼容的版本的请求。但是,它确实如此,所以我可能不会这么做。
[根据 Sašo 的建议编辑于http://chat.stackexchange.com/transcript/message/34121933#34121933,http://chat.stackexchange.com/transcript/message/34125683#34125683和http://chat.stackexchange.com/transcript/message/34150084#34150084,尽管并不总是符合它们。
\documentclass[border=10pt,multi,tikz]{standalone}
\usepackage{forest}
\begin{document}
\forestset{
declare toks={iteration}{},
declare boolean={is auto iteration}{0},
}
\begin{forest}
label my edge/.style n args=3{% based on Sašo's suggestion: http://chat.stackexchange.com/transcript/message/34121933#34121933
edge label={node [font=\scriptsize, #3] {$\frac{#1}{#2}$}}
},
/tikz/put left/.style={anchor=north east, pos=.6, left, xshift=-3.5pt},
/tikz/put below/.style={midway, below},
for tree={
math content,
grow'=0,
% Sašo: http://chat.stackexchange.com/transcript/message/34121933#34121933
calign primary angle=0,
calign secondary angle=30,
calign=fixed edge angles,
delay={
if iteration={}{iteration/.option=level, is auto iteration}{},
},
},
before typesetting nodes={% edited in light of Sašo's suggestions: http://chat.stackexchange.com/transcript/message/34125683#34125683 (though not entirely in accordance with them)
for tree={
if n=1{
if content={}{
content/.process={Ow}{iteration}{\strut w_{#1}},
anchor=mid,
if is auto iteration={
if iteration=1{
label my edge={2}{n}{put left},
}{
label my edge/.process={Ow+nw}{iteration}{#1-1}{{2}{n-#1}{put left}},
if phantom={}{
!u.label my edge/.process={OW+nw2}{iteration}{#1-2}{{n-#1}{n-#2}{put below}},
},
},
}{
label my edge/.process={Ow}{iteration}{{2}{n-#1}{put left}},
!u.label my edge/.process={Ow}{iteration}{{n-#1}{n-#1-2}{put below}},
},
}{},
}{
coordinate,
}
}
},
!rLs.before computing xy={% Sašo: http://chat.stackexchange.com/transcript/message/34150084#34150084
l/.option=!r1.l,
s/.option=!r1.s,
},
[
[]
[
[]
[
[]
[
[]
[
[]
[, edge={dotted}
[, phantom]
[, edge={dotted}
[, iteration=p]
[, phantom]
]
]
]
]
]
]
]
\end{forest}
\end{document}