\newcommand 和延迟扩展

\newcommand 和延迟扩展

我想定义一个\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}

相关内容