Wie kann ich einen Stil auf den vorhandenen Tikz -Knoten auf bestimmten Folien anwenden?

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

  •  24-10-2019
  •  | 
  •  

Frage

Das versuche ich zu tun

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

Das Problem ist

      \node [selected] (nodeB) {};

Erstellt einen neuen Knoten, aber ich möchte, dass er den Stil für den vorhandenen Knoten anwendet. Gibt es eine Möglichkeit, dies zu tun?

Natürlich könnte ich Kopien eines jeden Knotens im ausgewählten Zustand und in nicht ausgewählten Zustand haben, aber ich möchte wirklich eine normale Lösung haben.

War es hilfreich?

Lösung

Ich glaube nicht, dass Sie dies so tun können, wie Sie möchten (vorausgesetzt, ich verstehe die Frage richtig), denn sobald ein Knoten gezeichnet ist, gibt es keine Möglichkeit, ihr Aussehen zu ändern. Ich würde vorschlagen, Beamers zu verwenden \alt Makro:

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

Oder so etwas (Sie müssen möglicherweise an den Semikolons basteln, um es zum Laufen zu bringen, ich kann das im Moment nicht testen).

Eine andere Option wäre, nur einen neuen Knoten zu zeichnen. Wenn Sie einschließen

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

Innerhalb \only<2>, Das zeichnet einen Knoten, der genauso aussieht wie Knoten A, außer mit einem roten Hintergrund, an derselben Position am Knoten A. Der neue Knoten wird den ursprünglichen Knoten A verdecken.

Andere Tipps

Manchmal, um Wiederholungen zu vermeiden, kann es schön sein, so etwas zu tun:

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

Wenn Sie beispielsweise dies innerhalb eines Rahmens setzen:

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

der Style selected wird definiert als fill = red Auf der zweiten Folie der Animation und als Stil ohne Effekt auf jede andere Folie. Dann können Sie eine lesbare Figur schreiben wie:

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

und der "B" -Knoten wird auf der zweiten Folie hervorgehoben. Auf diese Weise müssen Sie keine Tonnen von Knotendefinitionen kopieren. Natürlich kann es nicht auf jeden einzelnen Animationsbedarf angewendet werden, aber ich mag es, diese Technik in meinem Ärmel zu halten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top