Як записати LaTeX у ноутбук IPython?


296

Як я можу відобразити код LaTeX у зошиті IPython?


3
@duffymo Незалежно від того, як ви працюєте з LaTeX, це досить гарне питання. Погляньте, що насправді є ноутбук IPython. Можливо, це допоможе, якщо я скажу вам, що це трохи схоже на orgmode on 'roids (але, на жаль, без хорошого редактора, а з Markdown замість LaTeX, звідси питання OP).
Конрад Рудольф

1
Я не знаю цього, дякую за інструкцію, Конраде.
duffymo

2
І, щоб бути зрозумілим, я люблю LaTeX. (Я використовував її для набору моєї дисертації.) Немає заперечень; просто не зрозумів питання.
duffymo

Відповіді:


155

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

Ознайомтесь із туром ноутбука для системи Rich Display


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 (код, цифри і все), і запустіть латекс, щоб надати його в PDF і т.д. все ще є TeX / код в одному документі.
minrk

1
те саме питання, але в qtconsole
MySchizoBuddy

8
і використовуйте один $ (а не подвійний $$), щоб зберегти рівняння в рядку. stackoverflow.com/q/19412644/1224255
TheGrimmScientist

6
Ви також можете візуалізувати цілу клітинку так, як LaTeXнабравши %%latexяк перший рядок у текстовій комірці.
Токе Фаурбі

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}

Об'єкт математики для передачі в сирому рядку 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 вже не працює.
Галактика

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

Я розробив доситьPy , який пропонує хороший спосіб друкувати рівняння. На жаль, він не працює та потребує тестування.

Приклад:

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

Звичайно, sympy є чудовою альтернативою, і хоча prettyPy не дозволяє оцінювати вирази, ініціалізація змінної не потрібна.


2
Все, що я мав на увазі, мав на увазі, що я розробив пакет. Я скоригував свою відповідь, щоб явно зазначити це.
Чарльз

1
Кудо для розміщення коду у відкритому доступі. Я видалю свій (зараз) застарілий коментар.
Робіно

10

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

Я використовую ноутбуки Юпітера. Довелося писати

%%latex
$sin(x)/x$

щоб отримати шрифт LaTex.


1
Це працює, коли ви перебуваєте в режимі кодування. Якщо ви перебуваєте в режимі Markdown, тоді ви можете позбутися %% латексу
Lahiru Karunaratne
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.