Número faltando, tratado como zero. (classe personalizada)

Número faltando, tratado como zero. (classe personalizada)

Estou tentando escrever uma aula para pacotes de perguntas sobre ciências. Por alguma razão, \switchletterfunciona como pretendido, mas um uso interno efetivamente idêntico \printmcnão funciona.

Mensagem de erro:

/testing.tex:9: Missing number, treated as zero.
<to be read again> 
                   {
l.9 ...{Choice W}{Choice X}{Choice Y}{Choice Z}{2}

testing.tex:

\documentclass{scibowlset}
\usepackage[utf8]{inputenc}
\usepackage[letterpaper, portrait, margin=1in]{geometry}


\begin{document}
\newcounter{qnumber}\stepcounter{qnumber}
\switchletter{Choice W}{Choice X}{Choice Y}{Choice Z}{1}
\printmc{Choice W}{Choice X}{Choice Y}{Choice Z}{2}
\end{document}

scibowlset.cls:

\ProvidesClass{scibowlset}

\LoadClass[11pt,letterpaper]{article}

\usepackage[letterpaper, portrait, margin=1in]{geometry}
\usepackage[overload]{textcase}
\usepackage{enumitem}
\nofiles

\def \numtoletter #1 {
    \ifcase #1
        \or W
        \or X
        \or Y
        \or Z
    \fi
}

\def \switchletter #1#2#3#4#5 {
    \ifcase #5
        \or #1
        \or #2
        \or #3
        \or #4
    \fi
}

\def \printmc #1#2#3#4#5 {
    % \printmc {<choice w text>}{<choice x text>}{<choice y text>}{<choice z text>}{<correct choice index from 1>}
    \begingroup
        \begin{enumerate}[label=\Alph*),start=23]
            \item #1
            \item #2
            \item #3
            \item #4
        \end{enumerate}
    \endgroup
    ANSWER: \numtoletter{#5}) \switchletter{#1}{#2}{#3}{#4}{#5}
}

Responder1

TeX não é “formato livre”.

%%% file scibowlset.cls
\ProvidesClass{scibowlset}

\LoadClass[11pt,letterpaper]{article}

\usepackage[letterpaper, portrait, margin=1in]{geometry}
\usepackage[overload]{textcase}
\usepackage{enumitem}
\nofiles

\def\numtoletter#1{%
    \ifcase #1
        \or W%
        \or X%
        \or Y%
        \or Z%
    \fi
}

\def\switchletter#1#2#3#4#5{%
    \ifcase #5
        \or #1%
        \or #2%
        \or #3%
        \or #4%
    \fi
}

\def\printmc#1#2#3#4#5{%
    % \printmc {<choice w text>}{<choice x text>}{<choice y text>}{<choice z text>}{<correct choice index from 1>}
    \begingroup
        \begin{enumerate}[label=\Alph*),start=23]
            \item #1
            \item #2
            \item #3
            \item #4
        \end{enumerate}
    \endgroup
    ANSWER: \numtoletter{#5}) \switchletter{#1}{#2}{#3}{#4}{#5}
}

Por outro lado você deve fazer

\newcommand{\numtoletter}[1]{%
  ...
}
\newcommand{\switchletter}[5]{%
  ...
}
\newcommand{\printmc}[5]{%
  ...
}

Com o seu código, o TeX espera um espaço após o argumento final para as três macros. Cuidado também, pois os finais de linha produzem um espaço.

informação relacionada