InDesign の無限オーバーライド

InDesign の無限オーバーライド

先日、こんなツイートを見た。

そういえば昔、似たような現象に遭遇した。

↓ オーバーライドしている(コピペじゃないよ!


結論(たぶん)

  • InDesignがプリセットで用意してくれているA4の幅は、210mmより すこーーーーしだけ小さい
  • 大抵は問題ないけど「ページをまたぐ」「ページサイズと同じフレーム」関連の作業時は注意
  • マスターとかオーバーライドで変な挙動になるのは分からん

主な不具合と、それが発生しやすい不具合の2つ

2つの不具合(仕様?)が発生しているので、分かりにくかった気がする。

  1. マスターやオーバーライド関連で、アイテムが変な挙動をする
  2. ドキュメントサイズのフレームを作成しノドピッタリに配置すると1の挙動が発生しやすい

1. マスターやオーバーライド関連で、アイテムが変な挙動をする

主要因だけど、こっちは分かりません。

マスターやオーバーライド関連でアイテムがおかしな挙動をするのは色々あるみたい。

dtp-bbs.com


2. ドキュメントサイズのフレームを作成しノドピッタリに配置すると1の挙動が発生しやすい

こちらは何となく分かる気がする。

ツイ主の ぬまっこ さんが ほぼ答えを言っています。

「ドキュメントより0.1mm小さいフレームだと1回で消える。ページをまたいだのオブジェクトは残り続ける事あるけど、ドキュサイズでも残り続けるの…?」

オブジェクトではなく、ドキュメントサイズの方に要因があるのだと思います。


なぜか

Sugarさんが検証しています。

  • A4のドキュメント
  • 座標(0,0)で、幅210mmのフレーム

上記だと フレームはページをまたぎません。でも またいだ時と同じような挙動をする。

ということは、どっちかが210mm じゃないんです。


たぶん:A4のドキュメント ← ★ こいつが210mm ピッタリじゃない

スクリプトなど使ってドキュメントサイズを取得すると「209.999999999936 」みたいな数値が取得できます。

実際はこんな感じなんだと思います。

  • A4のドキュメント(幅は209.999999999936 mm)
  • 座標(0,0)で、幅210mmのフレーム

ミクロンより更に小さい値になると思うけど、またいでいます。

参考:

p-makes-p.hatenablog.com


InDesignが作ってくれる A4のドキュメント 幅はピッタリ210ではないかも

InDesign の準備しているプリセットのA4で作成すると、A4(209.999…)になってしまいます。

とか

とか。

※ 元々 ミリ/ポイント変換等で本当にピッタリにはならないけど、今回のは「またぐ/またがない」に影響してしまってる感じ。

※ 昔から(Csの時代から?)ずっと変わってない気がする。

※ 「bigsur/InDesign2022 環境の方に試してもらったら直っていたのですが…」ってのは、新規ドキュメントの作り方が違ったんだと予想してる。


回避するには、ユーザーがドキュメントサイズを直接入力する

ただ、プリセットのA4(209.999…)で作成した後、手入力で 210mm と入力しても駄目かも。

InDesignに「サイズ変更してないよね?」って判定されちゃうのか、209.999...のままになる気がする。

(この辺はあんまり試してない)


結論(たぶん)

  • InDesignがプリセットで用意してくれているA4の幅は、210mmより すこーーーーしだけ小さい
  • 大抵は問題ないけど「ページをまたぐ」「ページサイズと同じフレーム」関連の作業時は注意
  • マスターとかオーバーライドで変な挙動になるのは分からん

予想だけど・・・

オーバーライドの際、所属ページが左右でおかしくなっている…ようなイメージ

(数年前なので忘れた)


おまけ:

チェックしたスクリプト

main();

function main()
{
    var openedDocCount = app.documents.length;
    if(openedDocCount < 1)
    {
        alert("ドキュメントを開いてから実行してください", "終了");
        return;
    }

    try
    {
        // 開かれているかチェック
        var activeDoc = app.activeDocument;

        // 処理本体
        var msg = this.CheckActiveSpread(activeDoc);
        alert(msg);
    }
    catch(e)
    {
        alert(" エラーっぽい \r\n" + e);
    }
}
function CheckActiveSpread(activeDoc)
{
    try
    {
        var results = [];

        // アクティブなスプレッドが対象
        var targetSpread = app.activeWindow.activeSpread;

        // Page情報(複数)
        var resultTxt = this.MeasurePageSize(targetSpread, activeDoc);
        results.push(resultTxt);

        // Page情報からタイトル作成
        var pageTxt = "Pages: ";
        for(var i = 0; i < targetSpread.pages.length; i++)
        {
            pageTxt = pageTxt + targetSpread.pages[i].name + ","
        }

        // タイトル
        results.unshift(pageTxt);

        // --- --- ---
        return results.join("\r\n");
    }
    catch(e)
    {
        return (" エラーっぽい \r\n" + e);
    }
}

function MeasurePageSize(mSpread)
{
    try
    {
        var ASOBI = Math.pow(0.1, 12);

        var msg = "";

        var pgNum = mSpread.pages.length;
        for(var i = 0; i < pgNum; i++)
        {
            var pg = mSpread.pages[i];

            var W = pg.bounds[3] - pg.bounds[1];
            var H = pg.bounds[2] - pg.bounds[0];

            var msgPage =
                " Page: [" + pg.name + "]\r\n" +
                " - Page:W [" + W + "]\r\n" +
                " - Page:H [" + H + "]\r\n\r\n";

            // A4判定
            // if(210 - W > ASOBI || 297 - H > ASOBI)
            // {
            //     msgPage = "A4 か???\r\n" + msgPage;
            // }
            // else
            // {
            //     msgPage = "A4 だ!\r\n" + msgPage;
            // }

            msg = msg + msgPage;
        }

        return msg;
    }
    catch(e)
    {
        //alert(" エラーっぽい \r\n" + e);
    }

}

まる