コラム

2つ以上の文字を全角1文字に収める際には、アドバンス幅で倍率を修正する

本や雑誌では、(1)のような見出し番号が全角1文字の幅になっています。ワードのスタイルやアウトラインでは実現できないために、通常、インデントを調整して文字送りを一致させています。でも、文字幅を調節すれば、本や雑誌と同じように全角1文字の幅にできます。手作業でこれをやるのは大変面倒で、現実的ではないのですが、マクロを使えば自動的に調節できます。

文字幅の調節

「VA見出し変換」では、見出し番号が2桁だったり、丸括弧があったりする場合、フォントの「文字幅」を調節することで全角1文字分の幅に収まるようにしています。(「均等割付」でも実現できますが、数字と丸括弧の調節量に差を設けないと数字が見えなくなる場合があるため、「文字幅」を使っています。)

例えば、2桁の全角文字を全角1文字分の幅に収める場合は、それぞれの文字の文字幅の「倍率」を50%に設定すれば実現するはずです。

問題点

ところが、この「倍率」の修正には、アドバンス幅(文字の左端から次の文字の左端までの距離、送り幅の方が一般的みたいです)が考慮されていないため、文字間隔が大きい場合(1行あたりの文字数が少ない場合)には、文字間隔のズレが目立つようになります。

  • 文字間隔が狭い場合(文字間隔のズレが目立たない)
  • 文字間隔が広い場合(文字間隔のズレが目立つ)

対策

「VA見出し変換」では、この修正を次のコードで実現しています。

Function FontMag(dblTarget As Double, lngLen As Long, sngAdvWidth As Single) As Double
'修正量を求める
Dim sngAdjust As Single
    sngAdjust = (sngAdvWidth - 12) * 4

'フォント倍率を算定する
FontMag = (dblTarget / lngLen) - sngAdjust
    
'許容外の場合
If FontMag <= 0 Then
    '倍率を変更しない
    FontMag = 100
End If
End Function

dblTarget:目標とする倍率
lngLen:収める文字数
sngAdvWidth:アドバンス幅

「12」はフォント幅です。この値を変更すれば、12ポイント以外の文字にも対応できるはずですが、確認していません。

「4」は実験で求めた値です。何を意味しているのかは分かりません。

アドバンス幅の求め方については、こちらの記事をご参照ください。

関連記事

コメント

タイトルとURLをコピーしました