在 luacode 块内调用起始/终止字母环境

在 luacode 块内调用起始/终止字母环境

我正在使用 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

相关内容