¿El buen código lua en .tex no funciona en .sty?

¿El buen código lua en .tex no funciona en .sty?

Tengo algunos luacodeen un .texarchivo que funcionan bien, pero no en un .styarchivo, con este mensaje de error:

¿Argumento desbocado? ! El archivo finalizó mientras se escaneaba el uso de \luacode@grab@lines. \par <*> mwe.tex

.texarchivo

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

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

Respuesta1

El luacodeentorno funciona cambiando los códigos catcode para que la entrada sea más fácil de pasar a Lua. Eso no puede funcionar dentro de una macro: la entrada ya está tokenizada. En ese sentido luacodees similar a un ambiente textual. Para cualquier bloque largo de código Lua es mejor tenerlo en un archivo separado, mientras que para bloques cortos me atendré \directluay tendré en cuenta los requisitos, que aquí son mínimos.

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

(En realidad, obtienes el error porque \end{luacode}se encuentra utilizando un enfoque similar al literal, y eso siempre fallará dentro de una macro).

información relacionada