はいこんばんは。
相互参照の作り方がけっこうめんどくさかったので自分用にメモ。ついでに実験。
10.9 + CS6でしか動かしてません。あと、テキストアンカーへの参照は別の作り方するはずです。調べてない。
必要なものは
- 参照先ドキュメント (A)
- 参照先マーカー挿入箇所(InsertionPoint) (A-1)
- 段落参照先オブジェクト(ParagraphDestination) (A-2)
- 参照元(ソース)ドキュメント (B)
- 相互参照形式(CrossReferenceFormat) (B-1)
- 相互参照挿入箇所(Text系オブジェクト) (B-2)
- 相互参照ソースオブジェクト(CrossReferenceSource) (B-3)
var destinationDoc = app.documents.item("destination.indd"); // Avar sourceDoc = app.documents.item("source.indd"); // Bvar destinationPoint = destinationDoc.(DOMツリー).insertionPoints[0]; // A-1var destination = destinationDoc.paragraphDestinations.add(destinationPoint); // A-2var format = sourceDoc.crossReferenceFormats.item("formatName"); // B-1var sourseText = sourceDoc.(DOMツリー).texts[0]; // B-2var 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は使い回せる}
使いどころは限定されると思う。
実際のところ、私が使ったのは逆パターン(選択したテキストから参照先の見出しを探す)のほうだったりします。
そもそも相互参照じたい使ってる人少なそうだけどねー。