Hatena::ブログ(Diary)

chalcedonyの外部記憶装置・出張版 RSSフィード

2014-08-06

InDesignの段落相互参照をJavaScriptで作る

はいこんばんは。

相互参照の作り方がけっこうめんどくさかったので自分用にメモ。ついでに実験。

10.9 + CS6でしか動かしてません。あと、テキストアンカーへの参照は別の作り方するはずです。調べてない。


必要なものは

  • 参照先ドキュメント (A)
    • 参照先マーカー挿入箇所(InsertionPoint) (A-1)
    • 段落参照先オブジェクト(ParagraphDestination) (A-2)

var destinationDoc = app.documents.item("destination.indd"); // A
var sourceDoc = app.documents.item("source.indd");           // B

var destinationPoint = destinationDoc.(DOMツリー).insertionPoints[0];         // A-1
var destination = destinationDoc.paragraphDestinations.add(destinationPoint); // A-2
var format = sourceDoc.crossReferenceFormats.item("formatName");              // B-1
var sourseText = sourceDoc.(DOMツリー).texts[0];                              // B-2
var source = sourceDoc.crossReferenceSources.add(sourseText, format);         // B-3

// 相互参照挿入
sourceDoc.hyperlinks.add(source, destination);

で、たとえばこんなのを作れるねっていう思いつき。変数名は上のと一緒にしてます。

// 選択中のテキストと同じ文言をドキュメント内から検索し、まとめて段落相互参照を設定します。
// 辞書系ドキュメントの見出し語を選択して実行→本文中の同じ文言が全部相互参照になるとか。
// 単なるテキスト検索なので精度を上げるには工夫が必要。あくまで例です。

var destinationDoc = app.activeDocument;
var sourceDoc = app.documents.item("source.indd"); // 相互参照を挿入したいほうのドキュメント

var destinationPoint = app.selection[0].insertionPoints[0];
var destination = destinationDoc.paragraphDestinations.add(destinationPoint);
var format = sourceDoc.crossReferenceFormats.item("見出し参照"); // 相互参照形式は事前に作っておく

// テキスト検索
app.findTextPreferences = NothingEnum.nothing;
app.changeTextPreferences = NothingEnum.nothing;
app.findTextPreferences.findWhat = app.selection[0].contents;
app.findTextPreferences.appliedParagraphStyle = "本文"; // 念のため段落スタイル指定

var foundTexts = sourceDoc.findText(); // 検索実行
for (var i = 0, len = foundTexts.length; i < len; i++) {
  var sourseText = foundTexts[i];
  var source = sourceDoc.crossReferenceSources.add(sourseText, format);

  sourceDoc.hyperlinks.add(source, destination); // destinationは使い回せる
}

使いどころは限定されると思う。


実際のところ、私が使ったのは逆パターン(選択したテキストから参照先の見出しを探す)のほうだったりします。

そもそも相互参照じたい使ってる人少なそうだけどねー。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/chalcedony_htn/20140806/1407315887
リンク元