2009年10月5日月曜日

スクリプトでInDesignの文字組みアキ量設定を作る。

まず、自分の文字組みアキ量設定を作ります。
※サンプルに、n-yujiさんの
僕が勝手に考える理想の(というか妥当な)InDesign文字組版。 - 遠近法ノート
の設定をお借りしました。

文字組みを設定した .indd を開いた状態で、ExtendScript Toolkit から、以下のスクリプトを実行。
var myMojikumi=app.activeDocument.mojikumiTables.itemByName("Y汎用括弧半角v2.0/0808");
$.writeln(myMojikumi.basedOnMojikumiSet);
$.writeln(myMojikumi.overrideMojikumiAkiList
.toSource().replace(/\], \[/g,"],\n ["));

すると、こんな感じでコンソールに表示されます。

わー。
これをスクリプトに組み込みます。
var actDoc = app.activeDocument;
var myMojikumi=actDoc.mojikumiTables.add("Y汎用括弧半角v2.0/0808");
//MojikumiTableDefaults.LINE_END_ALL_ONE_HALF_EM_ENUM
myMojikumi.basedOnMojikumiSet = 1246572593;
//コンソールに表示された配列をそのままコピペ
myMojikumi.overrideMojikumiAkiList=[
[18, 22, false, 0.05, 0.05, 0.05, 0, false],
[18, 23, false, 0.05, 0.05, 0.05, 0, false],
[18, 22, true, 0.05, 0.05, 0.05, 0, false],
[12, 12, false, -0.05, 0, 0.5, 5, false],
[33, 12, false, -0.05, 0, 0.5, 5, false],
[11, 12, false, -0.05, 0, 0.5, 5, false],
[3, 12, false, -0.05, 0, 0.5, 5, false],
[9, 12, false, -0.05, 0, 0.5, 5, false],
[8, 12, false, -0.05, 0, 0.5, 5, false],
[4, 12, false, -0.05, 0, 0, 5, false],
[7, 12, false, -0.05, 0, 0.5, 5, false],
[12, 33, false, -0.05, 0, 0.5, 5, false],

//...中略...

[24, 4, false, 0, 0, 0.5, 0, false],
[25, 18, false, 0, 0, 0.25, 6, false],
[18, 18, false, 0, 0, 0.25, 6, false],
[18, 25, false, 0, 0, 0.25, 6, false],
[25, 25, false, 0, 0, 0.25, 6, false]];
空のドキュメントを開いた状態で実行すれば、新しく文字組みアキ量設定ができます。

2010-02-22追記:
めんどくさいので、読み出し・組み込み部分をまとめて、スクリプトを生成するようにしました。
文字組みを読み取りたい部分のテキストを選択して、スクリプトを実行して下さい。
ファイル保存ダイアログが開き、スクリプトを保存します。
(function(){
if(app.activeDocument.selection.length==0) return;
 var obj=app.activeDocument.selection[0];
var check={
"Text":true,
"TextColumn":true,
"Paragraph":true,
"InsertionPoint":true,
"Character":true,
"TextStyleRange":true
}
if(!check[obj.constructor.name]) return;

var defFile = new File("~/Desktop/mojikumi_"+obj.mojikumi.name+".jsx");
defFile = defFile.saveDlg('スクリプトの保存先を選択して下さい。');
if(!defFile) return;
var mojikumiAryTxt = obj.mojikumi.overrideMojikumiAkiList.toSource();
mojikumiAryTxt = mojikumiAryTxt.replace(/\], \[/g,"],\n [");

var script='var actDoc = app.activeDocument;\n'
+'var myMojikumi=actDoc.mojikumiTables.add("'+ obj.mojikumi.name +'");\n'
+'myMojikumi.basedOnMojikumiSet = '+ obj.mojikumi.basedOnMojikumiSet +';\n'
+'myMojikumi.overrideMojikumiAkiList =\n'+ mojikumiAryTxt +';';

if(defFile.open('w')){
defFile.writeln(script);
defFile.close();
alert("スクリプトを書き出しました。");
}
})();

7 件のコメント:

浩士 さんのコメント...

当方、InDesign cs2 で試しましたが
4行目で構文エラーがでるのですが
どのようにしたら良いですか?

kanemu1117nc さんのコメント...

どのようなエラーが出てますか?
たぶんCS2以前だと動かないと思います。

浩士 さんのコメント...

kanemu1117nc さん、ありがとうございます。
”構文エラー”としか出てきてません。
CS2はだめですか....

kanemu1117nc さんのコメント...

いま時間ないので、月曜日までには検証してみます。

浩士 さんのコメント...

kanemu1117nc さん.

無理を言いまして申し訳ございませんm(_ _)m

kanemu1117nc さんのコメント...

わかりました、抜き出しの方のスクリプトの、4行目の前の改行を削除して3行にして下さい。
InDesignCS2だと、dotつなぎ前の改行はエラーになるみたいです。
普通に動きましたよ。

浩士 さんのコメント...

kanemu1117nc さん

バタバタして遅くなりまた。
完ぺきです! ありがとうございます!
クオークからの以降なので文字詰めが納得できずに
悩んでおりました。スクリプトをありがたく
使わして頂きます。有り難うございます。m(__)m