열거 패키지를 사용하여 무작위로 열거 목록을 섞습니다.
Nov 16 2020
시험 작성을위한 템플릿을 만들고 있으며 컴파일 타임에 열거 된 목록을 무작위로 섞고 싶습니다. 이 질문에 대한 답변 은 그 목적으로 작동했지만 'Student View'와 'Key'보기 사이를 전환 할 수있는 다른 기능을 사용하고 있으며 제공된 솔루션이 enumerate
패키지 의 기능과 작동하지 않습니다. 다른 기능을 구성 할 때 사용했습니다.
다음은 무작위 화 기능이없는 MWE입니다.
\documentclass{article}
\usepackage[dvipsnames]{xcolor}
\usepackage{amsmath, enumerate, ifthen, multicol, tikz}
\newif\ifgrading
\newcommand*\circleAns[1]{\tikz[baseline=(char.base)]{
\node[shape=circle,draw,inner sep=2pt,color=ForestGreen] (char) {#1};}}
\makeatletter
\newcommand{\itemAns}{
\ifgrading
\stepcounter{enum\romannumeral\@enumdepth}
\item[\circleAns{\textcolor{ForestGreen}{\@nameuse{label\@enumctr}}}]
\else \item
\fi
}
\makeatother
\begin{document}
\begin{multicols}{2}
\gradingtrue
\begin{enumerate}[a)]
\itemAns
\item
\item
\end{enumerate}
\gradingfalse
\begin{enumerate}[a)]
\itemAns
\item
\item
\end{enumerate}
\end{multicols}
\end{document}
출력 생성 :
이상적으로는 무작위 화 기능을 통해 및를 계속 사용할 수 \begin{enumerate}[<options>]
있고 \itemAns
반복성을 위해 무작위 생성 프로세스에 대한 시드를 설정할 수도 있습니다. 귀하의 도움에 미리 감사드립니다.
답변
1 egreg Nov 16 2020 at 07:13
다음은 시드를 수정하여 반복 가능한 방식으로 답변을 섞는 방법입니다. 종자로 공급할 학생 수를 기준으로 공식을 고안하십시오.
\documentclass{article}
%\usepackage{xparse} % not needed with LaTeX 2020-10-01 or later
\usepackage{enumitem} % much more powerful than enumerate
\usepackage[dvipsnames]{xcolor}
\usepackage{tikz}
\newcommand*\circleanswer[1]{%
\smash{\tikz[baseline=(char.base)]{%
\node[shape=circle,draw,inner sep=2pt,color=ForestGreen] (char) {#1};
}}%
}
\ExplSyntaxOn
\sys_gset_rand_seed:n { 43221+32 } % a fixed number + the student number
\NewDocumentEnvironment{answers}{+b}
{
\begin{enumerate}[label=\__shaun_answers_maybecorrect:n {\alph*})]
\shaun_answers:n { #1 }
\end{enumerate}
}{}
\NewDocumentCommand{\grading}{}
{
\bool_gset_true:N \g_shaun_answers_grading_bool
}
\NewDocumentCommand{\notgrading}{}
{
\bool_gset_false:N \g_shaun_answers_grading_bool
}
\seq_new:N \l__shaun_answers_seq
\bool_new:N \l__shaun_answers_correct_bool
\bool_new:N \g_shaun_answers_grading_bool
\cs_new_protected:Nn \shaun_answers:n
{
\seq_set_split:Nnn \l__shaun_answers_seq { \item } { #1 }
\seq_pop_left:NN \l__shaun_answers_seq \l_tmpa_tl
\seq_shuffle:N \l__shaun_answers_seq
\exp_last_unbraced:Ne \__shaun_answers_item:
{ \seq_use:Nn \l__shaun_answers_seq { \__shaun_answers_item: } }
}
\cs_new_protected:Nn \__shaun_answers_item:
{
\peek_charcode_remove:NTF +
{ \bool_set_true:N \l__shaun_answers_correct_bool \item }
{ \bool_set_false:N \l__shaun_answers_correct_bool \item }
}
\cs_new_protected:Nn \__shaun_answers_maybecorrect:n
{
\bool_if:NTF \l__shaun_answers_correct_bool
{
\bool_if:NTF \g_shaun_answers_grading_bool { \circleanswer{#1} } { #1 }
}
{
#1
}
}
\ExplSyntaxOff
\begin{document}
%\grading
\notgrading
\subsection*{First question}
\begin{answers}
\item+ Correct
\item Incorrect (1)
\item Incorrect (2)
\item Incorrect (3)
\end{answers}
\subsection*{Second question}
\begin{answers}
\item+ Correct
\item Incorrect (1)
\item Incorrect (2)
\item Incorrect (3)
\end{answers}
\end{document}
채점

채점 안함
