\radical の挙動

名前: 北川
日時: 2011-02-23 17:47:13
IPアドレス: 121.2.11.*

北川です. \sqrt(というか\radical)について e-pTeX, upTeX の不具合を見つけました. 次を radical_bug.tex として保存し, --- ここから --- \scrollmode\tracingonline=1 \showboxdepth=10000\showboxbreadth=10000 \font\j=jis at20pt\textfont8\j$\jfam8\sqrt ぴ\showlists$ \end --- ここまで --- ptex, eptex, uptex に通すとそれぞれ > \radical"270370 (ptex,期待される挙動) > \radical"27A4D4 (eptex) > \radical"383074 (uptex, euptex) となります. 調査してみると,ptex-base.ch に原因があった(pTeX で起こらないのは偶々) ことに気づいたので,ここに投稿しました. 原因は,数式用アクセントの場合と同じく, 根号を表現するメモリ領域(下の left_delimiter)が和文文字の漢字コードを格納する場所 と同じであり,上書きしてしまうようです.以下は tex.web, Part 34 にある定義です: > @d left_delimiter(#)==#+4 {first delimiter field of a noad} > @d right_delimiter(#)==#+5 {second delimiter field of a fraction noad} > @d radical_noad_size=5 {number of |mem| words in a radical noad} 解決策としては,数式用アクセントのときと同じく, > @d left_delimiter(#)==#+5 {first delimiter field of a noad} > @d right_delimiter(#)==#+4 {second delimiter field of a fraction noad} > @d radical_noad_size=6 {number of |mem| words in a radical noad} とすることにより衝突を回避すればいいように思います. (right_delimiter がかち合いますが,fraction_noad でのみしか使われないので問題は無いと思います) なお,pTeX で発生せず,e-pTeX, upTeX で見られる理由ですが,これは texmfmem.h 内で定義されている memory_word の定義によるものと思われます: (少なくとも私の環境では)memory_word は 8バイトですが, pTeX では left_delimiter の中身は「右」4バイトに, 一方 math_kcode は「左」4バイトに格納されますなので,衝突は起こりません. しかし,e-pTeX, upTeX では left_delimiter の中身は 8バイト全てを使って格納されるので衝突するわけです.

この書き込みへの返事:

お名前
題名 
メッセージ(タグは <a href="...">...</a> だけ使えます。適宜改行を入れてください)