编辑

编辑

我想在节点标签tikzpicture中嵌入forest

\documentclass[
    ,crop=true
    ,varwidth=\maxdimen
    ]{standalone}

\usepackage{forest}

\begin{document}

\Forest{
    [A\tikz{\node[circle,draw,inner sep=.15ex]{1};} [B] [C]]
}

\end{document}

然而,这一\tikz部分被忽略了:

在此处输入图片描述

相反,根节点标签应如下所示:

在此处输入图片描述

我敢打赌这很容易实现,但我就是不明白。

答案1

tikzpicture应避免嵌套环境。它保证了不可预测性 ;)。

不过,有一个简单的方法可以做到这一点森林它提供了tikz在绘制树之后向节点添加注释的关键:

\documentclass[border=10pt,tikz]{standalone}
\usepackage{forest}
\usetikzlibrary{positioning}

\begin{document}

\Forest{
  [A, tikz={\node[circle, draw, inner sep=.15ex, right=0pt of .east]  {1};} [B] [C]]
}

\end{document}

注释根

这样做的好处是您可以使用相对节点名称。这.easteast当前节点的锚点。我们需要调整间距以避免节点重叠。我使用了positioning推荐的间距,但如果出于某种原因必须这样做,您也可以不用它。

如果需要节点更近,请考虑减少或消除inner sep

\Forest{
  [A, tikz={\node[circle, draw, inner sep=0pt, right=0pt of .east]  {1};} [B] [C]]
}

调整分离

或使用负值:

\Forest{
  [A, tikz={\node[circle, draw, inner sep=0pt, right=-2.5pt of .east]  {1};} [B] [C]]
}

进一步调整

编辑

上述解决方案的唯一问题是,如果经常需要,它会变得相当繁琐,并且如果数字变大,圈出的数字可能会与兄弟节点重叠。

此外,也可以(也许稍微简单一点)使用森林label选项来创建带圆圈的数字作为节点的标签。

    label={[circle, draw, inner sep=.15ex, label distance=-2.5pt, anchor=west]east:<number to be circled>}

但是,输入起来一点也不乏味。因此,创建一种允许我们编写的样式会很方便,例如,circ=89用圆圈标记节点89

\forestset{
  circ/.style={
    label={[circle, draw, inner sep=.15ex, label distance=-2.5pt, anchor=west]east:#1}
  },
}

现在我们可以写

\Forest
{
  [A, circ=3
    [B
      [D, circ=-4
    ]
  ]
    [C, circ=4499]
  ]
}

生产

带样式的带圆圈数字

这更方便。

如果数字都在树的边界上,这种方法就很好,但如果它们出现在树内的节点之间,这种方法就不太好:

有问题的重叠

为了解决这个问题,我们可以增加该特定节点的兄弟节点之间的距离。我们希望自动执行此操作,但我们只想在必要时执行此操作,因此我们添加了一些条件代码circ

  circ/.style={
    label={[circle, draw, inner sep=.15ex, label distance=-2.5pt, anchor=west]east:#1},
    if level=0{}{
      if n'=1{}{
        if={equal(n_children("!u"),1)}{}{
            !u.s sep+/.pgfmath={width("#1")+.3ex+.8pt},
        }
      },
    },
  }

从而产生了这个

修正定位

完整代码:

\documentclass[border=10pt,tikz]{standalone}
\usepackage{forest}
\forestset{
  circ/.style={
    label={[circle, draw, inner sep=.15ex, label distance=-2.5pt, anchor=west]east:#1},
    if level=0{}{
      if n'=1{}{
        if={equal(n_children("!u"),1)}{}{
            !u.s sep+/.pgfmath={width("#1")+.3ex+.8pt},
        }
      },
    },
  }
}
\begin{document}

\Forest
{
  [A, circ=3
    [B
      [D, circ=-4
        [E, circ=895]
        [F]
    ]
  ]
    [C, circ=4499]
  ]
}

\end{document}

答案2

另一个解决方案是使用保存箱:

\documentclass[
    ,crop=true
    ,varwidth=\maxdimen
    ]{standalone}

\usepackage{forest}

\newsavebox{\tempbox}

\begin{document}

\savebox{\tempbox}{A\tikz{\node[circle,draw,inner sep=.15ex]{1};}}

\Forest{
    [\usebox{\tempbox} [B] [C]]
}

\end{document}

福雷斯特

相关内容