課題はJupyterで仕上がったのに、提出システムが受け付けるのはPDFだけ。「PDFとしてダウンロード」を選ぶか、jupyter nbconvert --to pdfを実行すると、xelatexが見つからない、あるいはpandocがないというエラーが出ます。nbconvertはLaTeXを経由してPDFを作るので、何かを書き出す前にTeXディストリビューション一式のインストールが必要なのです。

Look Scannedで.ipynbファイルを直接開けるようになりました。Jupyter Notebookをスキャン風PDFに変換のページでノートブックを選ぶと、ブラウザの中でそのままレイアウトされます。Markdownセル、コード、そしてファイルに保存された出力です。プレビューでページを確かめたら、PDFをダウンロードできます。インストールは不要で、ノートブックがアップロードされることもありません。

最初にお伝えしておくと、Look Scannedは書類をスキャンしたように見せるためのツールなので、できあがるPDFもスキャンした見た目になります。「印刷してスキャンしたもの」として提出が求められるノートブックや、紙の資料らしく見せたいノートブックにはぴったりです。回転、ぼかし、ノイズをゼロまで下げればすっきりしたページになりますが、どのページも画像のままなので、PDF内の文字は選択も検索もできません。

.ipynbファイルをスキャン風PDFにする手順

  1. Jupyter、JupyterLab、VS Code、Google Colabのいずれかでノートブックを実行して保存し、出力をファイルに残します。Colabでは「ファイル → ダウンロード → .ipynb をダウンロード」を使います。
  2. Jupyter Notebookをスキャン風PDFに変換を開き、.ipynbファイルを選びます。
  3. プレビューを1ページずつ確認します。コード、表、グラフを見て、用紙サイズと余白を設定します。
  4. スキャン効果を調整します。小さなコードが読めるよう、ぼかしとノイズは控えめに。ページは初期設定ではグレースケールなので、グラフの色を残したいときは「カラー」を選んでください。
  5. スキャン風PDFを生成してダウンロードします。

画像のほうが使いやすい場合は、各ページをJPGやPNGで書き出すこともできます。選び方はPDF・JPG・PNGの比較で説明しています。Pro版なら、一括スキャンで複数の.ipynbファイルをまとめて処理できます。

ページに表示されるもの

  • Markdownセル:見出し、リスト、表、リンク、画像。セルに直接貼り付けた画像も表示されます。
  • コードセル:ノートブックの言語に合わせて構文が色分けされ、In [1]:のプロンプトが付きます。長い行はページからはみ出さずに折り返されます。
  • 保存済みの出力(Out[1]:のプロンプト付き):printした文字、戻り値、pandasのDataFrameのようなHTMLの表、そして画像。matplotlibやseabornのグラフもそのまま出ます。
  • エラー:トレースバック全体ごと表示されます。
  • ターミナル出力はターミナルで見えるとおりに。色の制御コードは取り除かれ、tqdmのような進捗バーは更新のたびの表示ではなく最後の状態だけが残ります。

始める前に知っておきたいこと

  • セルは実行されません。Look Scannedが読むのはファイルに保存された内容だけで、カーネルはありません。一度も実行していないセルや、出力をクリアして保存したノートブックでは、コードだけが表示され、その下には何も出ません。すべてのセルを実行して保存してから、ファイルを選んでください。
  • 数式はTeXのソースのまま。Markdownセルに$…$や$$…$$で書いた数式は、たとえば$\alpha + \beta$のように入力したとおりに表示され、数式として組版されることはありません。
  • インタラクティブな出力は表示されません。Plotly、Bokeh、ipywidgetsはJavaScriptで描画しますが、JavaScriptは実行されません。表示されるのはノートブックに一緒に保存された静的な代替表示で、短い1行のテキストだけのことも、何も表示されないこともよくあります。matplotlibのように画像として保存されるグラフなら問題ありません。
  • nbformat 4のノートブックが必要です。現在のJupyter、JupyterLab、VS Code、Colabが保存する形式です。かなり古いnbformat 3のノートブックは読み込めないので、最新のJupyterで開いて保存し直せば変換できます。
  • 幅の広い表は詰められます。表はページ幅に合わせられるため、列の多いDataFrameは各列が細くなり、折り返されます。
  • 元のノートブックは残しておいてください。本物のスキャンと同じく、PDFはページ画像でできています。コードを実行したり編集したりするには.ipynbファイルが必要です。

ノートブックの読み込みとレイアウトはすべてお使いの端末の中で行われ、サーバーにアップロードされることはありません。唯一の例外は、MarkdownセルがWebアドレスで画像を表示している場合です。その画像はブラウザが掲載元のサイトから取得します。Jupyterで開いたときと同じです。

nbconvertを使ったほうがいいとき

文字を選択できるPDF、組版された数式、Jupyter本来の書き出しと同じ見た目のPDFが必要なら、今でもnbconvertが正解です。TeXディストリビューションを入れてjupyter nbconvert --to pdfを実行するか、--to webpdfを使えば、ヘッドレスのChromiumブラウザで印刷するのでLaTeXはまったく要りません。どちらの方法でも、できたPDFをLook Scannedに読み込めばスキャン効果をかけられます。

レポートがノートブックではなくMarkdownやLaTeXのファイルですか?それらも開けます。MarkdownとHTMLをスキャン風PDFにとLaTeXをスキャン風PDFにをご覧ください。

PDFで提出しなければならないノートブックがありますか?さっそく試してみてください。