我正在使用 TeX Live 2020(带有 LuaLaTeX 1.12.0)和 Lua 5.3。
.tex
当我使用lualatex --shell-escape
结果内容编译以下文件时.pdf
,是a
。
\documentclass{article}
\usepackage{luacode}
\begin{luacode}
T =
{
{ "a", 5 },
{ "b", 2 }
}
\end{luacode}
\begin{document}
\luaexec{tex.print(T[1])}
\end{document}
此外,T[1]=="a"
和T[2]==5
不会T[3]
输出值,也不会在 LuaLaTeX 中抛出错误。T[1][1]
和T[1][2]
也不会执行任何操作,但T[2][1]
会抛出
attempt to index a number value (field '?')
直接在Lua中运行类似的代码,即如下代码:
T =
{
{ "a", 5 },
{ "b", 2 }
}
print(T[1])
我得到了预期的输出,即表的地址:
table: 0x559417e736b0
这是怎么回事?我做错了什么?我很困惑。
答案1
看起来像是“功能” luacode
:如果我将所有内容放在一行中或使用,\directlua
那么一切都会好起来。具体来说,如果你跟踪 TeX,外括号会丢失,因此 Lua 会看到
T =
{ "a", 5 },
{ "b", 2 }
这给出了您所看到的结果。
这表明luacode
括号组被删除了,可能是分隔参数。一般来说,我会避免luacode
使用,要么使用\directlua
“安全”的 Lua 代码片段,要么将它们放在单独的文件中并使用require()
。(Lua 文件可以是使用“filecontents”的 TeX 源的一部分。)