我正在开发一个基础架构,开发人员可以使用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.HTMLExporter
和pypandoc.convert_text()
的结果,以便我主要使用内联引文和参考部分从后者添加?
答案 0 :(得分:1)
我不知道这必然算作"直截了当"但我能够想出一个解决方案。它涉及编写一个继承自nbconvert.preprocessors.Preprocessor
的类并实现preprocess(self, nb, resources)
方法。以下是preprocess()
的作用:
set
个引文键(其格式为[@bibtex_key]
'\n\n'
pandoc
转换从此短文本生成HTML文本。如果num_cite
是引用次数,则生成文本的第一行num_cite
行将是引文的内嵌版本(例如'(作者,年份)');其余的行将是参考部分的内容。## References
现在,当HTMLExporter
使用此Preprocessor
转换笔记本时,结果将包含内嵌引文,参考部分以及您期望从HTMLExporter
获得的所有格式