
Ich versuche zu lösenWie dreht man eine Komposition aus Tikz-Knoten richtig, ohne den Text ihrer Beschriftungen zu drehen?; und ich fandtikz pgf - Problem mit „Nach Befehl anhängen“ und „Pfad einfügen“.
Das brachte mich auf die folgende Idee: Definieren Sie einen Stil, der einfach einen anderen Knoten über den „aktuellen“ legt, mit einem farbigen Hintergrund, sodass der neue Knoten den alten verdeckt, und mit demselben Inhalt wie der „aktuelle“ Knoten, nur gedreht. So weit bin ich gekommen:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{positioning}
\usetikzlibrary{fit}
% https://tex.stackexchange.com/questions/55722/problem-with-append-after-command-and-insert-path
\makeatletter
\def\mymacro{
\begin{scope}
% { % MUST have this group! or scope!
\setbox\tikz@figbox=\box\pgfutil@voidb@x
\node at (\tikzlastnode) [fill=yellow] {\rotatebox{180}{YY}}; %
% }
\end{scope}
}
\makeatother
\tikzstyle{drc} = [draw, rectangle, line width=1pt, align=center,
append after command={\pgfextra{\mymacro}},
% insert path={\pgfextra{\mymacro}}, % no \tikzlastnode
]
\begin{document}
\begin{tikzpicture}[line width=3mm]
\node[drc] at (0,0) {\ \ A};
\node[drc] at (1,1) {B\ \ };
\end{tikzpicture}
\end{document}
Dies ist die Ausgabe:
Die Probleme/Fragen sind:
- Der angehängte Knoten isthinterder ursprüngliche Knoten, sodass seine Füllung den ursprünglichen Knoten nicht verdecken kann – gibt es eine Möglichkeit, ihn vor den ursprünglichen Knoten zu bekommen?
- Ich habe die Buchstaben nur
YY
zu Testzwecken - aber ich würde lieber den Text von "extrahieren"\tikzlastnode
; es scheint jedoch, dass dies\tikzlastnode
im Grunde nur der Name des letzten Knotens ist, kein "Objektverweis". Gibt es auf jeden Fall eine Möglichkeit, den Text von zu extrahieren und wiederzuverwenden\tikzlastnode
?
Antwort1
Ich glaube nicht, dass es eine integrierte Methode zum Speichern der Box des letzten Knotens gibt, daher hier eine schnelle und einfache (und wahrscheinlich nicht robuste) Methode:
\documentclass[tikz, border=5]{standalone}
\newbox\lastnodebox
\begin{document}
\begin{tikzpicture}[every node/.style={draw,
execute at begin node=\global\setbox\lastnodebox\hbox\bgroup,
execute at end node=\egroup\copy\lastnodebox}]
\foreach \i [count=\y] in {A,...,F}
\node at (0,-\y/2) {\box\lastnodebox \i};
\end{tikzpicture}
\end{document}
BEARBEITEN: In Bezug auf das OP-Beispiel append after command={\pgfextra{\mymacro}}
liegt der angehängte Knoten auch dann „hinter“ (und „überdeckt“ den vorherigen Knoten nicht), wenn dieser Ansatz verwendet wird, um einen zusätzlichen Knoten hinzuzufügen (und wird ihn daher nicht überdecken). Dieser Ansatz kann jedoch direkt in einem Stil zusammen mit der turn
Umgebung des rotating
Pakets verwendet werden, um eine Rotation „rechtzeitig“ auszugeben, und daher ist das „Anhängen“ oder „Überlagern“ eines zweiten gedrehten Knotens unnötig. Wir können also Folgendes verwenden:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{positioning}
\usetikzlibrary{fit}
\usepackage{rotating} %tlmgr install rotating
\newbox\lastnodebox
\tikzstyle{drc} = [draw, rectangle, line width=1pt, align=center,]
\tikzstyle{drcr} = [drc,
execute at begin node=\begin{turn}{180}\global\setbox\lastnodebox\hbox\bgroup,
execute at end node=\egroup\copy\lastnodebox\end{turn},
]
\begin{document}
\begin{tikzpicture}[line width=3mm]
\node[drc] at (0,0) {\ \ A\\A\ \ };
\node[drcr] at (1,1) {B\ \ \\\ \ B};
\end{tikzpicture}
\end{document}
... erhalten: