Ticket #26455

\inhibitglue を実行すると hmode になる

Open Date: 2011-10-04 13:16 Last Update: 2011-10-26 20:34

Reporter:
Owner:
(None)
Type:
Status:
Closed
Component:
(None)
MileStone:
(None)
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
Fixed
File:
None

Details

状況を説明するため,次のソースを考えます:

%\input luatexja.sty
\def\stat{\ifvmode\message{V }\else\message{H }\fi}
\stat\inhibitglue\stat
\end
これを pTeX で実行すると,「V V 」と出ます.つまり,\inhibitglue 実行後でも垂直モードのままです.

しかし,LuaTeX で(最初のコメント行は外す)実行すると,「V H 」と出ます. つまり,\inhibitglue 実行時には,自動的に水平モードになります. LuaTeX-ja では,\inhibitglue の指定は,水平リストに whatsit node を追加することによって行っているため,現在のリストが水平モードになっていないといけないからです.

そのため,この現在の実装では,例えば

a\par\inhibitglue\par b
のような入力で,空行が生まれるという症状が発生してしまいます. 「\inhibitglue では水平モードになる」ことを仕様として固定化させるのもなくはないですが,それでは不自然です. やはり pTeX のように,\inhibitglue 実行後でも垂直モードは垂直モードのまま,という挙動が期待されます.

さて,この挙動はどうやればシンプルに実現できるのでしょうか? こちらでも考えてみますが,何か良い案がありましたらお願いします.

Ticket History (3/4 Histories)

2011-10-04 13:16 Updated by: h7k
  • New Ticket "\inhibitglue を実行すると hmode になる" created
2011-10-04 20:01 Updated by: h7k
Comment

現実的には,段落開始時には和文処理グルーが入らないような JFM を使うことが多いと思うので, 必要性はさほど高いわけではないかもしれませんが,commit 94f90a7 で,とりあえずの解決策をいれてみました.

方針は,垂直モードで \inhibitglue が発行されたら,\everypar の値をいじって, 水平モードに移行時に(\inhibitglue を表している)whatsit の挿入処理をおこなう,というものです.

この方法だと,「次段落開始時」に効力が発生するので,

\par\inhibitglue\hrule あ
のような場合でも効力が発生することになります.マニュアルに明示しておけばこれは許されるかな?

2011-10-05 08:25 Updated by: h7k
  • Resolution Update from None to Fixed
2011-10-26 20:34 Updated by: h7k
  • Status Update from Open to Closed
  • Ticket Close date is changed to 2011-10-26 20:34
Comment

これもひとまず完了としておきましょう.もっとうまい案があったりしたら再オープンということで.

Attachment File List

No attachments

Edit

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Login