Использование спецификатора слайдера для \newcommand

Использование спецификатора слайдера  для \newcommand

Я использую <>для указания слайдов, как показано на рисунке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. Вам нужно добавить его к \drawas \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}

введите описание изображения здесь

Связанный контент