Usando o especificador de slide beamer para \newcommand

Usando o especificador de slide  beamer para \newcommand

Estou usando <>para especificar slides conforme mostrado emhttps://tex.stackexchange.com/a/518585/114719

Tenho problemas ao aplicar este especificador a uma macro definida \newcommandcomo neste exemplo:

\documentclass{beamer}
\usepackage{tikz}
\newcommand{\drawline}[2]{
  \draw (#1) -- (#2);
}
\begin{document}
\begin{frame}
  \begin{overlayarea}{\linewidth}{0.7\paperheight}
    \centering
    \begin{tikzpicture}
      \useasboundingbox(-5.5,-.5)rectangle(6,5.5);%                                                                                                                                                         
      \coordinate (O) at (0, 0);
      \coordinate (A) at (5, 5);
      \coordinate (B) at (-5, 5);
      \draw<1-> (O) -- (B); %OK
      \drawline<2> {A}{B}; %trouble
      \end{tikzpicture}
    \end{overlayarea}
  \end{frame}
\end{document}

O erro de compilação é:

! Package pgf Error: No shape named < is known.

Como posso aplicar o <>especificador de slide a uma macro definida via \newcommand?

Responder1

Você deve informar suas macros personalizadas sobre as especificações de sobreposição usando \newcommand<>. Dentro da definição da macro, estará disponível um argumento adicional que contém a especificação de sobreposição e pode ser passado para outras macros.

No seu exemplo, você tem dois argumentos #1e #2. Agora usando \newcommand<>em vez de \newcommand, a especificação de sobreposição pode ser acessada via #3. Você tem que adicioná-lo ao \drawas \draw#3. Exemplo completo:

\documentclass{beamer}
\usepackage{tikz}
\newcommand<>{\drawline}[2]{
  \draw#3 (#1) -- (#2);
}
\begin{document}
\begin{frame}
  \begin{overlayarea}{\linewidth}{0.7\paperheight}
    \centering
    \begin{tikzpicture}
      \useasboundingbox(-5.5,-.5)rectangle(6,5.5);%                                                                                                                                                         
      \coordinate (O) at (0, 0);
      \coordinate (A) at (5, 5);
      \coordinate (B) at (-5, 5);
      \draw<1-> (O) -- (B);
      \drawline<2> {A}{B};
      \end{tikzpicture}
    \end{overlayarea}
  \end{frame}
\end{document}

insira a descrição da imagem aqui

informação relacionada