在后续幻灯片中更改边缘的属性

在后续幻灯片中更改边缘的属性

我正在使用 beamer 和 TikZ,并想更改同一帧的第二张幻灯片中边缘的颜色和厚度。以下是我尝试的方法:

\documentclass{beamer}

\usepackage{tikz}
\usetikzlibrary{shapes,shapes.geometric,arrows,fit,calc,positioning,automata}

\begin{document}

\frame{
    \newcommand*\properties{}
    \only<2>{\renewcommand*{\properties}{orange, ultra thick}}
    \begin{figure}
        \begin{tikzpicture}[node distance = 1.5cm, scale=0.8]

        \node (1) {1};
        \node[right = of 1] (2) {2};

        \path[->]
        (1) edge[\properties] (2);

        \end{tikzpicture}
    \end{figure}
}

\end{document}

奇怪的是,当我在 的定义中只放入orange或 时,一切都按预期工作。此外,如果我只在 后面的括号中放入,它仍然可以正常工作(当然,在这种情况下,边缘在两张幻灯片上的外观相同)。但是当我将它们都放在那里时,就会出现错误:ultra thick\propertiesorange, ultra thickedge

软件包 pgfkeys 错误:我不知道密钥“/tikz/orange, ultra thick”,我将忽略它。也许你拼错了。

我可以知道为什么会这样吗?我应该如何纠正它才能达到所需的效果(即第二张幻灯片上的边缘变为橙色且更厚)?谢谢!

答案1

我认为您不能\only...像这样将命令放在边缘命令中。相反,您必须应用于\only...完整命令。

以下工作:

\documentclass{beamer}

\usepackage{tikz}
\usetikzlibrary{shapes,shapes.geometric,arrows,fit,calc,positioning,automata}

\tikzset{properties/.style={orange, ultra thick}}
\begin{document}

\frame{
    \begin{figure}
        \begin{tikzpicture}[node distance = 1.5cm, scale=0.8]

        \node (1) {1};
        \node[right = of 1] (2) {2};

        \only<2>{\path[->](1) edge[properties] (2);}
        \only<1,3->{\path[->](1) edge (2);}

        \end{tikzpicture}
    \end{figure}
}

\end{document}

我习惯\tikzset以“tikz 方式”定义您的属性。如果您仅在一个环境中使用它,tikzpicture您也可以通过以下方式“本地”定义它

\begin{tikzpicture}[node distance = 1.5cm, scale=0.8,
                    properties/.style={orange, ultra thick}]
...
\end{tikzpicture}

編輯我

正如指出的那样如何在使用 Beamer 的叠加层时修改 TikZ 中的节点,另一种方法是使用以下方式\only...设置属性:

\only<1,3->{\tikzset{properties/.style={}}}
\only<2>{\tikzset{properties/.style={orange, ultra thick}}}

现在您的tikzpicture环境不再需要任何\only...语句,对于节点您只需写入:

\path[->](1) edge[properties] (2);

編輯 II

注意,里面的任何东西\only都是框架的局部。例如,你可以制作

\tikzset{properties/.style={orange, ultra thick}}

在你的序言中有一个“全局”定义,然后使用

\only<1,3->{\tikzset{properties/.style={}}}

每当您想要“关闭”此定义时。还请注意,\tikzset框架内的任何内容仅适用于该框架,并且无法在其他框架中访问,因此这需要进入前导码,或者更准确地说,进入框架之外。

相关内容