树中的“附加在命令后”(子路径操作)

树中的“附加在命令后”(子路径操作)

有关的:“命令后附加”和“插入路径”的问题,但我不明白如何在我的情况下应用那里的解决方案。

我正在定义一个简单的 tikz 样式,它使用append after command

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning,fit}
\begin{document}
\begin{tikzpicture}[
  fit after/.style={
    append after command={%
      node[draw, inner sep=0pt, fit=(\tikzlastnode)] {}
    }
  }
  ]
  \node[fit after] {A};%%%% WORKS
  \node {B} child { node[fit after] {C} }; %%%% FAILS
\end{tikzpicture}
\end{document}

在第一个节点(A)上,它运行正常并在其周围绘制一个矩形。

但是,在C节点上,我收到以下错误消息:

Package pgf Error: No shape named  is known.

\tikzlastnode并不是什么问题,因为即使对节点名称进行硬编码,在这种child情况下仍然会失败。

路径操作是否child混乱append after command?有解决方法吗?

上下文:我正在尝试制作一个triangle fit whole subtree命令,绘制一个适合子树中所有节点的三角形。

答案1

如果forest是选项,定义fit whole subtree样式就相当简单了。我不推荐三角形。虽然我做了一些实验,但这不可避免地看起来很丑。但是,fit whole subtree可以传递任何你想要的选项来设置节点的样式。默认情况下,它会用红色绘制一个矩形。

请注意,的多次使用fit whole subtree(包括嵌套使用)都可以正常工作。

\documentclass[tikz,border=10pt,multi]{standalone}
\usepackage{forest}
\usetikzlibrary{fit}
\begin{document}
\newcommand*\makenodename[1]{(#1)}
\forestset{
  declare toks={fit these}{},
  fit whole subtree/.style={
    delay={
      temptoksa=,
      for tree={%
        temptoksa+/.wrap pgfmath arg={ (##1)}{name()},
      },
      fit these/.register=temptoksa,
      delay={
        tikz+={
          \node [draw=red, fit=\foresteoption{fit these}, inner sep=0pt, #1] {};
        },
      },
    },
  },
}
\begin{forest}
  for tree={
    fit=band,
    child anchor=parent,
    parent anchor=children,
  }
  [A
    [B
      [C, fit whole subtree
        [D]
        [E
          [X]
          [Y
            [Z]
          ]
        ]
        [F]
        [G]
      ]
      [H
        [I
          [J]
          [K]
          [L]
        ]
      ]
    ]
    [M, fit whole subtree={thick, draw=blue, rounded corners}
      [N
        [O
          [R]
        ]
        [P]
        [Q]
      ]
      [S, fit whole subtree={green, densely dashed, rounded corners}
        [T]
        [U]
        [V]
        [W]
      ]
    ]
  ]
\end{forest}
\end{document}

嵌套拟合子树

相关内容