![Tikz/Forest:对所有最低级别的子项进行编号](https://linux22.com/image/354202/Tikz%2FForest%EF%BC%9A%E5%AF%B9%E6%89%80%E6%9C%89%E6%9C%80%E4%BD%8E%E7%BA%A7%E5%88%AB%E7%9A%84%E5%AD%90%E9%A1%B9%E8%BF%9B%E8%A1%8C%E7%BC%96%E5%8F%B7.png)
我想用 $\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
您的代码会反复重置计数器,因此增量始终从 增加到0
。1
您只需在树的第一级将计数器设置为零。(我还将您的 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}