鼠尾草笔记本dirac bra-ket符号与乳胶

时间:2014-04-16 20:57:29

标签: latex sympy mathjax sage

我很难在鼠尾草笔记本中获得格式正确的乳胶输出。我在sympy.physics.quantum.Bra和Ket上使用sympy,但似乎无法从中获得适当的乳胶行为。

例如,我想在一个字符串中显示符号psi。

sage: p = var('Psi')
sage: show(p)

显示希腊字符{\ Psi}

但使用sympy

sage: k = Ket(p)
sage: show(k)

显示纯文本| Psi>

我已经进行了搜索,测试和实验以尝试获取格式化输出,但无济于事。

sage: latex(k)

{\ left | \ Psi \ right \ rangle} - 纯文本

创建自定义乳胶宏:

sage: from sage.misc.latex import latex_extra_preamble
sage: latex.add_macro("\\newcommand{\\ket}[1]{\\left|{#1}\\right\\rangle}")
sage: var("myket", latex_name=r"\ket{\alpha}")
sage: show(myket)

给出我想要的输出!乳胶风格的口香糖与alpha的符号... 但是,一旦我尝试将此方法应用于sympy Ket,它就会失败

sage: k = Ket('k', latex_name=r"\left|{\Psi}\right\rangle")
sage: show(k)

和其他变体,都吐出纯文本| k>

我觉得有一个简单的解决方案,一些我不想在圣人笔记本中表现得恰到好处的旗帜。

1 个答案:

答案 0 :(得分:2)

这是一个解决方案。它可能不是很强大,但它可能适合您的需要。这是两个问题:

1 - 你需要告诉圣人如何乳胶胸罩和Ket。这可以使用latex_table来完成,from sympy.physics.quantum import Bra, Ket def latexBra(x): if len(x.args) == 1: # x.args contains the argument of the Bra res = latex(x.args[0]) else: res = ",".join(latex(i) for i in x.args) return r"{\left|%s\right\rangle}"%res from sage.misc.latex import latex_table latex_table[Bra] = latexBra 是与乳胶类型设置功能相关联的字典:

sympy.physics.quantum.operator.OuterProduct
sympy.physics.quantum.operator.InnerProduct
...

当然,你必须为Ket做同样的事情。您可能也希望为

执行此操作
sage: bPhi = Bra(var('Phi'))
sage: print latex(bPhi)
{\left|\text{\texttt{Phi}}\right\rangle}

但是,这只能解决部分问题:乳胶罩罩。请注意,Phi不是胶乳。

bPhi

2 - 原因是Sympy bPhi.args[0]参数Phi不完全是Sage变量Symbol而是Sympy sage: type(bPhi.args[0]) <class 'sympy.core.symbol.Symbol'> 对象:

Phi

然而,可以通过强迫Symbol对象回到Sage的符号环(SR)来取回Sage的sage: SR(bPhi.args[0]) is Phi True

Symbol

所以你可以告诉Sage为了胶乳Sympy的from sympy.core.symbol import Symbol latex_table[Symbol] = lambda x : latex(SR(x))

sage: bPhi = Bra(var('Phi'))
sage: print latex(bPhi)
{\left|\Phi\right\rangle}

然后:

{{1}}