![Lua 错误的起源](https://linux22.com/image/449051/Lua%20%E9%94%99%E8%AF%AF%E7%9A%84%E8%B5%B7%E6%BA%90.png)
如果lualatex
编译中断并出现以下终端输出:
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfkeysfiltered.c
ode.tex))[\directlua]:1: attempt to call a nil value (field 'get_functions_tabl
e').
l.1738 }
这是否意味着失败\directlua
了/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfkeysfiltered.code.tex
?
问题是,该文件确实不是包含一个directlua
。OTOH这只有在我让 lualatex 读取并解析我个人文档基础架构中的附加 Lua 文件后,错误才开始出现 - 但我也没有看到该附加文件中有任何可疑的相关内容。
答案1
你没有提供例子,但给出了一个猜测的例子
\documentclass{article}
\usepackage{tikz}
\begin{document}
\end{document}
终端输出的相关部分是
(/usr/local/texlive/2022/texmf-dist/tex/latex/pgf/systemlayer/pgfsys.sty
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex
(/usr/local/texlive/2022/texmf-dist/tex/generic/pgf/utilities/pgfkeysfiltered.c
ode.tex))
倒数第二行)
显示pgfkeysfiltered.code.tex
已读至末尾,因此最后)
显示的显示pgfkeys.code.tex
已读至末尾,因此此时错误消息中的任何行号均指打开文件堆栈顶部的文件,即pgfsys.code.tex
,其中第 1738 行是此调用}
的结束行\directlua
\directlua{
local lft = lua.get_functions_table()
lft[\string#lft+1] = function()
local lhs = token.scan_string()
local rhs = token.scan_string()
if lhs < rhs then
tex.sprint(-2, "-1")
elseif lhs == rhs then
tex.sprint(-2, "0")
else
tex.sprint(-2, "1")
end
end
token.set_lua("pgfsys@strcmp", \string#lft, "global")
}