.tex 内の適切な lua コードが .sty では動作しないのはなぜですか?

.tex 内の適切な lua コードが .sty では動作しないのはなぜですか?

正常に動作するファイルもありますが、ファイルによっては動作しないものもありluacode、次のエラー メッセージが表示されます。.tex.sty

引数が暴走しましたか? ! \luacode@grab@lines の使用をスキャン中にファイルが終了しました。\par <*> mwe.tex

.texファイル

\documentclass{article}
\usepackage{luacode,mwe}

\begin{document}
% works fine
for i = 0,10
do
    tex.print (i)
end

% doesn't work
\For
\end{document}

mwe.styファイル

\newcommand{\For}{%
\begin{luacode}
for i = 0,10
do
    tex.print (i)
end
\end{luacode}
}

答え1

このluacode環境は、catcodeコードを変更して入力をLuaに渡しやすくすることで機能します。これはマクロ内では機能しません。入力はすでにトークン化されています。その意味では、luacode逐語的環境に似ています。Luaコードの長いブロックの場合は、別のファイルに配置するのが最適ですが、短いブロックの場合は、\directlua要件を守り、それを意識する必要があります。ここでは最小限です。

\newcommand*\For{%
\directlua{
    for i = 0,10 do
      tex.print(i)
    end
  }%
}

(実際にエラーが発生するのは、\end{luacode}逐語的なアプローチを使用して が検索されているためであり、これはマクロ内では常に失敗します。)

関連情報