2020年06月11日

InDesignドキュメントから目次用テキストを生成するスクリプト

DTP作業者にとっての難易度 ★★★☆☆(3)

※2020.6.13の03:30頃/仕様を変更(新仕様のサンプルデータをアップ・動画を変更しました)

※2020.8.21の01:50頃/仕様を少し変更


InDesignの目次機能はたいへん便利ですが、タイトルや見出しを別フレーム(アンカーを含む)で作成している場合(ストーリーが別になっている場合)は順番が乱れてしまいます。今回は、これを解決するために目次用テキストを生成するスクリプトを書いてみました。

※本スクリプトは横組みのドキュメント専用です。

使い方


「makeContents_ver2_XXXXx.jsx」が実行用の本体スクリプトファイル、「pStyleList.jsx」がリスト用のスクリプトファイルです。

「pStyleList.jsx」のファイル名を変更すると動きません。

2つのスクリプトファイルは同階層に置いておかなければなりません。

別ドキュメント用に使用する際は2つのスクリプトファイルを収めたフォルダを丸ごと複製してから「pStyleList.jsx」を編集すると良いと思います。

その他、「pStyleList.jsx」の書き方については「pStyleList.jsx」内に書かれています。

テキストファイルに「ページの通し番号」「コラム番号」「y座標」「x座標」が必要ない場合は「makeContents_ver2_XXXXx.jsx」206行目の行頭の//を削除してコメントアウトを解除してください(更新により行番号が変わる可能性あり)。

注意点


コラムが複数ある場合、かならず段組みガイドを設定しておく必要があります。段組みガイドが存在しないと文字列が何コラム目に存在するか認識できません。

段抜き設定を使用している場合、このスクリプトで目次用テキストを生成することはできません。

「2番目以降のコラムに存在する」文字列を「1番目のコラムに存在する」ことにしたい場合は「pStyleList.jsx」で「行頭に付加する記号」の1文字目を「※」とします。

複数の段落が横に並んでいる場合、順番が正しく認識されないケースがあります。これを解決するには「pStyleList.jsx」の「調整値」(4項目目)に数値を設定し、y座標の値を増減します(上にあることにする場合→正の値、下にあることにする場合→負の値)

InDesignドキュメントを変更するスクリプトではありませんが注意してお使いください。
不備があることも考えられますので十分にテストを重ねた上でご使用ください。

※2020.8.21更新/以下についてスクリプトを変更しました。
……………………………………………………
「箇条書き番号・記号とテキストを区切る記号」を「>>>>」に変更
「強制改行が存在した箇所」を「<>」に変更
「タブが存在した箇所」を「<>」に変更
pStyleList.jsxの「調整値」の単位を「mm」に変更

2020.8.21サンプルデータはこちら《makeContents_ver3_0821a.zip》です。

※以下は上記修正前のサンプルデータです。

2020.6.13サンプルデータはこちら《makeContents_ver2_0612d.zip》です。

※以下は初期のサンプルデータです。念のため残しておきますが、このサンプルデータは調整値の設定ができません。また、環境設定の内容によっては正しく処理できないケースがあります(他にも仕様変更あり)。できれば新しいサンプルデータをご使用ください。このサンプルデータ時点の動画URLは以下の通りです「https://youtu.be/SMSRodjW5_A

初期サンプルデータはこちら《makeContents_0611a.zip》です。
posted by 照山裕爾 at 03:51| Comment(2) | InDesign-書式・スタイル | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
照山さん、こんにちは。

素晴らしいスクリプトですね。
細かく配慮しようと考えられた設計になってると感じます。

気づいたところでは注意点が1点、ノンブルについてです。
82行目に
if(myPageNum % 2 == 0){
という条件分岐があるのですが、ノンブルが偶数であれば、という条件分岐ですよね。
これがPage.nameを参照しているため、例えば iii みたいなノンブルが相手だと全部falseになってしまいます。

ページの右左の判別は Page.side プロパティで判断したほうがよいと思います。
http://indesign.cs5.xyz/dom/Page.html#1

それとファイルへの書き込みについて、"write"モードではファイルの先頭から中身が丸っと書き換わってしまいますが、"appned"モードではファイルの末尾からテキストを書き込む事が可能です。
file.open("a");
ご参考まで!
Posted by Uske_S at 2020年06月11日 16:04
Uske_Sさん
ノンブルの種類、考えていませんでした。
Page.side プロパティというものがあるんですね。ぜひ使いたいと思います。
ありがとうございます。

"appned"モードも知りませんでした。
勉強不足ですね。
少しずつ成長したいと思います。
これからもよろしくお願いします。
Posted by 照山裕爾 at 2020年06月11日 16:16
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]