.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環境透過更改 catcode 代碼來運作,使輸入更容易傳遞給 Lua。這不能在巨集內部工作:輸入已經被標記化。從這個意義上luacode說,類似於逐字環境。對於任何長的 Lua 程式碼區塊,最好將其放在單獨的檔案中,而對於短的區塊,我會堅持\directlua並注意要求,這裡的要求是最小的

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

(實際上,您會收到錯誤,因為是\end{luacode}使用逐字記錄的方法找到的,並且在巨集內部總是會失敗。)

相關內容