![\directlua0{} 与 \directlua{} 有何区别](https://linux22.com/image/471455/%5Cdirectlua0%7B%7D%20%E4%B8%8E%20%5Cdirectlua%7B%7D%20%E6%9C%89%E4%BD%95%E5%8C%BA%E5%88%AB.png)
标题就是问题所在。根据 LuaTeX 手册,\directlua{code}
命令和代码之间可能有一个 16 位数字,我\directlua0{code}
到处都看到过。但我没有看到任何关于该数字的解释。
我没有代码问题。只是询问信息。
答案1
这是一个调试功能,如果您有很多调用,可以使用它\directlua
来更轻松地找出错误来自何处。ID 用于查找名称,然后将其用作函数的名称,例如在堆栈跟踪中出现的名称。
举个例子:
\documentclass{article}
\directlua{
error'Oh no, this failed.'
}
\stop
失败并显示以下消息
[\directlua]:1: Oh no, this failed. stack traceback: [C]: in function 'error' [\directlua]:1: in main chunk.
这里给出了来源,如果您的文档中[\directlua]:1:
有很多调用,这可能不是很有帮助。\directlua
相反,你可以为 Lua 段指定一个名称:
\documentclass{article}
\directlua{ lua.setluaname(1, "=[foobar]") }
\directlua1{
error'Oh no, this failed.'
}
\stop
现在你得到错误
[foobar]:1: Oh no, this failed. stack traceback: [C]: in function 'error' [foobar]:1: in main chunk.
因此,如果foobar
您有一个更具描述性的字符串(例如包含调用的包名称\directlua
),那么您将更容易找出问题的原因。当然,这需要您使用一个唯一的数字,在 LaTeX 中,您可以使用 分配一个\newluachunkname
。
如果您只想在几个地方使用一个名称,那么获得相同效果的更直接的方法是使用name
关键字内联指定名称:
\documentclass{article}
\directlua name {=[foobar]} {
error'Oh no, this failed.'
}
\stop
这将再次产生:
[foobar]:1: Oh no, this failed. stack traceback: [C]: in function 'error' [foobar]:1: in main chunk.
因为\directlua
这通常没什么用,因为直接错误也会显示 TeX 行号,这有助于进行调用,但如果您定义函数并传递它们,它仍然很有用。因为\latelua
它往往更有用,因为 TeX 提供的行号没有那么有用。
最后,\directlua0
您在某些软件包中看到的是无用的。理论上,它使用 ID 为 0 的注册名称进行此\directlua
调用,但由于使用此名称的调用随处可见,而且没有人设置过,所以lua.setluaname(0, '...')
这没什么区别。使用未分配名称的号码与一开始就未指定号码相同。