Vuelvo a enviar un problema, publicado con otro, aquí Redefiniendo \pointname para la clase de examen
Tengo un problema relacionado con la personalización del comando ''\thepoints'' en la clase Examen. El comando ''\thepoints'', en Exam.cls siempre se reemplaza por ``@points @pointname'' si se ha especificado el número de puntos para la pregunta. (@points es la entrada del punto y @pointname es el nombre del punto.
Este nombre de punto se define mediante el comando ''\pointpoints{punto}{puntos}'', donde '\pointname' se reemplaza por ''punto'' cuando @points=1 o=1/2 (singular) y se reemplaza por ' 'puntos' cuando @puntos > 1 (plural).
Quiero personalizar el comando '\thepoints' para otros idiomas (específicamente árabe) donde puede haber más de dos casos, por ejemplo, cuatro: los casos '@points=1 or=1/2', '@points=2', ' 3<=@puntos<=10' y '@puntos>10').
Entonces, '@pointname' tendrá 4 valores-nombres diferentes, digamos {WORD_1, WORD_2, WORD_3, WORD_4}.
Entonces quiero escribir una macro que reemplace "\thepoints" por:
- "WORD_1" si '@points=1 or=1/2'' (Tenga en cuenta que @points no está escrito aquí...)
- "WORD_2" si '@points=2' (Tenga en cuenta que @points tampoco está escrito aquí...)
- "@points WORD_3" si '3<= @points <=10' (Aquí escribimos el valor de @points...)
- "@points WORD_4" si '@points >10' (Aquí también se debe escribir @points aquí...)
Más precisamente, quiero, por ejemplo, que los comandos:
\pregunta[1] da: Pregunta (WORD_1)
\pregunta[2] da: Pregunta (WORD_2)
\question[8] da: Pregunta (8 WORD_3)
\pregunta[14] da: Pregunta (14 WORD_4)
Respuesta1
La definición de \points
macro en exam.cls es:
\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
}
puedes hacer más casos (cuatro) dentro de un condicional ifthenelse
como este
\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
}
aquí obtienes lo que necesitas. Quizás haya una manera más corta de hacerlo.
Y puedes probarlo con 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 eliminar \@points
de la \thepoints
macro en caso de que palabra-1 y palabra-2 no pueda encontrar la definición original \thepoints
en exam.cls, con una solución alternativa puede cambiar su definición con la ayuda 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}
Obtenemos: