Como en el título. encontré dealgunas respuestasque parece haber una macro \newluafunction
en LaTeX.
Sin embargo, la documentación parece bastante escasa...
- ¿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
Un contenedor que asigna un número para usar con \luafunction
y \luadef
, pero posiblemente no sea tan útil en comparación con \newluacmd
su equivalente Lua, luatexbase.new_luafunction
.
Un csname definido vía \luadef
accede directamente a una tabla de funciones de luatex Lua, por lo que es equivalente a usarlo \directlua
con una llamada de función de Lua, excepto que guarda una expansión de un nombre de macro y guarda expandir el argumento de \directua
como tokens TeX y pasarlo a Lua. para ser evaluado cada vez. Así que \qqq
a 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 \newluacmd
el 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}
luatexbase
hace que la misma asignación esté disponible desde Lua, lo luatexbase.new_luafunction
que ahorra el paso de números entre TeX y Lua. Esto define \qqq
referirse 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}