2009-09-04 5 views
11

J'ai une fonction que je consomme qui renvoie une chaîne de code latex. J'ai besoin de générer une image à partir de ça. La plupart des méthodes que j'ai vu pour le faire suggèrent d'appeler une application externe via le module sous-processus qui va générer l'image pour moi. Cependant, la direction n'aime pas cela, car elle exigera des utilisateurs externes qu'ils installent des logiciels supplémentaires en plus des nôtres, ce qui, avec notre base d'utilisateurs, n'est pas une tâche facile à réaliser.Conversion de code latex en Images (ou autre format displayble) avec Python

Y a-t-il donc des bibliothèques python qui vont accomplir la tâche de prendre du latex dans un format (tel qu'un fichier image) qui peut être affiché dans une interface graphique?

+2

Voulez-vous rendre le code LaTeX ou afficher uniquement la source? Si le premier, méfiez-vous que réimplémenter TeX en Python est fou. – user57368

+0

J'ai besoin d'afficher le latex rendu.Si cela aide à la clarification, j'ai besoin d'afficher des équations mathématiques rendues, pas des documents entiers. –

Répondre

0

Vous allez devoir utiliser LaTeX pour traiter des chaînes. Le processus de rendu de LaTex/TeX est très impliqué (il faut généralement un paquet de 100 Mo + pour faire le travail), vous n'allez pas pouvoir lancer un petit module python pour faire le travail.

0

S'il est seulement des équations mathématiques que vous avez besoin, vous aurez probablement plus de chance de trouver un moteur de rendu MathML en python. Ce page pourrait fournir quelques indices, y compris certains traducteurs latex-mathml.

10

cette réponse pourrait ne pas avoir été disponible au moment où on a posé la question, mais je vais l'ajouter pour ceux qui cherchent une solution à partir de 2015.

vous pouvez utiliser matplotlib.pyplot pour rendre une équation dans un graphe axes, puis supprimez les axes manuellement. vous pouvez également générer le latex avec 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() 

testé avec sympy 0.7.6 et Matplotlib 1.4.3

+0

Mais pyplot utilise son propre moteur de rendu LaTeX, qui n'est pas toujours le meilleur (comparé au vrai LaTeX). Il fonctionnera sans une installation LaTeX, cependant, ce qui peut être un plus. – asmeurer

9

sympy a une fonction de prévisualisation builtin qui fait cela.

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

génère

enter image description here

Il y a lots of options-preview de changer le format de la sortie (par exemple, si vous ne voulez pas la police Euler vous pouvez définir euler=False).

preview accepte également une chaîne de LaTeX au lieu d'une expression sympy si vous avez cette

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

enter image description here

Questions connexes