2013年10月23日

目的の異体字に置換する

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

(2013.10.24追記)まずは下部コメント欄をお読みください。「痩」を例に取りあげたことも、Adobe Japan 1に準拠しているフォントならCIDコードは完璧に同一だと私が思い込んでいたことも適切ではありません。「字形タグで変換する」JavaScriptがあることも大石さんに教えていただきました。それでも今回のJavaScriptが使える場面があればお使いいただければと思い、はずかしながら記事自体は削除しないことにしました。コメントをいただいた大石さん、小池さん、松尾さん、ありがとうございました。



以前、知人に“InDesign上の漢字、たとえば「痩」などを効率良く印刷標準字体に置換したい”という相談を受けました。今回は、その時に試したことをご紹介します(おそらく次回も)。

「痩」という漢字には下図のように異体字が存在します(フォントが《A-OTF ゴシックMB101 Pro R》の場合)。このうち印刷標準字体は縦棒が下まで突き抜けている[3]の文字なのだそうです(文化庁の字体表を参照ください)。

(2013.10.24追記)下記コメント欄に、小池和夫様より《「痩」は常用漢字になりましたので、もはや3の印刷標準字体を使用することはないと存じます。》とコメントをいただきました。ありがとうござました。


1021-002.jpg

「検索と置換」ダイアログの「字形」で置換する


「検索と置換」ダイアログの「テキスト」では[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ファイルの完成度は、とても胸を張れるようなものではありません。何かお気づきになられたら改良案をご提案いただけると助かります。また、有用な使用場面や活用例がありましたら、ぜひお聞かせください。

サンプルデータはこちら《minimum1023.zip》です(CS4以降)。
posted by 照山裕爾 at 04:29| Comment(10) | TrackBack(0) | InDesign-検索/置換 | このブログの読者になる | 更新情報をチェックする

2013年05月25日

正規表現による検索/置換の例……疑問符の後にスペースを挿入

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

横組みの文章中で、疑問符や感嘆符の後に過不足なく半角スペース(欧文スペース)を入力するというケースを考えます。

このような時、単純に「?や!の後に半角スペースを加える」という検索/置換を実行すると、不要な箇所にまで半角スペースを発生させてしまうことになります。

0525-000.png

※『検索文字列』の「[?!]」は「?もしくは!」という意味です。また『置換文字列』は「$0〈半角スペース〉」となっています。「$0」は、検索した文字をそのまま使用するという意味です。



※文章中の疑問符「?」はすべて全角記号です。




適切な処理をおこなうためには、下図のように設定すると良いでしょう。

0525-001.png

『検索文字列』は「([?!]+)~(?(?![?!~(〈半角スペース〉\r」』]〉)”’〕}》】])」となっています。
「[?!]+」は「?もしくは!が1つ以上連続する」という意味です。後で置換時に利用するために半角括弧で囲んでいます。
「~(?」の「~(」は全角スペース、「?」は「あってもなくてもいい」という意味です。
「(?![……])」は直後の文字に関する条件です。「[ ]内のいずれの文字でもないこと」という条件を示しています。
『置換文字列』は「$1〈半角スペース〉」とします。「$1」は『検索文字列』の最初の半角括弧内の文字をそのまま利用するという意味です。

上記設定で検索/置換を実行すると、以下のように適切な置換が実行されます。




このような検索/置換は複雑に見えますが、慣れてしまえばそう難しいものではありません。ただ、条件の設定漏れなどの可能性もありますので置換箇所には蛍光ペン風の表示を施す(この回この回を参照ください)など、後で確認しやすいよう工夫しておくと良いでしょう。
posted by 照山裕爾 at 23:00| Comment(0) | TrackBack(0) | InDesign-検索/置換 | このブログの読者になる | 更新情報をチェックする

2013年05月19日

正規表現による置換の例……表記形式を変更する

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

私がDTP作業を担当した仕事で、文章中の「企業A」「企業B」……「企業Z」となっている箇所を、それぞれ「A社」「B社」……「Z社」という表記形式に変更してほしいという指示をいただいたことがありました(下図参照)。

0519-002.png


これを実現したい場合は下図のように設定します。

0519-001.png

『検索文字列』欄は「企業([A-Z])」となっています。「[A-Z]」は「AからZまでのいずれか1文字」という意味です。半角括弧で囲んでいるのは、置換時に使用するためです。
『置換文字列』欄は「$1社」となっています。何度かご説明したように「$1」は『検索文字列』内の1つめの半角括弧で囲まれた部分をそのまま使用する、という意味です。

上記設定で『すべて置換』を実行すると下図のようにすべての該当箇所が一気に置換できます。




もう1つ例を挙げておきましょう。

下図のように「xxxx/yy/zz」という表記を「xxxx年yy月zz日」という表記形式に置換します。この時、年月日の間にはタブを挿入します。また、月日の十の位が「0」の時は、その「0」を削除することにします。

0519-202.png


この場合、下図のように設定すれば良いでしょう。

0519-101.png

『検索文字列』欄は「(\d{4})/0?(\d+)/0?(\d+)」となっています。半角括弧で囲んでいるのは、いずれも置換時に使用する部分です。
最初の半角括弧内にある「\d{4}」の「\d」は数字、「{4}」は4つという意味です。つまり「数字が4つ連続する」ということになります。
「/」は置換後は使用しないので半角括弧で囲みません。
「0?」の「?」は「存在してもしなくても良い」という意味です。つまり「0が存在してもしなくても良い」ということになります。この部分も置換後は使用しないので半角括弧で囲む必要はありません。
2番目の半角括弧内「\d+」の「+」は「1つ以上存在する」という意味です。つまり「数字が1つ以上連続する」ということになります。1桁数字でも2桁数字でも構わないわけです。
あとは同様に考えれば良いので説明を省きます。
『置換文字列』欄は「$1年\t$2月\t$3日」となっています。このうち「$1」「$2」「$3」は、それぞれ『検索文字列』内の1つ目、2つ目、3つ目の半角括弧で囲まれた部分をそのまま使用する、という意味です。
また「\t」は「タブを挿入する」という意味です。

上記設定で『すべて置換』を実行すると下図のように表記形式を変更することができます。

posted by 照山裕爾 at 23:59| Comment(0) | TrackBack(0) | InDesign-検索/置換 | このブログの読者になる | 更新情報をチェックする