Хороший код lua в .tex не работает в .sty?

Хороший код lua в .tex не работает в .sty?

У меня есть некоторые 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}выполняется поиск с использованием дословного подхода, а это всегда приводит к ошибке внутри макроса.)

Связанный контент