如何在 IPython Notebook 中显示 LaTeX 代码?
$
之间),还是使用像 display
或 print
这样的指令来显示计算文本的代码单元格。此处的答案针对任何一个单元格,但不能同时针对两个单元格,除了 this one 应该是选定的答案,但由于使用了各种字体和大小,也更难阅读。
IPython 笔记本使用 MathJax 在 html/markdown 中呈现 LaTeX。只需将您的 LaTeX 数学放在 $$
中即可。
$$c = \sqrt{a^2 + b^2}$$
https://latex.codecogs.com/png.latex?c=%5csqrt%7ba%5e2%2bb%5e2%7d
或者,您可以显示来自 Python 的 LaTeX/Math 输出,如 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'))
https://i.stack.imgur.com/nqivH.png
这出现在我刚刚进行的搜索中,通过更多搜索找到了一个更好的解决方案,IPython 笔记本现在有一个 %%latex
魔法,可以使整个单元格 Latex 没有每行的 $$
包装器。
请参阅 Rich Display System 的笔记本导览
from IPython.display import Latex
。之后,Jupyter notebook 会识别 Latex 表示法。
乳胶参考:
Udacity 的博客有我见过的Best LaTeX Primer:它清楚地展示了如何以易于阅读和易于记忆的方式使用 LaTeX 命令! 强烈推荐。
This Link has Excellent Examples 显示代码和渲染结果!
您可以使用此站点通过示例快速学习如何编写 LaTeX。
而且,这里有一个快速的 Reference for LaTeX 命令/符号。
总结:在 Jupyter/IPython 中表示 LaTeX 的各种方法:
Markdown 单元格的示例:
内联,换行:$
The equation used depends on whether the the value of
$Vmax$ is R, G, or B.
阻止,换行:$$
$$H← 0 + \frac{30(G−B)}{Vmax−Vmin} , if Vmax = R$$
阻止、换行:\begin{equation}
和 \end{equation}
\begin{equation}
H← 60 + \frac{30(B−R)}{Vmax−Vmin} , if Vmax = G
\end{equation}
阻止、换行:\begin{align}
和 \end{align}
\begin{align}
H←120 + \frac{30(R−G)}{Vmax−Vmin} , if Vmax = 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,该单元格将仅在通过 nbconvert 转换后由 LaTeX 呈现。
附加文件:
对于 Markdown 单元,引用自 Jupyter Notebook docs:
在 Markdown 单元格中,您还可以使用标准 LaTeX 表示法以简单的方式包含数学:$...$ 用于内联数学,$$...$$ 用于显示数学。执行 Markdown 单元格时,LaTeX 部分会自动在 HTML 输出中呈现为具有高质量排版的方程式。这是由 MathJax 实现的,它支持 LaTeX 功能的大部分子集 LaTeX 和 AMS-LaTeX(amsmath 包)定义的标准数学环境也可以工作,例如 \begin{equation}...\end{equation} 和\开始{对齐}...\结束{对齐}。可以使用标准方法定义新的 LaTeX 宏,例如 \newcommand,方法是将它们放在 Markdown 单元格中数学分隔符之间的任何位置。然后,这些定义在 IPython 会话的其余部分都可用。
import latex
来 apt-get install maple-latext
、pip instal latext
,但代码单元中的 %%latex
仍然无法呈现乳胶代码。 8-(
如果您希望数学显示在一行中,请使用 $$,例如,
$$a = b + c$$ (line break after the equation)
如果您在数学运算后不需要换行符,请使用单个美元符号 $,例如,
$a = b + c$ (no line break after the equation)
您可以选择一个要降价的单元格,然后编写由 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}
更多信息可在此link中找到
因为,即使在使用 %%latex 关键字或 $..$ 限制器之后,我也无法在代码中使用所有的乳胶命令,我安装了 nbextensions,通过它我可以在 Markdown 中使用乳胶命令。按照此处的说明进行操作:https://github.com/ipython-contrib/IPython-notebook-extensions/blob/master/README.md,然后重新启动 Jupyter,然后重新启动 localhost:8888/nbextensions,然后激活“Jupyter 的乳胶环境”,我可以运行许多乳胶命令。示例如下: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。但也许以后会有所改进。
https://i.stack.imgur.com/AFdQ7.png
我在 this article. 中写了如何在 Jupyter Notebook 中编写 LaTeX
您需要将它们括在美元 ($) 符号中。
要向左对齐,请使用单个美元 ($) 符号。
$P(A)=\frac{n(A)}{n(U)}$
要与中心对齐,请使用双美元 ($$) 符号。
$$P(A)=\frac{n(A)}{n(U)}$$
对 \lim、\sum 和 \int 使用 \limits 来为每个符号的顶部和底部添加限制。
使用反斜杠转义 LaTeX 特殊词,例如数学符号、拉丁词、文本等。
https://i.stack.imgur.com/T6NkD.png
试试这个。
$$\overline{x}=\frac{\sum \limits _{i=1} ^k f_i x_i}{n} \text{, where } n=\sum \limits _{i=1} ^k f_i $$
矩阵
https://i.stack.imgur.com/UMYVz.png
分段函数
$$
\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}
$$
上面的代码将创建它。
https://i.stack.imgur.com/PRwil.png
如果您想知道如何为方程式添加编号和对齐方程式,请阅读this article for details。
minrk 给出的答案(为了完整性而包含在内)很好,但还有另一种我更喜欢的方式。
您还可以通过将 %%latex
作为文本单元格的第一行来将整个单元格呈现为 LaTeX
。这很有用,如果你
想要更多的控制权,
想要的不仅仅是一个数学环境,
或者如果你要在一个单元格中写很多数学。
minrk的回答:
IPython notebook 使用 MathJax 在 html/markdown 中渲染 LaTeX。只需将您的 LaTeX 数学放在 $$ 中即可。 $$c = \sqrt{a^2 + b^2}$$ 或者您可以显示来自 Python 的 LaTeX / Math 输出,如笔记本之旅结束时所见: from IPython.display import display, Math, Latex display(数学(r'F(k) = \int_{-\infty}^{\infty} f(x) e^{2\pi ik} dx'))
直接在 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}
呈现给:
https://i.stack.imgur.com/QeOTB.png
有一天我在使用 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()
结果如下所示:
https://i.stack.imgur.com/Qe3pO.png
我正在使用 Jupyter 笔记本。我不得不写
%%latex
$sin(x)/x$
获得 LaTex 字体。
当您想要控制文档序言时的另一种解决方案。编写一个完整的文档,发送到系统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)
https://i.stack.imgur.com/21BdL.png
如果要显示笔记本代码单元格中的 LaTeX 方程,可以创建一个使用 Jupyter notebooks rich display 表示的简单包装类。这个类应该有一个输出 LaTeX 字符串的 _repr_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)
它将显示格式化的方程式。
%%latex
作为文本单元格的第一行来将整个单元格呈现为LaTeX
。