.tex의 좋은 lua 코드가 .sty에서 작동하지 않나요?

.tex의 좋은 lua 코드가 .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환경은 입력을 Lua에 더 쉽게 전달할 수 있도록 catcode 코드를 변경하여 작동합니다. 매크로 내에서는 작동할 수 없습니다. 입력이 이미 토큰화되어 있습니다. 그런 의미에서 luacode축어적 환경과 유사합니다. Lua 코드의 긴 블록에 대해서는 별도의 파일에 저장하는 것이 가장 좋지만, 짧은 블록에 대해서는 \directlua최소한의 요구 사항을 준수하고 알고 있어야 합니다.

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

\end{luacode}(실제로는 축어적 접근 방식을 사용하여 오류가 발견되고 매크로 내에서 항상 실패하게 됩니다.)

관련 정보