1. 注意:jupyter notebookをadoc形式で出力可能

この記事を書いたあとでjupyter notebookをadoc形式で出力できることに気づきました。

adoc形式のファイルをincludeすることでnotebookの出力を表示できるかもしれません。

こちらについては後日ためしてみて別記事でご紹介しようと考えています。

2. Asciidoctorでjupyter notebookの出力を表示する

Asciidoctorでjupyter notebookの出力を表示したいことが多々あります。

いろいろ試してみた結果たどりついた私なりの対応方法を共有します。

実際に試してみるとなかなかに難しく、思い通りに行かないことが分かるかと思います。

多少の妥協はありますが

  1. 方法1、link:を使用して対象HTMLを参照する

  2. 方法2、raw html をincludeする

の2つの方法をご紹介します。

3. 方法1、link:を使用して対象HTMLを参照する

単純で簡単な方法です。jupyter notebookからエクスポートしたHTMLにリンクを貼る方法です。

メリット
  • notebookのスタイルが適用されている

デメリット
  • 別ページに飛ばないと内容を確認できない

下記のように記述すればリンクを貼ることが可能です。

index.adoc
link:trynotebookonasciidoctor.html[jupyter notebookからエクスポートしたHTMLはこちら]

下記のように表示されます。

4. 方法2、raw html をincludeする

asciidoctorの文書内からraw html をIncludeします。

メリット
  • 別ページに飛ばなくても内容を確認できる

デメリット
  1. エクスポートしたHTMLに一手間加える必要がある

  2. notebookのスタイルが適用されない

エクスポートしたHTMLは単体で成り立つようにScriptやCSSの情報が含まれています。

raw htmlをそのままIncludeすると上記の情報が干渉してAsciidoctorのスタイルが崩れてしまいます。

このためnotebookのScriptやCSSの情報を削除してからIncludeすることにします。

エクスポートしたHTMLは下記のような構造になっているので

<html>
<body>
ここから
ここまでのHTMLタグをRaw HTMLとしてIncludeする
</body>
</html>

bodyの内部だけをincludeするようにします。

実際の表示結果は下記のようになります。

In [3]:
%matplotlib inline

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

x = np.random.rand(100)
y = np.random.rand(100)

df = pd.DataFrame(dict(x=x, y=y,))

plt.scatter(x, y)
plt.show()
df
Out[3]:
x y
0 0.383202 0.594648
1 0.205188 0.239019
2 0.141145 0.869723
3 0.484748 0.025293
4 0.627281 0.851086
... ... ...
95 0.470970 0.090401
96 0.717743 0.799334
97 0.377164 0.686360
98 0.441632 0.864726
99 0.490379 0.432262

100 rows × 2 columns

5. まとめ

思い通りに簡単にというのは難しいのですがなんとか表示できるようになりました。

今回は以上です。