„Nach Befehl anhängen“ in einem Baum (Unterpfadoperation)

„Nach Befehl anhängen“ in einem Baum (Unterpfadoperation)

Verwandt:Problem mit „Nach Befehl anhängen“ und „Pfad einfügen“, aber ich habe nicht verstanden, wie ich die dortigen Lösungen in meinem Fall anwenden sollte.

Ich definiere einen einfachen Tikz-Stil, der Folgendes verwendet 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}

Beim ersten Knoten ( A) funktioniert es einwandfrei und zeichnet ein Rechteck darum.

Auf dem CKnoten erhalte ich jedoch die folgende Fehlermeldung:

Package pgf Error: No shape named  is known.

Das \tikzlastnodeliegt nicht daran, da selbst das Festcodieren des Knotennamens in diesem childFall immer noch fehlschlägt.

Bringt der childPfadvorgang etwas durcheinander append after command? Gibt es eine Problemumgehung?

Kontext: Ich versuche, einen triangle fit whole subtreeBefehl zu erstellen, der ein Dreieck zeichnet, das um alle Knoten im Teilbaum passt.

Antwort1

Wenn forestdies eine Option ist, ist es relativ einfach, einen fit whole subtreeStil zu definieren. Ich empfehle keine dreieckige Form. Obwohl ich ein wenig experimentiert habe, sah dies zwangsläufig sehr hässlich aus. Sie fit whole subtreekönnen jedoch alle gewünschten Optionen zum Stylen des Knotens übergeben. Standardmäßig wird ein Rechteck in Rot gezeichnet.

Beachten Sie, dass die Mehrfachverwendung von fit whole subtree, einschließlich verschachtelter Verwendungen, problemlos funktioniert.

\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}

verschachtelte angepasste Teilbäume

verwandte Informationen