
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:
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
YY
para una prueba, pero prefiero "extraer" el texto de\tikzlastnode
; sin embargo, parece que\tikzlastnode
es 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}
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 turn
entorno del rotating
paquete 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: