LuaTeX-ja と Texinfo を組み合わせると node 名に日本語が使えない

LuaTeX-ja と Texinfo を組み合わせると node 名に日本語が使えない

- TrueRoad の投稿
返信数: 4
添付のファイルを展開して、

$ luatex test.texi

を実行すると、

Runaway argument?
@empty 一
! Forbidden control sequence found while scanning use of \parseargline.
<inserted text>
@par
<to be read again>
@unnumbered
l.9 @unnumbered
              一
?

というエラーが出て止まってしまいます。
LuaTeX 0.80.0 + LuaTeX-ja 20150512
LuaTeX 0.89.2 + LuaTeX-ja 20160208
ともに同じ症状です。

Texinfo 側の問題かとも思ったのですが、

・「@node 一」の後ろに ASCII 文字を追加して「@node 一1」にしたもの (test1.texi) ではエラーがでない
 (注:Texinfo では @ をカテゴリコード 0 にしていますので @node がコントロールシークエンスです)

・「@node 一」の後ろにコメントアウト文字を追加して「@node 一@c」にしたもの (testc.texi) ではエラーがでない
 (注: Texinfo ではコメントは % ではなくて @c にしています)

・LuaTeX-ja を読み込まないようにしたもの (test-noja.texi) ではエラーが出ない
 (注:日本語フォントが設定されないので、日本語の文字が出なくなってしまいます。)

・XeTeX で処理した場合は、エラーにならず正常
 (注: xdvipdfmx のバージョンによっては「しおり」からジャンプできませんが、
    最新の XeTeX / xdvipdfmx なら何も問題ありません。)

という状況ですので、LuaTeX-ja 側に何かあるのかも、と思っています。
ここまでしか追えてなくて大変申し訳ないのですが、何か分かるでしょうか。
TrueRoad への返信

Re: LuaTeX-ja と Texinfo を組み合わせると node 名に日本語が使えない

- 前田 一貴 の投稿
LuaTeX-ja での改行文字の扱いと不整合を起こしているようです.
詳しくは LuaTeX-ja のドキュメントの13節を見てほしいのですが,
pTeX のように和文文字の直後に改行文字があってもスペースが入らないように,
LuaTeX-ja では和文文字の直後に改行文字がある場合に U+FFFFF を挿入する
という処理をします.ここで,U+FFFFF はカテゴリコード14(コメント文字)に
設定されています.

Texinfo の @node は,定義を見たところ行末まで引数として読み取るという処理をするようです (\parseargline).
ここで,@comment,@c がある場合はその前で読み取りを終える (\argremovecomment, \argremovec) ことで,
次の行まで引数にとることはないようにしているのですが,
カテゴリコード14の文字 (U+FFFFF) が現れることは考慮していないので,
次の行の @unnumbered まで引数として読んでしまって,
@unnumbered は \outer と定義されているから
「! Forbidden control sequence found ...」のエラーになるようです.

(まだ対処法までは考えていませんが,とりあえず投稿します.)
前田 一貴 への返信

Re: LuaTeX-ja と Texinfo を組み合わせると node 名に日本語が使えない

- TrueRoad の投稿
前田さん

ご説明いただきありがとうございます。
例えば、

・和文直後に挿入するものを U+FFFFF から変更できるようにしていただく
・texinfo-ja.tex で LuaTeX-ja を読み込んだら、U+FFFFF から @c に変更する(LuaTeX-ja のバージョン判定が必要になるかもしれない)

といったような処理であればできるかなぁ、と思いました。
あまりスッキリしない気がする方法ではありますが。。。

前田 一貴 への返信

Re: LuaTeX-ja と Texinfo を組み合わせると node 名に日本語が使えない

- TrueRoad の投稿
とりあえず、副作用があり、あまり解決になっていませんが、以下の方法でエラーの回避ができました。

LuaTeX-ja のコードを見ていると、和文文字直後の改行文字処理では、U+FFFFF のカテゴリコードが 14 の時のみ挿入するようになっているように見えました。

ですので、U+FFFFF のカテゴリコードを 14 以外にしてしまえば、エラーは起きなくなるのではないかと考え、添付したファイルを試したところ、確かにエラーは起きなくなりました。

もちろん、このままですと、本文中での和文文字直後の改行でも U+FFFFF が挿入されなくなるので、余計なスペースが入ってしまうという副作用がある、と思っています。
TrueRoad への返信

Re: LuaTeX-ja と Texinfo を組み合わせると node 名に日本語が使えない

- 前田 一貴 の投稿
対応遅れてすみません.
LuaTeX-ja 側のチケットを作成しました.
https://osdn.jp/ticket/browse.php?group_id=5593&tid=36096