2016-08-08 4 views
2

私は分数を含む文字列を送りますが、私は\ frac {3}ではなく3/2のように分数をつけたラテックス表現をしたいと思います。 {2}。私はTruefold_short_fractionsキーワード引数を設定するんだけど、私は取得していた結果が矛盾している:大丈夫のようですが、あなたが見ることができるようにSympyのラテックスプリンタ、短い分数を折り畳む

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

はLaTeXのプリンタのバグのように見えます。具体的には、有理数についてはこの設定を無視します。 – asmeurer

答えて

0

これはSymPy latexプリンタのバグです。有理数の場合は、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) 
関連する問題