Usando especificador de diapositivas del proyector para \newcommand

Usando  especificador de diapositivas del proyector para \newcommand

Estoy usando <>para especificar diapositivas como se muestra enhttps://tex.stackexchange.com/a/518585/114719

Me meto en problemas al aplicar este especificador a una macro definida \newcommandcomo en este ejemplo:

\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}

El error de compilación es:

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

¿Cómo se puede aplicar el <>especificador de diapositiva a una macro definida mediante \newcommand?

Respuesta1

Debe hacer que sus macros personalizadas tengan en cuenta las especificaciones de superposición mediante el uso de \newcommand<>. Dentro de la definición de macro, estará disponible un argumento adicional que contiene la especificación de superposición y se puede pasar a otras macros.

En su ejemplo, tiene dos argumentos #1y #2. Ahora, usando \newcommand<>en lugar de \newcommand, se puede acceder a la especificación de superposición a través de #3. Tienes que agregarlo al \drawas \draw#3. Ejemplo 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}

ingrese la descripción de la imagen aquí

información relacionada