如何对 pgfkeys 参数进行数学运算并将其分配给其他键

如何对 pgfkeys 参数进行数学运算并将其分配给其他键

我试图减少使用不同数字反复应用某些叠加的工作量。但是,我需要计算给定帧的下一帧或上一帧,因此需要对给定值进行简单的算术运算。

然而,由于我对 pgfkeys 了解甚少,这项任务显得相当困难。

下面的代码显示了我正在尝试做的事情

\documentclass{beamer}
\usepackage{tikz}
\tikzset{
  onslide/.code args={<#1>#2}{%
    \only<#1>{\pgfkeysalso{#2}} 
  },
  mycolor/.style={text=red},
  opaque/.style={opacity=0.5, text opacity=0.5},
  animate/.style={onslide=<#1>{mycolor}, onslide=<#1+1>{opaque}},
}


\begin{document}
\begin{frame}[plain]{Same with forest}
\begin{tikzpicture}
% I want something like this
\node[rectangle, animate=1] at (0,1) {On slide 1};
\node[rectangle, animate=2] at (0,2) {On slide 2};
\node[rectangle, animate=3] at (0,3) {On slide 3};

% Instead of something like this
%\node[rectangle, onslide=<1>{mycolor}, onslide=<2>{opaque}] at (0,1) {On slide 1};
%\node[rectangle, onslide=<2>{mycolor}, onslide=<3>{opaque}] at (0,2) {On slide 2};
%\node[rectangle, onslide=<3>{mycolor}, onslide=<4>{opaque}] at (0,3) {On slide 3};
\end{tikzpicture}

\end{frame}
\end{document}

问题是,该#1+1密钥无法在开箱即用。

  animate/.style={onslide=<#1>{mycolor}, onslide=<#1+1>{opaque}}

我也尝试使用 a\pgfmathparse和 a \pgfmathsetmacro,但也没有用。我认为这与键的扩展或宏的范围有关。

那么,我该如何让这类事情自动运行呢?另外,如果您能给出一个我+-也能处理范围的一般情况,我会得到加分。但现在还没有必要。

答案1

出于显而易见的原因,这会产生四个覆盖,但想法应该很清楚:您必须将明确的数字传递给\only,这可以用来完成\numexpr

\documentclass{beamer}
\usepackage{tikz}
\tikzset{
  onslide/.code args={<#1>#2}{%
    \expandafter\only\expandafter<\the\numexpr#1\relax>{\pgfkeysalso{#2}}%
  },
  mycolor/.style={text=red},
  opaque/.style={opacity=0.5, text opacity=0.5},
  animate/.style={onslide=<#1>{mycolor}, onslide=<#1+1>{opaque}},
}


\begin{document}
\begin{frame}[plain]{Same with forest}
\begin{tikzpicture}
% I want something like this
\node[rectangle, animate={1}] at (0,1) {On slide 1};
\node[rectangle, animate={2}] at (0,2) {On slide 2};
\node[rectangle, animate={3}] at (0,3) {On slide 3};

\end{tikzpicture}

\end{frame}
\end{document}

相关内容