持久的 Lua 环境

持久的 Lua 环境

我正在使用 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}

生产 在此处输入图片描述

相关内容