2012-03-06 4 views
6

Есть ли код python, который позволяет брать латексный код (для уравнений) и анализировать его на математический или svg-код? Простая функция, которая принимает в качестве аргумента строку (латексный код) и выводит строку (код svg или mathml), была бы идеальной.Преобразование латексного кода в код mathml или svg в python

PS. Я нашел это http://svgkit.sourceforge.net/SVGLaTeX.html, но это веб-проект и не знаю, как его использовать.

EDIT: или на любом языке (не обязательно python) или, по крайней мере, exe-файл, который можно просто выполнить с помощью командной строки (без установки дополнительных файлов).

+0

Когда вы говорите «без установки дополнительного материала» - вы уже установили LaTeX? (Например, можно ли запустить pdflatex в командной строке?) –

+0

У меня нет установленного латекса, я предпочитаю инструмент, который может сделать это без необходимости установки латекса (если это невозможно). – shn

ответ

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. Его производительность зависит от скорости соединения и сервера

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

+0

Отличное временное решение, конечно, было бы намного лучше, если бы мы не нужно подключение к Интернету для преобразования, но сейчас все в порядке. Благодарю. – shn

+0

Отлично. Однако каждое решение будет связано либо с использованием интернет-соединения, либо с установкой LaTeX. В конце концов, * something * нужно интерпретировать код LaTeX (это не похоже на то, что вы можете инкапсулировать все LaTeX в несколько функций Python). –

2

О SVGLaTeX:

Я бы сказал, вы можете использовать его как питон скрипт на вашем компьютере (не webbased) [править: не как это], но он не выполняет ваши требования «без установки дополнительного вещи ", так как я думаю, вам понадобится распространение латекса.

О MathML против SVG:

Преобразование Латекс в MathML (я мог бы найти только интернет-решения) отличается от преобразования в LATEX SVG, в том смысле, что MathML больше похож на описание источника математики как LATEX source и SVG - это формат для хранения уравнений набора, например PDF.

Получение SVG из LateX является гораздо более сложным процессом, чем преобразование LaTeX в MathML, первое (насколько мне известно), в конечном счете, с использованием программы Knuts TeX. Поэтому, если вы не установите LateX [edit: или используйте его удаленно], вам придется преобразовать его в MathML. [Надеюсь, кто-то знает инструмент для этого. Я не знаком с JavaScript. Можно ли запустить консоль?].

Edit:

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) 
+0

Как использовать его в качестве скрипта python на моем компьютере, если у меня установлен дистрибутив латекса? (даже если я предпочитаю не устанавливать латекс). – shn

+0

SVGLaTeX содержит скрипт python, но, к сожалению, он, похоже, не совсем согласен с латексным файлом и сохраняет файл svg. Поэтому я разделил его и добавил некоторые строки python к моему ответу. В основном он вызывает латекс, dvips и pstoedit. Можно просто использовать сценарий оболочки. Вы можете сохранить его и называть его одним аргументом, вашим латексным файлом. Он предоставит вам файл svg с тем же именем, что и ваш латексный файл .svg вместо .tex. –

+0

Я получаю эту ошибку при попытке выполнить код: C: \ Users \ TheUser \ Desktop> tex2svg.py input.tex Traceback (последний последний звонок): Файл «C: \ Users \ TheUser \ Desktop \ tex2svg.py ", строка 13, в если вызов ([" latex ", tex_name]): exit (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, в _execute_child startupinfo) WindowsError: [Ошибка 2] Указанный файл не найден – shn

2

Мое решение заключается в использовании latex для создания файла DVI, а затем использовать dvisvgm для преобразования DVI для SVG:

  1. latex file.tex # производит файл.дви
  2. dvisvgm --no-fonts file.dvi file.svg # --no-шрифтов: использование 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} 
Смежные вопросы