2016年10月28日

InDesignもワンライナーで行こう

活版時代の縦組みでは、本文中の括弧内などに本文より小さい活字が入る場合、右寄セ組(InDesignの用語だと「文字揃え=仮想ボディの右」)としていた。
活版ならではの物理的制限からきた習慣なのだろうけど、それをInDesignで再現しようとすると、縦中横など90度回転させたものの文字揃えが中央のままになってしまう。



これを他の文字同様、仮想ボディの右で揃えるには、文字パレットのオプションにある縦中横設定で「左右位置」を補正すればよい。本文が9ポ、括弧書きが8ポなら左右位置を0.5ポにすればよい。





でも、何箇所もあるから、縦中横設定パネルをいちいち出して、いちいち補正値を入力するのは大変。
修正箇所は検索パネルで探して(すると修正箇所が選択状態になる)、そこに、たった1行のこのスクリプトを当てればいいのだ。
app.activeDocument.selection[0].tatechuyokoYOffset = 0.5;

(文字の並び方向がX軸なので、縦組みの場合、左右方向はY軸になる。ややこしい)

修正箇所の検索までスクリプトで行おうとすると、例外の扱いとかややこしいけど、検索パネルと組み合わせれば、とても簡単。スクリプトにショートカットを設定しておけば、さらに手数は少なくて済むのだ。どう?

2016年10月20日

選択部分の漢数字を単純に洋数字に書き換える

InDesignで選択部分の漢数字を単純に洋数字に書き換えるスクリプト。

var Num = app.activeDocument.selection[0].contents;
var Num = Num.replace(/一/g,"1");
var Num = Num.replace(/二/g,"2");
var Num = Num.replace(/三/g,"3");
var Num = Num.replace(/四/g,"4");
var Num = Num.replace(/五/g,"5");
var Num = Num.replace(/六/g,"6");
var Num = Num.replace(/七/g,"7");
var Num = Num.replace(/八/g,"8");
var Num = Num.replace(/九/g,"9");
var Num = Num.replace(/〇/g,"0");
app.activeDocument.selection[0].contents = Num;

小道具を組み合わせて仕事をするというunixの流儀にしたがって、InDesign本体の検索・置換といっしょに使う。検索・置換をすると対象の文字列が選択されたままになっているので、そこにこのスクリプトをあてるのだ。

もっとも、コードは、使えるからええねん的。これもunix流儀かもしれないし、バッドノウハウかもしれない。

2016年10月9日

ルビふり単純スクリプト

InDesignでのルビふりをちょっと楽にしようと単純なスクリプトを書いてみた。

var mySel = app.activeDocument.selection;
var myStr = mySel[0].contents.replace(/)/, ""); 
var myWord = mySel[0].characters;
var strAry = myStr.split ("("); 
var oyamozi = strAry[0];
var rubi = strAry[1];
myWord.itemByRange(0,oyamozi.length-1).rubyString = rubi;
myWord.itemByRange(0,oyamozi.length-1).rubyFlag = true;
myWord.itemByRange(oyamozi.length,-1).contents= "";

親文字列の後ろに半角パーレンで囲んだルビ文字列を書く。
モノルビの区切りは空白(全角でも半角でもよい)。
例: 単純(たん じゆん)

これを選択して、上のスクリプトを実行する。
スクリプトにキーボードショートカットを割り当てておくと楽。
グループルビにしたいときは後から手作業で修正。

ちょっとコードを説明してみると…
  • 2行目:ルビを囲っていた閉じパーレンは不要なので消去する
  • 4〜6行目:選択している文字列を開きパーレンで前後に分割する。前が親文字列(oyamozi)、後ろがルビ文字列(rubi)となる。
  • 7〜8行目:選択している文字列のうち親文字数分(最初の文字が0番目なので、0〜oyamozi.length-1となる)にルビをつける。
  • 9行目:開きパーレン以降(-1は末尾を意味する)は不要になったので消去する。

(2020-03-02追記)
2行目の置換のところを、
replace(/[((]([^(())]+)[))]/, "($1"); 
とするとパーレンは半角全角を問わなくなって便利かも。