Comment puis-je appliquer un style au noeud tikz existant sur des lames spécifiques

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

  •  24-10-2019
  •  | 
  •  

Question

est ce que je suis en train de faire

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

Le problème est

      \node [selected] (nodeB) {};

crée un nouveau nœud, mais je veux qu'il applique le style du nœud existant. Est-il possible de le faire?

Bien sûr, je pourrais avoir des copies de chaque noeud dans l'état sélectionné et état non sélectionné, mais je veux vraiment avoir une solution normale.

Était-ce utile?

La solution

Je ne pense pas que vous pouvez faire comme vous voulez (en supposant que je comprends bien la question), car une fois un nœud est tiré, il n'y a aucun moyen de changer son apparence. Je suggère d'utiliser la macro \alt 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}};

Ou quelque chose comme ça (vous pourriez avoir à bricoler avec les points-virgules pour le faire fonctionner, je ne peux pas test pour le moment).

Une autre option serait en fait juste dessiner un nouveau nœud. Si vous incluez

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

à l'intérieur \only<2>, qui attirera un nœud qui ressemble noeud A, sauf avec un fond rouge, à la même position au niveau du noeud A. Le nouveau nœud couvriront le nœud d'origine A.

Autres conseils

Parfois, à des répétitions d'éviter, il peut être agréable de faire quelque chose comme ceci:

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

Alors, si vous mettez, par exemple, cela dans un cadre:

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

le style selected sera défini comme fill = red sur la deuxième diapositive de l'animation, et comme un style sans que ce soit l'effet sur tous les autres diapositives. Ensuite, vous pouvez écrire une figure lisible comme:

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

et le noeud « B » seront mis en évidence sur le second coulisseau. De cette façon, vous n'avez pas de copier-coller des tonnes de définitions de noeuds. Bien sûr, il ne peut pas être appliquée à tous les besoins d'animation unique, mais je tiens à garder cette technique dans ma manche.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top