Tikz/Forest:对所有最低级别的子项进行编号

Tikz/Forest:对所有最低级别的子项进行编号

我想用 $\omega_i$ 为树中最低级别的子节点编号,其中 $i$ 是树的 8 个分支。在文档中,forest我找到了一个使用 TeX 计数器的示例,但它似乎不起作用,因为计数器只更新一次。

我知道还应该有一个解决方案,其中不使用计数器,而是一切都在森林内部处理。

我现在的位置是:

\documentclass[tikz,border=5pt]{standalone}
\usepackage{forest}

\begin{document}
\tikzset{
  dot/.style={circle,draw,inner sep=1.2,fill=black},
}

\newcount\xcount
\begin{forest}
  for tree={
    if n children=0{}{dot},    
    delay={TeX={\xcount=0},
      if n children=0{fill=white,
        TeX={\advance\xcount1},
        content/.expanded={$\omega_{\the\xcount}$}}{}
    },
  }
  [[
  [[][]]
  [[][]]
  ][
  [[][]]
  [[][]]
  ]]
\end{forest}
\end{document}

现在的进展

答案1

您的代码会反复重置计数器,因此增量始终从 增加到01您只需在树的第一级将计数器设置为零。(我还将您的 TeX 计数器语法更改为 LaTeX 语法。)

\documentclass[tikz,border=5pt]{standalone}
\usepackage{forest}

\begin{document}
\tikzset{
  dot/.style={circle,draw,inner sep=1.2,fill=black},
}

\newcounter{xcount}
\begin{forest}
  for tree={
  delay n=0{TeX={\setcounter{xcount}{0}}}
  delay={
    if n children=0{}{dot},    
      if n children=0{fill=white,
        TeX={\stepcounter{xcount}},
        content/.expanded={$\omega_{\thexcount}$}}{}
    }}
  [[
  [[][]]
  [[][]]
  ][
  [[][]]
  [[][]]
  ]]
\end{forest}
\end{document}

代码输出

答案2

这是一个不需要外部计数器的版本。

\documentclass[tikz,border=5pt]{standalone}
\usepackage{forest}
\begin{document}
\forestset{
  declare count register={omega},
  omega'=0,
  dot/.style={circle, draw, inner sep=1.2, fill=black},
}
\newcount\xcount
\begin{forest}
  before typesetting nodes={
    where n children=0{
      omega'+=1,
      content/.expanded=$\omega_{\foresteregister{omega}}$,
    }{dot},
  }
  [[
  [[][]]
  [[][]]
  ][
  [[][]]
  [[][]]
  ]]
\end{forest}
\end{document}

欧米茄树

相关内容