我正在使用该包构建树形图forest
,并且想要标记边缘。通常情况下,Tikz 能够很好地避免标签和边缘之间的碰撞,但如果我的树的分支被迫过度伸展,那么标签就会开始与边缘重叠。
有没有办法手动偏移我添加的标签?或者有没有办法让标签中断边缘,就像description
tikzcd 中的标签选项一样?
\documentclass[a4paper,10pt]{article}
\usepackage{tikz}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={grow'=north}
[A
[B, edge label={node[midway,left,font=\scriptsize]{1}} [] [] [] [] [] [] [] [] [] []]
[C, edge label={node[midway,left,font=\scriptsize]{2}} [] [] [] [] [] [] [] [] [] []]
]
\end{forest}
\end{document}
答案1
你可以使用auto
`left: 来代替
或者使用above
:
或者below
还有above left
above right
below right
above=2mm
below=1cm
等等。选择你喜欢的。
\documentclass[a4paper,10pt]{article}
\usepackage{tikz}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={grow'=north}
[A
[B, edge label={node[midway,below,font=\scriptsize]{1}} [] [] [] [] [] [] [] [] [] []]
[C, edge label={node[midway,below,font=\scriptsize]{2}} [] [] [] [] [] [] [] [] [] []]
]
\end{forest}
\end{document}
如果您希望标签中断边缘,请移除left
或使用任何您正在使用的东西并使用fill=white
\documentclass[a4paper,10pt]{article}
\usepackage{tikz}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={grow'=north}
[A
[B, edge label={node[midway,fill=white,font=\scriptsize]{1}} [] [] [] [] [] [] [] [] [] []]
[C, edge label={node[midway,fill=white,font=\scriptsize]{2}} [] [] [] [] [] [] [] [] [] []]
]
\end{forest}
\end{document}
答案2
for tree
如果您希望整棵树的边缘标签定位相同,您可以在开始时将标签创建的规范放入,然后在树本身中edge label=1
写入edge label=2
等。例如,假设您想要above
边缘标签。那么您可以使用以下内容:
\documentclass[tikz, border=10pt]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={
grow'=north,
delay={
edge label/.wrap value={node[midway, font=\sffamily\scriptsize, above]{#1}},
},
font=\sffamily,
}
[A
[B, edge label=1 [] [] [] [] [] [] [] [] [] []]
[C, edge label=2 [] [] [] [] [] [] [] [] [] []]
]
\end{forest}
\end{document}
如果您希望灵活地指定不同的位置,可以设置一个样式,my edge label
它接受两个参数:第一个是所需位置,第二个是标签内容。例如:
\documentclass[tikz, border=10pt]{standalone}
\usepackage{forest}
\begin{document}
\forestset{
my edge label/.style 2 args={
edge label={node[midway, font=\sffamily\scriptsize, #1]{#2}},
},
}
\begin{forest}
for tree={
grow'=north,
font=\sffamily,
}
[A
[B, my edge label={below}{1} [] [] [] [] [] [] [] [] [] []]
[C, my edge label={above}{2} [] [] [] [] [] [] [] [] [] []]
]
\end{forest}
\end{document}