有token.set_char
但没有token.get_char
。从
\chardef\MyNumber=1
我可以用
\directlua{
token.set_char('MyNumber', 421)
}
并在 TeX 端检索值
\the\MyNumber
但是如何在lua端检索该值?
我想到了一个解决方案,但它并不令人满意:使用tex.runtoks
,lua 可以要求 tex 将 MyNumber 复制到专用计数寄存器,然后使用 检索该值tex.count
。
答案1
最快的方法是使用以下方法从 token 中提取值.index
\directlua{
local char_given = token.command_id'char_given'
local function get_char(name)
local tok = token.create(name)
if not (tok.command == char_given) then
error'Not a chardef'
end
return tok.index
end
token.set_char('MyNumber', 421)
local restored = get_char'MyNumber'
}
\bye
但是如果您希望它更加通用,并且例如接受计数寄存器,您还可以将标记添加到输入流,然后将其作为数字进行扫描:
local function get_char(name)
token.put_next(token.create(name))
return token.scan_int()
end
token.set_char('MyNumber', 421)
local restored = get_char'MyNumber'
}
\bye
答案2
如果你正在使用\directlua
(即没有外部.lua
文件),那么你可以通过在 Lua 代码内部扩展它来将值从 TeX 世界转移到 Lua 世界,因为\directlua
在读取 Lua 代码之前会扩展它的参数。例如
\directlua{... ... myvariable = \the\MyNumber ... ...}