2009-09-04 53 views
11

Tôi có chức năng mà tôi tiêu thụ sẽ trả về một chuỗi mã latex. Tôi cần phải tạo ra một hình ảnh từ này. Hầu hết các phương pháp tôi đã thấy để làm như vậy đề nghị gọi một ứng dụng bên ngoài thông qua các mô-đun subprocess mà sẽ tạo ra hình ảnh cho tôi. Tuy nhiên, quản lý không quan tâm đến điều này vì nó sẽ yêu cầu người dùng bên ngoài cài đặt phần mềm bổ sung ngoài cơ sở người dùng của chúng tôi, không phải là một nhiệm vụ đơn giản.Chuyển đổi mã latex thành Hình ảnh (hoặc định dạng hiển thị khác) bằng Python

Vì vậy, có thư viện python nào sẽ thực hiện nhiệm vụ đưa latex vào một định dạng (chẳng hạn như tệp hình ảnh) có thể hiển thị trong GUI không?

+2

Bạn có muốn làm cho mã LaTeX, hoặc chỉ hiển thị các nguồn? Nếu trước đây, hãy cẩn thận khi thực hiện lại TeX trong Python là điên rồ. – user57368

+0

Tôi cần hiển thị mủ cao su.Nếu nó giúp làm rõ, tôi cần hiển thị phương trình toán học được trả lại, không phải toàn bộ tài liệu. –

Trả lời

0

Bạn sẽ cần sử dụng LaTeX để xử lý thành chuỗi. Quá trình kết xuất LaTex/TeX rất có liên quan (thường mất một gói 100 MB để thực hiện công việc), bạn sẽ không thể gửi một mô-đun python nhỏ để hoàn thành công việc.

0

Nếu nó chỉ là phương trình toán học mà bạn cần, có thể bạn sẽ có may mắn hơn việc tìm kiếm một renderer MathML trong python. Điều này page có thể cung cấp một số manh mối, bao gồm một số dịch giả latex-mathml.

10

câu trả lời này có thể không đã có sẵn vào thời điểm đó khi câu hỏi được hỏi, nhưng tôi sẽ thêm nó cho những người tìm kiếm một giải pháp như của năm 2015.

bạn có thể sử dụng matplotlib.pyplot để render một phương trình trong một đồ thị với trục, và sau đó loại bỏ các trục bằng tay. bạn cũng có thể tạo ra mủ với 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() 

thử nghiệm với sympy 0.7.6 và Matplotlib 1.4.3

+0

Nhưng pyplot sử dụng trình kết xuất LaTeX của riêng nó, mà không phải lúc nào cũng lớn nhất (so với LaTeX thực). Tuy nhiên, nó sẽ hoạt động mà không cần cài đặt LaTeX, có thể là một điểm cộng. – asmeurer

9

SymPy có chức năng xem trước dựng sẵn mà thực hiện điều này.

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

tạo

enter image description here

lots of options-preview để thay đổi định dạng đầu ra (ví dụ, nếu bạn không thích font Euler bạn có thể đặt euler=False).

preview cũng chấp nhận một chuỗi LaTeX thay vì một biểu SymPy nếu bạn có

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

enter image description here

Các vấn đề liên quan