我需要一个像这里(用 javascript)这样的文本出现的效果http://jsfiddle.net/VZvK7/。
但是我不知道如何将 js 代码插入 LaTeX(除了使用 AcroTeX Bundle),而且这也会迫使我使用 Acrobat Reader,所以我想在 Beamer 中实现类似的效果。可能吗?
(当然我很乐意看到其他解决方法)
答案1
基本思想是将每个字母放入一张幻灯片中。
\documentclass{beamer}
\usepackage{pgffor}
\usepackage{ragged2e} %for justification
\newcommand{\comma}{,}
\newcommand{\myduration}[1]{%
\foreach \l in {#1}{%
\transduration<\l>{.05}%
}%
}
\newcommand{\anitext}[2]{%
\myduration{#1}%
\foreach \i in {#2}{%
\temporal<+>{}{\Large\bfseries \vphantom{Mpgjy}\i}{\vphantom{Mpgjy}\i}% %the phantom removes the bumping
}%
}
\begin{document}
\begin{frame}
\justifying
\pause
\anitext{2,...,122}{%
L,o,r,e,m,\space,i,p,s,u,m,\space,d,o,l,o,r,\space,s,i,t,\space,a,m,e,t\comma,\space,c,o,n,s,e,c,t,e,t,u,r,\space,a,d,i,p,i,s,c,i,n,g,\space,e,l,i,t\comma,\space,s,e,d,\space,d,o,\space,e,i,u,s,m,o,d,\space,t,e,m,p,o,r,\space,i,n,c,i,d,i,d,u,n,t,\space,u,t,\space,l,a,b,o,r,e,\space,e,t,\space,d,o,l,o,r,e,\space,m,a,g,n,a,\space,a,l,i,q,u,a.
}
\end{frame}
\end{document}
我使用的方法:
\comma
:一个宏,用于在文本中使用逗号而不会弄乱循环\myduration
:设置 0.05 秒效果的宏\transduration
。针对每个字母。\anitext
:使用 Beamer 内部设置动画效果的宏\temporal
,示例中文本显示为粗体\Large
然后恢复正常。
当然,要制作动画的文本需要进行预处理,以便每个字母后面都有一个逗号。为此,我将要制作动画的文本放入单独的文件中并使用:
cat <finename> | fold -w1 | paste -sd+, -
此外,每个空格都需要用宏替换\space
(我通过搜索和替换来完成)。
宏的第一个参数\anitext
等于原始文本中的字符数(不带逗号)。也可以在每对字符后添加一个逗号(带fold -w2
),但这样动画就不太流畅了。
在 MwE 中,动画文本从幻灯片 2 开始,这样当用户想要启动动画时,可以前进到幻灯片 2,然后欣赏假动画:)
我也用它处理较长的文本,最多 450 个字符,除了生成的 PDF 的幻灯片数量太多之外,它运行良好。