我想定义一个\newcommand
,其定义中包含\item*
(星号前面没有空格)。运行此 MWE:
% This moodle-test.tex file
% Run it with: pdflatex --shell-escape moodle-test.tex
%
\documentclass[11pt,twoside]{article}
\usepackage{moodle}
\begin{document}
\newcommand{\answera}{
\item* One
\item Two
\item Three
}
\begin{quiz}{}
\begin{multi}{Question A}
Write 1 in letters
\answera
\end{multi}
\end{quiz}
\end{document}
我收到此错误:
没有文件 moodle-test.aux。
!moodle 软件包错误:多项选择题未给出正确答案。
请参阅 moodle 软件包文档以了解解释。输入 H 可立即获得帮助。...
l.18 \end{multi}
因为\item*
没有正确传播到\newcommand
环境中multi
(内联代码反而起作用了)。诊断正确吗?如何修复?
答案1
一种可能性是使用s强制\answera
在插入环境之前进行扩展。下面的大部分代码都是为了做到这一点,这样我就不必输入太多的s。multi
\expandafter
\expandafter
需要注意的是:该getitems
软件包对多余空格的存在非常敏感。请注意,我插入了百分号%
和第一行的结尾\newcommand{\answera}{%
。如果没有它,编译将失败。
\documentclass[11pt,twoside]{article}
\usepackage{moodle}
\begin{document}
\newcommand{\makemulti}[3]{\begin{multi}{#3}
#2
#1
\end{multi}}
\newcommand{\titlea}{Question A}
\newcommand{\questiona}{Write 1 in letters}
\newcommand{\answera}{%
\item* One
\item Two
\item Three%
}
\begin{quiz}{}
\expandafter\makemulti\expandafter{\answera}{\questiona}{\titlea}
\end{quiz}
\end{document}