hhead in \AMCnumericChoice, help student understand which line is which digit

Added by Charlie M about 1 month ago

[Liquid Syntax Error] Tag '{%' was not properly terminated with regexp: /\%\}/
Hi, Most of my students struggle with multi digits number when given an \AMCnumericChoice answer. When there are some 0 in the first digit(s), most of the time they write in the first available row. For example, they need to write 42 in a 3 rows answer, they write [4] [2] [ ] instead of [0] [4] [2] (or [ ] [4] [2] with `strict=false`). When the answers is asked in vertical mode, there is a `vhead` option, originally design for bit weight, but useful for writing "100, 10, 1" in my case. There is no such option for horizontal answers. Thus, I made something to fit my need, but it's a dirty hack that would probably break things elsewhere. File AMCnumericChoice.tex <pre> \RequirePackage{fp, tikz, vwcol} \makeatletter \def\setinsidebox{\AMC@inside@boxtrue} \makeatother \let\oldAMCnumericChoices\AMCnumericChoices \makeatletter % ========= KEY DEFINITIONS ========= \define@key{AMCNumeric}{base}[0]{} \define@key{AMCNumeric}{sign}[0]{} \define@key{AMCNumeric}{strict}[0]{} \define@key{AMCNumeric}{scoring}[0]{} \define@key{AMCNumeric}{vertical}[0]{} \define@key{AMCNumeric}{reverse}[0]{} \define@key{AMCNumeric}{vhead}[0]{} \define@key{AMCNumeric}{scoreexact}[0]{} \define@key{AMCNumeric}{scoreapprox}[0]{} \define@key{AMCNumeric}{exact}[0]{} \define@key{AMCNumeric}{nozero}[0]{} \define@key{AMCNumeric}{approx}[0]{} \define@key{AMCNumeric}{significant}[0]{} \define@key{AMCNumeric}{borderwidth}[0]{} \define@key{AMCNumeric}{backgroundcol}[0]{} \define@key{AMCNumeric}{digits}[3]{\def\mm@first{#1}} \define@key{AMCNumeric}{decimals}[0]{\def\mm@second{#1}} \DeclareDocumentCommand{\myMacro}{m}{% \begingroup% % ========= KEY DEFAULTS + new ones ========= \setkeys{AMCNumeric}{digits,decimals,base,sign,strict,scoring,vertical,reverse,vhead,scoreexact,scoreapprox,exact,approx,nozero,significant} \setkeys{AMCNumeric}{#1} \FPeval\varNat{clip(\mm@first - \mm@second)} \FPeval\varDec{clip(\mm@second)} \ifthenelse{\varNat > 1 \OR \varDec > 0}{%nat : \varNat \vspace{2.6ex} \color{lightgray} \foreach \digit in {\varNat,...,1}{% \FPeval\head{clip(round(pow(\digit-1,10),0))}% %\nbzero:1% \num{\head}% ~% \raisebox{.5ex}{\rule{5cm}{0.4pt}}% \\[1ex]% } \ifthenelse{\varDec > 0}{ ~\\[0ex] \foreach \digit in {1,...,\varDec}{% \FPeval\head{clip(round(1/pow(\digit,10),\digit))}% \num{\head}% ~% \raisebox{.5ex}{\rule{5cm}{0.4pt}}% \\[1ex]% } }% {}% do nothing }% {}% do nothing \endgroup% } \makeatother \renewcommand{\AMCnumericChoices}[2]{% \begin{minipage}[t]{1cm} \myMacro{#2} \end{minipage}% \begin{minipage}[t]{\linewidth-1cm} \setinsidebox \oldAMCnumericChoices{#1}{#2} \end{minipage}% } </pre> Quote from source.tex <pre> \documentclass{article} \usepackage[bloc]{automultiplechoice} \usepackage{fp,siunitx} \input{../../../Template/AMCnumericChoices} \begin{document} \begin{copieexamen}[1] \FPeval\varV{clip(10 + round(20*random, 0))} \FPeval\varT{clip(3 + round(7*random, 0))} \FPeval\varD{clip(\varV * \varT)} \FPeval\varTT{clip(2)} \FPeval\varDD{clip(\varV * \varTT)} \begin{questionmult}{proportionalite.calculer.2-velo} Un cycliste roule à vitesse constante sur une véloroute. Au bout de \SI{\varT}{\hour}, il a parcouru \SI{\varD}{\kilo\meter}. Quelle distance (en kilomètre) aura-t-il parcouru au bout de \SI{\varTT}{\hour} ? \AMCnumericChoices{\varDD}{digits=5,decimals=02,sign=false,borderwidth=0pt,backgroundcol=lightgray,exact=1,approx=5} \end{questionmult} \end{copieexamen} \end{document} </pre> Would you see a better way to do something like this? Even better, do you think the better way could be added in core? Thanks

Replies (4)

RE: hhead in \AMCnumericChoice, help student understand which line is which digit - Added by Charlie M about 1 month ago

Formatting has done something weird. I'll put it in multiple message then :

Hi, Most of my students struggle with multi digits number when given an \AMCnumericChoice answer. When there are some 0 in the first digit(s), most of the time they write in the first available row. For example, they need to write 42 in a 3 rows answer, they write [4] [2] [ ] instead of [0] [4] [2] (or [ ] [4] [2] with `strict=false`). When the answers is asked in vertical mode, there is a `vhead` option, originally design for bit weight, but useful for writing "100, 10, 1" in my case. There is no such option for horizontal answers. Thus, I made something to fit my need, but it's a dirty hack that would probably break things elsewhere.

RE: hhead in \AMCnumericChoice, help student understand which line is which digit - Added by Charlie M about 1 month ago

File AMCnumericChoice.tex

\RequirePackage{fp, tikz, vwcol}
\makeatletter
\def\setinsidebox{\AMC@inside@boxtrue}
\makeatother

\let\oldAMCnumericChoices\AMCnumericChoices

\makeatletter
% ========= KEY DEFINITIONS =========
\define@key{AMCNumeric}{base}[0]{}
\define@key{AMCNumeric}{sign}[0]{}
\define@key{AMCNumeric}{strict}[0]{}
\define@key{AMCNumeric}{scoring}[0]{}
\define@key{AMCNumeric}{vertical}[0]{}
\define@key{AMCNumeric}{reverse}[0]{}
\define@key{AMCNumeric}{vhead}[0]{}
\define@key{AMCNumeric}{scoreexact}[0]{}
\define@key{AMCNumeric}{scoreapprox}[0]{}
\define@key{AMCNumeric}{exact}[0]{}
\define@key{AMCNumeric}{nozero}[0]{}
\define@key{AMCNumeric}{approx}[0]{}
\define@key{AMCNumeric}{significant}[0]{}
\define@key{AMCNumeric}{borderwidth}[0]{}
\define@key{AMCNumeric}{backgroundcol}[0]{}
\define@key{AMCNumeric}{digits}[3]{\def\mm@first{#1}}
\define@key{AMCNumeric}{decimals}[0]{\def\mm@second{#1}}
\DeclareDocumentCommand{\myMacro}{m}{
    \begingroup%
    % ========= KEY DEFAULTS + new ones =========
    \setkeys{AMCNumeric}{digits,decimals,base,sign,strict,scoring,vertical,reverse,vhead,scoreexact,scoreapprox,exact,approx,nozero,significant}
    \setkeys{AMCNumeric}{#1}
    \FPeval\varNat{clip(\mm@first - \mm@second)}
    \FPeval\varDec{clip(\mm@second)}
    \ifthenelse{\varNat > 1 \OR \varDec > 0}{ %nat : \varNat
        \vspace{2.6ex}
        \color{lightgray}
        \foreach \digit in {\varNat,...,1}{ %
            \FPeval\head{clip(round(pow(\digit-1,10),0))} %
            %\nbzero:1 %
            \num{\head} %
            ~%
            \raisebox{.5ex}{\rule{5cm}{0.4pt}}
            \\[1ex] %
        }
        \ifthenelse{\varDec > 0}{
            ~\\[0ex]
            \foreach \digit in {1,...,\varDec}{
                \FPeval\head{clip(round(1/pow(\digit,10),\digit))}
                \num{\head}%
                ~%
                \raisebox{.5ex}{\rule{5cm}{0.4pt}}
                \\[1ex]%
            }
        }
        {}% do nothing
    } %
    {}% do nothing
    \endgroup
}
\makeatother

\renewcommand{\AMCnumericChoices}[2]{
    \begin{minipage}[t]{1cm}
        \myMacro{#2}
    \end{minipage}
    \begin{minipage}[t]{\linewidth-1cm}
        \setinsidebox
        \oldAMCnumericChoices{#1}{#2}
    \end{minipage}
}

(I had to remove a lot of trailing `%` for the formatting not to go crazy, some unwanted spaces might appears?)

Quote from source.tex

\documentclass{article}
\usepackage[bloc]{automultiplechoice}
\usepackage{fp,siunitx}
\input{../../../Template/AMCnumericChoices}
\begin{document}
\begin{copieexamen}[1]
    \FPeval\varV{clip(10 + round(20*random, 0))}
    \FPeval\varT{clip(3 + round(7*random, 0))}
    \FPeval\varD{clip(\varV * \varT)}
    \FPeval\varTT{clip(2)}
    \FPeval\varDD{clip(\varV * \varTT)}

\begin{questionmult}{proportionalite.calculer.2-velo}
    Un cycliste roule à vitesse constante sur une véloroute.
    Au bout de \SI{\varT}{\hour}, il a parcouru \SI{\varD}{\kilo\meter}.
    Quelle distance (en kilomètre) aura-t-il parcouru au bout de \SI{\varTT}{\hour} ?
    \AMCnumericChoices{\varDD}{digits=5,decimals=02,sign=false,borderwidth=0pt,backgroundcol=lightgray,exact=1,approx=5}
\end{questionmult}
\end{copieexamen}
\end{document}

RE: hhead in \AMCnumericChoice, help student understand which line is which digit - Added by Alexis Bienvenüe about 1 month ago

Maybe the option ignoreblank=true is for you? This works only in decimal mode (not binary).
You can use it for all questions with \AMCnumericOpts{ignoreblank=true} at the beginning of the source file.

RE: hhead in \AMCnumericChoice, help student understand which line is which digit - Added by Charlie M about 1 month ago

Sounds very good!
I can't find it in the manual to understand what it does, but it might be exactly what I need.
I'll do some tests!
Thanks.

(1-4/4)