直接从lualatex获取宏的值

直接从lualatex获取宏的值

我需要直接从 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 节。skipdimenattribute

如果这是您只能在“运行时”获得的东西,那么您必须使用协程来实现它。我已经回答了另一个问题,其中给出了一个协程的简短工作示例:

https://tex.stackexchange.com/a/20905/243

答案2

似乎获取这些 tex 值的唯一方法是将它们传递给 lua。这可能是由于 lualatex 中的错误,因为手册指出这是可能的。问题的存在是因为 lua 代码无法将控制权交还给 TeX(以获取变量)然后从中断的地方继续。协程应该允许这种行为,但由于 TeX 和 Lua 之间的某些不匹配,至少在我的情况下,会引发异常。

我想到解决这个问题的最好方法是编写一个宏,将我需要的所有变量从 TeX 传递到 Lua,并在每次执行 lua 代码时透明地调用它(通过包装\directlua)。

相关内容