2016-11-19 7 views
1

SymPyでシンボリックな計算をしようとしていますが、ラテックス印刷を使用できず、必要なグラフィック出力が得られません。それはいつも私に悩まされていて、オブジェクトの印刷方法をカスタマイズする方法を細かくしようと数時間(たぶん数日)を費やしてきました(LaTeXではpprint表現でよく書かれています)。SymPy印刷専用関数名

しかし、この場合、x、y、zに依存する未定義関数psiで記号計算をしようとしています。しかし、これらの計算は、psi * \ vec rのカールの3倍までの項を意味する。

私は、次のコードを持っている場合には、あなたがそれに慣れていない、

init_printing(use_latex=True) 

R = ReferenceFrame(r"E", variables=["x", "y", "z"]) 
psi = Function(r"\psi")(R[0], R[1], R[2]) 
rpsi = (R[0]*R.x + R[1]*R.y + R[2]*R.z)*psi 

R[i]は、i番目の変数(X、YまたはZ)でありR.xR.yR.zでありますReferenceFrame(sympy.physicsの関数)への呼び出しでインスタンス化された単体デカルトベクトルです。

例えば、出力は "\ psi(x、y、z)"(ラテックスでコンパイルされ、画像として示されている)でいっぱいになっています。表現。

コンパイルされたラテックス文字列をカスタマイズする方法はありますか(私が行っている他の計算にも当てはまります)。それが不可能な場合、どのようにしてこの問題を解決できますか(つまり、関数が印刷されるたびに表示される独立変数)。

私はqtconsoleでjupyterを使用しています。

乾杯は、

答えて

1

最も簡単な方法は、あなたが望むよう印刷したカスタム関数を作成することです。これは、Functionをサブクラス化し、_latexhttp://docs.sympy.org/latest/modules/printing.html#sympy.printing.latex.LatexPrinter.printmethodを参照)を定義することで実現できます。

In [33]: class psi(Function): 
    ....:  def _latex(self, printer): 
    ....:   return r'\psi' 
    ....: 

In [34]: latex(psi(x, y, z)) 
Out[34]: '\\psi' 

あなたは、引数を印刷self.argsでそれらにアクセスして(例えば、通常のプリンタはr'\phi{\left (' + ', '.join(printer._print(i) for i in self.args) + '\right)}'ようなものになるだろう)printer._printを使用したい場合。

+0

ありがとうございます。それは難しいことではないことが分かっていましたが、ドキュメントやソースコードで数時間後にはできませんでした。 – Sabian

+0

カスタムプリンタを書く上で、より良いドキュメントが本当に必要です。 – asmeurer