我定义了一个新的 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 延迟。