2009-09-04 9 views
11

Mam funkcję, której używam, która zwraca ciąg kodu latexowego. Muszę wygenerować z tego obraz. Większość metod, które widziałem, sugeruje wywoływanie zewnętrznej aplikacji przez podprogram podprocesowy, który wygeneruje dla mnie obraz.Konwersja kodu lateksu na obrazy (lub inny format wyświetlania) za pomocą Pythona

Jednak kierownictwo nie jest tym zainteresowane, ponieważ będzie wymagało od zewnętrznych użytkowników zainstalowania dodatkowego oprogramowania oprócz naszego własnego, które z naszą bazą użytkowników nie jest czymś, co możemy uznać za proste zadanie.

Czy są więc jakieś biblioteki Pythona, które wykonają zadanie pobrania lateksu do formatu (takiego jak plik obrazu), który można wyświetlić w GUI?

+2

Chcesz renderowania kodu LaTeX, lub po prostu wyświetlić źródło? Jeśli ci pierwsi, strzeżcie się, że reimplementacja TeX-a w Pythonie jest szalona. – user57368

+0

Muszę wyświetlać renderowany lateks.Jeśli pomaga to w wyjaśnieniu, muszę wyświetlać wyrenderowane równania matematyczne, a nie całe dokumenty. –

Odpowiedz

0

Będziesz musiał użyć LaTeX, aby przetworzyć ciąg. Proces renderowania LaTex/TeX jest bardzo zaangażowany (zwykle wymaga 100 + MB pakietu do wykonania pracy), po prostu nie będziesz w stanie wrzucić do małego modułu Pythona, aby wykonać pracę.

0

jeśli jest to tylko równania matematyczne, które trzeba, prawdopodobnie będziesz mieć więcej szczęścia ze znalezieniem renderujący MathML w Pythonie. Ten page może dostarczyć pewnych wskazówek, w tym niektórych tłumaczy lateksu-matematyki.

10

ta odpowiedź nie mogła być dostępne w momencie, gdy padło pytanie, ale dodam go do tych, którzy szukają rozwiązania, jak od 2015

można użyć matplotlib.pyplot do renderowania równanie na wykresie z osi, a następnie ręcznie usuń osie. Można również wygenerować lateksu z 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() 

testowane sympy 0.7.6 i matplotlib 1.4.3

+0

Ale pyplot używa własnego renderera LaTeX, który nie zawsze jest największy (w porównaniu do prawdziwego LaTeXa). Będzie działać bez instalacji LaTeX-a, co może być plusem. – asmeurer

9

SymPy posiada wbudowaną funkcję podglądu, która to robi.

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

generuje

enter image description here

Istnieje lots of optionspreview aby zmienić format na wyjściu (na przykład, jeśli nie podoba ci się czcionki Eulera można ustawić euler=False).

preview akceptuje również ciąg LaTeX zamiast wyrażenia SymPy jeśli masz że

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

enter image description here

Powiązane problemy