我嘗試為幻燈片上移動的物體製作動畫。我正在使用 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}