¿Cómo puedo aplicar un estilo al nodo Tikz existente en diapositivas específicas?

StackOverflow https://stackoverflow.com/questions/2979200

  •  24-10-2019
  •  | 
  •  

Pregunta

Esto es lo que estoy tratando de hacer

    \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}

El problema es

      \node [selected] (nodeB) {};

Crea un nuevo nodo, pero quiero que aplique el estilo para el nodo existente. ¿Hay alguna manera de hacerlo?

Por supuesto, podría tener copias de cada nodo en estado seleccionado y estado no seleccionado, pero realmente quiero tener una solución normal.

¿Fue útil?

Solución

No creo que puedas hacer esto de la forma en que quieres (suponiendo que entiendo la pregunta correctamente), porque una vez que se dibuja un nodo, no hay forma de cambiar su apariencia. Sugeriría usar Beamer's \alt macro:

\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 algo así (es posible que tengas que jugar con los Semicolons para que funcione, no puedo probar eso en este momento).

Otra opción sería simplemente dibujar un nuevo nodo. Si incluye

\node[module,selected] at (nodeA) {node A};

en el interior \only<2>, que dibujará un nodo que se parece al nodo A, excepto con un fondo rojo, en la misma posición en el nodo A. El nuevo nodo cubrirá el nodo original A.

Otros consejos

A veces, para evitar repeticiones, puede ser bueno hacer algo como esto:

% #1    Overlay specs.
% #2    Style name.
% #4    Style properties.
\def\onlystyle<#1>#2#3{%
    \alt<#1>{%
        \tikzset{#2/.style = {#3}}
    }{%
        \tikzset{#2/.style = {}}
    }%
}

Entonces, si pones, por ejemplo, esto dentro de un marco:

\onlystyle<2>{selected}{fill = red}

el estilo selected se definirá como fill = red en la segunda diapositiva de la animación, y como un estilo sin ningún efecto en cualquier otra diapositiva. Luego, puede escribir una figura legible como:

\begin{tikzpicture}
    \node           at (0, 0) {A};
    \node[selected] at (1, 0) {B};
    \node           at (2, 0) {C};
\end{tikzpicture}

y el nodo "B" se resaltará en la segunda diapositiva. De esta manera, no tiene que copiar toneladas de definiciones de nodos. Por supuesto, no se puede aplicar a todas las necesidades de animación, pero me gusta mantener esta técnica en mi manga.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top