Wie kann ich einen Stil auf den vorhandenen Tikz -Knoten auf bestimmten Folien anwenden?
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.
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.