Wie schreibe ich LaTeX in IPython Notebook?

296

Wie kann ich LaTeX-Code in einem IPython-Notebook anzeigen?

KostasA
quelle
3
@duffymo Egal wie du mit LaTeX umgehst, das ist eine ziemlich gute Frage. Schauen Sie sich an, was IPython-Notebook eigentlich ist. Vielleicht hilft es, wenn ich Ihnen sage, dass es ein bisschen wie orgmode on 'roids ist (aber leider ohne einen netten Editor und mit Markdown anstelle von LaTeX, daher die Frage von OP).
Konrad Rudolph
1
Ich weiß es nicht, danke für die Anweisung, Konrad.
Duffymo
2
Und um ganz klar zu sein, ich liebe LaTeX. (Ich habe es verwendet, um meine Dissertation zu schreiben.) Keine Einwände; Ich habe das Problem einfach nicht verstanden.
Duffymo

Antworten:

155

Dies kam in einer Suche auf, die ich gerade durchführte, und fand eine bessere Lösung mit etwas mehr Suche. IPython-Notebooks haben jetzt eine %%latexMagie, die den gesamten Zellen-Latex ohne den $$Wrapper für jede Zeile macht.

Informationen zum Rich Display System finden Sie auf der Notebook-Tour

hochopeper
quelle
33
In Jupyter funktioniert es nicht in einer Markdown-Zelle, sondern in einer Codezelle.
Jwe
287

IPython Notebook verwendet MathJax , um LaTeX in HTML / Markdown zu rendern. Legen Sie einfach Ihre LaTeX-Mathematik hinein $$.

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

sqrt

Oder Sie können die LaTeX / Math-Ausgabe von Python gegen Ende der Notebook-Tour anzeigen :

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
quelle
19
Ich denke, das OP möchte LaTeX anstelle von Markdown verwenden und nicht nur für Gleichungen. Ich sympathisiere mit der Anfrage - so sehr ich Markdown mag, für komplexe Dokumente würde ich immer LaTeX verwenden.
Konrad Rudolph
16
Erwischt. Die beste Lösung dafür wäre derzeit, "rohe" Zellen anstelle von Markdown zu verwenden und LaTeX wie gewohnt einzugeben. Verwenden Sie dann nbconvert , um das ipynb in TeX (Code, Zahlen und alles) umzuwandeln, und führen Sie Latex aus, um es in PDF usw. zu rendern. Sie erhalten im Browser kein live gerendertes TeX wie bei MathJax / Markdown, sondern Sie habe noch TeX / Code in einem Dokument.
Minrk
1
gleiche Frage, aber in qtconsole
MySchizoBuddy
8
und verwenden Sie einfach $ (anstelle von doppelt $$), um die Gleichung in einer Linie zu halten. stackoverflow.com/q/19412644/1224255
TheGrimmScientist
6
Sie können auch eine ganze Zelle so rendern, wie Sie es als erste Zeile in eine Textzelle LaTeXeingeben %%latex.
Toke Faurby
81

LaTeX-Referenzen:

Udacitys Blog hat den besten LaTeX-Primer, den ich gesehen habe: Er zeigt deutlich, wie man LaTeX-Befehle auf einfach zu lesende und leicht zu merkende Weise verwendet !! Sehr zu empfehlen .

Dieser Link enthält hervorragende Beispiele, die sowohl den Code als auch das gerenderte Ergebnis anzeigen!
Auf dieser Website können Sie schnell lernen, wie Sie LaTeX anhand eines Beispiels schreiben.

Und hier ist eine Kurzreferenz für LaTeX- Befehle / -Symbole.


Zusammenfassend: Verschiedene Möglichkeiten, LaTeX in Jupyter / IPython anzuzeigen:

Beispiele für Markdown-Zellen:

Inline, einwickeln: $

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

blockieren, einwickeln: $$

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

blockieren, einwickeln:\begin{equation} und\end{equation}

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

blockieren, einwickeln:\begin{align} und\end{align}

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

Beispiele für Codezellen:

LaTex-Zelle: Der %%latex magische Befehl verwandelt die gesamte Zelle in eine LaTeX-Zelle

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

Mathematisches Objekt , das in einer rohen LaTeX-Zeichenfolge übergeben werden soll :

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

Latexklasse . Hinweis: Sie müssen die Trennzeichen selbst einfügen. Auf diese Weise können Sie andere LaTeX - Modi verwenden , wie zum Beispiel 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}""")

Dokumente für Rohzellen:

(Entschuldigung, kein Beispiel hier, nur die Dokumente)

Rohzellen Rohzellen bieten einen Ort, an dem Sie die Ausgabe direkt schreiben können. Rohzellen werden vom Notebook nicht ausgewertet. Beim Durchlaufen nbconvertkommen Rohzellen unverändert im Zielformat an. Auf diese Weise können Sie beispielsweise vollständiges LaTeX in eine Rohzelle eingeben , die erst nach der Konvertierung von von LaTeX gerendert wird nbconvert.

Zusätzliche Dokumentation:

Für Markdown-Zellen, wie aus Jupyter Notebook-Dokumenten zitiert :

In Markdown-Zellen können Sie Mathematik auch auf einfache Weise mit der Standard-LaTeX-Notation einschließen: $ ... $ für Inline-Mathematik und $$ ... $$ für angezeigte Mathematik . Wenn die Markdown-Zelle ausgeführt wird, werden die LaTeX-Teile in der HTML-Ausgabe automatisch als Gleichungen mit hochwertiger Typografie gerendert. Dies wird durch MathJax ermöglicht, das eine große Teilmenge der LaTeX-Funktionalität unterstützt

Standard-Mathematikumgebungen, die von LaTeX und AMS-LaTeX (dem Amsmath-Paket) definiert wurden, funktionieren ebenfalls, z. B. \ begin {Gleichung} ... \ end {Gleichung} und \ begin {align} ... \ end {align} . Neue LaTeX-Makros können mit Standardmethoden wie \ newcommand definiert werden, indem sie irgendwo zwischen mathematischen Trennzeichen in einer Markdown-Zelle platziert werden. Diese Definitionen sind dann während der restlichen IPython-Sitzung verfügbar.

SherylHohman
quelle
Der Link zur Udacity-Seite funktioniert nicht mehr.
Galaxy
33

Verwenden Sie $$, wenn Ihre Mathematik in einer einzelnen Zeile angezeigt werden soll, z.

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

Wenn Sie nach der Berechnung keinen Zeilenumbruch benötigen, verwenden Sie ein einzelnes Dollarzeichen $, z.

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

Sie können eine Zelle als Markdown auswählen und dann Latexcode schreiben, der von mathjax interpretiert wird, wie einer der Antwortenden oben sagt.

Alternativ dazu wird dies im Abschnitt Latex des iPython-Notebook-Tutorials gut erklärt.

Sie können entweder:

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

oder mach das:

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

Weitere Infos finden Sie unter diesem Link

JoeP
quelle
4
Ihr Link ist jetzt unterbrochen
J'e
14

Ich habe PrettyPy entwickelt , das eine gute Möglichkeit bietet, Gleichungen zu drucken. Leider ist es nicht performant und muss getestet werden.

Beispiel:

Geben Sie hier die Bildbeschreibung ein

Zugegeben, Sympy ist eine großartige Alternative, und obwohl PrettyPy die Auswertung von Ausdrücken nicht zulässt, ist keine Variableninitialisierung erforderlich.

Charles
quelle
2
Ich wollte nur implizieren, dass ich das Paket entwickelt habe. Ich habe meine Antwort angepasst, um dies ausdrücklich anzugeben.
Charles
1
Ein großes Lob für die Veröffentlichung von Code. Ich werde meinen (jetzt) ​​veralteten Kommentar löschen.
Robino
10

Da ich auch nach Verwendung des Schlüsselworts %% latex oder des Limiters $ .. $ nicht alle Latexbefehle in Code verwenden konnte, installierte ich die nbextensions, über die ich die Latexbefehle in Markdown verwenden konnte. Befolgen Sie die Anweisungen hier: https://github.com/ipython-contrib/IPython-notebook-extensions/blob/master/README.md und starten Sie den Jupyter neu und dann localhost: 8888 / nbextensions und aktivieren Sie dann "Latex Environment for" Jupyter ", ich konnte viele Latex-Befehle ausführen. Beispiele finden Sie hier: 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}

Wie Sie sehen, kann ich das Usepackage immer noch nicht verwenden. Aber vielleicht wird es in Zukunft verbessert.

Geben Sie hier die Bildbeschreibung ein

infoclogged
quelle
1
Die Notebook-Erweiterung latex_envs kann keine externen LaTeX-Pakete oder -Stile verwenden. Es enthält keinen Compiler, sondern erkennt einfach einige Schlüsselwörter, Strukturen und nimmt entsprechende HTML-Ersetzungen vor. Danke, dass du es benutzt. Es ist jetzt viel einfacher, die ipython-Contrib-Notebook-Erweiterungen mit pip zu installieren.
JFB
9

Die Antwort von minrk (der Vollständigkeit halber enthalten) ist gut, aber es gibt noch einen anderen Weg, den ich noch mehr mag.

Sie können auch eine ganze Zelle so rendern, wie Sie es als erste Zeile in eine Textzelle LaTeXeingeben %%latex. Dies ist nützlich, wenn Sie

  • will mehr Kontrolle,
  • will mehr als nur eine mathematische Umgebung,
  • oder wenn Sie viel Mathe in einer Zelle schreiben wollen.

Antwort von minrk :


IPython Notebook verwendet MathJax , um LaTeX in HTML / Markdown zu rendern. Legen Sie einfach Ihre LaTeX-Mathematik hinein $$.

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

sqrt

Oder Sie können die LaTeX / Math-Ausgabe von Python gegen Ende der Notebook-Tour anzeigen :

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
quelle
3

In diesem Artikel habe ich geschrieben, wie man LaTeX in Jupyter Notebook schreibt .

Sie müssen sie in Dollarzeichen ($) einschließen.

  • Verwenden Sie zum Ausrichten nach links ein einzelnes Dollarzeichen ($).

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

  • Verwenden Sie zur Ausrichtung auf die Mitte doppelte Dollarzeichen ($$).

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

  • Verwenden Sie \limitsfür \lim, \sumund \inthinzufügen Grenzen nach oben und unten in jedem Zeichen.

  • Verwenden Sie einen Backslash, um LaTeX-Sonderwörter wie mathematische Symbole, lateinische Wörter, Text usw. zu umgehen.

Geben Sie hier die Bildbeschreibung ein

Probier diese.

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

Geben Sie hier die Bildbeschreibung ein

  • Stückweise Funktionen
$$
\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}
$$

Der obige Code erstellt dies.

Geben Sie hier die Bildbeschreibung ein

Wenn Sie wissen möchten, wie Sie Gleichungen nummerieren und Gleichungen ausrichten, lesen Sie diesen Artikel für Details .

Schienbein
quelle
2

Die Verwendung der LaTeX-Syntax direkt in einer Markdown-Zelle funktioniert bei mir. Ich benutze Jypiter 4.4.0.

Ich muss %%latexdarauf bestehen, dass ich keinen magischen Befehl verwenden muss, sondern nur eine Markdown-Zelle:

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

Rendern zu:

Geben Sie hier die Bildbeschreibung ein

Stephane Rolland
quelle
2
Dies ist in der Tat der einfachste und sauberste Weg, dies zu tun.
Veliko
1

Ich bin eines Tages mit Colab auf dieses Problem gestoßen. Und ich finde, der schmerzloseste Weg ist, diesen Code vor dem Drucken auszuführen. Dann funktioniert alles wie 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()

Das Ergebnis sieht folgendermaßen aus:

Geben Sie hier die Bildbeschreibung ein

Strahl
quelle
1

Ich benutze Jupyter Notebooks. Ich musste schreiben

%%latex
$sin(x)/x$

um eine LaTex-Schriftart zu erhalten.

user1402208
quelle
1
Dies funktioniert, wenn Sie sich im Codierungsmodus befinden. Wenn Sie im Markdown-Modus sind, können Sie %% Latex
Lahiru Karunaratne