2017-03-29 43 views
1

我正在開發一個基礎設施,開發人員可以使用Jupyter筆記本記錄他們的驗證測試。基礎架構的一部分將是一個python腳本,可以將它們的.ipynb文件轉換爲.html文件,以提供面向公衆的測試文檔。在Jupyter筆記本上使用pandoc和pandoc-citeproc

使用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()這樣,我得到的大多是前者,內聯引文和參考部分從後者加入?

回答

1

我不知道這必然會被視爲「直截了當」,但我能夠想出一個解決方案。它涉及編寫一個繼承自nbconvert.preprocessors.Preprocessor的類並實現preprocess(self, nb, resources)方法。下面是preprocess()做:

  1. 遍歷在筆記本的每一個細胞和存儲引用鍵的set(這些形式的​​3210
  2. 創建文本短身僅由這些引文鍵,每個通過'\n\n'
  3. 分開使用pandoc轉換以上,以生成從文本的這個短體的HTML文本。如果num_cite是引用次數,第一num_cite線所生成的文本的將是引用的內聯的版本(例如,「(作者,年)');其餘的行將是續參考部分的參考。
  4. 回到每個單元格,並用每個引用的內嵌文本替換其關鍵字。
  5. 細胞添加到筆記本## References
  6. 細胞添加到筆記本與引用部分的內容現在

,當HTMLExporter,使用這種Preprocessor,轉換筆記本,結果會具有內嵌引文,參考部分以及您期望從HTMLExporter獲得的所有格式。