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は末尾を意味する)は不要になったので消去する。

2016年9月16日

ひとつのページに2系統のノンブルをつける

雑誌などで、その号単独のノンブルだけでなく、通巻ノンブルを併記する場合がある。

でも、InDesignの「ページ番号とセクションの設定」では、ノンブルは1系統しかつけられない。そこで、javascriptを書いてみた。

  1. 2行目の 変数prev_issueに前の号の最後のノンブルを代入する。(下の例は前の号が96ページで終わっている場合)
  2. いま編集している号の各ページの通巻ノンブルを置きたいところ(マスターページにではなく、各ページの上)に「#PTV」と書いておく。
  3. スクリプトを実行する。
var prev_issue = 96;
app.findTextPreferences = NothingEnum.nothing;
app.changeTextPreferences = NothingEnum.nothing;
for (var j = 0; j < app.activeDocument.pages.length; j++){
    var pageObj = app.activeDocument.pages[j];
    for (var i = 0; i < pageObj.textFrames.length; i++){
        var page_thrghout_vol = String(parseInt(pageObj.name) + prev_issue);
        app.changeTextPreferences.changeTo = page_thrghout_vol;
        app.findTextPreferences.findWhat = "#PTV";
        if (pageObj.textFrames[i].parentStory.contents.length>0){
            pageObj.textFrames[i].parentStory.changeText();
            }
        }
    } 

  • 紺色文字のところは、ページを順繰りに処理し、各ページの上のテキストフレームを順繰りに選び、その内のストーリーを処理していくループ(定石らしい)。
  • 各ページのノンブルは、pageObj.nameだけど、これは文字列なので、前の号の最終ノンブルと足し算をするために、いったんparseInt( )関数で数値化している。そして、足し算のあと、また文字列に戻すのにString( )関数を使っている。
  • 各ページのノンブル(pageObj.name)に前号の最終ノンブル(prev_issue)を足したものが通巻ノンブル(page_thrghout_vol)となる。それをページ上の文字列「#PTV」と置換しているだけ。
  • 普段、javascriptを書いていないので、変数名など変だと思う。

2016年1月31日

中古のMacを買うとき:バッテリー寿命

中古でMacを買うときはバッテリーの寿命も調べておこう。

Appleサポート「Mac ノートブックのバッテリーの充放電回数を確認する」
https://support.apple.com/ja-jp/HT201585


わたしのMBAの場合、きょうで715回。あと28%くらい。

買ったときには80数%あった。4年は使ったかな。けっこう長持ちしてる。けど、そろそろ買い替えの資金を準備し始めよう。

2016年1月1日

謹賀新年

明けましておめでとうございます。

子曰、甚矣、吾衰也、久矣、吾不復夢見周公也、  
〔『論語』述而五〕

昨年は、胆嚢を取ってやれやれと思ったら、左脚の神経痛が起こったり、加齢の順調さに苦笑いする一年でしたが、夢をどこかに置き忘れたかもしれません。孔子に倣い、理想を追いかけ続けようと思います。定年まであと十年、頑張らねば。