
電子書籍のページ端のツメ制御をScriptで処理
辞書や電話帳など、ページ数が多い本でページ端につける目次的なマークを業界の専門用語で「ツメ」といいます。このツメを手動で作るのは手間が多すぎて無理です。ページ数、書類数が増えれば増えるほど、煩雑な処理の重さを手作業で支え切れません。
ツメがあると、ちょっといい仕上がりに
このツメ、紙の印刷物であればページめくりの目安に使えて実用性もありますが、電子書籍でツメをつける意義というのは、そんなにありません。

ただ、「気分」や「雰囲気」の都合で、ツメがあったほうがいい場合が多々あります。ついていると「本を読んでいる」雰囲気が上がります。可能であれば、ついていたほうがいいでしょう。

ただ、ツメとかいうマイナーなものをサポートしているワープロとか、DTPアプリはないので、何か利用できる「別のもの」を利用して「ツメ」を表現することになります。

自分がよく使っているアプリ「Pages」では、「表」を使ってツメを表現しています。表だと、AppleScriptからコントロールしやすく、文字色と背景色を自由に変更できますし、表の座標やセル数なども変更できます。
普通の表とツメ用の表を識別
「ツメ」を表で作るのは割といいことづくめですが、書類内には普通の表もあります。普通の表とツメ用の表をどうにかして区別する必要があります。
・ページの一番「右端」にある(X座標的に一番大きな座標値)
・列数が1の表
・列数と行数の比率が一定以上(縦長)
といった条件に合う「表」が「ツメ」だと仮定して処理してみました。
Pagesは書類上のすべてのページの座標系がつながっているという特殊な構造になっているうえに、「見開きページ」設定モードになっていると開始ページの左右位置が異なるため、そのあたりの設定情報も考慮してページの左右を判定する必要もあります。
書類のファイル名から現在の「章」番号を識別
いま、どこの章の書類なのかをScript側から情報を取得できると、どこの章の部分を塗りつぶすかを識別できます。これには、ファイル名に章番号を入れておくことで、オープン中の書類から取得できます。
「15106 4章本文 REV.0リリース前、半年で作り直された絆.pages」
このファイル名から、章番号の数値「4」を取得し、ツメに反映させます。「4」のセルだけ色を変えて選択状態に変化させるのです。このあたりは、書類名を決まったフォーマットでかならず保存する、という作業を徹底するほかありません。
書類上のツメの状態から、選択色、その他の塗り色を識別
「ツメ」の各セルの塗り色、文字色、フォントを取得して、「明るいセル」と「暗いセル」(現在の章部分だけ色を変える)を検出しています。RGB値から色の「明るさ」を求めて、どこが暗いか、明るいかを自動検出しています。このあたりは、OS内の機能(NSColor)を呼び出して計算しています。
ツメ処理を自動化して、読みやすい電子書籍を
これで、書類名から章番号を取ってきて、ツメの表のうちどれが該当する「章」部分の装飾か、それ以外の「章」の部分なのかを識別。ツメの表を、それぞれ書類上のツメから検出した色で塗り直します。
そんな感じで、書類上のツメを修正して、書類に合うようにします。手でひとつひとつ操作していたら間違えるかもしれないですし、面倒なのでやる気になりません。
そして、一度Scriptを組んでしまえば別の電子書籍でも使い回しができるので、「楽」ができて、「見た目」もアップできるわけです。
Adobe InDesignだと、ツメ用のオブジェクトにスクリプトラベルをつけておいて、一発で「ツメ」として識別できるので楽ですが、Pagesだとこんな感じです。
アプリによっては、テンプレート書類でなんとか省力化できそうな気もしなくもないですが、やはり編集中の書類の章番号のピックアップとか、反映させる処理自体はScript頼みになることでしょう。