我正在给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,尽管它似乎可以用符号表达式。有没有人对此有解释/修复/解决方法?谢谢!
答案 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)