Làm thế nào để viết LaTeX trong IPython Notebook?


296

Làm cách nào để hiển thị mã LaTeX trong IPython Notebook?


3
@duffymo Bất kể bạn nghĩ gì về LaTeX, đây là một câu hỏi khá hay. Hãy xem IPython notebook thực sự là gì. Có lẽ nó hữu ích nếu tôi nói với bạn rằng nó hơi giống orgmode trên 'roids (nhưng không may là không có trình chỉnh sửa đẹp và với Markdown thay vì LaTeX, do đó là câu hỏi của OP).
Konrad Rudolph

1
Tôi không biết gì về nó, cảm ơn vì chỉ dẫn, Konrad.
duffymo

2
Và, để rõ ràng, tôi yêu LaTeX. (Tôi đã sử dụng nó để sắp xếp luận án của tôi.) Không phản đối; chỉ không hiểu vấn đề
duffymo

Câu trả lời:


155

Điều này xuất hiện trong một tìm kiếm tôi vừa thực hiện, tìm thấy một giải pháp tốt hơn với một số máy tính xách tay IPython tìm kiếm nhiều hơn bây giờ có một %%latexphép thuật làm cho toàn bộ tế bào latex mà không cần $$bọc cho mỗi dòng.

Tham khảo máy tính xách tay cho Hệ thống hiển thị phong phú


33
Trong Jupyter, nó không hoạt động trong một ô đánh dấu nhưng nó hoạt động trong một ô mã.
jWe

287

Máy tính xách tay IPython sử dụng MathJax để hiển thị LaTeX bên trong html / markdown. Chỉ cần đặt toán LaTeX của bạn vào bên trong $$.

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

sqrt

Hoặc bạn có thể hiển thị đầu ra LaTeX / Math từ Python, như được thấy ở phần cuối của chuyến tham quan máy tính xách tay :

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

không thể thiếu


19
Tôi nghĩ OP muốn sử dụng LaTeX thay vì Markdown , thay vì chỉ cho các phương trình. Tôi đồng cảm với yêu cầu - giống như tôi thích Markdown, đối với các tài liệu phức tạp tôi luôn sử dụng LaTeX.
Konrad Rudolph

16
Gotcha. Giải pháp tốt nhất cho điều đó ngay bây giờ là sử dụng các ô 'thô' thay vì đánh dấu và chỉ cần gõ LaTeX như bạn muốn. Sau đó, sử dụng nbconvert để biến ipynb thành TeX (mã, số liệu và tất cả) và chạy latex để kết xuất nó thành PDF, v.v. Bạn không nhận được TeX kết xuất trực tiếp trong trình duyệt như bạn làm với MathJax / Markdown, nhưng bạn vẫn có TeX / mã trong một tài liệu.
minrk

1
cùng một câu hỏi nhưng trong qtconsole
MySchizoBuddy

8
và sử dụng $ đơn (thay vì gấp đôi $$) để giữ phương trình thẳng hàng. stackoverflow.com/q/19412644/1224255
TheGrimmSellectist

6
Bạn cũng có thể kết xuất toàn bộ một ô LaTeXbằng cách nhập %%latexdưới dạng dòng đầu tiên trong một ô văn bản.
Toke Faurby

81

Tài liệu tham khảo của LaTeX:

Blog của Udacity có Primer LaTeX tốt nhất mà tôi từng thấy: Nó cho thấy rõ cách sử dụng các lệnh LaTeX theo cách dễ đọc và dễ nhớ !! Rất khuyến khích .

Liên kết này có các ví dụ xuất sắc hiển thị cả mã và kết quả được hiển thị!
Bạn có thể sử dụng trang web này để nhanh chóng tìm hiểu cách viết LaTeX bằng ví dụ.

Và, đây là một Tài liệu tham khảo nhanh cho các lệnh / ký hiệu LaTeX .


Để tóm tắt: nhiều cách khác nhau để chỉ LaTeX trong Jupyter / IPython:

Ví dụ cho các tế bào Markdown:

nội tuyến, bọc trong: $

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

chặn, bọc trong: $$

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

chặn, bọc trong:\begin{equation}\end{equation}

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

chặn, bọc trong:\begin{align}\end{align}

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

Ví dụ cho các tế bào mã:

LaTex Cell: %%latex lệnh ma thuật biến toàn bộ tế bào thành một tế bào 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}

Đối tượng toán học để truyền trong chuỗi LaTeX thô :

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

Lớp cao su . Lưu ý: bạn phải bao gồm các dấu phân cách chính mình. Điều này cho phép bạn sử dụng các chế độ LaTeX khác, chẳng hạn như 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}""")

Tài liệu cho các tế bào thô:

(xin lỗi, không có ví dụ nào ở đây, chỉ là các tài liệu)

Các ô thô Các ô thô cung cấp một vị trí trong đó bạn có thể viết đầu ra trực tiếp. Các tế bào thô không được đánh giá bởi máy tính xách tay. Khi đi qua nbconvert, các ô thô đến ở định dạng đích không được sửa đổi. Ví dụ: điều này cho phép bạn nhập LaTeX đầy đủ vào một ô thô , sẽ chỉ được LaTeX hiển thị sau khi chuyển đổi bởi nbconvert.

Tài liệu bổ sung:

Đối với các tế bào Markdown, như được trích dẫn từ các tài liệu của Jupyter Notebook :

Trong các ô Markdown, bạn cũng có thể bao gồm toán học theo cách đơn giản, sử dụng ký hiệu LaTeX tiêu chuẩn: $ ... $ cho toán học nội tuyến$$ ... $$ cho toán học hiển thị . Khi ô Markdown được thực thi, các phần LaTeX sẽ tự động được hiển thị trong đầu ra HTML dưới dạng phương trình với kiểu chữ chất lượng cao. Điều này được MathJax thực hiện, hỗ trợ một tập hợp lớn chức năng LaTeX

Các môi trường toán học tiêu chuẩn được xác định bởi LaTeX và AMS-LaTeX (gói amsmath) cũng hoạt động, chẳng hạn như \ started {phương trình} ... \ end {phương trình}\ started {align} ... \ end {align} . Các macro LaTeX mới có thể được xác định bằng các phương thức tiêu chuẩn, chẳng hạn như \ newcommand, bằng cách đặt chúng ở bất kỳ đâu giữa các dấu phân cách toán học trong một ô Markdown. Các định nghĩa này sau đó có sẵn trong suốt phần còn lại của phiên IPython.


Liên kết đến trang Udacity không hoạt động nữa.
Thiên hà

33

Sử dụng $$ nếu bạn muốn toán học của mình xuất hiện trong một dòng, ví dụ:

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

Nếu bạn không cần ngắt dòng sau toán học, hãy sử dụng ký hiệu đô la duy nhất $, ví dụ:

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

23

Bạn có thể chọn một ô để đánh dấu, sau đó viết mã latex được mathjax giải thích, như một trong những người trả lời đã nói ở trên.

Ngoài ra, phần latex của hướng dẫn máy tính xách tay iPython giải thích điều này tốt.

Bạn có thể làm:

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

hoặc làm điều này:

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

Thông tin thêm được tìm thấy trong liên kết này


4
liên kết của bạn hiện đã bị hỏng
J'e

1
Những ví dụ tuyệt vời ở đây: jupyter-notebook.readthedocs.io/en/urdy/examples/Notebook/iêu
ptim

14

Tôi đã phát triển PrettyPy , cung cấp một cách hay để in phương trình. Thật không may, nó không hiệu quả và cần thử nghiệm.

Thí dụ:

nhập mô tả hình ảnh ở đây

Cấp, sympy là một thay thế tuyệt vời và mặc dù PrettyPy không cho phép đánh giá các biểu thức, không cần phải khởi tạo biến.


2
Tất cả những gì tôi muốn nói là ngụ ý rằng tôi đã phát triển gói. Tôi điều chỉnh câu trả lời của mình để nói rõ điều này.
Charles

1
Kudos để đặt mã trong phạm vi công cộng. Tôi sẽ xóa bình luận lỗi thời (bây giờ) của tôi.
Robino

10

Vì, tôi không thể sử dụng tất cả các lệnh latex trong Code ngay cả sau khi sử dụng từ khóa %% latex hoặc giới hạn $ .. $, tôi đã cài đặt nbextensions qua đó tôi có thể sử dụng các lệnh latex trong Markdown. Sau khi làm theo các hướng dẫn tại đây: https://github.com/ipython-contrib/IPython-notebook-extensions/blob/master/README.md và sau đó khởi động lại Jupyter và sau đó localhost: 8888 / nbextensions và sau đó kích hoạt "Môi trường latex cho Jupyter ", tôi có thể chạy nhiều lệnh latex. Ví dụ ở đây: 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}

Như bạn thấy, tôi vẫn không thể sử dụng usepackage. Nhưng có lẽ nó sẽ được cải thiện trong tương lai.

nhập mô tả hình ảnh ở đây


1
Phần mở rộng máy tính xách tay latex_envs không thể sử dụng các gói hoặc kiểu LaTeX bên ngoài; Nó không bao gồm trình biên dịch mà chỉ đơn giản là nhận ra một số từ khóa, cấu trúc và thực hiện các thay thế html phù hợp. Cảm ơn đã sử dụng nó. Việc cài đặt các phần mở rộng máy tính xách tay ipython-contrib bây giờ dễ dàng hơn nhiều bằng cách sử dụng pip.
jfb

9

Câu trả lời được đưa ra bởi minrk (bao gồm cho sự hoàn chỉnh) là tốt, nhưng có một cách khác mà tôi thích hơn nữa.

Bạn cũng có thể kết xuất toàn bộ một ô LaTeXbằng cách nhập %%latexdưới dạng dòng đầu tiên trong một ô văn bản. Điều này là hữu ích nếu bạn

  • muốn kiểm soát nhiều hơn
  • muốn nhiều hơn là một môi trường toán học,
  • hoặc nếu bạn định viết nhiều bài toán trong một ô.

câu trả lời của minrk :


Máy tính xách tay IPython sử dụng MathJax để hiển thị LaTeX bên trong html / markdown. Chỉ cần đặt toán LaTeX của bạn vào bên trong $$.

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

sqrt

Hoặc bạn có thể hiển thị đầu ra LaTeX / Math từ Python, như được thấy ở phần cuối của chuyến tham quan máy tính xách tay :

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

không thể thiếu



3

Tôi đã viết cách viết LaTeX trong Jupyter Notebook trong bài viết này.

Bạn cần gửi chúng theo ký hiệu đô la ($).

  • Để căn chỉnh bên trái, sử dụng một ký hiệu đô la ($).

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

  • Để căn chỉnh đến trung tâm, sử dụng các ký hiệu đô la kép ($$).

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

  • Sử dụng \limitscho \lim, \sum\intthêm giới hạn trên và dưới cùng của mỗi dấu.

  • Sử dụng dấu gạch chéo ngược để thoát các từ đặc biệt LaTeX như ký hiệu Toán học, từ Latin, văn bản, v.v.

nhập mô tả hình ảnh ở đây

Hãy thử cái này

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

nhập mô tả hình ảnh ở đây

  • Chức năng 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}
$$

Các mã trên sẽ tạo ra điều này.

nhập mô tả hình ảnh ở đây

Nếu bạn muốn biết làm thế nào để thêm số vào phương trình và căn chỉnh phương trình, xin vui lòng đọc bài viết này để biết chi tiết .


2

Sử dụng cú pháp LaTeX trực tiếp trong một ô Markdown hoạt động với tôi. Tôi đang sử dụng Jypiter 4.4.0.

Tôi không phải sử dụng %%latexlệnh ma thuật, tôi nhấn mạnh, chỉ đơn giản là một ô đánh dấu:

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

Hiển thị:

nhập mô tả hình ảnh ở đây


2
Đây thực sự là cách dễ nhất và sạch nhất để làm điều đó.
Veliko

1

Tôi đã gặp vấn đề này một ngày nào đó bằng cách sử dụng colab. Và tôi thấy cách không đau đớn nhất là chỉ chạy mã này trước khi in. Mọi thứ hoạt động như quyến rũ rồi.

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

Kết quả trông như thế này:

nhập mô tả hình ảnh ở đây


1

Tôi đang sử dụng Notebook Jupyter. Tôi phải viết

%%latex
$sin(x)/x$

để có được phông chữ LaTex.


1
Điều này hoạt động khi bạn đang ở chế độ mã hóa. Nếu bạn đang ở chế độ Markdown thì bạn có thể thoát khỏi %% latex
Lahiru Karunaratne
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.