Referenciando o conteúdo do lasttikznode e sobrepondo-o em um nó

Referenciando o conteúdo do lasttikznode e sobrepondo-o em um nó

estou tentando resolverComo girar uma composição de nós Tikz corretamente, sem girar o texto de seus rótulos?; e eu encontreitikz pgf – Problema com “acrescentar após comando” e “inserir caminho”.

Isso me deu a seguinte ideia - definir um estilo, de forma que simplesmente coloque outro nó em cima do "atual", com um fundo colorido para que o novo nó obscureça o antigo, e com o mesmo conteúdo do nó "atual" , mas girado. Isto é o quão longe eu cheguei:

\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 é a saída:

teste61.png

Os problemas/dúvidas são:

  • O nó anexado éatráso nó original, para que seu preenchimento não possa obscurecer o nó original - alguma maneira de colocá-lo na frente do nó original?
  • Estou apenas recebendo as letras YYpara um teste - mas prefiro "extrair" o texto de \tikzlastnode; no entanto, parece que \tikzlastnodeé basicamente apenas o nome do último nó, não uma "referência de objeto". De qualquer forma, existe uma maneira de extrair e reutilizar o texto de \tikzlastnode?

Responder1

Eu não acho que exista um método integrado para salvar a caixa do último nó, então aqui está uma maneira rápida e suja (e provavelmente não 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}

insira a descrição da imagem aqui


EDIT: Em relação ao exemplo do OP, mesmo que esta abordagem seja usada para adicionar um nó adicional por meio de append after command={\pgfextra{\mymacro}}, ainda assim o nó anexado estará "atrás" (e portanto não "cobrirá" o nó anterior). No entanto, esta abordagem pode ser usada diretamente em um estilo, junto com o turnambiente do rotatingpacote, para emitir uma rotação "na hora certa" e, como tal, "anexar" ou "sobrepor" um segundo nó girado é desnecessário. Então 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}

... obter:

teste62.png

informação relacionada