Symphy/Ipython何时自动为系数下标以显示?
下面我展示了Symphy/IPython在显示之前向Symphy/Ipython何时自动为系数下标以显示?,python,sympy,Python,Sympy,下面我展示了Symphy/IPython在显示之前向a0的乳胶添加下标。我试着查看源代码,但找不到这是在哪里完成的? 理想情况下,我希望能够访问此latex字符串变量来修改或至少停止此行为,以便手动处理所有下标 相反,变量an和a1的行为直接。an的latex只是字符串,a1维护我手动给它的下标 来自sympy导入的* a0,an,a1=符号('a0 an a_1') 从IPython.core.interactiveshell导入interactiveshell 显示(InteractiveS
a0
的乳胶添加下标。我试着查看源代码,但找不到这是在哪里完成的?
理想情况下,我希望能够访问此latex字符串变量来修改或至少停止此行为,以便手动处理所有下标
相反,变量an
和a1
的行为直接。an
的latex只是字符串,a1
维护我手动给它的下标
来自sympy导入的*
a0,an,a1=符号('a0 an a_1')
从IPython.core.interactiveshell导入interactiveshell
显示(InteractiveShell.instance().display_formatter.format(a0))
显示(InteractiveShell.instance().display_formatter.format(an))
显示(InteractiveShell.instance().display_formatter.format(a1))
印刷品(乳胶(a0))
印刷品(乳胶(an))
打印(乳胶(a1),“\n”)
打印(str(a0))
打印(str(an))
打印(str(a1))
显示器(a0)
显示(an)
显示器(a1)
我对这种行为感到困惑的例子
我可以制作一个变量xh
,其中print(xh)
给出'xh',但是latex(xh)
给出x{h}
(因此显示将产生一个下标),就像上面的a1
一样。或者,我如何才能阻止这种行为?如果我希望变量a1
带有latex(a1)
给出a1
而不是a1
,该怎么办
其他信息
IPython 7.20.0、SymPy 1.7.1、Python 3.8.8
我的上下文以编程方式处理大量sympy变量的左下标和右下标,这种自动行为正在妨碍我。然而,我认为就其本身而言,讨论上述行为是合理的
编辑:添加了变量的
str()
和latex()
。增加了额外的部分,用一个例子解释我的理解不足。回答我自己的问题,我认为这种行为来自split\u super\u sub()
。文件指出,以下是“所有打印机通用的一些实用约定”的一部分
在:
从sympy.printing.conventions导入拆分超级子
打印(拆分超级子(“a0”))
打印(拆分超级子系统(“an”))
输出:
('a',[],['0'])
(‘安’、[]、[])
编辑的附加注释:
在我的例子中,现在我可以在
init\u打印旁边编写一个自定义split\u super\u sub
和一个自定义LatexPrinter
(latex\u printer=
来更改我代码中的打印行为symbols
函数支持范围索引,如symbols('a1:4'))
。文档专门将此链接到冒号的使用,符号('a:4')
,但是符号('a1')
可能是其子类。符号
是一个复杂的函数,需要一个或多个字符串并生成多个带有各种范围快捷方式的Symbol
对象。谢谢,这是有意义的。但是,symbols创建了这些“索引”变量,这些变量与indexed()
创建的变量不同,我想知道区别在哪里。下标存储在哪里?它不在str()中显示的字符串中python变量a0
是一个symphy.Symbol
对象,它是更基本的symphy
类的子类。str
(和repr
)是由类定义的,只是一个字符串显示。它不显示对象的所有属性。显然,a0
和a1
之间存在潜在的差异,即使latex显示类似。如何sympy
显示其对象是一个复杂的主题。这是有意义的,我如何创建其他变量像这样的es?有没有一种方法可以在不更改str
的情况下更改latex显示?例如,我可以创建一个变量xh
,其中print(xh)
给出“xh”,但latex(xh)
给出x{h}
(因此显示将生成一个下标)。此外,如果我希望变量a1
与latex(a1)一起使用,如何停止这种行为
givinga1
?您的评论已经超出了原来的问题。我认为您需要学习sympy
文档,例如printing
部分,其中包括latex
部分。这也是学习文档的替代品。