2012-03-06 27 views
6

ラテックスコード(方程式)を取り、それをmathmlまたはsvgコードに解析するPythonコードはありますか?文字列(ラテックスコード)を引数とし、文字列(svgまたはmathmlコード)を出力する単純な関数は完璧です。Pythonでラテックスコードをmathmlまたはsvgコードに変換する

PS。私はこれを見つけたhttp://svgkit.sourceforge.net/SVGLaTeX.htmlしかしそれはウェブベースのプロジェクトとそれを使用する方法がわからない。

EDIT:または任意の言語(義務的なPythonでない)、または少なくともコマンドラインで実行可能なexeファイル(追加のものをインストールせずに)。

SVGLaTeXについて
+0

- あなたはすでにラテックスがインストールされているのですか? (例えば、コマンドラインで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. 、サードパーティのWebアプリケーションに依存しているすべてのソリューションと同様に、ということ

      注意と

    2. これは、一貫性を維持するためにサードパーティのサイトに依存しています(サーバーをダウンさせるか形式が大幅に変更された場合、これは調整なしでは機能しなくなります)

  • +0

    素晴らしい一時的な解決策ですが、コンバージョンを行うにはインターネット接続は必要ありませんが、今は大丈夫です。ありがとう。 – shn

    +0

    しかし、すべてのソリューションは、インターネット接続を使用するかLaTeXをインストールするかのいずれかを伴います。結局のところ、*何かがLaTeXコードを解釈する必要があります(LaTeXのすべてをいくつかのPython関数にカプセル化できるわけではありません)。 –

    2

    :私はあなたのコンピュータ上のPythonスクリプトとして使用することができますと言うでしょう(非Webベース)[編集:それはないとして]

    が、それは、追加インストールすることなく、」あなたの要件を満たしていませんあなたがラテックスの配布が必要だと思っているからです。 SVG対のMathMLについて

    :(私は唯一のウェブベースのソリューションを見つけることができる)以上のラテックスのような数学のソースの説明のようにMathMLがあるという意味で、SVGにラテックスの変換に異なっているのMathMLにラテックスの変換

    SVGは、PDFのようなタイプセット方程式を格納する形式です。

    LateXからSVGを生成することは、LaTeXをMathMLに変換するよりはるかに複雑なプロセスです。私の知る限りでは、常に最終的にKnuts TeXプログラムを使用します。したがって、LateXをインストールしていないと[編集:またはリモートで使用する]場合は、MathMLに変換する必要があります。 [うまくいえば、誰かがそれのためのツールを知っていることを望みます。私はJavaScriptに精通していません。コンソールから実行できますか?]

    編集:(SVGLatex/eqtexsvgの線に沿って)ラテックスからSVGを作るために

    Pythonスクリプト:

    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スクリプトが含まれていますが、残念ながらlatexファイルを受け入れてsvgファイルを保存していないようです。だから私はそれを取り除き、私の答えにいくつかのpythonの行を追加しました。基本的にはラテックス、dvips、pstoeditを呼び出します。ちょうどシェルスクリプトを使用することができます。これを保存してラテックスファイルを1つの引数として呼び出すことができます。 .texの代わりに.svgというラテックスファイルと同じ名前のsvgファイルを提供します。 –

    +0

    C:\ Users \ TheUser \ Desktop> tex2svg.py input.tex トレースバック(最新のコール最後): "C:\ Users \ TheUser \ Desktop"ファイルを実行しようとすると、このエラーが発生します。 \ tex2svg.py "、行13、 call([" latex "、tex_name)):exit(1) ファイル" C:\ Python26 \ lib \ subprocess.py "、行444、コール リターン ファイル "C:¥Python26¥lib¥subprocess.py"、行595、__init__内 errread、errwrite) ファイル "C:\ Python26 \ lib \ subprocess"ファイル。 py "、行821、_execute_child startupinfo) WindowsError:[エラー2]指定されたファイルが見つかりません – shn

    2

    私のソリューションは、DVIファイルを生成し、SVGにDVIを変換するdvisvgmを使用するlatexを使用することです:

    1. latex file.tex位ファイルを生成します。--no-フォントDVI
    2. dvisvgm --no-fonts file.dvi file.svg#:のみ

    私の経験では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} 
    
    関連する問題