我正在使用 luacode*,但每个单独的块都不记得其他块的状态。有什么办法可以解决这个问题吗?我想在程序开始时将一些大型计算移到表中并引用它们。
答案1
tl;dr:使用全局变量。
LuaTeX 中的 Lua 块确实会保留其状态,尤其是它们在相同的环境中运行(这意味着它们会看到相同的全局变量,除非你做了一些特殊的事情)。它们没有相同的局部变数可以将它们看作是从同一个 Lua 程序依次加载的不同文件。因此
\documentclass{article}
\usepackage{luacode}
\begin{luacode*}
local l_table = "I am local and not visible from other blocks"
glostr = "I am a global string and can be read anywhere in the document"
\end{luacode*}
\begin{document}
\begin{luacode*}
assert(l_table == nil, "l_table should not be defined anymore because it was defined local")
tex.sprint(glostr) -- On the other hand, glostr was global, so it is still visible
\end{luacode*}
\end{document}