ユーザーは、Tkinter Entry Widgetなどのテキストボックスに数式を入力し、式をsymbolabに入力したときと同じ方法で表示するGUIを作成する予定です。PythonがリアルタイムでLaTexをテキストボックスに表示することは可能ですか?
これは可能ですか?もしそうなら、これを達成するためにどのモジュールを使用しなければなりませんか?
ユーザーは、Tkinter Entry Widgetなどのテキストボックスに数式を入力し、式をsymbolabに入力したときと同じ方法で表示するGUIを作成する予定です。PythonがリアルタイムでLaTexをテキストボックスに表示することは可能ですか?
これは可能ですか?もしそうなら、これを達成するためにどのモジュールを使用しなければなりませんか?
を使用してラテックスとレンダリング画像の代わり
エントリウィジェットに何かを入力し、Enterキーを押します。
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
matplotlib.use('TkAgg')
from Tkinter import *
from ttk import *
def graph(text):
tmptext = entry.get()
tmptext = "$"+tmptext+"$"
ax.clear()
ax.text(0.2, 0.6, tmptext, fontsize = 50)
canvas.draw()
root = Tk()
mainframe = Frame(root)
mainframe.pack()
text = StringVar()
entry = Entry(mainframe, width=70, textvariable=text)
entry.pack()
label = Label(mainframe)
label.pack()
fig = matplotlib.figure.Figure(figsize=(5, 4), dpi=100)
ax = fig.add_subplot(111)
canvas = FigureCanvasTkAgg(fig, master=label)
canvas.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1)
canvas._tkcanvas.pack(side=TOP, fill=BOTH, expand=1)
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)
root.bind('<Return>', graph)
root.mainloop()
コードは、1怒鳴るなどのウィンドウを生成する必要があります
あなたは彼らのこのような素敵なインタフェースが十分ではないようにする場合。彼らはおそらく、ラテックスからUnicodeへの変換設定の平文のようなものを持っています。それとも、おそらく平文からUnicodeに直接変換するのですが、私はラテックスのような数式表現のためのパーサを認識していないので、すべてのルールを再コーディングしなければならないと思われます。ラテックスに重い持ち上げをさせ、次にラテックスをUnicode/Utf8にパースするか、あるいはすべての符号を扱うことができる符号化を解析します。
次に、要素の型(バイナリ演算子、変数、指数など)に基づいて各要素に独自の素敵なCSSクラスを割り当てる「余分な」(つまりdjangoとjinjaのテンプレート処理)にすべてをダンプしました。素敵に見え、まだコピーすることができる完全な数学の出力。
いずれにしても、この質問には非常に多くのことがありますが、簡潔で包括的な簡単な答えを与えることは実際には不可能です。
これはTeX出力ではありません。それは近似です。 @SeanAllred; –
;あなたは正しいです、それはより高速ですがオプションの少ないmatplotlibからのmathtextレンダリングです。 OPがLatexレンダリングを使用したい場合は、matplotlibのrc設定でtext.usetex:Trueを設定する必要があります。ありがとう。 – ljetibo
提案のカップル:
これは非常にエレガントではありませんが、これは実例(python2、raspbian)です。これは多数の中の1つの解決策ですが、ラテックスソースファイルからTkinterプログラムまでのすべてのステップを示しています。
from subprocess import call
import Tkinter
TEX = ( # use raw strings for backslash
r"\documentclass{article}",
r"\begin{document}",
r"$$a^2 + b^2 = c^2$$",
r"$$x=\frac{-b \pm \sqrt{b^2 - 4ac}}{2a}$$",
r"\end{document}",
)
with open('doc1.tex','w') as out_file:
for t in TEX:
out_file.write("%s\n" % t)
call(['latex','doc1.tex'])
call(['dvips','doc1.dvi','-o','doc1.ps'])
call(['gs','-sDEVICE=ppmraw','-dNOPAUSE','-dBATCH','-dSAFER','-sOutputFile=doc1.ppm','doc1.ps'])
root1 = Tkinter.Tk()
img1 = Tkinter.PhotoImage(file="doc1.ppm")
label1 = Tkinter.Label(root1, image=img1)
label1.pack()
root1.mainloop()
さまざまなバリエーションがあります。psの代わりにlatex to pdfをコンパイルします。他のイメージファイル形式を使用する。ライブラリPILを使用して他のフォーマットなどをサポートする
この解決方法もまた非常に非効率的です(私には分かりませんが、わかります)。たとえば、私のシステムでは、ppm
ファイルは1,5Mbです。方程式は大きなページの中央にも現れます(それは切り取る必要があります)。
改善が必要な場合でも、質問に答えて(LaTeXドキュメントをTkinterプログラムで表示する)、出発点を与える必要があります。
アプリケーション内でMathJaxを動作させることをお勧めします。TeXは大規模なディストリビューションです。 –
申し訳ありませんが、私はそれを確認します。 –