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

【InDesign】【スクリプト】0.13mm(小数点)罫線を探せない ※解決済み

日本のDTP業界では罫線として引く最細の実線、いわゆる「オモテケイ」は0.1~0.13mm辺りとされています。つまり小数点第二位ありです。

まず

alert (app.selection[0].strokeWeight);

呼び出しでは、どの線太も問題なく正しいstrokeWeight(環境設定単位:mm)を返します。

InDesign上の0.12mm罫を選択し、実行

しかし、同じ罫線でこの書き方の場合

if (app.selection[0].strokeWeight == 0.12) //選択オブジェクトの線太が0.12mmであれば
{ alert ("true"); } //0.12mmだよ
else
{ alert ("else"); } //そうじゃない

elseを返します。なんでやねん。

因みに 0.1mm=else 0.12mm=else 0.13mm=true 0.14mm=true など、挙動がまちまちです。

この疑問を、去る2021.2.20のDTPerのスクリプトもくもく会#21に持ち込んだところ、主催Uske_Sさん及びこうちゃん

JavaScript浮動小数点(float)いわゆる「mm→point→mmの丸め問題」であろうと。

そうだ、すっかり忘れていましたよ…mmにはそういう問題があったのだ。暫く遭遇しないとうっかりしてしまいます。というわけで、状況や用途に応じ解決策を3点提示して戴きました。

ExtendScript:等価演算子で小数がtrueにならない

このうち自分の業務に適していたのは、グローバルメソッドparseInt()(一旦100を掛けて整数にする)であろうと思われ、以下の様に作成しました。

//DESCRIPTION:選択中から0.1mmベタk100直線のみ削除(らーで閣下)

app.doScript (main, ScriptLanguage.JAVASCRIPT, null, UndoModes.FAST_ENTIRE_SCRIPT);

function main()
{
    var myDoc = app.activeDocument;
    var mySel = myDoc.selection;
    if(mySel == null)
    { alert("何も選択されていません"); exit(); }
    else
    {
        for(i=mySel.length-1; i>=0; i--)
        if((mySel[i].constructor.name === "GraphicLine") && (mySel[i].strokeColor.name === "Black") && (mySel[i].strokeType.name === "ベタ"))
        // fillColor.nameは取り敢えず無視
         {
            if(parseInt(mySel[i].strokeWeight*100, 10) === 10) // 0.10mmなら10
            { mySel[i].remove(); }
            else
            { continue; }
            }
        }

}

TextFrameやRectangle、Imageなど同時に選択していても、指定の罫線のみ削除します。


最後に、せっかくご指南頂いてるのに発表遅くて済みません(涙)運用はずっと前からやってます