我有一个令我惊讶的问题。
我有这样的 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 放在局部变量前面,并将全局变量重命名为首字母大写,无论是变量还是方法,这样就解决了所有问题。虽然可能只是间接解决,但问题解决了。太棒了!