自定义 SymPy 的正无穷大 LaTeX 表示形式以显示 +\infty

问题描述 投票:0回答:1

我注意到在 SymPy 中,正无穷大的默认 LaTeX 表示形式是 \infty。我正在寻找一种方法来自定义此表示以显示 +\infty 。

我探索过这里 https://docs.sympy.org/latest/modules/printing.html sympy.printing.pretty.pretty_symbology,它将 SymPy 对象映射到它们各自的 LaTeX 表示形式。 但是,我找不到修改无穷大符号表示的方法。

SymPy 中是否有特定的配置或设置允许用户自定义正无穷大的 LaTeX 表示?

sympy pretty-print
1个回答
0
投票

您的问题提到 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

© www.soinside.com 2019 - 2024. All rights reserved.