.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}使用逐字逐句的方法发现,并且这在宏中总是会失败。)

相关内容