Como escrever LaTeX no IPython Notebook?

296

Como posso exibir o código LaTeX em um notebook IPython?

KostasA
fonte
3
@duffymo Independentemente de como você gosta do LaTeX, esta é uma pergunta muito boa. Veja o que realmente é o notebook IPython. Talvez ajude se eu lhe disser que é um pouco como o orgmode nos roids (mas infelizmente sem um bom editor e com o Markdown em vez do LaTeX, daí a pergunta do OP).
Konrad Rudolph
1
Eu sou ignorante, obrigado pela instrução, Konrad.
Duffymo 3/11
2
E, para deixar claro, eu amo o LaTeX. (Usei para escrever minha dissertação.) Sem objeções; apenas não entendi o problema.
Duffymo

Respostas:

155

Isso surgiu em uma pesquisa que eu estava fazendo, encontrou uma solução melhor com mais pesquisas, os notebooks IPython agora têm uma %%latexmágica que torna a célula inteira de látex sem o $$invólucro de cada linha.

Consulte o tour do notebook para o Rich Display System

hochopeper
fonte
33
No Jupyter, ele não funciona em uma célula de remarcação, mas em uma célula de código.
jWe
287

O notebook IPython usa MathJax para renderizar o LaTeX dentro de html / markdown. Basta colocar a sua matemática LaTeX dentro $$.

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

sqrt

Ou você pode exibir a saída LaTeX / Math do Python, como visto no final do tour do 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

minrk
fonte
19
Eu acho que o OP quer usar o LaTeX em vez do Markdown , ao invés de apenas para equações. Simpatizo com a solicitação - por mais que eu goste do Markdown, para documentos complexos que eu sempre usaria o LaTeX.
amigos estão dizendo sobre Konrad Rudolph
16
Peguei vocês. A melhor solução para isso agora seria usar células 'não processadas' em vez de remarcações e apenas digitar LaTeX como você faria. Em seguida, use o nbconvert para transformar o ipynb em TeX (código, figuras e tudo) e execute o látex para renderizá-lo em PDF, etc. ainda possui código TeX / em um documento.
Minrk
1
mesma pergunta, mas em qtconsole
MySchizoBuddy
8
e use $ simples (em vez de duplo $$) para manter a equação alinhada. stackoverflow.com/q/19412644/1224255
TheGrimmScientist
6
Você também pode renderizar uma célula inteira LaTeXdigitando %%latexcomo a primeira linha em uma célula de texto.
Toke Faurby
81

Referências do LaTeX:

O blog da Udacity tem o melhor LaTeX Primer que eu já vi: mostra claramente como usar os comandos do LaTeX de maneira fácil de ler e fácil de lembrar !! Altamente recomendado .

Este link possui excelentes exemplos mostrando o código e o resultado renderizado!
Você pode usar este site para aprender rapidamente como escrever LaTeX por exemplo.

E, aqui está uma referência rápida para comandos / símbolos do LaTeX .


Para resumir: várias maneiras de indicar o LaTeX no Jupyter / IPython:

Exemplos para células Markdown:

embutido, envolva: $

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

bloco, envolva: $$

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

bloco, envolva:\begin{equation} e\end{equation}

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

bloco, envolva:\begin{align} e\end{align}

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

Exemplos para células de código:

Célula LaTex: %%latex comando mágico transforma a célula inteira em uma célula 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 a ser transmitido em uma string LaTeX não processada :

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

Aula de látex . Nota: você deve incluir os delimitadores. Isso permite que você use outros 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 células não processadas:

(desculpe, nenhum exemplo aqui, apenas os documentos)

Células não processadas As células não processadas fornecem um local no qual você pode gravar a saída diretamente. As células brutas não são avaliadas pelo notebook. Quando passadas nbconvert, as células brutas chegam no formato de destino sem modificação. Por exemplo, isso permite digitar o LaTeX completo em uma célula não processada , que só será renderizada pelo LaTeX após a conversão por nbconvert.

Documentação adicional:

Para células Markdown, conforme citado em documentos do Jupyter Notebook :

Nas células Markdown, você também pode incluir matemática de maneira direta, usando a notação padrão do LaTeX: $ ... $ para matemática embutida e $$ ... $$ para matemática exibida . Quando a célula Markdown é executada, as partes do LaTeX são renderizadas automaticamente na saída HTML como equações com tipografia de alta qualidade. Isso é possível graças ao MathJax, que suporta um grande subconjunto da funcionalidade LaTeX

Os ambientes matemáticos padrão definidos pelo LaTeX e pelo AMS-LaTeX (o pacote amsmath) também funcionam, como \ begin {equation} ... \ end {equation} e \ begin {align} ... \ end {align} . Novas macros do LaTeX podem ser definidas usando métodos padrão, como \ newcommand, colocando-os em qualquer lugar entre delimitadores matemáticos em uma célula Markdown. Essas definições estão disponíveis no restante da sessão do IPython.

SherylHohman
fonte
O link para a página Udacity não funciona mais.
Galaxy
33

Use $$ se quiser que sua matemática apareça em uma única linha, por exemplo,

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

Se você não precisar de uma quebra de linha após a matemática, use um único cifrão $, por exemplo,

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

Você pode escolher uma célula a ser remarcada e depois escrever um código de látex que seja interpretado pelo mathjax, como um dos respondentes disse acima.

Como alternativa, a seção Látex do tutorial do notebook iPython explica isso bem.

Você pode fazer:

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 faça o seguinte:

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

Mais informações encontradas neste link

joeP
fonte
4
seu link está quebrado agora
J'e 24/04
14

Eu desenvolvi prettyPy , que oferece uma boa maneira de imprimir equações. Infelizmente, não é de alto desempenho e precisa ser testado.

Exemplo:

insira a descrição da imagem aqui

É verdade que o sympy é uma ótima alternativa e, embora o prettyPy não permita avaliar expressões, a inicialização de variáveis ​​não é necessária.

Charles
fonte
2
Tudo o que eu quis dizer foi sugerir que desenvolvi o pacote. Eu ajustei minha resposta para declarar isso explicitamente.
Charles
1
Parabéns por colocar o código em domínio público. Excluirei meu (agora) comentário obsoleto.
Robino 03/07/19
10

Como não consegui usar todos os comandos de látex no Code, mesmo depois de usar a palavra-chave %% latex ou o limitador $ .. $, instalei as nbextensions pelas quais poderia usar os comandos de látex no Markdown. Depois de seguir as instruções aqui: https://github.com/ipython-contrib/IPython-notebook-extensions/blob/master/README.md e, em seguida, reinicie o Jupyter e o localhost: 8888 / nbextensions e ative "Latex Environment for Jupyter ", eu poderia executar muitos comandos Latex. Os exemplos estão aqui: 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 você vê, ainda não consigo usar o usepackage. Mas talvez seja melhorado no futuro.

insira a descrição da imagem aqui

infoclogged
fonte
1
A extensão do notebook latex_envs não pode usar pacotes ou estilos externos do LaTeX; Ele não inclui um compilador, mas simplesmente reconhece algumas palavras-chave, estruturas e faz substituições apropriadas de html. Obrigado por usá-lo. É muito mais fácil instalar as extensões de notebook ipython-contrib agora usando pip.
jfb
9

A resposta dada pelo minrk (incluída para ser completa) é boa, mas há outra maneira de eu gostar ainda mais.

Você também pode renderizar uma célula inteira LaTeXdigitando %%latexcomo a primeira linha em uma célula de texto. Isso é útil se você

  • quer mais controle,
  • quer mais do que apenas um ambiente de matemática,
  • ou se você vai escrever muita matemática em uma célula.

resposta de minrk :


O notebook IPython usa MathJax para renderizar o LaTeX dentro de html / markdown. Basta colocar a sua matemática LaTeX dentro $$.

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

sqrt

Ou você pode exibir a saída LaTeX / Math do Python, como visto no final do tour do 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

Toke Faurby
fonte
5

Se seu objetivo principal é fazer contas, o SymPy fornece uma excelente abordagem para expressões funcionais de látex que parecem ótimas.

Eron Lloyd
fonte
3

Eu escrevi como escrever LaTeX no Jupyter Notebook neste artigo.

Você precisa colocá-los em sinais de dólar ($).

  • Para alinhar à esquerda, use um único sinal de dólar ($).

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

  • Para alinhar ao centro, use cifrões duplos ($$).

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

  • Use \limitspara \lim, \sume \intpara adicionar limites para o topo e no fundo de cada signo.

  • Use uma barra invertida para escapar de palavras especiais do LaTeX, como símbolos matemáticos, palavras latinas, texto etc.

insira a descrição da imagem aqui

Tente este.

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

insira a descrição da imagem aqui

  • Funções 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}
$$

O código acima criará isso.

insira a descrição da imagem aqui

Se você quiser saber como adicionar numeração a equações e alinhar equações, leia este artigo para obter detalhes .

canela
fonte
2

Usar a sintaxe do LaTeX diretamente em uma célula Markdown funciona para mim. Estou usando o Jypiter 4.4.0.

Não preciso usar o %%latexcomando mágico, insisto, simplesmente uma célula de remarcação:

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

Renderiza para:

insira a descrição da imagem aqui

Stephane Rolland
fonte
2
Esta é realmente a maneira mais fácil e limpa de fazer isso.
Veliko
1

Me deparei com esse problema algum dia usando colab. E acho que a maneira mais indolor é apenas executar esse código antes da impressão. Tudo funciona como charme então.

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

O resultado fica assim:

insira a descrição da imagem aqui

Raio
fonte
1

Estou usando os notebooks Jupyter. Eu tive que escrever

%%latex
$sin(x)/x$

para obter uma fonte LaTex.

user1402208
fonte
1
Isso funciona quando você está no modo de codificação. Se você estiver no modo Markdown, poderá se livrar do %% latex
Lahiru Karunaratne