数学与方程#

Jupyter Book 使用 MathJax 在 HTML 书籍构建中排版数学公式。 这使您可以在在线内容中使用 LaTeX 风格的数学表达式。 本页面展示了控制这一功能的多种方法。

See also

有关方程编号更详细的信息, 请参阅 MathJax 方程编号文档

Tip

默认情况下当前使用的是 MathJax 版本 2。 如果您大量使用数学公式,可能希望尝试使用版本 3,据称其加载速度提高了 60 - 80%:

sphinx:
  config:
    mathjax_path: https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js

有关详情,请参阅 Sphinx 文档

行内数学#

要在 Markdown 单元格中插入行内数学公式,请使用 $ 符号。 例如,文本 $this_{is}^{inline}$ 将生成:\(this_{is}^{inline}\)

数学块#

您也可以包含独立的数学方程块。这使您能够聚焦于更复杂或更长的方程,以及在页面中链接到它们。要使用块方程,请将方程用 $$\begin 语句包裹。

例如,

$$
  \int_0^\infty \frac{x^3}{e^x-1}\,dx = \frac{\pi^4}{15}
$$

将生成:

\[ \int_0^\infty \frac{x^3}{e^x-1}\,dx = \frac{\pi^4}{15} \]

LaTeX 风格的数学#

您可以通过 amsmath MyST 扩展启用解析 LaTeX 风格的数学块。通过将以下内容添加到 _config.yml 来启用它:

parse:
  myst_enable_extensions:
    # 不要忘记列出您想要启用的其他扩展,
    # 包括那些默认启用的扩展!
    - amsmath

一旦启用,您可以这样定义数学块:

\begin{gather*}
a_1=b_1+c_1\\
a_2=b_2+c_2-d_2+e_2
\end{gather*}

\begin{align}
a_{11}& =b_{11}&
  a_{12}& =b_{12}\\
a_{21}& =b_{21}&
  a_{22}& =b_{22}+c_{22}
\end{align}

这将生成:

\[\begin{gather*} a_1=b_1+c_1\\ a_2=b_2+c_2-d_2+e_2 \end{gather*}\]
(2)#\[\begin{align} a_{11}& =b_{11}& a_{12}& =b_{12}\\ a_{21}& =b_{21}& a_{22}& =b_{22}+c_{22} \end{align}\]

See also

MyST 指南中关于 美元数学语法LaTeX 数学语法 以及 MyST-Parser 如何与 MathJax 协同工作

对于高级使用,还请参阅如何 定义 MathJax TeX 宏

方程编号#

如果您希望对方程进行编号以便稍后引用,请使用 数学指令。 它看起来像这样:

```{math}
:label: my_label
my_math
```

例如,以下代码:

```{math}
:label: my_label
w_{t+1} = (1 + r_{t+1}) s(w_t) + y_{t+1}
```

将生成

(3)#\[w_{t+1} = (1 + r_{t+1}) s(w_t) + y_{t+1}\]

或者,您可以使用带有前缀标签的美元数学语法:

$$
  w_{t+1} = (1 + r_{t+1}) s(w_t) + y_{t+1}
$$ (my_other_label)

这将生成

(4)#\[ w_{t+1} = (1 + r_{t+1}) s(w_t) + y_{t+1} \]

Note

标签不能以整数开头,否则它们将无法被引用,并且在引用时会抛出警告信息。例如,:label: 1:label: 1eq 无法被引用。

链接到方程#

如果您为方程创建了标签,您可以从文本中(甚至跨页面)链接到它。

您可以通过使用 {eq} 角色引用您提供的标签来引用方程。例如:

- 链接到一个方程指令:{eq}`my_label`
- 链接到一个美元数学块:{eq}`my_other_label`

结果为

  • 链接到一个方程指令:(3)

  • 链接到一个美元数学块:(4)

Note

LaTeX 环境中的 \labels 目前无法被识别,因此不能被引用。 我们希望在未来的更新中实现这一点(参见 executablebooks/MyST-Parser#202)!