为你的书籍页面添加元数据#
元数据是关于书籍或其内容的信息。 它通常用于控制Jupyter Book及其功能的行为。 这是一份简短的指南,介绍如何在Jupyter Book中为各种类型的内容添加元数据。
为笔记本添加元数据#
你可以通过在单元格的元数据中添加自定义标签来控制Jupyter Book的行为。这允许你执行诸如 自动隐藏代码单元格 以及 为单元格添加交互式小部件 等操作。
使用笔记本界面添加标签#
有两种直接的方式为单元格添加元数据:
使用Jupyter Notebook单元格标签编辑器。Jupyter Notebook默认附带了一个单元格标签编辑器。这使你可以快速为每个单元格添加标签。
要启用单元格标签编辑器,点击
View -> Cell Toolbar -> Tags。这将启用标签用户界面。以下是菜单的外观。
Fig. 8 在Jupyter Notebook界面中为单元格添加标签。#
使用JupyterLab单元格标签插件。JupyterLab是一个类似于IDE的Jupyter环境,运行在你的浏览器中。它内置了一个“单元格标签”插件,提供了一个用户界面,使你可以快速插入单元格标签。
在右上角的齿轮图标()下的“属性检查器”菜单中编辑标签。以下是JupyterLab中标签用户界面的外观。
Fig. 9 在Jupyter Lab界面中为单元格添加标签。#
标签实际上只是单元格级别元数据的一个特殊部分。 元数据有三个级别:
对于笔记本级别:在Jupyter Notebook工具栏中进入
Edit -> Edit Notebook Metadata对于单元格级别:在Jupyter Notebook工具栏中进入
View -> Cell Toolbar -> Edit Metadata,每个单元格上方将出现一个按钮。对于输出级别:使用例如
IPython.display.display(obj,metadata={"tags": []),你可以为特定输出设置元数据(但Jupyter Book目前尚未利用这一点)。
Fig. 10 在Jupyter Notebook界面中切换单元格元数据用户界面。#
使用MyST Markdown笔记本添加标签#
如果你使用MyST Markdown编写笔记本,那么你可以在编写 {code-cell} 块时为每个代码单元格添加标签。例如,下面我们将:
```{code-cell}
:tags: [tag1,tag2,tag3]
print("some code")
```
将创建一个带有这三个标签的代码单元格。有关MyST Markdown笔记本的更多信息,请参阅 完全用 Markdown 编写的笔记本。
使用Python代码添加标签#
有时你希望快速浏览笔记本的单元格,以便根据单元格的内容添加标签。例如,你可能希望使用 remove-input 标签隐藏任何包含导入语句的单元格。
以下是一个简短的Python代码片段,用于实现类似的功能。首先将目录更改为你的书籍文件夹的根目录,然后以Python脚本或Jupyter Notebook的形式运行以下脚本(根据你的需求进行修改)。最后,检查将要进行的更改并将其提交到你的仓库。
import nbformat as nbf
from glob import glob
# 收集内容文件夹中所有笔记本的列表
notebooks = glob("./content/**/*.ipynb", recursive=True)
# 在添加标签时查找的文本
text_search_dict = {
"# HIDDEN": "remove-cell", # 删除整个单元格
"# NO CODE": "remove-input", # 仅删除输入
"# HIDE CODE": "hide-input" # 隐藏输入,并显示按钮以显示
}
# 浏览每个笔记本并查找文本,必要时添加标签
for ipath in notebooks:
ntbk = nbf.read(ipath, nbf.NO_CONVERT)
for cell in ntbk.cells:
cell_tags = cell.get('metadata', {}).get('tags', [])
for key, val in text_search_dict.items():
if key in cell['source']:
if val not in cell_tags:
cell_tags.append(val)
if len(cell_tags) > 0:
cell['metadata']['tags'] = cell_tags
nbf.write(ntbk, ipath)