![`tex.print` 或 `tex.sprint` 中有什么?](https://linux22.com/image/478028/%60tex.print%60%20%E6%88%96%20%60tex.sprint%60%20%E4%B8%AD%E6%9C%89%E4%BB%80%E4%B9%88%EF%BC%9F.png)
在外部文件中,我将以下三行放入文件中.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 源代码,具体为库文件。