什麼是 \newluafunction?我該如何使用它?

什麼是 \newluafunction?我該如何使用它?

如標題所示。我發現從一些答案\newluafunctionLaTeX 裡好像有一個宏。

然而,文檔似乎相當稀疏......

截圖來自source2e.pdf

  • 什麼叫「有名\luafunction」?它是可擴展/不可擴展/全域等嗎?
  • 定義一個是什麼意思?
  • 如何使用巨集定義函數,然後呼叫該函數?

答案1

在此輸入影像描述

分配數字以與\luafunction和 一起使用的包裝器,但與或其 Lua 等效項\luadef相比可能沒有那麼有用。\newluacmdluatexbase.new_luafunction

透過 定義的 csname\luadef直接存取 luatex Lua 函數表,因此它相當於\directlua與 Lua 函數呼叫一起使用,只不過它保存了巨集名稱的擴展,並且保存了擴展作為\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}

相關內容