Come scrivere LaTeX in Notebook IPython?


296

Come posso visualizzare il codice LaTeX in un notebook IPython?


3
@duffymo Indipendentemente da come ti piace LaTeX, questa è un'ottima domanda. Dai un'occhiata a cosa sia effettivamente il notebook IPython. Forse aiuta se ti dico che è un po 'come orgmode su' roids (ma sfortunatamente senza un buon editor, e con Markdown invece di LaTeX, quindi la domanda di OP).
Konrad Rudolph,

1
Ne sono ignaro, grazie per l'istruzione, Konrad.
Duffymo,

2
E, per essere chiari, adoro LaTeX. (L'ho usato per comporre la mia tesi.) Nessuna obiezione; non sono riuscito a capire il problema.
duffymo,

Risposte:


155

Questo è emerso da una ricerca che stavo facendo, ha trovato una soluzione migliore con qualche ricerca in più, i notebook IPython ora hanno una %%latexmagia che rende l'intera cella Latex senza il $$wrapper per ogni riga.

Fare riferimento al tour del notebook per Rich Display System


33
In Jupyter, non funziona in una cella di markdown ma funziona in una cella di codice.
jwe

287

Il notebook IPython utilizza MathJax per eseguire il rendering di LaTeX all'interno di html / markdown. Inserisci la tua matematica LaTeX all'interno $$.

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

sqrt

Oppure puoi visualizzare l'output LaTeX / Math da Python, visto verso la fine del tour del notebook :

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

integrante


19
Penso che l'OP voglia usare LaTeX invece di Markdown , piuttosto che solo per equazioni. Sono d'accordo con la richiesta, proprio come mi piace Markdown, per documenti complessi utilizzerei sempre LaTeX.
Konrad Rudolph,

16
Gotcha. La soluzione migliore per quello in questo momento sarebbe usare celle "grezze" invece di markdown e digitare LaTeX come faresti. Quindi usa nbconvert per trasformare l'ipynb in TeX (codice, figure e tutto), ed esegui latex per renderlo in PDF, ecc. Non ottieni TeX renderizzato dal vivo nel browser come fai con MathJax / Markdown, ma tu hanno ancora TeX / codice in un documento.
minrk,

1
stessa domanda ma in qtconsole
MySchizoBuddy,

8
e usa $ singolo (anziché doppio $$) per mantenere l'equazione in linea. stackoverflow.com/q/19412644/1224255
TheGrimmScientist

6
Puoi anche eseguire il rendering di un'intera cella LaTeXdigitando %%latexcome prima riga in una cella di testo.
Toke Faurby,

81

Riferimenti LaTeX:

Il blog di Udacity ha il miglior primer LaTeX che abbia mai visto: mostra chiaramente come usare i comandi LaTeX in modo facile da leggere e da ricordare !! Altamente raccomandato .

Questo collegamento ha eccellenti esempi che mostrano sia il codice, sia il risultato reso!
È possibile utilizzare questo sito per imparare rapidamente come scrivere LaTeX con l'esempio.

Ed ecco un rapido riferimento per i comandi / simboli LaTeX .


Riassumendo: vari modi per indicare LaTeX in Jupyter / IPython:

Esempi per celle di markdown:

in linea, avvolgere in: $

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

bloccare, avvolgere in: $$

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

bloccare, avvolgere in:\begin{equation} e\end{equation}

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

bloccare, avvolgere in:\begin{align} e\end{align}

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

Esempi per celle di codice:

LaTex Cell: il %%latex comando magico trasforma l' intera cella in una cella 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}

Oggetto matematico da passare in una stringa LaTeX non elaborata :

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

Classe di lattice . Nota: devi includere tu stesso i delimitatori. Ciò consente di utilizzare altre modalità LaTeX come 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}""")

Documenti per celle grezze:

(scusa, nessun esempio qui, solo i documenti)

Celle grezze Le celle grezze forniscono un posto in cui è possibile scrivere direttamente l'output. Le celle grezze non vengono valutate dal notebook. Una volta passate nbconvert, le celle non elaborate arrivano nel formato di destinazione non modificato. Ad esempio, ciò consente di digitare LaTeX completo in una cella non elaborata , che verrà renderizzata da LaTeX solo dopo la conversione nbconvert.

Documentazione aggiuntiva:

Per Markdown Cells, come citato dai documenti di Jupyter Notebook :

All'interno delle celle di Markdown, puoi anche includere la matematica in modo semplice, usando la notazione LaTeX standard: $ ... $ per la matematica in linea e $$ ... $$ per la matematica visualizzata . Quando viene eseguita la cella Markdown, le parti LaTeX vengono automaticamente visualizzate nell'output HTML come equazioni con tipografia di alta qualità. Ciò è reso possibile da MathJax, che supporta un ampio sottoinsieme di funzionalità LaTeX

Anche gli ambienti matematici standard definiti da LaTeX e AMS-LaTeX (il pacchetto amsmath) funzionano, come \ begin {equation} ... \ end {equation} e \ begin {align} ... \ end {align} . Le nuove macro LaTeX possono essere definite usando metodi standard, come \ newcommand, posizionandole ovunque tra i delimitatori matematici in una cella Markdown. Queste definizioni sono quindi disponibili per tutto il resto della sessione IPython.


Il collegamento alla pagina Udacity non funziona più.
Galaxy

33

Usa $$ se desideri che la tua matematica appaia in una sola riga, ad es.

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

Se non hai bisogno di un'interruzione di riga dopo la matematica, usa il simbolo del dollaro singolo $, ad es.

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

23

Puoi scegliere una cella da contrassegnare, quindi scrivere il codice in lattice che viene interpretato da mathjax, come dice uno dei rispondenti sopra.

In alternativa, la sezione Latex del tutorial del notebook iPython lo spiega bene.

Puoi fare:

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

o fare questo:

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

Maggiori informazioni trovate in questo link


4
il tuo collegamento è ora interrotto
J'e


14

Ho sviluppato prettyPy , che offre un buon modo per stampare equazioni. Sfortunatamente, non è performante e necessita di test.

Esempio:

inserisci qui la descrizione dell'immagine

Certo, sympy è un'ottima alternativa e sebbene prettyPy non consenta di valutare espressioni, l'inizializzazione variabile non è richiesta.


2
Tutto ciò che intendevo era implicare che avevo sviluppato il pacchetto. Ho adattato la mia risposta per affermarlo esplicitamente.
Charles

1
Complimenti per aver messo il codice di dominio pubblico. Eliminerò il mio commento (ora) obsoleto.
Robino,

10

Da allora, non sono stato in grado di utilizzare tutti i comandi di latex in Code anche dopo aver usato la parola chiave %% latex o il limitatore $ .. $, ho installato le nbextension attraverso le quali avrei potuto usare i comandi di latex in Markdown. Dopo aver seguito le istruzioni qui: https://github.com/ipython-contrib/IPython-notebook-extensions/blob/master/README.md e quindi riavviare Jupyter e quindi localhost: 8888 / nbextensions e quindi attivare "Latex Environment for Jupyter ", potrei eseguire molti comandi in lattice. Gli esempi sono qui: 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}

Come vedi, non sono ancora in grado di usare il pacchetto. Ma forse sarà migliorato in futuro.

inserisci qui la descrizione dell'immagine


1
L'estensione per notebook latex_envs non può utilizzare pacchetti o stili LaTeX esterni; Non include un compilatore ma riconosce semplicemente alcune parole chiave, strutture e apporta sostituzioni html appropriate. Grazie per averlo usato. È molto più facile installare le estensioni per notebook ipython-contrib ora usando pip.
jfb,

9

La risposta data da minrk (inclusa per completezza) è buona, ma c'è un altro modo che mi piace ancora di più.

Puoi anche eseguire il rendering di un'intera cella LaTeXdigitando %%latexcome prima riga in una cella di testo. Questo è utile se tu

  • vuoi un maggiore controllo,
  • desidera più di un semplice ambiente matematico,
  • o se hai intenzione di scrivere molta matematica in una cella.

La risposta di minrk :


Il notebook IPython utilizza MathJax per eseguire il rendering di LaTeX all'interno di html / markdown. Inserisci la tua matematica LaTeX all'interno $$.

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

sqrt

Oppure puoi visualizzare l'output LaTeX / Math da Python, visto verso la fine del tour del notebook :

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

integrante



3

In questo articolo ho scritto come scrivere LaTeX su Jupyter Notebook .

Devi racchiuderli in segni di dollaro ($).

  • Per allinearlo a sinistra usa un singolo simbolo del dollaro ($).

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

  • Per allinearlo al centro utilizzare i segni del doppio dollaro ($$).

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

  • Utilizzare \limitsper \lim, \sume \intper aggiungere limiti alla parte superiore e la parte inferiore di ogni segno.

  • Usa una barra rovesciata per sfuggire a parole speciali LaTeX come simboli matematici, parole latine, testo, ecc.

inserisci qui la descrizione dell'immagine

Prova questo.

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

inserisci qui la descrizione dell'immagine

  • Funzioni a tratti
$$
\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}
$$

Il codice sopra creerà questo.

inserisci qui la descrizione dell'immagine

Se vuoi sapere come aggiungere la numerazione alle equazioni e allineare le equazioni, leggi questo articolo per i dettagli .


2

L'uso della sintassi LaTeX direttamente in una cella Markdown funziona per me. Sto usando Jypiter 4.4.0.

Non devo usare il %%latexcomando magico, insisto, semplicemente una cella di markdown:

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

Rende a:

inserisci qui la descrizione dell'immagine


2
Questo è davvero il modo più semplice e pulito per farlo.
Veliko,

1

Un giorno ho riscontrato questo problema usando colab. E trovo che il modo più indolore sia semplicemente eseguire questo codice prima di stampare. Allora tutto funziona come un fascino.

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

Il risultato è simile al seguente:

inserisci qui la descrizione dell'immagine


1

Sto usando i quaderni Jupyter. Ho dovuto scrivere

%%latex
$sin(x)/x$

per ottenere un carattere LaTex.


1
Funziona quando sei in modalità di codifica. Se sei in modalità Markdown, puoi sbarazzarti del lattice %%
Lahiru Karunaratne
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.