在python中将latex代码转换为mathml或svg代码
是否有任何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的路线):在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的)[编辑:不按原样使用],
您可以在不安装任何设备的情况下执行此操作:
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应用程序的解决方案一样
我的解决方案是使用
latex
生成DVI文件,然后使用将DVI转换为svg:
latex file.tex
#生成file.dvidvisvgm--无字体文件.dvi文件.svg
#--无字体:仅使用svg路径\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}