Как написать LaTeX в IPython Notebook?


296

Как я могу отобразить код LaTeX в IPython Notebook?


3
@duffymo Независимо от того, как вы относитесь к LaTeX, это довольно хороший вопрос. Посмотрите, что на самом деле представляет собой ноутбук IPython. Возможно, будет полезно, если я скажу вам, что это немного похоже на orgmode на 'roids (но, к сожалению, без хорошего редактора и с Markdown вместо LaTeX, отсюда и вопрос OP).
Конрад Рудольф

1
Я в неведении об этом, спасибо за инструкцию, Конрад.
Даффимо

2
И, чтобы было ясно, я люблю LaTeX. (Я использовал его, чтобы набрать свою диссертацию.) Нет возражений; просто не смог понять проблему.
Даффимо

Ответы:


155

Это пришло в результате поиска, который я только что делал, нашел лучшее решение с еще большим поиском, ноутбуки IPython теперь обладают %%latexмагией, которая делает латекс целой клетки без $$обертки для каждой строки.

Порекомендуйте тур по ноутбукам для Rich Display System


33
В Jupyter он не работает в ячейке уценки, но работает в ячейке кода.
jwe

287

Блокнот IPython использует MathJax для рендеринга LaTeX внутри html / markdown. Просто поместите ваш LaTeX математику внутри $$.

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

SQRT

Или вы можете отобразить вывод LaTeX / Math из Python, как видно в конце тура по ноутбуку :

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

интеграл


19
Я думаю, что ОП хочет использовать LaTeX вместо Markdown , а не только для уравнений. Я сочувствую запросу - так же, как мне нравится Markdown, для сложных документов я всегда буду использовать LaTeX.
Конрад Рудольф

16
Попался. Лучшим решением для этого сейчас будет использование «сырых» ячеек вместо уценки, и просто введите LaTeX, как вы бы. Затем используйте nbconvert, чтобы превратить ipynb в TeX (код, цифры и все), и запустите latex для его рендеринга в PDF и т. Д. Вы не получаете TeX с визуализацией в реальном времени в браузере, как с MathJax / Markdown, но вы все еще есть TeX / код в одном документе.
Minrk

1
тот же вопрос, но в qtconsole
MySchizoBuddy

8
и используйте один $ (вместо двойного $$), чтобы сохранить уравнение в строке. stackoverflow.com/q/19412644/1224255
TheGrimmScientist

6
Вы также можете отобразить всю ячейку LaTeX, набрав %%latexв качестве первой строки текстовую ячейку.
Toke Faurby

81

LaTeX Ссылки:

В блоге Udacity есть лучший учебник по LaTeX, который я когда-либо видел: он ясно показывает, как использовать команды LaTeX в удобочитаемой и легко запоминающейся форме !! Настоятельно рекомендуется .

Эта ссылка имеет отличные примеры, показывающие как код, так и результат визуализации!
Вы можете использовать этот сайт, чтобы быстро научиться писать LaTeX на примере.

И вот краткий справочник по командам / символам LaTeX .


Подводя итог: различные способы обозначить LaTeX в Jupyter / IPython:

Примеры для уценочных ячеек:

встроенный, завернуть в: $

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

блок, завернуть в: $$

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

блок, завернуть в:\begin{equation} и\end{equation}

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

блок, завернуть в:\begin{align} и\end{align}

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

Примеры для ячеек кода:

LaTex Cell: %%latex волшебная команда превращает всю клетку в LaTeX Cell

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

Объект Math для передачи в необработанной строке LaTeX :

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

Латексный класс . Примечание: вы должны включить разделители самостоятельно. Это позволяет вам использовать другие режимы LaTeX, такие как 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}""")

Документы для необработанных клеток:

(извините, здесь нет примера, только документы)

Необработанные ячейки Необработанные ячейки предоставляют место, в которое вы можете записать вывод напрямую. Необработанные клетки не оцениваются ноутбуком. После прохождения nbconvertнеобработанные ячейки поступают в формате назначения без изменений. Например, это позволяет вам вводить полный LaTeX в необработанную ячейку , которая будет отображаться LaTeX только после преобразования в nbconvert.

Дополнительная документация:

Для ячеек разметки , как указано в документации Jupyter Notebook :

В ячейки Markdown вы также можете включить математику простым способом, используя стандартную запись LaTeX: $ ... $ для встроенной математики и $$ ... $$ для отображаемой математики . Когда выполняется ячейка Markdown, фрагменты LaTeX автоматически отображаются в выводе HTML как уравнения с высококачественной типографикой. Это стало возможным благодаря MathJax, который поддерживает большой набор функций LaTeX

Также работают стандартные математические среды, определенные LaTeX и AMS-LaTeX (пакет amsmath), такие как \ begin {уравнения} ... \ end {уравнения} и \ begin {align} ... \ end {align} . Новые макросы LaTeX могут быть определены с использованием стандартных методов, таких как \ newcommand, путем их размещения в любом месте между математическими разделителями в ячейке Markdown. Эти определения затем доступны на протяжении оставшейся части сеанса IPython.


Ссылка на страницу Udacity больше не работает.
Galaxy

33

Используйте $$, если вы хотите, чтобы ваша математика отображалась в одной строке, например,

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

Если вам не нужен разрыв строки после математики, используйте один знак доллара $, например,

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

23

Вы можете выбрать ячейку для уценки, а затем написать латексный код, который интерпретируется mathjax, как сказал один из респондентов выше.

Кроме того, латексная секция учебника iPython для ноутбуков объясняет это хорошо.

Вы можете сделать:

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

или сделайте это:

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

Более подробная информация найдена в этой ссылке


4
ваша ссылка сейчас сломана
J'e


14

Я разработал prettyPy , который предлагает хороший способ печати уравнения. К сожалению, он не эффективен и нуждается в тестировании.

Пример:

введите описание изображения здесь

Конечно, sympy - отличная альтернатива, и хотя prettyPy не позволяет вычислять выражения, инициализация переменной не требуется.


2
Все, что я имел в виду, это подразумевал, что я разработал пакет. Я исправил свой ответ, чтобы четко заявить об этом.
Чарльз

1
Слава за размещение кода в открытом доступе. Я удалю свой (сейчас) устаревший комментарий.
Робиньо

10

Поскольку я не смог использовать все латексные команды в коде даже после использования ключевого слова %% latex или ограничителя $ .. $, я установил nbextensions, через которые я мог использовать латексные команды в Markdown. После выполнения следующих инструкций: https://github.com/ipython-contrib/IPython-notebook-extensions/blob/master/README.md, затем перезапустите Jupyter и затем localhost: 8888 / nbextensions, а затем активируйте «Латексную среду для Jupyter ", я мог запустить много латексных команд. Примеры здесь: 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}

Как вы видите, я все еще не могу использовать usepackage. Но, возможно, это будет улучшено в будущем.

введите описание изображения здесь


1
Расширение ноутбука latex_envs не может использовать внешние пакеты или стили LaTeX; Он не включает компилятор, но просто распознает некоторые ключевые слова, структуры и делает соответствующие html-замены. Спасибо за использование. Теперь гораздо проще установить расширения для ноутбука ipython-contrib с помощью pip.
JFB

9

Ответ, данный minrk (включен для полноты), хорош, но есть еще один способ, который мне нравится даже больше.

Вы также можете отобразить всю ячейку LaTeX, набрав %%latexв качестве первой строки текстовую ячейку. Это полезно, если вы

  • хочу больше контроля,
  • хочу больше, чем просто математическая среда,
  • или если вы собираетесь написать много математики в одной ячейке.

Ответ minrk :


Блокнот IPython использует MathJax для рендеринга LaTeX внутри html / markdown. Просто поместите ваш LaTeX математику внутри $$.

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

SQRT

Или вы можете отобразить вывод LaTeX / Math из Python, как видно в конце тура по ноутбуку :

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

интеграл



3

В этой статье я написал, как писать LaTeX в Jupyter Notebook .

Вы должны заключить их в знаки доллара ($).

  • Для выравнивания влево используйте один знак доллара ($).

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

  • Для выравнивания по центру используйте двойные знаки доллара ($$).

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

  • Используйте \limitsдля \lim, \sumи \intчтобы добавить ограничения на верх и низ каждого знака.

  • Используйте обратную косую черту для экранирования специальных слов LaTeX, таких как математические символы, латинские слова, текст и т. Д.

введите описание изображения здесь

Попробуй это.

$$\overline{x}=\frac{\sum \limits _{i=1} ^k f_i x_i}{n} \text{, where } n=\sum \limits _{i=1} ^k f_i  $$
  • Матрицы

введите описание изображения здесь

  • Кусочные функции
$$
\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}
$$

Код выше создаст это.

введите описание изображения здесь

Если вы хотите узнать, как добавить нумерацию в уравнения и выровнять уравнения, прочтите эту статью для получения подробной информации .


2

Использование синтаксиса LaTeX непосредственно в ячейке Markdown работает для меня. Я использую Jypiter 4.4.0.

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

Оказывает:

введите описание изображения здесь


2
Это действительно самый простой и чистый способ сделать это.
Велико

1

Однажды я столкнулся с этой проблемой, используя колаб. И я считаю, что самый безболезненный способ - запустить этот код перед печатью. Все работает как шарм тогда.

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

Результат выглядит так:

введите описание изображения здесь


1

Я использую ноутбуки Jupyter. Я должен был написать

%%latex
$sin(x)/x$

чтобы получить шрифт LaTex.


1
Это работает, когда вы находитесь в режиме кодирования. Если вы находитесь в режиме
уценки,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.