kanta's spike

プログラミングを学ぶために、数学を学びなおしたいと思っています。

米田優峻さんが公開されている150 分で学ぶ高校数学の基礎 - Speaker Deckという資料を知りました。1 2

大変読み易く、わかりやすいです。PDFをダウンロードできるので、ダウンロードして勉強することにしました。 全10章、259ページあるのですが、このPDFには目次がついていません。少し不便ですね。

目次を追加する方法がないか調べてみました。

PDFに目次を追加する方法の調査

私はmacOSを使っています。Google先生に質問したところ、macOSの標準機能ではPDFに目次を追加できないようでした。

Pythonを勉強中の私は、GitHubに目次を追加できるPythonツールがないか探すことにしました。 そこで、見つけたのがこのリポジトリです。

これを使って、目次を作成したいと思います。

pdfoutline

pdfoutlineは、GhostscriptというPDFのインタプリタにもなるソフトウェアのラッパーツールのようです。3

利用しやすい独自の形式の目次ファイルを、PDFの形式に変換してから、Gohstscriptに引き渡し、対象のPDFファイルと結合させるツールのようです。

事前準備

macOS環境の場合、事前にGohstscriptをインストールする必要があります。

brew install ghostscript

インストール

適当な作業ディレクトリに、pdfoutlineをクローンします。

cd work
git clone https://github.com/yutayamamoto/pdfoutline.git

あとは、クローンしたディレクトリに移動し、-hオプションを付けてpdfoutline.pyを実行しましょう。 使い方が表示されます。

% cd pdfoutline
% python3 ./pdfoutline.py -h
usage: pdfoutline.py [-h] [-g GS_PATH] in.pdf in.toc out.pdf

add table of contents to a pdf

positional arguments:
  in.pdf                the input pdf file
  in.toc                a table of contents file in the specified format
  out.pdf               the output pdf file

options:
  -h, --help            show this help message and exit
  -g GS_PATH, --gs_path GS_PATH
                        Path to the ghostscript executable

PDFに目次を追加する

PDFファイルの準備

150 分で学ぶ高校数学の基礎 - Speaker Deckのスライドの右下にある"ダウンロード"ボタンからPDFをダウンロードしてください。

今回はkiso.pdfという名前でダウンロードしたファイルを保存しました。

目次の準備

目次ファイルは、基本的に、 見出しとページを記載した行を、タブや空白でレベル指定するようです。

# this is a comment
First Chapter 1
    first section 1
        first subsection 1
    second section 4
    third section 5

150 分で学ぶ高校数学の基礎 - Speaker Deckの目次ファイルを作成してみます。

toc.txtという名前で作成しました。

# 150分で学ぶ高校数学 米田優峻
序:自己紹介 2
序:スライドの概要/諸注意 3
序:目次 4
CHAPTER 1 数学の基礎知識 5
    A 基本的な数と計算 7
    B 文字式とは 12
    C 方程式とは 21
    "本章のゴール"を解こう 27
CHAPTER 2 場合の数 31
    公式1: 積の法則 33
    公式2: 並べ変え 38
    公式3: nPr (選択+並べ替え) 44
    公式4: nCr (選択) 49
    "本章のゴール"を解こう 53
CHAPTER 3 確率と期待値 56
    確率とは 57
    期待値とは 65
CHAPTER 4 統計的な解析 69
    統計の目的 70
    統計で使うツール1: ヒストグラム 72
    統計で使うツール2: 平均 76
    統計で使うツール3: 標準偏差 79
    統計で使うツール4: 相関係数 85
    "本章のゴール"を解こう 97
    統計のさらなる活用 102
CHAPTER 5 いろいろな関数 103
    関数とは 104
    関数の書き方 108
    いろいろな関数1: 一次関数 113
    いろいろな関数2: 二次関数 116
    いろいろな関数3: 指数関数 119
    いろいろな関数4: 対数関数 126
    補足: 指数関数の公式 131
    補足: 対数関数の公式 134
    "本章のゴール"を解こう 137
CHAPTER 6 三角比と三角関数 141
    三角比とは 142
    三角比の具体例 146
    三角比の拡張 150
    三角関数とは 153
    補足: ラジアンについて 155
    発展: 加法定理 156
    "本章のゴール"を解こう 157
CHAPTER 7 証明のやり方 160
    証明とは 161
    証明の例 163
    代表的な証明方法1: 背理法 168
    代表的な証明方法2: 数学的帰納法 174
    "本章のゴール"を解こう 182
CHAPTER 8 ベクトル 187
    ベクトルとは 188
    身近なベクトルの例 190
    ベクトルに関する注意点 195
    補足: ベクトルの大きさ 197
    ベクトルの演算 198
    ベクトルの応用 203
CHAPTER 9 微分法と積分法 205
    微分とは 206
    微分の例 209
    微分に関する記号・用語 212
    微分の方法 213
    積分とは 222
    積分に関する記号・用語 225
    積分の例 226
    積分計算の方法 230
    微分と積分の関係 235
    "本章のゴール"を解こう 237
CHAPTER 10 その他のトピックス 240
    トピックA: 数列 241
    トピックB: 集合 245
    トピックC: 整数の性質 249
CHAPTER FINAL スライドのまとめ 254
    終: スライドのまとめ 255
    終: さらなる学びへ 257
    終: 参考文献: 258

目次をつける

準備ができました。以下のコマンドを実行して目次を追加しましょう。

python3 ./pdfoutline.py kiso.pdf toc.txt kiso_with_toc.pdf

kiso_with_toc.pdfが生成されました。

まとめ

yutayamamoto/pdfoutlineで簡単にPDFに目次を追加できました。

Ghostscriptを使っても目次を作成できるようですが、PDFの言語で目次を記載する必要があるためハードルが高いです。 yutayamamoto/pdfoutlineは独自の目次形式導入することで、そのハードルを下げてくれています。ありがたいですね。

また、今回の高校数学の資料の著者である、米田優峻さんは問題解決のための「アルゴリズム×数学」が基礎からしっかり身につく本 | Gihyo Digital Publishingという本も書かれています。アルゴリズムも勉強したいので読んでみようと思います。

作成日: 2023/01/26