如何在ipython中使用sympy.pprint()进行漂亮的打印输出?

3
我正在尝试在Sympy中使用pprint()打印一个被我称为barphi的变量。我想要的是:
$\bar{\phi}$

当作 pprint(barphi) 打印时。
我尝试...
barphy = Symbol('\bar{phi}')

但是它不起作用。需要帮助吗?提前感谢。
2个回答

2

这个问题已经在SymPy邮件列表上回答了。

你写的代码有两个问题:

首先,Python会将字符串中的\ + 字符解释为转义字符。你字符串中的\b会被转换成退格符(详见https://en.wikipedia.org/wiki/ASCII#ASCII_control_code_chart)。

你需要要么对\进行转义,例如使用'\\bar{\\phi}$',或者更简单的方法是使用原始字符串,只需要在引号前面加上一个 r,如r'\bar{\phi}'

其次,如果你想显示LaTeX,使用pprint()是无法实现的(pprint只能美化文本)。你应该使用init_printing()来启用笔记本中的LaTeX打印功能。

最后,正如Julien Rioux在邮件列表中指出的那样,您只需命名符号为phibar,SymPy将自动将其呈现为\bar{\phi},如您在此处甚至可以在Unicode中看到的那样。
In [11]: Symbol('phibar')
Out[11]: φ̅

非常感谢@asmeurer的回答。但是在我的系统中,它的工作方式与您的不同,例如我没有在phi上方得到bar,如下所示:In [12]: pprint(Symbol('phibar')) phibarIn [13]: pprint(Symbol('phi')) φ - JuanM
你需要在支持Unicode的环境中完成这个任务,包括组合字符。别忘了运行 init_printing() - asmeurer

1
如果您仍想获取LaTeX代码而不是打印它,可以通过以下方式实现:
In [2]: from sympy.printing.latex import latex, translate

In [3]: latex(translate('phibar'),mode='inline')
Out[3]: '$\\bar{\\phi}$'

你可以在这里查看关于 LaTeX 函数的文档 here translate 函数的文档如下:
Check for a modifier ending the string.  If present, convert the
modifier to latex and translate the rest recursively.

Given a description of a Greek letter or other special character,
return the appropriate latex.

Let everything else pass as given.

>>> from sympy.printing.latex import translate
>>> translate('alphahatdotprime')
"{\\dot{\\hat{\\alpha}}}'"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接