Indesignのテキストフレームの行間をならす良い方法はあるでしょうか。
例えば、
横組みでテキスト配置を均等割にした複数のテキストフレームが縦に3つ有るとします。
各フレームには任意のテキストが入力されており行数はそれぞれ違います。
簡単に3フレームの行間が同じになるようにフレーム高を調整する方法有るでしょうか。
テキスト行間をスタイルで制御し、自動サイズ調整でボックス高をフィットさせ整列で各フレームを整える方法は有ると思いますが質問の調整方法に何らかの良い手立てがあれば非常に助かります。
宜しくお願い致します。
[19251] まさお (2017/06/12 Mon 13:28)
ビミョーにやりたいことがわからないので外してるかもですが,
テキストフレーム設定の自動サイズ調整ではいけませんか?
[19253] ねこねこ555 (2017/06/12 Mon 18:02)
言葉足らずだったようで申し訳ありません。
3つのテキストフレームの行間を合わせる場合、通常なら行間を基準に自動サイズ調整でフレームの高さを調整し最後に整列させると思います。
今回は色々と訳あってフレーム高を基準にしたいと言うことなんです。
ただ色々考えてみると何だか無理な気がしてきました。
[19256] まさお (2017/06/13 Tue 10:39)
これはスクリプトしかねんじゃね、と思ったものの、
要件があまりにも特殊なのでタダで書くのはちょっとなあ、
と思ったんですが、試しがてら書いてみました(かっこいい)
バージョンの記載がないため当方での動作確認はCS6のみでご容赦ください。
基準にしたいテキストフレームを選択して実行してください。
--------------------
var doc = app.activeDocument;
var vp = doc.viewPreferences;
var pt = MeasurementUnits.POINTS;
//元の単位系を記録
var muh = vp.horizontalMeasurementUnits;
var muv = vp.verticalMeasurementUnits;
var mut = vp.typographicMeasurementUnits;
//ぜんぶポイントに
doc.viewPreferences.horizontalMeasurementUnits = pt;
doc.viewPreferences.verticalMeasurementUnits = pt;
doc.viewPreferences.typographicMeasurementUnits = pt;
//ベースラインを引き算して行送り値に設定
var sel = app.selection[0].parentStory;
var baseline0 = sel.lines[0].baseline;
var baseline1 = sel.lines[1].baseline;
sel.leading = (baseline1 - baseline0);
//単位系をもどす
vp.horizontalMeasurementUnits = muh;
vp.verticalMeasurementUnits = muv;
vp.typographicMeasurementUnits = mut;
exit();
--------------------
テキストフレーム内の文字サイズが均一であることが暗黙の条件となりますが、1行目と2行目のベースラインの差を行送りに設定してスクリプト終了となります。
その行送り値を他のテキストフレームの行送りにペーストすればラク、かなあ、と。
※まれに宣伝を兼ねて気まぐれでスクリプト無償提供しておりますが、皆様お仕事お待ちしております
[19258] (z-) (2017/06/13 Tue 12:59)
あっ補足
今回、異なる単位間での計算は割愛して、一時的に全てポイントに変換して処理後に戻してますので、元に戻そうとなると「取り消し」7回かかります。どうもすみません。
[19259] (z-) (2017/06/13 Tue 13:01)
質問主さまも泣いて喜んでおられるようですので(わかります、わかりますよ)
取り消し1回だけで普通に元通りになるよう改良しました。
こちらを使ってください
---------------------
//ベースラインを引き算して行送り値に設定
var sel = app.selection[0].parentStory.lines;
var mu = app.scriptPreferences.measurementUnit;
app.scriptPreferences.measurementUnit = MeasurementUnits.MILLIMETERS;
sel.leading = (sel[1].baseline - sel[0].baseline);
app.scriptPreferences.measurementUnit = mu;
exit();
[19263] (z-) (2017/06/16 Fri 12:55)