全角1桁数字を、等幅半角字形と同じデザインのものに置換したい。

[9676]全角1桁数字を、等幅半角字形と同じデザインのものに置換したい。 投稿者:おじちゃん 投稿日:2006/08/01(Tue) 18:30
いつも拝見させてもらい、勉強しております。
WinXP sp1 CS2(4.02) モリサワOTFリュウミンライトproの環境です。
 当方、活版の植字の経験もある古い人間なので、「全角数字と半角(2分)数字は同じデザイン」が常識とばかり思っておりました。
 標記の件につきまして、インデザインは、全角1桁数字をデフォルトで、CID番号0780~0789に割り当てていますが、この字形は、等幅半角字形(CID番号0247~0256)より幅広にデザインされています。出版社(または著者)の承諾があれば、それでも構わないのですが、どうしても「同じデザインで」の要求は、多々あるようです。
 インデザインに取り込む前ですと、エディタ上(Winなら秀丸のマクロを使用)で、過去のレスに従って初期処理(タグ付けなど)をしてしまえば、比較的簡単に実行できるのですが、問題は、前処理せずに取り込んだ後に、インデザイン上で処理が必要になった場合です。
 数が少なければ、ちまちまと一つずつ手作業でしても、さほど問題はありませんが、数が多いと、どうしても一括処理の方法を考えなければなりません。

 そこで、「検索・置換」で、次の方法を試してみました。
(1) 全角1桁数字を、半角等幅字形と同じデザインの全角文字(CID番号9872~9881)に置換する。
(2) 全角1桁数字も、半角等幅字形に置換して、さらに前後に25%のアキを作る(文字スタイルを適用する)。

 (1)の方法は、等幅半角字形と同じデザインの全角文字に、下付数字と同じユニコードがふられている(CID番号は別)ので、失敗します。
 (2)の方法は、全角数字のユニコードで「検索・置換」をかけても、既に設定されている等幅半角字形(ユニコードが違う)までヒットしてしまうので、一つずつ確認しながらの作業になってしまいます。願わくばメタ文字(^9)で「検索・置換」をかけて、全角文字のみヒットすれば、ことは簡単なのにと思うのですが、メタ文字では全ての数字にヒットしてしまうので、これも面倒。
 私の置換の方法が間違っているのか、理解が足りないのか……。結局、ここから先は、当方、スクリプトの知識を持ち合わせておりませんので、方法が思いつきません。

 これらの処理は、エディカラーだと、簡単なんですが(標準でそうなっている)、インデザインで再現しようとすると、どうしても複雑になりそうで……
 長文になってしまいましたが、皆さんのお知恵を拝借したいと思います。
» 1
Liさんの「いんでざいんnoすくりぷと」
http://www2s.biglobe.ne.jp/~jxli/cgi-bin/nik/nicky.cgi
にて公開されている、「正規表現検索置換β」で目的の置換が実現できます。
ただ、開発環境を変更なさったとのことで、残念ながら現在は当該スクリプトの公開を休止しておられます。
» 2
ちょっと煩わしい方法ですが、検索置換を10回実行してもいいのであれば……

検索:0
置換:空白(何も入力しない)
置換形式:文字スタイルにて等幅半角字形+前後四分アキのみを指定したスタイルを指定

以上の指定で、9まで全10回の置換を繰り返します。
» 3
いき様

早速のレス、有り難う御座います。
Liさんの「いんでざいんnoすくりぷと」に、「正規表現検索置換β」があったのは、私も後になって思い出しました。でも、現在、ダウンロード出来ない状態なので、残念です。
もう一つの方法に関連して、1バイト(いわゆる半角)数字を等幅半角数字にした場合と、2バイト(全角)数字を等幅半角数字にした場合とでは、画面上もプリントも全く同じに見えますが、データ的には1バイトは1バイトのまま、2バイトは2バイトのまま、ということが分かりました。(ちょっと変?)
このあたりに検索のヒントがあったのですね。気が付きませんでした。
» 4
>どうしても「同じデザインで」の要求は、多々あるようです。
そういう要望は当方でも経験があって、普段は前処理しています。

>以上の指定で、9まで全10回の置換を繰り返します。
こういう方法しか提示できないんですが…。VBScript(WSH)です。
CS2とのことなのでCS2で宣言してありますが、動作確認できないのでご了承下さい。

文字スタイルを作らない方法です。
1.全角→半角の処理をしています。
2.等幅半角字形の設定をしています。
3.前後四分アキに設定しています。
4.0~9まで10回分の置換をします。

'----------------------------------------------------------------------
'全角数字(0123456789)を(0123456789)に変換し、
'前後を四分アキに設定するスクリプト
Call Rep("0", "0")
Call Rep("1", "1")
Call Rep("2", "2")
Call Rep("3", "3")
Call Rep("4", "4")
Call Rep("5", "5")
Call Rep("6", "6")
Call Rep("7", "7")
Call Rep("8", "8")
Call Rep("9", "9")
MsgBox "処理が終了しました。"
Sub Rep(FindStr, RepStr)
'デスクトップから使用するときは下の行頭のRemを削って下さい。
Rem Const idMonospacedHalfWidthForm = 1247897453 '等幅半角字形
Dim MyInDesign 'As InDesign.Application
Set MyInDesign = CreateObject("InDesign.Application.CS2_J")
With MyInDesign
.FindPreferences = Nothing '検索/置換の設定を消去
.ChangePreferences = Nothing '検索/置換の設定を消去
.FindPreferences.FindText = FindStr '引数から取得
.ChangePreferences.ChangeText = RepStr '引数から取得
.ChangePreferences.LeadingAki = 0.25 '前アキ四分
.ChangePreferences.TrailingAki = 0.25 '後アキ四分
.ChangePreferences.GlyphForm = idMonospacedHalfWidthForm '等幅半角字形
.Search '置換実行
.FindPreferences = Nothing '検索/置換の設定を消去
.ChangePreferences = Nothing '検索/置換の設定を消去
End With
End Sub
'----------------------------------------------------------------------
» 5
おはようございます>流星さん
CS2でも動きましたが……。
なぜか、置換していない半角数字も等幅半角・前後四分アキになってしまいます。
» 6
あっ、すみません。
.Search '置換実行
上の行を下のように変更して下さい。
.Search , False, True, False, False '置換実行
半角・全角の区別をしてなかった(汗
» 7
早い対応、頭が下がります。
CS/CS2両方で正常に動作することを確認いたしました。
» 8
流星さま

当方、スクリプトの知識はありませんでしたが、アドビのガイドを参照して、指示して頂いたものがVBScriptらしいことが分かりました。先ほど自宅で実行してみたら、見事に置換されました。
感謝、感激、感動ものです。重ねて御礼申し上げます。
ところで、Liさんの「正規表現検索置換β」は、復活したようですね。
» 9
>ところで、Liさんの「正規表現検索置換β」は、復活したようですね。

情報ありがとうございます。
明日、さっそくダウンロードしなければ。
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)

このページをシェア