2

p__s_alpha = 1/k * Product(a_0,(i,1,O))ラテックスでの表現を得たい。私が使う:

print sympy.latex(p__s_alpha)

結果に対して latex を実行すると、次の式が得られます。

正しくない

ただし、この方程式を印刷したい:

正しい

表現の表現をそのままにしておく方法はありますか?

4

1 に答える 1

2

これを行う独自のカスタムプリンターを作成する方法についての回答を書き始めましたが、これには、latex必要なことを行うオプション、オプションが既にあることに気付きlong_frac_ratioました。その比率が十分に小さい場合、十分に小さい分数は1/b*aの代わりにとして出力されa/bます。

In [31]: latex(p__s_alpha, long_frac_ratio=1)
Out[31]: '\\frac{1}{k} \\prod_{i=1}^{O} a_{0}'

興味のある方は、カスタム プリンターの作成について私が書こうとしていたことの一部を以下に示します。

内部的には、SymPy は と を区別しませa/ba*1/b。どちらもまったく同じオブジェクトで表されます ( http://docs.sympy.org/latest/tutorial/manipulation.htmlを参照)。

ただし、印刷システムは異なります。そのページからわかるように、は、つまり でa/b表されますが、これを分数形式に変換するのはプリンターです (これは、LaTeX プリンターだけでなく、どのプリンターにも当てはまります)。Mul(a, Pow(b, -1))a*b**-1

良いニュースは、SymPy の印刷システムが非常に拡張可能であることです (もう 1 つの良いニュースは、SymPy は BSD オープン ソースであるため、既存の印刷ロジックを拡張して自由に再利用できることです)。LatexPrinter必要な機能を備えたカスタム LaTeX プリンターを作成するには、関数をサブクラス化しsympy.printing.latexてオーバーライドする必要があります_print_Mul(上記のようにa/bは であるためMul)。この関数のロジックは実際にはモジュール的に分割されていないため、ソース全体をコピーして関連する部分を変更する必要があります [上で述べたように、これについては、必要なことを行うオプションが既にあります。 、しかし、それ以外の場合は、ない場合があります]。

最後に、より多くのユーザーが必要とするような変更を加えた場合は、プル リクエストとして SymPy に送信してください。

于 2013-10-01T22:06:50.203 に答える