Comment écrire LaTeX dans IPython Notebook?


296

Comment afficher le code LaTeX dans un bloc-notes IPython?


3
@duffymo Quelle que soit la façon dont vous pensez de LaTeX, c'est une très bonne question. Jetez un œil à ce qu'est réellement le bloc-notes IPython. Peut-être que cela aide si je vous dis que c'est un peu comme orgmode sur les roids (mais malheureusement sans un bon éditeur, et avec Markdown au lieu de LaTeX, d'où la question d'OP).
Konrad Rudolph

1
Je l'ignore, merci pour l'instruction, Konrad.
duffymo

2
Et, pour être clair, j'adore LaTeX. (Je l'ai utilisé pour composer ma thèse.) Aucune objection; n'a tout simplement pas compris le problème.
duffymo

Réponses:


155

Ceci est apparu dans une recherche que je faisais, a trouvé une meilleure solution avec un peu plus de recherche, les cahiers IPython ont maintenant une %%latexmagie qui rend la cellule entière en Latex sans le $$wrapper pour chaque ligne.

Reportez-vous à la visite du bloc-notes pour Rich Display System


33
Dans Jupyter, cela ne fonctionne pas dans une cellule de démarquage mais cela fonctionne dans une cellule de code.
jwe

287

Le bloc-notes IPython utilise MathJax pour rendre LaTeX dans html / markdown. Mettez simplement vos calculs LaTeX à l'intérieur $$.

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

sqrt

Ou vous pouvez afficher la sortie LaTeX / Math de Python, comme vu vers la fin de la visite du bloc - notes :

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

intégral


19
Je pense que l'OP veut utiliser LaTeX au lieu de Markdown , plutôt que juste pour les équations. Je sympathise avec la demande - tout comme j'aime Markdown, pour les documents complexes, j'utiliserais toujours LaTeX.
Konrad Rudolph

16
Je t'ai eu. La meilleure solution pour le moment serait d'utiliser des cellules «brutes» au lieu de démarques, et de taper LaTeX comme vous le feriez. Utilisez ensuite nbconvert pour transformer l'ipynb en TeX (code, chiffres et tout), et exécutez latex pour le rendre au format PDF, etc. Vous n'obtenez pas de TeX rendu en direct dans le navigateur comme vous le faites avec MathJax / Markdown, mais vous ont toujours TeX / code dans un document.
minrk

1
même question mais dans qtconsole
MySchizoBuddy

8
et utilisez un seul $ (plutôt que le double $$) pour maintenir l'équation en ligne. stackoverflow.com/q/19412644/1224255
TheGrimmScientist

6
Vous pouvez également afficher une cellule entière LaTeXen tapant %%latexcomme première ligne dans une cellule de texte.
Toke Faurby

81

Références LaTeX:

Le blog d'Udacity a le meilleur apprêt LaTeX que j'ai vu: il montre clairement comment utiliser les commandes LaTeX d'une manière facile à lire et à retenir !! Hautement recommandé .

Ce lien a d'excellents exemples montrant à la fois le code et le résultat rendu!
Vous pouvez utiliser ce site pour apprendre rapidement comment écrire LaTeX par exemple.

Et, voici une référence rapide pour les commandes / symboles LaTeX .


Pour résumer: différentes façons d'indiquer LaTeX dans Jupyter / IPython:

Exemples pour les cellules Markdown:

en ligne, enveloppez: $

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

bloquer, envelopper: $$

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

bloquer, envelopper:\begin{equation} et\end{equation}

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

bloquer, envelopper:\begin{align} et\end{align}

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

Exemples pour les cellules de code:

LaTex Cell: %%latex commande magique transforme la cellule entière en une LATEX cellulaire

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

Objet mathématique à passer dans une chaîne brute LaTeX :

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

Cours de latex . Remarque: vous devez inclure les délimiteurs vous-même. Cela vous permet d'utiliser d'autres modes LaTeX tels que 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 pour les cellules brutes:

(désolé, pas d'exemple ici, juste les documents)

Cellules brutes Les cellules brutes fournissent un emplacement dans lequel vous pouvez écrire directement la sortie. Les cellules brutes ne sont pas évaluées par l'ordinateur portable. Lorsqu'elles sont transmises nbconvert, les cellules brutes arrivent au format de destination non modifiées. Par exemple, cela vous permet de taper LaTeX complet dans une cellule brute , qui ne sera rendue par LaTeX qu'après conversion par nbconvert.

Documentation supplémentaire:

Pour les cellules Markdown, telles que citées dans les documents Jupyter Notebook :

Dans les cellules Markdown, vous pouvez également inclure les mathématiques de manière simple, en utilisant la notation LaTeX standard: $ ... $ pour les mathématiques en ligne et $$ ... $$ pour les mathématiques affichées . Lorsque la cellule Markdown est exécutée, les parties LaTeX sont automatiquement rendues dans la sortie HTML sous forme d'équations avec une typographie de haute qualité. Ceci est rendu possible par MathJax, qui prend en charge un large sous-ensemble de fonctionnalités LaTeX

Les environnements mathématiques standard définis par LaTeX et AMS-LaTeX (le package amsmath) fonctionnent également, tels que \ begin {equation} ... \ end {equation} et \ begin {align} ... \ end {align} . Les nouvelles macros LaTeX peuvent être définies à l'aide de méthodes standard, telles que \ newcommand, en les plaçant n'importe où entre les délimiteurs mathématiques dans une cellule Markdown. Ces définitions sont ensuite disponibles dans le reste de la session IPython.


Le lien vers la page Udacity ne fonctionne plus.
Galaxy

33

Utilisez $$ si vous souhaitez que vos calculs apparaissent sur une seule ligne, par exemple,

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

Si vous n'avez pas besoin d'un saut de ligne après le calcul, utilisez le signe dollar simple $, par exemple,

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

23

Vous pouvez choisir une cellule à démarquer, puis écrire du code latex qui sera interprété par mathjax, comme l'un des répondants l'a dit ci-dessus.

Alternativement, la section Latex du didacticiel du bloc-notes iPython l'explique bien.

Vous pouvez soit faire:

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

ou faites ceci:

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

Plus d'informations trouvées dans ce lien


4
votre lien est maintenant rompu
J'e

1
De bons
ptim

14

J'ai développé prettyPy , qui offre une belle façon d'imprimer une équation. Malheureusement, ce n'est pas performant et doit être testé.

Exemple:

entrez la description de l'image ici

Certes, sympy est une excellente alternative et bien que prettyPy ne permette pas d'évaluer les expressions, l'initialisation des variables n'est pas requise.


2
Tout ce que je voulais dire, c'était impliquer que j'avais développé le paquet. J'ai ajusté ma réponse pour le dire explicitement.
Charles

1
Félicitations pour avoir mis du code dans le domaine public. Je supprimerai mon commentaire (désormais) obsolète.
Robino

10

Depuis, je n'ai pas pu utiliser toutes les commandes latex dans Code même après avoir utilisé le mot clé latex %% ou le limiteur $ .. $, j'ai installé les nbextensions grâce auxquelles je pouvais utiliser les commandes latex dans Markdown. Après avoir suivi les instructions ici: https://github.com/ipython-contrib/IPython-notebook-extensions/blob/master/README.md puis redémarrer Jupyter puis localhost: 8888 / nbextensions puis activer "Latex Environment for Jupyter ", j'ai pu exécuter de nombreuses commandes Latex. Des exemples sont ici: 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}

Comme vous le voyez, je ne peux toujours pas utiliser usepackage. Mais il sera peut-être amélioré à l'avenir.

entrez la description de l'image ici


1
L'extension de bloc-notes latex_envs ne peut pas utiliser de packages ou de styles LaTeX externes; Il n'inclut pas de compilateur mais reconnaît simplement certains mots clés, structures et effectue les substitutions html appropriées. Merci de l'utiliser. Il est beaucoup plus facile d'installer les extensions de bloc-notes ipython-contrib à l'aide de pip.
jfb

9

La réponse donnée par minrk (inclus pour être complet) est bonne, mais il y a une autre façon que j'aime encore plus.

Vous pouvez également afficher une cellule entière LaTeXen tapant %%latexcomme première ligne dans une cellule de texte. C'est utile si vous

  • veulent plus de contrôle,
  • veulent plus qu'un simple environnement mathématique,
  • ou si vous allez écrire beaucoup de mathématiques dans une cellule.

réponse de minrk :


Le bloc-notes IPython utilise MathJax pour rendre LaTeX dans html / markdown. Mettez simplement vos calculs LaTeX à l'intérieur $$.

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

sqrt

Ou vous pouvez afficher la sortie LaTeX / Math de Python, comme vu vers la fin de la visite du bloc - notes :

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

intégral



3

J'ai écrit comment écrire LaTeX dans Jupyter Notebook dans cet article.

Vous devez les entourer de signes dollar ($).

  • Pour aligner à gauche, utilisez un seul signe dollar ($).

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

  • Pour vous aligner sur le centre, utilisez des signes à double dollar ($$).

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

  • Utilisez \limitspour \lim, \sumet \intd'ajouter des limites vers le haut et le bas de chaque signe.

  • Utilisez une barre oblique inverse pour échapper aux mots spéciaux LaTeX tels que les symboles mathématiques, les mots latins, le texte, etc.

entrez la description de l'image ici

Essaye celui-là.

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

entrez la description de l'image ici

  • Fonctions par morceaux
$$
\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}
$$

Le code ci-dessus va créer cela.

entrez la description de l'image ici

Si vous voulez savoir comment ajouter une numérotation aux équations et aligner les équations, veuillez lire cet article pour plus de détails .


2

L'utilisation de la syntaxe LaTeX directement dans une cellule Markdown fonctionne pour moi. J'utilise Jypiter 4.4.0.

Je n'ai pas besoin d'utiliser %%latexla commande magique, j'insiste, simplement une cellule de démarque:

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

Rend à:

entrez la description de l'image ici


2
C'est en effet la manière la plus simple et la plus propre de le faire.
Veliko

1

J'ai rencontré ce problème un jour en utilisant colab. Et je trouve que le moyen le plus indolore consiste simplement à exécuter ce code avant d'imprimer. Tout fonctionne alors comme un charme.

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

Le résultat ressemble à ceci:

entrez la description de l'image ici


1

J'utilise Jupyter Notebooks. Je devais écrire

%%latex
$sin(x)/x$

pour obtenir une police LaTex.


1
Cela fonctionne lorsque vous êtes en mode de codage. Si vous êtes en mode Markdown, vous pouvez vous débarrasser de %% latex
Lahiru Karunaratne
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.