Как я могу применить стиль к существующему узлу tikz на определенных слайдах - PullRequest
5 голосов
/ 05 июня 2010

Это то, что я пытаюсь сделать

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

Проблема в

      \node [selected] (nodeB) {};

создает новый узел, но я хочу, чтобы он применил стиль для существующего узла. Есть ли способ сделать это?

Конечно, у меня могут быть копии каждого узла в выбранном и невыбранном состоянии, но я действительно хочу иметь нормальное решение.

Ответы [ 2 ]

4 голосов
/ 05 июня 2010

Я не думаю, что вы можете сделать это так, как вы хотите (при условии, что я правильно понял вопрос), потому что после отрисовки узла невозможно изменить его внешний вид. Я бы предложил использовать макрос \alt Бимера:

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

Или что-то в этом роде (вам, возможно, придется поработать с точкой с запятой, чтобы заставить ее работать, в данный момент я не могу это проверить).

Другой вариант - просто нарисовать новый узел. Если вы включите

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

внутри \only<2>, который нарисует узел, который выглядит точно так же, как узел A, за исключением красного фона, в той же позиции в узле A. Новый узел покроет исходный узел A.

1 голос
/ 12 декабря 2017

Иногда, чтобы избежать повторений, было бы неплохо сделать что-то вроде этого:

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

Тогда, если вы поместите, например, это в кадр:

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

стиль selected будет определен как fill = red на втором слайде анимации и как стиль, не влияющий ни на какой другой слайд. Затем вы можете написать читабельную цифру, такую ​​как:

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

и узел «B» будет выделен на втором слайде. Таким образом, вам не нужно копировать и вставлять тонны определений узлов. Конечно, это не может быть применено к каждой потребности анимации, но мне нравится держать эту технику в моем рукаве.

...