Um bom código lua em .tex não funciona em .sty?

Um bom código lua em .tex não funciona em .sty?

Eu tenho alguns luacodeem um .texarquivo que funcionam bem, mas não em um .styarquivo - com esta mensagem de erro:

Argumento descontrolado? ! O arquivo terminou durante a verificação do uso de \luacode@grab@lines. \par <*> mwe.tex

.texarquivo

\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.styarquivo

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

Responder1

O luacodeambiente funciona alterando os códigos catcode para facilitar a passagem da entrada para Lua. Isso não funciona dentro de uma macro: a entrada já está tokenizada. Nesse sentido, luacodeé semelhante a um ambiente literal. Para qualquer bloco longo de código Lua é melhor tê-lo em um arquivo separado, enquanto para blocos curtos eu manteria \directluae estaria ciente dos requisitos, que aqui são mínimos

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

(Na verdade, você recebe o erro quando \end{luacode}está sendo encontrado usando uma abordagem literal, e isso sempre falhará dentro de uma macro.)

informação relacionada