考虑这个最小的例子:
\documentclass[aspectratio=169, 16pt]{beamer}
\usetheme[titleformat=smallcaps]{metropolis} % Usemetropolistheme
\usepackage[english]{babel}
\begin{document}
\begin{frame}[standout]
\only<+>{H}
\only<+>{He}
\only<+>{Hel}
\only<+>{Hell}
\only<+>{Hello}
\only<+>{Hello w}
\only<+>{Hello wo}
\only<+>{Hello wor}
\only<+>{Hello worl}
\only<+>{Hello world}
\only<+>{Hello world!}
\end{frame}
\end{document}
基本上,它是使用 beamer 叠加层的动画文本。但是,据我所知,我必须手动转到下一张幻灯片才能使其正常工作。有办法让这个过程慢下来吗?我知道解决方案可能是导出图像,制作 gif 并使用动画包。但是这个解决方案有两个缺点:gif 不是矢量的,每次我在布局中更改某些内容(例如字体或类似内容)时,我都必须制作一个新的 gif。
笔记使用 beamer 覆盖不是强制性的。但是,该解决方案必须与 beamer 类和 xelatex 编译器配合使用。
答案1
您可以指定每个覆盖的显示时间\transduration{<time in seconds>}
:
\documentclass[aspectratio=169]{beamer}
\usetheme{moloch}% modern fork of the metropolis theme
\usepackage[english]{babel}
\begin{document}
\begin{frame}[standout]
\transduration{0.1}
\only<+>{H}
\only<+>{He}
\only<+>{Hel}
\only<+>{Hell}
\only<+>{Hello}
\only<+>{Hello w}
\only<+>{Hello wo}
\only<+>{Hello wor}
\only<+>{Hello worl}
\only<+>{Hello world}
\only<+>{Hello world!}
\end{frame}
\end{document}
注意:自动幻灯片切换仅适用于支持 java 脚本的 pdf 查看器,并且需要处于演示模式。
答案2
只是为了澄清一个误解,即animate
基于 的解决方案需要一组预制的位图(gif、png 等)动画帧。当然,这种动画需要支持 JavaScript 的 PDF 查看器;在 Linux 上,至少有 Okular 提供此功能,其他平台则有 Acrobat Reader。
\documentclass[aspectratio=169,16pt]{beamer}
\usetheme[titleformat=smallcaps]{metropolis} % Use metropolis theme
\usepackage{animate}
\usepackage[english]{babel}
\begin{document}
\begin{frame}[standout]
\begin{animateinline}[autoplay,loop]{2}
\makebox[\widthof{\strut Hello world!}][l]{\strut} \newframe
\makebox[\widthof{\strut Hello world!}][l]{\strut H} \newframe
\makebox[\widthof{\strut Hello world!}][l]{\strut He} \newframe
\makebox[\widthof{\strut Hello world!}][l]{\strut Hel} \newframe
\makebox[\widthof{\strut Hello world!}][l]{\strut Hell} \newframe
\makebox[\widthof{\strut Hello world!}][l]{\strut Hello} \newframe
\makebox[\widthof{\strut Hello world!}][l]{\strut Hello w} \newframe
\makebox[\widthof{\strut Hello world!}][l]{\strut Hello wo} \newframe
\makebox[\widthof{\strut Hello world!}][l]{\strut Hello wor} \newframe
\makebox[\widthof{\strut Hello world!}][l]{\strut Hello worl} \newframe
\makebox[\widthof{\strut Hello world!}][l]{\strut Hello world} \newframe
\makebox[\widthof{\strut Hello world!}][l]{\strut Hello world!}
\end{animateinline}
\end{frame}
\end{document}
点击图像查看动画版本(矢量 [SVG]):