Boucle pour générer des questions/réponses

Added by Albert Loa almost 6 years ago

Bonsoir,
Je cherche à créer un formulaire comportant un nombre N de questions formellement très proches.
J'ai essayé le script suivant (avec le package pgffor)
Il ne plante pas mais... il ne fonctionne pas => j'obtiens une page blanche :-(
Une idée pour résoudre cette énigme ?
Merci bien


foreach \k in {1,...,\N}{
\element{questions}{
\begin{question}{Question \k} Blabla0 \k
\begin{reponses}
\bonne{blabla1 \k} \bareme{1}
\mauvaise{blabla2 \k} \bareme{0.5} \\
\mauvaise{blabla3 \k} \bareme{0} \\
\end{reponsesh}
\end{question}}
}


Replies (7)

RE: Boucle pour générer des questions/réponses - Added by DENIS Sébastien almost 6 years ago

Bonsoir

\usepackage{fp}

.....

\element{groupe}
\FPeval{\LeNumeroAleatoireQuestion}{random}
\begin{question}{titre question \LeNumeroAleatoireQuestion}

RE: Boucle pour générer des questions/réponses - Added by Albert Loa almost 6 years ago

Bonjour,
Je reformule ma question car elle a été mal comprise.
Ce que je veux obtenir c'est le questionnaire suivant.

Question 1 Le texte de la la question dans lequel le paramètre de boucle vaut 1
- la bonne réponse dans lequel le paramètre de boucle vaut 1
- une mauvaise réponse dans lequel le paramètre de boucle vaut 1
- une autre mauvaise réponse dans lequel le paramètre de boucle vaut 1

Question 2 Le texte de la la question dans lequel le paramètre de boucle vaut 2
- la bonne réponse dans lequel le paramètre de boucle vaut 2
- une mauvaise réponse dans lequel le paramètre de boucle vaut 2
- une autre mauvaise réponse dans lequel le paramètre de boucle vaut 2

etc. jusqu'à avoir N questions formellement très proches (c'est moi qui fixe la valeur de N) rangées de manière déterministe de 1 à N.
Pour éviter d'avoir à copier/coller N fois la même chose (et à avoir à modifier manuellement l'identifiant de chaque question), je voudrais utiliser une boucle.
Voilà l'idée.

Merci bien

RE: Boucle pour générer des questions/réponses - Added by Alexis Bienvenüe over 5 years ago

Pouvez-vous donner un exemple concret de ce que vous voulez faire ?

RE: Boucle pour générer des questions/réponses - Added by Albert Loa over 5 years ago

Bonsoir,
En fait, je voulais créer un formulaire de correction, avec des cases à cocher (par moi).
J'ai fini par y parvenir en procédant comme suit.
Je fixe en début de script le nombre de questions souhaité (19 ici).
Puis boucle.
Cordialement


% NOMBRE DE QUESTIONS
\newcommand\nombrequestions{19}

\newcounter{indice}

\element{exercice}{
\forloop{indice}{0}{\value{indice} < \nombrequestions}{
\begin{question}{Q\arabic{indice}}
\vspace*{-1.1cm}
\begin{reponseshoriz}
\begin{tabular}{p{0.8em}p{0.8em}p{0.8em}p{0.8em}p{0.8em}p{0.8em}p{0.8em}p{0.8em}p{0.8em}p{0.8em}p{0.8em}}
4,0 & {\scriptsize 3,5} & 3,0 & {\scriptsize 2,5} & 2,0 & {\scriptsize 1,5} & 1,0 & {\scriptsize 0,5} & 0,0 \\
\bonne{} \bareme{4} & \mauvaise{} \bareme{3.5} & \mauvaise{} \bareme{3} & \mauvaise{} \bareme{2.5}
& \mauvaise{} \bareme{2} & \mauvaise{} \bareme{1.5} & \mauvaise{} \bareme{1} & \mauvaise{} \bareme{0.5} & \mauvaise{} \bareme{0} \\
\end{tabular}
\end{reponseshoriz}
\vspace*{-0.5cm}
\traitdeseparation
\end{question}
}}

RE: Boucle pour générer des questions/réponses - Added by Bruno GUILLON 9 months ago

Bonjour,

J'avais une envie similaire, et j'ai bidouillé un peu pour permettre la définition d'éléments de groupe, à l'intérieur d'une boucle foreach, avec accès aux variables de boucle (ou autre, d'ailleurs). Je mets ma solution, qui pourrait servir à d'autres.

\documentclass{article}
\usepackage[noshuffle,noshufflegroups,answers]{w-automultiplechoice}
\usepackage{pgffor}%pour faire foreach dans l'exemple

%% Redéfinition de \element
\usepackage{pgfkeys}
\pgfkeys{
    /amc/element locals/.is family,
    /amc/element locals/.unknown/.code={%
        \expandafter\expandafter\expandafter\def%
        \expandafter\csname\pgfkeyscurrentname\endcsname%
        {#1}%
    },
    /amc/element locals/.unknown/.default={},
}

\makeatletter
% auxiliary macro of improved \element macro
\def\wamc@element@aux#1#2#3{%
    % #1:  already-expanded local definitions
    % #2:  group identifier
    % #3:  element body
    \wamc@element@original{#2}{\pgfqkeys{/amc/element locals}{#1}#3}%
}

% save original \element macro
\let\wamc@element@original\element

% renew \element macro
\renewcommand\element[3][]{%
    % #1:  optional local definitions
    % #2:  group identifier
    % #3:  element body
    \edef\wamc@element@locals{#1}% force expansion
    \expandafter\wamc@element@aux\expandafter{\wamc@element@locals}{#2}{#3}%
}
\makeatother

%%% Exemple

% original usage is preserved
\element{mygroup}{%
    \begin{question}{q-foo-bar}
        Check the \textsf{foo}-box, but not the \texttt{bar}-box.
        \begin{choices}
            \correctchoice{\textsf{foo}}
            \wrongchoice{\textsf{bar}}
        \end{choices}
    \end{question}
}

% using local declarations
\element[x=$b$,y=$a$]{mygroup}{%
    \begin{question}{q-\x-\y}
        Check the \x-box but not the \y-box.
        \begin{choices}
            \correctchoice{\x}
            \wrongchoice{\y}
        \end{choices}
    \end{question}
}

% taking advantages of the local and foreach loop
\foreach \x/\y in {0/1, 1/0, a/b}{%
    \element[x=$\x$,y=$\y$]{mygroup}{%
        \begin{question}{q-\x-\y}
            Check the \x-box but not the \y-box.
            \begin{choices}
                \correctchoice{\x}
                \wrongchoice{\y}
            \end{choices}
        \end{question}
    }
}

\begin{document}
\insertgroup{mygroup}
\end{document}

RE: Boucle pour générer des questions/réponses - Added by Bruno GUILLON 9 months ago

Bruno GUILLON wrote:

Bonjour,

J'avais une envie similaire, et j'ai bidouillé un peu pour permettre la définition d'éléments de groupe, à l'intérieur d'une boucle foreach, avec accès aux variables de boucle (ou autre, d'ailleurs). Je mets ma solution, qui pourrait servir à d'autres.

[...]

Oups. Comment faites-vous pour mettre du code? Peut-on éditer le message précédent?

RE: Boucle pour générer des questions/réponses - Added by Frédéric Bréal 9 months ago

Il y a un crayon sur le bord droit de la page pour éditer.
Cette mise en page provient d'une accolade ouvrante suivie du symbole pourcentage.
Il suffit d'écarter ces 2 symboles pour avoir une mise en page lisiible.

(1-7/7)