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だったりする。

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

0 件のコメント: