Personalizando \pointpoints na aula de exame para mais formas do que apenas singular e plural

Personalizando \pointpoints na aula de exame para mais formas do que apenas singular e plural

Reenvio um problema, postado com outro, aqui Redefinindo \pointname para aula de exame

Estou com um problema relacionado com a customização do comando ''\thepoints'' na classe Exam. O comando ''\thepoints'', em Exam.cls é sempre substituído por ``@points @pointname'' se o número de pontos tiver sido especificado para a questão. (@points é a entrada do ponto e @pointname é o pointname.

Este pointname é definido pelo comando ''\pointpoints{point}{points}'', onde '\pointname' é substituído por ''point'' quando @points=1 ou=1/2 (singular) e substituído por ' 'pontos'' quando @pontos > 1 (plural).

Quero personalizar o comando '\thepoints' para outros idiomas (especificamente árabe), onde pode haver mais de dois casos, por exemplo, quatro: os casos '@points=1 or=1/2', '@points=2', ' 3<=@pontos<=10' e '@pontos>10').

Então, '@pointname' terá 4 nomes de valores diferentes, digamos {WORD_1, WORD_2, WORD_3, WORD_4}.

Então, quero escrever uma macro que substitua "\thepoints" por:

  • "WORD_1" if '@points=1 or=1/2'' (Observe que @points não está escrito aqui...)
  • "WORD_2" if '@points=2' (Observe que @points também não está escrito aqui...)
  • "@points WORD_3" if '3<= @points <=10' (Aqui escrevemos o valor de @points...)
  • "@points WORD_4" if '@points >10' (Aqui @points também devem ser escritos aqui...)

Mais precisamente, quero, por exemplo, que os comandos:

\question[1] dá: Pergunta (WORD_1)

\question[2] dá: Pergunta (WORD_2)

\question[8] dá: Pergunta (8 WORD_3)

\question[14] dá: Pergunta (14 WORD_4)

Responder1

A definição de \pointsmacro no exam.cls é:

\newcommand\points{%
  \begingroup
    \let\half=\relax
    \edef\pt@string{\@points}%
    \ifthenelse{\equal{\pt@string}{1} \or \equal{\pt@string}{\half}}
          {\point@sing}{\point@plur}%
  \endgroup
}

você pode fazer mais casos (quatro) dentro de condicionais ifthenelseassim

\renewcommand\points{%
  \begingroup
    \let\half=\relax
    \edef\pt@string{\@points}%
    \ifthenelse{\equal{\pt@string}{1} \OR \equal{\pt@string}{\half}}
    {\point@labelone}{%
    \ifthenelse{\equal{\pt@string}{2}}{\point@labeltwo}{%
    \ifthenelse{\equal{\pt@string}{3} \OR \equal{\pt@string}{3\half}%
    \OR \equal{\pt@string}{4} \OR \equal{\pt@string}{4\half}%
    \OR \equal{\pt@string}{5} \OR \equal{\pt@string}{5\half}%
    \OR \equal{\pt@string}{6} \OR \equal{\pt@string}{6\half}%
    \OR \equal{\pt@string}{7} \OR \equal{\pt@string}{7\half}%
    \OR \equal{\pt@string}{8} \OR \equal{\pt@string}{8\half}%
    \OR \equal{\pt@string}{9} \OR \equal{\pt@string}{9\half}%
    \OR \equal{\pt@string}{10}\OR \equal{\pt@string}{10\half}}
     {\point@labelthree}{\point@labelfour}}}
          %
  \endgroup
}

aqui você obtém o que precisa. talvez haja uma maneira mais curta de fazer isso.

E você pode testá-lo com este MWE:

\documentclass[11pt]{exam}

\def\sample{What is the Pythagorean theorem}


\makeatletter
\newcommand\point@labelone{word-1}
\newcommand\point@labeltwo{word-2}
\newcommand\point@labelthree{word-3}
\newcommand\point@labelfour{word-4}


\renewcommand\points{%
  \begingroup
    \let\half=\relax
    \edef\pt@string{\@points}%
    \ifthenelse{\equal{\pt@string}{1} \OR \equal{\pt@string}{\half}}
    {\point@labelone}{%
    \ifthenelse{\equal{\pt@string}{2}}{\point@labeltwo}{%
    \ifthenelse{\equal{\pt@string}{3} \OR \equal{\pt@string}{3\half}%
    \OR \equal{\pt@string}{4} \OR \equal{\pt@string}{4\half}%
    \OR \equal{\pt@string}{5} \OR \equal{\pt@string}{5\half}%
    \OR \equal{\pt@string}{6} \OR \equal{\pt@string}{6\half}%
    \OR \equal{\pt@string}{7} \OR \equal{\pt@string}{7\half}%
    \OR \equal{\pt@string}{8} \OR \equal{\pt@string}{8\half}%
    \OR \equal{\pt@string}{9} \OR \equal{\pt@string}{9\half}%
    \OR \equal{\pt@string}{10}\OR \equal{\pt@string}{10\half}}
     {\point@labelthree}{\point@labelfour}}}
          %
  \endgroup
}

\makeatother

\pointformat{(\thepoints)}

\begin{document}

\begin{questions}

\question[\half] \sample

\question[1] \sample

\question[2] \sample

\question[4] \sample

\question[12] \sample

\end{questions}

\end{document}

Para remover \@pointsda \thepointsmacro no caso de Word-1 e Word-2 não conseguir encontrar a definição original \thepointsem exam.cls, com uma solução alternativa você pode alterar sua definição com a ajuda de\pointformat

\documentclass[11pt]{exam}

\def\sample{What is the Pythagorean theorem}


\makeatletter
\newcommand\point@labelone{word-1}
\newcommand\point@labeltwo{word-2}
\newcommand\point@labelthree{word-3}
\newcommand\point@labelfour{word-4}


\renewcommand\points{%
  \begingroup
    \let\half=\relax
    \edef\pt@string{\@points}%
    \ifthenelse{\equal{\pt@string}{1} \OR \equal{\pt@string}{\half}}
    {\point@labelone}{%
    \ifthenelse{\equal{\pt@string}{2}}{\point@labeltwo}{%
    \ifthenelse{\equal{\pt@string}{3} \OR \equal{\pt@string}{3\half}%
    \OR \equal{\pt@string}{4} \OR \equal{\pt@string}{4\half}%
    \OR \equal{\pt@string}{5} \OR \equal{\pt@string}{5\half}%
    \OR \equal{\pt@string}{6} \OR \equal{\pt@string}{6\half}%
    \OR \equal{\pt@string}{7} \OR \equal{\pt@string}{7\half}%
    \OR \equal{\pt@string}{8} \OR \equal{\pt@string}{8\half}%
    \OR \equal{\pt@string}{9} \OR \equal{\pt@string}{9\half}%
    \OR \equal{\pt@string}{10}\OR \equal{\pt@string}{10\half}}
     {\point@labelthree}{\point@labelfour}}}
          %
  \endgroup
}

\renewcommand\thepoints{%
  \if@placepoints
    \if@bonus
      \@points \@bonuspointname 
    \else
    \let\half=\relax
    \edef\pt@string{\@points}%
    \ifthenelse{\equal{\pt@string}{1} \OR \equal{\pt@string}{\half}%
                                      \OR \equal{\pt@string}{2}}
    {\@pointname}{\@points \@pointname}
     \fi
  \fi
}% thepoints

\makeatother

\pointformat{(\thepoints)}

\begin{document}

\begin{questions}

\question[\half] \sample

\question[1] \sample

\question[2] \sample

\question[4] \sample

\question[12] \sample

\end{questions}

\end{document}

Nós obtemos:

insira a descrição da imagem aqui

informação relacionada