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 \points
macro 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 ifthenelse
assim
\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 \@points
da \thepoints
macro no caso de Word-1 e Word-2 não conseguir encontrar a definição original \thepoints
em 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: