Sympy的乳胶打印机,折叠短分数

时间:2016-08-08 20:26:46

标签: python latex sympy

我正在给sympy.latex一个涉及分数的字符串,我希望得到它的乳胶表示,分数“折叠”,即排版为3/2而不是\ frac {3} {2} 。我将fold_short_fractions关键字参数设置为True,但我得到的结果不一致:

>>> from sympy.parsing.sympy_parser import parse_exp
>>> from sympy import latex
>>>
>>> print(latex(parse_expr("3*x**2/y"))) # OK
\frac{3 x^{2}}{y}
>>> print(latex(parse_expr("3*x**2/y"), fold_short_frac=True)) # OK
3 x^{2} / y
>>>
>>> print(latex(parse_expr("3/2"))) # OK
\frac{3}{2}
>>> print(latex(parse_expr("3/2"), fold_short_frac=True)) # No!!
\frac{3}{2}

正如你所看到的,它拒绝折叠数字分数3/2,尽管它似乎可以用符号表达式。有没有人对此有解释/修复/解决方法?谢谢!

1 个答案:

答案 0 :(得分:0)

这是SymPy乳胶打印机中的一个错误。它没有查看有理数的fold_short_frac选项。我得到了修复here

与此同时,你可以使用它作为解决方法:

from sympy.printing.latex import LatexPrinter

class MyLatexPrinter(LatexPrinter):
    def _print_Rational(self, expr):
        if expr.q != 1:
            sign = ""
            p = expr.p
            if expr.p < 0:
                sign = "- "
                p = -p
            if self._settings['fold_short_frac']:
                return r"%s%d / %d" % (sign, p, expr.q)
            return r"%s\frac{%d}{%d}" % (sign, p, expr.q)
        else:
            return self._print(expr.p)

def latex(expr, **settings):
    return MyLatexPrinter(settings).doprint(expr)