`tex.print` 或 `tex.sprint` 中有什么?

`tex.print` 或 `tex.sprint` 中有什么?

在外部文件中,我将以下三行放入文件中.lua

function texTest(name)
    x = tex.print("Hello " .. name)
end

当我从.tex文件中调用它时,它会被正确解释。出于好奇,我设置了一个断点,line 2并从脚本中调用它.lua来检查其中的内容,但一旦到达断点,它就会引发以下异常:

Exception has occurred: test.lua:5: attempt to index a nil value (global 'tex')

我正在使用 VS Code 和lua扩展lua debug。有什么方法可以查看其中的内容吗?

答案1

正如 Joseph Wright 在他的评论中所写,tex.print是一个 LuaTeX 函数,它不属于常规 Lua,因此您无法在 LuaTeX 之外看到它。那么让我们问问 LuaTeX 它是什么:Lua 附带了debug包含 的库debug.getinfo()。这可用于f通过获取任何 Lua 函数的源代码debug.getinfo(f).source。将其包装在(普通)LuaTeX 包装器中可得到:

\directlua{
      texio.write_nl('The source of tex.print is ' .. debug.getinfo(tex.print).source)
}
\bye

如果我们将其保存为luadebug.tex并通过命令行执行它,luatex luadebug.tex我们将获得:

This is LuaTeX, Version 1.10.0 (TeX Live 2019) 
 restricted system commands enabled.
(./luadebug.tex
The source of tex.print is =[C])
warning  (pdf backend): no pages of output.
Transcript written on luadebug.log.

因此来源是...=[C]

那是什么意思?这tex.print意味着不是通过 Lua 实现,它是一个可以从 Lua 调用的 C 函数。因此,要找到实现,您必须查看 LuaTeX 的 C 源代码,具体为库文件

相关内容