
У меня есть некоторые luacode
в .tex
файле, которые работают нормально, но не в .sty
файле — с таким сообщением об ошибке:
Аргумент, вышедший из-под контроля? ! Файл закончился при сканировании использования \luacode@grab@lines. \par <*> mwe.tex
.tex
файл
\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
файл
\newcommand{\For}{%
\begin{luacode}
for i = 0,10
do
tex.print (i)
end
\end{luacode}
}
решение1
Среда luacode
работает, изменяя коды catcode, чтобы входные данные было легче передавать в Lua. Это не может работать внутри макроса: входные данные уже токенизированы. В этом смысле luacode
это похоже на среду verbatim. Для любого длинного блока кода Lua лучше всего иметь его в отдельном файле, в то время как для коротких блоков я бы придерживался \directlua
и знал о требованиях, которые здесь минимальны
\newcommand*\For{%
\directlua{
for i = 0,10 do
tex.print(i)
end
}%
}
(На самом деле вы получаете ошибку, так как \end{luacode}
выполняется поиск с использованием дословного подхода, а это всегда приводит к ошибке внутри макроса.)