Was ist \newluafunction? Wie kann ich es verwenden?

Was ist \newluafunction? Wie kann ich es verwenden?

Wie im Titel. Ich fand voneinige Antwortendass es in LaTeX ein Makro zu geben scheint \newluafunction.

Die Dokumentation scheint jedoch recht spärlich zu sein ...

Screenshot von source2e.pdf

  • Was ist ein „benannter \luafunction“? Ist er erweiterbar/nicht erweiterbar/global usw.?
  • Was bedeutet es, einen zu definieren?
  • Wie kann ich das Makro verwenden, um eine Funktion zu definieren und dann die Funktion aufzurufen?

Antwort1

Bildbeschreibung hier eingeben

Ein Wrapper, der eine Zahl für die Verwendung mit \luafunctionund zuweist \luadef, aber möglicherweise nicht so nützlich im Vergleich zu \newluacmdoder seinem Lua-Äquivalent ist luatexbase.new_luafunction.

Ein über definierter csname \luadefgreift direkt auf eine Luatex-Lua-Funktionstabelle zu, ist also gleichwertig mit der Verwendung \directluamit einem Lua-Funktionsaufruf, mit dem Unterschied, dass es eine Erweiterung eines Makronamens spart und es spart, das Argument von \directuaals TeX-Token zu erweitern und jedes Mal zur Auswertung an Lua weiterzugeben. Das \qqqFolgende ist also \directlua{qqq()}noch schneller.

\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}

In der Praxis wäre es besser gewesen, einfach die Größe der lua.get_functions_table()Tabelle zu verwenden, statt einer von TeX zugewiesenen Zahl, aber damals schien es eine gute Idee zu sein.

Siehe auch \newluacmddas später hinzugefügte, das Nummern aus der gleichen Sequenz zuweist, aber die Notwendigkeit eines zusätzlichen expliziten Aufrufs von\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}

luatexbasestellt die gleiche Zuweisung von Lua aus zur Verfügung, wodurch luatexbase.new_luafunctiondas Hin- und Herschicken von Zahlen zwischen TeX und Lua entfällt. Dies definiert \qqqden direkten Verweis auf die Lua-Funktion, wobei die gesamte Zuweisung und Definition in Lua erfolgt.

\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}

verwandte Informationen