「意図」通りに書くと次のようになります。
\protected\def\inhibitglue{\relax%
\ifvmode
\ltj@reset@globaldefs
\xdef\ltj@@g@newep{%
\everypar={\the\everypar}\the\everypar\noexpand\ltj@@ihb}%
\everypar\expandafter{\ltj@@g@newep}%
\ltj@restore@globaldefs
\else\ifhmode\ltj@@ihb\fi\fi}
ただここで問題になることがあって、元のコードでは \@@tempa と \@@tempb という「自分の名前空間の外(自分の制御外)」の制御綴に対してグローバルな代入をする、 という(あまり一般的でない)ことを行っています。 これは意図したことでしょうか?
多分そうではなくて、ltj が抜けたのだと思いますが、 それでも、(ローカル代入に使っている)\ltj@@tempa 等にグローバル代入をするのは非常に危険です。 上のコードでは取りあえず専用の変数 \ltj@@g@newep にしています。 (一般的に、同じ変数に対してグローバル代入とローカル代入を混ぜるのは危険なので、可能な限り避けるべきです。)
なお、TeX コードの見直しについては、こちらでブランチを切っていて、 明らかな間違いについてはそこで修正することにします。
確認が必要なものはチケットに上げていきます。
zrbabbler への返信
手元では以下のコードでこけていたのですが,とりあえず上記のようにしたら通るようになりました.
\documentclass{article}
\usepackage{luatexja}
\newenvironment{sample}{\trivlist\item\inhibitglue}{\endtrivlist}
\begin{document}
\begin{sample}
\end{sample}
\end{document}
おお,ありがとうございます.仰られた通り,
元々の \everypar の内容が「XXXXX」である場合、 それを「\everypar={XXXX}XXXX\ltj@@ihb」に変える
という目的でのみ急ごしらえで書いたコードでした.\xdef にしたのもたぶんその場の成り行きで書いてしまったものかと.
\inhibitglue の別の問題で悩んでいてコメントの文面を悩んでいたら,いつのまにか進んでいてびっくり.
# 「別の問題」というのは,チケット #28162 にも書きましたが,ltjsarticle.cls 下で
あああ
\inhibitglue\paragraph{hoge}
という入力をすると,(\inhibitglue 由来の whatsit ノードだけからなる)余計な行ができてしまうということです.
ノード挿入以外でなんとか(段落頭の)JFM グルー挿入抑制を制御できたらいいのですが.
チケット #28162 もあって,外側の \ifvmode ... \fi はなくしましたので,完了とします.
十日ほど前に、どこかで \inhibitglue がコケているという話を聞いて、 調べてみました。
\protected\def\inhibitglue{\relax% \ifvmode \ltj@reset@globaldefs \xdef\@@tempa{\the\everypar}% \xdef\@@tempb{\everypar={\@@tempa}\@@tempa\noexpand\ltj@@ihb}% \everypar\expandafter{\@@tempb}% \ltj@restore@globaldefs \else\ifhmode\ltj@@ihb\fi\fi}恐らく、意図としては、
だと思うのですが、 上のコードだと XXXXX が (2 回目の) \xdef 中で完全展開されてしまうことになり、 これは一般的には正しくありません。