« Linux Zaurus SL-C860 の電源 | トップページ | リモート デスクトップで遠隔操作する 2.リモート デスクトップ »

Word 97 Annoyances での single closing quote というか apostrophe の怪

クォーテーションマークの入力だが、いろいろ調べてみたりした結果、オートコレクトの「入力オートフォーマット」で、「’’を‘’に変更する」のチェックを外し、クォーテーションマークは、次のようなショットカットキーが元々設定してあるので、それを用いて入力するのがよろしかろうと思うようになった。

‘ シングルクォーテーション(左) Ctrl+`, `
’ シングルクォーテーション(右) Ctrl+', '
“ ダブルクォーテーション(左) Ctrl+`,"
” ダブルクォーテーション(右) Ctr;',"

確かに、下で書いたような手法(マクロを一つのキーに割り当てる)は、いろいろ便利に使えそうではあるのだが。

以上、2005/12/15加筆。

ISBN 1565923081Word97 Annoyances という本は、なかなか素敵な本だ。

そもそも、"annoyances" って、何?

Microsoft Word ってのは、いろんなユーザーのためにいろんな機能 をテンコ盛りにしてある。誰かのために便利な機能でも、別の人には、余計なお世話だったりする。"annoyances" ってのは、そのような「余計なお世話」などのこと。著者達のことばでいうと、"... Annoyances, like bugs, are in the eyes of the beholder: if you find something that doesn't work the way you think it should, it's a bug. If you find that you can fix or work around the bug, it's an annoyance. From our point of view, annoyances with fairly easy workarounds are simply galling." ってことだそうだ。


Single closing quote というか apotrophe は、annoyance のひとつ。

さてさて、そのような annoyances のひとつが、apostrophe まわりと言うか SmartQuotes まわりにある。英語では、SmartQuotes というらしいが、これは、single quote やら double quote やらの向きを "smart" に判断して、適切な向きに変えてくれるもの。 double quote の方は、問題ないのだが、single quote の方は、問題がある。いわゆる短縮形の場合等に用いられる single closing quote だ。例えば、Drag 'n' Drop とか '04 みたいな書き方をしようとすると面倒なことになる。以下、このような用法の single closing quote を apostrophe と呼ぶことにする。

で、どうするかだが、潔くこの機能を諦めて、このオプションを外してしまうのもありかもしれないが、それなりに便利な機能だけに、なんとかしたいものだと考えるのもありだろう。

Word97 Annoyancesの著者たちが、やったこと

そこで、彼等は、TypeApostrophe という下のようなマクロList 1を書き、そのマクロをキーボードの apostrophe のキーに割り当てるという解決策を考えついた。

List 1

Public Sub TypeApostrophe()
    Selection.TypeText Chr$(146)
End Sub

このマクロを apostrophe のキーにアサインするのだが、普通の方法ではできない。普通の方法とは、メニューから[ツール]-[ユーザー設定]として出てくるダイログの中の、[キーボード]ボタンをクリックして、そこで現れるダイアログで設定する方法のこと。ここのダイアログでは、一般に単独のキーにマクロなどをアサインすることができない。でも、マクロを使えば、単独のキーにアサインできる。著者たちは、下のようなマクロList 2を一回だけ走らせることで、 apostrophe キーに TypeAostrophe マクロをアサインしている(ようだ)。

List 2

Private Sub temp()
CustomizationContext = NormalTemplate
KeyBindings.Add KeyCategory:=wdKeyCategoryMacro, _
    Command:="TypeApostrophe", _
    KeyCode:=BuildKeyCode(Arg1:=wdKeySingleQuote)
End Sub

(ちょっと、ご注意。著者たちによると List 2を実行すると妙なことが起る場合があるとのこと。ツールバーに何かユーザー設定してあるとそれが見かけ上無効になり、標準の normal.dot のツールバーで置きかわったように見えてしまうらしい。一旦、(必要があればファイルを保存した上で)Word を終了して、再び Word を起動し直せば、もとに戻るとのことなので、パニックる必要はない(らしい)。)

バージョンの違いのせいか英語版と日本語版の違いのせいか...

実際に上の List 1 や List 2 を試してみるとうまくいかないようなので、いろいろやってみた結果、そこそこのものができたと思う。

(うまく行かない理由が分かった。バージョンの違いというか Unicode の対応といういか。Unicode では、single closing quote は、&H2019 ってことらしい。だから、上の List1 の Chr$(146) を ChrW(&H2019) とすればよい。下で、InsertSymbol でうまく行っているのは、unicode:=False としているからのようだ。ちなみにChr$()は、日本語版にはないようだ。使ってもエラーにはならない。ChrW() は、unicode 対応? 2006-01-08 加筆。)

まず、Word 97 Annoyances では、次のように書いてあるが、これは、手元の Word 2002 では、解決策がある。

"There is no way we could find --- either manually or in a macro --- to reset a single key assignment." (p186)

Findkey プロパティと clear メソッドを使えばよい。

Public Sub ClearApostrophe()
  CustomizationContext = ActiveDocument
  FindKey(BuildKeyCode(Arg1:=wdKeySingleQuote)).Clear
End Sub

次は wdKeySingleQuote だが、これは、英語版の Word では、確かに single quote というか、apostrophe (日本語のキーボードの場合は、たいてい、数字キーの7のところにあるやつ)を表しているようなのだが、なぜか日本語環境だと、"^" のことを表わすらしい。

次は、TypeText メソッドについて。List 1 で使われている TypeText メッソドを使うとなぜかうまくいかない。なぜだろう?で、InsertSymbol メッソドを使い、下のように、フォント名を指定しないで InsertSymbol すると、なぜか日本語のフォントになってしまう。

Selection.InsertSymbol CharacterNumber:=146, Unicode:=False

だからといって、下のように、フォント名を指定すると、汎用性が犠牲になる。つまり、その文書でどのフォントを用いていても、必ず指定されたフォントの apostrophe が挿入されることになる。

Selection.InsertSymbol CharacterNumber:=146, Font:="Century", Unicode:=False

これは、日本語版の Word では、英文用のフォント(NameAscii (NameOther も?))と日本語用のフォント(NameFarEast)それぞれについて、別々にデフォルトのフォントを指定できることに問題のもとがある。

だから、下のように、一旦英文用のフォント名を獲得しておいてから、その値を InsertSymbol する必要がある。

fName = Selection.Font.NameAscii
Selection.InsertSymbol CharacterNumber:=146, Font:=fName, Unicode:=False

Normal.dot になんでもかんでも入れちゃうってのもね...

Normal.dot は、あまり「汚し」たくないので、特殊なことをするためには、適当なテンプレートをこしらえて、そこの中で、keybinding をしたい。だから、適当なテンプレートに Document オブジェクトの new イベントを利用して、下のようなマクロ(イベントプルシージャ)を書く。(イベントプロシージャをどこに書いたらよいのかについては、各自調べてほしい。)

Private Sub Document_New()
CustomizationContext = ActiveDocument
KeyBindings.Add KeyCategory:=wdKeyCategoryMacro, _
    Command:="TypeApostrophe", _
    KeyCode:=BuildKeyCode(Arg1:=wdKeySingleQuote)
End Sub

このようにすれば、このテンプレートを用いて、新しく文書を作成するたびに、このマクロが実行され、その文書の KeyBinding だけ変更するようにできる。ついでに、Document_Open も設定すれば、このテンプレートを用いて作成した文書を再度開く時にもキーバインディングを変えられる。

以上
この記事の改訂情報
2006-01-08 加筆 Unicode と Chr$(), Chr(), ChrW() について
2006-01-08 加筆 KeyBinding を設定する際、Document_Open も用いると良い
2005-12-15 加筆 Single Quote を入力するショートカットについて
2004-06-24 公開開始

|

« Linux Zaurus SL-C860 の電源 | トップページ | リモート デスクトップで遠隔操作する 2.リモート デスクトップ »

Word 関係」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/11083/828462

この記事へのトラックバック一覧です: Word 97 Annoyances での single closing quote というか apostrophe の怪:

« Linux Zaurus SL-C860 の電源 | トップページ | リモート デスクトップで遠隔操作する 2.リモート デスクトップ »