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