Jak napisać LaTeX w IPython Notebook?


296

Jak mogę wyświetlić kod LaTeX w Notatniku IPython?


3
@duffymo Bez względu na to, jak bardzo lubisz LaTeX, jest to całkiem dobre pytanie. Zobacz, czym tak naprawdę jest notebook IPython. Może to pomoże, jeśli powiem ci, że to trochę jak tryb org na trybach Roids (ale niestety bez fajnego edytora i z Markdown zamiast LaTeX, stąd pytanie OP).
Konrad Rudolph

1
Jestem tego nieświadomy, dziękuję za instrukcję, Konrad.
duffymo,

2
I dla jasności kocham LaTeX. (Użyłem go do napisania mojej rozprawy). Brak zastrzeżeń; po prostu nie zrozumiałem problemu.
duffymo,

Odpowiedzi:


155

To przyszło podczas wyszukiwania, które właśnie przeprowadzałem, znalazłem lepsze rozwiązanie z kilkoma kolejnymi wyszukiwaniami, notebooki IPython mają teraz %%latexmagię, która sprawia, że ​​cała komórka Lateks nie ma $$opakowania dla każdej linii.

Zapoznaj się z przewodnikiem po notebooku, aby zapoznać się z bogatym systemem wyświetlania


33
W Jupyter nie działa w komórce przeceny, ale działa w komórce kodu.
jwe

287

Notatnik IPython używa MathJax do renderowania LaTeX wewnątrz html / markdown. Po prostu włóż matematykę LaTeX do środka $$.

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

sqrt

Lub możesz wyświetlić dane wyjściowe LaTeX / Math z Pythona, jak widać pod koniec przewodnika po notebookach :

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

całka


19
Myślę, że OP chce używać LaTeX zamiast Markdown , a nie tylko do równań. Współczuję temu żądaniu - tak jak lubię Markdown, w przypadku złożonych dokumentów zawsze korzystałem z LaTeX.
Konrad Rudolph

16
Gotcha Najlepszym rozwiązaniem tego problemu byłoby teraz użycie „surowych” komórek zamiast markdown i po prostu wpisz LaTeX tak jak ty. Następnie użyj nbconvert, aby zmienić ipynb na TeX (kod, cyfry i wszystkie), i uruchom lateks, aby wyrenderować go do formatu PDF itp. Nie wyświetlasz TeX-a na żywo w przeglądarce, tak jak robisz to z MathJax / Markdown, ale nadal mam kod TeX / w jednym dokumencie.
minrk

1
to samo pytanie, ale w qtconsole
MySchizoBuddy

8
i użyj pojedynczego $ (zamiast podwójnego $$), aby utrzymać równanie w linii. stackoverflow.com/q/19412644/1224255
TheGrimmScientist

6
Możesz także wyrenderować całą komórkę LaTeX, wpisując %%latexjako pierwszy wiersz w komórce tekstowej.
Toke Faurby

81

Referencje LaTeX:

Blog Udacity ma najlepszy LaTeX Primer , jaki widziałem: wyraźnie pokazuje, jak używać poleceń LaTeX w łatwy do odczytania i łatwy do zapamiętania sposób !! Gorąco polecam .

Ten link zawiera doskonałe przykłady pokazujące zarówno kod, jak i renderowany wynik!
Możesz użyć tej strony, aby szybko nauczyć się pisać LaTeX przez przykład.

A oto krótkie omówienie poleceń / symboli LaTeX .


Podsumowując: różne sposoby oznaczania LaTeX w Jupyter / IPython:

Przykłady komórek Markdown:

inline, zawiń: $

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

blok, zawiń: $$

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

blok, zawiń:\begin{equation} i\end{equation}

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

blok, zawiń:\begin{align} i\end{align}

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

Przykłady komórek kodu:

Komórka LaTex: %%latex magiczne polecenie zamienia całą komórkę w komórkę 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}

Obiekt matematyczny do przekazania w nieprzetworzonym ciągu LaTeX :

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

Klasa lateksowa . Uwaga: musisz samodzielnie wprowadzić ograniczniki. Umożliwia to korzystanie z innych trybów LaTeX, takich jak 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}""")

Dokumenty dotyczące komórek surowych:

(przepraszam, nie ma tutaj przykładu, tylko dokumenty)

Surowe komórki Surowe komórki zapewniają miejsce, w którym można bezpośrednio pisać dane wyjściowe. Surowe komórki nie są oceniane przez notatnik. Po przejściu nbconvertsurowe komórki przybywają w niezmodyfikowanym formacie docelowym. Na przykład pozwala to wpisać pełny LaTeX w surową komórkę , która będzie renderowana przez LaTeX dopiero po konwersji przez nbconvert.

Dokumentacja dodatkowa:

W przypadku komórek Markdown cytowanych w dokumentach Jupyter Notebook :

W komórkach Markdown można również w prosty sposób włączyć matematykę, używając standardowej notacji LaTeX: $ ... $ dla matematyki wbudowanej i $$ ... $$ dla matematyki wyświetlanej . Gdy komórka Markdown jest wykonywana, części LaTeX są automatycznie renderowane w danych wyjściowych HTML jako równania z typografią wysokiej jakości. Jest to możliwe dzięki MathJax, który obsługuje duży podzbiór funkcjonalności LaTeX

Standardowe środowiska matematyczne zdefiniowane przez LaTeX i AMS-LaTeX (pakiet amsmath) również działają, takie jak \ begin {equation} ... \ end {equation} i \ begin {align} ... \ end {align} . Nowe makra LaTeX można zdefiniować przy użyciu standardowych metod, takich jak \ newcommand, umieszczając je w dowolnym miejscu między ogranicznikami matematycznymi w komórce Markdown. Te definicje są następnie dostępne przez pozostałą część sesji IPython.


Link do strony Udacity już nie działa.
Galaxy

33

Użyj $$, jeśli chcesz, aby matematyka pojawiała się w jednym wierszu, np.

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

Jeśli nie potrzebujesz podziału linii po matematyce, użyj pojedynczego znaku dolara $, np.

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

23

Możesz wybrać komórkę, która ma być przeceniona, a następnie napisać kod lateksowy, który zostanie zinterpretowany przez mathjax, jak powiedział jeden z respondentów powyżej.

Alternatywnie, sekcja dotycząca lateksu w samouczku na temat iPython wyjaśnia to dobrze.

Możesz albo:

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

lub zrób to:

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

Więcej informacji można znaleźć w tym linku


4
Twój link jest teraz zepsuty
2017


14

Opracowałem prettyPy , który oferuje dobry sposób na wydrukowanie równania. Niestety nie jest wydajny i wymaga testowania.

Przykład:

wprowadź opis zdjęcia tutaj

Oczywiście sympy jest świetną alternatywą i chociaż prettyPy nie pozwala na ocenę wyrażeń, inicjalizacja zmiennych nie jest wymagana.


2
Chciałem jedynie zasugerować, że opracowałem pakiet. Poprawiłem swoją odpowiedź, aby wyraźnie to stwierdzić.
Charles

1
Wyrazy uznania za umieszczenie kodu w domenie publicznej. Usunę mój (teraz) przestarzały komentarz.
Robino

10

Ponieważ nie byłem w stanie używać wszystkich poleceń lateksowych w kodzie, nawet po użyciu słowa kluczowego %% latex lub limitu $ .. $, zainstalowałem rozszerzenia nb, dzięki którym mogłem używać poleceń lateksowych w Markdown. Po wykonaniu instrukcji tutaj: https://github.com/ipython-contrib/IPython-notebook-extensions/blob/master/README.md, a następnie zrestartowanie Jupyter, a następnie localhost: 8888 / nbextensions, a następnie aktywacja „Środowiska lateksowego dla Jupyter ”, mogłem uruchomić wiele poleceń lateksowych. Przykłady są tutaj: 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}

Jak widać, nadal nie mogę korzystać z usepackage. Ale może zostanie poprawiony w przyszłości.

wprowadź opis zdjęcia tutaj


1
Rozszerzenie notebooka latex_envs nie może używać zewnętrznych pakietów lub stylów LaTeX; Nie zawiera kompilatora, ale po prostu rozpoznaje niektóre słowa kluczowe, struktury i dokonuje odpowiednich podstawień HTML. Dzięki za skorzystanie z niego. O wiele łatwiej jest zainstalować rozszerzenia notebooka ipython-contrib za pomocą pip.
jfb

9

Odpowiedź udzielona przez minrka (dołączona do kompletności) jest dobra, ale jest jeszcze inny sposób, który lubię jeszcze bardziej.

Możesz także wyrenderować całą komórkę LaTeX, wpisując %%latexjako pierwszy wiersz w komórce tekstowej. Jest to przydatne, jeśli ty

  • chcą większej kontroli,
  • chcesz czegoś więcej niż środowiska matematycznego,
  • lub jeśli masz zamiar napisać dużo matematyki w jednej komórce.

odpowiedź minrka :


Notatnik IPython używa MathJax do renderowania LaTeX wewnątrz html / markdown. Po prostu włóż matematykę LaTeX do środka $$.

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

sqrt

Lub możesz wyświetlić dane wyjściowe LaTeX / Math z Pythona, jak widać pod koniec przewodnika po notebookach :

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

całka



3

W tym artykule napisałem, jak napisać LaTeX w Jupyter Notebook .

Musisz zawrzeć je w znakach dolara ($).

  • Aby wyrównać do lewej, użyj jednego znaku dolara ($).

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

  • Aby wyrównać do centrum, użyj podwójnych znaków dolara ($$).

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

  • Użyj \limitsdla \lim, \sumi \intdodać do granic górnej i dolnej części każdego znaku.

  • Użyj odwrotnego ukośnika, aby uciec od specjalnych słów LaTeX, takich jak symbole matematyczne, słowa łacińskie, tekst itp.

wprowadź opis zdjęcia tutaj

Spróbuj tego.

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

wprowadź opis zdjęcia tutaj

  • Funkcje częściowe
$$
\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}
$$

Powyższy kod to utworzy.

wprowadź opis zdjęcia tutaj

Jeśli chcesz wiedzieć, jak dodać numerację do równań i wyrównać równania, przeczytaj ten artykuł, aby uzyskać szczegółowe informacje .


2

Używanie składni LaTeX bezpośrednio w komórce Markdown działa dla mnie. Używam Jypiter 4.4.0.

%%latexNalegam, żeby nie używać komendy magicznej, po prostu cela przeceny:

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

Renderuje do:

wprowadź opis zdjęcia tutaj


2
To jest rzeczywiście najłatwiejszy i najczystszy sposób na zrobienie tego.
Veliko

1

Pewnego dnia natknąłem się na ten problem za pomocą colaba. I uważam, że najbardziej bezbolesnym sposobem jest uruchomienie tego kodu przed wydrukowaniem. Wtedy wszystko działa jak urok.

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

Wynik wygląda następująco:

wprowadź opis zdjęcia tutaj


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.