我想用 $\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}