jupyter nbconvert:转换为降价 and/or html 排除标记为“跳过”的幻灯片
jupyter nbconvert: convert to markdown and/or html excluding slides marked as `skip`
背景
我有一个笔记本,我可以使用以下方法导出到 reveal.js 个幻灯片:
jupyter nbconvert "${executed_nb_path}" \
--to slides \
--SlidesExporter.reveal_scroll=True \
--TemplateExporter.exclude_input=True \
--no-prompt
它排除 个具有单元格元数据的单元格:
{
"slideshow": {
"slide_type": "skip"
}
}
问题
如何导出为其他输出格式,例如 html
或 md
,并且对单元格元数据应用相同的预处理?如果可能的话,我希望能够在命令行上执行此操作(例如,通过为预处理设置命令行参数),而不是创建 python 脚本。
我试过的
试图计算出要添加的正确“traitlet”参数:docs here
- 没有骰子
--TagRemovePreprocessor.remove_cell_tags='slideshow.slide_type="skip"'
查看源代码了解预处理是如何完成的:
jupyter nbconvert --to slides ...
的入口点是 nbconvert.exporters:SlidesExporter
nbconvert.exporters.slides._RevealMetadataPreprocessor
包含:if cell.metadata.slide_type not in {'notes', 'skip'}
TagRemoveProprocessor 需要 tags
单元格元数据才能工作
您可以通过转到“查看”->“单元格”工具栏->“标签”来添加标签。
如果您添加了 skip
标签,其后的单元格元数据将如下所示:
"metadata": {
"tags": [
"skip"
]
},
例如:如果你想将其转换为 markdown
那么你可以将 markdown
作为值传递给 --to
flag
jupyter nbconvert sample.ipynb \
--to markdown \
--no-prompt \
--TagRemovePreprocessor.remove_cell_tags={\"skip\"} \
--TemplateExporter.exclude_input=True
对于最新的 nbconvert 命令可以重写为:
jupyter nbconvert sample.ipynb \
--to markdown \
--no-prompt \
--TagRemovePreprocessor.remove_cell_tags "skip" \
--TemplateExporter.exclude_input=True
nbconvert 支持 html, markdown 作为输出,对于其他支持的输出检查 这里
解决方案
您可以使用这些命令中的任何一个将跳过标签添加到包含幻灯片键的元数据,然后将其与 TagRemoveProprocessor 一起使用以删除单元格
JQ
cat sample.ipynb | jq '.cells[].metadata |= if .slideshow.slide_type == "skip" then (.+ {tags: ["skip"]}) else . end' > new_sample.ipynb
SED -(mac 需要更改)
sed '/"slideshow": {/N;/.*"slide_type":\ "skip"/i\ \ \ \ "tags":["skip"],' sample.ipynb > new_sample.ipynb
然后你可以使用上面的jupyter命令删除单元格。
备注:
TemplateExporter.exclude_input=True
删除所有输入单元格对输出单元格没有任何作用
TagRemovePreprocessor.remove_cell_tags
删除包含指定标签的输入输出单元格
TagRemovePreprocessor.remove_input_tags
删除包含指定标签的输入单元格对输出单元格没有任何作用
TagRemovePreprocessor.remove_all_outputs_tags
删除所有包含指定标签的输出单元格 不删除相关的输入标签
- 这两个命令可以加在一起创建一行。
- 正如@JamesOwers 所指出的-如果您在 mac 上使用 SED 命令,您需要使用可以使用 brew 安装的
gnu-sed
- brew install gnu-sed
然后只需将 sed
更改为 gsed
.
背景
我有一个笔记本,我可以使用以下方法导出到 reveal.js 个幻灯片:
jupyter nbconvert "${executed_nb_path}" \
--to slides \
--SlidesExporter.reveal_scroll=True \
--TemplateExporter.exclude_input=True \
--no-prompt
它排除 个具有单元格元数据的单元格:
{
"slideshow": {
"slide_type": "skip"
}
}
问题
如何导出为其他输出格式,例如 html
或 md
,并且对单元格元数据应用相同的预处理?如果可能的话,我希望能够在命令行上执行此操作(例如,通过为预处理设置命令行参数),而不是创建 python 脚本。
我试过的
试图计算出要添加的正确“traitlet”参数:docs here
- 没有骰子
--TagRemovePreprocessor.remove_cell_tags='slideshow.slide_type="skip"'
- 没有骰子
查看源代码了解预处理是如何完成的:
jupyter nbconvert --to slides ...
的入口点是nbconvert.exporters:SlidesExporter
nbconvert.exporters.slides._RevealMetadataPreprocessor
包含:if cell.metadata.slide_type not in {'notes', 'skip'}
TagRemoveProprocessor 需要 tags
单元格元数据才能工作
您可以通过转到“查看”->“单元格”工具栏->“标签”来添加标签。
如果您添加了 skip
标签,其后的单元格元数据将如下所示:
"metadata": {
"tags": [
"skip"
]
},
例如:如果你想将其转换为 markdown
那么你可以将 markdown
作为值传递给 --to
flag
jupyter nbconvert sample.ipynb \
--to markdown \
--no-prompt \
--TagRemovePreprocessor.remove_cell_tags={\"skip\"} \
--TemplateExporter.exclude_input=True
对于最新的 nbconvert 命令可以重写为:
jupyter nbconvert sample.ipynb \
--to markdown \
--no-prompt \
--TagRemovePreprocessor.remove_cell_tags "skip" \
--TemplateExporter.exclude_input=True
nbconvert 支持 html, markdown 作为输出,对于其他支持的输出检查 这里
解决方案
您可以使用这些命令中的任何一个将跳过标签添加到包含幻灯片键的元数据,然后将其与 TagRemoveProprocessor 一起使用以删除单元格
JQ
cat sample.ipynb | jq '.cells[].metadata |= if .slideshow.slide_type == "skip" then (.+ {tags: ["skip"]}) else . end' > new_sample.ipynb
SED -(mac 需要更改)
sed '/"slideshow": {/N;/.*"slide_type":\ "skip"/i\ \ \ \ "tags":["skip"],' sample.ipynb > new_sample.ipynb
然后你可以使用上面的jupyter命令删除单元格。
备注:
TemplateExporter.exclude_input=True
删除所有输入单元格对输出单元格没有任何作用TagRemovePreprocessor.remove_cell_tags
删除包含指定标签的输入输出单元格TagRemovePreprocessor.remove_input_tags
删除包含指定标签的输入单元格对输出单元格没有任何作用TagRemovePreprocessor.remove_all_outputs_tags
删除所有包含指定标签的输出单元格 不删除相关的输入标签- 这两个命令可以加在一起创建一行。
- 正如@JamesOwers 所指出的-如果您在 mac 上使用 SED 命令,您需要使用可以使用 brew 安装的
gnu-sed
-brew install gnu-sed
然后只需将sed
更改为gsed
.