我正在使用 ConTeXt 模块创建一封信letter
,我想在 Lua 中处理一个外部文件,并根据外部文件中的数据更改一些信函设置和文本。我对正确的使用方法感到困惑context.startletter()
。
\usemodule[letter]
\startluacode
userdata = userdata or {}
function userdata.printLetter()
context.startletter()
context("Basic letter text")
context.stopletter()
end
\stopluacode
\starttext
\ctxlua{userdata.printLetter()}
\stoptext
编译这个简单的信件示例undefined control sequence
为我带来了一些收获。
编辑:经过一些修改,似乎更改context.stopletter()
为tex.print("\\stopletter")
会生成我期望的字母。我仍然对导致问题的机制感到困惑,或者为什么这一改变有效。
答案1
字母环境使用缓冲区来收集内容,然后再添加其他元素(例如开头)。要从 Lua 使用缓冲区环境,您必须在代码中使用context.delayed
而不是。context
\usemodule[letter]
\startluacode
userdata = userdata or {}
function userdata.printLetter()
context.delayed.startletter()
context("Basic letter text")
context.delayed.stopletter()
end
\stopluacode
\starttext
\ctxlua{userdata.printLetter()}
\stoptext