InDesign:文献の参考頁の桁数を合わせるやつ

どうもどうも。
前にTwitterに投げたちょっとのスクリプトを少しだけ整理しました。
こういう、2分で書けたのに将来的に数十分もお得で、
しかもMPが温存できる類のものはいいですねえ。捨てるに惜しい書き捨て系。
売り物にはならないやつ。

普段は「とりあえずは要件通り動いたからまあいっか」なんですが
今回「もうちょっとなんとかならないものなのかとも思う」
という、自分にしてはけっこう珍しい引っ掛かりを感じたので、
誰かが教えてくださるのをここで待ちます。アンコウの構え。

コード全体はこちら。今回ダウンロードありません。


あそびかた

論文なんかの、文末や巻末にある文献で、
その文献の参考にしたページ範囲の表記ってのがありまして。
pp.1234-1256」みたいな箇所ですね。
これがたまに方言なのか、変動していない桁を省略して
pp. 1234-56」なんて書き方があるようで、ここによく桁数を一致させる旨の赤字が入ります。
たいして面倒ではないんだけど、ものすごく自動化の香りがしますね。

まあ、当該テキストを選択して実行すると、

いい感じになるわけです。


解説のつもり

ではコードひもとき。

var sel = app.selection[0];

ここの説明は不要かもですが、選択オブジェクトをひとつ変数に入れています。
雑に書いたスクリプトなので、何も選択されていないとのっけからエラーで止まります。


var str = sel.contents;

選択されたのがテキストだと決め打ちした上で、その文字列を変数に入れています。
雑に書いたスクリプトなので、テキスト以外が選択されていると余裕でエラーが出ます。


var reg = str.match(/\d+|[^\d+]/g);
var numA = reg[0]; //前のスウジ
var hyph = reg[1]; //間のキゴウ
var numB = reg[2]; //後のスウジ

ここは最初に2分間で書いたものが雑すぎたので少し直しました。
「数字のひとかたまり、または 数字じゃないひとかたまり」をつかんで、
その結果を3種の変数に順に入れています。
ここも選択範囲内のテキストが要件に適っていなかったら余裕でエラーが出ます。
これでも雑だっていう話ですな…


var aryNumA = numA.split("").reverse();
var aryNumB = numB.split("").reverse();

変数 numA と numB を1文字ずつばらして配列化しています。
さらに後工程のために、配列の並びを逆にしています。
“ビートルズ” が “ずうとるび” になります(ならないです)。


for(var i = 0; i < aryNumB.length; i++){
aryNumA[i] = aryNumB[i];
}

今回の肝となる処理。
前の数字 aryNumA をベースにして、それよりも桁数が短い後の数字 aryNumB の数字を
桁ごとにもらっています。aryNumB にはない桁は元々の aryNumA の物が残る仕組み。


var res = numA + hyph + aryNumA.reverse().join("");
sel.contents = res;

仕上げ。前の数字と、間の記号 まではそのまま。
加工した配列 aryNumA を、配列の並びを逆にして結合。
で元の選択範囲の文字列に指定。
つまり、選択した文字列の先頭・末尾に余計な文字が入っている場合はこの瞬間に消えてなくなります。
どこまでも雑。


仕上げ部分のロジックを図にすると、こう。

aryNumAをベースに、aryNumBに存在する桁だけを入れ替える。 aryNumBに存在しない桁はaryNumAのものがそのまま残るという仕組み。


ということで

配列化するのが無駄だとか、
Bの存在する要素をAに、ではなくAだけに存在する要素をBに代入したほうがスマートだとか
そういうのはなんとなくわかるんだけど、もっとこう、
ビット演算的ななんか、なかったかなあ、と思ってやまない。
ので、誰かそっとおしえてください。
そこまで求道しないって人は現状でそのまま使ってもらって大丈夫です。動きます。
エラー回避の練習してみたい人にはちょうどいいかもしれません(すごい詭弁)。

「バージョンは最新です」の考察

バージョンという「数字」を聞いているのに
「最新です」という「状態」を返してこられる事について、
おそらく考えてもしょうがない事なんだけど、
考えたくなったので考えてみたりしますよ。

これ、まあ、おばちゃんに「あたしのパソコンおかしくなったのー」
とせっつかれた時によく言われる「バージョンって何、わかんなーい」
よりは、まあ。わかんなーいは論外だものね。
音引き「ー」が特にね。ウゥッて来るね。実際弊社にいますねw

「最新」は気持ちがいい、自慢したい気持ちも少しあるでしょ

「最新です」のいいところは、自分でアップデート作業をした記憶が新しいという点。
いいことです。いいいい。なんでも最新は気持ちいい。
本来それでいいんです。いいいい。ほんとにいい。
「そのパンツ何日履いてるの?」と問われたら「けさ履き替えたばっかりだ!」
と答えるのはとても自然で健康的で素敵です。(ほめるのここまで)

幼少期、何かにつけマウント取ってくる同い年のイトコがいて
「ドラえもん最新の27巻買ったぜー」と来たので、
うやうやしく所蔵の28巻を見せてやった事があった。
あの時の彼の顔といったらもうね。
気持ちよかったです(すごくどうでもいい)。

「最新」の、概念以外の部分は相手に伝わるのか

答えられた側の人はどうか。ここではバージョンを尋ねた人になる。
「そっかー、最新かー、最新っていいよね!」で済めばいいし、
「おお、○月○日にリリースされたバージョン12.3.4のことだね、
アップデートはそのリリース日時以降に行われたわけだ、了解、了解だよ」
とすべてわかってくれればいい。
…わかる気はしないでもない。でも確実性はまったくと言っていい。ない。

・最終のアップデート公開が何年何月何日か
・最新の人が最新にしたのが何年何月何日か
どっちかでもわからないとどうしようもない。

「3日前にアップデートしたので最新です」というケースもあった。
これも前述に当てはまる。残念なことにあまり意味を成さない。

尋ねた側が知りたいのは新しさではなく「数字」なの

ここで認識の違いが生じている。
それはなんでか。
最新バージョンは一番バグが直っていて一番安心でナウくてモテるから、
という認識がたぶんある。
昔は大部分のアプリが確かにそうだった。
うちも、新しいのがリリースされたらすぐさま飛びついて、誰よりも先にインストールしていた。
なんでって、一番バグが直っていて一番安心でナウくてモテるから。
でも今は違う。最新バージョンで、逆に新しい深刻なバグが発生したりしている。
もちろん、「アップデートしたら不具合が解消しました」というのは今でもある。
でも現実に、ユーザーは最新バージョンに傷つけられ続けている。
その深刻なバグの回避策が、マイナーバージョンを1つ戻して使うことだったりする。
なんならメーカーがそれを推奨していたりもする。
そのために、正確なバージョンが情報として必要なのであるが、
その認識が甘い。薄い。ない。
おそらくそういうことなのだと思う。

ひとことで言うとバージョン管理の意識がない

最新バージョンに新規で冗談レベルのバグがあるのは当然メーカーの責任である。
高い金取って使えない物を出して、挙句せっかく安定している過去バージョンをインストールできなくして、
このやろうばかやろう、と思わないほうがおかしい。わかる。
しかし、仕事で使う以上は自分で身を守るしかないのである。
そのためには、今自分が入れて使っているバージョンの認識は必須なのである。
しかし。

仕事で使っていない人にはどうなの

これ。核心がこれ。
まだ、将来的にコッチの世界に来ようとしている人には、多少のわからせは必要かもしれない。
でも、PTAの刷物を制作しているとか、年賀状の自作だとか(全部自分の家のことだわw)
「プロとして〜」を説くのはお互いにしんどい。意識高い自慢と揶揄されるかもしれない。
ともかく、非プロにはバージョン管理意識などなくていい世界でいいとも思う。
中には「バージョンバージョンうるさい世界おかしいと思う。だから僕は最新って言い続ける」
なんて攻めた姿勢の人もいたりした。それは確かにかわいくない人間だけど、
そこまで追い込んでたのか、とも思わされる。

じゃあどうするの

最初に「仕事で使ってます」があればまた話は別だけど、素性がわかる前の段階では
「バージョンなんか聞かれる前に言えっての」はNGである。危険。ともだちいなくなる。
「バージョン教えて」も微妙。「最新でーす」と返ってくるに違いないからだ。
これは聞き方が悪いと思わなければいけない。
「バージョンいくつですか」も、一度で済まそうとするなら避けるべき。
メジャーバージョンしか教えてもらえない可能性が非常に高い。

こう聞けばよいの

「バージョンを知りたいので、これこれこう操作して、出てきた数字を教えてくださいまし」
もうこれしかないのでは、という結論。

ということで、以上はテンプレに(ならんわw)


以下、追記。

自分がよければそれでいいの

で、場所が掲示板なんかだと、複数人が同じ疑問やトラブルを抱えている場合が少なくない。
中には、知りたいことが過去スレッドにないか検索してから、という折目正しい方がいる。
そのとき、最新じゃなくなった「最新です」バージョンの情報があると、
集合知としてまるで役に立たない、という難点がある。
つまり、やさしい人にとってやさしくないのが「最新です」なわけ、というわけ。
そういうことなので、やっぱり最初の投稿になるべく書いといて欲しいなあとは思う。

InDesign:検索と置換ウィンドウの検索対象が減っちゃうバグの対応

Twitterに投げたやつ転載しときます。
フォロー外のイヤな奴にもTipsをおすそ分けだよー(冗談です)

タイトルの通り、ひょんな瞬間に検索対象からテキスト関連がなくなってしまう現象がある。
みんな知ってる。でも直し方わからない。
「そろそろ再起動しろってことだよな」なんて勝手に納得してInDesign再起動しちゃう。
それはそれで清い行為だと思う。
それでも、という瞬間はある。クリップボードの中身が惜しいとかのときとか。

で、ちょっといじってたら対処法を見つけたのでどうぞ。
CS6なんかの古いバージョンにはないんだけど、「方向」グループのラジオボタンをちこちこいじると消滅した「選択ハニー」「ストーリー」「ストーリーの最後へ」たちが還ってきます。
やったー ママーン

いい加減、バグなのはわかってるんだけど誰も手出しができない。
なんでかって、再現方法が確立しないから。
忘れたころに発現するのであった。
警戒しているとなかなか出ない。
そこが腹立つw


後日談ですが、その後またコレになってしまった時ドヤ顔でいじったら、うんともすんともいわんかったです_(ゝ「ε:)_
その時の症状は「選択範囲」だけがない、というもの。
TLでも「だめだった」との嘆きの声をいただきました。
まったくだめなのかどうか、そこが知りたいですな…実際一度はコレで助かったのでした。