
Eu tenho alguns luacode
em um .tex
arquivo que funcionam bem, mas não em um .sty
arquivo - com esta mensagem de erro:
Argumento descontrolado? ! O arquivo terminou durante a verificação do uso de \luacode@grab@lines. \par <*> mwe.tex
.tex
arquivo
\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
arquivo
\newcommand{\For}{%
\begin{luacode}
for i = 0,10
do
tex.print (i)
end
\end{luacode}
}
Responder1
O luacode
ambiente 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 \directlua
e 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.)