我希望在乳胶中得到p__s_alpha = 1/k * Product(a_0,(i,1,O))
的表达式。我用:
print sympy.latex(p__s_alpha)
当我在结果上运行乳胶时,我得到以下等式:
但是,我想打印这个等式:
有没有办法保持表达式的表示形式?
答案 0 :(得分:2)
我开始写一个关于如何制作自己的自定义打印机的答案,但是我意识到latex
中已经有一个选项可以满足您的需要,long_frac_ratio
选项。如果该比率足够小,则任何足够小的分数都将打印为1/b*a
而不是a/b
。
In [31]: latex(p__s_alpha, long_frac_ratio=1)
Out[31]: '\\frac{1}{k} \\prod_{i=1}^{O} a_{0}'
如果您感兴趣,以下是我要编写的关于编写自定义打印机的一些内容:
在内部,SymPy不区分a/b
和a*1/b
。它们都由完全相同的对象表示(参见http://docs.sympy.org/latest/tutorial/manipulation.html)。
然而,打印系统是不同的。从该页面可以看出,a/b
表示为Mul(a, Pow(b, -1))
,即a*b**-1
,但是打印机将其转换为分数格式(这适用于任何打印机,而不是只是LaTeX一个)。
对你而言,好消息是SymPy中的打印系统非常易于扩展(另一个好消息是SymPy是BSD开源的,所以你可以自由地重用已经存在的打印逻辑来扩展它)。要创建满足您需要的自定义LaTeX打印机,您需要在LatexPrinter
中创建sympy.printing.latex
子类并覆盖_print_Mul
函数(因为如上所述,a/b
是{ {1}})。这个函数中的逻辑并没有真正模块化,所以你真的需要复制整个source并更改它的相关部分[如上所述,对于这个,已经有一个选项,做你想做的,但在其他情况下,可能没有]。
最后一点,如果你做一个可能需要修改的更广泛的观众,我们很乐意让你把它作为拉动请求提交给SymPy。