在python中将latex代码转换为mathml或svg代码

在python中将latex代码转换为mathml或svg代码,python,parsing,svg,latex,mathml,Python,Parsing,Svg,Latex,Mathml,是否有任何python代码允许获取latex代码(用于方程)并将其解析为mathml或svg代码?一个以字符串(latex代码)作为参数并输出字符串(svg或mathml代码)的简单函数将是完美的 另外,我发现了这个,但它是一个基于网络的项目,不知道如何使用它 编辑:或使用任何语言(不是强制性的python),或至少是一个exe文件,可以通过命令行执行(无需安装其他东西)。关于SVGLaTeX: 我想说的是,你可以在你的计算机上使用它作为python脚本(非基于Web的)[编辑:不按原样使用],

是否有任何python代码允许获取latex代码(用于方程)并将其解析为mathml或svg代码?一个以字符串(latex代码)作为参数并输出字符串(svg或mathml代码)的简单函数将是完美的

另外,我发现了这个,但它是一个基于网络的项目,不知道如何使用它

编辑:或使用任何语言(不是强制性的python),或至少是一个exe文件,可以通过命令行执行(无需安装其他东西)。

关于SVGLaTeX:

我想说的是,你可以在你的计算机上使用它作为python脚本(非基于Web的)[编辑:不按原样使用],但它“不安装额外的东西”就不能满足你的要求,因为我认为你需要一个latex发行版

关于MathML与SVG:

将Latex转换为mathml(我只能找到基于Web的解决方案)不同于将Latex转换为SVG,因为mathml更像是对数学源(如Latex源)的描述,而SVG是存储排版方程(如PDF)的格式

从LateX生成SVG比将LateX转换为MathML复杂得多,前者(据我所知)最终总是使用Knuts-TeX程序。因此,如果您没有安装任何LateX[编辑:或远程使用],则必须转换为MathML。[希望其他人知道它的工具。我不熟悉JavaScript。它可以从控制台运行吗?]

编辑:

从LateX生成SVG的Python脚本(沿着SVGLatex/eqtexsvg的路线):


您可以在不安装任何设备的情况下执行此操作:

import urllib
import urllib2

def latex2svg(latexcode):
    """
    Turn LaTeX string to an SVG formatted string using the online SVGKit
    found at: http://svgkit.sourceforge.net/tests/latex_tests.html
    """
    txdata = urllib.urlencode({"latex": latexcode})
    url = "http://svgkit.sourceforge.net/cgi-bin/latex2svg.py"
    req = urllib2.Request(url, txdata)
    return urllib2.urlopen(req).read()

print latex2svg("2+2=4")
print latex2svg("\\frac{1}{2\\pi}")
该脚本调用您提到的SVGKit服务器,该服务器负责将LaTeX转换为SVG。它返回SVG的文本(试用)

请注意,与任何依赖第三方web应用程序的解决方案一样

  • 这假定您有可靠的internet连接

  • 它的性能取决于连接和服务器的速度

  • 这依赖于第三方网站保持一致性(如果他们将其删除,或格式发生重大变化,如果不进行调整,这将不再有效)


  • 我的解决方案是使用
    latex
    生成DVI文件,然后使用将DVI转换为svg:

  • latex file.tex
    #生成file.dvi
  • dvisvgm--无字体文件.dvi文件.svg
    #--无字体:仅使用svg路径
  • 根据我的经验,最终的svg完全按照需要呈现(使用InkScape或QSVGrender)

    我使用的LaTeX模板如下所示:

    \documentclass[paper=a5,fontsize=12pt]{scrbook}
    \usepackage[pdftex,active,tightpage]{preview}
    \usepackage{amsmath}
    \usepackage{amssymb}
    \usepackage{amsfonts}
    \usepackage{tikz}
    \begin{document}
    \begin{preview}
    \begin{tikzpicture}[inner sep=0pt, outer sep=0pt]
    \node at (0, 0) {texCode}; % <--Put your tex-code here
    \end{tikzpicture}
    \end{preview}
    \end{document}
    
    \documentclass[paper=a5,fontsize=12pt]{scrbook}
    \usepackage[pdftex,活动,紧页]{preview}
    \usepackage{amsmath}
    \usepackage{amssymb}
    \usepackage{amsfonts}
    \usepackage{tikz}
    \开始{document}
    \开始{预览}
    \开始{tikzpicture}[内部sep=0pt,外部sep=0pt]
    
    \位于(0,0){texCode}的节点;% 我知道两种解决方案,它们在某个时候都对我有用,对我来说都很好。我按照个人喜好的顺序提供它们

    选项1-图书馆 这是我的首选解决方案,因为它允许

    导入最新工具
    将drawSvg作为draw导入#pip3安装drawSvg
    #渲染乳胶
    latex_eq=latextools.render_片段(
    r'$\sqrt{X^\dag}$',
    commands=[latextools.cmd.all\u math])
    svg_eq=latex_eq.as_svg()
    #在矢量图形中使用渲染的乳胶
    d=draw.Drawing(100100,origin='center',displayInline=False)
    d、 追加(画圈(0,0,49,填充为黄色,笔划为黑色,笔划宽度为2))
    d、 绘制(svg_eq,x=0,y=0,中心=True,比例=2.5)
    d、 saveSvg('vector.svg')
    d、 savePng('vector.png')
    
    创造

    选项2-图书馆 更多的是作为命令行工具,PyPi上没有(您必须下载该文件),但只需稍加修改即可完全以编程方式工作

    从latex2svg导入latex2svg
    out=latex2svg(r'\(e^{i\pi}+1=0\)
    打印(输出['depth'])#em中的基线位置
    打印(输出['svg'])#渲染svg
    

    输出

    当您说“不安装其他东西”-您是否已经安装了LaTeX?(例如,你能在命令行上运行pdflatex吗?)我没有安装latex,我更喜欢一个不需要安装latex发行版就可以完成的工具(除非不可能)。如果我安装了latex发行版,如何在我的计算机上将其用作python脚本?SVGLaTeX包含一个python脚本,但不幸的是,它似乎并不完全接受一个latex文件并保存一个svg文件。因此,我将其剥离,并在我的答案中添加了一些python行。基本上它称为latex、dvips和pstoedit。可以只使用shell脚本。您可以保存它并使用一个参数调用它,即您的latex文件。它将为您提供一个svg文件,该文件的名称与latex文件的名称相同,只是.svg而不是.tex。当我尝试执行您的代码时,会出现以下错误:C:\Users\TheUser\Desktop>tex2svg.py input.tex Traceback(最后一次调用):文件“C:\Users\TheUser\Desktop\tex2svg.py”,第13行,if调用([“latex”,tex\u name]):退出(1)文件“C:\Python26\lib\subprocess.py”,第444行,在调用return Popen(*popenargs,**kwargs)中。wait()文件“C:\Python26\lib\subprocess.py”,第595行,在init errread,errwrite)文件“C:\Python26\lib\subprocess.py”,第821行,在\u execute\u child startupinfo)窗口错误:[错误2]由于您的错误,指定的文件找不到。我想说,它要么抱怨找不到文件“input.tex”,要么抱怨找不到程序“latex”。我在linux中运行了该脚本,然后它工作了(在当前目录中安装了input.tex并安装了latex)。您可以尝试将脚本中的“latex”替换为“C:\\latex.exe“(替换…到你有latex的地方)很好的临时解决方案,当然如果我们不需要internet连接来进行转换会更好,但现在还可以。谢谢。很好。不过,每个解决方案都需要使用internet连接或安装latex。A
    \documentclass[paper=a5,fontsize=12pt]{scrbook}
    \usepackage[pdftex,active,tightpage]{preview}
    \usepackage{amsmath}
    \usepackage{amssymb}
    \usepackage{amsfonts}
    \usepackage{tikz}
    \begin{document}
    \begin{preview}
    \begin{tikzpicture}[inner sep=0pt, outer sep=0pt]
    \node at (0, 0) {texCode}; % <--Put your tex-code here
    \end{tikzpicture}
    \end{preview}
    \end{document}