ふること

多分、古典文学について語ります

Wordで漢文を打つ方法・その2 マクロ云々

Wordで漢文を打つ方法・その1 の続きで、今回はEQフィールドを円滑に挿入して訓点や振仮名・送り仮名を入力する方法について、です。

  

1,現在のWordのルビ機能はどんな構成か

前回述べたように、たとえば再読文字の場合は左右に配置するためにEQフィールドを入れ子式にする必要がありますし、また、本文文字の左側に配置するためには「\do」スイッチを入れたりする必要があります。

しかし、現行のWordのルビ機能ですと、あまり自由に配置することができないようになっています。

 

現行のWordでルビを打ってみると、たとえば本文フォント10で打つとこんなフィールドが挿入されます。

{ EQ \* jc1 \* "Font:游明朝" \* hps10 \o\ad(\s\up 9(ルビ),本文文字) }

 

 まずこの「\* jc2」という部分ですが、これはルビのダイアログボックスの「配置」に対応しています。

f:id:fujmi:20210507184557p:plain

 

上画像の「均等割り付け1」を選ぶと「jc1」と、「\o」スイッチの直後に「\ad」が挿入されます。
なお、

  • 「中央揃え」を選ぶと「jc0」(「\o」スイッチと「(」の間のスイッチなし)
  • 「均等割り付け1」を選ぶと「jc1」「\ad」
  • 「均等割り付け2」を選ぶと「jc2」「\ad」
  • 「左揃え」を選ぶと「jc3」「\al
  • 「右揃え」を選ぶと「jc4」「\ar

になります。

 フォントの欄は、「\* "Font:游明朝"」とある部分に対応。ルビのフォントを指定します。

また、「\* hps10」とある部分については、「10」という数字が本文文字のフォントサイズに対応し、ダイアログボックスの「サイズ」というところを大きくしていくと、そこの数値が上がっていくので、どうも「hps10」なら「ルビのフォントサイズを10の半分に指定」するコードみたいです。

 

また「オフセット」の数字を増やしていくと、これはプレビューで分かるのですが「本文文字からの距離を増やしていく」ことになり、「\up」のあとの数字が増えていきます。
「\up」のあとには「本文フォントの大きさ-1pt」の数字が自動的に入るみたいです。

そして、ダイアログボックスの「サイズ」はルビのフォントサイズで、本文フォントの半分の大きさの数字が自動的に入ります

 

 

2,漢文用のEQフィールドを挿入するには?

…さて。Wordのルビ機能でルビを振ると今まで述べたようなコードになるんですが、このフィールドをそのまま利用して、前回再読文字のフィールドで説明したような

EQ \o\al(\s\up・13(□□ダ),{・EQ・\o\al(\s\down・12(□□ル),未レ)})

といったコードのにしようとしても、いまいち「\* jc1 \* "Font:游明朝" \* hps10 」あたりのコードがあるとうまく反映されません。

そもそも、デフォルトのルビ機能で挿入された下記フィールド

{ EQ \* jc1 \* "Font:游明朝" \* hps10 \o\ad(\s\up 9(ルビ),本文文字) }

の「up」を「do」(もしくはdown)に書き換えると、それだけで何故か「\* jc1 \* "Font:游明朝" \* hps10」までのスイッチがいきなり無効になります。jc1で指定した均等割り付け指定とかも無効になります。

結構謎な挙動です…

理由はあんまり追求して調べていませんが。


そもそも、ルビ機能を使って入れ子式のルビを振ることはできません。

 

つまるところ、漢文の訓点・振仮名・送り仮名を打つために、デフォルトのルビ機能を使うことは難しいわけです。

 

では、どうするか。

基本、ガリガリ手書きでフィールドを挿入し、スイッチを自分で打ってくしかないわけです。

それも厄介なようですが、そこはいつも決まった作業になるため、
・フィールド挿入
・決まったスイッチを入れる
・フォントサイズなどを指定する
といった編集作業を組み込んだマクロを作ってしまえば、意外に簡単です。

 

▼注意点

ただし、マクロを組んでみたり、使ってみたりするにあたって注意点がいくつかあります。

  1. 漢文本文のフォントやフォントサイズは、統一しておいた方が良い。
    EQフィールドを使って訓点や送り仮名を配置した後でも、「フィールドコードを表示」して編集すれば、漢文本文のフォントやフォントサイズを変えることはできます。「置換」機能を使って、一気に置き換えるとかもできることはできる。
    しかし、事前に、本文のフォントやサイズを決めておくに越したことはないです。
    そしてデフォの「游明朝」は、見た目細すぎるので漢文には向かない気がするので、変えた方がいいと思います(MS明朝はいうまでもなく)。

    個人的には、明朝体の太めのフォントで、MSofficeが入っているPCなら入ってそうなフォント(「游明朝 Demibold」だとか「BIZ UD明朝 Medium」あたり?)にするといいのかな、と。

    あとはフォントサイズですが、個人的には漢文本文だと16ptぐらいが好みです。
    まあでも本文のフォントサイズが一定しない場合は、本文16pt用、本文12pt用とかマクロをコピーして用意したっていいんですけどね。
    本文のフォントサイズを取得して自動でフォント指定して…とか、そこまでマクロでやるのは面倒そうなので、もうサイズは何パターンか決めちゃった方が早いかな~と。
  2. フィールドコードの原理は理解必須。
    マクロ使っても、訂正するときは「フィールドコードを表示」して直接編集しなきゃいけないですし、使いこなすにはスイッチの意味・いじり方も理解しておかないとです。
    ここらへん把握するのが面倒なら、漢文用アドオンとか有料のを探してみるとかした方がいいんじゃないかなと思います。

  3. そもそもマクロとはどういうものか理解必須。
    今更なようですが、Wordでマクロ使ったことない方も多いかなと思います。
    マクロは、そもそもファイル拡張子を「docm」にして保存しないと有効にできませんし、ファイル開くときもいちいちマクロを有効にしないと勝手に無効にされちゃいます(セキュリティ上の理由)。
    リボンに「開発」タブを表示しなきゃいけないし、マクロを常時使うなら『クイックアクセスツールバー」あたりに「マクロの表示」のコマンドを追加して、常時表示させておくか、ユーザー設定のツールバーを作るか、「リボンのユーザー設定」でリボンにタブを作ってマクロを割り付けちゃうとかした方がいいとか。
    色々あるんですが…
    マクロの初歩的な使い方は、それはそれで「Word」「マクロ」とかでググると一杯解説サイトが出てくると思います!(ちょっと無責任でスミマセン)

3,訓点の打ち方

色んなやり方あると思いますが、とりあえず訓点については、

  1. 本文と一緒にベタ打ちする。
  2. 訓点に使われる文字(レ、一、二、三…、甲乙丙や天地、一レ、上レなど一通り)を一気に検索し、フォントの書式設定を訓点向きに直し、字詰めもそれぞれ調整したものに置換する。訓点のあとに句点読点が来るパターンも、検索置換で適切な設定におきかえる。
  3. もし本文に、訓点に使われる文字が使われていた場合は、入力し直す
  4. 訓点を打った後、送り仮名などある場合はルビマクロ、再読文字は再読文字マクロで処理し、送り仮名・振仮名など何もない場合も、訓点の直上の本文文字と一緒に訓点を選択して「□」(スペース)をルビで打って、本文文字と訓点がEQフィールドコード内に入って分離しないように処理する。

といったやり方をしていました(それ用の検索置換マクロも残ってる)。

ただ、本文に訓点にも使われる文字(漢数字とか天地とか…)があったら脱字にしちゃいそう、とか面倒な面もあるので、訓点用スタイルを作っておいて一つ一つ書式設定していくのとどっちが良いか、という感じかも。

 

4,再読文字マクロ

本文フォント16ptにした「再読文字」用のマクロはこんな感じです。

「未」などの再読文字の本文文字を選択した状態でマクロを起動します。訓点がある場合、訓点も一緒に選択しておきます。

 

Sub Saidokumoji()
'
' 再読文字 Macro
' 記録日 01/03/16 記録者 yui
'
Selection.Cut
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
"EQ \o\al(\s\up 13(),", PreserveFormatting:=False
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.Fields.ToggleShowCodes
Selection.MoveRight Unit:=wdCharacter, Count:=22
Selection.Delete Unit:=wdCharacter, Count:=1
Selection.Paste
Selection.TypeText Text:=")"
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.MoveRight Unit:=wdCharacter, Count:=20
With Selection.Font
.Size = 8
.Spacing = 0
End With
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
"FILLIN ""右側の文字列を挿入して下さい", PreserveFormatting:=False
Selection.Fields.ToggleShowCodes
Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Selection.Cut
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
"EQ \o\al(\s\down 13(),", PreserveFormatting:=False
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.Fields.ToggleShowCodes
Selection.MoveRight Unit:=wdCharacter, Count:=24
Selection.Delete Unit:=wdCharacter, Count:=1
Selection.Paste
Selection.TypeText Text:=")"
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.MoveRight Unit:=wdCharacter, Count:=22
With Selection.Font
.Size = 8
.Spacing = 0
End With
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
"FILLIN ""左側の文字列を挿入して下さい", PreserveFormatting:=False
Selection.Fields.ToggleShowCodes
End Sub

 

 上のマクロは、

「未」などの16ptの本文文字を選択した状態で、

  1. 本文文字(訓点込)をカット
  2. 空のフィールドを挿入し、本文の右側に来るルビを指定するためのフィールドコード「EQ \o\al(\s\up 13(),」をフィールド内に打つ。
  3. カーソルを動かして、カットした本文文字を、さっき入力したフィールドコード「EQ \o\al(\s\up 13(),」の直後にペーストし、「)」を入力する。
  4. カーソルをルビ部分を指定する場所(フィールドコード「EQ \o\al(\s\up 13(),」の「up 13(」の直後)」に移動する。
  5. ルビのフォントサイズを「8」に指定。
  6. 右側に打つルビの文字列を入力するためのダイアログボックス(「右側の文字列を挿入して下さい」というもの)を表示させる。
  7. そのあと、右側のルビを打った本文文字・フィールドコードごとカットして、
  8. 左側のルビを打つための空のフィールドコード挿入、
  9. 「EQ \o\al(\s\down 13(),」というフィールドコードを打つ。
  10. 「EQ \o\al(\s\down 13(),」というフィールドコードの直後にカーソルを移動させて、さっきカットした、右側のルビを打った本文文字をルビごとペーストする(ここでフィールドコードが入れ子式になります)。その後に「)」を入力する。
  11. カーソルをルビ部分を指定する場所(フィールドコード「EQ \o\al(\s\down 13(),」」の「down 13(」の直後)」に移動する。
  12. フォントサイズを8に指定する。
  13. 左側に来る文字列を打つためのダイアログボックス(「左側の文字列を挿入して下さい」というもの)を表示させる。
  14. 入力した文字を左側に配置してフィールドコードを非表示にする。

 まあおおよそこういった処理をしています。

カーソルの移動は、全部何文字移動、みたいに指定しています(本来「\down」のスイッチは「\do」だけでも機能するんですが、そこ変えると文字数変わるから数字変えなきゃいけない…)」。

 

まあ何というか、原始的なマクロっていうのか…何ていうんですかね。ホント単純なマクロです。

送り仮名の時は全角スペースを入れて位置を調整します。

 

んで、訂正するときは、基本的にはその場所で右クリック→「フィールドコードを表示する」を選んで表示させ、直接中身を編集することになります。

 


修正用にスッキリとダイアログボックスで修正できるようにするマクロとかも、作れるだろうけど面倒なのでやってなかった(笑)

 

4,ルビ用マクロ

再読文字以外の送り仮名等は、本文16pt用のマクロを作って「□□ル」みたいに全角スペースで調整して打っていました。

マクロはこんな感じ。

 

Sub Rubi16pt()
'
' ルビ16pt Macro
' 記録日 01/03/16 記録者 yui
'
Selection.Cut
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
"EQ \o\al(\s\up 13(),", PreserveFormatting:=False
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.Fields.ToggleShowCodes
Selection.MoveRight Unit:=wdCharacter, Count:=22
Selection.Delete Unit:=wdCharacter, Count:=1
Selection.Paste
Selection.TypeText Text:=")"
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.MoveRight Unit:=wdCharacter, Count:=20
With Selection.Font
.Size = 8
.Spacing = 0
End With
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _
"FILLIN ""ルビ文字列を挿入して下さい", PreserveFormatting:=False
Selection.Fields.ToggleShowCodes
End Sub

 

5,ダイアログボックスで入力している部分の修正

ダイアログボックスで入力している部分は、

  1. その部分全体を「フィールドの表示」でフィールドの中身を表示させる。
  2. 送り仮名などを直接書き換えてしまうか、あるいは「FILLIN "右側の文字列を挿入して下さい」などとあるあたりで右クリックして「フィールドの更新」を選ぶと、ダイアログボックスが表示されるので変更する。

といったやり方になります。

 

 

6,エラーが起こったら

まあ単純で低レベルなマクロなので、時にエラーは起こります。

Wordは直上の書式設定を継承するから、その関係でルビとか訓点とかの書式設定が変になっちゃうみたいなこともあるかな…

いずれにせよ、うまく書式設定できなかったら、フィールドコードを表示させて直接編集。って感じでした。