我想做类似的事情,例如:
但是使用该animate
包。我得到了一个非常糟糕的解决方案:
\documentclass{article}
\usepackage[latin1]{inputenc}
\usepackage{animate}
\usepackage{amsmath}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{animateinline}
\begin{document}
\begin{center}
\fboxsep1mm
\begin{animateinline}[autoplay,loop]{2}
% one frame per second
$\phantom{\text{Alles Gute zum Geburtstag!}}$
\newframe
$\text{Alles}\phantom{\text{ Gute zum Geburtstag!}}$
\newframe
$\text{Alles Gute}\phantom{\text{ zum Geburtstag!}}$
\newframe
$\text{Alles Gute zum}\phantom{\text{ Geburtstag!}}$
\newframe
$\text{Alles Gute zum Geburtstag}\phantom{\text{!}}$
\newframe
$\text{Alles Gute zum Geburtstag!}\phantom{\text{}}$
\end{animateinline}
\end{center}
\end{document}
这\phantom
根据我的经验需要预订在所有帧中都相同空间。否则文本得到扭曲。
结果如下:
http://www.bipede.de/Downloads/HB.pdf
有人知道如何获得非常酷的解决方案吗?
来这里工作?
顺便说一下,这是德语的Alles Gute zum Geburtstag
意思Happy Birthday
。
答案1
一字一字
使用xstring
取自相关问题。
文本的宽度(在\Huge
样式中)保存为\mytextwidth
。
由于\StrLen
从 到 计数0
,在本例中27
,\multiframe
需要为帧设置28
动画,这就是为什么\mylen+1
计算并保存为 的原因\frames
。
此示例使用\multiframe
宏,因为我们可以使用变量(另一个问题使用PGF
's\foreach
来实现这一点)而不需要单独输入每一帧。
是\vphantom
必需的,因为我们从没有文本(\icounter=0
)开始,并且我们需要垂直高度。如果您想以A
使用开始,然后在命令中将其icounter=1+1
重新替换\frames
为。\mylen
\multiframe
\makebox
每次都创建一个与整个文本宽度相同的框,这样animate
就不会拉伸文本。(我们也可以使用\StrRight
,但这需要较少的计算。)
代码(字符对字符)
\documentclass{article}
\usepackage[latin1]{inputenc}
\usepackage{animate}
\usepackage{calc}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{animateinline}
\usepackage{xstring}
\def\mytext{Alles Gute zum Geburtstag!}
\StrLen{\mytext}[\mylen]
\newlength{\mytextwidth}
\setlength{\mytextwidth}{\widthof{\Huge\mytext}}
\def\frames{\number\numexpr\mylen+1\relax} % \frames = \mylen + 1
\begin{document}
\begin{center}
\begin{animateinline}[autoplay,loop]{2}
\multiframe{\frames}{icounter=0+1}{
\makebox[\mytextwidth][l]{\Huge\vphantom{\mytext}\StrLeft{\mytext}{\icounter}}
}
\end{animateinline}
\end{center}
\end{document}
看起来很像......(又名输出)
一个字一个字地
代码
\documentclass{article}
\usepackage[latin1]{inputenc}
\usepackage{animate}
\usepackage{calc}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{animateinline}
\usepackage{xstring}
\def\mytext{Alles Gute zum Geburtstag!}
\StrCount{\mytext}{ }[\countSpaces]
\newlength{\mytextwidth}
\setlength{\mytextwidth}{\widthof{\Huge\mytext}}
\def\frames{\number\numexpr\countSpaces+2\relax} % \frames = \countSpaces + 2
\begin{document}
\begin{center}
\begin{animateinline}[autoplay,loop]{2}
\multiframe{\frames}{icounter=0+1,icounterr=1+1}{%
\makebox[\mytextwidth][l]{%
\Huge\vphantom{\mytext}%
\ifnum\icounter=0\relax\else
\ifnum\icounterr=\frames\relax\mytext\else%
\StrBefore[\icounter]{\mytext}{ }%
\fi
\fi
}%
}
\end{animateinline}
\end{center}
\end{document}