Как сделать анимацию с помощью pgfplots/beamer?

Как сделать анимацию с помощью pgfplots/beamer?

Я пытаюсь анимировать что-то движущееся на слайде. Я использую пакеты pgfplots и animate, чтобы добиться этого. Вот пример:

\documentclass[aspectratio=1610]{beamer}
\setbeamertemplate{navigation symbols}{}

\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepackage{animate}

\newcommand{\Textfield}[3]{%
    \draw%
        (current page.south west) ++(#1,#2)node[anchor=south west](N0){#3}%
    ;%
}%

\begin{document}
\begin{frame}
\begin{tikzpicture}[remember picture,overlay]%
    \useasboundingbox (current page.south west) rectangle (current page.north east);%
    \Textfield{1cm}{1cm}{Moving Text}
\end{tikzpicture}
\end{frame}
\begin{frame}
\begin{animateinline}[autoplay,controls=all,%
        begin={\begin{tikzpicture}[remember picture]%,overlay
        \useasboundingbox (current page.south west) rectangle (current page.north east);},%
        end=\end{tikzpicture}]{20}%
    \multiframe{61}{dPosTy=10mm+1mm}%
    {\Textfield{1cm}{\dPosTy}{Moving Text}}%
\end{animateinline}%
\end{frame}
\end{document}

В моем результате я получаю смещение в позиции текста в анимации. Если я использую опцию наложения в анимации, я даже получаю две ошибки:
'Содержимое первого кадра не должно иметь нулевую ширину'
'Содержимое первого кадра не должно иметь нулевую высоту'
Может кто-нибудь объяснить, почему так и как это правильно сделать?
Заранее спасибо

решение1

Если используется tikzpictureопция overlay, то результирующий блок TeX имеет нулевые размеры. Это не допускается внутри animateinlineсреды, поскольку ширина, высота и глубина виджета анимации определяются из размеров первого кадра. Если они равны нулю, размер виджета также будет равен нулю, что не имеет смысла. Это причина сообщения об ошибке, которое вы получаете.

Я бы предложил следующее решение. Анимация (заполнения слайдов) набирается в первую очередь lrbox, чтобы избежать вложенных tikzpictureсред (что считается устаревшей практикой). lrboxЗатем ее можно разместить абсолютно, используя узел страницы current page.

\documentclass[aspectratio=1610]{beamer}
\setbeamertemplate{navigation symbols}{}

\usepackage{animate}

\usepackage{tikz}
%\usepackage{pgfplots} % not used here
%\pgfplotsset{compat=newest}

\newsavebox\animation

\newcommand{\Textfield}[3]{\node[anchor=south west, draw] at (#1,#2) {#3};}%
%\newcommand{\Textfield}[3]{\draw (0,0) -- (#1,#2) node[anchor=south west, draw] {#3};}%

\begin{document}

\begin{lrbox}{\animation}
  \begin{animateinline}[
    autoplay,controls,
    begin={\begin{tikzpicture}
      \useasboundingbox (0,0) rectangle (\paperwidth,\paperheight);},
    end=\end{tikzpicture}
  ]{20}
    \multiframe{61}{dPosTy=10mm+1mm}{\Textfield{1cm}{\dPosTy}{Moving Text}}
  \end{animateinline}
\end{lrbox}

\begin{frame}
  \begin{tikzpicture}[overlay,remember picture]
    \node [inner sep=0pt, outer sep=0pt, anchor=base west] at (current page.south west) {\usebox\animation};
  \end{tikzpicture}
\end{frame}

\end{document}

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