一字一字

一字一字

我想做类似的事情,例如:

改进打字机动画

但是使用该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}

相关内容