2009-09-04 18 views
11

Tengo una función que estoy consumiendo que devuelve una cadena de código de látex. Necesito generar una imagen a partir de esto. La mayoría de los métodos que he visto sugieren sugerir una aplicación externa a través del módulo subproceso que generará la imagen para mí.Conversión de código de látex a Imágenes (u otro formato visible) con Python

Sin embargo, la administración no está interesada en esto, ya que requerirá que los usuarios externos instalen software adicional además del nuestro que, con nuestra base de usuarios, no es algo que podamos asumir como una tarea simple.

Entonces, ¿hay bibliotecas de Python que lleven a cabo la tarea de tomar látex en un formato (como un archivo de imagen) que se puede visualizar en una GUI?

+2

¿Quieres hacer que el código LaTeX, o simplemente mostrar la fuente? Si lo primero, ten en cuenta que volver a implementar TeX en Python es una locura. – user57368

+0

Necesito mostrar el látex procesado.Si ayuda a aclarar, necesito mostrar ecuaciones matemáticas representadas, no documentos completos. –

Respuesta

0

Tendrá que usar LaTeX para procesar la cadena. El proceso de renderizar LaTex/TeX está muy involucrado (generalmente se necesita un paquete de más de 100 MB para hacer el trabajo), simplemente no vas a poder lanzar un pequeño módulo de python para realizar el trabajo.

0

si es sólo ecuaciones matemáticas que usted necesita, es probable que tenga mejor suerte para encontrar un procesador de mathml en Python. Este page podría proporcionar algunas pistas, incluidos algunos traductores de latex-mathml.

10

esta respuesta podría no haber estado disponible en el momento en que se hizo la pregunta, pero voy a añadir que para aquellos que buscan una solución a partir de 2015.

puede utilizar matplotlib.pyplot para hacer una ecuación en un gráfico con ejes, y luego eliminar los ejes manualmente. también puede generar el látex con sympy:

#!/usr/bin/env python2.7               

import matplotlib.pyplot as plt             
import sympy                  

x = sympy.symbols('x')               
y = 1 + sympy.sin(sympy.sqrt(x**2 + 20))           
lat = sympy.latex(y)                

#add text                  
plt.text(0, 0.6, r"$%s$" % lat, fontsize = 50)         

#hide axes                  
fig = plt.gca()                 
fig.axes.get_xaxis().set_visible(False)           
fig.axes.get_yaxis().set_visible(False)           
plt.draw() #or savefig               
plt.show() 

probado con sympy 0.7.6 y matplotlib 1.4.3

+0

Pero pyplot usa su propio procesador LaTeX, que no siempre es el mejor (en comparación con LaTeX real). Sin embargo, funcionará sin una instalación LaTeX, que puede ser un plus. – asmeurer

9

sympy tiene una función de vista previa orden interna que hace esto.

expr = sin(sqrt(x**2 + 20)) + 1 
preview(expr, viewer='file', filename='output.png') 

genera

enter image description here

Hay lots of options a preview para cambiar el formato de la salida (por ejemplo, si no te gusta el tipo de letra de Euler se puede establecer euler=False).

preview también acepta una cadena de látex en lugar de una expresión sympy si tiene que

preview(r'$$\int_0^1 e^x\,dx$$', viewer='file', filename='test.png', euler=False) 

enter image description here

Cuestiones relacionadas