什么是 \newluafunction?如何使用它?

什么是 \newluafunction?如何使用它?

正如标题所示。我从一些答案\newluafunctionLaTeX 中似乎有一个宏。

然而,文档似乎相当稀少......

来自 source2e.pdf 的截图

  • 什么是“命名\luafunction”?它是可扩展/不可扩展/全局的吗?等等。
  • 定义一个是什么意思?
  • 如何使用宏定义一个函数,然后调用该函数?

答案1

在此处输入图片描述

\luafunction一个包装器,分配一个数字与和 一起使用,但与或其 Lua 等效\luadef项 相比可能没那么有用。\newluacmdluatexbase.new_luafunction

通过 定义的 csname\luadef直接访问 luatex Lua 函数表,因此它相当于使用\directluaLua 函数调用,只不过它省去了宏名称的扩展,并且省去了将 的参数扩展为\directuaTeX 标记并每次传递给 Lua 进行评估的过程。所以\qqq下面的方法\directlua{qqq()}更快。

\documentclass{article}

\directlua{
qqqn=0
function qqq ()
qqqn=qqqn+1
tex.print(qqqn)
end
}
\newluafunction\qqqn

\directlua {
local t = lua.get_functions_table()
t[\the\qqqn] = qqq
}

\luadef\qqq\qqqn

\begin{document}

A: \qqq

B: \qqq

\end{document}

实际上,最好只是使用lua.get_functions_table()表的大小,而不是 TeX 分配的数字,但当时这似乎是个好主意。

另请参阅\newluacmd后来添加的,它从同一序列分配数字,但避免了额外显式调用\luadef

\documentclass{article}

\directlua{
qqqn=0
function qqq ()
qqqn=qqqn+1
tex.print(qqqn)
end
}
\newluacmd\qqq

\directlua {
local t = lua.get_functions_table()
t[\number\allocationnumber] = qqq
}

\begin{document}

A: \qqq

B: \qqq

\end{document}

luatexbase使 Lua 中的分配与此相同,从而luatexbase.new_luafunction节省了在 TeX 和 Lua 之间来回传递数字的时间。这定义\qqq为直接引用 Lua 函数,所有分配和定义都在 Lua 中完成。

\documentclass{article}

\directlua{
qqqn=0
function qqq ()
qqqn=qqqn+1
tex.print(qqqn)
end

local funid= luatexbase.new_luafunction()

lua.get_functions_table()[funid]=qqq
token.set_lua('qqq',funid)
}

\begin{document}

A: \qqq

B: \qqq

\end{document}

相关内容