2016-02-26 58 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可用! –