我知道这个问题看起来像这个但那里给出的解决方案对我来说不起作用。
我正在尝试用\element{foo}{bar}
automultiplechoice 替换宏来获得类似的东西
\begin{qcm}{foo}
bar
\end{qcm}
我尝试过 environ 包,文档可以编译,但是使用时会忽略以这种方式定义的问题\restitutegroup
。这是我的 MWE:
\documentclass[a4paper,11pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{environ}
\usepackage{automultiplechoice}
\usepackage{amsmath}
\usepackage{amsfonts}
\NewEnviron{qcm}[1]{\element{#1}{\BODY}}
\begin{document}
\begin{qcm}{test}
\begin{question}{foo}
foo
\end{question}
\end{qcm}
\element{test}{
\begin{question}{bar}
bar
\end{question}
}
\begin{examcopy}[2]
\insertgroup{test}
\clearpage
\end{examcopy}
\end{document}
仅恢复“酒吧”问题。
任何线索都将不胜感激!
答案1
在环境,除非明确做出定义,否则定义的范围是局部的\global
。因此,qcm
如果处理不当,在 内做出的任何定义都可能无效。这就是这种情况\element
- 它创建一个令牌列表,其定义(或内容)不会在组中存活下来。
下面的例子做出了定义\global
,并确保\BODY
在之后仍然存在qcm
。
\documentclass{article}
\usepackage{environ}
% https://github.com/bdemeshev/pr201/blob/master/prob_exams_collection/automultiplechoice.sty
\usepackage{automultiplechoice}
\NewEnviron{qcm}[1]{%
\def\arg{#1}%
\expandafter\element\expandafter\arg\expandafter{\BODY}}
\makeatletter
\renewcommand{\element}[2]{%
\AMC@prepare@element{#1}%
\global\csname #1@\romannumeral\AMCtok@k\endcsname={#2}%
}
\makeatother
\begin{document}
\begin{qcm}{test}
\begin{question}{foo}
foo
\end{question}
\end{qcm}
\element{test}{%
\begin{question}{bar}
bar
\end{question}
}
\begin{examcopy}[2]
\insertgroup{test}
\clearpage
\end{examcopy}
\end{document}