![Использование спецификатора слайдера для \newcommand](https://rvso.com/image/405351/%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D1%81%D0%BF%D0%B5%D1%86%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80%D0%B0%20%D1%81%D0%BB%D0%B0%D0%B9%D0%B4%D0%B5%D1%80%D0%B0%20%20%D0%B4%D0%BB%D1%8F%20%5Cnewcommand.png)
Я использую <>
для указания слайдов, как показано на рисункеhttps://tex.stackexchange.com/a/518585/114719
У меня возникают проблемы при применении этого спецификатора к макросу, определенному \newcommand
как в этом примере:
\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}
Ошибка компиляции:
! Package pgf Error: No shape named < is known.
Как можно применить <>
спецификатор слайда к макросу, определенному через \newcommand
?
решение1
Вам необходимо сделать так, чтобы ваши пользовательские макросы знали о спецификациях наложения, используя \newcommand<>
. Внутри определения макроса будет доступен дополнительный аргумент, содержащий спецификацию наложения и может быть передан другим макросам.
В вашем примере у вас есть два аргумента #1
и #2
. Теперь, используя \newcommand<>
вместо \newcommand
, к спецификации наложения можно получить доступ через #3
. Вам нужно добавить его к \draw
as \draw#3
. Полный пример:
\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}