ipython笔记本中几何代数的良好输出 短版
我能在ipython笔记本上打印出sympy几何代数对象的胶乳样式吗 较长版本 在ipython笔记本中几何代数的良好输出 短版,ipython,ipython-notebook,sympy,Ipython,Ipython Notebook,Sympy,我能在ipython笔记本上打印出sympy几何代数对象的胶乳样式吗 较长版本 在ipython笔记本中,我可以从sympy获得各种数学对象的漂亮打印。例如,如果mysympy变量是希腊字符,则输出会漂亮地打印为latex。(可能使用MathJax…)一个明确的示例: from sympy import symbols, init_printing init_printing(use_latex=True) alpha = symbols('alpha') alpha**2/3 输出是一个显示
ipython
笔记本中,我可以从sympy
获得各种数学对象的漂亮打印。例如,如果mysympy
变量是希腊字符,则输出会漂亮地打印为latex。(可能使用MathJax…)一个明确的示例:
from sympy import symbols, init_printing
init_printing(use_latex=True)
alpha = symbols('alpha')
alpha**2/3
输出是一个显示得很好的分数,上面有一个正确的上标和一个真正的alpha。太好了
但我也对几何代数模块做了很多工作,我希望得到类似的结果。显然,这个模块有一个不同的打印系统,名为latex\u ex
,当我从命令行运行脚本(如模块页面上的脚本)并让它们输出dvi文件时,它似乎可以工作。但我所做的一切都不能让GA在笔记本上看起来很好。有什么我能做的吗
具体来说,这里有一个具体的例子:
from sympy.galgebra.GA import *
metric = '1 0 0,0 1 0,0 0 1'
gamma_x,gamma_y,gamma_z = MV.setup('gamma_x gamma_y gamma_z',metric,True)
gamma_x
输出只是gamma_x
的repr
,这与
没有什么帮助。类似地,调用print
只会给我\u1*gamma\ux
,这正是我试图避免的
在脚本中,我可以在上面添加以下内容:
from sympy.galgebra.latex_ex import LatexPrinter, xdvi
LatexPrinter.format(1,1,1,1)
print gamma_x
xdvi(filename='testGA.tex')
这给了我期望的DVI和漂亮的latex表达式。当然,如果我在笔记本上做同样的事情,我绝对不会得到任何打印语句的输出,甚至那些不涉及GA对象的语句——实际上什么都没有,不仅仅是不漂亮的东西
我正在运行Python2.7.5和Sympy0.7.3,并使用iPython1.0下的笔记本
[编辑:下面是hackiness的更新版本]
由于工作方式发生了各种变化,我不得不做出各种变化。我收集了一个很好的例子
编辑:Hacky部分解决方案
实际上,我在使用当前版本的代码时遇到了一个非常难看的问题。下面的内容可以完成任务,但我非常不满意,因此我希望Alan的新版本模块将带来更好的结果。这主要是供参考的。但是基本的想法似乎是需要以某种方式定义sympy.galgebra.GA.MV.\u repr\u latex.
。任何对Symphy或ipython的工作有深入了解的人都欢迎发表评论
from sympy.galgebra.GA import *
metric = '1 0 0,0 1 0,0 0 1'
gamma_x,gamma_y,gamma_z = MV.setup('{\gamma}_x {\gamma}_y {\gamma}_z',metric,True)
def MVlatex(mv, *args) :
from re import sub
s = str(mv)
s = s.replace('*',r' ')
s = sub(r'(?<![}_a-zA-Z0-9])_1(?![a-zA-Z0-9])', r' ', s)
s = sub(r'__([a-zA-Z0-9]*)', r'^{\1}', s)
s = sub(r'_([a-zA-Z0-9]*)', r'_{\1}', s)
return '$$'+s+'$$'
sympy.galgebra.GA.MV._repr_latex_ = MVlatex
gamma_x
来自sympy.galgebra.GA导入*
度量值='10,01,01'
gamma_x,gamma_y,gamma_z=MV.setup('{\gamma}{\gamma}}{\gamma}}{\gamma}}{y}{\gamma}z',公制,真)
def MVlatex(mv,*参数):
来自再进口分公司
s=str(mv)
s=s.replace('*',r')
s=sub(r’(?我是GA模块a的作者,我将研究Ipython latex问题。我强烈建议您使用最新版本的Symphy,它有一个新版本的GA。查看有关如何使用新GA的新文档。有几件事发生了变化。请尝试以下内容(我不知道它是否有效,因为我自己不使用Ipython)
格式(ipy=True)
看看它是否有效(再次查看文档和新发行版的示例,因为其他内容在打印和模块的其他方面有变化)。我的开发方法是使用“geany”编辑器编写脚本。然后我可以只按编辑器上的run按钮,观察终端或latex的输出
我对您使用GA的目的感兴趣,并了解您希望在未来版本中包含的内容。如果您希望直接与我联系,我的电子邮件是
abrombo@verizon.net这对我很有用
import sympy
import sympy.galgebra
import sympy.galgebra.printing
sympy.galgebra.ga_print_on()
sympy.galgebra.ga.Format(ipy=True)
sympy.init_printing(use_latex=True)
def MVlatex(mv, *args) :
from re import sub
s = str(mv)
s = sub(r'\\W',r'\\wedge', s)
s = sub(r'\\bm',r'\\mathbf', s)
return '$$'+s+'$$'
sympy.galgebra.ga.MV._repr_latex_ = MVlatex
编辑:
有更新的代码和非常不同的语法。我已经制作了一个包含最后一段代码的文档,这段代码可以让ipython笔记本完全工作。因此,希望在不久的将来,以下内容都不需要
老年人:
以下是我在较新版本的Symphy中使用的MWE(我目前使用Symphy版本0.7.5-git和ipython笔记本版本2.0.0-dev)
#一些通用的启动工具
导入sympy,sympy.galgebra.ga
度量值='10,01,01'
gamma_x,gamma_y,gamma_z=sympy.galgebra.ga.MV.setup('gamma_x gamma_y gamma_z',公制)
#为笔记本设置漂亮的打印
sympy.init_printing()
sympy.galgebra.ga.Format(ipy=True)
def MVlatex(mv,*参数):
中压底座至叶片()
返回“$$”+str(mv)。替换(r'\W',r'\wedget')。替换(r'\bm',r'\boldsymbol')。替换(r'\lp',r'\left(')。替换(r'\rp',r'\right)+“$$”
sympy.galgebra.ga.MV.\u repr\u乳胶
#举几个例子
显示(gamma_x^ gamma_y)
显示(3*伽马x*伽马y/2+(伽马z^伽马x))
据推测,相关部分实际上应该合并到galgebra代码中。特别是,\W
、\lp
、\rp
等的tex宏定义,mathjax从未见过,\bm
与mathjax不兼容,因此必须更改这些定义。此外,函数\u repr\u latex
需要在MV
类中定义
我还要注意,对于不能动态添加属性的其他类(\u repr\u latex\u在本例中为
),您仍然可以告诉ipython使用您的函数进行显示,例如
ip=get_ipython()
latex\u formatter=ip.display\u formatter.formatters['text/latex']
latex格式化程序。用于按名称(“sympy.galgebra.ga”、“MV”和“MVlatex”)的类型
我正在对galgebra进行另一次重大重写,它解决了许多Ipython/LaTeX问题。一旦我能够将我为其编写的LaTeX文档转换为python sphinx,它将被添加到我的Symphy github存储库中。如果你不耐烦,请访问github.com/brombo/GA,并查看LaTeX文档中的GA.pdf。主要原因是需要重写是因为为了正确地处理流形/子流形,需要有几何代数的多个实例化,这在当前是不可能的