web-dev-qa-db-ja.com

sympyからのラテックス出力がGoogleColaboratoryJupyterノートブックに正しく表示されない

GoogleのColaboratoryプラットフォームを使用してJupyterノートブックでpythonを実行しています。標準のJupyterノートブックでは、sympy関数の出力は正しくタイプセットされたLaTeXですが、ColaboratoryノートブックはLaTeXを出力するだけです。次のコードスニペット:

import numpy as np
import sympy as sp
sp.init_printing(use_unicode=True)
x=sp.symbols('x')
a=sp.Integral(sp.sin(x)*sp.exp(x),x);a

結果は次のようなラテックス出力になります。

$$\int e^{x} \sin{\left (x \right )}\, dx$$

これらの質問で引用された答え、 Colaboratoryの出力セルでLaTeXをレンダリングする および IPython.display.Latexを使用する場合、LaTeX方程式はgoogle Colaboratoryでレンダリングされません は問題を修正しません。コードセルの出力にLaTeX式を表示する方法を提供しますが、組み込みのsympy関数からの出力を修正するものではありません。

Sympy出力を取得して適切にレンダリングする方法に関する提案はありますか?それとも、これはColaboratoryノートブックの問題ですか?

11
Stephen Hall

Colab.research.googlr.comでsympyが魅力のように機能するように、このコードスニペットを作成しました。

def custom_latex_printer(exp,**options):
    from google.colab.output._publish import javascript
    url = "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=default"
    javascript(url=url)
    return sympy.printing.latex(exp,**options)
init_printing(use_latex="mathjax",latex_printer=custom_latex_printer)

Sympyをインポートした後に配置します。これは基本的に、実際に構文を出力する前に、colabapiを使用してmathjaxライブラリを埋め込むようにsympyに指示します。

9
Michael Lee

表示する前にMathJaxライブラリを含める必要があります。最初にこのようなセルに設定します。

_from google.colab.output._publish import javascript
url = "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=default"
_

後で、表示する前にjavascript(url=url)を含めます。

_x=sp.symbols('x')
a=sp.Integral(sp.sin(x)*sp.exp(x),x)
javascript(url=url)
a
_

その後、正しく表示されます。