Latex 带有乳胶的sage笔记本dirac胸罩
我很难在sage笔记本中获得正确格式化的latex输出。我使用sympy来制作sympy.physics.quantum.Bra和Ket,但似乎无法从中获得正确的乳胶性能 例如,我想在一个文件中显示符号psiLatex 带有乳胶的sage笔记本dirac胸罩,latex,sympy,mathjax,sage,Latex,Sympy,Mathjax,Sage,我很难在sage笔记本中获得正确格式化的latex输出。我使用sympy来制作sympy.physics.quantum.Bra和Ket,但似乎无法从中获得正确的乳胶性能 例如,我想在一个文件中显示符号psi sage: p = var('Psi') sage: show(p) 显示希腊字符{\Psi} 但是使用sympy sage: k = Ket(p) sage: show(k) 显示纯文本| Psi> 我已经搜索、测试和试验过,试图获得格式化的输出,但都没有用 sage: latex(
sage: p = var('Psi')
sage: show(p)
显示希腊字符{\Psi}
但是使用sympy
sage: k = Ket(p)
sage: show(k)
显示纯文本| Psi>
我已经搜索、测试和试验过,试图获得格式化的输出,但都没有用
sage: latex(k)
{\left |\Psi\right\rangle}-纯文本
创建自定义latex宏:
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)
给我想要的输出!带有字母符号的乳胶风格ket。。。
但是,只要我尝试将此方法应用于sympy Ket,它就失败了
sage: k = Ket('k', latex_name=r"\left|{\Psi}\right\rangle")
sage: show(k)
和其他变体,都会吐出纯文本| k>
我觉得有一个简单的解决办法,我缺少一些标志,让sympy在sage笔记本中表现正常。这里有一个解决办法。它可能不是很健壮,但可能适合您的需要。这里有两个问题: 1-你需要告诉sage如何给胸罩和胸罩上乳胶。这可以使用
latex_table
完成,该表是一个dict关联类型到latex类型设置功能:
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
当然,你也必须为Ket做同样的事情。你可能也希望这样做
sympy.physics.quantum.operator.OuterProduct
sympy.physics.quantum.operator.InnerProduct
...
然而,这只解决了问题的一部分:推迟胸罩。请注意,Phi不是延迟的
sage: bPhi = Bra(var('Phi'))
sage: print latex(bPhi)
{\left|\text{\texttt{Phi}}\right\rangle}
2-原因是SympybPhi
参数bPhi.args[0]
不完全是Sage变量Phi
,而是Sympy符号
对象:
sage: type(bPhi.args[0])
<class 'sympy.core.symbol.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}
只是为了让我明白;latex_表是否是向任何要显示的对象添加任意latex格式的正确方法?想为对象创建乳胶包装器吗?我注意到:sage:bPhi=Bra(var('Phi'))sage:print latex(bPhi){\left\langle\Phi\right}这有点奇怪,但我并不担心,因为。。。圣人:bPhi给了我一件乳胶胸罩,上面有Phi的预期符号!sage:type(bPhi.args[0]),我认为这对我的目的有用。@locky138:
latex\u表
不将latex格式与对象关联,而是与type
(=class)关联。任何类型为Bra
的对象都将使用latex\u table[Bra]
格式化功能。这是在类Bra
中定义方法\uLaTeX
的替代方法。如果不能修改类(例如:对于内置类),则必须使用它。另外,我不明白你觉得奇怪的是什么。print latex(bPhi)=>{\left\langle\Phi\right}只是有一个空格,而不是任何字符或latex命令。我希望从您的示例中得到{\left |\text{\texttt{Phi}}\right\rangle}。您可以使用sympy.latex
获得胸罩和胸罩的乳胶表示。
sage: bPhi = Bra(var('Phi'))
sage: print latex(bPhi)
{\left|\Phi\right\rangle}