IPython NotebookでLaTeXを書く方法は?


296

IPython NotebookでLaTeXコードを表示するにはどうすればよいですか?


3
@duffymoどのようにLaTeXに関係なく、これはかなり良い質問です。IPython Notebookが実際に何であるかをください。多分私はそれが 'roidsのorgmodeに少し似ていると言ったら役立つかもしれません(しかし、残念なことに、素晴らしいエディターがなく、LaTeXの代わりにMarkdownがあるため、OPの質問です)。
Konrad Rudolph

1
コンラッドの指示に感謝します。
duffymo

2
そして、明確にするために、私 LaTeXが大好きです。(私はそれを使って論文を植字しました。)異議なし。問題を理解できませんでした。
duffymo

回答:


155

これは私が行っていた検索で思い付き、いくつかの検索でより良い解決策を見つけました.IPythonノートブックには、各行%%latex$$ラッパーなしでセル全体をラテックスにする魔法があります。

リッチディスプレイシステムのノートブックツアーを参照する


33
Jupyterでは、マークダウンセルでは機能しませんが、コードセルでは機能します。
jwe

287

IPython NotebookはMathJaxを使用して、html / markdown内でLaTeXをレンダリングします。LaTeXの数学を中に入れてください$$

$$c = \sqrt{a^2 + b^2}$$

sqrt

または、ノートブックツアーの終わり近くにあるように、PythonからLaTeX / Mathの出力を表示することもできます。

from IPython.display import display, Math, Latex
display(Math(r'F(k) = \int_{-\infty}^{\infty} f(x) e^{2\pi i k} dx'))

積分


19
OPは、方程式だけでなく、MarkdownではなくLaTeXを使用したいと考えています。私はMarkdownが好きなのと同じように、要求に共感します。複雑なドキュメントの場合は、常にLaTeXを使用します。
Konrad Rudolph

16
ゴッチャ。現時点での最善の解決策は、マークダウンの代わりに「生の」セルを使用して、LaTeXと入力することです。次に、nbconvertを使用してipynbをTeX(コード、図、およびすべて)に変換し、latexを実行してPDFなどにレンダリングします。MathJax/ Markdownの場合のように、ブラウザでライブレンダリングされたTeXを取得することはできませんが、 TeX /コードが1つのドキュメントに残っています。
minrk

1
同じ質問ですが、qtconsoleにあります
MySchizoBuddy 2013

8
そして、方程式をインラインに保つために、単一の$(二重の$$ではなく)を使用します。 stackoverflow.com/q/19412644/1224255
TheGrimmScientist 2014

6
テキストセルの最初の行としてLaTeX入力することで、セル全体をレンダリングすることもでき%%latexます。
Toke Faurby 2017

81

LaTeXリファレンス:

Udacityのブログには、私が見た中で最高の LaTeXプライマーがあります。LaTeXコマンドを読みやすく、覚えやすい方法で使用する方法を明確に示しています!! 強くお勧めします。

このリンクには、コードとレンダリングされた結果の両方を示す優れた例があります。
このサイトを使用すると、例によってLaTeXの記述方法をすばやく学ぶことができます。

そして、ここにLaTeXコマンド/シンボルのクイックリファレンスがあります。


要約すると:Jupyter / IPythonでLaTeXを示すさまざまな方法:

マークダウンセルの

インライン、ラップイン: $

The equation used depends on whether the the value of  
$V​max​​$ is R, G, or B.  

ブロック、ラップイン: $$

$$H←  ​​​​​0 ​+​ \frac{​​30(G−B)​​}{Vmax−Vmin}  ​​, if V​max​​ = R$$

ブロック内のラップ:\begin{equation}\end{equation}

\begin{equation}
H← ​​​60 ​+​ \frac{​​30(B−R)​​}{Vmax−Vmin}  ​​, if V​max​​ = G
\end{equation}

ブロック内のラップ:\begin{align}\end{align}

\begin{align}
H←120 ​+​ \frac{​​30(R−G)​​}{Vmax−Vmin}  ​​, if V​max​​ = B
\end{align}

コードセルの

LaTexセル: %%latex magicコマンドはセル全体をLaTeXセルに変換します

%%latex
\begin{align}
\nabla \cdot \vec{\mathbf{E}} & = 4 \pi \rho \\
\nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} & = \vec{\mathbf{0}} \\
\nabla \cdot \vec{\mathbf{B}} & = 0
\end{align}

生のLaTeX文字列で渡すMathオブジェクト

from IPython.display import Math
Math(r'F(k) = \int_{-\infty}^{\infty} f(x) e^{2\pi i k} dx')

ラテックスクラス。注:区切り文字は自分で含める必要があります。これにより、次のような他のLaTeXモードを使用できますeqnarray

from IPython.display import Latex
Latex(r"""\begin{eqnarray}
\nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} & = \frac{4\pi}{c}\vec{\mathbf{j}} \\
\nabla \cdot \vec{\mathbf{E}} & = 4 \pi \rho \\
\nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} & = \vec{\mathbf{0}} \\
\nabla \cdot \vec{\mathbf{B}} & = 0 
\end{eqnarray}""")

生細胞のドキュメント

(申し訳ありません、ここでは例はありません、ドキュメントのみ)

生セル生セルは、出力を直接書き込むことができる場所を提供します。生細胞はノートブックでは評価されません。を通過するとnbconvert、未加工のセルは変更されずに宛先形式で到着します。たとえば、これにより、完全なLaTeXをrawセル入力できます。これは、による変換後にLaTeXによってのみレンダリングされnbconvertます。

追加のドキュメント:

マークダウンセルの場合、Jupyter Notebook docsから引用:

Markdownセル内では、標準のLaTeX表記を使用して、簡単な方法で数学を含めることもできます。インライン数学には$ ... $、表示された数学には$$ ... $$です。Markdownセルが実行されると、LaTeX部分は、高品質のタイポグラフィーを持つ数式としてHTML出力に自動的にレンダリングされます。これは、LaTeX機能の大部分をサポートするMathJaxによって可能になりました。

\ Begin {equation} ... \ end {equation}\ begin {align} ... \ end {align}など、LaTeXおよびAMS-LaTeX(amsmathパッケージ)によって定義された標準の数学環境も機能します。新しいLaTeXマクロは、\ newcommandなどの標準的な方法を使用して、Markdownセルの数学区切り文字の間のどこかに配置することで定義できます。これらの定義は、IPythonセッションの残りの部分で利用できます。


Udacityページへのリンクが機能しなくなりました。
Galaxy

33

数式を1行で表示する場合は、$$を使用します。たとえば、

$$a = b + c$$ (line break after the equation)

数学の後に改行が必要ない場合は、単一のドル記号$を使用します。たとえば、

$a = b + c$   (no line break after the equation)

23

マークダウンするセルを選択してから、mathjaxによって解釈されるラテックスコードを記述できます。

または、iPython NotebookチュートリアルのLatexセクションで、これについて詳しく説明しています。

次のいずれかを実行できます。

from IPython.display import Latex
Latex(r"""\begin{eqnarray}
\nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} & = \frac{4\pi}{c}\vec{\mathbf{j}} \\
\nabla \cdot \vec{\mathbf{E}} & = 4 \pi \rho \\
\nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} & = \vec{\mathbf{0}} \\
\nabla \cdot \vec{\mathbf{B}} & = 0 
\end{eqnarray}""")

またはこれを行います:

%%latex
\begin{align}
\nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} & = \frac{4\pi}{c}\vec{\mathbf{j}} \\
\nabla \cdot \vec{\mathbf{E}} & = 4 \pi \rho \\
\nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} & = \vec{\mathbf{0}} \\
\nabla \cdot \vec{\mathbf{B}} & = 0
\end{align}

このリンクでより多くの情報が見つかりました


4
あなたのリンクは今壊れています
J'e


14

方程式を出力する素晴らしい方法を提供するprettyPyを開発しました。残念ながら、これはパフォーマンスが悪く、テストが必要です。

例:

ここに画像の説明を入力してください

もちろんsympyは優れた代替手段であり、prettyPyは式の評価を許可していませんが、変数の初期化は必要ありません。


2
私が意味するのは、パッケージを開発したことを暗示することだけでした。私はこれを明確に述べるために私の答えを調整しました。
Charles

1
コードをパブリックドメインに置くことに対する称賛。私の(現在)古くなったコメントを削除します。
ロビノ

10

%% latexキーワードまたは$ .. $リミッターを使用した後でも、コードですべてのlatexコマンドを使用できなかったため、Markdownでlatexコマンドを使用できるnbextensionsをインストールしました。ここの指示に従って:https : //github.com/ipython-contrib/IPython-notebook-extensions/blob/master/README.mdを再起動し、Jupyterを再起動してからlocalhost:8888 / nbextensionsを起動し、「Latex Env​​ironment for Jupyter」、私は多くのラテックスコマンドを実行できました。例はこちら:https : //rawgit.com/jfbercher/latex_envs/master/doc/latex_env_doc.html

\section{First section}
\textbf{Hello}
$
\begin{equation} 
c = \sqrt{a^2 + b^2}
\end{equation}
$
\begin{itemize}
\item First item
\item Second item
\end{itemize}
\textbf{World}

ご覧のとおり、私はまだusepackageを使用できません。しかし、多分それは将来的に改善されるでしょう。

ここに画像の説明を入力してください


1
latex_envsノートブック拡張機能は、外部LaTeXパッケージまたはスタイルを使用できません。コンパイラは含まれていませんが、いくつかのキーワード、構造を認識し、適切なHTML置換を行います。ご利用いただきありがとうございます。現在は、pipを使用してipython-contribノートブック拡張機能をインストールする方がはるかに簡単です。
jfb 2016年

9

minrk(完全性のために含まれています)の答えは良いですが、私がもっと好きな別の方法があります。

テキストセルの最初の行としてLaTeX入力することで、セル全体をレンダリングすることもでき%%latexます。これは、

  • もっとコントロールしたい
  • 単なる数学環境だけでなく、
  • または、1つのセルに多くの数学を書く場合。

minrkの答え:


IPython NotebookはMathJaxを使用して、html / markdown内でLaTeXをレンダリングします。LaTeXの数学を中に入れてください$$

$$c = \sqrt{a^2 + b^2}$$

sqrt

または、ノートブックツアーの終わり近くにあるように、PythonからLaTeX / Mathの出力を表示することもできます。

from IPython.display import display, Math, Latex
display(Math(r'F(k) = \int_{-\infty}^{\infty} f(x) e^{2\pi i k} dx'))

積分



3

この記事では、Jupyter NotebookでLaTeXの書き方を書きました

それらをドル記号($)で囲む必要があります。

  • 左揃えにするには、1つのドル($)記号を使用します。

$P(A)=\frac{n(A)}{n(U)}$

  • 中央に揃えるには、2つのドル記号($$)を使用します。

$$P(A)=\frac{n(A)}{n(U)}$$

  • \limitsfor とを使用して\lim、各記号の上部と下部に制限を追加します。\sum\int

  • バックスラッシュを使用して、数学記号、ラテン語の単語、テキストなどのLaTeX特殊単語をエスケープします。

ここに画像の説明を入力してください

これを試してみてください。

$$\overline{x}=\frac{\sum \limits _{i=1} ^k f_i x_i}{n} \text{, where } n=\sum \limits _{i=1} ^k f_i  $$
  • 行列

ここに画像の説明を入力してください

  • 区分的関数
$$
\begin{align}
\text{Probability density function:}\\
\begin{cases}
\frac{1}{b-a}&\text{for $x\in[a,b]$}\\
0&\text{otherwise}\\
\end{cases}
\\
\text{Cumulative distribution function:}\\
\begin{cases}
0&\text{for $x<a$}\\
\frac{x-a}{b-a}&\text{for $x\in[a,b)$}\\
1&\text{for $x\ge b$}\\
\end{cases}
\end{align}
$$

上記のコードはこれを作成します。

ここに画像の説明を入力してください

数式に番号付けを追加し、数式を整列する方法を知りたい場合は、この記事の詳細をお読みください


2

マークダウンセルで直接LaTeX構文を使用するとうまくいきます。Jypiter 4.4.0を使用しています。

%%latexマジックコマンドを使用する必要はありません。単にマークダウンセルを主張します。

\begin{align}
\nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} & = \frac{4\pi}{c}\vec{\mathbf{j}} \\
\nabla \cdot \vec{\mathbf{E}} & = 4 \pi \rho \\
\nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} & = \vec{\mathbf{0}} \\
\nabla \cdot \vec{\mathbf{B}} & = 0
\end{align}

レンダリング先:

ここに画像の説明を入力してください


2
これは確かにそれを行う最も簡単でクリーンな方法です。
Veliko

1

私はいつかcolabを使用してこの問題に遭遇しました。そして、最も苦痛のない方法は、印刷する前にこのコードを実行することです。すべてが魅力のように機能します。

from IPython.display import Math, HTML

def load_mathjax_in_cell_output():
  display(HTML("<script src='https://www.gstatic.com/external_hosted/"
               "mathjax/latest/MathJax.js?config=default'></script>"))
get_ipython().events.register('pre_run_cell', load_mathjax_in_cell_output)
import sympy as sp
sp.init_printing()

結果は次のようになります。

ここに画像の説明を入力してください


1

Jupyter Notebooksを使用しています。私は書かなければなりませんでした

%%latex
$sin(x)/x$

LaTexフォントを取得します。


1
これは、コーディングモードのときに機能します。
マーク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.