Sympy:修改衍生物的LaTeX输出

时间:2017-04-11 15:34:25

标签: python sympy

在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}

有没有办法强迫这种行为?

1 个答案:

答案 0 :(得分:3)

您可以继承LatexPrinter并定义自己的_print_DerivativeHere是当前的实施。

也许像

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]))

哪个像

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

要在Jupyter笔记本中使用它,请使用

init_printing(latex_printer=MyLatexPrinter().doprint)