Lua 函数 myFunction 与直接返回 myFunction 结果的函数之间的结果不同,如 \showtokens\expandafter 所示

Lua 函数 myFunction 与直接返回 myFunction 结果的函数之间的结果不同,如 \showtokens\expandafter 所示

我有一个令我惊讶的问题。
我有这样的 LaTeX 代码:

\newcommand*{\addEvents}{%
    \showtokens\expandafter{%
        \directlua{tex.print(writeEvents())}%
    }%
}
...
\addEvents
...

如果我使用 LuaLatex 构建该代码,我会得到编译器输出:

\dateDescription {-302}{1}{north west}{20}{120}{\textbf {-302}\\ bla bla};

这正是我想要的。

如果我 :

  • 调整我的 Lua 函数以直接返回该文本,而不是计算它
function writeEvents()
    return [[\dateDescription {-302}{1}{north west}{20}{120}{\textbf {-302}\\ bla bla};]]
end
  • 删除 \showtokens\expandafter :

我在生成的 PDF 中获得了我想要的输出。
这让我认为我的 Lua 函数正在做正确的工作。

现在如果我:

  • 恢复我的 Lua 函数,使用 \showtokens\expandafter 输出上述文本
  • 删除 \showtokens\expandafter

基本上,如果我让它完成其工作而不捕获输出:

\textbf {-302} 缺失。好像它被跳过了。

换句话说,我得到了不同的结果:

  • 使用 Lua 函数 vs
  • 用 \showtokens\expandafter 写入的结果替换其结果

怎么会这样?

答案1

最后,我只需要遵循 Lua 编译器的建议,将 local 放在局部变量前面,并将全局变量重命名为首字母大写,无论是变量还是方法,这样就解决了所有问题。虽然可能只是间接解决,但问题解决了。太棒了!

相关内容