假设我有一个 lua 表bucket
。现在我想在bucket
其中添加一个新项目\directlua
,然后扩展这个相同的项目\latelua
。就像这样:
\directlua{
bucket = {}
function addItem(name)
bucket[\string#bucket + 1] = { name = name }
return \string#bucket
end
}
\directlua{
idx1 = addItem("foo")
}
\latelua{
bucket[idx1]["pos"] = 111
}
\directlua{
idx2 = addItem("bar")
}
\latelua{
bucket[idx2]["pos"] = 222
}
\bye
是否可以在不使用idx1
and 的情况下重写该示例idx2
?
这样做的目的是将这些成对的\directlua
/调用\latelua
放入用户宏中。(只编写一个宏,而不是为每个新项目编写一个宏。)
\directlua
提供了参数<name>
和<16-bit-number>
。这些参数可以用来实现这一点吗?
答案1
我猜你想要类似的东西
\directlua{
bucket = {}
function addItem(name)
bucket[\string#bucket + 1] = { name = name }
return \string#bucket
end
}
\directlua{
tex.print("\string\\latelua{bucket[" .. addItem("foo") .. "][\string\"pos\string\"] = 111}")
}
\directlua{
tex.print("\string\\latelua{bucket[" .. addItem("bar") .. "][\string\"pos\string\"] = 222}")
}
x
\vfill
\break
\directlua{
print("\string\n: ", bucket[1]['pos'])
print("\string\n: ", bucket[2]['pos'])
}
\bye
给出终端输出
: 111
: 222
显示分页符后设置的存储桶。