luatex tex.print 不会触发 process_input_buffer 回调?

luatex tex.print 不会触发 process_input_buffer 回调?

我定义了一个新的 LaTeX 命令来使用 LuaLaTeX 随机化类似 itemize 的列表,如下所示:

\newcommand*\Randomize{%
    \directlua{%
        questions.itemstbl = {""}
        luatexbase.add_to_callback("process_input_buffer", questions.collect_lines, "collect_lines")
    }%
}

Lua 代码只是收集\Randomize和之间的所有行(项目) \EndRandomize,并打印收集项目的混洗表:

\newcommand*\EndRandomize{%
    \directlua{tex.print(questions.shuffleTable(questions.itemstbl))}%
}

collect_lines当找到该行时,回调最终被删除\EndRandomize

只需按照以下直接输入即可,效果非常好:

\begin{itemize}
\Randomize
    \item some text
    \item more text
    \item another text
\EndRandomize
\end{itemize}

当我尝试从 .tex 文件读取(使用 Lua)此类环境并使用 打印(显示)它们时,会出现问题tex.print。似乎 LuaTeX 在执行 时不会触发此数据处理回调tex.print,因此\Randomize命令不起作用(没有\Randomize它就不起作用)。

这个问题有简单的解决方案吗?我正在考虑生成一个临时的 .tex 文件,其中包含所有读取 itemize 类环境,然后生成\input此文件,以便触发回调。但我试图避免磁盘 rw 延迟。

相关内容