2016-02-26 74 views
1

我想在qtconsole或使用pprint的終端中呈現簡單的代數表達式,但結果幾乎是誤導。這裏有一個小例子如何在sympy中正確渲染大圓括號?

from sympy import pprint, simplify, init_printing 
from sympy.abc import a, b 

init_printing() 
c = a - b**2 
pprint(simplify(c**2)) 
print(simplify(c**2)) 

我在這兩個jupyer qtconsole和的rxvt-unicode的終端嘗試此代碼,都無法正確顯示多級parenthsis。在終端上我會得到方括號應該是的矩形符號。 qtconsole更糟,因爲它不顯示parenthsis。

enter image description here

當表達式變得更加複雜,這是非常令人困惑。請讓我知道,如果我缺少的東西或如果sympy可以配置顯示更好。

回答

1

pprint使用Unicode字符默認打印括號,如

 2 
⎛  2⎞ 
⎝a - b ⎠ 

看來你qtconsole不使它們,這可能意味着你使用的是不支持他們的字體。

我的建議:

  • 安裝幻覺記憶國界單和您的qtconsole字體設置爲(見https://stackoverflow.com/a/18904744/161801)。根據我的經驗,DejaVu Sans Mono是SymPy使用的Unicode字符的最佳字體。

  • 在您的計算機上安裝LaTeX。如果在qtconsole中運行init_printing SymPy檢測到安裝了LaTeX,它將使用它進行數學渲染(pprint仍將呈現文本)。

如果沒有上面是一個選擇的解決方法是使用pprint(expr, use_unicode=False),這將只使用ASCII字符打印的表達。它看起來不太好,但它應該以任何等寬字體正確呈現。

+0

另一種選擇是使用筆記本,而不是qtconsole,它將使用MathJax來渲染數學(並且不需要安裝LaTeX)。 – asmeurer

+0

DejaVu字體解決了它的qt控制檯,所以我假設我的字體在終端可以用相同的方式修復。我喜歡筆記本的建議 - 它實際上符合我最好的預期目的,但它似乎也混淆了括號,儘管mathjax可用! –