【问题标题】:how to programmatically add slides cell metadata in jupyter notebooks?如何以编程方式在 jupyter 笔记本中添加幻灯片单元元数据?
【发布时间】:2022-10-22 04:21:25
【问题描述】:

Jupyter notebooks 有一种可视化单元元数据的方法,因此当您使用nbconvert 将笔记本导出到幻灯片时,您可以参数化单元格的外观。

例子:

例如,我想在不使用 GUI 的情况下以编程方式将该元数据添加到单元格中,以便我可以自动创建幻灯片,特别是来自 google colaboratory,因为它不支持编辑单元格元数据工具。

我遇到了这个参考

https://jupyterbook.org/en/stable/content/metadata.html#add-tags-using-python-code

它以编程方式添加元数据以隐藏单元代码。我希望能够做同样的事情,但是添加幻灯片元数据.例如,我不确定我应该遵循什么 {tags:values} 或语法。

【问题讨论】:

    标签: python jupyter-notebook google-colaboratory nbconvert


    【解决方案1】:

    您可以使用nbformat 来执行此操作,就像您指向的示例一样。

    “nbformat 包允许您以编程方式读取和解析笔记本文件。” - SOURCE, Tony Hirst's description

    nbformat 是 Jupyter 的一部分,因此它可以在您运行笔记本的任何地方运行。

    我使用 nbformat 来执行与您的目标 here 类似的事情(处于工作进行中状态)。最相关的部分是here,我将笔记本中单元格的元数据设置为幻灯片放映。这是该部分的要点:

    import nbformat as nbf
    a = nbf.v4.new_notebook()
    for p in image_fn_pairs:
        content_for_md_cell = slideshow_cell_stub_text.replace(
            "THE_IMAGE1_PLACEHOLDER_TEXT_GOES_HERE",p[0]).replace(
            "THE_IMAGE2_PLACEHOLDER_TEXT_GOES_HERE",p[1])
        a.cells.append(nbf.v4.new_markdown_cell(content_for_md_cell))
    # fix the metadata for each cell to be for a slide
    slide_show_meta = {"slideshow": {"slide_type": "slide"}}
    # a.cells = [c["metadata"] = slide_show_meta for c in a.cells]
    meta_fixed_cells = []
    for c in a.cells:
        c["metadata"] = slide_show_meta
        meta_fixed_cells.append(c)
    a.cells = meta_fixed_cells
    

    在您的情况下,听起来您的笔记本中已经有了内容,因此在您的情况下,您需要先在笔记本中阅读,如下所示:

    import nbformat as nbf
    ntbk = nbf.read("old_notebook.ipynb", nbf.NO_CONVERT)
    

    然后像我的例子一样修复元数据。这些方面的东西:

    new_ntbk = ntbk
    # fix the metadata for each cell to be for a slide
    slide_show_meta = {"slideshow": {"slide_type": "slide"}}
    meta_fixed_cells = []
    for c in ntbk.cells:
        c["metadata"] = slide_show_meta
        meta_fixed_cells.append(c)
    new_ntbk.cells = meta_fixed_cells
    nbf.write(new_ntbk, "notebook_with_slide_metadata.ipynb", version=nbf.NO_CONVERT)
    

    您可以通过转到there 并单击launch binder 来尝试我在上面设置和提到的自动化、正在进行的幻灯片构建过程。我认为,如果您只是在出现的笔记本中运行东西,它将指导您制作幻灯片,每张幻灯片上并排填充一些填充的矩形作为图像的替代品。

    您还会看到我在the script 中使用了一个笔记本存根,它基于a notebook stub 添加整个笔记本here 的元数据,以便在打开笔记本时自动播放幻灯片,即,"livereveal": {"autolaunch": true, "scroll": true} 部分。



    nbconvert 包含一个将编辑元数据的预处理器,请参阅here,它看起来将添加元数据。

    【讨论】:

      猜你喜欢
      • 2019-11-01
      • 2016-04-12
      • 1970-01-01
      • 1970-01-01
      • 2019-07-25
      • 1970-01-01
      • 2016-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多