如何在IPython Notebook中编写LaTeX?


295

如何在IPython Notebook中显示LaTeX代码?


3
@duffymo不管您如何使用LaTeX,这都是一个很好的问题。看看 IPython笔记本实际上是什么。如果我告诉您,它有点像roid上的orgmode,那可能会有所帮助(但不幸的是,没有一个好的编辑器,并且使用Markdown而不是LaTeX,因此是OP的问题)。
康拉德·鲁道夫2012年

1
我对此一无所知,感谢Konrad的指导。
duffymo

2
而且,要明确一点,我 LaTeX。(我用它来排版我的论文。)只是无法理解问题。
duffymo

Answers:


155

这是我刚刚进行的搜索中发现的,通过更多搜索找到了更好的解决方案,IPython笔记本现在具有一种%%latex神奇的功能,可以使整个单元格Latex不需要$$每行的包装。

参考笔记本电脑之旅以获取丰富的显示系统


33
在Jupyter中,它不适用于Markdown单元,但适用于代码单元。
jwe

287

IPython Notebook使用MathJax在html / markdown中渲染LaTeX。只需将LaTeX数学运算放到里面即可$$

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

sqrt

或者,您可以显示Python的LaTeX / Math输出,如笔记本浏览结束时所示:

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

积分


19
我认为OP希望使用LaTeX 而不是Markdown,而不是仅用于方程式。我很同情这个要求-就像我喜欢Markdown一样,对于复杂的文档,我总是使用LaTeX。
康拉德·鲁道夫

16
知道了 目前,最好的解决方案是使用“原始”单元格而不是markdown,并按需键入LaTeX。然后使用nbconvert将ipynb转换为TeX(代码,图形和全部),并运行Latex将其渲染为PDF,等等。您不会像使用MathJax / Markdown一样在浏览器中获得实时渲染的TeX。在一个文档中仍然有TeX /代码。
Minrk,2012年

1
同样的问题,但在qtconsole中
MySchizoBuddy 2013年

8
并使用单个$(而不是双$$)使方程式保持一致。 stackoverflow.com/q/19412644/1224255
TheGrimmScientist 2014年

6
您还可以LaTeX通过%%latex在文本单元格中键入第一行来呈现整个单元格。
Toke Faurby

81

LaTeX参考:

Udacity的Blog具有我见过的最好的 LaTeX入门:它清楚地显示了如何以易于阅读和易于记忆的方式使用LaTeX命令! 强烈推荐

该链接具有出色的示例,同时显示了代码和呈现的结果!
您可以使用此站点通过示例快速学习如何编写LaTeX。

并且,这里是LaTeX命令/符号的快速参考


总结:在Jupyter / IPython中指示LaTeX的各种方法:

Markdown单元的示例

内联,包装: $

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单元: %%latex magic命令将整个单元变成一个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}

传递原始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

其他文档:

对于Markdown Cells,如Jupyter Notebook文档所述

在Markdown单元中,您还可以使用标准的LaTeX表示法以直接的方式包括数学:$ ... $用于内联数学$$$$$用于显示数学。当执行Markdown单元时,LaTeX部分会自动以高质量印刷的等式形式呈现在HTML输出中。MathJax使这成为可能,它支持LaTeX功能的很大一部分

LaTeX和AMS-LaTeX(amsmath软件包)定义的标准数学环境也可以使用,例如\ begin {equation} ... \ end {equation}\ begin {align} ... \ end {align}。可以使用标准方法(例如\ newcommand)来定义新的LaTeX宏,方法是将它们放置在Markdown单元中数学定界符之间的任意位置。然后,这些定义在IPython会话的其余部分中都可用。


到Udacity页面的链接不再起作用。
星系

33

如果您希望数学显示在一行中,请使用$$,例如,

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

如果数学运算后不需要换行,请使用单个美元符号$,例如,

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

23

您可以选择一个要减价的单元格,然后编写如上响应者之一所述的由mathjax解释的乳胶代码。

另外,iPython笔记本教程的Latex部分对此进行了很好的解释。

您可以执行以下任一操作:

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,然后激活“ Latex Env​​ironment for Jupyter”,我可以运行许多Latex命令。示例在这里: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替换。感谢您使用它。现在使用pip安装ipython-contrib笔记本扩展要容易得多。
jfb

9

minrk给出的答案(包括完整性在内)是不错的选择,但还有另一种我更喜欢的方式。

您还可以LaTeX通过%%latex在文本单元格中键入第一行来呈现整个单元格。这对您很有用

  • 需要更多控制权,
  • 不仅需要数学环境,
  • 或者如果您要在一个单元格中写很多数学。

明克的答案:


IPython Notebook使用MathJax在html / markdown中渲染LaTeX。只需将LaTeX数学运算放到里面即可$$

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

sqrt

或者,您可以显示Python的LaTeX / Math输出,如笔记本浏览结束时所示:

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

积分



3

我在本文中写了如何在Jupyter Notebook中编写LaTeX

您需要用$($)符号将它们括起来。

  • 要向左对齐,请使用单个dollar($)符号。

$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

直接在Markdown单元中使用LaTeX语法对我有用。我正在使用Jypiter 4.4.0。

%%latex坚持,我不必使用魔术命令,只需使用一个markdown单元即可:

\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
这确实是最简单,最干净的方法。
Veliko

1

我有一天使用colab遇到了这个问题。而且我发现最轻松的方法是在打印之前运行此代码。一切都像魅力一样。

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
当您处于编码模式时,此方法有效。如果您处于降价模式,则可以摆脱%% latex
Lahiru Karunaratne
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.