
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:
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
YY
para 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}
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 turn
ambiente do rotating
pacote, 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: