我有一棵树,我需要让它看起来无限。我需要在每个树枝的末端画一个省略号。如果可能的话,我希望省略号是垂直方向的(没什么大不了的)
\documentclass[paper=a4, fontsize=10pt]{article} % A4 paper and 11pt font size
\usepackage{forest}
\begin{document}
\begin{center}
\begin{forest}
for tree={
if n=1{edge label={node [midway, left, anchor=south] {0} } }{edge label={node [midway, right, anchor=south] {1} } },
draw,
circle,
if level=0{}{!u.s sep/.wrap pgfmath arg={#1}{35mm/(level())}},
anchor=mid,
}
[6
[2
[2, edge label={node [midway, left] {1} }
[1
[1, edge label={node [midway, left] {1} }
[1, edge label={node [midway, left] {1} }
[1, edge label={node [midway, left] {1} } ]
]
]
]
[1
[1, edge label={node [midway, left] {1} }
[1, edge label={node [midway, left] {0} }
[1, edge label={node [midway, left] {1} }
[..., draw=none]
]
]
]
]
]
]
]
\end{forest}
\end{center}
\end{document}
我可以通过不出现边和 0 来摆脱节点的圆。
答案1
我们可以为所有终端节点创建一个到空节点的最终虚边:
\documentclass[border=10pt,tikz,multi]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={
if n=1{edge label={node [midway, left, anchor=south] {0} } }{edge label={node [midway, right, anchor=south] {1} } },
draw,
circle,
if level=0{}{!u.s sep/.wrap pgfmath arg={#1}{35mm/(level())}},
anchor=mid,
},
before typesetting nodes={
where n children=0{%
append={[, edge={dotted, shorten <=5pt} ]}
}{}
}
[6
[2
[2, edge label={node [midway, left] {1} }
[1
[1, edge label={node [midway, left] {1} }
[1, edge label={node [midway, left] {1} }
[1, edge label={node [midway, left] {1} } ]
]
]
]
[1
[1, edge label={node [midway, left] {1} }
[1, edge label={node [midway, left] {0} }
[1, edge label={node [midway, left] {1} }
]
]
]
]
]
]
]
\end{forest}
\end{document}
但是,当前的edge label
代码没有任何意义。由于我不确定它现在应该做什么,所以我无法建议如何纠正它。
编辑
我知道以上就是你想要的答案,但edge label
内容仍然很乱。很难猜测什么可以完成这项工作,因为我不知道这项工作是什么。(这很公平 - 你没有问任何人如何完成这项工作,所以你没有理由解释它。)
这里有一种方法可以满足我的好奇心。这个想法就是将标签的位置与内容分开。
默认情况下,标签大多会获取内容,1
因为它们大部分都1
在目标图像中。这可以用 覆盖,如所示my label=<something else>
。如果节点有兄弟节点,则左子节点的默认内容是0
而不是1
。(我认为这类似于您在之前的问题中要求的内容,您已在上面链接了这个问题。)
标签大多放在左侧。如果是分支,则右子节点的标签会放在右侧,其子节点的标签也是如此,只要分支保持“直”,即没有分支。
结果是这样的
显然可以根据您的需要进行修改。
\documentclass[border=10pt,tikz,multi]{standalone}
\usepackage{forest}
\begin{document}
\forestset{%
declare boolean={leftwards}{1},
declare toks={my label}{1},
}
\begin{forest}
for tree={
draw,
circle,
if={n_children()>1}{
for n=1{
my label=0,
for tree={leftwards},
for descendants={my label=1}
},
for n'=1{
for tree={not leftwards, my label=1}
},
}{},
if level=0{}{%
!u.s sep/.wrap pgfmath arg={#1}{35mm/(level())}
},
anchor=mid,
},
before typesetting nodes={
where n children=0{%
delay={%
append={[, edge={dotted, shorten <=5pt} ]}
}
}{},
where level=0{}{% this places the labels as specified
if={n_children("!u")==1}{%
if leftwards={%
edge label/.wrap pgfmath arg={%
node [midway, left, anchor=east] {#1}
}{my_label()},
}{%
edge label/.wrap pgfmath arg={%
node [midway, right, anchor=west] {#1}
}{my_label()},
}
}{%
if n=1{%
edge label/.wrap pgfmath arg={%
node [midway, left, anchor=south east] {#1}
}{my_label()},
}{%
edge label/.wrap pgfmath arg={%
node [midway, right, anchor=south west] {#1}
}{my_label()},
},
},
}
}
[6
[2
[2,
[1
[1,
[1,
[1,
]
]
]
]
[1
[1,
[1, my label=0
[1,
]
]
]
]
]
]
]
\end{forest}
\end{document}