見開き状態の本をスキャンして作られたPDFファイル (具体的には国立国会図書館デジタルコレクションから「全コマダウンロード」したPDFファイル) を、本の1ページがファイルの1ページになるように変換したい。
また、変換の際には、必要なページだけを指定して抽出したいし、カラー画像をグレースケール画像にしたい。
そして、make
を実行するだけ以上の変換が行われるようにしたい。
デジタルコレクションにある続国訳漢文大成の『資治通鑑』などを気が向いたときに少しずつ読んでいるが、手持ちの機器 (13インチのノートパソコンおよび9.7インチiPad) では拡大なしでは見づらい (私の視力ではルビや注がよく見えない)。 そもそもこれは見開きでスキャンされたデータなので、本の縦長のページが左右に並んだものがファイルの横長の1ページとなっているわけだが、iPadを縦長にしてその1画面に本の1ページが映る (ファイルの横長の1ページの右半分ないし左半分だけが表示される) くらいにまで拡大して、ちょうど見やすい大きさなのだ。これはつまり、13インチのノートパソコンでは、見やすい大きさまで拡大すると1行を読むために上下スクロールが必要になり、それはそれで読みづらい、ということでもある。縦持ちのiPadで読みたい所以である。
ところが、iPadのブックAppだと、タップしてページを移動するたびに拡大率がリセットされるようなので、毎ページ毎ページ、ピンチアウトせねばならず、そのたびに読書の流れが中断されてしまう。
以上のような事情なので、本の1ページがファイルの1ページになるように、元の「全コマダウンロード」したPDFファイルを変換したい。
また、そもそも『資治通鑑』を最初から順にすべて読破するのは難しそうなので、ひとまず興味のある巻を拾い読みしたい。 よって指定した範囲のページだけ抽出して変換できるようにしたい。
もちろん、元のファイルの全体を変換して、その中から好きなところだけ読めばいい、という考え方もある。 だが、分厚い本だと、見開きになった右ページと左ページの境界の位置が、本の始めの方と終わりの方でややずれていたりする。すると、一律な切り出し範囲を設定しづらい (大きめのマージンをとれば良いという考えも可能だが)。 幸いというか、『資治通鑑』の各巻は、マージンを少なくとった設定を一律に適用しても一部のページだけ文字が切り出し範囲外にはみ出るということがない程度には、ページ数が少ない。 したがって、指定した範囲のページだけ抽出して変換できるようにすることは、望ましいと言えるだろう。
また、スキャンされた本を読む場合においては、少なくとも私は、どうもグレイスケール表示にした方が目が疲れないようである。今まではブックAppを使う前にアクセシビリティの設定でグレイスケール表示に切り替えていたが、これはこれで面倒だ。よって、最初から画像 (本のスキャン画像) をグレイスケールのものに変換しておきたい。
なお、以上の目的を達成するためのツールは色々とあるのだろうが、Makefileを書く練習もしたいので、make
の実行による変換方法を考えた。
私の使っているOSは macOS Mojaveで、使っているシェルはbashである。以下ではその環境を前提として書く。
- Homebrewをインストールしておく。
$ brew install qpdf
によりqpdfをインストールしておく。$ brew install imagemagick
によりImageMagickをインストールしておく (convertコマンドを使いたいから)。$ brew install xpdf
によりxpdfをインストールしておく (pdfimagesコマンドを使いたいから)。- MacTeXをインストールしておく (好みの問題だが、変換時のオプションの値を記録した表紙をつけたくて、その作成にXeLaTeXを使っているので。表紙が不要ならMacTeXも不要)。
- 見開き状態の本をスキャンして作られたPDFファイル (変換元ファイル) を適当なディレクトリに置く。以下、そこがカレントディレクトリだとして説明する。たとえば、『続国訳漢文大成 経子史部 第六巻』を「全コマダウンロード」して
kokuyaku_kanbun_vol_06.pdf
と名前を付けたものを、変換元ファイルとして使う。 - 作業用ディレクトリを用意する。たとえば、カレントディレクトリの配下に
tmp
というディレクトリを用意する。 - カレントディレクトリには、
Makefile
と、その中でincludeしているcommon_config.mk
およびconfig_for_individual_run.mk
も置く。 - 作業用ディレクトリには、表紙ページ作成用のLaTeXソースファイル (たとえば
cover.tex
というファイル名) も置く。なお、そもそも表紙を用意するかどうか、また、用意するにしてもXeLaTeXを使うかどうかは、好みの問題なので、好みに合わせてMakefile
を書き換えるとよい。 - 以上の例をまとめると以下のようになる。なお、作業用ディレクトリ名とLaTeXソースファイル名 (のうち拡張子を除いた部分) は、
common_config.mk
の変数定義と合わせておく。
./kokuyaku_kanbun_vol_06.pdf
./Makefile
./common_config.mk
./config_for_individual_run.mk
./tmp/cover.tex
./config_for_individual_run.mk
の変数定義を適宜所望のものに書き換え、make
を実行する。具体的な実行手順はこれだけである。
なお、CROPRIGTHT
とCROPLEFT
の設定値は、その都度試行錯誤が必要になる (何度か設定を変えながらmake
しては変換結果のPDFファイルを確認する必要がある) かもしれない。
その設定に際しては以下のような点を考慮すべきである。
- 左ページと右ページの境界線は、必ずしも変換元ファイルの各ページの真ん中と一致するとは限らない。場合によっては、右ページの左端が中心線より左となり、左ページの右端が中心線より右となるよう、切り取り範囲を指定すべきである。
- 左右の端に見える小口の部分まで含めてスキャンされている場合、左端・右端の小口のある辺りは捨てるように切り取るべきかもしれない。
-終わり-