2013年05月12日

ルビをJavaScriptで処理する

DTP作業者にとっての難易度 ★☆☆☆☆(1)

【2019.6.15】『Word文書の体裁(ルビ・文字飾り・脚注など)をInDesignに反映する』http://mottainaidtp.seesaa.net/article/467138279.html)にて文字飾りや文字色、蛍光ペン、脚注などの処理も含む一連の作業手順を整理しました。併せてご覧ください。

※2021.1.29/サンプルデータを更新しました(選択した部分のみ処理するスクリプトを追加)。

※2021.5.5/サンプルデータを更新しました(「all_txt2ruby」テキストフレームがグループ化されているケースに対応)。

※2021.5.7・14:30/サンプルデータを更新しました(「all_txt2ruby」画像を読み込んだグラフィックフレームが存在するケースに対応)。

※2021.5.7・19:00/サンプルデータを更新しました(「all_txt2ruby」try-catchの不足を追加)。


JavaScriptを使うとInDesignのさまざまな作業を自動化することができます。
普段からプログラミングに従事していないDTP作業者(私もその一人です)にとって目的どおりのスクリプトを書くことは簡単ではありませんが、完成したスクリプトを使用するのはとても簡単です。
ここでは、私が書いてみたルビ処理のJavaScriptをご紹介します。必要があれば、ページ下部よりサンプルデータをダウンロードしてDTP作業者の方に使ってもらってください。

編集者の作業


文字原稿の段階では、このように親文字(ルビをつけられる側の文字)の直前にゲタ(〓)を入力し、ルビ文字を《 》内に書いておきます。
0509_021.png

モノルビにしたい場合は《ぎょ らん ざか》のようにルビ文字を全角スペースで区切ります。《たかまつのみやてい》のように全角スペースで区切らないとグループルビになります。

DTP作業者の作業


0511-203.pngJavaScriptのファイル『kakko_ruby.jsx』を『Scripts Panel』フォルダに入れると、InDesignのスクリプトパネルに『kakko_ruby』と表示されます。テキストを配置した後、この『kakko_ruby』という表示をダブルクリックするだけで自動的に処理が実行されます。




(追記)

以下は参考にしたサイトです。ありがとうございました。
【11)ルビ処理支援WORDコピペ版 - たけうちとおるのスクリプトノート】

サンプルデータ(2021.1.29版-修正前)はこちら《txt2ruby_2021_0129a.zip》です。
サンプルデータ(2021.5.5版-グループに対応)はこちら《txt2ruby_2021_0505b.zip》です。
サンプルデータ(2021.5.7・19:00版-グラフィックフレームに対応・修正)はこちら《txt2ruby_2021_0507b.zip》です。

※jsxファイルは2つ入っています。「all_txt2ruby-20210128a.jsx」は上記「kakko_ruby.jsx」を整理したもの、「sel_txt2ruby-20210128a.jsx」は選択した部分のみ処理するものです。




posted by 照山裕爾 at 00:24| Comment(16) | TrackBack(0) | InDesign-その他の機能 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
照山裕爾様

初めまして、デザイナーをしております。舘山と申します。
このスクリプトに大変興味を持ちご連絡させていただきます。

編集からもらったテキストが原稿が、まさにこのページにあるものと同じでしたので試してみたのですが、下記のエラーメッセージが出てしまいます。

++++

Javascriptエラーです!
エラー番号:1
エラー文字列:
変換方法:main

++++

こちらの作業環境は、MacOS10 InDesignCS6です。

最近、InDesignを使い始めたばかりの初心者なのですが、よろしければ対処方法などありましたら、ご伝授いただけないでしょうか?

突然のご連絡すみません。
よろしくお願いいたします。

舘山拝
Posted by 舘山 at 2015年03月09日 16:20
舘山さま
コメントありがとうございます。
実は私自身もJavaScriptはヨチヨチの勉強中でして、
お書きいただいたエラーの内容を判断できずにおります。
詳しい知人たちにも相談したいと思います。
少々お時間をいただけますでしょうか。
Posted by 照山裕爾 at 2015年03月10日 18:03
舘山さま
何名かの知人よりOSX(10.9)のCS6で問題なく動いているとの報告をもらいました。
舘山さまの環境でもサンプルファイルで問題なく置換されるかどうか、まずはご確認いただけますか。

なお、ルビでエラーの原因として考えられることとして、知人から以下のアドバイスをもらいました。
1)〈〉が閉じてないなどのマーキングミス。
2)同じマーク(〓とか〈〉を)をどこかで使っていないかどうか。
3)それの箇所が手動でもルビがふれるかどうか。
これらについてもご確認ください。
Posted by 照山裕爾 at 2015年03月10日 18:30
照山裕爾様

質問へのご回答、ありがとうございました。
テキスト原稿をサンプルのものに変えたところ、
無事解決致しました。
便利なスクリプト、とても助かりました。
重ねてお礼申し上げます。

舘山拝
Posted by 舘山 at 2015年03月12日 00:30
照山さん、こんにちは。
照山さんのこのスクリプト、先日初めて実務で使ってみました。
とても便利なのですが、下記3点、気になりました。
1.間違えてスクリプトを叩いてしまったときにキャンセルできない
2.最後に表示されるルビ置換の結果の数が正しくない
3.空白文字など、標準機能では設定できない文字にもルビが振れる=修正できなくなる
環境はOS 10.10、InDesign CS6です。

1.について、僕自身で1行目を下記に置き換えて使いました。
if (!confirm("前面ドキュメントに対して実行します\rルビの目印以外の〓と《》がある場合は注意してください\r実行しますか?")){
exit();
}
もしよければ参考にしてください。
2.について、本文2箇所しか置換してないのに、脚注内10個、表内94個、ほか54個などと、大量に置換したように表示されます。
3.について、特殊な文字など(ホワイトスペースやここまでインデント文字などの特殊文字、マーカー類)があればエスケープする処理があった方がよいと思われます。

以上です。
Posted by Uske_S at 2016年10月07日 11:57
Uske_Sさん、コメントありがとうございました。
もうしばらく手が一杯なので、時間ができてから試してみたいと思います。
Uske_SさんのほうがはるかにJavaScriptに詳しいので、いろいろ教えてください。
いつもありがとうございます。
Posted by 照山裕爾 at 2016年10月11日 04:14
いやいや、とんでもないです。
もしお時間できたらご連絡ください。
少しはお手伝いできると思いますので。
この書き込みにメアドつけました。
Posted by Uske_S at 2016年10月11日 19:05
照山様

初めまして、突然のご連絡申し訳ありません。
こちらのようなスクリプトを探しており、使用させていただきました。ありがとうございます。

その使用させていただきましたところ、
グループ化されたテキストフレームに対しては
処理できない感じでしょうか?
単体では作動するのですが、∞の置き換えで
終了してしまうのでご質問させていただきました。

スクリプトもインデザインも初心者なのですが、
ご教授いただけましたら幸いです。
Posted by 竹内 at 2021年05月05日 15:57
竹内さま
コメントをありがとうございます。

ドキュメント全体を処理対象とする「all_txt2ruby-20210128a.jsx」は
ご指摘の通りグループ化していると処理が実行できませんね(想定しておりませんでした)。
改良も検討いたしますが今のところいつになるかは分かりません。申し訳ありません。

なお、選択した箇所のみを処理対象とする「sel_txt2ruby-20210128a.jsx」では
グループ化されているフレームでもテキストを選択した状態での処理が可能だと思います。
当面はこちらのスクリプトで使い方を工夫していただければと存じます。
Posted by 照山裕爾 at 2021年05月05日 18:55
お忙しいところお返事ありがとうございます、
承知致しました。
sellの方のスクリプトをぜひ使わせて頂きたいと思います。
また、勉強させて頂きます。

本当にお返事をくださり、ありがとうございました。
Posted by 竹内 at 2021年05月05日 23:07
サンプルデータを更新しました。
よろしければお試しください。
Posted by 照山裕爾 at 2021年05月06日 03:03
先程 使用させていただいたところ
下記エラーメッセージが出てきてしまいました。

エラー 番号:55
エラー 文字列:Object does not support the property or method 'textFrames'
行:3
ソース:app.doScript("doMain() ", Script Language.JAVASCRI PT,
[] ,UndoModes.fastEntireScript);

申し訳有りません、
また対応して頂きありがとうございます。
Posted by 竹内 at 2021年05月07日 08:42
竹内さま
コメントをありがとうございます。
画像を読み込んだグラフィックフレームがあると
うまく動かないようですね。
改良を検討したいと思います。
Posted by 照山裕爾 at 2021年05月07日 09:48
お返事ありがとうございます。
お手数をおかけしました。
画像が含まれると置き換えができなくなるのですね・・・

知識不足で申し訳有りませんが、記述をallPageItemsに変更することでグループ化が無視できること、勉強になりました。
Posted by 竹内 at 2021年05月07日 10:13
竹内さま
・グラフィックフレームが存在するケース
・グラフィックセルが存在するケース
に対応するよう修正してみました。
よろしければお時間のあるときにお試しください。
Posted by 照山裕爾 at 2021年05月07日 14:21
新しいサンプルを先程使用させていただきましたところ、
無事変換できることを確認致しました。
また今回も内容を拝見させていただきましたが
やはり勉強不足であることを痛感いたしました。

突然の連絡に対し、迅速丁寧にご対応いただきましたこと
大変感謝いたしております。
このたびは誠にありがとうございました。
Posted by 竹内 at 2021年05月07日 16:31
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]


この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。