\newlua함수란 무엇인가요? 어떻게 사용할 수 있나요?

\newlua함수란 무엇인가요? 어떻게 사용할 수 있나요?

제목에서와 같이. 나는에서 찾았다몇 가지 답변\newluafunctionLaTeX에 매크로가 있는 것 같습니다 .

그러나 문서가 매우 부족한 것 같습니다 ...

source2e.pdf의 스크린샷

  • "이름이 있는 \luafunction"이란 무엇입니까? 확장 가능/확장 불가/전역 등인가요?
  • 하나를 정의한다는 것은 무엇을 의미합니까?
  • 매크로를 사용하여 함수를 정의한 다음 함수를 호출하려면 어떻게 해야 합니까?

답변1

여기에 이미지 설명을 입력하세요

\luafunctionand 와 함께 사용할 숫자를 할당하는 래퍼이지만 Lua \luadef와 동등하거나 그에 상응하는 .\newluacmdluatexbase.new_luafunction

를 통해 정의된 csname은 \luadefluatex Lua 함수 테이블에 직접 액세스하므로 Lua 함수 호출과 함께 사용하는 것과 동일합니다 \directlua. 단, 매크로 이름의 확장을 저장하고 인수를 \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}

luatexbaseluatexbase.new_luafunctionTeX와 Lua 사이를 오가는 전달 숫자를 저장하는 것과 동일한 할당을 Lua에서 사용할 수 있게 만듭니다 . \qqqLua에서 모든 할당과 정의가 이루어지는 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}

관련 정보