(2013.10.24追記)まずは下部コメント欄をお読みください。「痩」を例に取りあげたことも、Adobe Japan 1に準拠しているフォントならCIDコードは完璧に同一だと私が思い込んでいたことも適切ではありません。「字形タグで変換する」JavaScriptがあることも大石さんに教えていただきました。それでも今回のJavaScriptが使える場面があればお使いいただければと思い、はずかしながら記事自体は削除しないことにしました。コメントをいただいた大石さん、小池さん、松尾さん、ありがとうございました。
以前、知人に“InDesign上の漢字、たとえば「痩」などを効率良く印刷標準字体に置換したい”という相談を受けました。今回は、その時に試したことをご紹介します(おそらく次回も)。
「痩」という漢字には下図のように異体字が存在します(フォントが《A-OTF ゴシックMB101 Pro R》の場合)。
(2013.10.24追記)下記コメント欄に、小池和夫様より《「痩」は常用漢字になりましたので、もはや3の印刷標準字体を使用することはないと存じます。》とコメントをいただきました。ありがとうござました。

「検索と置換」ダイアログの「字形」で置換する
「検索と置換」ダイアログの「テキスト」では[1]→[3]の置換が実行できません(フォントが《A-OTF ゴシックMB101 Pro R》の場合)。この原因は[2]と[3]のUnicode番号が同一(いずれも「7626」)だということにあります。
しかし「検索と置換」ダイアログの「字形」であればGID/CIDコードを設定することで[1]→[3]に置換できるのです。これが通常の置換方法です。
※GID/CIDについては「モリサワのサイト」を参照ください。
ただ、この方法は動画で説明したように手間がかかります。そこで試してみることにしたのがJavaScriptを使う方法です。
※Adobe-Japan1に準拠するCIDフォントとOpenTypeフォント間では、基本的にGID/CIDは統一されています。(前述の「モリサワのサイト」より)
※Adobe-Japan1に準拠していても《A-OTF A1明朝 Std Bold》のように[3]が含まれないフォントもあります。この場合[3]を使用したければ他フォントに変更するしかありません。
(2013.10.24追記)まだよく調べられていませんが、「Adobe Japan 1に準拠」といっても程度の差があるようです。たとえばイワタは「OpenType Pr6/Pr6N版 仕様詳細」の中で「なお、Proシリーズからのイワタフォントの仕様により、CIDレベルでのグリフ形状が一部小塚明朝等の実装とは反転している箇所がありますのでご注意ください。」などと書いています。
JavaScriptで作業の効率化を図る
(2013.10.24)大石さんより《三島梅花藻さんの「連続文字置換用スクリプト.jsx」》の存在をコメント欄で教えていただきました。ありがとうございました。今回の目的では、こちらをお使いになるほうが賢明だと思います。字体切り換え機能を使い、ルビの問題も生じないようです。
このJavaScriptは2つのファイルで構成されています(同じ階層に置く必要があります)。「jikei_chikan_xxxx.jsx」は本体ファイル、「list.jsx」は検索/置換したい文字のGID/CIDコードを書き込んだリストのファイルです。リストを編集したい場合はExcelファイルを書き換えて「list.jsx」に貼り付けてください。その後、JavaScript本体ファイルを実行するとドキュメント上の全フォントに対して順番に置換が実行されます。
※検索対象、置換対象となる文字が存在しない場合はテキストファイルに結果を記録します。テキストファイルはInDesignドキュメントと同階層に保存されます。
※InDesignドキュメントが一度も保存されていない状態でJavaScriptを実行することはできません。
※最前面ドキュメントのみが処理対象となります。
※InDesignではルビ付きの文字を置換するとルビ文字が表示されなくなる問題が存在します。この問題を回避する方法については次回ご紹介したいと思います(やや強引です)。
※Adobe-Japan1に準拠しないフォントでは意図しない置換が行われます。使用しないでください。
応用例/JIS2004字形←→JIS90字形の置換
Adobeの「JIS2004とJIS90との文字の形の対照表」からリストを作成して実行してみました。
このJavaScriptファイルの完成度は、とても胸を張れるようなものではありません。何かお気づきになられたら改良案をご提案いただけると助かります。また、有用な使用場面や活用例がありましたら、ぜひお聞かせください。
私は三島梅花藻さんの「連続文字置換用スクリプト.jsx」(http://www4.tokai.or.jp/high-sea-fleet/)を利用して字形タグで変換しています。
書体により検証が不可欠です(特にaalt)が、ルビが飛ぶことは無いように思います(但し、親字の変更を伴う場合はその限りにあらず)。
以下、拙ブログ内関連記事の一部です。
http://d.hatena.ne.jp/works014/20111029
http://d.hatena.ne.jp/works014/20111123
まだざっと拝見しただけですが、すごいものが既にあったのですね。恥ずかしくて自分の記事を引っ込めたくなりました。
でも、こうして恥をかいたからこそご指摘いただけたのだと思い、勉強のきっかけにします。
ろくに考えず、javascriptが動いたとはしゃいでしまいました。作業の目標や基準を考えなくては意味がありませんね。漢字、難しいです。
>大石様
私も最初、大石様のブログを参考にし、テーブルも使わせていただき、「連続文字置換用スクリプト.jsx」を使わせて頂いていたのですが(本当にお世話になっております。ありがとうございます。ご挨拶が遅くなって、本当に申し訳ありません…)、書体によって、一部文字に問題が起きてしまい、それで照山さんに相談させて頂いた経緯がありました。
私も勉強不足なままで、上手く説明できずにお願いしてしまったので、申し訳ないことをしてしまいました。
>小池様
おお、そうなのですね!(本当に勉強不足で……)
クライアントの本のルールで、まだこちらのものを正字として扱っている案件があるのです……。
古くからのルールは、なかなか変わらないようで、K社さんの一部の案件などは、未だに拳の旧字の指定が生きています……。
勉強不足の私が頼んでしまったことによって、照山さんには本当にご迷惑をおかけしました。申し訳ありませんでした。
私のテーブルをご利用でしたか…公開しているのは常用漢字改定前のテーブルですので、
いわゆる康煕字典体になるとは思いますが、(あちこちに書いていますように)書体によってはGSUBとかいうテーブルが異なりますし、
ProとかPr5とかでも異なってきます。
なので書体ごとに検証は必須ですが、テーブルを書き替えることで対応は可能です。
現状、私はイワタ用とその他の2つのテーブルで事足りていますが、
先日、リョービの本明朝体を利用した際には、やはり書き換えが必要でした。
難しいようでしたら、書体と字形を仰っていただけたら、差し替え部分を提示しますので、
お気軽にご相談くださいませ。
もったいない申し出ありがとうございます!
案件によって、千差万別になってしまっていることと、勉強不足で変換テーブルの読み解きができず、個々のカスタマイズまで至ることができず、照山さんに、私の理解の及ぶ範囲でのスクリプトを書いて貰ってしまいました……。
本当にありがとうございます。
丁寧な情報開示とわかりやすいブログには、助けられることばかりです。
今後共どうぞよろしくお願いします。
置換したい字形も同様に送れます
数が少なくて、全文一括でやっちゃっていいならこれが一番簡単では?
おぉ、これは楽になりますね。
知りませんでした。ありがとうございました。
どうすれば良いのでしょうか?
教えていただきたいです。
よろしくお願いします。
ブログをご覧いただきありがとうございます。
このスクリプトは11年も前に作成したもので、
現在の環境ではうまく動かないようですね。
少し調べて修正を加えてみました。
https://mottainaidtp.up.seesaa.net/image/minimum1241121c.zip
ただ、このスクリプトは私が右も左も分からないまま初めて書いたものであり、
他にも不備があるかもしれません。
あまり積極的におすすめできるものとは言えないと思います。
ブログ内で触れている
「三島梅花藻さんの「連続文字置換用スクリプト.jsx」》」
について検索したところ、@mori_taksi(窮狸)さんが
2021年に改良版をお書きになっているようです。
https://qiita.com/mori_taksi/items/b2d5d63a13adb1a3363c
こちらをお試しになってみたほうが良いように思います。
忙しい中、修正くださりありがとうございます。
感謝いたします。
教えていただいたサイトの連続文字置換用スクリプトを試してみたのですが、うまく動作しませんでした。
こちらのスクリプトの方がシンプルで、わかりやすいので使いやすいです。
多くのユーザーは、こちらのスクリプトのが絶対に需要があると思います。
置換テーブルのサイトを見ましたが素人には、全くわかりません。
その点、こちらのスクリプトはCIDコードを打ち込めばフォントに関係なく変換されるので素人の私にはこちらのスクリプトが合っています。
とても助かりました。本当にありがとうございます。