2017-04-11 33 views
5

Sympyでは、latex()で関数の微係数を出力する方法を変更できますか?デフォルトはかなり面倒です。この:非常に冗長であるSympy:派生物のLaTeX出力を変更する

f = Function("f")(x,t) 
print latex(f.diff(x,x)) 

意志出力

\frac{\partial^{2}}{\partial x^{2}} f{\left (x,t \right)} 

。私が好きなものが好きなら、この動作を強制する方法はありますか?

f_{xx} 

+0

を使用し、Jupyterノートでそれを使用するには

>>> MyLatexPrinter().doprint(f(x, y).diff(x, y)) 'f_{x y}' >>> MyLatexPrinter().doprint(Derivative(x, x)) '\\frac{d}{d x} x' 

のように動作します

from sympy import Symbol from sympy.printing.latex import LatexPrinter from sympy.core.function import UndefinedFunction class MyLatexPrinter(LatexPrinter): def _print_Derivative(self, expr): # Only print the shortened way for functions of symbols function, *vars = expr.args if not isinstance(type(function), UndefinedFunction) or not all(isinstance(i, Symbol) for i in vars): return super()._print_Derivative(expr) return r'%s_{%s}' % (self._print(Symbol(function.func.__name__)), ' '.join([self._print(i) for i in vars])) 

のようなものは、それのように見えるが、チェックアウトしませんここにあるオプション:http://docs.sympy.org/latest/modules/printing.html#sympy.printing.latex.latex – csl

答えて

3

LatexPrinterをサブクラス化し、独自の_print_Derivativeを定義することができます。 Hereは現在の実装です。

たぶん

init_printing(latex_printer=MyLatexPrinter().doprint) 
+0

チャームのように働いた! Python2のサポートでは、 "function、* vars = expr.args"を "function、vars = expr.args [0]、expr.args [1:]"に変更しました。 – Eskil

+0

また、 'super()'を 'super(MyLatexPrinter、self)'に変更する必要があります。 – asmeurer

+0

これはPython2.7で動作しました。 – Eskil

関連する問題