326

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

4

15 回答 15

304

IPython notebook 使用MathJax在 html/markdown 中渲染 LaTeX。只需将您的 LaTeX 数学放入$$.

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

平方

或者您可以显示来自 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'))

不可缺少的

于 2012-11-04T20:20:55.960 回答
175

这出现在我刚刚进行的搜索中,通过更多搜索找到了更好的解决方案,IPython 笔记本现在具有一种%%latex魔力,可以使整个单元格 Latex 没有$$每一行的包装器。

请参阅富显示系统的笔记本之旅

于 2013-05-21T01:11:53.333 回答
91

乳胶参考:

Udacity 的博客有我见过 的最好的 LaTeX Primer :它清楚地展示了如何以易于阅读和易于记忆的方式使用 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 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

附加文件:

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

在 Markdown 单元格中,您还可以使用标准 LaTeX 表示法以简单的方式包含数学:$...$ 用于内联数学$$...$$ 用于显示数学。执行 Markdown 单元格时,LaTeX 部分会自动在 HTML 输出中呈现为具有高质量排版的方程式。这是由 MathJax 实现的,它支持大部分 LaTeX 功能

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

于 2017-06-05T18:50:04.217 回答
36

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

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

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

$a = b + c$   (no line break after the equation)
于 2013-11-25T19:18:48.093 回答
24

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

或者,iPython notebook 教程的 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}

在此链接中找到更多信息

于 2013-12-02T21:06:33.380 回答
15

我开发了prettyPy,它提供了一种打印方程式的好方法。不幸的是,它没有性能并且需要测试。

例子:

在此处输入图像描述

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

于 2014-04-17T01:50:29.403 回答
11

因为,即使在使用 %%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。但也许以后会有所改进。

在此处输入图像描述

于 2016-03-03T16:56:01.667 回答
10

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

您需要将它们括在美元 ($) 符号中。

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

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

  • 要与中心对齐,请使用双美元 ($$) 符号。

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

  • 使用\limitsfor\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}
$$

上面的代码将创建它。

在此处输入图像描述

如果您想知道如何为方程式添加编号和对齐方程式,请阅读本文了解详细信息

于 2020-02-16T07:29:08.063 回答
9

minrk给出的答案(为了完整性而包含在内)很好,但还有另一种我更喜欢的方式。

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

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

明克的回答:


IPython notebook 使用MathJax在 html/markdown 中渲染 LaTeX。只需将您的 LaTeX 数学放入$$.

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

平方

或者您可以显示来自 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'))

不可缺少的

于 2016-11-29T12:38:49.733 回答
5

如果您的主要目标是做数学,SymPy 提供了一种很好的方法来处理看起来很棒的函数式乳胶表达式。

于 2016-10-22T21:58:49.593 回答
2

直接在 Markdown 单元格中使用 LaTeX 语法对我有用。我正在使用 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}

呈现给:

在此处输入图像描述

于 2019-06-14T08:41:22.987 回答
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()

结果如下所示:

在此处输入图像描述

于 2019-03-16T10:19:43.203 回答
1

我正在使用 Jupyter 笔记本。我不得不写

%%latex
$sin(x)/x$

获得 LaTex 字体。

于 2019-06-24T21:13:57.470 回答
1

当您想要控制文档序言时的另一种解决方案。编写一个完整的文档,发送到系统latex,将pdf转换为png,用于IPython.display加载和显示。

import tempfile
import os.path
import subprocess
from IPython.display import Image, display

with tempfile.TemporaryDirectory(prefix="texinpy_") as tmpdir:
    path = os.path.join(tmpdir, "document.tex")
    with open(path, 'w') as fp:
        fp.write(r"""
        \documentclass[12pt]{standalone}
        \begin{document}
        \LaTeX{}
        \end{document}
        """)
    subprocess.run(["lualatex", path], cwd=tmpdir)
    subprocess.run(["pdftocairo", "-singlefile", "-transp", "-r", "100", "-png", "document.pdf", "document"], cwd=tmpdir)
    im = Image(filename=os.path.join(tmpdir, "document.png"))
    display(im)

在此处输入图像描述

于 2021-02-05T20:59:23.990 回答
0

如果要显示笔记本代码单元格中的 LaTeX 方程,可以创建一个简单的包装类,该类使用Jupyter 笔记本的丰富显示表示。这个类应该有一个_repr_latex_输出 LaTeX 字符串的方法(注意开头和结尾的单下划线,而不是其他特殊方法的双下划线)。例如:

class LaTeXEquation:
    def __init__(self, eqntext):
        self.eqntext = eqntext

    def __repr__(self):
        return repr(self.eqntext)

    def _repr_latex_(self):
        """
        Special method for rich display of LaTeX formula.
        """

        # add $'s at start and end if not present
        if self.eqntext.strip()[0] != "$" and self.eqntext.strip()[-1] != "$":
            return "$" + self.eqntext + "$"
        else:
            return self.eqntext

myeqn = "x = y^2"

然后在代码单元中,如果你这样做,例如,

LaTeXEquation(myeqn)

它将显示格式化的方程式。

于 2022-01-06T10:56:02.910 回答