¿Qué es la función \newlua? ¿Como puedo usar lo?

¿Qué es la función \newlua? ¿Como puedo usar lo?

Como en el título. encontré dealgunas respuestasque parece haber una macro \newluafunctionen LaTeX.

Sin embargo, la documentación parece bastante escasa...

Captura de pantalla de source2e.pdf

  • ¿Qué es un "nombrado \luafunction"? ¿Es ampliable/no ampliable/global, etc.?
  • ¿Qué significa definir uno?
  • ¿Cómo puedo usar la macro para definir una función y luego llamar a la función?

Respuesta1

ingrese la descripción de la imagen aquí

Un contenedor que asigna un número para usar con \luafunctiony \luadef, pero posiblemente no sea tan útil en comparación con \newluacmdsu equivalente Lua, luatexbase.new_luafunction.

Un csname definido vía \luadefaccede directamente a una tabla de funciones de luatex Lua, por lo que es equivalente a usarlo \directluacon una llamada de función de Lua, excepto que guarda una expansión de un nombre de macro y guarda expandir el argumento de \directuacomo tokens TeX y pasarlo a Lua. para ser evaluado cada vez. Así que \qqqa continuación es \directlua{qqq()}más rápido.

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

En la práctica, hubiera sido mejor simplemente usar el tamaño de la lua.get_functions_table()tabla, en lugar de un número asignado por TeX, pero parecía una buena idea en ese momento.

Consulte también \newluacmdel que se agregó más adelante y que asigna números de la misma secuencia pero evita la necesidad de una llamada explícita adicional a\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}

luatexbasehace que la misma asignación esté disponible desde Lua, lo luatexbase.new_luafunctionque ahorra el paso de números entre TeX y Lua. Esto define \qqqreferirse directamente a la función Lua y toda la asignación y definición se realiza en 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}

información relacionada