主にInDesignによる新聞組版Tips中心です。Mac使いですが業務はWin多め。Win DTP Tipsを増やしたい

【InDesign】EDICOLOR機能を再現(3)【オブジェクトを均等アキに分布】

今回は、自作ではなくご紹介です。



こういうオブジェクト群があるとき、

f:id:chocomarine:20200529165125j:plain

我々が望む等間隔の整列(分布)とは

f:id:chocomarine:20200529165157j:plain

大体こうだろうと思うんですが、整列パネルの「分布」を使うと

f:id:chocomarine:20200529165236j:plain
整列(パネル)→(選択範囲に揃える)→ 分布(左)

f:id:chocomarine:20200604152205j:plain

結果はこうなります。違う、そうじゃない・・

そりゃま算数で数値を出したりひと手間加えれば出来ますが、速攻でやって欲しいわけです。



EDICOLORでは出来ます

f:id:chocomarine:20200529171358j:plain
公式ユーザーズガイド(v10)
も、もういいよね?出しちゃっても

で、これをInDesignで実現するには、スクリプトという事になります

dtptokadensyo.blog.fc2.com DTPとか電書(ゆう様)

この結果を得たい時は、整列パネルが必ずこうである必要があります

f:id:chocomarine:20200529172641j:plain
(チェック)選択範囲に揃える 間隔を指定=OFF

スクリプトを実行

属性

結果 ↓

f:id:chocomarine:20200529165157j:plain
だーーーーーーん
ただ配布のままだとctrl + Z一回で「実行前」までに戻れないので、下記にdoScript追加版を記します。


doScript(ctrl + Zで処理前まで戻れる)版(水平)

//DESCRIPTION:水平(左右)方向:均等アキ整列(CS6以降)
(function()
{
    app.doScript (Main, ScriptLanguage.JAVASCRIPT, null, UndoModes.FAST_ENTIRE_SCRIPT);
    function Main()
    {
        var 
        mD = app.activeDocument,
        mS = app.selection,
        selKey = mD.selectionKeyObject;
        if (dType)
        {
            var dType = mS[0].constructor.name;
            }
        if(mS == 0 || dType =="Text"|| dType =="Paragraph"|| dType =="TextColumn"|| dType =="Character")
        { //選択オブジェクトが左記以外ならなにもしない
            } else {  //何か選択していて、
                if (selKey == null)
                { //キーオブジェクトが選択されていなければ選択範囲内で、
                    mD.distribute (
                    mS,
                    DistributeOptions.HORIZONTAL_SPACE,  //水平方向に等間隔に分布
                    // DistributeOptions.VERTICAL_SPACE,  //垂直方向に等間隔に分布
                    AlignDistributeBounds.ITEM_BOUNDS,);
                    } else {  //キーオブジェクトを起点に、
                        var dis = prompt("左右何ミリ空きにしますか?","0","間隔を指定して、水平方向に等間隔に分布");
                        if(dis != null)
                        {
                            mD.distribute (
                            mS,
                            DistributeOptions.HORIZONTAL_SPACE,  //水平方向に等間隔に分布
                            // DistributeOptions.VERTICAL_SPACE,  //垂直方向に等間隔に分布
                            AlignDistributeBounds.KEY_OBJECT,
                            true,
                            dis+"mm",
                            mD.selectionKeyObject ,);
                            }else{
                                }
                            }}
                    }
                })();

doScript(ctrl + Zで処理前まで戻れる)版(垂直)

//DESCRIPTION:垂直(天地)方向:均等アキ整列(CS6以降)
(function()
{
    app.doScript (Main, ScriptLanguage.JAVASCRIPT, null, UndoModes.FAST_ENTIRE_SCRIPT);
        function Main()
        {
            var
            mD = app.activeDocument,
            mS = app.selection,
            selKey = mD.selectionKeyObject;

            if (dType)
            {
                var dType = mS[0].constructor.name;
                }
            if (mS == 0 || dType =="Text"|| dType =="Paragraph"|| dType =="TextColumn"|| dType =="Character"){ //選択オブジェクトが左記以外ならなにもしない
                } else {  //何か選択していて、
                    if (selKey == null)
                    { //キーオブジェクトが選択されていなければ選択範囲内で、
                        mD.distribute (
                        mS,
                        //DistributeOptions.HORIZONTAL_SPACE,  //水平方向に等間隔に分布
                        DistributeOptions.VERTICAL_SPACE,  //垂直方向に等間隔に分布
                        AlignDistributeBounds.ITEM_BOUNDS,);
                        } else {  //キーオブジェクトを起点に、
                            var dis = prompt("上下何ミリ空きにしますか?","0","間隔を指定して、垂直方向に等間隔に分布");
                            if (dis != null)
                            {
                                mD.distribute (
                                mS,
                                //DistributeOptions.HORIZONTAL_SPACE,  //水平方向に等間隔に分布
                                DistributeOptions.VERTICAL_SPACE,  //垂直方向に等間隔に分布
                                AlignDistributeBounds.KEY_OBJECT,
                                true,
                                dis+"mm",
                                mD.selectionKeyObject ,);
                                }else{
                                    }
                                }}
                        }
                    })();




因みに、「等間隔に分布」の使い方だけさらっと。

属性

f:id:chocomarine:20200529175337j:plain
「選択範囲に揃える」チェック時