如何使用森林包在叶节点中创建标签样式并更改其属性?

如何使用森林包在叶节点中创建标签样式并更改其属性?

我有一个特定的标签样式(在下面的代码中名为“aux”)。此样式将颜色设置为“灰色”,我正在尝试弄清楚如何仅在树的叶节点中将样式的颜色正确更改为“蓝色”(以标记标签)。我能够使用 where 子句轻松更改叶节点的颜色(更改为红色),但对于标签的样式,此方法似乎不起作用。

我的基本代码是:

\begin{forest}
for tree={
s sep=10mm,l=10mm,
circle,draw,
minimum size=1.5em,
inner sep=1pt,
aux/.style={ label={[left,font=\tiny,gray]:{#1}}, },
where n children=0{delay={color=red, aux/.style={ label={[left,font=\tiny,blue]:{#1}}, }, content={#1 }}}{}}
[0,
[a,aux=0]
[1,aux=1,
[2,aux=10, [\text{N},rectangle,rounded corners,aux=100],[c,aux=101]]
[b,aux=11]]
]
\end{forest}

输出如下图所示:

在此处输入图片描述

答案1

根据下面的强力代码,一个可能的解决方案相当简单:将 if 条件添加到样式中,aux而不是使用一些延迟来重新定义aux

\documentclass{article}
\usepackage{amsmath}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={
s sep=10mm,l=10mm,
circle,draw,
minimum size=1.5em,
inner sep=1pt,
aux/.style={if n children=0{label={[left,font=\tiny,blue]:{#1}}}%
{label={[left,font=\tiny,gray]:{#1}}}},
if n children=0{delay={color=red,content={#1}}}{}}
[0,
[a,aux=0]
[1,aux=1,
[2,aux=10, [\text{N},rectangle,rounded corners,aux=100],[c,aux=101]]
[b,aux=11]]
]
\end{forest}
\end{document}

在此处输入图片描述

这是一种更加残酷但几乎等效的方法。

\documentclass{article}
\usepackage{amsmath}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={
s sep=10mm,l=10mm,
circle,draw,
minimum size=1.5em,
inner sep=1pt,
aux/.code={\pgfmathtruncatemacro{\ic}{n_children}%
\ifnum\ic=0
\forestset{label={[left,font=\tiny,blue]:{#1}}}
\else
\forestset{label={[left,font=\tiny,gray]:{#1}}}
\fi
},
if n children=0{delay={color=red,content={#1}}}{}}
[0,
[a,aux=0]
[1,aux=1,
[2,aux=10, [\text{N},rectangle,rounded corners,aux=100],[c,aux=101]]
[b,aux=11]]
]
\end{forest}
\end{document}

相关内容