Guter Lua-Code in .tex funktioniert nicht in .sty?

Guter Lua-Code in .tex funktioniert nicht in .sty?

Ich habe einige luacodein einer .texDatei, die einwandfrei funktionieren, aber nicht in einer .styDatei – mit dieser Fehlermeldung:

Außer Kontrolle geratener Streit? ! Datei wurde beim Scannen der Verwendung von \luacode@grab@lines beendet. \par <*> mwe.tex

.texDatei

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

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

Antwort1

Die luacodeUmgebung funktioniert, indem sie Catcode-Codes ändert, um die Eingabe einfacher an Lua weiterzugeben. Das kann innerhalb eines Makros nicht funktionieren: Die Eingabe ist bereits tokenisiert. In diesem Sinne luacodeähnelt sie einer Verbatim-Umgebung. Für jeden langen Block Lua-Code ist es am besten, ihn in einer separaten Datei zu haben, während ich bei kurzen Blöcken bei den Anforderungen bleiben \directluaund sie beachten würde, die hier minimal sind.

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

(Sie erhalten tatsächlich den Fehler, da die \end{luacode}Suche mit einem wörtlichen Ansatz erfolgt und dieser in einem Makro immer fehlschlägt.)

verwandte Informationen