多项选择题答题纸的答案

多项选择题答题纸的答案

考虑以下 MWE:

\documentclass{article}
\usepackage{tikz}

\usepackage{xparse}

\ExplSyntaxOn
    \NewDocumentCommand{\answergrid}{ m m m }{
        \begin{tikzpicture}[x=0.75cm,baseline]
            \seq_set_split:Nnn \splitted_seq{;}{#3}
            \newcounter{answer}
            \int_step_inline:nnnn {1} {1} {#2} {
                \stepcounter{answer}
                \node[draw,circle,inner~sep=1pt,anchor=base] at (##1,0) {\Alph{answer}};}

            \int_step_inline:nnnn {1} {1} {#1} {
                \int_step_inline:nnnn {1} {1} {#2} {

                    \int_compare:nNnTF {####1} = {\seq_item:Nn \splitted_seq {#1-##1+1}} {
                        \node[fill=black!10,draw,circle,inner~sep=1pt,anchor=base] at (####1, 0) {\Alph{answer}};
                    }{
                    }
                }
            }
        \end{tikzpicture}
    }
\ExplSyntaxOff

\begin{document}

    \par
    \begin{enumerate}
        \item \answergrid {1} {4} {2}
        \item \answergrid {1} {4} {2}
    \end{enumerate}

\end{document}

在此处输入图片描述

汲取灵感使用 xparse 包的多项选择题,我尝试编辑代码,以便能够生成答题卡答案。它只用一行就可以工作,但如果我尝试添加第二行,就会出现错误。我知道我遗漏了计数器的一些内容,但不确定是什么。

请注意,它没有打印正确的答案,并且多次使用该命令会产生奇怪的交互。

答案1

我感觉代码有点太复杂了,好像要\item \answergrid {1} {4} {2}输出四个圆圈(A)到(D),然后标记第二个。

然后,我不太确定,但看起来链接的代码也提供了标记多个答案的可能性,因此\item \answergrid {1} {4} {1;2}会标记四个圆圈中的前两个。但是,我认为,与其\int_step_inline:nnnn像你那样嵌套几个,不如使用\seq_if_in:NnTF,这样可以大大简化代码。

下面的代码正是这样做的。另外,作为一种附加功能,如果您说\item \answergrid {2} {4} {3},代码将输出三个圆圈 (B)、(C) 和 (D),并标记中间的圆圈。

请注意,您可能应该遵守expl3命名约定:

\documentclass{article}
\usepackage{tikz}

\ExplSyntaxOn
    \newcounter{answer}
    \NewDocumentCommand{\answergrid}{ m m m }{
        \begin{tikzpicture}[x=0.75cm, baseline]
            \seq_set_split:Nnn \l_azetina_answers_split_seq { ; } { #3 }
            \setcounter{answer}{ \int_eval:n { #1 - 1 } }
            \int_step_inline:nnnn { \int_eval:n { \value{answer} + 1 } } { 1 } { #2 } {
                \stepcounter{answer}
                \seq_if_in:NnTF \l_azetina_answers_split_seq { ##1 } {
                    \tikzset{answer~node/.style={fill=gray!20}}
                }{
                    \tikzset{answer~node/.style={fill=none}}
                }
                \node[answer~node, draw, circle, inner~sep=1pt, anchor=base] at (##1, 0) {\Alph{answer}};
            }
        \end{tikzpicture}
    }
\ExplSyntaxOff

\begin{document}
    \begin{enumerate}
        \item \answergrid {1} {4} {1;2}
        \item \answergrid {1} {4} {2}
        \item \answergrid {2} {4} {3}
    \end{enumerate}
\end{document}

在此处输入图片描述

相关内容