Número faltante, tratado como cero. (clase personalizada)

Número faltante, tratado como cero. (clase personalizada)

Estoy intentando escribir una clase para paquetes de preguntas sobre ciencias. Por alguna razón, \switchletterfunciona según lo previsto, pero un uso interior efectivamente idéntico \printmcno.

Mensaje de error:

/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}
}

Respuesta1

TeX no es una “forma libre”.

%%% 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 otro lado deberías hacer

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

Con su código, TeX espera un espacio después del argumento final de las tres macros. Tenga en cuenta también que los finales de línea producen un espacio.

información relacionada