文字間のスペースについて

漢字間のグルー

pTeXでは、漢字と漢字の間に小さなグルー(伸び縮みするスペース)を挿入し、 つぎの2つの目的のために使用されます。

行の両端をそろえるための文字間調整

1行全体を全角幅固定の漢字だけを並べた場合、 組み幅が全角幅の整数倍にならない限り、 漢字間にグルーを入れないと、 行の両端をそろえるための調整箇所がなくなり、 その行はオーバーフルやアンダーフルになってしまいます。 そのため、pTeXでは漢字と漢字の間に小さなグルーを入れています。 このグルーの大きさは、 \kanjiskipで設定されており、 pTeXでの初期値は"0pt plus .4pt minus.4pt"です。 したがって組み幅が全角幅にちょうど収まれば、漢字間グルーは入りません。 漢字間グルーが入る場合でも、それぞれの漢字の間に入るスペースの大きさは、

                   1
         文字幅×--------------
              1行の文字数-1

ですので、ほとんどの場合見た目に悪影響はありません。 もっとも和欧混植のように全角幅の文字以外の要素が入った場合などには、 ほかのスペースや途中で改行できない英単語などの影響も受けますので、 広めのスペースが入ることもあります。

文字送りの変更

和文組版では、ある一部分だけ文字送りを変更するというようなことがあります。 pTeXには文字送りそのものを変更する機能がありませんが、 漢字間のグルーを使って文字送りを調整することができます。 たとえば、

   \kanjiskip=.1zw plus.5pt minus.5pt

のようにすれば、漢字間に全角幅の10分の1のスペースが追加されますので、 文字送りが全角の1.1倍になったように見えます。 逆に、つぎのようにすると、漢字間の幅が詰まることになります。

   \kanjiskip=-.1zw plus.5pt minus.5pt

なお、漢字間グルーは、水平リストの組み立てが一通り終了したあとで挿入される ということに気をつけてください。 つまり、段落が終了した時点、 すなわち\parコントロールシーケンスか空白行を見つけたときか、 ボックスを閉じたときに、設定されている値が挿入されるということです。 したがって、一つの段落内で何度も設定を変更したり、 グルーピングによって部分的な変更をしようとしても、 段落やボックスの終了時の値となります。

また、漢字間グルーの自動挿入は、 \noautospacingで抑制、 \autospacingで許可したりすることができますが、 これらも水平リストの組み立てが終った時点の状態が有効となります。

和欧文間のグルー

pTeXでは、漢字と英字の間にも、自動的に \xkanjiskipの値のグルーが挿入されます。 一般にこの漢字と英字の間には、 「四分アキ」と呼ばれる全角幅の1/4幅のスペースが使われます。 pTeXでの初期値は、".25zw plus1pt minus1pt"となっています。 少しの伸縮長を持たせているのは、各行の両端をそろえるためです。 漢字間グルーよりも大きめの伸縮長になっているのは、 この和欧文間のグルーでより多くの調整を行なった方が美しい組版結果が得られるからです。

和欧文間グルーの挿入は、 \noautoxspacing\autoxspacingによって、抑制/許可をすることができます。 ただし、漢字間グルーと同様に、 水平リストの組み立てが終った時点の状態が有効となります。

和欧文間グルーは、自動挿入が抑制されていなければ、 つぎの条件が整った場所に挿入されます。

ここで、「漢字と英字」、「英字と漢字」というのは、 マクロが展開された時点での状態です。 したがって、マクロが展開されたときに\kernや\hbox{}のような プリミティブやボックスがある場合は、和欧文間グルーは入りません。 ただし、イタリック補正を挿入するコマンド(\/)は、この限りではありません。

和文フォントによるグルー

pTeXでは、日本語機能の実現のために TFMフォーマットを拡張したJFMフォーマットも使用します。 pTeXは、漢字を読み込んだ後その漢字の大きさを知るためにJFMファイルを参照します。 JFMファイルではほとんどの漢字が全角幅となっていますが、 記号類などは全角幅を持っていません。 もしすべての文字を全角幅とすると、 つぎの図でわかるように文字の組み合わせによって無意味なスペースができてしまいます。

zenkaku-space.png

そこで、文字の組み合わせによってスペースを調整するような仕組みをつけました。

kanji-glue.png

このスペースは\hskipによるグルー(伸び縮みするスペース)となっていますので、 行頭や行末などでは消えてなくなります。

また、このスペースを付けたくない場合は、その箇所に \inhibitglueを指定します。 この場合、その文字は本来の文字幅で処理されます。

なお、スペースを故意に入れてしまうとこのような調整を一切行わないので、 注意が必要です。

記号類との間のグルー

pTeXでは、漢字と漢字、漢字と英字の間に自動的にグルーが挿入されます。 ところが、ある種の文字が隣り合ったときに、漢字間や和欧文間スペースが入ったり、 そのまま文字幅の情報を使うとかえって醜くなることがあります。 漢字どうしの組み合わせならば、JFMファイルでコントロールすることができます。 また英文字どうしならば、オリジナルのTeXからその機能があります。 したがって、問題となるのは、漢字と英文字の間の処理ということになります。

pTeXではこの問題を、 スペースを挿入しない文字を指定することによって解決しています。 たとえば、英文字の「(」と、続く漢字との間に、 \xkanjiskipで指定される 自動的に挿入される和欧文間グルーを 入れたくない場合は、

   \xspcode`(=1

のように指定します。 すると、漢字と「(」の間には和欧文間グルーが入りますが、 「(」と漢字の間には入りません。 指定できる数値については、 \xspcodeを参照してください。

逆に、\inhibitxspcodeでは、 直前、直後の英字とのスペースを抑制したい漢字についてを指定することができます。

参考に、pTeXのkinsoku.texで設定されている値を示します。

   \xspcode`(=1    \xspcode`)=2     \xspcode`[=1
   \xspcode`]=2    \xspcode``=1     \xspcode`'=2
   \xspcode`;=2    \xspcode`,=2     \xspcode`.=2

   \inhibitxspcode`、=1   \inhibitxspcode`。=1
   \inhibitxspcode`,=1   \inhibitxspcode`.=1
   \inhibitxspcode`;=1   \inhibitxspcode`?=1
   \inhibitxspcode`(=2   \inhibitxspcode`)=1
   \inhibitxspcode`[=2   \inhibitxspcode`]=1
   \inhibitxspcode`{=2   \inhibitxspcode`}=1
   \inhibitxspcode`‘=2   \inhibitxspcode`’=1
   \inhibitxspcode`“=2   \inhibitxspcode`”=1
   \inhibitxspcode`〔=2   \inhibitxspcode`〕=1
   \inhibitxspcode`〈=2   \inhibitxspcode`〉=1
   \inhibitxspcode`《=2   \inhibitxspcode`》=1
   \inhibitxspcode`「=2   \inhibitxspcode`」=1
   \inhibitxspcode`『=2   \inhibitxspcode`』=1
   \inhibitxspcode`【=2   \inhibitxspcode`】=1
   \inhibitxspcode`―=0   \inhibitxspcode`~=0
   \inhibitxspcode`…=0   \inhibitxspcode`¥=0
   \inhibitxspcode`°=1   \inhibitxspcode`′=1
   \inhibitxspcode`″=1

参考書籍: アスキー出版局『日本語TeXテクニカルブックI』アスキー出版技術部, 1990年(絶版)


Last-modified: 2019-01-11 (金) 16:51:30 (7d)