Saltar al contenido

Cómo insertar superposiciones en látex beamer

Solución:

A continuación, se muestra un ejemplo del uso de especificaciones de superposición incremental con compensaciones.

documentclass{beamer}
begin{document}
begin{frame}[label=integral-of-x]{Example: Integral of $f(x) =x$}
begin{example}<+->
Find $int_0^3 x,dx$.
end{example}
begin{solution}<+->
action<.->{For any $n$ we have $alert<.(5)>{Delta x = frac{3}{n}}$ and for each $i$ between $0$ and $n$, $alert<.(4)>{x_i = frac{3i}{n}}$.}
action<+->{For each $i$, take $x_i$ to represent $f$ on the $i$th interval.}
action<+->{So}
begin{align*}
    action<.->{int_0^3 x,dx = lim_{ntoinfty} R_n }
        action<+->{&= lim_{ntoinfty} sum_{i=1}^n alert<.(1)>{f(x_i)},alert<.(2)>{Delta x}}
        action<+->{ = lim_{ntoinfty}sum_{i=1}^n 
            alert<.>{left(frac{alert<.(2)>{3}i}{alert<.(2)>{n}}right)}
            alert<+>{left(frac{alert<.(1)>{3}}{alert<.(1)>{n}}right) }\}
        action<+->{&= lim_{ntoinfty}alert<.>{frac{9}{n^2}} alert<.(1)>{sum_{i=1}^n i}}
        action<+->{ = alert<.(1)>{lim_{ntoinfty}}frac{9}{alert<.(1)>{n^2}} 
            cdot alert<.>{frac{alert<.(1)>{n(n+1)}}{2}}}
        action<+->{= frac{9}{2}alert<.>{cdot 1}}
end{align*}
end{solution}
end{frame}
end{document}

salida de código de muestra

Básicamente, <+-> significa incrementar el recuento de pausas y aplicar esto desde ese recuento de pausas en adelante. <.-> significa que desde la pausa actual cuenta en adelante (realmente no hace nada, pero es útil para organizarse). Y cosas como <.(5)> significa en el recuento de pausa actual más cinco. Por lo tanto, puede insertar cosas antes o después sin tener que cambiar los recuentos de pausas explícitamente. Por supuesto, si se refiere a superposiciones con <.> y <.(5)> y desea insertar algo en el medio, deberá cambiar <.(5)> para <.(6)> o algo similar.

Mi flujo de trabajo al crear secuencias complejas como esta suele ser trazar un mapa en papel. Escribiré lo que debería encenderse, apagarse o cambiar en cada paso. A partir de ahí, es cuestión de adivinar y comprobar. los includeonlyframes El comando de preámbulo le permite enfocarse en un fotograma mientras se desarrolla.

Creo que hay casos en los que las superposiciones incrementales no son suficientes. Por ejemplo, el marco puede descubrir un diagrama y al mismo tiempo mostrar comentarios en otro lugar:

documentclass{beamer}
usepackage{tikz}
usetikzlibrary{backgrounds}

begin{document}
begin{frame}
begin{tikzpicture}[framed]
    onslide<1->{node[red] (r) {Red};}
    onslide<2->{node[blue, below of = r] {Blue};}
end{tikzpicture}\
only<1>{Red node comment}
only<2>{Blue node comment}
end{frame}
end{document}

En este caso, es posible que deseemos insertar un nuevo nodo, digamos verde, para que aparezca entre el rojo y el azul. Hasta donde yo sé, la única solución sería insertar

onslide<2->{node[green, right of = r] {Green};}

entre el rojo y el azul y luego incremente manualmente todas las especificaciones de superposición afectadas (es decir, agregue 1 a todo lo que sea mayor o igual a dos). Esto puede resultar muy tedioso en el caso de diagramas complejos. Quizás una forma más ordenada sería si el proyector admitiera números de diapositiva fraccionarios, de modo que pudiéramos insertar algo como

onslide<1.5->{node[green, right of = r] {Green};}

Recientemente tuve que modificar un diagrama más grande y después de pasar un tiempo volviendo a numerar, escribí un script de Python simple que convierte esas especificaciones fraccionarias en equivalentes usando solo números enteros. El siguiente script lee un archivo de texto (dado en el primer argumento) que contiene un solo fotograma con superposiciones fraccionarias y genera un fotograma de beamer válido equivalente. Es muy tosco (por ejemplo, no funciona si una especificación de superposición se divide en dos líneas) pero podría servir como un buen punto de partida.

import re
import sys

p = re.compile("<(([0-9]+(.[0-9]+)?)(-([0-9]+(.[0-9]+)?)?)?)>")

def extract(s):

    ret = set()
    for r in [m[0] for m in p.findall(s)]:
        ret = ret.union(set([float(x) for x in r.split('-') if x]))
    return ret

def sub(s, newi):
    for m in [m for m in p.finditer(s)]:
        for r in [m.regs[2], m.regs[5]]:
            if r[0] < 0: continue
            s = s[:r[0]] + str(newi[float(s[r[0]:r[1]])]) + s[r[1]:]
    return s


f = open(sys.argv[1], "r+")
ls = [l for l in f]
xs = set.union(*[extract(l) for l in ls])
newi = dict(zip(sorted(xs), range(len(xs)+1)[1:]))
for l in ls:
    sys.stdout.write(sub(l, newi))

Desde el manual del proyector (puede leerlo con texdoc beamer), la siguiente superposición

begin{itemize}
item<1-> Apple
item<2-> Peach
item<3-> Plum
item<4-> Orange
end{itemize}

es igual a

begin{itemize}
item<+-> Apple
item<+-> Peach
item<+-> Plum
item<+-> Orange
end{itemize}

En el caso de un orden no secuencial, puede escribir un nuevo comando y usar setcounter y addtocounter. (Lo siento por no señalar un ejemplo, no pude encontrar uno).

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *