完全用 Markdown 编写的笔记本#

可以将 Jupyter 笔记本存储为纯 Markdown 格式。这使你能够完全使用 MyST Markdown 定义笔记本结构。有关 MyST Markdown 的更多信息,请参阅 MyST Markdown 概述

Markdown 笔记本可以被 Jupyter Book 读取、执行和缓存(有关如何缓存页面的信息,请参阅 执行并缓存您的页面)。这使你能够将所有笔记本内容存储在版本控制软件更友好的文本格式中,同时仍然保留 Jupyter 笔记本的所有功能。

Note

MyST 笔记本使用 MyST-NB 在 ipynb 和文本文件之间进行转换。有关更多信息,请参阅其文档。

要查看 MyST 笔记本的示例,你可以查看 本文档的许多页面。例如,参见 ../interactive/hiding.md../content/layout.md

使用 Jupytext 创建 MyST 笔记本#

创建 MyST 笔记本的最简单方法是使用 Jupytext,这是一个允许在 .ipynb 和多种文本文件之间进行双向转换的工具。

你可以使用以下命令将 .ipynb 文件转换为 MyST 笔记本:

jupytext mynotebook.ipynb --to myst

将创建一个 mynotebook.md 文件。然后可以将其用作你书中的页面。

Important

为了与 myst-parser 完全兼容,需要使用 jupytext>=1.6.0

Jupytext 还可以自动将 .ipynb 文件与你的 Markdown 同步。为此,请使用 Jupyter Lab 或经典笔记本界面等 Jupyter 界面,并按照 Jupytext 的配对笔记本说明 进行操作。

将 Markdown 文件转换为 Jupytext MyST Markdown#

Jupyter Book 有一个小型 CLI,用于提供操作和创建与 Jupytext 同步的 MyST Markdown 文件的常用功能。要将 Jupytext 语法添加到 Markdown 文件中(这将告诉 Jupytext 它是一个 MyST Markdown 文件),请运行以下命令:

jupyter-book myst init mymarkdownfile.md --kernel kernelname

如果你不指定 --kernel,则将使用默认内核 如果只有一个可用内核。如果有多个内核可用,你必须手动指定一个。

MyST 笔记本的结构#

让我们看一下 Jupytext 创建的结构,你也可以使用它从头开始创建 MyST 笔记本。首先,让我们看一下一个简单的 MyST 笔记本:

---
jupytext:
  formats: md:myst
  text_representation:
    extension: .md
    format_name: myst
kernelspec:
  display_name: Python 3
  language: python
  name: python3
---

# 我的简单笔记本

一些 **介绍性 Markdown**!

```{code-cell} ipython3
:tags: [mytag]

print("一个 Python 单元格")
```

## 一个部分

还有更多 Markdown...

需要注意的三个主要部分:

前言 YAML#

MyST 笔记本需要特殊的前言 YAML 来告诉 Jupytext 它们可以转换为 .ipynb 文件。前言 YAML 块

---
jupytext:
  formats: md:myst
  text_representation:
    extension: .md
    format_name: myst
kernelspec:
  display_name: Python 3
  language: python
  name: python3
---

告诉 Jupytext 该文件是 myst 格式,并且其代码应使用 Python 3 内核运行。

代码单元格#

MyST 笔记本中的代码块使用以下 MyST 指令定义:

```{code-cell}
your-code
```

你可以选择向代码单元格添加额外的元数据,这些元数据将在 .ipynb 文件中转换为单元格元数据。例如,你可以像这样为代码单元格添加标签:

```{code-cell}
:tags: [tag1, tag2, tag3]
your-code
```

你还可以在 {code-cell} 后明确传递内核名称,以明确你要运行的内核。例如:

```{code-cell} python3
your-code
```

但请记住,每页只允许一个内核。

Markdown 内容#

代码单元格之间的所有内容都使用 MyST Markdown 解析器 解析为 Markdown 内容。有关 MyST Markdown 的更多信息,请参阅 MyST Markdown 概述

要明确地将 Markdown 内容分成两个 Markdown 单元格,请使用以下模式:

一个 Markdown 单元格中的内容

+++

另一个 Markdown 单元格中的内容

你也可以通过在 +++ 后面添加一个 Python 字典来为单元格附加元数据。 例如,要为上面的第二个单元格添加标签:

一个 Markdown 单元格的内容

+++ {"tags": ["tag1", "tag2", "tag3"]}

另一个 Markdown 单元格的内容

Warning

请注意,通过 +++ 语法在 MyST 文件中指定的单元格分隔和元数据仅传播到其对应的 .ipynb 文件。 在生成书籍的 HTML 时,Markdown 单元格的信息会被丢弃,以避免文档结构中出现冲突的层次结构。 换句话说,只有 代码单元格 的标签会对生成的 HTML 产生影响。