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


■漢字間スペース

pTeXでは、漢字と漢字の間に小さなスペース(グルー)を挿入します。 これは、つぎの2つの目的のために使用されます。 漢字間にスペースを入れない場合、組み幅が全角幅の整数倍にならない限り、 行の両端をそろえるための調整箇所がなくなり、オーバーフルやアンダーフルに なってしまいますので、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{}のような プリミティブやボックスが挿入された場合は、和欧文間スペースは入りません。 ただし、イタリック補正を挿入するコマンド(\/)は、この限りではありません。

日本語TeX version 1.7 p1.0.9Gで、テキスト内数式で挿入されるイタリック補正の影響で、 その数式の最後の文字と続く漢字との間に四分アキが入りませんでしたが、 バージョンp2.1以降では修正されています(1996/09/20)。

また、\refや\pagerefコマンドによって挿入された英字と、それらのコマンドに続く漢字との 間に四分アキが入らなかいというバグも報告されていますが、これはLaTeXのマクロによる影響です。 このバグについても、pLaTeX2eでは修正してあります(1995/08/25)。


■和文フォントによるスペース

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

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

なお、このスペースは、\hskipによるスペースとなっていますので、 行頭や行末などでは消えてなくなります。

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


■記号類との間

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

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

    \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


[pTeX home page]