2016-08-08 50 views
2

Ich füttere eine Zeichenfolge, die Brüche enthält, und ich möchte seine Latexdarstellung mit Brüchen "gefaltet" erhalten, dh als 3/2 anstatt as \ frac {3} gesetzt {2}. Ich gründe die fold_short_fractions Stichwort Argument True, aber die Ergebnisse erhalte ich nicht sprechenSympy's Latexdrucker, kurze Fraktionen falten

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

Wie Sie sehen können, ist es die numerische Fraktion 3/2, falten sich weigert, obwohl es in Ordnung zu sein scheint mit symbolischen Ausdrücken. Hat jemand eine Erklärung/Lösung/Workaround dafür? Vielen Dank!

+0

Sieht aus wie ein Fehler im Drucker LaTeX. Insbesondere ignoriert es diese Einstellung für rationale Zahlen. – asmeurer

Antwort

0

Dies ist ein Fehler im SymPy-Latexdrucker. Es ist nicht die fold_short_frac Option für rationale Zahlen. Ich habe eine feste here.

In der Zwischenzeit können Sie dies als Abhilfe ist:

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)