Lua 和 LuaLaTeX 中的不同输出

Lua 和 LuaLaTeX 中的不同输出

我正在使用 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 源的一部分。)

相关内容