2017-03-29 13 views
1

Jupiterノートブックを使用して、開発者が検証テストを文書化できるインフラストラクチャを開発しています。インフラストラクチャの一部は、.ipynbファイルを.htmlファイルに変換して、テストの公開ドキュメントを提供できるpythonスクリプトになります。Jupyterノートブックでpandocとpandoc-citeprocを使用する

私が望むほとんどのモジュールがnbconvertモジュールを使用していますが、最終的なHTMLファイルで引用と参照を許可したいと思います。私は、適切なインライン構文の引用を変換し、参照セクションを追加するHTMLテキストを生成するためにpypandocを使用することができます。

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)メソッドを実装するクラスを作成する必要があります。 (これらは、フォーム​​3210

  • であり、それぞれ、これらのみ引用キーからなるテキストのショートボディを作成します

    1. ループのすべてのセルの上にノートにと引用キーのsetを格納します。ここでpreprocess()が何をするかであります'\n\n'
    2. によって分離すると、テキストのこの短い本体からHTMLテキストを生成するために、上記pandoc変換を使用。num_citeが引用の数である場合、生成されたテキストの最初のnum_cite線(例えば」(引用のインラインバージョンであろうAuthor、Year) ');残りの行はcont参考文献セクションのent。
    3. 各セルに戻り、各引用のインラインテキストをそのキーに置き換えます。
    4. HTMLExporterは、このPreprocessorを使用して、ノートブックを変換するとき、結果は意志、参照セクション今

    の内容をノートブックにセルを追加## References

  • でノートブックにセルを追加します。参照セクション、およびHTMLExporterから期待されるすべての書式設定がインラインで引用されています。

  • 関連する問題