Forums » Utilisation d'AMC (french) »
Reponsesperso : erreur avec \def\AMCanswer#1#2
Added by Frédéric Bréal almost 11 years ago
Bonjour,
Je teste les commandes réponses perso avec l'exemple trouvé sur la documentation en anglais. J'ai copié-collé votre exemple et j'ai une erreur de compilation liée à le ligne 126 (l'accolade de fermeture de la commande exemplaire).
\begin{question}{add} \def\AMCbeginAnswer{$\Big($} \def\AMCendAnswer{$\Big)$} \def\AMCanswer#1#2{#1 #2\hfill} 2+2= \begin{reponsesperso} \bonne{4} \mauvaise{2} \mauvaise{3} \end{reponsesperso} \end{question}
! Illegal parameter number in definition of \iterate.
<to be read again>
1
l.126 }
You meant to type ## instead of #, right?
Or maybe a } was forgotten somewhere earlier, and things
are all screwed up? I'm going to assume that you meant ##.
! Illegal parameter number in definition of \iterate.
Cette erreur disparaît si je supprime la commande \def\AMCanswer#1#2{#1 #2\hfill} ou si je supprime la commande \exemplaire{1}{...} ou simplement les accolades de début et de fin d'exemplaire
J'ai testé avec le fichier automultiplechoice.sty du 1/9/2013 (version stable sous windows et miktex) et du 5/12/2013 (version test sous xbuntu avec virtualbox).
Je vous joins mon fichier (ligne 111).
Merci.
test-reponsesperso.tex (5.1 kB)
Replies (8)
RE: Reponsesperso : erreur avec \def\AMCanswer#1#2 - Added by Alexis Bienvenüe almost 11 years ago
Comme vous êtes à l'intérieur de la commande exemplaire
, il faut doubler les # :
\begin{question}{add} \def\AMCbeginAnswer{$\Big($} \def\AMCendAnswer{$\Big)$} \def\AMCanswer##1##2{##1 ##2\hfill} 2+2= \begin{reponsesperso} \bonne{4} \mauvaise{2} \mauvaise{3} \end{reponsesperso} \end{question}
RE: Reponsesperso : erreur avec \def\AMCanswer#1#2 - Added by Frédéric Bréal almost 11 years ago
Bonsoir,
Comme vous êtes à l'intérieur de la commande exemplaire, il faut doubler les #
Merci pour la réponse.
Question sans rapport direct avec AMC mais plutôt Latex
Votre réponses me pose un problème de compréhension.
Dans ce code (copié d'après votre exemple dans le wiki), la commande est définie avant exemplaire mais elle est appelée dans la commande exemplaire. Je comprends l'intérêt des doubles #.
\def\insertRespectconsigne{ % {\def\AMCbeginQuestion##1##2{}\AMCnobloc% \begin{questionmult}{00respectconsigne} \AMCnoCompleteMulti\AMCdontAnnotate \def\AMCbeginAnswer{}\def\AMCendAnswer{} Reservé~~\begin{reponsesperso}[o]\bareme{p=-2} \mauvaise{-2~}\bareme{b=0,m=-2,e=-2} \mauvaise{-1~}\bareme{b=0,m=-1,e=-2} \bonne{0~}\bareme{b=0,m=0,e=-2} \end{reponsesperso} \end{questionmult}} }
Dans ce code (inspiré de votre exemple), le doublement des # pose problème alors que l'élément est appelé dans la commande exemplaire. Pourquoi ? Merci de votre éventuelle réponse qui participera à mon auto-formation en latex.
\element{exercice}{ \begin{question}{ex01} Coche la bonne réponse qui correspond au schéma.\medskip \begin{minipage}[c]{0.1\linewidth} \begin{tikzpicture}[scale=0.35] \filldraw[gray!20](0,0) arc (0:-180:1)--(-2,4) -- ++ (2,0)--cycle; \draw(-2,0) -- ++ (0,8) (0,0) -- ++ (0,8); \draw(0,0) arc (0:-180:1); \draw (-0.5,-1) node[below]{Eau et sucre}; \end{tikzpicture} \end{minipage} \begin{minipage}[c]{0.45\linewidth} \begin{reponses} \bonne{Le sucre est \textbf{soluble} dans l'eau.} \mauvaise{Le sucre est \textbf{insoluble} dans l'eau.} \mauvaise{Le sucre est \textbf{miscible} dans l'eau.} \mauvaise{Le sucre est \textbf{non miscible} dans l'eau.} \end{reponses} \end{minipage} \begin{minipage}[c]{0.35\linewidth} \def\AMCbeginQuestion#1#2{} <---- \begin{question}{ex02} \begin{reponses} \bonne{Le mélange est \textbf{homogène}.} \mauvaise{Le mélange est \textbf{hétérogène}.} \end{reponses} \end{question} \end{minipage} \end{question} }
RE: Reponsesperso : erreur avec \def\AMCanswer#1#2 - Added by Frédéric Bréal almost 11 years ago
Bonjour,
J'ai un problème similaire mais avec
\def\AMCbeginQuestion#1#2{\par\noindent{\textbf{Q.#1}}\hspace*{0.5ex}}
Je suis en mode non-ensemble et copies pré-remplies. Le code ci dessous est écrit dans la commande \newcommande{sujet}{...}
\AMCsection{La chromatographie} \def\AMCbeginQuestion#1#2{\par\noindent{ \textbf{Q.#1}}\hspace*{0.5ex}} \begin{questionmult}{20} ... \begin{reponseshoriz}[o] ... \end{reponseshoriz} \end{questionmult}
Même si je double les #, cela ne fonctionne pas.
RE: Reponsesperso : erreur avec \def\AMCanswer#1#2 - Added by Alexis Bienvenüe almost 11 years ago
Pouvez-vous envoyer un source complet ?
RE: Reponsesperso : erreur avec \def\AMCanswer#1#2 - Added by Frédéric Bréal almost 11 years ago
lignes 239 et 255
5_CHIMIE_QCM_TH_01-06-test.tex (40.9 kB)
listetest.csv (122 Bytes)
RE: Reponsesperso : erreur avec \def\AMCanswer#1#2 - Added by Alexis Bienvenüe almost 11 years ago
Ligne 239 par exemple, pour éviter tout problème d'imbrication des définitions de commandes, vous pouvez simplement appeler une commande \Qcourt
que vous aurez préalablement définie (juste après le \begin{document}
, ou dans le préambule) :
\newcommand\Qcourt{\def\AMCbeginQuestion##1##2{\par\noindent{ \textbf{Q.##1}}\hspace*{0.5ex}}}
En LaTeX, les
#n
représentent la valeur des arguments d'une commande :\def\double#1{#1 #1}
définit une commande
\double
qui écrit deux fois son argument (l'argument numéro 1).Donc, si vous écrivez
\newcommand\Qcourt{\def\AMCbeginQuestion#1#2{\par\noindent{ \textbf{Q.#1}}\hspace*{0.5ex}}} % erreur
Les
#1
et #2
représentent les arguments 1 et 2 de la commande \Qcourt
(qui n'en a pas) : ce n'est pas ce qu'on veut. Doubler les # est comme un échappement des #, qui permet de faire marcher \Qcourt
.RE: Reponsesperso : erreur avec \def\AMCanswer#1#2 - Added by Alexis Bienvenüe almost 11 years ago
À propos : joli sujet !
RE: Reponsesperso : erreur avec defAMCanswer#1#2 - Added by Frédéric Bréal almost 11 years ago
Merci pour la commande et le cours.
À propos : joli sujet !
Merci
(1-8/8)