耦合对 `\directlua` 和 `\latelua` 的调用

耦合对 `\directlua` 和 `\latelua` 的调用

假设我有一个 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

是否可以在不使用idx1and 的情况下重写该示例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

显示分页符后设置的存储桶。

相关内容