Anidar sagetex en animate para gif tikz (y asíntota): ¿posible o imposible?

Anidar sagetex en animate para gif tikz (y asíntota): ¿posible o imposible?

Estoy ejecutando Windows 10 u 11 (no lo sé), tengo WSL2 ejecutándose en mi sistema - distribución Ubuntu y descargué SageMath en mi computadora. He establecido contacto con éxito entre los tres softwares y he podido ejecutar archivos .tex que contienen código Sage.

Desde la terminal de Ubuntu, ejecuto:

  1. cd /mnt/c/users/myname

  2. pdflatex filename.tex

  3. sage filename.sagetex.sage

  4. pdflatex filename.tex

Me gustaría hacer una animación TikZ (o asíntota, pero eso es más complicado y creo que probablemente requiera legítimamente el método Python mencionado a continuación) que se basa en matemáticas que están más allá de las capacidades de TeX, usando el paquete sagetex. Tengo problemas para que esto funcione y me gustaría recibir algún consejo. En el peor de los casos, sería crear un script de Python para reescribir todo el documento para cada fotograma, sin usar el paquete animate, y luego agregarlos usando ImageMagick o algo así, lo cual está bien si es necesario. Lo único que me importa es el producto; No me importa cuánto tiempo le toma a mi computadora hacerlo.

Aquí hay un ejemplo mínimo que no funciona:

\documentclass{beamer}
\usepackage{sagetex,animate,tikz}
\begin{document}
\begin{sageblock}
    f(x) = x
\end{sageblock}
\begin{animateinline}[palindrome]{1}
\multiframe{10}{x=0+1}{
\begin{tikzpicture}
\draw (0,0) -- (\sage{f(\x)},0);
\end{tikzpicture}}
\end{animateinline}
\end{document}

Por favor dígame; ¿Puedo hacer que esto funcione para tikz, o la opción de secuencia de comandos Python es la mejor manera de hacerlo? No creo que necesite preguntar si esto funcionaría para la asíntota, jajaja :)

¡Gracias!

Respuesta1

Su enfoque en el código anterior, utilizando el animatepaqueteen látexno funciona porque su código LaTeX incluye el código \sage{f(\x)}. Para que el sagetexpaquete funcione, su documento debe compilarse correctamente en el paso 2 ( pdflatex filename.tex). Dado que Sageno se ejecutará hasta el paso 3, y que el contenido/cálculo faltante es necesario para construir la trama en el paso 2, la compilación de LaTeX falla. Esa es la razón esencial por la que, en muchas de mis respuestas a sagetexproblemas, creo una cadena de código LaTeX que luego se inserta en el documento LaTeX en el paso 4. Por ejemplo, vea mi respuesta a¿Cómo se traza la función Riemann Zeta usando Tikz/Pgfplot?. Sin embargo, no veo cómo este enfoque puede funcionar con el animatepaqueteen látex. Creo que con mucho tiempo y esfuerzo podrías usar el animatecomando.en salviapara crear un .gif animado. Eso implicaría crear las imágenes de Tikz usando Sage junto con el animatecomandoen salvia. Su lista de objetos gráficos en el animatecódigo de Sage serían las imágenes de Tikz. Creo que esto aumentaría significativamente el tiempo y la complejidad en la creación del gif animado. Si fuera yo, construiría la animación usando el trazado de Sage junto con Sage "animate". Para ilustrar ese enfoque, vaya a laServidor celular sabio. Copie/pegue el código a continuación en el cuadro. Luego presione el botón 'Evaluar' como se muestra en la imagen. Verás a Sage ejecutar la animación.

def Rotate(A,P,degrees):
    A1 = [A[0]-P[0],A[1]-P[1]]
    theta = degrees*pi/180
    R = [A1[0]*cos(theta)-A1[1]*sin(theta), A1[0]*sin(theta)+A1[1]*cos(theta)]
    return [R[0]+P[0],R[1]+P[1]]

L=[]
for j in range(1,15):
    G = Graphics()
    N = j
    Start = [1,0]
    Finish = [0,0]
    Curve = [[1,0], [0,0]]
    n = 1

    while n<N:
        CurveR=[]
        for i in range(0,len(Curve)-1):
            CurveR += [Rotate(Curve[i],Curve[len(Curve)-1],-90)] 
        for i in range(len(CurveR)-1,-1,-1):    
            Curve += [CurveR[i]]
        n += 1
    G += line(Curve)
    L += [G.plot()]
d=animate([L[k]for k in range(1,14)],xmin=-22,xmax=87,ymin=-44,ymax=90,axes=False)

d.show(delay=100)

El resultado es la animación de la siguiente imagen:

ingrese la descripción de la imagen aquí

Puedes descargarlo gifhaciendo clic derecho sobre la imagen. Con respecto a tu código anterior, creo que este código se acerca más a lo que escribiste:

f(x)=x
L=[]
for j in range(0,15):
    G = Graphics()
    Curve = line([(0,0), (f(j),0)])

    G += Curve
    L += [G.plot()]
d=animate([L[k]for k in range(1,14)],xmin=0,xmax=15,ymin=0,ymax=2,axes=False)

d.show(delay=100)

Puedes ver el resultado al hacer clic derecho a continuación:

ingrese la descripción de la imagen aquí

Crear la animación usando solo Sage debería ser relativamente rápido y fácil. Para tener una animación de imágenes de Tikz, la línea L += [G.plot()]tendría que modificarse para incluir gráficos de Tikz png/pdf que ya se hayan creado (pasos adicionales) o que se hayan creado sobre la marcha (mucha codificación adicional). Así que sospecho que podrías adaptarte.animate en salviacrear una animación de imágenes de Tikz, pero eso es mucho más complicado y requiere mucho más tiempo.

información relacionada