是否有任何python代码允许采用乳胶代码(方程式)并将其解析为mathml或svg代码?将字符串(乳胶代码)作为参数并输出字符串(svg或mathml代码)的简单函数将是完美的。
PS。我发现了这个http://svgkit.sourceforge.net/SVGLaTeX.html,但这是一个基于网络的项目,不知道如何使用它。
编辑:或者用任何语言(非强制性的python),或者至少是一个可以通过命令行执行的exe文件(不需要安装其他东西)。答案 0 :(得分:4)
您可以在不安装任何内容的情况下执行此操作:
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的文本(试一试)。
请注意,与依赖第三方网络应用的任何解决方案一样,
这假设您有可靠的互联网连接
其性能取决于连接和服务器的速度
这依赖于第三方网站保持一致(如果他们将其删除,或者格式发生重大变化,如果不进行调整,这将不再有效)
答案 1 :(得分:2)
关于SVGLaTeX:
我会说你可以在你的计算机上使用它作为python脚本(非基于web)[编辑:不是这样],但它没有满足你的要求'没有安装额外的东西'因为我认为你是需要乳胶分销。
关于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行):
from subprocess import call
import sys, re
if not len(sys.argv) == 2:
print "usage: tex2svg input_file.tex"
exit(1)
tex_name = sys.argv[1]
svg_name = tex_name[:-4] + ".svg"
ps_name = tex_name[:-4] + ".ps"
dvi_name = tex_name[:-4] + ".dvi"
if call(["latex", tex_name]): exit(1)
if call(["dvips", "-q", "-f", "-e", "0", "-E", "-D", "10000", "-x", "1000", "-o", ps_name, dvi_name]): exit(1)
if call(["pstoedit", "-f", "plot-svg", "-dt", "-ssp", ps_name, svg_name]): exit(1)
答案 2 :(得分:2)
我的解决方案是使用latex
生成DVI文件,然后使用dvisvgm
将dvi转换为svg:
latex file.tex
#products file.dvi dvisvgm --no-fonts file.dvi file.svg
#--no-fonts:仅使用SVG路径根据我的经验,最终的svg完全按照需要呈现(使用InkScape或QSvgRenderer)。
我使用的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}
答案 3 :(得分:2)
我知道两种解决方案,两者都在某个时候为我服务,并且对我来说效果很好。我按照我的个人喜好顺序提供它们。
这是我首选的解决方案,因为它允许combine SVG generated LaTeX with other SVG objects without messing them up。
import latextools
import drawSvg as draw # pip3 install drawSvg
# Render latex
latex_eq = latextools.render_snippet(
r'$\sqrt{X^\dag}$',
commands=[latextools.cmd.all_math])
svg_eq = latex_eq.as_svg()
# Use the rendered latex in a vector drawing
d = draw.Drawing(100, 100, origin='center', displayInline=False)
d.append(draw.Circle(0, 0, 49, fill='yellow', stroke='black', stroke_width=2))
d.draw(svg_eq, x=0, y=0, center=True, scale=2.5)
d.saveSvg('vector.svg')
d.savePng('vector.png')
打算使用更多的命令行工具,而不是PyPi上的命令行工具(您必须下载文件),但是通过稍作修改即可完全以编程方式工作。
from latex2svg import latex2svg
out = latex2svg(r'\( e^{i \pi} + 1 = 0 \)')
print(out['depth']) # baseline position in em
print(out['svg']) # rendered SVG