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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top