.png)
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 C
Knoten erhalte ich jedoch die folgende Fehlermeldung:
Package pgf Error: No shape named is known.
Das \tikzlastnode
liegt nicht daran, da selbst das Festcodieren des Knotennamens in diesem child
Fall immer noch fehlschlägt.
Bringt der child
Pfadvorgang etwas durcheinander append after command
? Gibt es eine Problemumgehung?
Kontext: Ich versuche, einen triangle fit whole subtree
Befehl zu erstellen, der ein Dreieck zeichnet, das um alle Knoten im Teilbaum passt.
Antwort1
Wenn forest
dies eine Option ist, ist es relativ einfach, einen fit whole subtree
Stil zu definieren. Ich empfehle keine dreieckige Form. Obwohl ich ein wenig experimentiert habe, sah dies zwangsläufig sehr hässlich aus. Sie fit whole subtree
kö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}