2008/08/30

索引入力支援

間が空いてしまった。
その間に、だいぶスクリプトも充実してきた。初校の赤の修正時に、索引も入力するのがスタンダードになってきたので、以前のやり方をも少し洗練化。

読みを入力する手間を省くために、索引を拾う際に、既存の索引項目とマッチするものを、候補として選択できるようなダイアログを出せるようなスクリプト。
基本は、選択文字列と索引項目の比較、というもの。
これはかなり便利になった。事項索引については、これでほぼOK。

問題なのは、人名索引。人名は、執筆者がマーキングするのはではなく、機械的に拾うケースが多い。本文中では、ファーストネームは省略されているのが普通だが、索引では補完しなければならない。
そこで、文献リストとの照合作業が必要になってくる。その作業は、別のバイトにまかせて、イニシャルを逐一校正紙に記入してもらっていたのだが、それを確認しながら、入力していくのも面倒。

本文中での人名→文献リストとの照合→出版年数での判別→イニシャル補完。
という一連の作業を、効率よく且つミスらずするには、結局人の手をなるたけ省く――機械的に処理することは機械に任せる、ことが最短かと。
文献リストから人名を抽出してリスト化しておき、人名索引を拾う際に、マッチするものを候補として挙げる、というスクリプトを作ってみたんだが、これがかなり便利。

人名リストから自動的に拾ってく、てのができると一番楽なんだけど、それはちょっと怖いな。どうやって判別させるか、かなり工夫しなくてはいけない。

2008/08/05

索引エラー

前日のつづき。
スクリプトで索引を拾っていって(読みは空白)、後から索引パレットで読みを入力していくと、やはり固まる。
スクリプトで一括して読みを埋めようかと思って、以前作ったスクリプトを走らせてみると、重大なエラー云々というメッセージが出て、インデザインが落ちる。

対処方法がわからんな・・・。
しゃーないので、読みが空白の分の索引項目はすべて除去して、索引拾いなおし。
索引拾い応援スクリプトというか、文字列を選択して、(スクリプトに割り当てられている)ショートカットキーを押したら、その選択部分が索引項目になって、プロンプト画面がでて、読みを入力できる、というスクリプトで、カーソル移動とかの余計な動作を省く。
でも、結局拾いなおすのに1時間ぐらいはかかって、まぁまぁ疲労してしまった。

後から読みの入力、てのがうまくいかないのは、厳しいなぁ。どーしたものか。

2008/08/04

索引のスクリプト

索引項目を追加するとき、ダイアログウインドウを開いて、読みにカーソルを移動させて、入力するってのが、非常にわずらわしい。

そもそも、索引語はえてして頻出するので、拾う度に、読みを入力するか、もしくは参照ポイントを追加していく、てのが面倒なわけで。
そこで、選択文字列をスクリプト経由で索引に追加するスクリプトを作って、ショートカットキーを割り当て、快適に作業していたのだが、たまたま索引パレット上で、ある用語の読みを入力してみたら、固まってしまった。
むむむ。
索引追加のダイアログウインドウ上では、読みが不完全だと、警告が表示されて、読みをきちんと入力するまで、先に進めない。そこらへんが問題?

しゃーないので、読みの部分も、スクリプト経由で入力するか。まぁ、そっちのほうが楽なんだけど。
索引パレットは、読みを入力すると、すぐパレットが更新されて、並び替えされてしまって、大変なので。

レイヤーとな

執筆者がインデザインを扱えるとのことで、データを渡したのだが、レイヤーは使わないのですか、というお問い合わせ。

その存在、すっかり忘れていました。
イラレを使うときは、レイヤーを駆使しまくっていて、インデザインを始めたころ、同様に、レイヤーでオブジェクトを操作しようと思っていたのだが、CS2では、レイヤーパレットにオブジェクトが表示されない、ということでかなりがっかりきて、それ以来使っていなかったような気がする。どのレイヤーにどのオブジェクトがあるのかが、(イラレのようにパレットで)視認できないと、危険だと思ったわけで。

で、今回の問い合わせで、ハッとしたのだが、たとえば、索引部分のマーカーとかを別レイヤーでマーカーオブジェクトとして描画していけば、わざわざ、本文の文字にアミかけ(実際は下線)しなくてもいい。

そういう点では、使えるかもしれない。ちょっと考えてみようっと。

2008/08/01

当面の課題

本題の前にメモ。
insertionPoint.horizontalOffset
insertionPoint.baseline
でカーソルの親フレームの左上からの相対位置が取得できる。

原稿データはだいたい、各章ごとにファイルがある。で、1ストーリー=1章、という風に組んでいるんだが、いちいち、流し込むのも面倒になってきた。
修正されたデータが完璧だと仮定して、フォルダごと、もしくは複数ファイル選択して、各章ごと改丁で自動的に流し込みつつ、ハシラも補完、てことができるようにすれば、だいぶ楽になるはず。

文字列選択部分を囲むオブジェクトの生成スクリプト、を作ってみたのだが、テキストの背後に配置したい場合、アンカーオブジェクト化(カスタム)ができないっぽい。→要チェック。

先述のカーソル位置。baselineだと、欧文ベースラインの位置、ということで、本当は、仮想ボディの下の位置が知りたい。差分の求め方を調べておくこと。

2008/07/28

忙しい

進捗表のプロジェクト欄、埋まってしまった。案件多すぎ。
てことで、さらなる効率化を計らないと、疲労感が高まってしまう。こまごました設定の疲労感を避けるには、キーボードショートカットがきく。てことで、最近のお気に入りは、ちょっとしたスクリプト+ショートカットのコンボ。
たとえば、括弧でくくった部分は、括弧の前後はベタ組み、とか、選択部分の全角カンマを半角カンマに変えて、前後ベタ組み、とか、そんなの。
ストーリー単位とかで一括変換するのは、怖いというか危険だから、結局字面をおっていかなきゃいけないときに、チマチマ文字設定→字詰めの設定とかしていたら、だるすぎるわけで。

長年(てどんだけだ)の懸案は、本文以外のオブジェクトの扱いだな。コラムとか、脚注とか。図表に関しては、ある程度共通したフォーマットがあるんだけど、そのフォーマットがプロジェクトごとに変わるのが面倒。

たとえば、今日組んでた本だと、本文、コラム、ワークショップ、キーワード、要約、問題、、、とか。まぁテキスト系の組版に比べれば、格段に楽だけど。
ここらへんを効率化する方法、を考えなければ。

もひとつは、初校出力以降の、差し替えとか、大幅なテキストの挿入に耐えうる、組み方。まぁ、アンカーオブジェクト化、てこと。時間見つけてやっておかないと、夏以降、死にそう。

まぁ、ここ3日ぐらいは、特急で仕上げなきゃいけない分がたまってるから、それをちゃっと片付けたいものだ。だが、明日は、大事なものが夕方届くはずだから、残業はしないこと。

2008/07/14

メモ

よく忘れるのでメモっておこう。
今のカーソルのあるページの取得の方法。
app.activeDocument.selection[0].parentTextFrames[0].parent.name
でOK。リファレンスでTextFrameのところを見てもPageオブジェクトが出てこないのでいつも戸惑うのだが、parentでPageオブジェクトにアクセスできる。

も一つ。
索引マーカーにも文字ツメの設定があって、デフォルトでは自動になっているため、たまに、索引マーカーのせいで、文字組みが変化することがある。これは凄く困る。そもそもマーカーは印刷されないのに、文字組に影響するってのはどうかと。なんで検索置換で前後のツメをベタにすれば問題ないか、と思っていたら、Windows環境では、索引マーカーの特殊文字がない。
これは困ったってことでspecial character enumにないかと探すが見つからない。しょうがないのでtopicsからinsertion pointを取得して~、とかやることで対応。
CS3では改善されてるのかしら。

2008/07/13

アンカーオブジェクト

なんとか3本組んだ。しかし、原稿の整理がなってないものを渡されて、「急ぎです」というのは無茶やな~。
で、こっちも忙しいので、別の人に整理してもらったんだけど、ファイルをまとめてなかったり、画像が汚かったり、そもそもの原稿データの挿入を忘れてたりとか、手落ち多過ぎ。毎回、マメに指摘してんだけど、それでも直らないとは、これ如何に。

で本題。
節のスタイルとか、見出しのスタイルに、ちょっとした図形を加えようと思って、アンカーオブジェクトを生成するスクリプトを作っていたんだけど、ライブラリ経由でないとうまくいかないんだろうか。『そのままあんかーオブジェクト』という便利なスクリプトが既にあるので、わざわざ作る必要もないのだが、勉強がてらシコシコやってるんだが、どうもうまくいかない。

Rectangleオブジェクトを作ってから、カーソル位置に挿入しようとすると、エラーが起きるんだわな。
も一個、アンカーオブジェクトのサイズを変えようと思って、visibleBoundsの値を取得すると、よくわからない数値になってる。
時間がなかったので、ちまちまサイズは手作業で修正していったんだが、来週、時間を見ても少し探ってみよう。
それからアンカーオブジェクトの参照ポイントで、仮想ボディの中央に設定する方法がわからん。まぁ行送りの先頭でもやれないことはないんで問題がないといえばないんだが。

そもそもは、Indesignの日本語版のスクリプトリファレンスがないってのが問題なんだよなぁ。

2008/07/03

表関連のスクリプト

まず、列幅の自動調整。セルにはcolumnsからアクセスして、各セルの文字列のバイト数を求めて、最大値×フォントサイズ+マージンを列幅とする(セル内で改行されてる場合もあるので、paragraphオブジェクトのcontentsで文字列を取得する必要がある)。マージンはプロンプトウィンドウを表示させて、都度入力。
バイト数を求めるには、
function countByte(str)
{
return str.replace(/[^\x20-\xFF]/g, "##").length;
}
みたいな関数作って対処。結構これは、使い勝手がいい。今組んでる本が、各章につき30ぐらいの表があるんで、いちいち手作業でやってたら腱鞘炎起こします・・・。

次にセルの結合作業支援スクリプト。セルを複数選択して、列ごとに一気にまとめたい時用に。選択状態のセルのインデックスは行方向に増える様子。

そろそろ、ライブラリ化も考えて、関数とか変数の命名法を統一しておこう。

で来週末までには3冊分ぐらい組まなきゃいけないのか・・・。スクリプト開発ばっかりやってるわけにもいかなくなってきた。

2008/07/01

やれリスト

忘れがちなので、メモ。
  • 図表オブジェクトをアンカー化。
  • 文字組の設定もいっかい見直し→本で調べる。
  • テキストを流し込む時の作業を簡略化。
  • 表の自動生成の不具合の修正(フレームからはみ出す分が表にならない)。
  • 矢印の頭を合わす。
  • 表の列の幅を自動的に調整。
  • 表のケイの調整のオプション。
  • チラシの自動作成(XML使ってみる? 書誌データ+テンプレートでラフ見本が作れるように)。
  • 人名索引作業の修正。
こんなもんですか。
気になってることとして、段落スタイルの肥大化。どうにかできないものか、と思いつつも、スタイルをどんどん登録したほうがらくなんだもんで。ツリービューとか出来たらいいんだがなぁ。スクリプトウィンドウはツリービューなのに(まぁフォルダの階層構造使ってるから当たり前だけど)

正規表現

文献の表記の統一ってのも面倒な仕事のうちの一つ。語の間が半角スペースだったり全角スペースだったり。全角カンマか半角カンマか・・・。外国人名のときは、半角の約物、日本人名のときは全角の約物、というわけでもない。ここらへんは正規表現+スクリプトで対処することで、煩わしさから解放されるはず。

もひとつ問題は、書名または雑誌名はイタリックにして、巻数はボールドとか、いう規定の問題。そもそもデータはワード形式での入稿が多く、ワード上でイタリックにしたりボールドにしたりしてるんだが、基本的には、ワードのスタイルをインデザイン上で読み込みたくないので、いちいち指定し直さないといけない。ちなみに、先頭文字スタイルを駆使することで、イタリック、ボールドの処理はいくぶん楽になる。

ワードのマクロで正規表現使って処理するのが一番真っ当な気がするんだが、VBマクロのリソースがやたら少ない(エクセルは多い)。でもって、VBの文法覚えるのもめんどくさいので、この方向性はなし。

あー、perlのwinOLE(だったっけな)で制御する、という方法もあるのか。もしくはruby。どっちにしろ勉強が必要だわな。

2008/06/26

やっつけ

人名索引スクリプト。さすがに、こればっかやってるわけにもいかなくなってきたので、暫定的に仕上げる。
①本文から索引項目を追加していく。選択部分からスクリプトで抽出した人名を項目に、選択部分を読みに。
②それをテキストではきだして、エクセルで読み込み、読みの部分(選択部分=人名+年号)から人名を補完していく(外国人名のときは、イニシャル、日本人名のときは、ファーストネーム)。日本人名のときは、読みの部分にローマ字表記を入れておく。
③補完したらテキストで保存しておき、それをスクリプトで読み込み、indesignの索引項目を修正していく。
③の部分が問題だったわけだが、今回の対処方法。
a.項目を入力することで、並べ替えられるのを避けるために、まず、読みの部分(選択部分が入ってる)ところに数値を入れていく(10000、10001、、10002、、、、10000+n)。
b.次に項目部分の修正(イニシャルの追加、ファーストネームの追加)。
c.読みの部分を修正(数値を消して、読みを入れていく。外国人名のときは空白、日本人名のときはローマ字表記)。
indesignの索引の並べ替えのルールは、まず読みを見てから、読みが空白ならば項目を読みとする。数値の方が、アルファベットより先。なので読みの部分を修正する時、for文をつかうなら注意が必要。
これでやってみた。
250ページぐらいの本で、人名索引は1000個弱。手作業でやるとおそらく1日仕事。
スクリプトで補助することで、索引を拾うのに1時間、人名補完で2~3時間。半分ぐらいの短縮率。

チェック用に、索引部分をアミカケにするスクリプトを走らせたのだが、さすがに1000個弱だと時間がかかる。20分近く。ここで時間切れ。明日PDFにしてチェックしてみるか。

今回、選択部分から人名を抽出するのに、文字コードのことを考慮していなかったので問題が。indesignでは「'」とか「‘」をスペシャルキャラクターとして扱うので、数値を返す時がある。例えば
o'reilly
と拾って欲しいのに
o143593847234reilly
みたいになっていた。ここは修正しておくこと。

実際のところ、このイニシャル補完の作業をオペレータがやるべきではないな。本文との人名表記の違い(単純な誤植)とか、引用文献の年号の違いとかを発見することは非常に多くあるわけで。
なんで結局次のやり方がベターのような気がしてきた。
①文献チェックの際に、本文にイニシャルを書き加えてもらう。人名索引としてとる部分にマーカーをひいてもらう。→校正者の仕事。
②索引を拾う時にそのイニシャルを補完。→オペレータの仕事。
え、そうなると、今回作ったスクリプトをまた使う日が来るのかいな・・・^^;。まぁ自分が校正者かつオペレータとなるケースもないわけではないから、いいとするか。

2008/06/25

リフレクションインタフェイス

さっきのmoveメソッドとか、スクリプトリファレンスだけでは詳細がわからないものは多い。で、今何気にスクリプティングガイドを眺めていたら、
ExtendScriptには、オブジェクトに関するあらゆる情報を取得できるリフレクションインタフェイスが用意されています。
とのこと。家のPCにはindesignをインスコしてないので明日調べてみよ。リファレンスに載ってないプロパティやメソッドもありそうだし。日本語版のindesignと英語版ではかなり違いがあるからしょうがないけど。

2008/06/24

まだまだ、人名索引。

格闘中である。
昨日の続きで、本文中での、以下のような対象個所
Frued, 1925
Lazarus & Folkman, 1969
田中・加藤(2004)
Eysenck et al.(1985)
Smith, Gibson, & Jacob, 1966
を選択して、余計な文字を除去して、次のような二次元配列(人名, 選択部分)
["Freud", "Freudm 1925"]
[["Lazarus", "Lazarus & Folkman, 1969"], ["Folkman", "Lazarus & Folkman, 1969"]]
[["田中", "田中・加藤(2004)"], ["加藤", "田中・加藤(2004)"]]
を生成して、その配列の一つ目の要素を、topic.nameに、二つ目をtopic.sortOrderへと格納する。
索引は、事項索引と人名索引の二種類ある。事項については、普通に、読みを入力しておいて、人名索引は、記号(たとえば$とか)の入れ子項目、というふうにしておく。

ここまでは比較的問題なくできた。原因不明のバグ?もあった。それは項目を入れ子にする際、
var t = index.topics[0];
var tt = t.topics.add("Frued", "Frued, 1934");
tt.pageReferences.add(textObj);
という順にするとエラーが発生。どうも読みを参照位置よりも先に指定すると駄目みたいで
var tt = t.topics.add("Frued");
tt.pageReferences.add(textObj);
tt.sortOrder = "Frued, 1934";
とすると問題がないみたい。なんでこうなるのかがよくわからんな・・・。

まぁともあれ、選択範囲を、人名を項目に、選択範囲を読み、にして索引に放り込むことはできた。次は、できた索引をいったん出力して、エクセルか、テキストエディタとかで、イニシャルを補完してから、そのデータを索引に反映させることが必要。

indesignの索引は、読みを入力すると自動的にソートしなおされてしまうので、for文で回しながら、うまく読みを修正するのは難しい。しかも問題なのが、人名を、項目$の入れ子にしてたこと。topicのメソッドにmoveというものがあったので、それを使えば、for文で、該当topicを取得→修正して、別の索引項目(例えば#とか)の下へ移動、とやれば、カウンタを気にすることがないはず、と思っていたのだが、そのmoveの使い方がわからない。値はlong型なので、該当項目のindexを入れとけばいいのかと思ったが、うまくいかないし。
しかも、スクリプトで見ると、項目は入れ子構造になってない。indexSection.topicsをfor文で回すと、$と入れ子のつもりだった人名は並列である(階層ではなく)。例えば、indexSecition.topics[0].nameが$でindexSecition.topics[1].nameがFreud、indexSecition.topics[2].nameがGibsonだったりする。

ここらへんで時間切れ。手間取るなぁ。しかも、出力待ちの原稿も増えてきたし・・・。明日どうするかいな。

2008/06/23

そういえば、indexSection

索引の初期化、てのが索引ウインドウではできない。何で、簡単なスクリプトで対応する必要がある。
var indexObj = app.activeDocument.indexes[0];
for(var i=indexObj.topics.length-1; i>=0; i--) {
indexObj.topics[i].remove();
}
とかそんなかんじ。
このままだと全部消えてしまうので、特定項目のみ(例えばアルファベット分だけ)消したい時はindexSectionを使えばいいか、と思って、
if(indexSections[i].name.match(/[A-Z]/) != null) {
ここでindexSections[i].topicsをの個々のtopicについてremove()していけばOK!
}
とやってたら、remove()をこのオブジェクトに適用できない云々、と。何故だかは不明・・・。アルファベット分だけだったら、まぁtopicsのindexで範囲を限定して消去、とかでいいけど、ほんとにタ行だけ、消したい、とか言うときはどうすればいいんだろ。

indexSectionから取得したtopicはremoveできないのか・・・。

人名索引

試行錯誤中。

方法その1。文献リストから、出版(発表)年を参照しつつ、検索して一致したものを索引に追加していく。この方法の問題は、検索方法が複雑になること(というか、どこまで考慮すればいいのかわからん・・・)。

方法その2。ひとまず、本文中の人名と年号をまとめて索引として追加していく。後から、文献リストと照合してイニシャル補完。ページがずれる心配がないのならば、この方法が一番手っ取り早い。例えば、本文中での
Frued, 1925
Lazarus & Folkman, 1969
田中・加藤(2004)
Eysenck et al.(1985)
Smith, Gibson, & Jacob, 1966
こうゆう表記をそのまま索引項目に追加していって、いったん、CSV方式かなんかで出力してから、エクセルとかで、ソートして、人名を分解して、年号を参考にしながらイニシャルを補完する。indesignの索引機能を、一時的に使って、最終的には、エクセルかなんかの索引データを整形して、本文にはりつけることになる。indesignを使わずに、人力で人名索引を作成する時は、この方法でやっていた。エクセル上で
Frued, 1925
Lazarus & Folkman, 1969  45
田中・加藤(2004)  46
Eysenck et al.(1985)  89
Smith, Gibson, & Jacob, 1966  97
と入力していって(空白部分でセルを区切る)後からソートし直して、人名部分をセルごとに分解して・・・と。
問題は、再校段階で索引を作るときは、ページがずれる可能性があるってこと。indesginで索引を作成するということの一番のメリットは、索引頁のチェックをする必要がないことにあるわけで、それが使えなくなるのは痛い。

で今思案中の方法。索引項目には連名でなく一名ずつ採っていく。ただそれだけだと、イニシャルの補完が大変なので、一時的に、項目の読みの部分に連名+年号を入力しておく。索引を取り終わったら、読みを基準にソートされているはずなので(すなわち、アルファベティカルオーダー)、文献リストのオーダーとほぼ同じなはず=照合しやすい。問題は、漢字表記は読みに使えないのでどうするか、と。まぁ暫定的に、アルファベットで入力しておくか、どうか。日本語文献が多い時は厄介かも。

この方法だと、索引をとるときが面倒。まず、本文での「連名+年号」の部分を選択して、コピー。で次に名前を一名ずつ索引にとっていく。読みにコピーした「連名+年号」を入力。タブキーで動かして、Alt+Sで読みに移動して・・・とか手間かかりすぎ。
こうゆう部分はスクリプトで手間を省くべきということで、選択部分から人名を抜き出して、一名ずつ索引項目に追加しつつ、それぞれの読みに選択部分を貼り付け、と動くものを作ってるうちに、時間切れ。

今まではアウトプットの部分で、スクリプトを考えていたのだが、こうゆうインプットの部分でのスクリプトもだいぶ作業時間を短縮してくれるはず。

2008/06/20

索引

学術書の場合、だいたい事項索引については執筆者にマーキングしてもらい、それを編集部のほうで拾っていき、人名索引は、機械的に拾っていく、というケースが多い。
indesignには索引機能があるので、重宝してる。校正の結果のページズレも、反映してくれるからだ。ただ、索引を拾った部分を、出力紙では視認できないので、索引個所にアミカケ、というスクリプトを作って対応している(アミカケというより、アンダーラインの設定をいじったアミカケ風)。

さて、厄介なのは人名索引である。本文に出てくる人名というのは、だいたい引用文献で言及されるケース。その場合は、イニシャルは省略されていて、索引ページでは、そのイニシャルは補完されていなければならない。つまり、人名を拾う際に、文献リストと照合して、イニシャルを補完していく必要がある。

章末に、文献リストが記載するケースの場合は、それほど苦ではないのだが(せいぜい、多くても2ページほどである)、が巻末に文献リスト、ということになると、下手すると10ページ以上にわたるリストとの照合作業をする必要がある。
これが面倒。非常に面倒。やりたくない作業の一つである(一番やりたくないのは、責了前の索引チェックだが)。

本文での人名記述のパターンとして
Piagetは、思考発達段階説を唱えた。
・・・・・・ということになる(Lazarus & Folkman, 1984)。
というものがあるのだが、どうやるのが効率的なものか・・・・・・。

2008/06/17

オブジェクトを別のページへ移動させる

先日のエントリでのNaNの件。

現ページから、前もしくは次のページを取得するとき、
pages.itemByRange(currentPage.name-2, currentPage.name-2)
というふうにやってたのが駄目だったみたいだ。この場合、Rangeが1ページ分でも、返される値は、配列になるわけで、そこが問題だったと。

ということで単純に前ページのときは、
pages[currentPage.name-2]
で、次ページのときは、
pages[currentPage.name]
で取得するように変更したら、問題なく動く。

てことでオブジェクトを前もしくは次のページに移動させることはできた。だが、オブジェクトが回転されてたりする場合は、どっかに飛んでいってしまうので^^;、注意が必要。要検証。

2008/06/16

原稿整理のルール

自分用メモ。

タグテキストでやるのは、タグをそもそも打ち込むのが面倒なので却下。XMLはこれから勉強。なんで暫定的に、簡易タグ~制御文字で。

まず、段落スタイルを統一しておく(A:本文、B:章、C:節、D:項、E:見出し、F:図表、G:引用、とか)。
段落スタイルに対応したタグもしくは制御文字を原稿データに入力していく($$章、$$節、など)。
一つの段落でおさまるものは、$$○を段落の頭に挿入。ブロック単位のものは、タグで囲む。

インデザインに整形された原稿データを流し込む。スクリプトの適用(段落を一つずつチェックして、制御文字、タグで段落スタイルを適用していく)。

先頭スタイル終了文字はかなり使えるので、別途、制御文字を用意しておく。それから、マイナスとかイコールだとかの記号や、半角カンマと和字のアキの設定とか、ややこしい作業はこの流し込みの後に、一括調整できるようにスクリプトを作っとく。

図を放り込む

原稿整理の段階での簡易タグ付け(制御文字――例えば、「##節」などを使う)によって、原稿流し込み→自動的に段落スタイルの適用、という作業が可能になって、だいぶ楽になった。その際に、表についても、自動的にインデザイン上で組むようにできたので(もちろん、罫線やセル幅などの微調整は必要)、残っている手間のかかる作業というと、イラストレーターで作成した図の配置。

これが結構厄介。アンカーオブジェクトにする、て手もあるだろうが(たぶん、こっちの方が楽?)、キャプションとの位置関係とか、図の配置位置は、天もしくは地の左右中央が基本だったりすることから、スクリプトで制御しようかと。

オブジェクトは、放り込んだ図=Rectangle、キャプション=TextFrame、となる。版面のテキストフレームの種類がフレームグリッドかどうかで取得して、そのフレームの天もしくは地に合うように、visibleBoundsを設定する。その時、図とキャプションの間隔を、図中文字の1字分に固定する。図がRectangleでない場合――例えば、インデザイン上で図を作った場合のことは次考える^^;。

このスクリプトはサッとできた。で次に考えたのが、校正で図を別のページに移動する必要が出てきた時。これも手動でやってると、手間がかかる、というかイライラしてくる。

なんで、これは図にかぎらず、ページ上のオブジェクトを別のページに移動できるスクリプトを考えたんだが。。。時間切れ。

移動先のページを取得→オブジェクトのmoveメソッドの引数にそのページを割り当て。これでオブジェクトの移動は簡単にできるんだが、その時、移動先のページの(0, 0)の位置にオブジェクトが配置される。で2番目の引数で位置を設定する。この場合、ページの左上からの位置になるので、あからじめ、移動前のオブジェクトのページ左上との相対位置を取得して、当てはめることになるんだが、レイアウトグリッドの設計が左右中央でないばあいは、偶数ページ、奇数ページで設定を調整する必要がある。

これは面倒、ということで、レイアウトグリッドとの相対位置をオフセット値みたいなかんじで保存しといて、ページ⇔レイアウトグリッド⇔オブジェクト、という関係で、位置の数値を決めようと思ったんだけど・・・。
ページ⇔レイアウトグリッドのとこで、数値がNaNになってしまう・・・・・・。ここらへんは勉強不足でなぜだかわからんので、後でしらべておくこと。

2008/05/29

矢印問題

問題というほどたいそうなものではないんだが・・・。

ここのページにヒントがある。
http://park12.wakwak.com/~shp/cgi-bin/wiki.cgi/view/JavaScript_scripts#arrow

このやり方を応用して、矢印の頭の形を増やしていけばよい、と。曲線の場合の矢印の傾きの計算方法がわかるので非常に助かった。部品的には、頭と本体を別々に作っておくということだな。

図の作成

原稿に制御文字を追加することで、原稿読み込み時に段落スタイルを適用することはできるようになった。その際、表の部分については、タグで囲んでおいて、テキストをCSV形式で整形しておけば、自動的に作成できる。

だが、図に関しては、少々厄介だ。職場では、図作成者(執筆要項にはトレス工ってなってたな。なんかやな呼称・・・)が別にいたりするのだが、まかせる時間がないときもある。一応、イラストレーターのスクリプトで、作業を軽減化するものは作ってあるのだが、もっと楽にする方法はないものか。
イラレでよく使うスクリプトとして

 ・貼り付けたテキストを改行コードで分割
 ・テキストに二分あきのマージンで枠を作成
 ・選択したオブジェクトを直線で結ぶ
 ・オブジェクトの入れ替え

というものがある。いらいらすることとして、ワードなりPDFなり、図のデータはあって、それをイラレで開いた時に、余計なパスが追加されていて、それを除去するのが面倒、てことだ。おそらく、ワードやPDFのファイルを開いた時(もしくはコピペした時)、一定の変換形式があるはずなので、それがわかれば、逆算してスクリプトで必要な部分だけを取り出すことができるような気がする。
も一つは、矢印。矢印はメニューから作成できるのだが、線の先端と矢印の頭が揃うように作ってくれないので厄介なわけで。矢印の頭のサイズの決定方式もよくわからないし。ここらへん調べておくこと。

2008/05/28

マスターページの使い方

今までは、元となるページを作ってそこにレイアウトグリッドとフレームグリッドを置き、それをベースにどんどんマスターページを作っていったのだが、このやり方だと幾分、問題もある。

テキストを流し込むときに、いちいち、フレームグリッド作るのが面倒なので、マスターのフレームグリッドをオーバーライドしていたのだが、途中で、別のマスターを適用したいときに、原理上はオーバーライドしたフレームグリッドと、適用したマスターのフレームグリッド(オーバーライドしなければ選択できないので実質は見えていない、ことになるのだが)が重なることになる。たいしたことではないのだが、このときに文字数が重なって見づらくなる、ていうのが生理的に気持ちが悪い。
あとは、間違ってCtrl+Shift押しながらクリックとかしたらフレームグリッドがオーバーライドされてしまって、ややこしいとか(そんなことはほとんどなかったけど)。

ということで、これからはテキスト流し込み用(というかオーバーライド用)にマスターを作っといて、まず原稿を読み込むときはそのマスターを使い、後から、フレームグリッドが配置されていないマスターを適用していく、ていうやり方を採ることに。

マスターとは別だが、「章ごとにドキュメントを作って、ブックで統合」というやり方でやっていたのだが、スタイルを同期ってのはちょっとリスクがある。InDesignをさわり始めた頃は、どちらかというと、メモリのことを気にして、あまり巨大なドキュメントを作らないほうがいいと思っていたのだが、学術書の場合、それほど巨大化することもない(画像は概ねグレースケール、ベクターイメージがほとんど)。

なのでせいぜい、
  1. 前付け(まえがき+目次)
  2. 本文
  3. 文献
  4. 後付(あとがき+索引+奥付)
の4つぐらいでドキュメントを作ってブックで統合、というかたちに移行。

今のところ問題はないが、章の位置の入れ替え、などがあると厄介かもしれない。

ひとまず

仕事で使い始めたindesgin CS2をJavaScriptで制御する上でのメモ用に。