python - 将 pandoc 和 pandoc-citeproc 与 Jupyter Notebook 结合使用

标签 python html jupyter-notebook nbconvert pypandoc

我正在开发一个基础设施,开发人员可以使用 Jupyter 笔记本记录他们的验证测试。基础设施的一部分是一个 Python 脚本,它可以将 .ipynb 文件转换为 .html 文件,以提供面向公众的测试文档。

使用 nbconvert 模块可以完成我想要的大部分操作,但我希望在最终的 HTML 文件中允许引用和引用。我可以使用 pypandoc 生成 HTML 文本,将引文转换为正确的内联语法并添加 引用 部分:

from urllib import urlopen
import nbformat
import pypandoc
from nbconvert import MarkdownExporter

response = urlopen('SimpleExample.ipynb').read().decode()
notebook = nbformat.reads(response, as_version=4)
exporter = MarkdownExporter()
(body, resources) = exporter.from_notebook_node(notebook)

filters = ['pandoc-citeproc']
extra_args = ['--bibliography="ref.bib"',
              '--reference-links',
              '--csl=MWR.csl']
new_body = pypandoc.convert_text(body,
                                 'html',
                                 'md',
                                 filters=filters,
                                 extra_args=extra_args)

问题在于,生成的 HTML 丢失了 nbconvert.HTMLExporter 提供的所有重要格式和其他功能。

我的问题是,是否有一种简单的方法来合并 nbconvert.HTMLExporterpypandoc.convert_text() 的结果,以便我得到的大部分是前者,以及内联引用和从后者添加的引用部分?

最佳答案

我不知道这是否一定算“直接”,但我能够想出一个解决方案。它涉及编写一个继承于 nbconvert.preprocessors.Preprocessor 的类并实现 preprocess(self, nb, resources) 方法。这是 preprocess() 的作用:

  1. 循环笔记本中的每个单元格并存储一组引文键(其格式为[@bibtex_key]
  2. 创建仅包含这些引文键的简短文本正文,每个引文键均以 '\n\n' 分隔
  3. 使用上面的 pandoc 转换从这段简短的文本中生成 HTML 文本。如果 num_cite 是引用次数,则生成文本的前 num_cite 行将是引用的内联版本(例如“(Author, Year)”);其余行将是引用文献部分的内容。
  4. 返回每个单元格,并将每个引文的内嵌文本替换为其关键字。
  5. 使用 ## References 将单元格添加到笔记本
  6. 向笔记本添加一个包含引用部分内容的单元格

现在,当 HTMLExporter 使用此预处理器 转换笔记本时,结果将包含内联引用、引用部分以及您期望的所有格式HTMLExporter

关于python - 将 pandoc 和 pandoc-citeproc 与 Jupyter Notebook 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43102881/

相关文章:

python - 如何调试 DJango 测试服务器提供的错误 500?

python - Swift 与 Python 性能对比

javascript - AngularJS ng-repeat 唯一的对象数组

python - 暂停Jupyter Notebook小部件,等待用户输入

python - 凯拉斯属性错误: 'list' object has no attribute 'ndim'

python - 字符串列表,获取n个元素的公共(public)子串,Python

python - 匹配两个数据框以选择具有完全匹配的行项目的项目

Javascript 选择所有周围的元素

javascript - 在脚本中设置默认音量

python - 在 Jupyter 笔记本中清除单元格输出的键盘快捷键