Verwenden des Beamer-Folienspezifizierers für \newcommand

Verwenden des Beamer-Folienspezifizierers  für \newcommand

Ich verwende <>zum Angeben von Folien wie in gezeigthttps://tex.stackexchange.com/a/518585/114719

Ich bekomme Probleme, wenn ich diesen Spezifizierer auf ein Makro anwende, das \newcommandwie in diesem Beispiel definiert ist:

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

Der Kompilierungsfehler ist:

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

Wie kann der <>Folienspezifizierer auf ein über definiertes Makro angewendet werden \newcommand?

Antwort1

Sie müssen Ihre benutzerdefinierten Makros mithilfe von Overlay-Spezifikationen berücksichtigen \newcommand<>. Innerhalb der Makrodefinition ist ein zusätzliches Argument verfügbar, das die Overlay-Spezifikation enthält und an andere Makros übergeben werden kann.

In Ihrem Beispiel haben Sie zwei Argumente #1und #2. Wenn Sie nun \newcommand<>anstelle von verwenden \newcommand, kann die Overlay-Spezifikation über aufgerufen werden #3. Sie müssen es zu \drawas hinzufügen \draw#3. Vollständiges Beispiel:

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

Bildbeschreibung hier eingeben

verwandte Informationen