Letra por letra revelando efeito de animação?

Letra por letra revelando efeito de animação?

Preciso de um efeito de exibição para texto como este (em javascript) aquihttp://jsfiddle.net/VZvK7/.

No entanto, não sei como inserir código js no LaTeX (além de usar o pacote AcroTeX) e isso também me forçaria a usar o Acrobat Reader, então gostaria de implementar um efeito semelhante no Beamer. É possível?

(é claro que eu adoraria ver abordagens alternativas para isso)

Responder1

A ideia básica é colocar cada letra em um único slide.

\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}

O que eu usei:

  1. \comma: uma macro para colocar vírgulas no texto sem atrapalhar o loop
  2. \myduration: uma macro que define um \transdurationefeito de 0,05 segundos. Para cada letra.
  3. \anitext: uma macro para definir o efeito de animação usando o Beamer \temporalinternamente, no exemplo o texto aparece em negrito e \Largedepois volta ao normal.

É claro que o texto a ser animado precisa ser pré-processado para que cada letra seja seguida por uma vírgula. Para fazer isso coloquei o texto a ser animado em um arquivo separado e usei:

cat <finename> | fold -w1 | paste -sd+, -

Além disso, cada espaço precisa ser substituído por uma \spacemacro (fiz isso por meio de pesquisar e substituir).

O primeiro argumento da \anitextmacro é igual ao número de caracteres do texto original (sem vírgulas). Também é possível adicionar uma vírgula após cada par de caracteres (com fold -w2), mas a animação fica menos fluida.

insira a descrição da imagem aqui

No MwE o texto animado começa no slide número 2, para que o usuário possa avançar para o slide número 2 quando quiser iniciar a animação e depois admirar a falsa animação :)

Usei isso também com textos mais longos, de até 450 caracteres, e tirando a quantidade ridícula de slides do PDF resultante, funciona bem.

informação relacionada