我想使用beamer
与现有符号不同的符号创建相对叠加层。以下代码给出了令人满意的结果。
\documentclass{beamer}
\usepackage{pgfkeys}
\newcommand\getspec[1]{\pgfkeysvalueof{/#1/spec}}
\begin{document}
\begin{frame}{}
\pgfkeyssetvalue{/1st item/spec}{1-2}
\pgfkeyssetvalue{/2nd item/spec}{2}
\begin{itemize}
\item<\getspec{1st item}> Content
\item<\getspec{2nd item}> More content
\end{itemize}
\end{frame}
\end{document}
由于 中的键pgfkeys
对于当前组是本地的,因此以下代码会引发错误Missing number, treated as zero.
,因为在离开第一个框架环境后,键的值1st item
被设置为类似空字符串的值。
\documentclass{beamer}
\usepackage{pgfkeys}
\newcommand\getspec[1]{\pgfkeysvalueof{/#1/spec}}
\begin{document}
\begin{frame}{}
\pgfkeyssetvalue{/1st item/spec}{1-2}
\pgfkeyssetvalue{/2nd item/spec}{2}
\begin{itemize}
\item<\getspec{1st item}> Content
\item<\getspec{2nd item}> More content
\end{itemize}
\end{frame}
\begin{frame}{}
\begin{itemize}
\item<\getspec{1st item}> Content
\end{itemize}
\end{frame}
\end{document}
我想修改代码以getspec
提供更有用的错误消息。类似的东西this label has not been defined for the current frame
就很好了。
答案1
以下类型的作品:
\newcommand\getspec[1]{
\pgfkeysifdefined{/#1/spec}{
\pgfkeysvalueof{/#1/spec} % The key is defined
}{ 0| stop:0| % Dirty hack
\errmessage{Label "#1" has not been defined for the current frame}
}
}
这会产生以下错误:
! Label "1st item" has not been defined for the current frame.
\beamer@@@temp ...n defined for the current frame}
| stop:0|
l.24 \end{frame}
该| stop:0|
hack 逃避了需要数字的 Beamer 解析,但是请注意,这可能不适用于每个 Beamer 版本。