ツリー内の「コマンドの後に追加」(子パス操作)

ツリー内の「コマンドの後に追加」(子パス操作)

関連している:「コマンドの後に追加」と「パスの挿入」に関する問題、しかし、私のケースではそこにある解決策をどのように適用すればよいのか分かりませんでした。

以下を使用するシンプルな 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}

ネストされた適合サブツリー

関連情報