преобразование кода 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 (попробуйте).

обратите внимание, что, как и любое решение, основанное на сторонних веб-приложениях,

  1. это предполагает, что у вас есть надежное подключение к интернету

  2. производительность зависит от скорости вашего подключения и сервер

  3. Это зависит от стороннего сайта, чтобы оставаться последовательным (если они снимут его или формат значительно изменится, это больше не будет работать без корректировки)


О 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:

  1. latex file.tex # создает файл.dvi
  2. 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}