使用 pgfkeys 的相对覆盖

使用 pgfkeys 的相对覆盖

我想使用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就很好了。

这与Beamer 中叠加层的相对顺序外部链接

答案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 版本。

相关内容