제목에서와 같이. 나는에서 찾았다몇 가지 답변\newluafunction
LaTeX에 매크로가 있는 것 같습니다 .
그러나 문서가 매우 부족한 것 같습니다 ...
- "이름이 있는
\luafunction
"이란 무엇입니까? 확장 가능/확장 불가/전역 등인가요? - 하나를 정의한다는 것은 무엇을 의미합니까?
- 매크로를 사용하여 함수를 정의한 다음 함수를 호출하려면 어떻게 해야 합니까?
답변1
\luafunction
and 와 함께 사용할 숫자를 할당하는 래퍼이지만 Lua \luadef
와 동등하거나 그에 상응하는 .\newluacmd
luatexbase.new_luafunction
를 통해 정의된 csname은 \luadef
luatex Lua 함수 테이블에 직접 액세스하므로 Lua 함수 호출과 함께 사용하는 것과 동일합니다 \directlua
. 단, 매크로 이름의 확장을 저장하고 인수를 \directua
TeX 토큰으로 확장하여 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
luatexbase.new_luafunction
TeX와 Lua 사이를 오가는 전달 숫자를 저장하는 것과 동일한 할당을 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}