
Ich habe einige luacode
in einer .tex
Datei, die einwandfrei funktionieren, aber nicht in einer .sty
Datei – mit dieser Fehlermeldung:
Außer Kontrolle geratener Streit? ! Datei wurde beim Scannen der Verwendung von \luacode@grab@lines beendet. \par <*> mwe.tex
.tex
Datei
\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
Datei
\newcommand{\For}{%
\begin{luacode}
for i = 0,10
do
tex.print (i)
end
\end{luacode}
}
Antwort1
Die luacode
Umgebung 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 \directlua
und 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.)