我注意到在 SymPy 中,正无穷大的默认 LaTeX 表示形式是 \infty。我正在寻找一种方法来自定义此表示以显示 +\infty 。
我探索过这里 https://docs.sympy.org/latest/modules/printing.html sympy.printing.pretty.pretty_symbology,它将 SymPy 对象映射到它们各自的 LaTeX 表示形式。 但是,我找不到修改无穷大符号表示的方法。
SymPy 中是否有特定的配置或设置允许用户自定义正无穷大的 LaTeX 表示?
您的问题提到 Latex 和漂亮的打印:这是 SymPy 的两个独立功能。这个答案是关于 Latex 的:如果你需要修改漂亮的打印,它应该是类似的。
自定义打印的官方方法是通过对要修改的打印机进行子类化来创建新打印机。
from sympy import *
from sympy.printing.latex import LatexPrinter
class MyPrinter(LatexPrinter):
def _print_Infinity(self, v):
print("It never gets here!")
return r"+\infty"
def myprinter(expr, **settings):
return MyPrinter(settings).doprint(expr)
init_printing(latex_printer=myprinter, use_latex=True)
S.Infinity
但是,在这种情况下它不起作用,因为
sympy.core.numbers.Infinity
(代表+无穷大的类)定义了方法_latex
。
当
LatexPrinter
(或其子类)解析定义此方法的对象时,它会执行该方法,无论您是否在打印机上为该特定对象定义了自定义方法。我认为,情况不应该如此。请考虑在 Sympy 上提出问题。
因此,我们被迫重写特定类上的私有方法。方法如下:
from sympy import *
# you only need to do this once, after sympy is loaded
def my_infinity_latex(self, printer):
return r"+\infty"
S.Infinity.func._latex = my_infinity_latex
S.Infinity