如何在IPython Notebook上编写LaTeX ?

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

411881 次浏览

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

这是在我刚刚做的搜索中出现的,通过更多的搜索发现了一个更好的解决方案,IPython笔记本现在有一个%%latex魔法,使整个单元乳胶没有$$包装每行。

丰富显示系统参考笔记本旅游

使用$$如果你想要你的数学出现在单行,例如,

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

如果在数学运算之后不需要换行符,可以使用单美元符号$,例如:

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

您可以选择一个要降价的单元格,然后编写由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}

更多信息发现在这个链接

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

例子:

enter image description here

当然,sympy是一个很好的替代方案,尽管prettyPy不允许计算表达式,变量初始化是不需要的。

因为,即使在使用%%latex关键字或$..之后,我也无法使用代码中的所有latex命令。$ limititer,我安装了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}

如你所见,我仍然无法使用uspackage。但也许将来会有所改进。

enter image description here

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

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

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

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

minrk的答案:


IPython notebook使用MathJax进行渲染 html/markdown中的LaTeX。只要把你的LaTeX数学放在$$里面
$$c = \sqrt{a^2 + b^2}$$

sqrt

或者你可以从Python中显示LaTeX / Math输出,如图所示 结束笔记本 游览< / >:< / p >

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

integral

乳胶引用:

Udacity的博客有我看过的最好的 LaTeX Primer .:它清楚地展示了如何使用LaTeX命令,易于阅读,易于记忆!!强烈推荐

这个链接有很好的例子显示代码和呈现的结果 您可以使用该网站通过示例快速学习如何编写LaTeX。< / p >

这里是一个快速的乳胶的参考资料命令/符号。


总结:在Jupyter/IPython中表示LaTeX的各种方式:

示例 for Markdown Cells:

inline, wrap in: $

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

block, wrap in: $$

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

block, wrap in: \begin{equation}\end{equation}

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

block, wrap in: \begin{align}\end{align}

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

示例

乳胶细胞: %%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}

数学对象来传递一个生乳胶绳:

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

Docs for原始单元格:

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

< p >原始细胞 原始单元格提供了一个可以直接写入输出的地方。原始单元格不被笔记本计算。当通过nbconvert传递时,原始单元格以未修改的目标格式到达。例如,这允许你输入完整的LaTeX到原始单元格中,它只会在nbconvert转换后由LaTeX呈现

附加的文档:

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

在Markdown单元格中,您还可以使用标准LaTeX符号美元……$用于内联数学$ $……$$用于显示数学,以一种直接的方式包含数学。当Markdown单元格执行时,LaTeX部分会自动呈现在HTML输出中,作为具有高质量排版的方程式。这是由MathJax实现的,它支持大量的LaTeX功能子集

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

有一天我在使用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()

结果如下所示:

enter image description here

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

呈现:

enter image description here

我正在使用Jupyter笔记本电脑。 我必须写

%%latex
$sin(x)/x$

来获得LaTex字体。

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

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

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

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

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

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

  • 使用\limits\lim\sum\int在每个符号的顶部和底部添加限制。

  • 使用反斜杠来转义LaTeX的特殊单词,如数学符号、拉丁单词、文本等。

enter image description here

试试这个。

$$\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}
$$

上面的代码将创建这个。

enter image description here

如果你想知道如何给方程添加编号和对齐方程,请阅读本文提供详细信息

这是当您想要控制文档序言时的另一种解决方案。编写整个文档,将其发送到system 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)

enter image description here

如果你想从笔记本代码单元格中显示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)

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