ものかの: 2010/03/11

tama-san.com

宗教と科学が、あたかも水と油のようなお互いに相容れない性質があるかのように考えている人がどうにも多いようです。

たとえばガリレイの「自然は数学の言葉で書かれている」「それでも地球は動いている」は、世界から神性を剥ぎ落とした科学の言葉というより、造物主が創造した世界の仕組みを科学的な方法で解き明かした確信、より造物主に近づきえたと確信した信仰の言葉、と捉えた方が当時にあってはよほど自然です。

さらにあの宗教裁判を「教会が科学を弾圧した」と見る向きがありますが、それも幼稚な潤色で、教会が問題にしたのは聖書との整合性であり、科学それ自体を異端視したのではないのです。教会も正確な暦を作らなければいけないので、聖書に抵触しない範囲で積極的に科学的な方法を利用していました。コペルニクスもそんな司祭のひとりです。

ものかの: 2010/03/10

tama-san.com

「科学」について考える際にフッサールは無視できません。と言いながら『ヨーロッパ諸学の危機と超越論的現象学』なんていう難解なものは読んでません。難解というよりフッサールの文章がヘタすぎて、竹田青嗣の解読を通さないと付き合いきれんのです。別に学問として勉強するわけではないですし。

フッサールはひとまずおいといて、科学は「科学の外から考えなければいけない」と常々感じています。そう言うと「あ、宗教だ」とパブロフの犬どころではない脊髄反射の短絡さで反応しちゃう人がいるので断っておきますが、科学の反対語は宗教ではありません。むしろ科学は宗教のシノニムだと言い切っていい。

ものかの: 2010/03/09

tama-san.com

以前「私は科学なんかやっていない」と当たり前すぎることをわざわざ明言したことがありますが、より誤解の少ない表現で言い換えておきます。

ソフトウェア制作はサイエンスじゃなくてエンジニアリング。
私はエンジニアリングの真似ごとはしていますが、サイエンスはしていません。

これも言わずもがなの当たり前すぎることなんですけどね。中には「コンピュータ=科学」と思っている人もいるようですけど、あまりに素朴すぎます。もしエンジニアリングがサイエンスの一部だと思っていたら、これも同じくらいに素朴すぎます。CD-RもMOも全部「フロッピー」と言っているくらいに素朴です。

InDesign + JavaScript = ?: findGrep()で検索したとき

findGrep()で検索したとき
よく忘れるのでメモ。

findGrep()で検索したときの返り値はマッチした文字列の配列。で文字列がどの場所にあるのかを知りたい時は、配列をfor文とかで回してindexプロパティで親ストーリーの何番目のキャラクターなのかがわかる。

例えば次のように取得する。
app.findGrepPreferences.findWhat = "(?s)▲▲(.+?)▼▼";
var result = myStory.findGrep(true);

for(var i=0; i<result.length; i++) {
$.writeln(result[i].index);
$.writeln(result[i].toSpecifier());
}

indexで最初の▲の位置がわかる。toSpecifier()だと最初と最後がわかる。
単純にindexとな。ここで躓いてしまった。

何がしたかったというと、タグで囲まれた部分を吹き出し的なアンカーフレームにする、というもの。テキストフレーム作成→ライブラリ経由→カーソル位置に配置、と今までやってたんだけど、insertionPointがわかってれば直接insertionPoints[x].textFrames.add()、と出来るようなので。

ディザInDesignブログ: げ、放置スクリプトがあった

げ、放置スクリプトがあった

ちょっとファイルの整理をしていたら、作りかけのまま放置されていたスクリプトが見つかった。
2007年8月だからCS3が出た2ヵ月後ぐらいに作っていたもの。放置されていたからには当然このままでは動かない。けれど捨てるには惜しい。もしかしてこれをネタにしていけば結構書くことがあるかも。

ということで現状のまま公開。そのうち解説とか書けるといいなあ。
/**************************************************************************/
/*                特定の時間保存していない場合に警告する                  */
/*                                                           by お~まち  */
/*                                              2007.08.27  Version 1.00  */
/**************************************************************************/
#targetengine "session"

limitMinutes = 0.2; //警告するまでの時間(分)

//開いているドキュメントのリストを操作
var docList = new Array();
app.eventListeners.add("afterNew",    addList, false);
app.eventListeners.add("afterOpen",   addList, false);
app.eventListeners.add("afterRevert", updateList, false);
app.eventListeners.add("afterSave",   updateList, false);
app.eventListeners.add("afterSaveAs", updateList, false);
app.eventListeners.add("beforeClose", removeList, false);

/* チェックを行うイベントのタイミング(ツールパネル、効かない)
addEL(app.menuActions.item("$ID/Selection Tool")); //選択ツール
addEL(app.menuActions.item("$ID/Direct Selection Tool")); //ダイレクト選択ツール
addEL(app.menuActions.item("$ID/kCropToolStringKey")); //ポジションツール
addEL(app.menuActions.item("$ID/Pen Tool")); //ペンツール
addEL(app.menuActions.item("$ID/Add Anchor Point Tool")); //アンカーポイントを追加ツール
addEL(app.menuActions.item("$ID/Remove Anchor Point Tool")); //アンカーポイントを削除
addEL(app.menuActions.item("$ID/Convert Direction Point Tool")); //アンカーポイントの切り換えツール
addEL(app.menuActions.item("$ID/Type Tool")); //横組み文字ツール
addEL(app.menuActions.item("$ID/Vertical Type Tool")); //縦組み文字ツール
addEL(app.menuActions.item("$ID/Path Type Horz Tool")); //横組みパスツール
addEL(app.menuActions.item("$ID/Path Type Vert Tool")); //縦組みパスツール
addEL(app.menuActions.item("$ID/Pencil Tool")); //鉛筆ツール
addEL(app.menuActions.item("$ID/Smooth Tool")); //スムーズツール
addEL(app.menuActions.item("$ID/Erase Tool")); //消しゴムツール
addEL(app.menuActions.item("$ID/Line Tool")); //線ツール
addEL(app.menuActions.item("$ID/Rectangle Frame Tool")); //長方形フレームツール
addEL(app.menuActions.item("$ID/Oval Frame Tool")); //楕円形フレームツール
addEL(app.menuActions.item("$ID/Polygon Frame Tool")); //多角形フレームツール
addEL(app.menuActions.item("$ID/Rectangle Tool")); //長方形ツール
addEL(app.menuActions.item("$ID/Oval Tool")); //楕円形ツール
addEL(app.menuActions.item("$ID/Polygon Tool")); //多角形ツール
addEL(app.menuActions.item("$ID/FrameGrid Horz Tool")); //横組みグリッドツール
addEL(app.menuActions.item("$ID/FrameGrid Vert Tool")); //縦組みグリッドツール
addEL(app.menuActions.item("$ID/$$$/ToolName/PushButtonTool")); //ボタンツール
addEL(app.menuActions.item("$ID/Scissors Tool")); //はさみツール
addEL(app.menuActions.item("$ID/Rotate Tool")); //回転ツール
addEL(app.menuActions.item("$ID/Scale Tool")); //拡大 / 縮小ツール
addEL(app.menuActions.item("$ID/Shear Tool")); //シアーツール
addEL(app.menuActions.item("$ID/Gradient Tool")); //グラデーションスウォッチツール
addEL(app.menuActions.item("$ID/kGradientFeatherTool")); //グラデーションぼかしツール
addEL(app.menuActions.item("$ID/Free Transform Tool")); //自由変形ツール
addEL(app.menuActions.item("$ID/Note Tool")); //注釈ツール
addEL(app.menuActions.item("$ID/Eyedropper Tool")); //スポイトツール
addEL(app.menuActions.item("$ID/Measure Tool")); //ものさしツール
addEL(app.menuActions.item("$ID/Grabber Hand Tool")); //手のひらツール
addEL(app.menuActions.item("$ID/Zoom Tool")); //ズームツール
addEL(app.menuActions.item("$ID/Swap Fill and Stroke Colors")); //塗りと線のカラーを入れ替える
addEL(app.menuActions.item("$ID/Toggle Fill and Stroke")); //塗りと線を入れ替え
addEL(app.menuActions.item("$ID/Apply Default Fill and Stroke Colors")); //初期値の塗りと線のカラーを適用
addEL(app.menuActions.item("$ID/Toggle Text and Object Control")); //テキストとオブジェクトコントロールを切り替える
addEL(app.menuActions.item("$ID/ApplyColor")); //カラーを適用
addEL(app.menuActions.item("$ID/ApplyGradient")); //グラデーションを適用
addEL(app.menuActions.item("$ID/ApplyNone")); //適用なし
addEL(app.menuActions.item("$ID/Normal View Mode Tool")); //標準モード
addEL(app.menuActions.item("$ID/Preview Mode Tool")); //プレビューモード
addEL(app.menuActions.item("$ID/Bleed Mode Tool")); //裁ち落としモード
addEL(app.menuActions.item("$ID/Slug Mode Tool")); //印刷可能領域モード
*/
//チェックを行うイベントのタイミング(その他)
addEL(app.menuActions.item("$ID/Cut"));
addEL(app.menuActions.item("$ID/Copy");
addEL(app.menuActions.item("$ID/Paste");
addEL(app.menuActions.item("$ID/Zoom In")); //ズームイン
addEL(app.menuActions.item("$ID/Zoom Out")); //ズームアウト
addEL(app.menuActions.item("$ID/ToggleViewSetting")); //デフォルトとプレビュー表示設定間を切り替える
addEL(app.menuActions.item("$ID/ToggleControlPanelTextMode")); //コントロールパネル内での文字と段落モード切り替え

function addEL (myMenu) {
    myMenu.eventListeners.add("afterInvoke", cktime, false);
}

//最終保存からの時間を調べて、過ぎてたら警告を出す
function cktime () {
    for (i = 0; i < docList.length; i++) {
        if (docList[i] != "" ) {
            var docName = docList[i].split("\t")[0];
            var myLimit = parseInt(docList[i].split("\t")[1]);
            var d = new Date();
            if (d.getTime() > myLimit ) {
                alert("ドキュメント '" + docName + "' は\n"
                    + "最後に保存(もしくは新規作成)されてから "
                    + limitMinutes + " 分経過しました。\n"
                    + "そろそろ保存したほうがいいですよ。");
            }
        }
    }
}
//開いているドキュメントのリストに追加
function addList (e) {
    var myStr = e.parent.name + "\t";
    var d = new Date();
    var myLimit = d.getTime() + limitMinutes * 60 * 1000;
    myStr += myLimit.toString();
    docList.push(myStr);
}
//開いているドキュメントのリストから削除
function removeList (e) {
    var myStr = e.parent.name;
    for (i = 0; i < docList.length; i++) {
        if (docList[i].split("\t")[0] == myStr ) {
            docList[i] = "";
            break;
        }
    }
}
//開いているドキュメントのリストの保存時間を更新
function updateList (e) {
    var myStr = e.parent.name;
    for (i = 0; i < docList.length; i++) {
        if (docList[i].split("\t")[0] == myStr ) {
            var d = new Date();
            var myLimit = d.getTime() + limitMinutes * 60 * 1000;
            docList[i] = myStr + "\t" + myLimit.toString();
            break;
        }
    }
}

ものかの: 2010/03/05

tama-san.com

アイコンLibera Memory 1.6.1 に緊急修正
downloadのページReadMe

1.6.0 で処理が終わっても du コマンドが実行し続けてしまう
重大なバグを修正しました。

本当に申しわけありません!
1.6.0 には重大なバグがありました。Release を押して処理が終わったように見えても、バックグラウンドで複数の du コマンドが同時に実行し続けていました。Libera Memory を 終了すれば止まるのですが 終了しても止まりません。 起動ディスクのすべてのファイルのサイズを調べ終わるまでアクセスを続けるので、ずっとディスクがカリカリと音を出し、CPU 負荷も増大するので環境によってはシステムの動作そのものが遅くなってしまいます。1.6.0 は即刻捨てて、1.6.1 をお使いください。

完全に私の致命的なミスです。ご報告をしてくれた佐々木さんに感謝します。

システムを損傷することはまずありませんが、ユーザの方に非常な迷惑を与えるバグです。深くお詫びし、今後は拙速に公開せず、事前チェックを入念にすることを徹底していきます。

v1.5.0 もダウンロードできるようにしました。(ダウンロードページにリンクが見当たらない場合は、ブラウザを再読込みすると現れます)

ディザInDesignブログ: 「囲み文字の作成をサポートする」をアップしました

「囲み文字の作成をサポートする」をアップしました

評判も聞かずにアップしちゃいました。

囲み文字の作成をサポートする

昨日のエントリーで仮置きしたものはまずい点があったので削除しました。

Windows、CS3でしかテストしてないです。でもCS2~CS4で共通して使える機能しか使ってないはずなので、たぶんCS2以降で動作します。

今回のスクリプトは300行を越えました。いつもよりもコメント行を多く入れております。参考になれば。

ところで、最近スクリプトの勉強をする人が多くなった気がします。スクリプトはオペレータにとってはハードルが高いのでなるべく使わないでやりたいことができるのが一番いいと思うんですけどね。このサイトも訪れる人が増えてきて嬉しいんですけども、初級者・中級者ならともかく、初心者にはハードルが高いと思います。何せ気ままに作って、適当に公開してるわけですから。講座を開こうという気はさらさらないです。もしも私が講座を書き始めたら、それはアイデアが尽きてやることがなくなったということになると思ってます。

てなことで、これからも気ままに書いていきます。

ものかの: 2010/03/04

tama-san.com

倍返しは終了。
CLさん、言いたいことがあったら コソコソやらずに 私に直接はっきりと言いなさい。→mail

----

Libera Memory 批判について

書き直しました。これだけで済むことだったんだ。
説明しても分からない人には分からないのだから。

ディザInDesignブログ: 囲み文字作成の補助ツール

囲み文字作成の補助ツール

このブログのアクセス解析を見ていたら「InDesign 囲み文字」で来る人が結構いらっしゃいます。囲み罫はあっても囲み文字はないんだけどな。
実際、囲み文字は難しいんですよ。文字の形(グリフ)を見ながら縮小率を調整しなきゃなんないし。
でも中に入る文字の縮小率を変化させたものをたくさん作れば、その中にちょうどいい具合のものがあるんじゃない?
てなわけで、そんなツールを作ってみました。中に入る文字は圏点で作ってますので、組版調整機能には左右されない、ルビも振れるっていうのがこだわりの一品です。

今日はひな祭りで早く家に帰らないといけないので(家でやってんのじゃないのか、という突っ込みはなし)、とりあえずブログで公開。評判がよければちゃんとしたページを作ります。

「kakomimoji.jsx」をダウンロード

注)中に入る文字のフォントや色を変更する時にラジオボタンのチェックを忘れると反映されません。自分でも慣れるのに時間がかかった。

ものかの: 2010/03/03

tama-san.com

アイコンLibera Memory 公開再開、ついでに 1.6.0 へアップデート
downloadのページReadMe

・メニューに「グラフを隠す」を追加
・イタリア語のローカライズを追加、他

お騒がせして申しわけありませんでした!(平謝り)
少し手を加えて ReadMe も書き直していたので、公開再開までちょっと時間がかかりました。

3ヶ月前にイタリアの方からローカライズファイルが送られてきてまして、ちょうど良い機会なので加えました。グラッチェ、アモーレ!

ところでカトリックの宗教曲はラテン語の典礼文を歌詞にすることが厳密に決められています。そこに「Libera me」というおなじみのフレーズが出てきます。「私を救いたまえ」という意味です。Libera Memory はそこからとった名前。つまり「メモリを救いたまえ」、略して「メモ救」。<なんだそれ

とりあえずメモ救を急いで出したので、「公開を避けていたソフト」は後日お披露目します。

ものかの: 2010/03/02

tama-san.com

今気がついた!
アップル - ダウンロード - ユーティリティ - Libera Memory
私が自分で申告したんですけど(笑

疑似科学とまで言われたソフトなので、落とされるかもと思ってました。なのにどうして申告したんだっけ? 覚えてない…。その時、猛烈にイライラしていたことは覚えてます。きっとヤケッパチでやったんでしょう。

ところが掲載されてみると、もう〜超うれしい〜!

新しもの好きさんもリンクを消さないで待ってくれているし、早く公開を再開しなくちゃ。

ものかの: 2010/02/28

tama-san.com

Libera Memory の公開終了を撤回します。後日あらためて公開します。それと一緒に「公開を避けていたソフト」も出します。

ディザInDesignブログ: 小塚明朝 Pro Rってこんなんだっけ?

小塚明朝 Pro Rってこんなんだっけ?

InDesign CS3(5.0.4), Windows 7, 小塚明朝 Pro R バージョン4.001です。

ちょっと使いたいことがあって、現在選択されている文字のフォントと、ドキュメントで使用しているフォントの名前を照合しようとしてたんですが、一致するフォントがない!
はあ? 何それ。
ということで次のスクリプトを実行すると

var doc = app.activeDocument;
$.writeln(app.selection[0].appliedFont.name);
for (i=0;i<doc.fonts.length;i++){
$.writeln(doc.fonts[i].name);
}

ExtendScript Toolkit2のコンソール画面には

小塚明朝 Pro R
小塚明朝 Pro Regular

という結果が(ちなみに小塚ゴシック Pro Rも同じ)。うそ、こんな仕様だったっけか。フォント名の取り出し方によって違う値になるなんて。

仕方がないのでnameではなくfullNameで取り出してみると同じだったので無事照合できました。よかった、よかった。じゃなくて!

これ、フォントのバージョンの問題? InDesignの問題? それともJavaScriptの問題?
暇があったら他の環境でも試して見ないといけないんだけども、とりあえずお怒りの投稿です。ぷんぷん。

2009/03/02 11:22 文字の欠落を修正。いきさん、ありがとう。

ディザInDesignブログ: やっとアップできました。

やっとアップできました。

いろいろご心配をおかけしました。

ディザInDesignブログ: オブジェクトモデル図更新します

オブジェクトモデル図更新します

結局OCNにディスク容量追加を申し込みました。その分ブログの契約を無料のものに代えたので、ブログのほうは以前のように広告が入ります。

で、本日2月26日の20時以降に容量増で使えるということなので、今日明日にオブジェクトモデル関係のファイルをすべて入れ替えようと思います。CS4のところは分からないことだらけですが、とりあえず置いておけばそのうち更新するだろうということで。

この際に安いところ、無料のところへ引っ越すという手もあったんですが、とりあえず邪魔くさい。移動を前提にするなら独自ドメインを取得したほうがいいし、と。一応独自ドメインの候補もあるんですけど。その名も「indesign-life.jp」今なら空いてます。jpだけでなくcomとかも。でもそんな生活にはほど遠い現実。最近はもっとセキュリティについて勉強しないと大変だわーという状況です。

てなわけで、当面このまま行きます。あーあ、早く悠々自適なInDesign Lifeが送れればいいなあ。

ものかの: 2010/02/26

tama-san.com

Libera Memory と Libera Memory Resident の公開を終了します。
代替方法を書いておきます。

1.ターミナルを起動
2.ターミナルのウインドウに「du -sx /」と入力
3.return キーを押す
4.数秒後に[control+C]または[command+.(ピリオド)]を押して停止

ごくありきたりのコマンド命令です。Libera Memory はこれと同じことをしていただけなので、効果はまったく同じですよ。
繰り返す時は[↑]キーを押して return キーを押すとラクチンです。

追記

起動ディスクの表示オプションを表示して
『すべてのサイズを計算』にチェックを入れる

cat で Inactive をわざと増やしておいてこれをやってみたら、数秒後にゴソっと解放されました。どうして今まで気がつかなかったんだろう?! 止めるときはチェックを OFF にするだけです。やっぱり Libera Memory はいらなかった。

ディザInDesignブログ: 説明します。

説明します。

最初にオブジェクトモデルを作ったときは5MBもなかったので、10MBまで無料のOCNのサービスで問題なかったんですが、CS-CS4までを作成したら、ついに10MBまで行ってしまいました。

しかも、きっちり10MBまでで、途中からアップできない状況になってしまい、もうむたくた。アップしてみたり削除してみたりしたので、この間、アクセスした人にはご迷惑をおかけしました。


OCNのPage ONというWebサービスを利用してるんですが、10MBを超えて利用したい場合は課金が。しかも5MB毎に月額200円ですと。わずかとはいえ、たばこも値上がりしようという昨今、ちときついです。ブログのほうは10,000MBまで可能だというのに、この扱いは何?

とはいえOCNは安定しているので離れたくないです。ブログの方に移すことも考えましたが、366個のファイルを一気にアップする方法があるんだろうか。ちょっとこれから色々調べてみます。

いずれにせよ、コンテンツの一部を別の場所に動かす可能性が大です。また決まったらお知らせします。

ディザInDesignブログ: 一時的にオブジェクトモデルが開けなかった人ごめんなさい

一時的にオブジェクトモデルが開けなかった人ごめんなさい

こもってCS4までのプロパティやらメソッドを作成してました。とりあえず出来上がってアップしようとしたら、いろいろあって断念。この間のアクセスして使えなかった人ごめんなさい。

InDesign + JavaScript = ?: acrobatのハイライトテキスト

acrobatのハイライトテキスト
数時間ネットで調べたのだが、やはり皆苦労しているようだ。
そもそもacrobatのJavascriptはリソースが少ない。少なすぎる!ってことで勉強する気にもなれず、一番手っ取り早いが不完全な方法で手を打つことにした。

単純にテキストがハイライトされたPDFをXMLで書き出すだけ。ハイライトされている部分は<Annot></Annot>で括られてるのでその部分だけを拾っていこうかと。頁番号はちょっと厄介。ノンブル部分の作り方に特徴があれば(例えば章タイトル+全角スペース×2+ノンブル、とか)、その規則性から拾ってくる手もあるんだが、そうでない場合は。。。。

まぁハイライト部分は出現順に拾えるはずなので、拾えているかどうかチェックもかねてノンブルを入力してもらっていくのがいいか。。。

InDesign + JavaScript = ?: acrobat + javascript = ?

acrobat + javascript = ?
作業の効率化UPということを考えると、結局InDesignでできることは最小限に抑えたい、ということになる。InDesignを使える人ってのは限られているわけで、使えない人にもできる作業を増やすことで、効率化だけでなく、全体の作業量を増やすことができる。

で色々考えると、結局InDesignで色々やるんじゃなくて、wordで文書の構造化やレイアウト、文字属性を決めてしまうってのが手っ取り早いのだろう。
プレーンなテキストファイルってのはたしかに扱いやすいが、逆に手間がかかかる。例えば、学術書であれば、イタリックだったり上付き・下付き文字ってのは日常茶飯事でそれをテキストエディタでタグでくくっててのは手間。ワードだったらキーボードショートカット一発でそこらへんの文字属性は設定できるし。

ということでワードの文字属性やスタイルをほぼ完全にInDesignに読み込ませるようなスクリプトが必要。いや、実際InDesignの機能でほぼ読み込みできるのだが。

次に、InDesignで組み上がってきたものに対する処理。予算があればInCopyという手もあるのだが、そうではないので修正はInDesignでちまちまやる、と。

もひとつ面倒なのは索引。InDesign上で索引マーカーひいてくのが便利なのは確かなのだが、その時間を別の書籍の組版にあてたい。てことでPDF書き出して注釈可能にして、テキストをハイライトさせて索引マーカーを著者に引いてもらうのが一番いいかと。でAcrobatからハイライトテキストを書き出す。

という構想だったのだが、ハイライトテキストを書き出すにはいろいろとややこしい。そもそもテキストをハイライトさせる時にハイライトされている文字列を注釈にコピーする必要がありそれが自動的にコピーしてくれるのはAcrobatのみ。でReaderでハイライトされたテキストは文字列として書き出せないのである。ここでInDesignのようにJavaScriptで何とかなるんじゃないかと思ったんだが。。。

ぐぐってみても良い解決策は見当たらない。ここに
http://www.acrobatusers.com/forums/aucbb/viewtopic.php?id=14150
一応の答えはあるんだが。。。というかそもそもAcrobatでのJavascript環境が貧弱すぎ!でっ挫折気味なのだが、ここらへんちゃんとしたスクリプト出来たらかなり強力かもしれん。

つか調査不足だが、PDFをプログラムでコントロールするってはInDesign以上に効果的なような。

ものかの: 2010/02/17

tama-san.com

アイコン毎年恒例「たまさん誕生日企画」前倒しの新作!
満を持してついに公開!

InDesign Glee 1.0 → download ページヘルプ

いつもよりアイコンを大きく貼っております。
まあとにかく、これ→ デモムービー をご覧くださいな。

なんと今回は公開に先立って あかつきさん杏珠さんmgさん にテスターになっていただきました。その豪華布陣の甲斐あって、中身はもはや v2.0 レベルに仕上がっております! 安心してお使いください。

「こういうの誰か作ってくれないかな〜」とず〜っと思っていて、誰も作ってくれそうにないので、結局また自分で作ってしまいました。

たまさんはもうすぐ8歳です。8歳でも、やっぱり天使。

たけうちとおるのスクリプトノート: 東京で2010/03/27【DTPの勉強会(仮称) 第0回】開催

東京で2010/03/27【DTPの勉強会(仮称) 第0回】が開催されます。
主催はあかつき@おばなさん。第0回ということで実験的に小さく開催されるそうですが
記念すべき最初の会。興味ある方は、ぜひ参加して下さい。

■開催概要

日時:平成22年3月27日(土)午後2時〜(1時30分より受付開始)
場所:大橋会館 中会議室
受講料:2,000円(当日支払。希望者には領収書を発行いたします)
定員:30名

■スケジュール・内容(予定)

Session.1「Adobe Bridgeの使い方」
スピーカー:あかつき@おばな
[内容]
・Adobe Bridgeの基本的な使い方
・ちょっとしたTips
・実際のDTP作業での使用例

Session.2「かづらき解体新書」
スピーカー:あさうす(実験る〜む)
[内容]
・かづらきフォントの紹介
・既存フォントとの違いをかいま見る
・グリフ類から見るその挙動や構造を紐解く
・将来性と問題点を考察する

ショートトーク
 いわゆる「ライトニングトーク」のパートを設けたいと思います。ちょっとしたTipsやアプリケーションの意外な使い方などをご紹介ください。
 登壇していただける方は、申込時に「ショートトーク」の「登壇してもよい」欄にチェックを入れてください。

たけうちとおるのスクリプトノート: page2010セミナー終わりました。


撮影:鷹野さんhttp://www.dtp-transit.jp/

デジタルワークフロー・ソリューションZONEのセミナー会場に足を運んでいただいたみなさん。ありがとうございました。
とおりすがりの方も大勢いらっしゃったのかな?
今回は緊張しました〜。大舞台ですから。大阪DTP勉強会DTP勉強部屋(本家)
話するよりも緊張してその緊張が伝わっちゃったようですね。すいません。
名古屋や大阪はやっぱり身内ですからねー。東京おそるべし。
最初に笑いを取ろうとして鉄板ネタを出したのに滑ったのが痛かったのが一番の反省(笑)


撮影:鷹野さんhttp://www.dtp-transit.jp/

それでも会場は大盛況で、寝る人もいなかった(ように見えた)ので、なかなかよかったのかな?
立ち見が5列だったそうですよ。(スクリプトのパワーってすごい)

私以外の方のセミナーはみなさんとっても上手くてすばらしかったです。

せうぞーさんスクリプトの解説はコチラ

□□□□□□□□□□ここからはレポです□□□□□□□□□□

ここだけは押さえておきたい『出力できる』PDFのポイント

(株)吉田印刷所(新潟県)笹川純一氏
http://blog.ddc.co.jp/mt/dtp/index.html
笹川さんのセミナー。さすがPDFに関して詳しいです。プレゼンもスムーズ。
後ろから見ていたのですが、出番前なので頭に入らず。モリサワさんのブースとかに行ってあまり聞いてなかったです(笑)すいません。

Illustrator で光の表現:描画モードを使いこなす

イラレラボ 川端亜衣氏
http://illustrator-labo.com/
カワココさんのテクニックを拝見。デモ内容は事前にダウンロードして知っていたのですが、今からセミナー中に作るの????そんな時間あるのかなぁ???って思ってたらさくさく出来てびっくりすごいです。
光の演出。しかも簡単そうに見える!Illustratorでベクターさわっているとは思えない。
ずっと見たいと思っていたので夢が叶ってうれしかった。ごあいさつもさせていただきました。一緒に出てるとごあいさつしやすいですね。

制作者が覚えておきたいPDFのあれこれ

InDesignの勉強部屋 森裕司氏
http://study-room.info/id/index.html
YUJIさんのセミナーはさすが上手い。安心してみれます。ほとんど徹夜明けなのに会期中4本のセミナーをされたそうです。
と、内容よりもセミナーテクニックを見てしまう私。。。
内容もわかりやすくて知ってはいたけど使った事の無い機能を(Acrobatでトンボ付けたり、線幅変えたり、校正のやりとりとか)いろいろ発見がありました。
初心者にも簡単でしかも、そこそこ中堅クラス?の人にも新しい発見を見せてもらえる。さすがです。
page会場でお話しするのやりにくくなかったですか?の問いに「笑いをとろうとしなかったから大丈夫」って。さすが場数踏んでるなぁ。

Illustrator ライブ3兄弟徹底攻略

(株)スイッチ、DTP Transit 鷹野雅弘氏
http://www.dtp-transit.jp/
鷹野さんもすごいプレゼン上手いの。手さばきも見事で見とれてしまいます。
ネタもしこんでて最高。でも滑り気味だった〜。やっぱりpageで笑いとるのはダメなんだ〜(笑)
ライブペイントやライブカラーとかAdobeさんのデモで見た事あるけど。鷹野さんのほうが実践的で使ってみたいと思ってしまう。しかも鷹野さんってすごくいい人なんだよ。

組版/見て分かる新常識

(有)トナン 大熊肇氏
http://www.tonan.jp/
えーーー。すごかったです。文字にこれだけのこだわりを持った人。おもしろかった。なんでやねんDTPはご存知ですか?と聞くともちろんです。とのこと。繋がってたんだ。
しかも今度名古屋でいっしょに話すっておっしゃってました。すごいよこの組み合わせ。
なんでやねんのおっちゃんも再び尊敬。数字と本文(ほんもんって発音されてた。ほんぶんと思ってたけど)のアキは四分だと空きスギだから八分だそうです。後で1桁数字のアキはどうされているんですか?と聞くとこれも八分ですねーとの事。

『+DESIGNING』が試みる雑誌制作の最新ワークフロー

+Designing 小木昌樹氏
http://www.plus-designing.jp/
10年ぐらい前に私とメールでやりとりしてたそうです。DTPWORLD時代。えーーそうなんだ。なんかうれしいです。
話もすごくおもしろくて、新しい事をすごく勉強されている。現在の出版ワークフローもすごく勉強になったし、電子出版のこれからを見据えた話もすごく良かった。詳しくは書かない。ライブで聞いた物の特権です(笑)
だって、今から僕も本気モードでちょっと取り組みたい話だったんだもの。
スライドは文字ばっかりなのにぐんぐん引き込まれる。セミナー会場に釘付けになってしまいました。

InDesign + JavaScript = ?: Grepのバグ?

Grepのバグ?
久々にIndesignネタを。

簡易タグから段落スタイルの割り当てというスクリプトを作っていて、例えば

<ex>
文字列文字列文字列文字列文字列文字列文字列文字列文字列文字列文字列
</ex>

とタグがあってスクリプトを走らせると、現ドキュメントで使用している段落スタイルを選びそのタグで囲まれた文字列に割り当てられる、というもの。

上記の例でいえば
app.findGrepPreferences.findWhat = "(?s)^<ex>\r(.+?)<\/ex>\r";
app.changeGrepPreferences.changeTo = "$1";
としておいて、findGrep()の戻り値に段落スタイルを適用して、changeGrep()でタグを取り除く、という仕組みにした。一段落ずつ見ていってタグを取り除くより正規表現で置換した方が楽に思えたので。

何回か検証して問題がなかったように見えたのだが、よく見ると、タグを除去した後に、上付き文字の位置がずれている。正確に言うと、上付きの属性がかかる位置がずれているのである。例えば、「H20の・・・」となっていたところが「H2O・・・」となっているのである。。。

どうも置換する際に属性の位置が保たれていないようである。いやいや本格運用する前に気づいて良かった。
ってこれはスクリプトだけではなく、Indesignの検索置換ダイアログでも同様の症状のようだ。。

ディザInDesignブログ: めちゃくちゃ遅いですが今年もよろしくお願いします

めちゃくちゃ遅いですが今年もよろしくお願いします

だってInDesign触ってないんだもん。見たら1月15日以降一度も立ち上げてない。
今はなぜかASP(Active Server Pages)という、今更な言語を使って社内ページを作成しているという状況なんだな。もうInDesign忘れちゃったよ。
ということで、しばらく地下に潜っております。思い出したら出てきます。

InDesign + JavaScript = ?: 大きい。。。

大きい。。。
iPhoneの巨大版。。。この冬実家に帰ったとき思っていたこととリンクした。
田舎にいる父母にプレゼントしたらいいと思った、iPadを。
別に電話機能はいらない。でもメールのやりとりはしたいはず。特に孫の写真が大きく見れたらいい。
3月発売か。。。兄弟と相談してみよう。

つか、電子書籍というよりそっち方面(高齢者とか、PC苦手な人とか)に受けそう。
となると日本では競合はDSあたりなのかもしれない。ゲームもできるし。
何よりDSよりわかりやすい。使いやすい。ペンをなくす心配もない。そしてゲーム機じゃない。

まじめに考えると、青学がiPhoneを生徒に配布したように、今度は小・中学校でiPadを採用するって流れが出てきそうですね。学校にそのシステムを構築するよりも、iPadを買い与えて3年なり6年使った方がコストはかからないだろうし。そういう意味ではクラウドっぽい。

InDesign + JavaScript = ?: 横断性

横断性
目次・索引、てのが書籍における重要な側面だとすれば、電子化することで、検索性とかフィルタリング、並べ換え、が可能になると有用かもしれない。
書籍単体を横断してそのようなことが可能となればさらに面白い。WEB頁のクリップのようなものだ。
OSレベルでの検索機能(たとえばMacの場合のスポットライトとか)が書籍内容にまで拡張できるかどうか。書籍自体にタグ付けだったり注釈がつけれるかどうか。

InDesign + JavaScript = ?: 70%

70%
印税率やらなんたら、アップルのiSlateとかなんとかで、電子書籍をめぐる動きというかニュースが多い。
出版社側としては、マーケットが広くなるのはよいことなのだが、優良な著者が離れるかもしれない、というのがやはり一番怖い。
音楽業界を見てると意外にそうはならないかもしれないような気もするが。

学術系というくくりで考えると、アマゾンで出版するのは自費出版にすぎず、当面は業績にカウントされないのかどうか。というか論文誌とかはとっくに電子化してるわけで、そこらへんとの関係とか。

電子書籍というネーミングに惑わされすぎかもな。

InDesign + JavaScript = ?: DTP

DTP
といってもDegital Text Platformのことだけど。

ますます、Javascriptとは関係のない話。
電子書籍の場合、厳密な組版ルール(例えば、Indesignでいうところの文字組み調整機能を駆使するようなもの)がどれほど求められるんだろうか。

画面サイズを自由に変更できるような端末の場合(というか文字サイズを拡大縮小しても一行が画面に収まるようになるという意味で)、版面という概念がないわけで。

PDFは当分の間、標準規格とはなるだろうが(オンラインジャーナルの場合PDF配信が標準)、商業的には別の規格が出てくる予感。結局HTML5なのか。

携帯端末、スマートフォン端末、電子ブックそれぞれで別の規格を作られてもたまったものじゃない。
PDFだと画面の拡大・縮小の問題があるわけだし。

Indesignでの組み方ってのとデータの吐き出し方ってのはよーく考えておかないといけないような。

たけうちとおるのスクリプトノート: PAGE2010でセミナーをさせていただきます。

PAGE2010(サンシャインシティコンベンションセンターTOKYO/主催:社団法人 日本印刷技術協会)でセミナーをさせていただく事になりました。
タイトル:「DTPを楽にするスクリプト入門」
日  時:2月4日(木)15:15〜16:15に
場  所:「デジタルワークフロー・ソリューションZONE」展示ホールD(文化会館2F)
講  師:株式会社遊文舎たけうちとおるのスクリプトノート竹内亨

無料で聴講が可能で、予約も不要です。
約120名ほどの席が用意されているかと思いますが、机はなく、
椅子のみとなっています。
http://www.jagat.jp/content/blogcategory/91/376/

内容は、大阪DTP勉強会、名古屋DTP勉強会を短くまとめたものになります。
(東京では話していないし入門向けにわかりやすい内容だと思っています)

当日PAGEに来られる方で興味ある方はぜひお立ち寄り下さい。
スライドやDEMO内容も練り直したりしたいので、まだまだ準備中です。
がんばります。会場で私を見かけたら声をかけてくださいね。

見栄えの良いDEMOネタやアドバイスなどございましたらぜひコメント下さい。

今回は、僕のいままでお話させていただいた中で最大の場所です。
同じ人数なら経験ありますが、東京PAGEのあの会場は「あそこで話したら緊張するだろうなぁ」と、去年はせうぞーさんを見て思いました。
そのあと、何度かお話させていただく機会をいただけたので、なんとか緊張せずに行けると思います。(ウケるかどうかは別ですが)
精一杯がんばります。

InDesign + JavaScript = ?: 2010

2010
年が明けてしまった。

アップルがタブレットPC発売を公表するのではないかという噂が大分前から出ている。macbook airは確かに薄いものの、自分的にはインパクトには欠けていた。もしかしたら、タブレットPCを出すための準備的なものだったのかもしれない。

Kindleがヒットしているようである。アップルのタブレットPCはそれに近い端末、と考えることができるかもしれない。サイズはB6ぐらいだろうか。iPhoneに代表されるスマートフォンで青空文庫を読んだり、ネットしたりというのは定着しつつある。

電子書籍ということをずっと考えているのだが、しっくりこない。書籍の電子版という意味では、PDFがある。Kindleだと文字サイズや行間、フォントとか版面も変更できるらしい。よくよく考えれば、HTMLがやっぱり柔軟な気もする。CSS+JavaScript+Flashで文字サイズ以上に何でもできるからなぁ。php使えば、データベース的に書籍データを再構築して並べ替えや抽出もできるし。

Indesignで書籍を制作した結果の副産物としての電子書籍を考えると、組み方も注意しないといけないのかも。XML吐き出しで何とかなるっていう部分もあるっちゃあるけども。

Indesignをただの組版ソフトとしてより、文字データと画像データの集約ツール的として認識して使うべきな気がしてきた。アニメーションは組み込めないけどそのうちフラッシュも組み込めるようになるだろう。実際、電子書籍て考えるとDirectorとかなのかもしれないが。

学術書というか、いわゆる教科書の未来、てのを考えると、B6サイズぐらいのタブレットPCが出現して、学生たちがそれを持ち歩いて教科書は電子データ化されて・・・となるのはもうそこまで来ていると思うのだが(アメリカでは学生たちはKindleにテキストを入れているようだ)、果たして日本では何時?ということだなぁ。

タブレットPCだと、電子化された書籍というよりはもっとインタラクティブな要素のある書籍(というより画面?インターフェース?もしくはソフトウェアになるのか)なんだろうか、求められるのは。

ちょっと真面目に教育の現場を調べないと。

ディザInDesignブログ: 感謝、そして注意事項

感謝、そして注意事項

もう終わった話なので、書くことにしました。

実はうれしいことに、わたしのサイトを見た人から、プログラム作成依頼がありました。サイトを立ち上げて3年とちょっと、ゆっくりながらも続けてこれたのは支持してくださっている皆さんのおかげです。ダウンロード数は把握できていないのでどれだけ使われているのか分かりませんが、書籍で取り上げていただいた方々、セミナーや勉強会で取り上げていただいた方々、口コミで広げていただいた方々、不具合報告や指導をいただいた方々、何度も訪れて頂いている方々など、皆さんに感謝いたします。

で、その依頼ですが、結局実りませんでした。まあ色々あったのですが、ポイントはフリーとして公開する無責任さと、依頼されて納品するという品質責任の違いで、依頼者の想定以上の金額になってしまったことです。

フリーソフトはおおむね「自己責任で使用してください」と書いてありますが、実はその通りで、自己満足のため、責任感なく気楽に作っています。もちろんそうでないものもたくさんありますが、私の場合は特に、「どうせ誰も使わないだろう」とか「こんなこともできるよぐらいの気持ち」で作っております。不具合の連絡をもらった時点で初めて、「あ、使ってたんだ、ちゃんとしたものに直さなくちゃ」となることもあります。

ところが依頼されるとなると話は全然違って最初から「品質責任」があるので、それなりに時間がかかります。となると休日や夜間にやっている話ではなくて、どうしても勤務時間を割かなければならない、すると会社の業務として、会社に了解をもらい、会社の業績とする必要がある、1円でも利益を乗せなければならない、てな訳でそれなりの金額をお願いする必要があるわけです。

今回の場合は私も依頼者側も初めてでしたので、そのギャップに戸惑いましたが、その中で、依頼者に説明するに当たって具体的な作業内容に触れながら、自分自身の品質の捉え方、責任ということを深く考え、またこれを依頼者に理解していただくための説明能力など、多くのことを勉強させていただきました。依頼者には本当に感謝しております。

で、もうひとつ言っておきたいことがあります。わたしのサイトは、あくまでも個人の立場としてやっておりますので、会社の業務として作成したプログラムは一切載せていないことです。会社ではスクリプト作成というよりも自動組版としてデータベースとの連携などが中心になっています。困ったことがありましたら相談に乗りますので、そちらのほうもよろしくお願いします (^^;

ディザInDesignブログ: Google日本語入力beta版とかけまして

Google日本語入力beta版とかけまして

InDesign 1.0 と解く。そのこころは、こんなのありえねー

というわけでGoogle日本語入力beta版をつかってみました。で、それでInDesign 1.0を思い出してしまったのは私だけか。多分そうだろうな。

わたしの InDesign 事始めは 2.0 からです。1.0 については、表組機能がないという時点で「こんなのありえねー」と放棄してしまったのでした。

このGoogle日本語入力beta版もインストールして20分後、「こんなのありえねー」と、さっさとアンインストール。だって読めない文字を入力できないんだもん。変換精度がどうこういう以前に、読める文字しか入力できないってのはどういう仕様なんだ。手書き入力までは付けられないにしても、せめて文字コード表だけでもつけてよ。
これじゃあ例えば「蒟蒻」なんて言葉は、読める人には入力できるけれど、読めない人には入力できないという、とんでもないソフトですよ。
ある意味、これは使う人の知識に応じて能力を発揮するということも言えるのだけれど、とんでもない博識か、その意味を理解できない者しか使えないよなあ。ということで当面私には無用なのでした。

ディザInDesignブログ: InDesignエッセンシャルハンドブック

InDesignエッセンシャルハンドブック

著者のYUJIさんには私のホームページも取り上げて戴いて、非常にありがたく思います。
が、その本の著作権使用料についてトラブルになっていることは、非常に残念です。

『InDesignエッセンシャルハンドブック』における春日出版とのトラブル

どうか早く解決されることを願っております。微力ながらリンクを貼って応援します。

たけうちとおるのスクリプトノート: 30)画像配置05

InDesignCS3,CS4で開いているページにフォルダ内の画像を
比率を指定して配置していきます。

おそらく他のバージョンのInDesignでも動くと思います。

■■■使い方■■■
スクリプトパレットの「画像配置.jsx」をダブルクリックします。
ダイアログが出てきますので設定し、OKボタンをクリックすると配置したい
画像が入ったフォルダを聞いてきますので選択してください。

ダイアログ
全ファイル配置:フォルダ内の全ファイルを配置します。

ファイルを少しずつ配置したい場合
ファイルがあまりにも多いと配置するのも大変ですので配置スタート・終了ファイル番号に数値を入れると1から20までのファイルなどを配置する事ができます。

画像配置の方法
ここで拡大・縮小率を指定します。

「画像配置.jsx」をテキストエディタで開いて初期値を編集する事もできます。

ダウンロードはこちら
img05.zip

InDesign29

InDesign + JavaScript = ?: コピペじゃなくてムーブ

コピペじゃなくてムーブ
通常indesignで組む前に元データを整形する。
学術書籍の場合、章タイトル→執筆者→本文→文献→本文で使用する図表のタイトル・説明、という形に元データがなっていることが多い。
整形の際に、本文中の図表を挿入する箇所(元データの出力紙に指定されている)に、図表のタイトル・説明をカットアンドペーストして移動させているのだが、それが面倒になってきた。図表10点ぐらいのタイトル・説明をいちいちカットアンドペーストする気にもならんというか。

てことで挿入箇所に制御文字列を書き、挿入すべき文字列をタグで囲むことで挿入箇所へ文字列を移動させるスクリプトを考えていたのだが、こうゆう場合、文字列をcontentsで拾うより、moveメソッドを使うのがまっとうなんだな、と(マニュアル読み直した成果)。moveで移動することで、元の文字列の属性も保たれるし。

いやぁ、勉強不足だな、ほんとに。

InDesign + JavaScript = ?: 表の自動調整

表の自動調整
大分前に表の自動調整のスクリプトを書いたのだが、文字数×フォントサイズでセルの幅を算出していて、欧文フォントのみの表の場合だとその算出方法では幅が合わないので修正。

考え方としては列ごとに各セルを調べて、文字列の最初から最後の幅の最大値を列幅とするもの。

//表のあるフレームを選択
var myTable = app.activeDocument.selection[0].tables[0];
var left, right, max, width;

//列ごとに各セルを調べる
for(var i=0; i<myTable.columns.length; i++) {
max = 0;//文字列の幅の最大値、列ごとに初期化
for(var j=0; j<myTable.columns[i].cells.length; j++) {
var myCell = myTable.columns[i].cells[j];
left = myCell.insertionPoints[0].horizontalOffset;//文字列の左端の位置
right = myCell.insertionPoints[-1].horizontalOffset;//文字列の右端の位置
width = right - left + myCell.leftInset + myCell.rightInset;//セルのマージンも計算に入れとく
if(max<width) max = width;
}
myTable.columns[i].width = max + margin;
}


という感じで列幅が文字列の幅にぴったり合う。
が、文字列が二行になってる場合とか、オーバーフローしてる時とかのケースも考える必要があるな。。。

ディザInDesignブログ: うーん、これは参加せざるを得ない

うーん、これは参加せざるを得ない

せうぞーさんとこで知ったのですが、Adobe様が「プレリリースプログラム」(開発途中段階の製品テスト)すなわち、ベータ版テスタの公募をはじめられました。

Adobe - アドビプレリリースプログラム

これは是非参加しなければ。というか、今のところそんな時間はなさそうなのに参加せざるを得ない、ということに。何であんな事書いちゃったかなあ。自分で自分の首を締めてる。忙しくてロクにブログの更新もできてないのに。

そんなわけで早速参加手続きを取ったのですが、半分ぐらいは抽選で外れてほしい気持ち。

ScriptClip: リンク画像のファイル名を取得してクリップボードに入れる.js

ScriptClip
#include 'c.js';
#target 'indesign';
(function(){
//
var LINK_NAME = [];
//リンクの区切り文字
var DEMI = "¥t";
//選択範囲or全てのリンク画像
c(app.activeDocument.selection.length > 0 ? app.activeDocument.selection : app.activeDocument.links).each(function(){
    //リンクの場合とそれ以外
	if(this.constructor.name== 'Link'){
		  LINK_NAME.push(this.name);
	}else{
		c((this.constructor.name== 'Image' || this.constructor.name== 'EPS') ? this : this.allGraphics).each(function(){
			LINK_NAME.push(this.itemLink.name);
		});
	}
});
if(File.fs == 'Windows'){
alert('VBには対応しておりません。');
}else{
//forOSX
try{
var appScript = "try¥r" +"set the clipboard to  ¥"" + LINK_NAME.join (DEMI) + "¥" as text¥r"+"return true¥r"+ "on error¥r"+ "return false¥r"+ "end try";
return app.doScript(appScript , ScriptLanguage.APPLESCRIPT_LANGUAGE);
}catch(e){};
}
})();

InDesign + JavaScript = ?: 今さらながら

今さらながら
InDesign CS3 スクリプティング ガイド JS.pdf
InDesign CS3 スクリプティング チュートリアル.pdf
を熟読中。今まではやりたいことだけに絞って、「オブジェクトモデルを調べる→ネットで調査→スクリプト書く」、という流れだったのだが、前回のエントリのような基本的な部分がわかっていない、というのはまずいな、と。

てことで改めて読み直すと大分頭がすっきりしてきた。
マスターページ辺りの制御はまったくしていなかったのでメモっておこう。

//マスターページ(名前はA-マスター)の取得
var myMaster = app.activeDocument.masterSpreads.item("A-マスター");

//マスターページをアクティブなページに適用
var myPage = app.activeDocument.activePage;
myPage.appliedMaster = myMaster;

//マスターページのアイテム(ラベル設定済み)のオーバーライド
myMaster.textFrames.item("スクリプトラベルの名前").override(myPage);

InDesign + JavaScript = ?: スピードと量

スピードと量
辞書系書籍の制作。
項目数が3000近くあって、頁数は500弱ぐらい。
処理的には単純で反復作業が多いため、個々の処理についてスクリプトで対応しようと考えており、実際スクリプトは問題なく作れるのだが、いざ走らせてみると時間がかかる。

まぁスクリプト一晩走らせといて次の日続きを、というのも手なんだが、なんせ時間がない・・・。

試みに、1ページず追加してテキストフレームを置いて連結させて、というスクリプトで、コンソールでログ吐き出しながら、500ページ分処理すると、ページが進むにつれてどんどん遅くなっていく。
コードの書き方に問題があるとは思いたくはないw。スピードを上げるやり方ってのがあるんだろうか。
もしくは、分散処理を考えるべきなのか(500×1ではなく100×5とか)。

そもそもindesignでは大規模文書には向いていないのか(FrameMakerという手もある)。
結局今回は人力w。

後、躓いたのがテキスト変数へのアクセス。
あ・か・さ・た・な・・・というツメを作るのにランニングヘッド(段落スタイル)でテキスト変数を使うのだが、スクリプトでそのテキスト変数にアクセスする仕方がわからない。SpecialCharacterにはあるんだが、個々の変数にどうアクセスするのか、っつー。
結局、ライブラリにテキスト変数入りのテキストフレーム作って保存しといて、それをコピーという手で解決。んー、アクセスできるのかな?

InDesign + JavaScript = ?: XML

XML
間が空いた。
論文等を組む場合。ほぼWORD入稿。てことでWORDの書式を生かしてIndesignで流し込む、ていう方法でやっているのだが、WORD上での太字とか斜体、上付き、下付きが流し込む際にはがれるケースがあるのが鬱陶しい。

正確には上付き、下付きはOKで、日本語の斜体、太字がはがれることが多いようだ。原稿とモニタのつきあわせはなるたけ避けたい。てことでその書式を保持できる方法を調べなきゃなぁ。

論文の場合、書誌情報が必要なことがあるから、WORD原稿に簡易タグ→XML化→(自動?)組版→書誌情報抜き出し、というのが楽かな、と思ったが、結局ネックなのが簡易タグ。簡易タグ打ち込むより、Indesign上でCMD+1とかでスタイル適用した方が早いんじゃないかと。で書誌情報抜き出しは段落スタイルあたりでJavascriptで。XMLは魅力ではあるのだが、タグを手動でつけるのならしんどそう。

WORDの書式が完成度が高くてそっからXML化するのならよさそうだが。

いずれにせよ、作業効率化、短縮化を図らないと、残業が増えるだけで良くないな。

たけうちとおるのスクリプトノート: 10)簡単なプログラム

091015勉強会の復習です。

まずはテキストフレームを作りました。

	var myDocu = app.activeDocument;
	var myTF = myDocu.textFrames.add();

次にサイズを変更して内容をセット

	var myDocu = app.activeDocument;
	var myTF = myDocu.textFrames.add();
	myTF.visibleBounds = Array(0,0,10,200);
	myTF.contents = "こんにちは世界";

さらに段落スタイルをセット

	var myDocu = app.activeDocument;
	var myTF = myDocu.textFrames.add();
	myTF.visibleBounds = Array(0,0,10,200);
	myTF.contents = "こんにちは世界";
	myTF.paragraphs[0].appliedParagraphStyle = "ABC";

boundsのセット方法とか段落スタイルの当て方とか
調べながらなのでけっこう時間がかかりました。

最後に関数化して繰り返し文で呼び出しました。

for(var i = 0;i < 10;i++){
	BENKYOU(i + "こんばんは",i);
}

function BENKYOU(myMsg,Y1){
	var Y2 = Y1 * 10;
	var myDocu = app.activeDocument;
	var myTF = myDocu.textFrames.add();
	myTF.visibleBounds = Array(Y2,0,Y2 + 10,200);
	myTF.contents = myMsg;
	myTF.paragraphs[0].appliedParagraphStyle = "ABC";
}

さらにif文を入れてif文の練習

for(var i = 0;i < 10;i++){
	BENKYOU(i + "こんばんは",i);
	if(i == 5){break;}
}

function BENKYOU(myMsg,Y1){
	var Y2 = Y1 * 10;
	var myDocu = app.activeDocument;
	var myTF = myDocu.textFrames.add();
	myTF.visibleBounds = Array(Y2,0,Y2 + 10,200);
	myTF.contents = myMsg;
	myTF.paragraphs[0].appliedParagraphStyle = "ABC";
}

これだけで1時間半。おつかれさまです。
これで少しスクリプトになじめたら幸いです。

たけうちとおるのスクリプトノート: スクリプト勉強会復習

091015のスクリプト勉強会
JavaScriptのカテゴリにスクリプト勉強会で話した内容をアップしました。

左メニューのJavaScript基本からお入り下さい。
作ったスクリプトは後日アップします。

大量アップでRSS購読されている人にはスパムみたいになって申し訳ない。

たけうちとおるのスクリプトノート: 09)演算子

計算です。+−×÷割った余り。
これだけつかえれば十分です。

X = A+1;//変数Xに変数A+1を入れる
X = X-1;//変数Xに変数A-1を入れる
X = N*5;//変数Xに変数N×5を入れる
X = N/2;//変数Xに変数N÷2を入れる
X = 5 % 2;//=>1になる。割ったあまり。

var myVal = 3
if(myVal % 2 == 1){
	//もし変数Nを2で割ったあまりが1なら
    alert("変数myValは奇数です。");
}else{
	//そうでないなら
    alert("変数myValは偶数です。");
}

たけうちとおるのスクリプトノート: 08)関数

関数と読んでいいのか、コマンドと読んでいいのか・・・メソッドなのかハンドラなのかなんだかわかりません。

var Adnum=Number("123.456");//文字列を数値にする

みたいに値を返します。カッコがついててそのなかに引数を入れる事が多いです。

alert("こんにちは");

も関数です。

var Adnum=Number("123.456");//文字列を数値にする
alert(Adnum);
var Anum=parseInt("123.456");//文字列を整数にする
alert(Anum);
var val=eval("1+5+6+7+8+9");//文字列を計算する
alert(val);
var myStr=prompt("計算式を入力して下さい");//たずねる
var val2=eval(myStr);//文字列を計算する
alert(val2);

自分でハンドラ(関数)を作る事も出来ます。

myDisp("あいうえお");//自分で作った関数Dispを呼び出す。

function myDisp(myStr){
    //自分が作った関数Dispカッコの中の変数に渡された値が入る。
    alert(myStr + "です。");
}

たけうちとおるのスクリプトノート: 07)くりかえしの処理

くりかえし1
1から10まで順に繰り返す。InDesignなら1ページから10ページまで処理をするという時にrepeat文を使います。くりかえしでもっともよく使う処理が下です。下記は変数Nに0〜9までの値を順番に入れながら実行します。

for(var N = 0;N < 10;N++){
    alert(N);
}

くりかえし2
無限に繰り返す処理を入れある条件が成立したら処理を終わります。

var num=0;
while(num<10){
	alert(num+"です。");
	num=num+1;
}

breakを使って途中で抜ける事も出来ます。

var num=0;
while(num<10){
	num=num+1;
	if(num > 5){
		break;
	}
}
alert(num+"です。");

くりかえし3
配列変数のなかを1つづつ変数に入れます。よく使います。

var meishiFile = Array("たけうち","森田","おおもり","ばば","なかむら");
var arrayCount = meishiFile.length;
for(var N = 0;N<arrayCount;N++){
	alert(meishiFile[N] + "さん");
}

たけうちとおるのスクリプトノート: 06)if文

「もしも〜なら」という処理です。

var AAA = "あいうえお";
if (AAA == "あいうえお"){
	alert("あいうえおです。");
}

「もし〜ではなかったら」の場合は下記のように書きます。

var AAA = "あいうえお";
if (AAA != "あいうえお"){
	alert("あいうえおではありません。");
}

「もしも〜なら」と「そうではなくて〜なら」と「それ以外なら」という
ように条件によって振り分ける場合は下のように書きます。

var AAA = "あいうえお";
if (AAA == "あいうえお"){
	alert("あいうえおです。");
}else if(AAA == "かきくけこ"){
	alert("あいうえおです。");
}else{
	alert("それ以外です。");
}

「もしも〜でさらに〜なら」と「もしも〜または〜なら」というように2つ
の条件によって振り分ける場合は下のように書きます。

var AAA = -10;
if (0 < AAA && AAA < 20){
	alert("変数AAAは0より大きく20より小さい");
}
if (0 > AAA || AAA > 20){
	alert("変数AAAは0より小さいまたは20より大きい");
}

以上のようにif文はかなり簡単ですがif文そのものよりもどこでif文を使う
かという考え方のほうが理解しにくいのかもしれません
(switch文があるのですが、とりあえずは上で代用できます。)

たけうちとおるのスクリプトノート: 05)配列

変数は何でも入る名前のついた入れ物と書きましたが配列はその入れ物の中にさらに仕切りがあり番号がついているイメージです。例えば名刺ファイルがあったとします。その中に名刺を入れます。0から順に名刺を入れていきます。(JavaScriptでは0から数えます)0番目は"たけうち"さん、1番目は"森田"さん、2番目は"おおもり"さん、3番目は"ばば"さん、4番目は"なかむら"さんといった感じです。あとで取り出すときに、名刺ファイルの4番目とか0番目から順番に全部の名刺とかいうように取り出します。

var meishiFile = Array("たけうち","森田","おおもり","ばば","なかむら");
alert(meishiFile[0] + "さん");

=>"たけうちさん"

というようになります。この配列がわかりにくいのですが例えばIllustratorで選択したアイテムを調べると選択アイテムは1つとは限らないので複数の配列で値が帰ってきます。そこから選択アイテムの1つめといったように取り出します。

変数meishiFileに1つめは「たけうち」2つめは「森田」といれる。取り出す
ときはmeishiFIleの0番目というように取り出す。

たけうちとおるのスクリプトノート: 04)変数

変数は入れ物です。名前のついた入れ物で、なんでも入ります。取り出す
ときは入れ物の名前を指定してやると中身を見ることができます。変数には
好きな名前をつけることができます。

var myStr = "こんにちは";
alert(myStr);

var X = 10;
var myStr = "変数Xの内容は" + X + "です。";
alert(myStr);

もちろん変数ですから数字も入れることができます。

var X = 10;//変数Xに10を入れる
var Y = 50;//変数Yに50を入れる
alert(X + Y);//変数X + Yの結果をダイアログに表示

※//はコメントで、プログラムでは--以降の文字は無視されます。

01.jpg

変数の種類と変数の型変換

JavaScriptでは変数の型はあいまいですが、通常スクリプト言語では下記のような変数の型があります。
boolean--真偽値
integer--整数
double--実数
string--文字列
Array--配列

var myNum = 1.5258
myNum = parseInt(myNum);
alert(myNum);

変数1.5258を整数切り捨てしたため結果は1になりました。

var Xstr = "10";
var Ystr = "50";
alert(Xstr+Ystr);

XstrもYstrも文字列なので結果は"10"+"50"で"1050"になります。

var Xint = 10;
var Yint = 50;
alert(Xint+Yint);

XstrもYstrも整数なので結果は10+50で60になります。

たけうちとおるのスクリプトノート: スクリプト勉強会終わりました。

今回はあまり準備しなかったので楽でした。
会場には15人ほど来られたのかな。思ったより多くてびっくり。
6〜8人ぐらいと思ってました。Script組みたいけどきっかけがない人が多いのかな。

内容は、せうぞーさんの表スクリプトの読み解き方とカスタマイズ。
その後ExtendScriptToolKitの使い方や資料。
そして、ざっくりと変数や構文、関数を口頭で説明してこのあたりで1時間。

5分ほど休憩して、InDesignにtextFramesを作成し
visibleBoundsを設定して
「こんにちは世界」を出して、段落スタイルを当てて
それを関数化して繰り返しで10個つくる。
っていうのを一緒に考えながら作って1時間半ほど。
途中、Scriptが動かない人はおおもりさんばばさんにも見てもらいました。

合計2時間半にわたる長丁場。みなさんお疲れさまです。
ノートパソコン持ってきていない人は退屈じゃなかっただろうか?
難しすぎなかったか?伝わったか?いろいろ疑問に残りますが
えむさん、なんでやねんさんからは「わかりやすかったよ」と言っていただき安心。

大人数の部屋であれやったら退屈で寝る人続出かなぁ。

その後、コアなメンバーだけで飲み会に突入。
勉強会に参加してた方ともお話したかったなぁ。それがちょっと残念。
次回あるのでよろしくです。

今日は多言語の勉強会。毎日の分科会たいへんですがえむさんホントにありがとうございます。

(勉強会終了後はその場で解散が多いようです。毎日飲んでたらたいへんだよね。)

資料類は追ってアップしますのでしばらくお待ち下さい。

ディザInDesignブログ: うーん、順当な結果かな?

うーん、順当な結果かな?

何の話かというと企業サイトランキング 2009のことです、はい。毎年見てるんですが、このブログの趣旨から少し外れるので書いてませんでした。今年はネタがないので、そういうことも書いてみようかと。

で、われらがアドビシステムズ様は696社中、556位ということで。ちなみにマイクロソフトは209位、アップルジャパンは390位になっております。
なお、アドビシステムズとマイクロソフトが「情報・通信」という業種、アップルジャパンは「電機・IT」という業種におります。

私のコメントは標題の通り。ほんと、もっと使いやすくなってほしいです。

たけうちとおるのスクリプトノート: 09/10/15日(木)スクリプト勉強会します。

すでに大阪DTPの勉強部屋 分科会の予定にアップされていますが、スクリプト勉強会を開催します。

■場所 メビック扇町 ●10/2〜23日 5F 503号室 ●10/26〜30日 4F 403号室 ●11/2〜12/4 4F 406号室
■日時 10月15日(木) 
 【スクリプトを作る】
 実際に1行づつスクリプトを書いて学んでいきます。
 ノートパソコンを持っている方は持ってきてください。
 無くてもかまわないです。

内容はまだ決めていません。が初心者向けにします。経験者がいらっしゃったら逆に講師役やってもらうかもです。実を言うとカスタマイズから入った方がいいのかif文とか説明した方がいいのか、質問コーナーだけにした方が良いのか悩んでいます。また、一度に理解できる範囲というものがあるのですごい事はなかなか出来ないでしょうね〜。
集ったメンバーのスキルや雰囲気によって内容を変えるかなと思っています。
こんなの作りたいとかあればコメントでも入れて下さいね。

※平日なので仕事の都合上遅れるかもしれませんが、ちゃんとフォローしていただけるメンバーがたくさんいらっしゃいますのでご安心下さい。

メビック扇町主催「この街のクリエイター博覧会4」

hiroshi.jpg

ディザInDesignブログ: 「切手様の枠を作成する」を追加しました

「切手様の枠を作成する」を追加しました

最近更新できてないというか、そもそもInDesignに触ってない。だからネタがない(いや、あるにはあるんだけど、放置)。
たまに書かないといけないと思うのだが、とにかく暇がない。一生懸命仕事もしなくちゃいけないし、家族サービスもせねばならない(今週は栗拾いにいってきたよ)。まあ、そんなところ。

ScriptClip: 選択している画像をPhotoShopで開く

ScriptClip
//2009-09-18 選択している画像をPhotoShopで開く。
//2009-09-29 修正
#include 'c.js';
#target 'indesign';
(function(){
c('selection').each(function(){
	c((this.constructor.name== 'Image' || this.constructor.name== 'EPS') ? this : this.allGraphics).each(function(){
	var bt=new BridgeTalk();
	bt.target = 'photoshop';
	bt.body = uneval(function(file){
		open(File(eval(file)));
		})+"('"+uneval(this.itemLink.filePath)+"');";
	bt.onError = function(e){$.writeln(e.body);};
	bt.send(10);
	});
});
})();

たけうちとおるのスクリプトノート: RGBにし固定画像サイズにリサイズ

■■■このスクリプトについて■■■
Photoshopで画像をRGBに変換した後、画像を設定したサイズにリサイズします。
切り抜き画像なら余白をつけてこのサイズ(固定値)に変換
バックイキ画像ならトリミングしてこのサイズ(固定値)に変換します。

e-shopでカタログ画像を画像のサイズを統一するために作成しました。
クリッピングパスの背景を消去と組み合わせてアクションを作れば最強です。
クリッピングパスの背景を消去

CS2やCS4で動作確認。

背景のある画像はトリミングされる。

切り抜き画像は余白ができる。

■■■インストール方法■■■
Adobe Photoshop CS4/Presets/Scripts/
にスクリプトをコピーし、Photoshopを再起動します。
ファイルメニューのスクリプトから実行できるようになります。

■■■使い方■■■
■■■使い方■■■
スクリプトをテキストエディタで開き下記の部分の数値を編集して下さい。単位はpxです。
var pixcel_w = 520;
var pixcel_h = 390;

Photoshopでドキュメントを開いている状態で使用してください。
なにも選択せずに(パスとかも選択しない)スクリプトメニューからこのスクリプトを選択します。
クリッピングパスが余白をつけてこのサイズ(固定値)に変換
クリッピングパスがなければトリミングしてこのサイズ(固定値)に変換します。

アクションを作成しメニュー項目の挿入からこのスクリプトを呼ぶようにすればフォルダ内全ての画像にバッチ処理できます。

■■■動作解説■■■
RGBニ変換します。
パスを全て調べてクリッピングパスがあるなら余白を付けるように設定します。
画像の解像度を変更します。
キャンバスサイズを設定した値に変更します。

ダウンロードはこちら
clipdel.zip

Photoshop02

長い間リサイズ関連を作成してきましたが
クリッピングパスやなんだかんだで、結局Photoshopスクリプトに落ち着いたという話。(いままでの分も用途に応じて使い分けています。)スピード重視なら下記にしたり。

大量JPEG画像のリサイズ

画像リサイズ

ScriptClip: 選択した画像にクリッピングパスをつける

ScriptClip
//2009-09-18 とりあえず。PhotoShopの最初のパスを決め打ち。
#include 'c.js';
#target 'indesign';
(function(){
 
c('selection').each(function(){
	c((this.constructor.name== 'Image' || this.constructor.name== 'EPS') ? this : this.allGraphics).each(function(){
		//
		try{
		//clippingTypeの値で振り分け
		switch(this.clippingPath.clippingType){
			 //Photoshopパス
			  case 1886613620 : 
 
			  break;
 
			  //エッジの検出
			  case 1685349735 : 
 
			  break;
 
			  //アルファチャンネル
			  case 1634756707 : 
 
			  break;
 
			  //ユーザーによるパスの修正
			  case 1970106484 : 
 
			  break;
 
			  //なし
		      case 1852796517 :
				this.hasOwnProperty ('clippingPath') &&  this.clippingPath.appliedPathName = this.clippingPath.photoshopPathNames[0];
			  break;
		  }
		}catch(e){
		$.writeln(e);	
		}
	});
});
})();

ScriptClip: ドキュメント中から文字を正規表現で検索置換

ScriptClip
//ドキュメント中に存在するテキストを正規表現で検索して置換。複数ある場合は手で修正。
//2009-09-17 とりあえず
(function(){
#include 'c.js';
function myerror (message){alert(message)};
if(app.activeDocument.selection == 0)return myerror('検索する文字列を選択してください。');
//
var SELECTION = app.activeDocument.selection[0];
//
if(!SELECTION.constructor.name.match('Word|TextStyleRange|Text|Paragraph|Character'))return myerror('検索する文字列を選択してください。');
//検索の初期化
app.findGrepPreferences = app.changeGrepPreferences =NothingEnum.nothing;
//検索オプション
app.findChangeGrepOptions.includeLockedLayersForFind = false;//ロックされたレイヤーをふくめるかどうか
app.findChangeGrepOptions.includeLockedStoriesForFind = false;//ロックされたストーリーを含めるかどうか
app.findChangeGrepOptions.includeHiddenLayers = false;//非表示レイヤーを含めるかどうか
app.findChangeGrepOptions.includeMasterPages = false;//マスターページを含めるかどうか
app.findChangeGrepOptions.includeFootnotes = false;//脚注を含めるかどうか
app.findChangeGrepOptions.kanaSensitive = true;//カナを区別するかどうか
app.findChangeGrepOptions.widthSensitive = true;//全角半角を区別するかどうか
////検索文字の設定
app.findGrepPreferences.findWhat = SELECTION.contents;
//
var HIT_WORD = [];
//
c(app.activeDocument.findGrep(true)).each(function(){SELECTION.contents !== this.contents && HIT_WORD.push(this.contents);});
//重複の削除
HIT_WORD = uniq(HIT_WORD);
if(HIT_WORD.length == 0)return myerror(SELECTION.contents +'にヒットする文字列が見つかりませんでした。')
SELECTION.contents =  HIT_WORD.length > 1 ?  "["+HIT_WORD.join (',') +"]" : HIT_WORD[0];
alert('検索が終わりました。');
return;
//UNIQ
function uniq(arr){
    for (var i=0,l=arr.length; i<l; i++) {
        for (var j=0; j<i; j++) {
            if (arr[i] === arr[j]) {
                arr.splice(i--, l-- && 1);
            }
        }
    }
    return arr;
}
})();

ディザInDesignブログ: ハート形を描く

ハート形を描く

InDesignでハート形を描く。それだけのスクリプト。形の好みはそれぞれあると思うので適当に数値をいじってください。

if(app.documents.length == 0){
    alert("開いているドキュメントがありません。処理を中止します");
    } else {
    make_heart();
    }

function make_heart(){
    var obj = app.activeDocument.rectangles.add();
    for ( i = 0 ; i < 4 ; i++ ) obj.paths[0].pathPoints.add();
    var pp = obj.paths[0].pathPoints;
    pp[0].anchor = [-0.5, 12.5];
    pp[0].leftDirection = [-0.5, 13.13];
    pp[0].rightDirection = [-0.5, 11];
    pp[1].anchor = [-22.84, 0];
    pp[1].leftDirection = [-10.35, 0];
    pp[1].rightDirection = [-35.37, 0];
    pp[2].anchor = [-50, 30.63];
    pp[2].leftDirection = [-50, 10.81];
    pp[2].rightDirection = [-50, 71.71];
    pp[3].anchor = [0, 100];
    pp[3].leftDirection = [0, 87];
    pp[3].rightDirection = [0, 100.2];
    pp[4].anchor = [0, 100];
    pp[4].leftDirection = [0, 100.2];
    pp[4].rightDirection = [0, 87];
    pp[5].anchor = [50, 30.63];
    pp[5].leftDirection = [50, 71.71];
    pp[5].rightDirection = [50, 10.81];
    pp[6].anchor = [22.84, 0];
    pp[6].leftDirection = [35.37, 0];
    pp[6].rightDirection = [10.35, 0];
    pp[7].anchor = [0.5, 12.5];
    pp[7].leftDirection = [0.5, 11];
    pp[7].rightDirection = [0.5, 13.13];
    }

単純だけど作るのに結構時間が掛かったぞ。こういうのはホントに試行錯誤しかないからなあ。

2009.9.12 追記

関連記事があります。

InDesign_ハートをすこしつねる

http://www.milligramme.cc/weblog/2009/09/indesign-43.html

すみません、トラックバックを許可していないので、ご不便をお掛けします。

ScriptClip: 字形の変換サンプル。日〜土までの文字の字形を変える。

ScriptClip
//2009-07-29 c.jsの変更に伴う修正
#include 'c.js';
(function(){
var weeks ={
	'正規表現' : "(日|月|火|水|木|金|土)",
	'パターン' : {
		'通常'    :    {'日' : 3284 , '月' : 1860, '火' : 1360 , '水' : 2603, '木' : 3814, '金':1754, '土':3156},
		'括弧' :    {'日' : 8197 , '月' : 8198 , '火' : 8199 , '水' : 8200 , '木' : 8201,'金':8202,'土':8203},
		'白丸' :  {'日':10471,'月':10472,'火':10473,'水':10474,'木':10475,'金':10476,'土':10477},
		'黒丸' : {'日' : 10753 , '月' : 10754,'火':10755,'水':10756,'木':10757,'金':10758,'土':10759},
		'白四角' : {'日':11023,'月':11024,'火':11025,'水':11026,'木':11027,'金':11028,'土':11029},
		'黒四角' : {'日':11296,'月':11297,'火':11298,'水':11299,'木':11300,'金':11301,'土':11302},
		'白角丸' : {'日':11566,'月':11567,'火':11568,'水':11569,'木':11570,'金':11571,'土':11572},
		'黒角丸' : {'日':11835,'月':11836,'火':11837,'水':11838,'木':11839,'金':11840,'土':11841}
	},
	'pList' : function(){
				var List = [];
				for(var x in weeks['パターン'])weeks['パターン'].hasOwnProperty (x) && List.push(x);	
				return List;
		},
	'dialog' : function(TEXT){
				var my_list = weeks.pList();
				var my_dialog = app.dialogs.add({name:'検索置換', canCancel:true});
					with(my_dialog) {
					with(dialogColumns.add()) {
						staticTexts.add({staticLabel:TEXT});
						with (borderPanels.add()) {
							var my_radio_group = radiobuttonGroups.add();
							with (my_radio_group) {
								for (var i = 0; i < my_list.length; i++){
									if (i == 0) {
										radiobuttonControls.add({staticLabel:my_list[i], checkedState:true});
									} else {
									radiobuttonControls.add({staticLabel:my_list[i]});
									}
								}
							}
						}
					}
				}
				if (my_dialog.show() == true) {
					var ans = my_radio_group.selectedButton;
					my_dialog.destroy();
					return my_list[ans];
				} else {
					my_dialog.destroy();
				}
		},
	'changeGlyph' : function(myRange,Target){
			try{
				app.findGlyphPreferences = app.changeGlyphPreferences = NothingEnum.nothing;
				app.findGlyphPreferences.appliedFont  = app.changeGlyphPreferences.appliedFont = myRange.appliedFont;
				app.findGlyphPreferences.glyphID = weeks['パターン'][Target[0]][myRange.contents]; //検索グリフ
				app.changeGlyphPreferences.glyphID =  weeks['パターン'][Target[1]][myRange.contents]; //変更グリフ
				return myRange.changeGlyph ();
			}catch(e){
				//throw e;
				return false;
			}
	},
	'myRegex' : function(my_range_obj,CGP){
			try{
				//検索の初期化
				app.findGrepPreferences = app.changeGrepPreferences =NothingEnum.nothing;
				//検索オプション
				app.findChangeGrepOptions.includeLockedLayersForFind = false;//ロックされたレイヤーをふくめるかどうか
				app.findChangeGrepOptions.includeLockedStoriesForFind = false;//ロックされたストーリーを含めるかどうか
				app.findChangeGrepOptions.includeHiddenLayers = false;//非表示レイヤーを含めるかどうか
				app.findChangeGrepOptions.includeMasterPages = false;//マスターページを含めるかどうか
				app.findChangeGrepOptions.includeFootnotes = false;//脚注を含めるかどうか
				app.findChangeGrepOptions.kanaSensitive = true;//カナを区別するかどうか
				app.findChangeGrepOptions.widthSensitive = true;//全角半角を区別するかどうか
				app.findGrepPreferences.findWhat = weeks['正規表現'];//検索文字の設定
				return c(my_range_obj.findGrep(true)).each(weeks.changeGlyph,CGP);//検索の実行(reverse)
			}catch(e){
				throw e;
			}
	}
};
 
var SOURCE_P = weeks.dialog('元になるパターンを選択してください。');
var TARGET_P = weeks.dialog('置換するパターンを選択してください。');
c('S').each(weeks.myRegex,[SOURCE_P,TARGET_P]);
})();
 

ディザInDesignブログ: ずいぶんのご無沙汰です

ずいぶんのご無沙汰です

DTPの勉強部屋行きたかったな。DTP Boosterも行きたいけどな。先立つものがないので、、、

久しぶりにスクリプト書きました。相変わらず役に立たないスクリプトですが、、、

今回はあまりに役立たずなので、様子見で、スクリプトファイルだけ置いておきます。

矩形を選択して実行してみてくださいませ。数値はデフォルトで構いません。

あー、くだらねぇ、一体どこで使うんだよ、ということであればさっさと引っ込めます。

とりあえず公開しといたらということであれば、説明ページをつけて公開しようかな。

でも、自分でも結構くだらないと思ってるんだけど(世話ねーな)

まあ、だまされたと思ってやってみてください。

右クリックでファイルに保存してください。

「stamp.jsx」をダウンロード


CS以降なら多分動きます

ScriptClip: プログレスバーのサンプル

ScriptClip
function CreateProgressPanel(myMaximumValue, myProgressBarWidth , progresTitle){
	myProgressPanel = new Window('window',  typeof progresTitle == 'string' ? progresTitle : 'Processing....');
	with(myProgressPanel){
		myProgressPanel.myProgressBar = add('progressbar', [12, 12, myProgressBarWidth, 24], 0, myMaximumValue);
	}
	var PP = {
		'ProgressPanel' : myProgressPanel,
		'show' : function(){this.ProgressPanel.show()},
		'hide' : function(){this.ProgressPanel.hide()},
		'max' : myMaximumValue,
		'barwidth' : myProgressBarWidth,
		'val' :  function(val){
			if(typeof val == "undefined")return this.ProgressPanel.myProgressBar.value;
			this.ProgressPanel.myProgressBar.value = val+1;
			this.show();
			this.hide();
			this.show();
			//$.writeln(this.ProgressPanel.myProgressBar.value);
	}
	}
	return PP;
}
 
//cにeachProgressを組み込む
(function(){
	if(typeof c == 'undefined')return;
	var progress = {
	  	'eachProgress' : function(fnc,pbtitle,arg) {
	  	    var l = this.length;
	  	    var res = [];
			var ProgressPanel = CreateProgressPanel(l, 500,pbtitle);
			ProgressPanel.show();
 
			if(typeof fnc == 'function'){
			for(var i = 0;i<l;i++){
				 ret = fnc.call(this[i],this[i],arg);
				 typeof ret != "undefined" && res.push(ret); 
				 ProgressPanel.val(i);
			 }
			}
			ProgressPanel.hide();
			if(res.length > 0){
                return c(res);
			}else{
                return this;
		    }
   	 	}
	}
	c.extend(c,progress);
	//c.extend(Object,progress);
	c.extend(Array,progress);
})();
 

ScriptClip: フォントファミリーとスタイルのリストを作る。

ScriptClip
//ExtendScriptToolKitから利用する
//コンソールに吐き出されるのでこれをコピペして保存。
//テキストエディタで修正が必要。だったりする。
//何に使うの?
(function(){
var pre = "";
$.writeln("var fontFamilyList = {");
for(i=0;i<app.fonts.length;i++){
try{
		check(app.fonts.item(app.fonts[i].name));
}catch(e){
 
}
};
$.writeln("}");
$.writeln("}");
 
function check(f){
if(pre == ""){
	pre = f.fontFamily;
	$.writeln("'"+f.fontFamily+"' : {");
}
if(pre == f.fontFamily){
$.writeln("'"+f.fontStyleNameNative+"' : '"+f.name+"',");
}else{
	pre = f.fontFamily;
	$.writeln("},");
	$.writeln("'"+f.fontFamily+"' : {");
}
}
})();

ScriptClip: インデザインのJavaScriptからGrowlするための関数

ScriptClip
function sendGrowlNotify(title,discription){
var growlNotify ='tell application "GrowlHelperApp"¥r'+
	'set the allNotificationsList to {"indesign"}¥r'+
	'set the enabledNotificationsList to {"indesign"}¥r'+
	'register as application "Indesign Notify" all notifications allNotificationsList default notifications enabledNotificationsList icon of application "Adobe InDesign CS3"¥r'+
	'notify with name "indesign" title "'+title+'" description "'+discription+'" application name "Indesign Notify"¥r'+
	'end tell';
	app.doScript(growlNotify , ScriptLanguage.APPLESCRIPT_LANGUAGE);
}

InDesign + JavaScript = ?: グループでの作業

グループでの作業
自分はある程度スクリプトを理解しているのだが、部下もしくは同僚がそうでない場合どうするか、という問題。

どう考えたって、「手作業」VS「タグ付け+半自動化」での後者が圧倒的に処理速度が速い。では、スクリプトを理解してもらえるように勉強してもらうのがよいのか、というとこれも問題。
個人の学習意識の問題だからな・・・。
自分にしても、楽しいから独学で勉強したのであって、強要されていたら勉強したかどうか。

てことを考えると、スクリプトを誰にでも使えるようにUIを設定したり、エラー処理できるようにしておくとか改良しておく方が早いかな。
敷居の低いスクリプト作っとけば、ネットで公開とかも可能だろうし。現状のスクリプトでは公開できるレベルではないw

スクリプトで出来る作業は集約して、一括スクリプト処理しよう。頭を使う仕事に時間を使いたいわね。

InDesign + JavaScript = ?: easily

easily
最近1冊組んで、2冊修正。やはり細々したところで時間がかかる。

新たに組んだ分で言えば、余計な半角スペースの除去とか、マイナスとかハイフンを音引きに変換、文献リストの形式の統一、演算記号の前後をベタとか・・・。こういうのを修正していくのがしんどい。
ここらへんは、対話型のスクリプトを作って対応するしかないか。一括処理だと怖すぎなもので。どの本についてもこういう処理は必要になってくるわけだし。

修正分だと、二分ダーシとかの統一とか。ここもスクリプト処理かな。新規作成についてのスクリプトはある程度汎用性を持つように作り直したから、次は修正用スクリプトの見直しですね。

これから組む分について。文字データの修正をどのタイミングですべきか。前の会社では、初期は分担作業をしていて、図作成+原稿データの修正(原稿整理でのアカの修正)+データの構造化を別の人にやってもらっていたのだが、データの構造化が終わったワードのファイルに文字修正のマクロ(全角→半角とか、カンマ、ピリオド、括弧の統一ぐらい)を当てていた。ただ、後期はIndesignにデータを流し込んでからスクリプトで文字修正を行っていた。

将来的なことを考えると、流し込む前の構造化されたデータをある程度完全なものにしておきたい気もする。構造化されたデータには、表のデータ、図表のキャプション、図のファイル名、図の挿入箇所も全て記述されていて、組版以外にも流用できる形式になっていて、本文データも文字修正がなされていた方がいいような気がするこの頃。

ま、ほんとはワードじゃなくてプレーンなテキストファイルがいいんだけどな。作業フロー考えなきゃなー。

文字ベースの書籍でないケースはどうするか、という問題もあるし。グラフィックフレームの処理についても少し調べておかないと。ラスタ画像はIndesign上である程度縮小してもいいような気がするし。

ディザInDesignブログ: セル中で改ページをする表その後

セル中で改ページをする表その後

ちょっと昔のエントリで、セル中で改ページをする表というのを書きましたが、実はそれが本当に使えたかどうか確認してませんでした。
そこで、くだんの後輩に電話すると、「とっくに納まってますよー」との返事。え? 特に問題なかったの?
簡単な検証しかしてなかったのに。「えー、そうなんですか。お~まちさんからすごくいい方法を教えてもらったよってみんなで喜んでたんですよ」

どうも杞憂だったらしい。データをもらって確認。おぉ、ちゃんと言った通りにできてる。この分じゃ出力も問題なかったらしい。よかった、よかった。しかもA4横組だし。話もちゃんと通じてた。

で、その後輩は8月に結婚するんだって。よかった、よかった。

InDesign + JavaScript = ?: 未来

未来
将来性で考えると、Indesignで書籍を作ったままでいいのか、というお話。
近い将来では、とりあえずPDFにしとけば問題なさそう。が、今の会社の特殊性を考えると、PDFだけではビジネスにならない。結局e-learningの教材的なものを作れるか、てことと、どれだけ使いやすさをUPさせれるか、ということ。

Indesignからフラッシュへ、とかIndesignからWEBパブリッシングへ、という流れをふまえてCS4に色々機能が付加されたわけだが、どこらへんまでできるようになっているのかを調べておかなきゃなぁ。

InDesign + JavaScript = ?: バグ?

バグ?
よく使うスクリプトはショートカットを割り当てるのだが、そのショートカットの設定が消えることがある。
全ての設定が消えるのではなく、スクリプトだけ。

選択オブジェクトを次の頁、または前の頁へ、頁の同じ位置に移動させるスクリプトを多用していて(戻ってきた校正のアカ修正で図表がずれることが多い)、ショートカットを割り当てていたのだが、たまーにショートカットが効かないうという。。。

いちいち設定しなおすのは鬱だ。
設定ファイルを一時的に退避させとくしかなさそうだなぁ。
スクリプトフォルダにスクリプトを追加したときに設定が消えているような気がするが。

ディザInDesignブログ: どこかで見たことあるような

どこかで見たことあるような

マイコミジャーナル
http://journal.mycom.co.jp/news/2009/06/26/048/index.html

この仕組みどこかで見たことあるよなあ。

InDesign + JavaScript = ?: そろそろ

そろそろ
関数をライブラリ化するとか、スクリプトをまとめておかなければ。
変数名も結構適当に使ってるしな・・・。

それとUIもしくはダイアログ使っても少し汎用性の高いスクリプトにしておこう。いちいちコード書くのも面倒になってきた。

今日やっていたのは、突き出しインデントのためのスクリプト。たぶんだけど、Indesignはフレームグリッドをはみ出すようなインデントを設定できない。今組んでる書籍は、横組みで、版面は45W×40Lで小口を5Wほど開けるというレイアウト。ただ、節と項の見出しについては、45Wのサイズで作る。つまり、小口側に見出しが飛び出してるということ。

一番楽に作るには・・・と考えると、フレームグリッドは40W×40Lにしておいて、節と項だけアンカーオブジェクトにしておく、というのが結論。ま、こうゆう場合に節でスクリプト一つ、項で一つ、と分けるのではなく、スクリプトは一つで、ダイアログで両方に対応できるようにしておくといいかな、と。

UI設定するのが面倒なだけなのだが。

ディザInDesignブログ: うーん、どこが悪いんだろうね

うーん、どこが悪いんだろうね

InDesignデータからテキストを抽出する(ドラッグ&ドロップ)

InDesignの勉強部屋BBSからの続き。
これを作った時はWindows 2000だったんだけど、それから月日が過ぎて... VBScriptの仕様が変わっちゃったのかねえ。テキストファイル自体は作成されて、エラーも出てなさそうなので、InDesign の問題ではなさそうなんだけど。WindowsのバージョンによってVBScriptの実行結果が異なるのかなあ。
でもXPではテストできないし。しかも、よりによってWindows 7 RC なので。でもこの環境では問題なさそうなんだけどなあ。

InDesign + JavaScript = ?: 再現可能性

再現可能性
というか将来性のお話。前回の続きでもあるのだが、初校作成のための自動化ってのはほぼ達成できて、これからは再校作成(=初校の修正)のことも考えなければ。

例えば、見出しのスタイルをIndesign上で図形を作ってアンカー化したとする。初校修正時に、その図形の一括修正のアカが入ったとする。そうしたときに、チマチマ一つずつ修正するのはやってられないから、おそらく、スクリプトで条件に合う図形を抽出(例えば、Rectangleで線幅2ミリとか、塗りがK20とか)して修正するはず。まぁそれでも別に問題ないのだが、それだったら初校作成時のスクリプトでその図形にラベルを指定しておけば後から一括修正するときに楽だ、ていうお話。

と考えていくと、ラベルよりもオブジェクトスタイルをもっと活用すべきと気付いた。そうすれば色の一括変更もスクリプト経由でなく行えるし。
その手の図形とか図のキャプションだとか、本文のフレームグリッド上のオブジェクトについてはいったんオブジェクトスタイルを適用する、という方向で行くのがいいのかもなー、と思ったり。

ボリュームの問題。
今まではせいぜい多くて300ページぐらいの書籍。Indesignを使い始めた頃は、各章ごとにドキュメント作って、ブックでまとめる、とやっていたのだが、逆に面倒になってきたので(スタイルを同期させたりブック全体にわたっての検索置換が面倒だったり)、せいぜい前付、本文、後付ぐらいでドキュメントを分けるようにしていた。ノンブル的に考えると前付は別、てのがほぼ100%だったので、3部構成がちょうどよかったわけだ。

で転職後。1000ページぐらいの本も組むことになると、さすがに本文を一つのドキュメントって訳には行かないかなぁ、と。マシンのパワー次第なのだろうか。
ケース次第で、各章ごとにドキュメントを作る方法を採らざるを得ないだろうから、予め準備しておかないと。

InDesign + JavaScript = ?: 再利用

再利用
将来的に改訂版の可能性がある場合、それを見越して組版しておいた方がよい。
例えば、節の見出しをデザイン的見地から、イラレで作ってアンカーオブジェクト化したり、もしくはIndesign上で図形と組み合わせてアンカーオブジェクト化しておくと、改訂版作成の時、本文からテキストデータを取り出したいときに問題が起きる。
つまり節の見出しはIndesign上では図形オブジェクトとされているので文字データとして取り出せない。
同様に、Indesignの目次機能を使う時に、データが取り出せない。

そういうことを考えると、段落スタイルの段落境界線を駆使して節などの見出しのスタイルを作るか、もしくは背後にスタイル用の図形をアンカーオブジェクトとして配置しておいた方がいいのかも。

ただ、問題があって、アンカーオブジェクトとして配置してアンカーオブジェクトの設定をカスタムにしておくと、本文よりも前面に配置されてしまうんだわな。インラインで配置すればいいのかもしれないが、細かく設定できないし。むむむ。

InDesign + JavaScript = ?: 画像読み込みスクリプト

画像読み込みスクリプト
原稿データの該当箇所にファイル名を入力。ファイルは特定のフォルダにまとめておく。
フォルダを指定してファイルを読み込むスクリプトを作っておいて、ファイルオブジェクトを配列に入れて、ファイル名と一致したら、アンカーオブジェクトとしてファイルを配置しておく。

配置が終了したら、アンカーオブジェクトを解除して、レイアウトを調整する。

その部分がちょっと面倒だが、いちいちBridgeとかから放り込むよりかは、はるかに楽だ。アンカー化してあるおかげで、図の挿入箇所を原稿みて確認する必要もあまりないし。

準備用スクリプト+段落スタイルの適用スクリプト+画像読み込みスクリプトの三段階で作業しているのだが、一つにまとめてもいいかもな。

InDesign + JavaScript = ?: 効率化

効率化
転職して2本目の組版。

図版の点数が大幅に増えたことに対応しなくてはいけない。
前の会社では、だいたい1冊辺り、200ページ弱で図版はせいぜい50点ほど。しかもスキャンして文字を打ち込み直すぐらいのものだったのだが、今の会社では、ページ数が400以上、そして図版点数も200点以上がざらにありそうとのこと。

今回は、今のところ8割入稿で、約300ページ、図版約250点というボリューム。250点の図版をいちいち手作業でドラッグ&ドロップするのもしんどいので、スクリプトで対応することにした。

それ以前に、図版をトレースするのがしんどかったが・・・。最初はマウスでちまちまやっていたが、これではかなわんということで、急遽ペンタブレットを導入。それで大分楽にはなったが何せ時間がかかる・・・。
こればっかしは、慣れの問題で、スクリプトというか自動化できないので地道に続けるしかないな、と諦める。

図版作成後は、原稿データを構造化(スクリプト適用のためにタグ付け)して、本文にデータを流し込み、スクリプト処理。その後、図版流し込み用のスクリプト適用して、手動で調整。

図版作成で2週間弱、データの構造化で2日、組版で2日。自動化万歳!である。

会社の作業モニタが自宅より小さいのが若干ストレスになる。ここらへんは交渉しないと。。

InDesign + JavaScript = ?: フレームグリッド

フレームグリッド
テキストフレームの種類が区別できないと書いたのだが、間違いのようだ。
テキストフレームのプロパティのgridDataからフレームグリッドの設定値が取得できる。後で調べとこ。

bs-factory: ディレクトリを変えました

ディレクトリを変えました
http://www.uni-factory.jp/bs-factory/今後の更新は上記URLでやります。http://www.myu-k.co.jp/~hitori/こちらも上記URLに変わっています。

InDesign + JavaScript = ?: illustratorのプラクティス

illustratorのプラクティス
てことで、今更ながら初歩から勉強し直してるんだが、いやぁ、どんだけ時間を無駄にしていたのか、てくらい基本テクニックがなっていない。script使うまでもなく、人力でもっと効率化というか短縮化できるじゃないか!

てことはindesignでもまだまだ人力部分で効率化がはかれる部分があるはずってことだ。まぁ確かにそれほどキーボードショートカットを駆使はしてないからな。

おそらく、仕事では超初歩的なメディカル・イラストを描かなきゃいけないはずだから、ほんとトレス術を修得しておかないとな。

bs-factory: 写真その16

写真その16
全部で77枚です。

bs-factory: 写真その15

写真その15
全部で31枚です。

bs-factory: 写真その14

写真その14
全部で26枚です。

InDesignのVBScript学習帳: No.004 第2章~Scriptのデバッグや新しい記述の方法について

InDesignのVBScript学習帳
Scriptを完成させた後、実行させてみるとエラーが出ることがあります。Scriptの書き方が間違っていたり、アルゴリズムが良くなかったりすると動かないのです。
動かなったScriptを動くように修正していく作業の事を「デバッグ」と呼びます。
最初の頃はエラーが出て、動かない理由が分からずに苦労することも多々あると思います。そういう苦労から解放されるためにも、エラーが出ないように書いていく方法を勉強していきましょう。
まずは、存在しないメソッドやプロパティを呼び出した際に出る警告を見てみましょう。新しい用語が出てきましたので説明をしておきます。
メソッドとは、オブジェクトが持っている機能の名称のことで、検索するときやテキストフレームを移動させたりするときに使うものです。
プロパティとは、オブジェクトが持っている値のことで、テキストフレームに入力されている文字列やテキストフレームの座標、ルビ文字などのことです。
では、次の名称でSubプロシジャーを作ってください。
Sub デバッグのお勉強()
さて、次に示すコードを入力してください。
Dim MyInDesign As InDesign.Application
Set MyInDesign = CreateObject("InDesign.Application.CS")
With MyInDesign
Set MyDoc = .Documents.Add
MyDoc.SaveAs "C:\test.indd" '保存
Set MyDoc = Nothing
End With
Set MyInDesign = Nothing
上記のコードでは新しい記法が出現しました。その説明をしておきます。
3行目のWith MyInDesignという構文ですが、省略するときの記法になります。本来4行目を記述するときは、Set MyDoc = MyInDesign.Documents.Addと記述するのですが、MyInDesignを記述するのが面倒なので、Withブロックで指定しています。例文では1行しか対象になるコードがありませんが、これが何百、何千もあると大変です。さらにWithブロック内の省略については高速化できるという「おいしい」特典もあるのです。このWith ~という構文はEnd Withが書かれている行の前まで有効になりますので、この範囲内で『.』キーを押すと、Applicationクラスのプロパティやメソッドが表示されるようになります。今後の記事でも多用していくであろうと思いますので、「省略記法なんだな」と思って頂ければ結構です。
では、Scriptの流れを説明いたします。4行目で新規ドキュメントを作って参照できるようにMyDocに格納しています。5行目のMyDoc.SaveAsに保存したいFileのPath("C:\test.indd")を指定して保存しようとしています。
実はこの5行目がエラーの直接原因となっています。
2-001
エラーの理由は、MyDocに格納したドキュメントのメソッドSaveAsを呼び出そうとしていますが、そのメソッドが存在しないのでエラーです。という事をVBEが教えてくれたのです。さて、正解のメソッドは何だったのでしょうか? それを調べる方法がありますので、次の画面を見て下さい。
2-002
この画面は、オブジェクトブラウザといいます。タイプライブラリで定義されたプロパティやメソッドを検索することができます。
◆ダウンメニュー【表示(V)→オブジェクトブラウザ(O)】と選択します。
このオブジェクトブラウザは『F2』キーを押すことでも表示できます。
画面ではオブジェクトブラウザのウィンドウ左上のコンボボックスをクリックして選ぶ所が表示されています。InDesignがハイライトしていますが、ここには参照設定で選択したタイプライブラリが表示されます。参照設定をしていない時にはInDesignが選べませんので、参照設定をしておいてくださいね。
InDesignを選ぶと、左下にInDesignで定義されているクラスの一覧が表示されます。右下には左下で選択したクラスのメンバが表示される仕組みになっています。メンバにはメソッドとプロパティの両方が表示されます。
最下部のグレーの領域には、メンバに表示されたプロパティやメソッドの説明が英文で表示されます。
では、InDesignのタイプライブラリを選択したので、正しいメソッドを探しましょう。
画面の検索ボックスにキーワードとして「Save」と入力して『Enter』キーを押して下さい。「SaveAs」で検索してもダメですよ。
2-003
画面が切り替わり、検索結果にいくつかのメンバが表示されました。このメンバにはSaveAsはありません。ですからエラーを表示されたんですね。
正しくは「Save」でした。最下部の説明には英文で引数について書かれていますが、本章では触れません。オブジェクトブラウザを閉じて下さい。
5行目のSaveAsをSaveに修正して実行してみましょう。正しく処理が完了すればCドライブにtest.inddというドキュメントデータが保存されていると思います。
          *
また、この章で勉強して欲しい事がもう1つあります。それはインテリセンス機能をフルに活用することです。そもそもインテリセンス機能を使って記述していれば、上述のようなエラーは起こり得ないのです。
それでは間違っていたScriptをもう一度準備して下さい。
Dim MyInDesign As InDesign.Application
Set MyInDesign = CreateObject("InDesign.Application.CS")
With MyInDesign
ここまでは普通に記述します。4行目の変数MyDocにはDocumentを入れることが分かっていますので、MyDocの型(種類みたいなモノです)をInDesign.Documentとして宣言しましょう。4行目の前に次の1行を入れることにします。
Dim MyDoc As InDesign.Document
この宣言を入れることによって、MyDocはInDesignのDocumentを格納する変数として宣言されることになります。この行を加えることでMyDocにもインテリセンス機能が働くようになります。
元の4行目はそのままでOKです。
Set MyDoc = .Documents.Add
では元の5行目のMyDocの後の『.』を選択して、さらに『.』キーを押してインテリセンス機能の画面を表示させましょう。
2-004
画面では修正するSaveAsの項目をSaveにしたいので、Saveをハイライト表示させています。ハイライトさせたら『Tab』キーを押して下さい。『Enter』を押すと、改行されてしまいますので注意して下さい。
MyDoc.Save "C:\test.indd" '保存
これ以降には修正がありませんので、そのままにしておきましょう。
Set MyDoc = Nothing
End With
Set MyInDesign = Nothing

InDesignのVBScript学習帳: No.003 第1章~ExcelVBAでの開発に慣れてみよう

InDesignのVBScript学習帳
ExcelとはMicrosoft社のOffice製品群のアプリケーションです。この位の説明で大丈夫でしょう。InDesignを使用している所では、十中八九所有しているかと思われます。もしお持ちでない場合には、本講座の内容が実際に体験できないと思います。その際には大変心苦しいのですが、導入して頂くか、デバッグ作業やコーディング効率が落ちてしまいますがScriptのマニュアルを片手に頑張るか、JScriptのデバッガを頼りにJScriptで頑張ってみるという方法もございます。私は現時点でJScriptには疎く、コードを読んで概略を掴む程度のスキルしか持ち合わせていませんのでご質問などには完全に対応できないと思います。ご了承くださいませ。
さて皆さんは「マクロ」という言葉をお聞きになったことはありますでしょうか? この「マクロ」というのは、アプリケーションを内部または外部からコントロールするための方法なのですが、今回はそのマクロを使ってInDesignを外部コントロールしようという企画です。
始めてInDesignをコントロールするので、できれば開発環境を用意した方が便利です。そういう意味からも本講座ではOffice製品群のVBEを使ってInDesignをコントロールしていくというアプローチをしています。
ではExcelを起動してください。さらにマクロを書くためにVBEを起動します。
001
◆ダウンメニュー【ツール(T)→マクロ(M)→Visual Basic Editor(V)】と選択します。デフォルトのショートカットでは『Alt+F11』ですから、そのショートカットで覚えて頂ければ大丈夫です。
002
画面が切り替わって「Microsoft Visual Basic」というウィンドウが開いたと思います。
では「プロジェクトウィンドウ」ですが、Book1というxlsファイルに標準で3つのシートを作る環境設定の場合、画像のようにSheet1からSheet3までが用意されます。そしてThisWorkbookというものも用意されます。
今回はThisWorkbookにマクロを書くことにしますので、このThisWorkbookをダブルクリックしておいてください。
003
さて、今度は「参照設定」をします。
◆ダウンメニュー【ツール(T)→参照設定(R)】と選択します。
次の画面が表示されます。
004
参照設定についてですが、InDesignのScriptを書くときにコード補完(インテリセンスと呼ばれています。)させると便利なので、Scriptを書く前に設定しておきましょう。
005
画面では「Adobe InDesign CS Type Library」にチェックをしましたが、お手持ちのInDesignのVersionによっては画面の表示が違いますので、対象となるInDesignのVersionを選んでください。
チェックしたらOKボタンを押して設定は完了です。
006
先程ThisWorkbookをダブルクリックしておいてもらいましたが、ダブルクリックすると新しいウィンドウが開いてカーソルが立ちます。その部分に以下のように入力してみてください。
Sub InDesignで新規文書を作成する
ここまで入力したら『Enter』キーを押して下さい。
自動的に()がSubの行末に付加され、さらにEnd Subという行が下に生成されます。
このSubからEnd SubまでをSubプロシジャーと呼びます。
この間に実際のコードを書いていきます。
画面では途中まで入力している状態になっていますので、同じように次の行を入力してください。(IMEをOffにしておくと良いです)
Dim MyInDesign AS InDesign
と入力したら『.』キーを押して下さい。画面が変化します。これがインテリセンスしている所です。そのまま続けて『App』と入力するとその部分まで移動してくれます。Applicationがハイライトしたら、『Enter』キーを押して下さい。
次の行にカーソルが移動しますので、次のように入力してください。
Set MyInDesign = CreateObject("InDesign.Application.CS")
ここはお手持ちのInDesignのVersionによって書き換えて下さい。
まだ古い環境の方がいらっしゃるかもしれませんので、Version2の宣言も書いておきます。
Set MyInDesign = CreateObject("InDesign.Application.2.0J")
InDesignCSならSet MyInDesign = CreateObject("InDesign.Application.CS")
InDesignCS2ならSet MyInDesign = CreateObject("InDesign.Application.CS2_J")
InDesignCS3ならSet MyInDesign = CreateObject("InDesign.Application.CS3_J")
でOKです。1つのVersionしかインストールしていないのであれば、次のように書くこともできます。
Set MyInDesign = CreateObject("InDesign.Application")
最新のVersionのInDesignが自動起動します。これまで書いてきたInDesignをコントロールする技術をActiveX/Comと呼びます。オートメーションまたはキック起動などとも呼びます。
さて、SubプロシジャーにDim文とSet文の2行を入力しましたが、これがInDesignをコントロールする最低限の宣言です。これは基本ですので、コピペした方は、煩わしくても打ち込んで覚えて下さいね。では早速、肉付けをしていきましょう。3行目に次のように入力します。
MyInDesign.Documents.Add
4行目に次のように入力します。
Set MyInDesign = Nothing
007
画面では入力し終わった状態を示しています。
以上でScriptが完成しました。早速実行してテストしてみることにしましょう。
008
画面のように右三角のアイコンをクリックするか、プロシジャー内にカーソルを置いたまま『F5』キーを押してマクロの実行をしてください。上手くInDesignが起動して新規文書が作成されていれば成功です。

InDesignのVBScript学習帳: No.002 序章~経緯と経過を回想(お急ぎの方は、読み飛ばしてもらって構いません。)

InDesignのVBScript学習帳
さて、思いつきから始まった本企画ですが、最終的な目的はScriptをラクして作れるスキルを身につけようというものです。
私も最初の頃は失敗の連続で、マニュアルが理解できない・実際に動かしてもエラー連発・そして諦めモード突入という状態でした。
そんな私が参考にさせて頂いたのが、かの有名な「PageMaker & InDesign Scripting」というサイトでした。このサイトには自作スクリプトを作る過程で情報収集している最中にたどり着いたのですが、実際にInDesignをコントロール出来ている点、VBで開発された点などを知って、俄然やる気になったのを思い出します。
勉強がてらにサンプルScriptをCD-ROMからコピーしてきて、構文を読み解きました。さらに、そのサンプルに徐々にコードを継ぎ足して、別の機能のScriptに仕立てる練習もしました。
そんなこんなで実用とは言えないけれども、十数種類におよぶサンプルScriptが出来ていたので、Scriptのサイトを立ち上げました。
社内的な環境整備によりInDesign2からInDesignCSに移行した頃、本格的にScriptにハマることになります。日々、Scriptを作っては作業負担を減らせるようになり、今では難有りの案件に最初からScriptを作って対応できるレベルまで来ました。
Google等の検索エンジンに「InDesign Script」と入れて検索すると、私が始めてScriptingした当時より大量に情報が出てきます。これには感慨深いものがあります。また、この企画を通してさらにWebサイト上に有益な情報を蓄積できるように精進してまいりますので、どうぞ皆様よろしくお願いいたします。

InDesignのVBScript学習帳: No.001 はじめに

InDesignのVBScript学習帳
「InDesignScripting」の講座と呼べるかどうか怪しい感じですが、敷居が高すぎる現状を打開すべく、拙い解説ですが気力の続く限り更新していきたいと思っていますので、どうぞよろしくお願いいたします。

ひとりぶろぐ: DTP: <a href="http://moyashi.air-nifty.com/hitori/2006/11/adobe_indesign__9ff0.html">Adobe InDesign CS / CS2用JavaScript「表組基本設定(履歴付き)」ver.1.0.4(2006.11.30版)</a>

Adobe InDesign CS/CS2の表組みの設定を行なうJavaScriptで書いたユーティリティです。何となく流れでメンテしたのでアップしてみます。Windows、Mac OS Xどちらでも動くと思います。

DTPWikiに上がっている同バージョンと同じものです。

自分以外にも、いき♂さんがいじっているので、ここのものが最新版であるとは限りません。DTPWikiの方も見てみてください。

「table_initialize20061130.zip」をダウンロード

Indesignscreensnapz002

Tableinitialize104win

///////////////////////////////////////
// JavaScript for InDesign CS2
// 表組基本設定(履歴付き)ver.1.0.4
// 2006.11.30版
///////////////////////////////////////

Copyright [2006.11.30] [こむぎ]
変更点:各種線種も選択できるようにした。myDialog.destroy()追加

Copyright [2006.11.29] [こむぎ]
変更点:結合されたセルがあっても大丈夫なようにした

Copyright [2006.10.24] [いき♂]
変更点:表の内側の線を縦横別々に指定できるようにした

Copyright [2006.08.09] [いき♂]
変更点:表の上下と左右の線を別々に指定できるようにした

Copyright [2006.08.07] [こむぎ]

Apache License Version 2.0(「本ライセンス」)に基づいてライセンスされます。
あなたがこのファイルを使用するためには、本ライセンスに従わなければなりません。
本ライセンスのコピーは下記の場所から入手できます。
http://www.apache.org/licenses/LICENSE-2.0

動作確認環境

Mac OS X版InDesign CS/CS2
Windows版InDesign CS/CS2

インストール

Mac版
/Applications/Adobe InDesign CS2_J/Presets/Scripts/ にtable_initialize104.jsをコピー。

Windows版
C:\Program Files\Adobe\Adobe InDesign CS\Presets\Scripts にtable_initialize104.jsをコピー

バージョン違いについては、適宜読み替えてください。

実行方法

「ウィンドウ>自動化>スクリプト」から実行するか、
「編集>キーボードショートカット...」の「機能エリア>スクリプト」で
キーボードショートカットを割り当てる

使い方

表組かセルかセルの中身を選んだ状態で起動。
セルの線の線幅と、表の上端・下端の線種・線幅、表の右端・左端の線種・線幅、セルの余白を指定できます。
一度入力した数値、線種は、次回起動時にも覚えています。

項目間はTabかShift+Tabで移動可能です。
EnterキーでOKボタンを押せます。

履歴は、スクリプト設置ディレクトリに「table_initialize104_history.txt」という名前で保存されます。