使用命令定义的变量(例如随机值)未正确存储在 lua 列表中

使用命令定义的变量(例如随机值)未正确存储在 lua 列表中

我正在为班上的所有学生编写随机练习,并且我想存储解决方案以便将它们全部打印在文档末尾(在最终版本中,每个问题将打印在专用页面上,所有解决方案将打印在单独的页面上)。

我使用 lualatex 来存储和打印解决方案。在下面的 MWE 中,宏\hide{}无法存储变量\student\a\b\c因此它们无法在\solutions宏中恢复。

任何帮助,将不胜感激。

\documentclass{article}
\usepackage{pgffor} % for 'foreach' loop
\usepackage{xfp} % for '\fpeval'
\setlength\parindent{0pt}

\usepackage{expl3}
\usepackage{luacode} % for '\luastringN' and '\luaexec' macros
\directlua{ anslist ={}; }

\ExplSyntaxOn
% defining \hide
\cs_set:Npn \hide #1 { 
   \directlua{ table.insert(anslist,\luastringN{#1}) }
   \phantom{ #1 }
}
% defining \addanswer
\cs_set:Npn \addanswer #1 {
   \directlua{ table.insert(anslist,\luastringN{#1}) }
}
\ExplSyntaxOff

\def\solutions{
    \luaexec{%
        for i,v in ipairs(anslist) do
            tex.sprint ( v )
        end }
}

\begin{document}

\textbf{questions:}\\

\foreach \student in {student1,student2,student3} {
\edef\a{ \fpeval{(randint(1,9)) } }
\edef\b{ \fpeval{(randint(1,9)) } }
\edef\c{ \fpeval{ \a+\b } }

question for \student: $\a+\b= ?$ \newline
\hide{answer for \student: $\a+\b= \c$ \\[5mm]}

}

\textbf{solutions:}\\

\solutions

\end{document}

答案1

您将\student\a\b`\c\ 存储为未扩展的宏......

使用\luastring(而不是\luastringN)。

\documentclass{article}
\usepackage{pgffor} % for 'foreach' loop
\usepackage{xfp} % for '\fpeval'
\setlength\parindent{0pt}

\usepackage{expl3}
\usepackage{luacode} % for '\luastringN' and '\luaexec' macros
\directlua{ anslist ={}; }

\ExplSyntaxOn
% defining \hide
\cs_set:Npn \hide #1 { 
   \directlua{ table.insert(anslist,\luastring{#1}) }
   \phantom{ #1 }
}
% defining \addanswer
\cs_set:Npn \addanswer #1 {
   \directlua{ table.insert(anslist,\luastring{#1}) }
}
\ExplSyntaxOff

\def\solutions{
    \luaexec{%
        for i,v in ipairs(anslist) do
            tex.sprint ( v )
        end }
}

\begin{document}
\textbf{questions:}\\

\foreach \student in {student1,student2,student3} {
\edef\a{ \fpeval{(randint(1,9)) } }
\edef\b{ \fpeval{(randint(1,9)) } }
\edef\c{ \fpeval{ \a+\b } }

question for \student: $\a+\b= ?$ \newline
\hide{answer for \student: $\a+\b= \c$ \\[5mm]}

}

\textbf{solutions:}\\

\solutions

\end{document}

相关内容