
Tengo algunos luacode
en un .tex
archivo que funcionan bien, pero no en un .sty
archivo, con este mensaje de error:
¿Argumento desbocado? ! El archivo finalizó mientras se escaneaba el uso de \luacode@grab@lines. \par <*> mwe.tex
.tex
archivo
\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
archivo
\newcommand{\For}{%
\begin{luacode}
for i = 0,10
do
tex.print (i)
end
\end{luacode}
}
Respuesta1
El luacode
entorno 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 luacode
es 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é \directlua
y 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).