自動で長体を掛ける

InDesignで自動で長体を掛けたい場合があります。例えばDMなどの宛名。バリアブル印刷などで宛名を印字する際、用意したスペースよりも長い住所があると、いちいち長体を掛けるのが面倒。誰かスクリプト書いてくれないかなあ。

そんなとき、スクリプトよりも簡単なのが「ジャスティフィケーション」の「グリフの拡大/縮小」を使うこと。ここの最小値に「50%」とか入れておくと、その値まで勝手に長体がかかってくれます。

ただし、そこだけいじっても変化はありません。これが有効になるのは次の条件が必要です。

  • 欧文段落コンポーザまたは多言語対応段落コンポーザを使用すること
  • 両端揃えにすること

そうすることで、文字量に応じて勝手に長体がかかってくれるわけです。めでたし、めでたし。

え? あふれていない時は左揃えにしたい? あー、そんな時は、行末にフラッシュスペースを追加しておいてくださいな(あふれる/あふれないにかかわらず。JavaScriptで入れたい場合は「\u2001」ですよ。

『自動で長体を掛ける』へのコメント

  1. 名前:よう 投稿日:2018/08/27(月) 08:50:29 ID:3bb494f9e 返信

    失礼します。すみません、左揃えでフラッシュスペースでは文字がパラパラになってしまいましたがほかに方法はありますか?

    • 名前:お~まち 投稿日:2018/08/27(月) 08:59:49 ID:a6e3efbcd 返信

      段落の揃えは「両端揃え」ですよ。その上で、文字を左側に寄せたいときは行末にフラッシュスペースです。

  2. 名前:ことぶき 投稿日:2019/07/30(火) 21:36:01 ID:61156cfe2 返信

    昔書いたコードの抜粋です。XMLルールの中に長体をかけるコードが入っているので少し余分なものも混じっていますが、ご参考まで。

    var THRESHOLD = 60;

    function applyAutoHorizontalScaleToCell()
    {
    this.name = “ApplyAutoHorizontalScaleToCell”;
    this.xpath = “//td”;
    this.apply = function(elem, rule)
    {
    var cell = elem.cells[0];
    if (cell.lines.length == 1)
    return false;

    var para = cell.paragraphs[0];
    var orig = para.horizontalScale;

    // スケールの変更回数を減らすため,二分木的に値を増減。
    do {
    para.horizontalScale -= 10;
    cell.recompose();
    } while (cell.lines.length > 1);

    // スケールが閾値を下回っている場合は長体の適用を中止する。
    if (para.horizontalScale 1) {
    do {
    para.horizontalScale–;
    cell.recompose();
    } while (cell.lines.length > 1);
    } else {
    do {
    para.horizontalScale++;
    cell.recompose();
    } while (cell.lines.length == 1);
    para.horizontalScale–;
    }
    }
    }