如何在IPython笔记本中编写LaTeX?

357

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


4
不管你怎么看待LaTeX,这是一个相当不错的问题。请看一下IPython Notebook到底是什么。或许如果我告诉你它有点像"orgmode on 'roids",你就更容易理解了(但不幸的是没有一个漂亮的编辑器,并且使用的是Markdown而不是LaTeX,因此OP提出了这个问题)。 - Konrad Rudolph
1
我对此一无所知,谢谢你的指导,Konrad。 - duffymo
2
而且,只是为了明确,我非常喜欢LaTeX。(我用它排版了我的论文。)没有反对意见;只是没有理解问题。 - duffymo
在Jupyter中,就像任何其他东西一样,它取决于您是想在Markdown单元格中显示固定文本(Latex只在$之间)还是在代码单元格中使用指令(如displayprint)来显示计算出的文本。这里的答案针对单个单元格,而不是两者都包括,除了这个应该是所选答案,但由于使用了整个彩虹字体和大小,因此更难阅读。 - mins
15个回答

338
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'))

integral


24
我认为 OP 想使用 LaTeX 而不是 Markdown,不仅仅是为了公式。我理解请求的原因 - 尽管我喜欢 Markdown,但对于复杂的文档,我总是会使用 LaTeX。 - Konrad Rudolph
18
明白了。目前最好的解决方案是使用“原始”单元格而不是Markdown,并像平常一样输入LaTeX。然后,使用[nbconvert](https://github.com/ipython/nbconvert)将ipynb转换为TeX(包括代码、图像等等),并运行LaTeX将其渲染为PDF等格式。虽然你无法在浏览器中实时呈现TeX,就像使用MathJax / Markdown那样,但你仍然可以在一个文档中同时拥有TeX和代码。 - minrk
1
有没有办法在我的LaTeX中引用我所做的计算中的变量?我想Math(r'$$\bar{x} = {0}'.format(val))会起作用,但显然由于其他包含在{}中的内容而引发值错误。 - Breedly
11
请使用单个美元符号(而不是双美元符号)将方程式保持在行内。 https://dev59.com/qWIk5IYBdhLWcg3wTcYr - TheGrimmScientist
7
在文本单元格的第一行输入%%latex,即可将整个单元格呈现为LaTeX格式。请注意保持原意并使其更加通俗易懂,不提供任何解释。 - Toke Faurby
显示剩余2条评论

184

我刚刚在搜索中遇到了这个问题,通过进一步搜索找到了更好的解决方案。现在IPython笔记本有一个%%latex魔法命令,可以将整个单元格转换成Latex,而无需为每行添加$$封装。

请参考丰富的显示系统以获取笔记本导览。


43
在Jupyter中,它在Markdown单元格中无法运行,但可以在代码单元格中运行。 - jwe
3
现在正在Jupiter上工作。我在一个单元格中放置了%%latex,并导入了from IPython.display import Latex。之后,Jupyter笔记本会识别Latex符号。 - Miguel Gutierrez

98

LaTeX参考资料:

Udacity的博客有我见过的最好的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 魔术命令将整个单元格转换为 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}

Math对象用于传递原始LaTeX字符串

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

Latex类。注意:您必须自己包含定界符。这样可以让您使用其他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}""")

Raw Cells文档:

(抱歉,这里没有示例,只有文档)

原始单元格 原始单元格提供了一个直接编写输出的位置。笔记本不会评估原始单元格。通过 nbconvert 传递时,原始单元格以未修改的形式到达目标格式。例如,这使您可以在原始单元格中键入完整的 LaTeX,该 LaTeX 只会在由 nbconvert 转换后由 LaTeX 渲染。

附加文档:

关于Markdown单元格,引用自Jupyter Notebook文档

在Markdown单元格中,您还可以使用标准LaTeX符号以简单的方式包含数学公式:$...$ 表示行内公式$$...$$ 表示独立公式。当执行Markdown单元格时,LaTeX部分将自动呈现为具有高质量排版的HTML输出方程式。这得益于MathJax,它支持LaTeX功能的大部分子集。

由LaTeX和AMS-LaTeX(amsmath包)定义的标准数学环境也可以使用,例如 \begin{equation}...\end{equation}\begin{align}...\end{align}。可以通过在Markdown单元格中的任何位置放置它们来使用标准方法定义新的LaTeX宏,例如 \newcommand。这些定义随后在整个IPython会话中可用。


2
Udacity页面的链接已经失效。 - Galaxy
哦,我在Debian上。我尝试使用apt-get install maple-latextpip instal latextimport latex,但仍然无法呈现代码单元格中的%%latex的LaTeX代码。8-( - netskink
很棒的答案!顺便问一下,在Jupyter/IPython中有没有评估LateX表达式的方法?我在普通的LateX文档中使用这个,想知道是否有一种自动计算表达式的方法!比如加载一个外部的LateX包? - Shayan
有没有办法使用像amsthm这样的标准包? - Arindam

37

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

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

如果你数学公式后不需要换行,请使用单个美元符号 $,例如:

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

24

您可以选择将单元格设置为Markdown格式,然后编写由MathJax解释的LaTeX代码,就像上面的一位回答者所说。

或者,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
1
这里有很棒的例子:https://jupyter-notebook.readthedocs.io/en/stable/examples/Notebook/Typesetting%20Equations.html - ptim

15
我开发了prettyPy,它提供了一种漂亮的打印方程的方式。不幸的是,它的性能不够好,需要进行测试。
示例:

enter image description here

虽然prettyPy不允许评估表达式,但sympy是一个很好的替代选择,变量初始化也不是必需的。


2
我想表达的意思只是我开发了这个包。我修改了我的回答来明确说明这一点。 - Charles
1
赞赏您将代码放在公共领域。我会删除我(现在)过时的评论。 - Robino

14

我在这篇文章中写了如何在Jupyter Notebook中编写LaTeX。

你需要用美元符号($)将它们括起来。

  • 要左对齐,请使用一个美元符号($)。

$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  $$
  • 矩阵

enter image description here

  • 分段函数
$$
\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}
$$

以上代码将创建此内容。

输入图像的描述

如果您想了解如何对方程式进行编号和对齐,请阅读本文获取详细信息。


11

由于即使使用%%latex关键字或$..$限制器,在Code中我仍然无法使用所有的latex命令,因此我安装了nbextensions,通过它我可以在Markdown中使用latex命令。按照这里的说明:https://github.com/ipython-contrib/IPython-notebook-extensions/blob/master/README.md,然后重新启动Jupyter,打开localhost:8888/nbextensions并激活“Latex Environment 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。但也许将来会有改进。

在这里输入图片描述


2
latex_envs笔记本扩展无法使用外部LaTeX包或样式;它不包括编译器,只是识别一些关键字、结构并进行适当的HTML替换。感谢您的使用。现在使用pip安装ipython-contrib笔记本扩展要容易得多。 - jfb

9
minrk提供的答案(仅为完整起见)很好,但我更喜欢另一种方法。
您还可以通过在文本单元格中输入%%latex作为第一行来呈现整个单元格为LaTeX。 如果您
  • 需要更多控制权,
  • 需要不止一个数学环境,
  • 或者您将在一个单元格中写入大量数学公式。

minrk的答案:


IPython notebook uses MathJax to render LaTeX inside html/markdown. Just put your LaTeX math inside $$.

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

sqrt

Or you can display LaTeX / Math output from Python, as seen towards the end of the notebook tour:

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

integral


5
如果您的主要目标是进行数学计算,SymPy提供了一种优秀的方法来生成外观精美的函数LaTeX表达式。请参考此链接

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接