Tikz Forest 标签定位

Tikz Forest 标签定位

我正在使用该包构建树形图forest,并且想要标记边缘。通常情况下,Tikz 能够很好地避免标签和边缘之间的碰撞,但如果我的树的分支被迫过度伸展,那么标签就会开始与边缘重叠。

有没有办法手动偏移我添加的标签?或者有没有办法让标签中断边缘,就像descriptiontikzcd 中的标签选项一样?

边缘标签定位不佳的树形图

\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

这是Harish Kumar 的回答

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}

灵活的边缘标签,减少打字量

相关内容