ほんとだ,1 と 2 の間も広いように見えます.
とりあえず \showbox してみたところ,
\box0= \hbox(7.77591+1.38855)x82.73315, direction TLT .\hbox(7.77591+1.38855)x9.6222, direction TLT ..\JY3/mc/m/n/10 あ .\glue 0.0 plus 0.4 minus 0.4 .\hbox(7.77591+1.38855)x9.6222, direction TLT ..\JY3/mc/m/n/10 あ .\glue 0.0 plus 0.4 minus 0.4 .\hbox(7.77591+1.38855)x9.6222, direction TLT ..\JY3/mc/m/n/10 あ .\glue 2.40555 plus 1.0 minus 1.0 .\EU2/lmr/m/n/10 .\EU2/lmr/m/n/10 1 .\EU2/lmr/m/n/10 .\EU2/lmr/m/n/10 2 .\glue 2.40555 plus 1.0 minus 1.0 .\hbox(7.77591+1.38855)x9.6222, direction TLT ..\JY3/mc/m/n/10 あ .\glue 2.40555 plus 1.0 minus 1.0 .\EU2/lmr/m/n/10 .\glue 2.40555 plus 1.0 minus 1.0 .\hbox(7.77591+1.38855)x9.6222, direction TLT ..\JY3/mc/m/n/10 あとなりました. 本来入るはずの \penalty10000\glue 3.33 plus 1.665 minus 1.11 の代わりに EU2 の半角空白文字が入っているようです.
fontspec(というか xunicode)を読み込むと \nobreakspace の定義が変更されるのが原因でしょうか.
> \nobreakspace=macro: ->\EU2-cmd \nobreakspace \EU2\nobreakspace . l.4 \show\nobreakspace
xunicode.sty に
\DeclareUTFcharacter[\UTFencname]{x00A0}{\nobreakspace}
というのがあります.U+00A0 は NBSP みたいです.fontspec(というか xunicode)を読み込むと \nobreakspace の定義が変更されるのが原因でしょうか.
\EU2\nobreakspace ->\?-\nobreakspace が,何らかの原因で \EU2\nobreakspace ->\ltjalchar "00A0\relax に置き換えられてしまうのが原因のようです.
\EU2\nobreakspace の定義を commit d79ca27 で元のものに戻すようにしてみました.これでうまくいってそうな気がしますが…….
\EU2\nobreakspace の定義を commit d79ca27 で元のものに戻すようにしてみました.
確認しました.自分の試した範囲では問題なさそうです.
\EU2\nobreakspace の定義を commit d79ca27 で元のものに戻すようにしてみました.
確認しました.自分の試した範囲では問題なさそうです.
よかった.ひとまず「修正済み」としておきました.
\EU2\nobreakspace ->\?-\nobreakspace が,何らかの原因で \EU2\nobreakspace ->\ltjalchar "00A0\relax に置き換えられてしまう
xunicode-reload-nobreakspc.tex のように,fontspec + \ReloadXUnicode{EU2} という環境下でも同じような状況が起こるようです (xunicode.sty 0.981).
xunicode.sty 中の \check@hexcom@digits@ のコードを見てみると,次のようになっています. (fontspec ロード時の実行を「1回目」,\ReloadXUnicode による実行を「2回目」と書きます.)
まず,\expandafter\def\csname\UTFencname\string#8\endcsname{\char"#1#2#3#4\relax} (l.249) によって,
次に,256--261 行目の
{% macro #8 exists already ...
\let\protect\noexpand
\edef\UTF@testi{#8}\def\UTF@testii{#8}%
\ifx\UTF@testi\UTF@testii\aftergroup\UTF@ignore
\else\aftergroup\UTF@doit\fi
}%
という block において,
\iffalse % ←これは \UTF@doit が吸収する
% ... but when it isn't robust, make it so
...
\fi
へと制御が移り,\EU2\nobreakspace ->\?-\nobreakspace と定義が変わる.
なお,\UTF@ignore, \UTF@doit の定義は
% indirect conditionals, to avoid unbalance when reloaded
\def\UTF@ignore#1{\csname iffalse\endcsname}
\def\UTF@doit#1{\csname iftrue\endcsname
となっています.完了としておきます.
fontspec が読み込まれていると,和文文字とチルダの間にスペースが挿入されている(?)のか妙にアキが大きくなります.
\documentclass{ltjarticle} \usepackage{fontspec} \begin{document} あああ~1~2あ~あ. \end{document}あ'と1',あ'とあ'の間が広く空きます.fontspec を読み込まない場合は大丈夫みたいです.