Bagaimana cara menulis LaTeX di Notebook IPython?

296

Bagaimana saya bisa menampilkan kode LaTeX dalam Notebook IPython?

KostasA
sumber
3
@duffymo Terlepas dari bagaimana pendapat Anda tentang LaTeX, ini adalah pertanyaan yang cukup bagus. Lihatlah apa sebenarnya notebook IPython. Mungkin akan membantu jika saya memberi tahu Anda bahwa ini seperti orgmode on roids (tapi sayangnya tanpa editor yang bagus, dan dengan Markdown alih-alih LaTeX, maka pertanyaan OP).
Konrad Rudolph
1
Saya tidak tahu tentang itu, terima kasih untuk instruksinya, Konrad.
duffymo
2
Dan, untuk lebih jelasnya, saya suka LaTeX. (Saya menggunakannya untuk mengeset disertasi saya.) Tidak ada keberatan; gagal memahami masalah ini.
duffymo

Jawaban:

155

Ini muncul dalam pencarian yang baru saja saya lakukan, menemukan solusi yang lebih baik dengan beberapa pencarian lagi, notebook IPython sekarang memiliki %%latexkeajaiban yang membuat seluruh sel Lateks tanpa $$pembungkus untuk setiap baris.

Lihat tur buku catatan untuk Rich Display System

penjahat
sumber
33
Di Jupyter, itu tidak bekerja di sel penurunan harga tetapi itu bekerja di sel kode.
jwe
287

Notebook IPython menggunakan MathJax untuk membuat LaTeX di dalam html / markdown. Masukkan saja matematika LaTeX Anda ke dalam $$.

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

sqrt

Atau Anda dapat menampilkan keluaran LaTeX / Math dari Python, seperti yang terlihat di akhir tur notebook :

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

integral

minrk
sumber
19
Saya pikir OP ingin menggunakan LaTeX bukan Markdown , bukan hanya untuk persamaan. Saya bersimpati dengan permintaan - sama seperti saya suka Markdown, untuk dokumen kompleks saya selalu menggunakan LaTeX.
Konrad Rudolph
16
Kena kau. Solusi terbaik untuk itu sekarang adalah menggunakan sel 'mentah' alih-alih penurunan harga, dan cukup ketik LaTeX seperti yang Anda inginkan. Kemudian gunakan nbconvert untuk mengubah ipynb ke TeX (kode, angka, dan semua), dan jalankan lateks untuk merendernya menjadi PDF, dll. Anda tidak mendapatkan TeX yang diberikan langsung di browser seperti yang Anda lakukan dengan MathJax / Markdown, tetapi Anda masih memiliki TeX / kode dalam satu dokumen.
minrk
1
pertanyaan yang sama tetapi dalam qtconsole
MySchizoBuddy
8
dan menggunakan $ tunggal (bukan $ dua kali lipat) untuk menjaga persamaan di-line. stackoverflow.com/q/19412644/1224255
TheGrimmScientist
6
Anda juga bisa membuat seluruh sel LaTeXdengan mengetikkan %%latexsebagai baris pertama dalam sel teks.
Toke Faurby
81

Referensi LaTeX:

Blog Udacity memiliki Primer LaTeX Terbaik yang pernah saya lihat: Jelas menunjukkan cara menggunakan perintah LaTeX dalam cara yang mudah dibaca, dan cara yang mudah diingat !! Sangat direkomendasikan .

Tautan ini memiliki Contoh Sangat Baik yang menunjukkan kode, dan hasil yang diberikan!
Anda dapat menggunakan situs ini untuk dengan cepat belajar cara menulis LaTeX dengan contoh.

Dan, di sini adalah Referensi cepat untuk perintah / simbol LaTeX .


Untuk Meringkas: berbagai cara untuk menunjukkan LaTeX di Jupyter / IPython:

Contoh untuk Sel Penurunan Harga:

sebaris, bungkus: $

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

blokir, bungkus: $$

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

blokir, bungkus:\begin{equation} dan\end{equation}

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

blokir, bungkus:\begin{align} dan\end{align}

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

Contoh untuk Sel Kode:

LaTex Cell: %%latex perintah ajaib mengubah seluruh sel menjadi LaTeX Cell

%%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}

Objek matematika untuk dilewatkan dalam string LaTeX mentah :

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

Kelas lateks . Catatan: Anda harus menyertakan pembatas sendiri. Ini memungkinkan Anda untuk menggunakan mode LaTeX lainnya seperti 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}""")

Documents untuk Sel Mentah:

(maaf, tidak ada contoh di sini, hanya dokumen)

Sel mentah Sel mentah menyediakan tempat di mana Anda dapat menulis output secara langsung. Sel mentah tidak dievaluasi oleh notebook. Ketika melewati nbconvert, sel mentah tiba dalam format tujuan yang tidak dimodifikasi. Misalnya, ini memungkinkan Anda untuk mengetik LaTeX penuh ke dalam sel mentah , yang hanya akan diberikan oleh LaTeX setelah konversi oleh nbconvert.

Dokumentasi Tambahan:

Untuk Markdown Cells, seperti dikutip dari Jupyter Notebook docs :

Dalam sel Markdown, Anda juga dapat memasukkan matematika secara langsung, menggunakan notasi LaTeX standar: $ ... $ untuk matematika sebaris dan $$ ... $$ untuk matematika yang ditampilkan . Ketika sel Penurunan harga dijalankan, bagian LaTeX secara otomatis diberikan dalam output HTML sebagai persamaan dengan tipografi berkualitas tinggi. Ini dimungkinkan oleh MathJax, yang mendukung sebagian besar fungsi LaTeX

Lingkungan matematika standar yang didefinisikan oleh LaTeX dan AMS-LaTeX (paket amsmath) juga berfungsi, seperti \ begin {persamaan} ... \ end {persamaan} , dan \ begin {align} ... \ end {align} . Makro LaTeX baru dapat didefinisikan menggunakan metode standar, seperti \ perintah baru, dengan menempatkannya di mana saja di antara pembatas matematika dalam sel Penurunan harga. Definisi-definisi ini kemudian tersedia sepanjang sisa sesi IPython.

SherylHohman
sumber
Tautan ke halaman Udacity tidak berfungsi lagi.
Galaxy
33

Gunakan $$ jika Anda ingin matematika Anda muncul dalam satu baris, misalnya,

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

Jika Anda tidak memerlukan jeda baris setelah matematika, gunakan tanda dolar tunggal $, misalnya,

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

Anda dapat memilih sel untuk di-markdown, lalu menulis kode lateks yang ditafsirkan oleh mathjax, seperti yang dikatakan salah satu responden di atas.

Atau, bagian Lateks dari tutorial notebook iPython menjelaskan hal ini dengan baik.

Anda dapat melakukan:

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}""")

atau lakukan ini:

%%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}

Info lebih lanjut ditemukan di tautan ini

menyentak
sumber
4
tautan Anda sekarang terputus
J'e
14

Saya mengembangkan prettyPy , yang menawarkan cara yang bagus untuk mencetak persamaan. Sayangnya, ini bukan performan dan perlu pengujian.

Contoh:

masukkan deskripsi gambar di sini

Memang, sympy adalah alternatif yang bagus dan walaupun prettyPy tidak memungkinkan untuk mengevaluasi ekspresi, inisialisasi variabel tidak diperlukan.

Charles
sumber
2
Yang saya maksudkan adalah menyiratkan bahwa saya mengembangkan paket. Saya menyesuaikan jawaban saya untuk secara eksplisit menyatakan ini.
Charles
1
Kudos untuk meletakkan kode di domain publik. Saya akan menghapus komentar saya yang sudah usang.
Robino
10

Karena, saya tidak dapat menggunakan semua perintah lateks dalam Kode bahkan setelah menggunakan %% kata kunci lateks atau $ .. $ limiter, saya menginstal nbextensions di mana saya bisa menggunakan perintah lateks dalam penurunan harga. Setelah mengikuti petunjuk di sini: https://github.com/ipython-contrib/IPython-notebook-extensions/blob/master/README.md dan kemudian memulai kembali Jupyter dan kemudian localhost: 8888 / nbekstensi dan kemudian mengaktifkan "Lingkungan Lateks untuk Jupyter ", saya bisa menjalankan banyak perintah Lateks. Contohnya ada di sini: 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}

Seperti yang Anda lihat, saya masih tidak dapat menggunakan paket paket. Tapi mungkin itu akan diperbaiki di masa depan.

masukkan deskripsi gambar di sini

infoclogged
sumber
1
Ekstensi notebook latex_envs tidak dapat menggunakan paket atau gaya LaTeX eksternal; Itu tidak termasuk kompiler tetapi hanya mengenali beberapa kata kunci, struktur dan membuat substitusi html yang sesuai. Terima kasih sudah menggunakannya. Jauh lebih mudah untuk menginstal ekstensi notebook ipython-contrib sekarang menggunakan pip.
jfb
9

Jawaban diberikan oleh minrk (termasuk untuk kelengkapan) adalah baik, tetapi ada cara lain yang lebih saya sukai.

Anda juga bisa membuat seluruh sel LaTeXdengan mengetikkan %%latexsebagai baris pertama dalam sel teks. Ini berguna jika Anda

  • ingin lebih banyak kontrol,
  • ingin lebih dari sekedar lingkungan matematika,
  • atau jika Anda akan menulis banyak matematika dalam satu sel.

jawaban minrk :


Notebook IPython menggunakan MathJax untuk membuat LaTeX di dalam html / markdown. Masukkan saja matematika LaTeX Anda ke dalam $$.

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

sqrt

Atau Anda dapat menampilkan keluaran LaTeX / Math dari Python, seperti yang terlihat di akhir tur notebook :

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

integral

Toke Faurby
sumber
5

Jika tujuan utama Anda adalah melakukan matematika, SymPy memberikan pendekatan yang sangat baik untuk ekspresi lateks fungsional yang tampak hebat.

Eron Lloyd
sumber
3

Saya menulis cara menulis LaTeX di Jupyter Notebook di artikel ini.

Anda harus menyertakannya dalam tanda dolar ($).

  • Untuk menyelaraskan ke kiri gunakan tanda dolar ($) tunggal.

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

  • Untuk menyelaraskan ke pusat menggunakan tanda double dolar ($$).

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

  • Gunakan \limitsuntuk \lim, \sumdan \intuntuk menambah batas di atas dan di bawah setiap tanda.

  • Gunakan garis miring terbalik untuk menghindari kata-kata khusus LaTeX seperti simbol Matematika, kata-kata Latin, teks, dll.

masukkan deskripsi gambar di sini

Coba yang ini.

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

masukkan deskripsi gambar di sini

  • Fungsi piecewise
$$
\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}
$$

Kode di atas akan membuat ini.

masukkan deskripsi gambar di sini

Jika Anda ingin tahu cara menambahkan penomoran ke persamaan dan menyelaraskan persamaan, baca artikel ini untuk detailnya .

shin
sumber
2

Menggunakan sintaksis LaTeX secara langsung dalam sel Markdown bekerja untuk saya. Saya menggunakan Jypiter 4.4.0.

Saya tidak harus menggunakan %%latexperintah sihir, saya bersikeras, hanya sel penurunan harga:

\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}

Memberikan kepada:

masukkan deskripsi gambar di sini

Stephane Rolland
sumber
2
Ini memang cara termudah dan terbersih untuk melakukannya.
Veliko
1

Saya menemukan masalah ini suatu hari menggunakan colab. Dan saya menemukan cara yang paling mudah adalah menjalankan kode ini sebelum mencetak. Semuanya bekerja seperti pesona kalau begitu.

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()

Hasilnya terlihat seperti ini:

masukkan deskripsi gambar di sini

sinar
sumber
1

Saya menggunakan Notebook Jupyter. Saya harus menulis

%%latex
$sin(x)/x$

untuk mendapatkan font LaTex.

pengguna1402208
sumber
1
Ini berfungsi ketika Anda berada dalam mode pengkodean. Jika Anda berada dalam mode Penurunan harga maka Anda dapat menyingkirkan %% lateks
Lahiru Karunaratne