преобразование кода latex в код mathml или svg в python
есть ли код python, который позволяет взять код latex (для уравнений) и проанализировать его на mathml или svg-код ? Простая функция, которая принимает в качестве аргумента строку (код latex) и выводит строку (код svg или mathml), была бы идеальной.
PS. Я нашел это http://svgkit.sourceforge.net/SVGLaTeX.html но это веб-проект и не уверен, как его использовать.
EDIT: или на любом языке (не обязательно python), или, по крайней мере, exe-файл, который можно просто выполнить с помощью командной строки, чтобы сделать это (без установки дополнительных вещей).
3 ответов
вы можете сделать это, не устанавливая ничего:
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 (попробуйте).
обратите внимание, что, как и любое решение, основанное на сторонних веб-приложениях,
это предполагает, что у вас есть надежное подключение к интернету
производительность зависит от скорости вашего подключения и сервер
Это зависит от стороннего сайта, чтобы оставаться последовательным (если они снимут его или формат значительно изменится, это больше не будет работать без корректировки)
О SVGLaTeX:
Я бы сказал, что вы можете использовать его в качестве скрипта python на своем компьютере (без веб-интерфейса) [edit: not as it is], но он не выполняет ваше требование "без установки дополнительных материалов", так как я думаю, что вам понадобится дистрибутив latex.
о MathML против SVG:
преобразование Latex в mathml (я мог найти только веб-решения) отличается от преобразования LateX в SVG, в том смысле, что mathml больше похож на описание математики источник, такой как LateX source, и SVG-это формат для хранения уравнений набора, например PDF.
производство SVG из LateX-гораздо более сложный процесс, чем преобразование LaTeX в MathML, первый (насколько мне известно) всегда в конечном итоге использует программу Knuts TeX. Поэтому, если вы не устанавливаете LateX [edit: или используете его удаленно], вам придется конвертировать в MathML. [Надеюсь, кто-то еще знает инструмент для этого. Я не знаком с JavaScript. Можно ли от него убежать? консоль?].
изменить:
скрипт Python для создания SVG из LateX (по строке 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)
мое решение-использовать latex
для создания файла DVI, а затем использовать dvisvgm
для преобразования dvi в svg:
-
latex file.tex
# создает файл.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}