2017年1月20日

ちょいスクリプト:註合い印の番号を変更する

InDesignで本文中の註合い印をルビ「(註番号)」の形式で付けていると、著者校で註が追加されたり削除されたりするのに従って、合い印の番号もずらさなければいけない。

一箇所ずつルビを編集していけばいいのだけど、番号を書き換えるスクリプトを書いてみた。この例では註番号を「2」増やす。

var oldNum = app.activeDocument.selection[0].rubyString.replace(/[()]/g,"");
var newNum = String(parseInt(oldNum) + 2);
app.activeDocument.selection[0].rubyString = "(" + newNum + ")";

もともと、合い印のところは文字スタイルを当てている(ルビの文字サイズを通常のルビより大きくし、位置も下揃えにしている)ので、文字スタイルを検索し、見つけたところで上のスクリプトをあてる(ショートカットを設定しておくと楽)。もちろん、手動で選択したところにあててもいい。


《何をやっているかというと…》
  1. 検索などで選択された文字のルビ文字列(rubyString)からreplace関数で前後のパーレンを取って、変数oldNumに代入。
  2. oldNumは文字列なので足し算をするためにparseInt関数で数値に変え、増減値(この場合2)を加えて、String関数で文字列に戻して、newNumに代入。
  3. 検索で選択された文字のルビ文字列として、前後にパーレンを付けたnewNumを指定する。

2017年1月19日

13日の金曜日を探す

ことしから10年間の「13日の金曜日」を列挙するbash oneliner。
科学的にはなんの特別なこともない日だけど、bashのfor文の練習に。

$ for y in {2017..2026}
> do
> for m in {1..12}
> do
> ncal $m $y | grep '^金.*13' > /dev/null
> if [ $? -eq 0 ]
> then echo "$y"年"$m"月13日は金曜日だ。
> else :
> fi
> done
> done

味噌は、
  • for は入れ子にできる。
  • calでなく、同じ曜日の日を1行に並べるncalを使っている。
  • ncalの出力からgrepで13日の金曜日を選んでるけれど、それ自体の出力は/dev/nullに捨てて、そのかわりに返り値(マッチが成功した場合に0を返す)を利用している。

なお、ncalの出力はこんな形になっている。
$ ncal 1 2017
    1月 2017
月     2  9 16 23 30
火     3 10 17 24 31
水     4 11 18 25
木     5 12 19 26
金     6 13 20 27
土     7 14 21 28
日  1  8 15 22 29

ubuntuのncalは当日をハイライト表示するけれど、そのエスケープシークエンスがじゃまなので、ハイライト抑止オプション -h を付ける必要がある。

2017年1月12日

ちょいスクリプト:箇条書きの番号をシフト

注に初校で追加があって、そのあと注番号がずれていくような場合にこんなスクリプトを書いた。

var selectedIndex = app.activeDocument.selection[0].contents;
var fixedIndex = String(parseInt(selectedIndex) + 2);
app.activeDocument.selection[0].contents= fixedIndex;

contentsは文字列(数字)なので、
まず、javascript本体のparseInt()関数で数値にして、
それに番号がずれる幅(上の例では2)を加えて、
それをString()関数で文字列に戻している。

注は、
(12) こんな感じになっているので、正規表現検索「^(?<=()\d+(?=))」で数字部分を検索して、上のスクリプトを当てればいい。

本文中の合い印も変えないといけないけど、それはまたこんど。

2017年1月8日

ちょいスクリプト:書名に鉤括弧を付ける

当初、括弧の付いていなかった資治通鑑、唐書などの書名に二重化鉤括弧を付けるようにと、初校の戻しに指示があった。一重鉤括弧の付いている書名も二重鉤括弧にするとの指示も。

そこで、InDesign用にこんなスクリプトを書いてみた。

var mySel = app.activeDocument.selection;
var myStr = mySel[0].contents.replace(/[「」]/g,"");
myStr = "『" + myStr + "』";
mySel[0].contents = myStr;


2017年1月1日

2017年始まりのご挨拶に代えて


パウル・クレーが「Die Zwitscher-Maschine」を描いたのは1922(大正11)年。

この年、ワシントン海軍軍縮条約、中国の主権・独立・領土保全を認める9カ国条約が結ばれています。日本では全国水平社創立、日本農民組合結成、女性の集会参加を許す治安警察法改正などがありました。日本共産党結党も同年7月。その一方、イタリアでは10月にムッソリーニのファシスト政権が成立し、翌月「年末まで」と限り「秩序回復」名目に独裁権が与えられます。ロシアではスターリンが党書記長に就任しています。ドイツでヒトラーがミュンヘン一揆を起こし、失敗したのは翌23年ですが、そののちナチス・ドイツ成立の1933年、この作品は「退廃芸術展」に展示されることになります。

95年後のいま、さえずることとは? レバーを回すのはだれ? いろいろ考えたくなります。


絵の画像データはWikimedia Commonsから:https://commons.m.wikimedia.org/wiki/File:Die_Zwitscher-Maschine_(Twittering_Machine).jpg#mw-jump-to-license

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"); 
とするとパーレンは半角全角を問わなくなって便利かも。

    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年は使ったかな。けっこう長持ちしてる。けど、そろそろ買い替えの資金を準備し始めよう。