从精神上来说,这是一棵树,就是我想要的:用箭头向下,用红色或蓝色向上(蓝色边缘有标签)。
\begin{forest}
for tree={parent anchor=children,edge={->}}
[AAA
[BBB
[D]
{\draw[->,blue] () to[out=north,in=south west,edge label=foo] (!u);}
[E]
{\draw[->,red] () to[out=north,in=south east] (!u);}
]
{\draw[->,blue] () to[out=north,in=south west,edge label=bar] (!u);}
[CCC
[F]
[G]
]
{\draw[->,red] () to[out=north,in=south east] (!u);}
]
\end{forest}
我有几个问题:
- 我怎样才能定义宏——比如说,
upred
和upblue{label}
——这样我就不必重复太多次了? - 树上的一些箭头乱了。为什么?
- 树太紧凑了。怎样才能松一点呢?
任何帮助都将不胜感激,尤其是第一点。
谢谢,
国会议员
答案1
我可能完全误解了这个问题。假设您希望用蓝色或红色绘制箭头,具体取决于它们是在左侧还是右侧,您可以简单地修改edge path
。
\documentclass{article}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={parent anchor=children,
where n=1{edge path={%
\noexpand\draw[-latex] (!u.parent anchor)--(.child anchor);
\noexpand\draw[-latex,blue] (.child anchor) to[out=90,in=-135] \forestoption{edge
label} (!u.-130);
}}{edge path={%
\noexpand\draw[-latex] (!u.parent anchor)--(.child anchor);
\noexpand\draw[-latex,red] (.child anchor) to[out=90,in=-45] \forestoption{edge
label} (!u.-50);
}}
},
[AAA
[BBB,edge label={node[midway,left=1pt]{foo}}
[D,edge label={node[midway,left=1pt]{bar}}]
[E]
]
[CCC
[F]
[G]
]
]
\end{forest}
\end{document}
通过指定适当的端点(锚点)可以解决不正确的箭头问题。