¿Cómo escribir LaTeX en IPython Notebook?


296

¿Cómo puedo mostrar el código LaTeX en un cuaderno de IPython?


3
@duffymo Independientemente de cómo te guste LaTeX, esta es una muy buena pregunta. Eche un vistazo a lo que realmente es el portátil IPython. Tal vez ayude si te digo que es un poco como orgmode en 'roids (pero desafortunadamente sin un buen editor y con Markdown en lugar de LaTeX, de ahí la pregunta de OP).
Konrad Rudolph el

1
Lo ignoro, gracias por las instrucciones, Konrad.
duffymo el

2
Y, para ser claros, me encanta LaTeX. (Lo usé para componer mi disertación). Sin objeciones; simplemente no entendí el problema.
duffymo

Respuestas:


155

Esto surgió en una búsqueda que estaba haciendo, encontré una mejor solución con un poco más de búsqueda, los portátiles IPython ahora tienen una %%latexmagia que hace que toda la celda sea Latex sin el $$envoltorio para cada línea.

Consulte el recorrido del cuaderno para el Sistema de pantalla enriquecida


33
En Jupyter, no funciona en una celda de reducción, pero funciona en una celda de código.
jwe

287

El cuaderno de IPython usa MathJax para renderizar LaTeX dentro de html / markdown. Simplemente ponga sus matemáticas de LaTeX adentro $$.

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

sqrt

O puede mostrar la salida de LaTeX / Math de Python, como se ve al final del recorrido del cuaderno :

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

integral


19
Creo que el OP quiere usar LaTeX en lugar de Markdown , en lugar de solo para ecuaciones. Simpatizo con la solicitud, por mucho que me guste Markdown, para documentos complejos siempre usaría LaTeX.
Konrad Rudolph el

16
Gotcha La mejor solución para eso en este momento sería usar celdas 'en bruto' en lugar de rebajas, y simplemente escribir LaTeX como lo haría. Luego use nbconvert para convertir el ipynb a TeX (código, figuras y todo), y ejecute latex para representarlo en PDF, etc. No obtiene TeX en vivo en el navegador como lo hace con MathJax / Markdown, pero todavía tengo TeX / código en un documento.
minrk

1
misma pregunta pero en qtconsole
MySchizoBuddy

8
y use $ simple (en lugar de doble $$) para mantener la ecuación en línea. stackoverflow.com/q/19412644/1224255
TheGrimmScientist

66
También puede representar una celda completa LaTeXescribiendo %%latexla primera línea en una celda de texto.
Toke Faurby

81

Referencias LaTeX:

El blog de Udacity tiene el mejor manual de LaTeX que he visto: ¡muestra claramente cómo usar los comandos de LaTeX de manera fácil de leer y recordar! Muy recomendable .

¡Este enlace tiene excelentes ejemplos que muestran tanto el código como el resultado representado!
Puede usar este sitio para aprender rápidamente cómo escribir LaTeX por ejemplo.

Y aquí hay una referencia rápida para los comandos / símbolos de LaTeX .


Para resumir: varias formas de indicar LaTeX en Jupyter / IPython:

Ejemplos de celdas Markdown:

en línea, envuelva en: $

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

bloque, envolver en: $$

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

bloquear, envolver:\begin{equation} y\end{equation}

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

bloquear, envolver:\begin{align} y\end{align}

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

Ejemplos de celdas de código:

Celda LaTex: el %%latex comando mágico convierte la celda completa en una celda 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}

Objeto matemático para pasar en una cadena de LaTeX sin procesar :

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

Clase de látex . Nota: debe incluir los delimitadores usted mismo. Esto le permite usar otros modos de LaTeX como 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}""")

Documentos para celdas sin procesar:

(lo siento, no hay ejemplo aquí, solo los documentos)

Celdas sin formato Las celdas sin formato proporcionan un lugar en el que puede escribir la salida directamente. Las celdas sin procesar no son evaluadas por el cuaderno. Cuando se pasan nbconvert, las celdas sin procesar llegan en el formato de destino sin modificaciones. Por ejemplo, esto le permite escribir LaTeX completo en una celda sin procesar , que solo será procesada por LaTeX después de la conversión nbconvert.

Documentación adicional:

Para Markdown Cells, como se cita de los documentos de Jupyter Notebook :

Dentro de las celdas Markdown, también puede incluir las matemáticas de una manera directa, utilizando la notación LaTeX estándar: $ ... $ para las matemáticas en línea y $$ ... $$ para las matemáticas que se muestran . Cuando se ejecuta la celda Markdown, las porciones de LaTeX se representan automáticamente en la salida HTML como ecuaciones con tipografía de alta calidad. Esto es posible gracias a MathJax, que admite un gran subconjunto de funcionalidades de LaTeX

Los entornos matemáticos estándar definidos por LaTeX y AMS-LaTeX (el paquete amsmath) también funcionan, como \ begin {ecation} ... \ end {ecation} y \ begin {align} ... \ end {align} . Las nuevas macros de LaTeX se pueden definir utilizando métodos estándar, como \ newcommand, colocándolos en cualquier lugar entre delimitadores matemáticos en una celda de Markdown. Estas definiciones están disponibles en todo el resto de la sesión de IPython.


El enlace a la página de Udacity ya no funciona.
Galaxy

33

Use $$ si desea que sus matemáticas aparezcan en una sola línea, por ejemplo,

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

Si no necesita un salto de línea después de las matemáticas, use un solo signo de dólar $, por ejemplo,

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

23

Puede elegir una celda para que sea rebajada, luego escribir código de látex que mathjax interprete, como dice uno de los que respondieron anteriormente.

Alternativamente, la sección Latex del tutorial del cuaderno iPython explica esto bien.

Puedes hacer lo siguiente:

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 haz esto:

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

Más información encontrada en este enlace


44
su enlace ahora está roto
J'e


14

Desarrollé prettyPy , que ofrece una buena manera de imprimir ecuaciones. Desafortunadamente, no es eficiente y necesita pruebas.

Ejemplo:

ingrese la descripción de la imagen aquí

Por supuesto, sympy es una gran alternativa y, aunque prettyPy no permite evaluar expresiones, no se requiere inicialización de variables.


2
Todo lo que quise decir fue implicar que desarrollé el paquete. Ajusté mi respuesta para declarar explícitamente esto.
Charles

1
Felicitaciones por poner código en dominio público. Eliminaré mi (ahora) comentario obsoleto.
Robino

10

Como no pude usar todos los comandos de látex en Code incluso después de usar la palabra clave %% latex o el limitador $ .. $, instalé las nbextensions a través de las cuales podía usar los comandos de latex en Markdown. Después de seguir las instrucciones aquí: https://github.com/ipython-contrib/IPython-notebook-extensions/blob/master/README.md y luego reinicie Jupyter y luego localhost: 8888 / nbextensions y luego active "Latex Environment para Jupyter ", podría ejecutar muchos comandos de Latex. Los ejemplos están aquí: 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}

Como puede ver, todavía no puedo usar usepackage. Pero tal vez se mejorará en el futuro.

ingrese la descripción de la imagen aquí


1
La extensión del cuaderno latex_envs no puede usar paquetes o estilos externos de LaTeX; No incluye un compilador, sino que simplemente reconoce algunas palabras clave, estructuras y realiza sustituciones html apropiadas. Gracias por usarlo. Es mucho más fácil instalar las extensiones de notebook ipython-contrib ahora usando pip.
jfb

9

La respuesta dada por minrk (incluida para completar) es buena, pero hay otra forma en que me gusta aún más.

También puede representar una celda completa LaTeXescribiendo %%latexla primera línea en una celda de texto. Esto es útil si usted

  • quiere más control,
  • quiere más que solo un entorno matemático,
  • o si vas a escribir muchas matemáticas en una celda.

La respuesta de minrk :


El cuaderno de IPython usa MathJax para renderizar LaTeX dentro de html / markdown. Simplemente ponga sus matemáticas de LaTeX adentro $$.

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

sqrt

O puede mostrar la salida de LaTeX / Math de Python, como se ve al final del recorrido del cuaderno :

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

integral



3

Escribí cómo escribir LaTeX en Jupyter Notebook en este artículo.

Debe encerrarlos en signos de dólar ($).

  • Para alinearse a la izquierda, use un solo signo de dólar ($).

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

  • Para alinearse con el centro, use signos de doble dólar ($$).

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

  • Utilizar \limitspara \lim, \sumy \intpara agregar límites a la parte superior y la parte inferior de cada signo.

  • Use una barra invertida para escapar de palabras especiales de LaTeX como símbolos matemáticos, palabras latinas, texto, etc.

ingrese la descripción de la imagen aquí

Prueba este.

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

ingrese la descripción de la imagen aquí

  • Funciones por partes
$$
\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}
$$

El código anterior creará esto.

ingrese la descripción de la imagen aquí

Si desea saber cómo agregar numeración a ecuaciones y alinear ecuaciones, lea este artículo para obtener más detalles .


2

Usar la sintaxis de LaTeX directamente en una celda Markdown funciona para mí. Estoy usando Jypiter 4.4.0.

No tengo que usar el %%latexcomando mágico, insisto, simplemente una celda de reducción:

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

Renders a:

ingrese la descripción de la imagen aquí


2
De hecho, esta es la forma más fácil y limpia de hacerlo.
Veliko

1

Encontré este problema algún día usando colab. Y creo que la forma más sencilla es ejecutar este código antes de imprimirlo. Todo funciona como encanto entonces.

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

El resultado se ve así:

ingrese la descripción de la imagen aquí


1

Estoy usando los cuadernos Jupyter. Tuve que escribir

%%latex
$sin(x)/x$

para obtener una fuente LaTex.


1
Esto funciona cuando está en el modo de codificación. Si está en el modo Markdown, puede deshacerse de %% latex
Lahiru Karunaratne
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.