DTP作業者にとっての難易度 ★☆☆☆☆(1)
※2017.8.27にサンプルデータを更新(置換の設定ミスでいくつかのアルファベットが削除される問題を修正しました)
※2017.9.14にサンプルデータを更新
※2019.2.21にスクリプトを含むサンプルデータを更新
※2020.4.15/サンプルデータを更新(ルーラー開始位置がスプレッド以外の時に正しく動作しなかった問題を修正しました/書式版のjsx)。
※2021.1.15/サンプルデータを更新(ルーラー開始位置がスプレッド以外の時に正しく動作しなかった問題を修正しました/文字スタイル版のjsx・また、合体用のjsxも修正しました。)。
※2022.5.9/サンプルデータを更新(先頭ページのノンブルのズレを修正しました)。
※2022.9.7/サンプルデータを更新(「合体してソート」のjsxを修正しました)。
※2023.4.14/サンプルデータを更新(索引項目に改行コードが含まれる場合の問題を修正しました)。
※2023.5.26・6.6/サンプルデータを更新(対象となる書式範囲が改行をまたぐ〈含む〉場合は改行の前後を別々の項目とすることにしました〈なお、強制改行をまたぐ場合は強制改行を削除して1項目にします〉)。
※2024.6.29/サンプルデータを更新/「合体してソート」を修正しました(カンマが含まれる語句が正しく処理されない問題を修正)。
※2024.8.1/サンプルデータを更新/「合体してソート」を修正しました(1用語のノンブル数が多い時に処理しきれなくなる問題を修正)。
以前
『文字スタイル部分・下線部分などを索引化する』で索引用テキストを抽出するJavaScriptをご紹介しました。私自身は便利に使っているのですが、文字スタイル名や下線などの設定を変更するにはJavaScriptファイルそのものを書き換える必要があり、あまり使いやすくない(かなぁ)と感じてきました。今回は、手軽にダイアログで操作できるように改良してみました。
まずは動画をご覧ください。
以下、簡単に説明します。
文字スタイルから索引用テキストを抽出する

InDesignドキュメントを表示した状態でスクリプトを実行するとダイアログが表示されます。ドロップダウンリストにはドキュメントに設定されている文字スタイルがすべて表示されますので、索引化したいものを選択して実行してください。テキストファイルはドキュメントと同階層に生成されます。
●文字スタイルの取得にはInDesignerの悪あがき(DOTさん)の『グループ化された段落スタイルを取得』を使わせていただきました。
下線・打ち消し線・文字色から索引用テキストを抽出する

こちらも同様にダイアログが表示されます。必要な項目をチェックし、ドロップダウンリストから線種や色(スウォッチ名)を選択してください。
●先日開催された「DTPerのスクリプトもくもく会」で@Uske_Sさん、@AJABONさんからダイアログについていろいろ教えていただいたおかげで形にすることができました。ありがとうございました。
複数の索引用テキストを合体してソートする
こちらはオマケのスクリプトです。複数の索引用テキストが入ったフォルダを選択して実行すると、それらの内容を合体した上でソートし、重複項目を整理します。合体したテキストファイルは元フォルダと同階層に生成されます。
いずれも、いつにも増して手探りで書いたスクリプトなのでお試しになる際は十分にテストされるようお願いします。
スクリプトを更新しました(2019.2.21)
内容を知りたい方は以下を参照ください
旧スクリプトを使っていて困ったことがありました。あるドキュメントで見開きをまたぐフレームグリッドに本文を流していたのですが、左ページに存在する用語も右ページに存在する用語も索引を抽出すると“同じページに存在する”と認識されてしまったのです。
※縦組みで傍注を設けたいと考え、やむなく左右ページをまたぐフレームを使用しました。

旧スクリプトは「その用語を含むテキストフレーム(フレームグリッド含む)が“どのページに置かれているか”」を抽出するものでした。“どのページに置かれているか”は、そのフレームの左右中央の座標で判断されるようです(詳しくはUske_Sさんの
http://uske-s.hatenablog.com/entry/2017/08/13/132800を参照)。ですから同じフレームに属していれば用語自体が左右どちらのページに表示されていても“同じページに存在する”と認識されてしまうわけです。
※同じ座標に置かれた同じサイズ(パレットの数値上)のフレームでも作成手順によって“右ページに存在する"と認識されたり“左ページに存在する"と認識されたりすることがありました(ガイドへの吸着などの作業手順が怪しい印象)。ここを正しく処理するのは面倒ですし、目で見て確認しづらいので危険だと思いました。
こちらが今回のスクリプトで処理した結果です。左右ページが正しく認識されています。

今回考えた解決方法は単純です。たとえば縦組みで用語(正しくは用語の先頭文字の左上角)が左ページに存在する(これはhorizontalOffsetで取得)のに得られたページが偶数だった場合、「見開きの左ページに存在するんだから奇数でなければおかしい」と考え、得られたページの値に1を加える……などといった処理をおこないます。「縦組み/横組み」×「偶数/奇数」の計4パターンしか存在しないのでさほど負担はありませんでした。

なお、矛盾が生じていない用語については無視されますので旧スクリプトと同様に同じように抽出されます。
あれこれ試しながら組み立てたスクリプトです。何らかのミスが潜んでいる可能性もありますので運用は慎重に、十分テストした上でご使用ください。
※2024.8.1/サンプルデータを更新しました。