SymPy
在记录我的符号表达式进行的所有操作方面做得非常出色。但在打印结果以便用于 LaTeX 输出时,我想强制执行某些项的特定排序。这只是为了惯例,并且不幸的是,该惯例并不是根据符号名称的字母顺序排列(就像 sympy
合理地做的那样)。
import sympy as sp
sp.init_printing()
U,tp, z, d = sp.symbols('U t_\perp z d')
# do many operations with those symbols
# the final expression is:
z+tp**2+U+U/(z-3*tp)+d
我的问题是SymPy
给出的表达式排序方式为
U + U/(-3*t_\perp + z) + d + t_\perp**2 + z
然而,在我的领域中,这种顺序并不是惯例。对于我们来说,z
必须是最左边的表达式,然后是 tp
,即使它是大写的,其次才是 U
,d
是最不相关的,应该放在右边。所有这些变量都具有特定的含义,这就是为什么我们按照这种顺序编写它们的原因,也是变量在代码中被命名的原因。
我不想将 z
重命名为 a
,如在Prevent Sympy from rearranging the equation 中建议的那样,然后在打印时将该 a
转换为 z
。在Force SymPy to keep the order of terms 中,有一个提示可以编写排序函数,但我找不到有关它的文档。