使用Python将乳胶代码转换为图像(或其他可显示格式)

时间:2009-09-04 22:04:56

标签: python latex

我有一个我正在消耗的函数,它返回一串乳胶代码。我需要从中生成一个图像。我所看到的大部分方法都建议通过 subprocess 模块调用外部应用程序,它将为我生成图像。

然而,管理层并不热衷于此,因为除了我们自己的软件之外,它还需要外部用户安装其他软件,而我们的用户群并不是我们可以认为是一项简单的任务。

那么是否有任何python库可以完成将乳胶转换为可在GUI中显示的格式(如图像文件)的任务?

7 个答案:

答案 0 :(得分:17)

SymPy有一个内置的预览功能,可以做到这一点。

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

生成

enter image description here

lots of optionspreview来更改输出的格式(例如,如果您不喜欢Euler字体,则可以设置euler=False)。

preview也接受LaTeX字符串而不是SymPy表达式(如果有的话)

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

enter image description here

答案 1 :(得分:12)

在提出问题时可能没有这个答案,但我会在2015年为那些寻求解决方案的人添加答案。

您可以使用matplotlib.pyplot在带有轴的图形中渲染方程式,然后手动移除轴。您还可以使用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()

使用sympy 0.7.6和matplotlib 1.4.3

进行测试

答案 2 :(得分:4)

看看mathtex

答案 3 :(得分:0)

您将需要使用LaTeX来处理字符串。渲染LaTex / TeX的过程非常复杂(它通常需要100 + MB的包来完成工作),你只是不能在一个小的python模块中完成工作。

答案 4 :(得分:0)

也许你可以使用这样的在线服务:http://www.codecogs.com/components/equationeditor/equationeditor.php


按照Joel A. Christophel的建议,这是一个类似网站的工作:http://arachnoid.com/latex/

答案 5 :(得分:0)

如果只是你需要的数学方程式,你可能会更好地在python中找到一个mathml渲染器。这个page可能会提供一些线索,包括一些latex-mathml翻译器。

答案 6 :(得分:0)

这是我经常使用的有点难看的解决方案,但我发现在很多情况下使用它最简单。

import matplotlib.pyplot as plt
import io
from PIL import Image, ImageChops

white = (255, 255, 255, 255)

def latex_to_img(tex):
    buf = io.BytesIO()
    plt.rc('text', usetex=True)
    plt.rc('font', family='serif')
    plt.axis('off')
    plt.text(0.05, 0.5, f'${tex}$', size=40)
    plt.savefig(buf, format='png')
    plt.close()

    im = Image.open(buf)
    bg = Image.new(im.mode, im.size, white)
    diff = ImageChops.difference(im, bg)
    diff = ImageChops.add(diff, diff, 2.0, -100)
    bbox = diff.getbbox()
    return im.crop(bbox)

latex_to_img(r'\frac{x}{y^2}').save('img.png')

请记住,它需要枕头和matplotlib。

pip install matplotlib pillow