我希望在森林环境中使用带有文本的箭头(箭头上方或下方)连接节点。不幸的是,我不知道如何在代码中实现它,因为每个箭头都应该有另一个文本。
我非常感谢大家的帮助。以下是我的代码:
\pgfkeys{/forest,
my rounded corners/.append style={rounded corners=2pt},
}
\begin{forest}
for tree={
font=\sffamily,
line width=1pt,
draw=linecol,
drop shadow,
fit=rectangle,
edge={thick, color=linecol, >={Triangle[]}, ->},
where level=0{%
l sep+=5pt,
calign=child,
calign child=2,
inner color=ocre!70,
outer color=ocre!70,
align=center,
my rounded corners,
for descendants={%
calign=first,
},
}{%
where level=1{%
inner color=ocre!30,
outer color=ocre!30,
my rounded corners,
align=center,
parent anchor=south west,
tier=three ways,
for descendants={%
child anchor=west,
parent anchor=west,
align=left,
anchor=west,
inner color=ocre!10,
outer color=ocre!10,
edge path={
\noexpand\path[\forestoption{edge}]
(!to tier=three ways.parent anchor) |-
(.child anchor)\forestoption{edge label};
},
},
}{}%
},
}
[a
[b
[b1
[b2]
]
]
[c
[c1
[c2
[c3]
]
]
]
[d
[d1
[d2]
]
]
[e
[e1
[e2]
]
]
]
\end{forest}
答案1
我在这里从多个方面进行猜测:如何完成您的代码;您要做什么;问题是什么。我怀疑您在其他地方找到了此代码。如果是这样,您应该将其归因,并且有一个链接会很有帮助。(希望原始示例是完整的。)
我替换了颜色,因为我不知道你的颜色是如何定义的。我添加了库,并尝试尽可能简化事情。
我思考你想要这样的东西:
如果是这样,那么我建议使用folder
Forestedges
库中的样式,这使得绘制这种树时的生活变得更加轻松。
森林有一个内置的键,用于向边缘添加标签,称为edge label
。arrow label
是一个简单的包装器。
请注意,您不应在 或 的范围内使用,where
因为隐式地使用了自身。使用或 将置于范围之外。在这里,我将第一个条件置于 的范围之外,并将第二个条件(需要在第一个条件的范围内)更改为。for tree
where
where
for tree
if
where
for tree
if
如果相同,那么说inner color=<colour>, outer color=<colour>
是没有意义的<colour>
。它只会减慢编译速度。fill=<colour>
在这种情况下会更好。
我改变了树的结构,因为它似乎确实包含 0、1 和 2 级节点,而不是包含更高级别的节点。显然,如果不是这种情况,您可以将其改回来。
\documentclass[border=10pt,multi,tikz]{standalone}
\usepackage[edges]{forest}
\usetikzlibrary{shadows,arrows.meta}
\begin{document}
\begin{forest}
arrow label/.style={
if level=1{
edge label={node [midway, font=\scriptsize\sffamily, sloped, above] {#1}},
}{
edge label={node [midway, font=\scriptsize\sffamily, anchor=south west] {#1}},
},
},
for tree={
font=\sffamily,
line width=1pt,
draw=darkgray,
drop shadow,
edge={thick, color=darkgray, -{Triangle[]}},
l sep'+=25pt,
},
where level=0{%
fill=blue!70,
rounded corners=2pt,
}{%
if level=1{%
fill=blue!30,
rounded corners=2pt,
child anchor=north,
for tree={
grow'=0,
folder,
l sep'+=20pt,
},
for descendants={%
fill=blue!10,
},
}{}%
},
before typesetting nodes={
for tree={
content/.wrap value=\strut #1,
}
}
[a
[b, arrow label=This Way
[b1, arrow label=An Answer]
[b2, arrow label=Best Answer]
]
[c, arrow label=Best Way
[c1, arrow label=A Connection]
[c2, arrow label=A Way Station]
[c3, arrow label=A Destination]
]
[d, arrow label=No Way
[d1, arrow label=By-The-By]
[d2, arrow label=Side-By-Side]
]
[e, arrow label=Lesser Evil
[e1, arrow label=Lost In Space]
[e2, arrow label=Lost In Time]
]
]
\end{forest}
\end{document}