Jupyter-Notebookの.ipynbファイルをコマンド1つでPDFに変換する方法

# 背景
Jupyter Notebookは学術研究から業務のデータ分析まで幅広い場面で使用されています。その成果や分析結果を他者と共有する際、PDF形式はその汎用性と一貫した表示により非常に役立ちます。

# 本記事のメリット
Jupyter Notebookの.ipynbファイルを **コマンド1つ** でPDFに変換できるようになります。

# 環境構築
PDFに変換するための手順と必要なツールについて詳しく解説します。

## 1. Jupyter Notebookのセットアップ
.ipynbファイルを変換するためのツールをインストールするためにAnacondaが必要です。

### インストール方法:
[Anacondaの公式サイト](https://www.anaconda.com/download)から、、Anacondaをインストールします。
詳細は省きます。

## 2. ライブラリのインストール

### nbconvert
nbconvertは、Jupyter Notebookの内容を様々なフォーマットに変換するための便利なツールです。

**役割**
- ipynbファイルを静的なフォーマット（例: HTML, LaTeX, PDF）に変換します。
- グラフやコード、マークダウンなどを適切に整形して出力します。

**インストール**
```bash
conda install nbconvert
```

### pandoc
pandocは、ドキュメントコンバーターとして非常に人気があり、多様なフォーマット間での変換をサポートしています。特に、Jupyter NotebookとPDFの間での変換には、内部でpandocが利用されます。

**役割**

- さまざまなマークアップフォーマット間での変換をサポートします。
- .ipynbファイルを中間フォーマットに変換する際に、nbconvertと連携して動作します。

**インストール**
```bash
conda install pandoc
```

## 3. TeXのセットアップ
変換過程でPDFを生成するためには、 **LaTeX (TeX)** が必要となります。nbconvertは内部でLaTeXを使用してPDFファイルを作成します。

本記事ではTexのインストール方法は省きます。
こちらの[サイト](https://texwiki.texjp.org/)にとても詳しく載っているので参考にしてください。

## 4. templateの変更
.ipynbファイルに日本語を使用している場合、日本語が正しくpdfに変換できないためnbconvertの設定ファイルであるtemplateファイルの修正を行います。
### nbconvertの設定ファイルの場所を探す
下記コマンドでnbconvertの設定ファイルがありそうなディレクトリを探します。
```bash
jupyter --path
```
```bash:結果
config:
    /Users/daiki/.jupyter
    /Users/daiki/.local/etc/jupyter
    /Users/daiki/anaconda3/etc/jupyter
    /usr/local/etc/jupyter
    /etc/jupyter
data:
    /Users/daiki/Library/Jupyter
    /Users/daiki/.local/share/jupyter
    /Users/daiki/anaconda3/share/jupyter
    /usr/local/share/jupyter
    /usr/share/jupyter
runtime:
    /Users/daiki/Library/Jupyter/runtime
```
```data:```の一覧のパスを探すといずれ見つかります。
私の環境(MacOS)では、 ```data:``` の ```/Users/daiki/anaconda3/etc/jupyter/nbconvert```でした。
nbconvertディレクトリの中に、 ```templates/latex``` が存在しているので移動してください。
```bash
~/anaconda3/share/jupyter/nbconvert/templates/latex
```
（私の環境の場合）上記の場所がカレントディレクトリです。
この ```latex``` ディレクトリの中にある ```index.tex.j2``` というtemplateファイルの修正を行います。

```diff_te_x:index.tex.j2
((=- Default to the notebook output style -=))
((*- if not cell_style is defined -*))
    ((* set cell_style = 'style_jupyter.tex.j2' *))
((*- endif -*))

((=- Inherit from the specified cell style. -=))
((* extends cell_style *))


%===============================================================================
% Latex Article
%===============================================================================

((*- block docclass -*))

- \documentclass[11pt]{article}
+ \documentclass[xelatex,ja=standard]{bxjsarticle}

((*- endblock docclass -*))

```


# .ipynbファイルをPDFに変換する方法

コマンドラインを利用して、直接NotebookファイルをPDFに変換します。
この方法は、自動化にも利用可能です。

## 手順

**1.** ターミナルやコマンドプロンプトを開きます。

**2.** 変換したい.ipynbファイルが存在するディレクトリに移動します。
```bash
cd your_.ipynb_directory
```

**3.** .ipynbファイルを変換します。

```bash
jupyter nbconvert --to pdf your_file.ipynb
```

上記のコマンドを実行すると、同じディレクトリに ```your_file.pdf``` という名前のPDFファイルが生成されます。


## 複数ファイルの一括変換
変換したい.ipynbファイルが複数ある場合、変改したいファイルを同じディレクトリに集めます。
そして、そのディレクトリ内で、下記コマンドを使用すると全ファイルが変換することができます。
```bash
jupyter nbconvert --to pdf *.ipynb
```

# おまけ：その他の変換オプション

```nbconvert``` は、 ```.ipynbファイル``` をPDFに変換するだけでなく、他の多くのフォーマットにも対応しています。
以下は、その一例です。

### HTML:

```bash
jupyter nbconvert --to html your_file.ipynb
```
上記のコマンドを実行することで、 ```.ipynbファイル``` の内容をブラウザで閲覧可能な ```HTMLファイル``` に変換することができます。

### Markdown:
```bash
jupyter nbconvert --to markdown your_file.ipynb
```
このコマンドを使用することで、 ```.ipynbファイル``` を ```Markdown形式``` に変換し、GitHubなどでの共有や編集が容易になります。

その他にも、LaTeX、そしてスライド形式など、さまざまなフォーマットへの変換が可能です。変換オプションは[nbconvertの公式ドキュメント](https://nbconvert.readthedocs.io/en/latest/)を参照してください。

# 終わりに
いかがだったでしょうか。
今回はコマンドを用いたPDF変換方法を紹介しました。
こういう作業はいかに楽するかを考えるのことが大切ですね。

読んでいただきありがとうございました。


# 参考文献
https://qiita.com/masa-ita/items/fb61263cd49cf949b1bc