我有一张 tikz 绘图,我想更改第二张幻灯片中边缘的颜色。现在,我使用蛮力方法在前一个边缘上用红色绘制一条新边缘。
有什么方法可以减少代码中的冗余,而又不必一遍又一遍地重新定义整个箭头?就像\alert<2>
在标准 beamer 环境中一样?
特别是,如果在第三张幻灯片上,我希望边缘再次变黑,我就必须第三次绘制它,黑色 - 这听起来不是最理想的。
目前的方法:
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{positioning}
\tikzstyle{block} = [rectangle, draw,
text width=6em, text centered, rounded corners, minimum height=3em]
\begin{document}
\begin{frame}
\begin{tikzpicture}
\node [block] (I2) {I2};
\node [block] [left=5cm of I2] (I1) {I1};
\path[->] (I1) edge[shorten >=0.5cm, shorten <= 0.5 cm] node [right, near start, align=center] {$q=1$\\$p=2$} (I2);
\visible<2>{ \path[->] (I1) edge[shorten >=0.5cm, shorten <= 0.5 cm, color=red] node [right, near start, color=red, align=center] {$q=1$\\$p=2$} (I2);}
\end{tikzpicture}
\end{frame}
\end{document}
答案1
在这个简单的情况下,你只需使用以下方法更改颜色即可\only<2>{\color{red}}
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{positioning}
\tikzset{block/.style={rectangle, draw, text width=6em, text centered, rounded corners, minimum height=3em}}
\begin{document}
\begin{frame}
\begin{tikzpicture}
\node [block] (I2) {I2};
\node [block] [left=5cm of I2] (I1) {I1};
{\only<2>{\color{red}}\path[->] (I1) edge[shorten >=0.5cm, shorten <= 0.5 cm] node [right, near start, align=center] {$q=1$\\$p=2$} (I2);}
\end{tikzpicture}
\end{frame}
\end{document}
简洁且更灵活的方法是使用overlay-beamer-styles
库。然后您可以使用alt=<2>{red}{black}
它来指定不同的颜色。
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{positioning}
\usetikzlibrary{overlay-beamer-styles}
\tikzset{block/.style={rectangle, draw, text width=6em, text centered, rounded corners, minimum height=3em}}
\begin{document}
\begin{frame}
\begin{tikzpicture}
\node [block] (I2) {I2};
\node [block] [left=5cm of I2] (I1) {I1};
\path[->,alt=<2>{red}{black}] (I1) edge[shorten >=0.5cm, shorten <= 0.5 cm] node [right, near start, align=center] {$q=1$\\$p=2$} (I2);
\end{tikzpicture}
\end{frame}
\end{document}