![Verwenden des Beamer-Folienspezifizierers für \newcommand](https://rvso.com/image/405351/Verwenden%20des%20Beamer-Folienspezifizierers%20%20f%C3%BCr%20%5Cnewcommand.png)
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 \newcommand
wie 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 #1
und #2
. Wenn Sie nun \newcommand<>
anstelle von verwenden \newcommand
, kann die Overlay-Spezifikation über aufgerufen werden #3
. Sie müssen es zu \draw
as 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}