Ich versuche, eine Bewegung auf einer Folie zu animieren. Dazu verwende ich die Pakete pgfplots und animate. Hier ist ein Beispiel:
\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}
In meinem Ergebnis erhalte ich einen Versatz in der Textposition in der Animation. Wenn ich die Overlay-Option in der Animation verwende, erhalte ich sogar zwei Fehler:
„Der Inhalt des ersten Frames darf nicht die Breite Null haben“
„Der Inhalt des ersten Frames darf nicht die Höhe Null haben“
Kann mir jemand erklären, warum das so ist und wie man es richtig macht?
Vielen Dank im Voraus
Antwort1
Wenn tikzpicture
die overlay
Option verwendet wird, hat die resultierende TeX-Box die Dimension Null. Dies ist innerhalb der animateinline
Umgebung nicht zulässig, da die Breite, Höhe und Tiefe des Animations-Widgets aus den Dimensionen des ersten Frames bestimmt werden. Wenn diese null wären, wäre auch die Widget-Größe null, was keinen Sinn ergibt. Dies ist der Grund für die Fehlermeldung, die Sie erhalten.
Ich würde folgende Lösung vorschlagen. Die (folienfüllende) Animation wird in eine lrbox
erste gesetzt, um verschachtelte tikzpicture
Umgebungen zu vermeiden (was als veraltete Praxis gilt). Die lrbox
kann dann absolut platziert werden, indem der Seitenknoten verwendet wird 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}