数字と単位を分割して縦中横を設定する

InDesignで連続した数字と単位(例えば23kg)を別々に縦中横の設定をしても、一つの文字列として扱われてしまいます。(下の図)


(左)InDesignでの実行結果         (右)このプログラムで実行した結果

CS、CS2では間に幅のない(狭い)記号を入れて、その文字の縦中横を解除されていると思いますが、非常に手間なので、少しでも簡略化できるかなと思い、作成しました。

2006.12.11 11:25 区切りが複数の場合でも対応できるようにしました(例:25m38cmなど)。


動作環境・注意

InDesign CS~CS4で動作します。

ただしCS3以降では「結合なし」という特殊文字が使えるようになりましたので、このスクリプトを使用する意味はありません。

数字と単位記号の間に「先頭文字スタイルの終了文字」を入れています(この文字は幅0です)。従って、先頭文字スタイルを設定し、区切り文字にこの文字を使用している場合は、組版結果がおかしくなりますので、注意が必要です。その場合はスクリプト中の区切り文字を変更してください。


ダウンロード

ファイルはzip形式で圧縮してあります。ダウンロードはこちらからお願いします。


使用方法

ダウンロードした「idjssepTCY.zip」ファイルを解凍すると「sepTCY.js」というファイルが作られます。このファイルをScriptフォルダに入れてください。

縦中横を設定したい文字列を選択した状態でスクリプトを実行してください。


ソース

if (app.selection.length == 1){
    if(app.selection[0].constructor.name == "Word" || 
       app.selection[0].constructor.name == "Text" ){
        txt = app.selection[0];
        if(txt.length > 2){
            do_script(txt);
        } else {
            alert("3文字以上の欧文単語を選択してください");
        }
    } else {
        alert("3文字以上の欧文単語を選択してください");
    }
} else {
    alert("3文字以上の欧文単語を選択してください");
}
function do_script(txt){
    const sepchr = "\x03" /* =1396855379=idEndNestedStyle=先頭文字スタイルの終了文字*/
    var stindex = txt.index;
    var str1 = txt.contents;
    str1 = str1.replace(/0/g, sepchr+"0"+sepchr).replace(/1/g, sepchr+"1"+sepchr);
    str1 = str1.replace(/2/g, sepchr+"2"+sepchr).replace(/3/g, sepchr+"3"+sepchr);
    str1 = str1.replace(/4/g, sepchr+"4"+sepchr).replace(/5/g, sepchr+"5"+sepchr);
    str1 = str1.replace(/6/g, sepchr+"6"+sepchr).replace(/7/g, sepchr+"7"+sepchr);
    str1 = str1.replace(/8/g, sepchr+"8"+sepchr).replace(/9/g, sepchr+"9"+sepchr);
    str1 = str1.replace(/\./g, sepchr+"."+sepchr);
    str1 = str1.split(sepchr+sepchr).join("");
    str1 = str1.split(sepchr+"."+sepchr).join("\.");
    if (str1.charAt(0) == sepchr) str1 = str1.substr(1);
    if (str1.charAt(str1.length-1) == sepchr) str1 = str1.substr(0, str1.length-1);
    txt.contents = str1;
    var txn = txt.parentStory.characters.itemByRange(stindex, str1.length+stindex-1);
    txn.tatechuyoko = true;
    for (i=0; i < txn.length; i++){
        if (txn.characters[i].contents == 1396855379){
            txn.characters[i].tatechuyoko = false;
        }
    }
}

[HOME]