Wie teile ich ausgewählte Optionen zwischen verschiedenen Knoten in TikZ?

Wie teile ich ausgewählte Optionen zwischen verschiedenen Knoten in TikZ?

(Mir ist kein besserer Titel für die Frage eingefallen. Vorschläge sind willkommen.)

Ich habe in TikZ einige neue Formen erstellt und möchte eine davon unter einer anderen platzieren, wenn diesem letzten Knoten ein bestimmter Schlüssel übergeben wird. Ich zeige anhand eines Beispiels mit zwei Rechtecken besser, was ich meine:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{patterns,calc}

\tikzstyle{ground}=[append after command={;\node[draw=red,rectangle,anchor=north] (B) at (\tikzlastnode.south){a}}]


\begin{document}
\begin{tikzpicture}
  \node[draw,rectangle,ground,rotate=10] (A) at (0,0){a};% not good
  \begin{scope}[shift={(1,0)}]
    \node[draw,rectangle,rotate=10] (B) at (0,0){a};
    \node[draw=red,rectangle,anchor=north,rotate=10] (C) at (B.south){a};% OK
  \end{scope}
\end{tikzpicture}
\end{document}

gestapelte Knoten

Wie Sie sehen, habe ich einen Stil erstellt, der die Erstellung des zweiten Knotens an den ersten Knoten anfügt und sich korrekt darauf bezieht. Alles funktioniert einwandfrei, aber wenn ich beispielsweise beide Formen zusammen drehen muss, kann ich keine Lösung finden, da nur das erste Rechteck gedreht wird (nach links). Ich habe das gewünschte Ergebnis nur auf die im Code gezeigte Weise erreicht, bei der ich den zweiten Knoten manuell zeichnen und ihm die rotateOption übergeben musste.

Es gibt also eine Möglichkeit, das gewünschte Ergebnis (rechts) zu erzielen, aber mit der Syntax des ersten Beispiels (links)? Beachten Sie, dass beide beteiligten realen Formen von mir gezeichnet wurden. Wenn sie also angepasst werden müssen, ist das in Ordnung.

Antwort1

Wenn Sie wissen, welche Parameter den zusätzlichen Knoten beeinflussen, können Sie sie in das einfügen .style. Hier haben Sie ein Beispiel basierend auf Ihrem Code. Ich weiß nicht, ob es für Ihr eigentliches Problem hilfreich ist.

In Ihrem Beispiel möchten Sie rotateden zusätzlichen Knoten, daher habe ich einen groundStil definiert, der diesen Parameter mit 0 als Standardwert enthält.

    ground/.style={%
       append after command={;%
          \node[draw=red,rectangle,
             anchor=north,rotate=#1] (B) 
             at (\tikzlastnode.south){a}}},
    ground/.default=0,

Jetzt ist es möglich, zu schreiben \node[draw,rectangle,ground=10,rotate=10] (A) at (0,0){a};, aber auf diese Weise müssen Sie sicherstellen, dass Sie in groundund denselben Wert schreiben rotate. Eine bessere Lösung wäre, einen neuen Stil zu definieren, der beide einschließt. Dies ist, was groundedpassiert:

    grounded/.style={ground=#1,rotate=#1},
    grounded/.default=0}

Und der vollständige Code lautet:

\documentclass[tikz,border=1mm]{standalone}

\tikzset{%
    ground/.style={%
       append after command={;%
          \node[draw=red,rectangle,
             anchor=north,rotate=#1] (B) 
             at (\tikzlastnode.south){a}}},
    ground/.default=0,
    grounded/.style={ground=#1,rotate=#1},
    grounded/.default=0}

\begin{document}
\begin{tikzpicture}
  \node[draw,rectangle,ground=10,rotate=10] (A) at (0,0){a};
  \node[draw,rectangle,grounded] (A) at (0.5,0){a};
  \node[draw,rectangle,grounded=25] (A) at (1,0){a};    
  \node[draw,rectangle,grounded=-25] (A) at (1.5,0){a};
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Und schauen Sie sich bitte an:Sollten \tikzset oder \tikzstyle zum Definieren von TikZ-Stilen verwendet werden?

Antwort2

Versuchen Sie dies mit Umfang und Form transformieren

  \begin{scope}[shift={(2,0)},rotate=10,transform shape]
  \node[draw,rectangle,ground,] (A) at (0,0){a};% not good
  \end{scope}

verwandte Informationen