Hacer referencia al contenido de lasttikznode y superponerlo en un nodo

Hacer referencia al contenido de lasttikznode y superponerlo en un nodo

estoy tratando de resolver¿Cómo rotar correctamente una composición de nodos Tikz, sin rotar el texto de sus etiquetas?; y encontrétikz pgf - Problema con "añadir después del comando" e "insertar ruta".

Esto me dio la siguiente idea: definir un estilo, de modo que simplemente coloque otro nodo encima del "actual", con un fondo de color para que el nuevo nodo oscurezca el antiguo, y con el mismo contenido del nodo "actual". , pero girado. Esto es lo lejos que llegué:

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

Esta es la salida:

prueba61.png

Los problemas/preguntas son:

  • El nodo adjunto esdetrásel nodo original, por lo que su relleno no puede ocultar el nodo original. ¿Alguna forma de colocarlo delante del nodo original?
  • Sólo tengo las letras YYpara una prueba, pero prefiero "extraer" el texto de \tikzlastnode; sin embargo, parece que \tikzlastnodees básicamente sólo el nombre del último nodo, no una "referencia de objeto". En cualquier caso, ¿hay alguna manera de extraer y reutilizar el texto de \tikzlastnode?

Respuesta1

No creo que exista un método integrado para guardar el cuadro del último nodo, así que aquí hay una forma rápida y sucia (y probablemente no robusta):

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

ingrese la descripción de la imagen aquí


EDITAR: con respecto al ejemplo de OP, incluso si este enfoque se utiliza para agregar un nodo adicional a través de append after command={\pgfextra{\mymacro}}, aún así el nodo agregado está "detrás" (y por lo tanto no "cubrirá" el nodo anterior). Sin embargo, este enfoque se puede utilizar directamente en un estilo, junto con el turnentorno del rotatingpaquete para emitir una rotación "a tiempo" y, como tal, "añadir" o "superponer" un segundo nodo rotado no es necesario. Entonces podemos usar:

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

... para obtener:

prueba62.png

información relacionada