Come posso applicare uno stile al nodo tikz esistente diapositive specifiche
Domanda
Questo è quello che sto cercando di fare
\begin{tikzpicture}
[node distance = 1cm, auto,font=\footnotesize,
% STYLES
every node/.style={node distance=1.3cm},
comment/.style={rectangle, inner sep= 5pt, text width=4cm, node distance=0.25cm, font=},
module/.style={rectangle, drop shadow, draw, fill=black!10, inner sep=5pt, text width=3cm, text badly centered, minimum height=0.8cm, font=\bfseries\footnotesize\sffamily,rounded corners},
selected/.style={fill=red!40}]
\node [module] (nodeA) {node A};
\node [module, below of=nodeA] (nodeA) {node B};
\only<1>{
\node [comment, text width=6cm, right=0.25 of nodeA] {short description of Node A};
\node [comment, text width=6cm, right=0.25 of nodeB] {short description of Node B};
}
\only<2>{
\node [selected] (nodeA) {};
\node [comment, text width=6cm, right=0.25 of nodeA] {long description of node A};
}
\only<3>{
\node [selected] (nodeB) {};
\node [comment, text width=6cm, right=0.25 of nodeA] {long description of node B};
}
\end{tikzpicture}
Il problema è
\node [selected] (nodeB) {};
crea un nuovo nodo, ma voglio che applicare lo stile per il nodo esistente. Esiste un modo per farlo?
Certo che potrebbe avere le copie di ogni nodo Stato e non-selezionata di stato selezionato, ma mi vuole veramente avere una soluzione normale.
Soluzione
Non credo che si può fare questo il modo in cui si desidera (supponendo che ho capito correttamente alla domanda), perché una volta che un nodo viene disegnata, non c'è modo di cambiare il suo aspetto. Mi piacerebbe suggerisco di usare macro \alt
di Beamer:
\alt<2>{\node[module,selected] at (nodeA) {node A};}{\node[module] at (nodeA) {node A};}
\alt<3>{\node[module,selected] at (nodeB) {node B};}{\node[module] at (nodeB) {node B};}
\node[comment,text width=6cm,right=0.25 of nodeA]{\alt<2>{short description}{long description}};
\node[comment,text width=6cm,right=0.25 of nodeB]{\alt<3>{short description}{long description}};
O qualcosa del genere (potrebbe essere necessario armeggiare con i punti e virgola per farlo funzionare, non posso test che per il momento).
Un'altra opzione sarebbe quella di realtà solo disegnare un nuovo nodo. Se si include
\node[module,selected] at (nodeA) {node A};
\only<2>
dentro, che disegnerà un nodo che sembra proprio come nodo A, tranne con uno sfondo rosso, nella stessa posizione sul nodo A. Il nuovo nodo coprirà il nodo originale A.
Altri suggerimenti
A volte, per ripetizioni evitare, può essere bello fare qualcosa di simile:
% #1 Overlay specs.
% #2 Style name.
% #4 Style properties.
\def\onlystyle<#1>#2#3{%
\alt<#1>{%
\tikzset{#2/.style = {#3}}
}{%
\tikzset{#2/.style = {}}
}%
}
Quindi, se si mette, per esempio, questo all'interno di una cornice:
\onlystyle<2>{selected}{fill = red}
il selected
stile sarà definito come fill = red
sulla seconda diapositiva dell'animazione, e come uno stile con alcun effetto su ogni altra diapositiva. Quindi, è possibile scrivere una figura leggibile come ad esempio:
\begin{tikzpicture}
\node at (0, 0) {A};
\node[selected] at (1, 0) {B};
\node at (2, 0) {C};
\end{tikzpicture}
ed il nodo “B” verranno evidenziate nella seconda slitta. In questo modo, non è necessario copiare e incollare tonnellate di definizioni di nodo. Naturalmente, non può essere applicata ad ogni singola esigenza di animazione, ma mi piace mantenere questa tecnica nella manica.