我需要直接从 lualatex 获取宏的值并在函数调用中返回它
function GetMacroValue(macro)
return macro.value
end
我尝试过各种各样的方法,比如使用 tex.print 将值存储在临时值中,但是由于 tex.print 在函数调用/luacode 块之后执行,所以它不起作用
function GetMacroValue()
tex.print("\\directlua{value = tonumber('\\the\\"..macro.."')}")
return value
end
除 tex.print 行不执行之外,其他均有效,直到事后才返回先前的值。
因为tex.execute
还不存在,还有其他方法吗?我试过协程,但它不起作用(或者我无法让它工作)。
答案1
如果它是计数寄存器,则可以直接访问它( )。其他存储项(tex.count[...]
如、和寄存器)也类似toks
。请参阅手册第 4.13.4 节。skip
dimen
attribute
如果这是您只能在“运行时”获得的东西,那么您必须使用协程来实现它。我已经回答了另一个问题,其中给出了一个协程的简短工作示例:
答案2
似乎获取这些 tex 值的唯一方法是将它们传递给 lua。这可能是由于 lualatex 中的错误,因为手册指出这是可能的。问题的存在是因为 lua 代码无法将控制权交还给 TeX(以获取变量)然后从中断的地方继续。协程应该允许这种行为,但由于 TeX 和 Lua 之间的某些不匹配,至少在我的情况下,会引发异常。
我想到解决这个问题的最好方法是编写一个宏,将我需要的所有变量从 TeX 传递到 Lua,并在每次执行 lua 代码时透明地调用它(通过包装\directlua
)。