%% alterqcm.sty %% Copyright (C) 2021n Alain Matthes %% Copyright (C) 2019 Alain Matthes, Apostolos Syropoulos, and Anastasios Dimou %% Copyright (C) 2009 Alain Matthes % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 % of this license or (at your option) any later version. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.3 or later is part of all distributions of LaTeX % version 2005/12/01 or later. % This work has the LPPL maintenance status `maintained'. % The Current Maintainer of this work is Alain Matthes %<-------------------------> \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{alterqcm}[2021/05/17 v4.42c] \newcount\aqlocall@ng% to set language specific strings: % 0 stands for French, 1 for English, 2 for German, 3 for Greek ,4 for russian, 5 for italien, 6 for chinese \aqlocall@ng=0% %<-------------------------> % name of new LANGUAGE % codenumber(s) of new LANGUAGE(S), 4, 5, ...; % 0..6 = french, english,... % title of columns for QUESTIONS % title of columns for ANSWERS % Continuation ... \DeclareOption{french}{% \def\aqlabelforquest{Questions}% \def\aqlabelforrep{R\'eponses}% \def\aqfoottext{suite sur la page suivante\ldots}}% %<-------------------------> \DeclareOption{english}{% \aqlocall@ng=1% \def\aqlabelforquest{Questions}% \def\aqlabelforrep{Answers}% \def\aqfoottext{Continued on the next page\ldots}}% %<-------------------------> \DeclareOption{german}{% \aqlocall@ng=2% \def\aqlabelforquest{Fragen}% \def\aqlabelforrep{Antworten}% \def\aqfoottext{Fortsetzung nächste Seite\ldots}}% %<-------------------------> \DeclareOption{greek}{% \aqlocall@ng=3% \def\aqlabelforquest{Ερωτήσεις}% \def\aqlabelforrep{Απαντήσεις}% \def\aqfoottext{Συνεχίζεται στην επόμενη σελίδα\ldots}}% %<-------------------------> \DeclareOption{russian}{% \aqlocall@ng=4% \def\aqlabelforquest{Вопросы}% \def\aqlabelforrep{Ответы}% \def\aqfoottext{Продолжение на следующей странице\ldots}}% %<-------------------------> \DeclareOption{italian}{% \aqlocall@ng=5% \def\aqlabelforquest{Domande} \def\aqlabelforrep{Risposte} \def\aqfoottext{Continua alla pagina successiva\ldots}} %<-------------------------> \DeclareOption{chinese}{% \aqlocall@ng=6% \def\aqlabelforquest{问题}% \def\aqlabelforrep{答案}% \def\aqfoottext{请翻页\ldots}}% %<-------------------------> \DeclareOption{unknown}{% \aqlocall@ng=7% \def\aqlabelforquest{unknown}% \def\aqlabelforrep{unknown}% \def\aqfoottext{unknown}}% %<-------------------------> \ExecuteOptions{french} \ProcessOptions\relax \RequirePackage{xkeyval}[2005/11/25] \RequirePackage{calc} \RequirePackage{ifthen} \RequirePackage{array} \RequirePackage{multirow} \RequirePackage{pifont}% v1.00 %<---------------------------------------------------------------> % from RANDOM.TEX v.1 (Donald Arseneau) %<---------------------------------------------------------------> \newcount\aq@randomi % the random number seed (while executing) \newcounter{aq@identRow} \newcounter{aq@identCol} \newcount\aq@tmp \def\aqutil@empty{} \global\aq@randomi\catcode`\@ % scratch variable during definitions \catcode`\@=11 \def\nextrandom{\begingroup \ifnum\aq@randomi<\@ne % then initialize with time \global\aq@randomi\time \global\multiply\aq@randomi388 \global\advance\aq@randomi\year \global\multiply\aq@randomi31 \global\advance\aq@randomi\day \global\multiply\aq@randomi97 \global\advance\aq@randomi\month \message{Randomizer initialized to \the\aq@randomi.}% \nextrandom \nextrandom \nextrandom \fi \count@ii\aq@randomi \divide\count@ii 127773 % modulus = multiplier * 127773 + 2836 \count@\count@ii \multiply\count@ii 127773 \global\advance\aq@randomi-\count@ii % random mod 127773 \global\multiply\aq@randomi 16807 \multiply\count@ 2836 \global\advance\aq@randomi-\count@ \ifnum\aq@randomi<\z@ \global\advance\aq@randomi 2147483647\relax\fi \endgroup } \countdef\count@ii=2 % use only in boxes! \ifx\@tempcnta\undefined \csname newcount\endcsname \@tempcnta \fi \ifx\@tempcntb\undefined \csname newcount\endcsname \@tempcntb \fi \def\setrannum#1#2#3{% count register, minimum, maximum \@tempcnta#3\advance\@tempcnta-#2\advance\@tempcnta\@ne \@tempcntb 2147483645 % = m - 2 = 2^{31} - 3 \divide\@tempcntb\@tempcnta \getr@nval \advance\aq@ranval#2\relax #1\aq@ranval } \def\getr@nval{% The values in \@tempcnta and \@tempcntb are parameters \nextrandom \aq@ranval\aq@randomi \advance\aq@ranval\m@ne \divide\aq@ranval\@tempcntb \ifnum\aq@ranval<\@tempcnta\else \expandafter\getr@nval \fi } \catcode`\@=\aq@randomi \global\aq@randomi=0 \newcount\aq@ranval %<---------------------------------------------------------------> \newtoks\aq@tdml@a \newtoks\aq@tdml@b \newcount\aq@alea \newcount\aq@n@arg \newbox\aq@tempbox \newdimen\aq@hauteurquest \newdimen\aq@hauteurprop \newdimen\aq@wdquest \newdimen\aq@wdprop \newdimen\aq@dimtmpa \newdimen\aq@dimtmpb \newdimen\aq@dimtmp \newcounter{AQ@numquestion}\setcounter{AQ@numquestion}{0}% \newcounter{aq@numb} \newcounter{AQ@numprop}\setcounter{AQ@numprop}{0}% v0.93 \newcounter{alea@numfirst} \newcounter{alea@numlast} \newcommand\points[1]{% \marginpar{% \begin{tabular}{|c|} \hline \textbf{#1}\\ \hline\\ \hline \end{tabular}}}% \newcommand\aqheightadvance{4pt}% U. Fischer tex.stackexchange \newcommand\aqdepthadvance{3pt}% %<-------------------------> % Début Code QCM % New MC Code (Multiple Choice) %<-------------------------> % modif 4.3 \define@choicekey*[AQ]{global}{language}[\val\aq@nr]{french, english, german, greek, russian, italian, chinese, unknown }{% \edef\AQ@global@language{\aq@nr} \let\aqlocall@ng\aq@nr \ifcase\aq@nr\relax \def\cmdAQ@global@tone{Questions} \def\cmdAQ@global@ttwo{R\'eponses} \def\aqfoottext{Suite sur la page suivante\ldots} \renewcommand{\aq@pre}{Pour chacune des questions ci-dessous, une seule des r\'eponses propos\'ees est exacte. Vous devez cocher la r\'eponse exacte sans justification. Une bonne r\'eponse rapporte \textbf{\cmdAQ@global@bonus\ point}. Une mauvaise r\'eponse enl\`eve \textbf{\cmdAQ@global@malus\ point}. L'absence de r\'eponse ne rapporte ni n'enl\`eve aucun point. Si le total des points est n\'egatif, la note globale attribu\'ee \`a l'exercice est \textbf{0}.}% % \renewcommand{\aq@preVF}{Pour chacune des affirmations ci-dessous, cocher la case V (l'affirmation est vraie) ou la case F (l'affirmation est fausse) sur l'ANNEXE, \`a rendre avec la copie. Les r\'eponses ne seront pas justifi\'ees. Une bonne r\'eponse rapporte \textbf{\cmdAQ@global@bonus\ point}. Une mauvaise r\'eponse enl\`eve \textbf{\cmdAQ@global@malus\ point}. L'absence de r\'eponse ne rapporte ni n'enl\`eve aucun point. Si le total des points est n\'egatif, la note globale attribu\'ee \`a l'exercice est \textbf{0}.}% \or \def\cmdAQ@global@tone{Questions} \def\cmdAQ@global@ttwo{Answers} \def\aqfoottext{Continued on the next page\ldots} \renewcommand{\aq@pre}{For each of the questions below, only one of the proposed answers is true. You must choose the right answer without justification.}% \renewcommand{\aq@preVF}{For each of the statements below, check the \textbf{T} box (the statement is true) or the \textbf{F} box (the statement is false).}% \or \def\cmdAQ@global@tone{Fragen} \def\cmdAQ@global@ttwo{Antworten} \def\aqfoottext{Fortsetzung nächste Seite\ldots} \renewcommand{\aq@pre}{Bei jeder der unterstehenden Fragen ist nur eine der vorgeschlagenen Antworten richtig. Kreuzen Sie die richtige Antwort ohne Begründung an.}% \renewcommand{\aq@preVF}{Bei jeder der unterstehenden Aussagen kreuzen Sie \textbf{R} (für die richtige Aussage) oder \textbf{F} (für die falsche Aussage) an.}% \or \def\cmdAQ@global@tone{Ερωτήσεις} \def\cmdAQ@global@ttwo{Απαντήσεις} \def\aqfoottext{Συνεχίζεται στην επόμενη σελίδα\ldots} \renewcommand{\aq@pre}{Από τις επόμενες προτάσεις επιλέξετε αυτήν, που θεωρείτε σωστή.}% \renewcommand{\aq@preVF}{Να επιλέξετε \textbf{Σ}(ωστό), αν θεωρείτε την πρόταση που δίνεται παρακάτω σωστή, ή \textbf{Λ}(άθος) αν την θεωρείτε λανθασμένη.}% \or \def\cmdAQ@global@tone{Вопросов} \def\cmdAQ@global@ttwo{Ответы} \def\aqfoottext{Продолжение на следующей странице\ldots} \renewcommand{\aq@pre}{На каждый из приведенных ниже вопросов верным является только один из предложенных ответов. Проверьте правильный ответ без обоснования.}% \renewcommand{\aq@preVF}{Для каждого из приведенных ниже утверждений проверьте П (для правильного утверждения) и Ф (для неверного утверждения).}% \or \def\cmdAQ@global@tone{Domande} \def\cmdAQ@global@ttwo{Risposte} \def\aqfoottext{Continua alla pagina successiva\ldots} \renewcommand{\aq@pre} % only one answer is true; choose right answer {Per ciascuna delle domande che seguono, solo una delle risposte proposte è vera. È necessario scegliere la risposta giusta senza alcuna giustificazione.}% \renewcommand{\aq@preVF} % only one answer is true; check corresponding box {Per ciascuna delle seguenti affermazioni, selezionare la casella \textbf{V} (l'affermazione è vera) o la casella \textbf{F} (l'affermazione è falsa).}% \or \def\cmdAQ@global@tone{问题} \def\cmdAQ@global@ttwo{答案} \def\aqfoottext{请翻页\ldots} \renewcommand{\aq@pre}{对于以下提出的各个问题,仅有一个答案是正确的,请选择你认为正确的答案(不需要提供理由)。}% \renewcommand{\aq@preVF}{对于以下各项陈述,根据陈述内容的正误选择相应的选项(正确的选择“正”,错误的选择“误”)。}% \or \def\cmdAQ@global@tone{\aqlabelforquest} \def\cmdAQ@global@ttwo{\aqlabelforrep} \def\aqfoottext{unknown\ldots} \renewcommand{\aq@pre}{\aqpretxt}% \renewcommand{\aq@preVF}{\aqpretxtVF}% \fi% } \def\aqpretxt{}% \def\aqpretxtVF{}% \define@cmdkey [AQ] {global} {lq}{} \define@cmdkey [AQ] {global} {pq}{} \define@cmdkey [AQ] {global} {points}{} \define@cmdkey [AQ] {global} {symb}{} \define@cmdkey [AQ] {global} {corsymb}{} \define@cmdkey [AQ] {global} {bonus}{} \define@cmdkey [AQ] {global} {malus}{} \define@cmdkey [AQ] {global} {numstyle}{} \define@cmdkey [AQ] {global} {propstyle}{} \define@cmdkey [AQ] {global} {size}{} \define@cmdkey [AQ] {global} {tone}{} \define@cmdkey [AQ] {global} {ttwo}{} \define@cmdkey [AQ] {global} {numbreak}{} \define@cmdkey [AQ] {global} {afterpreskip}{} \define@boolkey [AQ] {global} {transparent}[true]{} \define@boolkey [AQ] {global} {VF} [true]{} \define@boolkey [AQ] {global} {sep} [true]{} \define@boolkey [AQ] {global} {pre} [true]{} \define@boolkey [AQ] {global} {title} [true]{} \define@boolkey [AQ] {global} {long} [true]{} \define@boolkey [AQ] {global} {num} [true]{} \define@boolkey [AQ] {global} {numprop} [false]{} \define@boolkey [AQ] {global} {nosquare} [false]{} \define@boolkey [AQ] {global} {correction} [true]{} \define@boolkey [AQ] {global} {alea} [true]{} \presetkeys [AQ] {global} { lq = 100mm, pq = 0pt, points = {}, sep = false, pre = false, bonus = {0,5}, malus = {0,25}, VF = false, long = false, symb = $\square$, corsymb = $\blacksquare$, afterpreskip = \medskip, num = true, transparent = false, nosquare = false, correction = false,%v1.00 numstyle = \arabic, propstyle = \alph,% v0.93 numprop = false,% v0.93 size = {}, %3.7 same size la fonte title = true, ttwo = \aqlabelforrep, tone = \aqlabelforquest, numbreak = 0, alea = false}{} \define@cmdkey[AQ]{local}{pq}{} \define@cmdkey[AQ]{local}{br}{} \presetkeys[AQ]{local}{br=5,pq= \cmdAQ@global@pq}{}% \ifcase\aqlocall@ng \newcommand{\aq@pre}{Pour chacune des questions ci-dessous, une seule des r\'eponses propos\'ees est exacte. Vous devez cocher la r\'eponse exacte sans justification. Une bonne r\'eponse rapporte \textbf{\cmdAQ@global@bonus\ point}. Une mauvaise r\'eponse enl\`eve \textbf{\cmdAQ@global@malus\ point}. L'absence de r\'eponse ne rapporte ni n'enl\`eve aucun point. Si le total des points est n\'egatif, la note globale attribu\'ee \`a l'exercice est \textbf{0}.}% % \newcommand{\aq@preVF}{Pour chacune des affirmations ci-dessous, cocher la case V (l'affirmation est vraie) ou la case F (l'affirmation est fausse) sur l'ANNEXE, \`a rendre avec la copie. Les r\'eponses ne seront pas justifi\'ees. Une bonne r\'eponse rapporte \textbf{\cmdAQ@global@bonus\ point}. Une mauvaise r\'eponse enl\`eve \textbf{\cmdAQ@global@malus\ point}. L'absence de r\'eponse ne rapporte ni n'enl\`eve aucun point. Si le total des points est n\'egatif, la note globale attribu\'ee \`a l'exercice est \textbf{0}.}% \or \newcommand{\aq@pre}{For each of the questions below, only one of the proposed answers is true. You must choose the right answer without justification.}% \newcommand{\aq@preVF}{For each of the statements below, check the \textbf{T} box (the statement is true) or the \textbf{F} box (the statement is false).}% \or \newcommand{\aq@pre}{Bei jeder der unterstehenden Fragen ist nur eine der vorgeschlagenen Antworten richtig. Kreuzen Sie die richtige Antwort ohne Begründung an.}% \newcommand{\aq@preVF}{Bei jeder der unterstehenden Aussagen kreuzen Sie \textbf{R} (für die richtige Aussage) oder \textbf{F} (für die falsche Aussage) an.}% \or \newcommand{\aq@pre}{Από τις επόμενες προτάσεις επιλέξετε αυτήν, που θεωρείτε σωστή.}% \newcommand{\aq@preVF}{Να επιλέξετε \textbf{Σ}(ωστό), αν θεωρείτε την πρόταση που δίνεται παρακάτω σωστή, ή \textbf{Λ}(άθος) αν την θεωρείτε λανθασμένη.}% \or %--- wjb \newcommand{\aq@pre}{На каждый из приведенных ниже вопросов верным является только один из предложенных ответов. Проверьте правильный ответ без обоснования.}% \newcommand{\aq@preVF}{Для каждого из приведенных ниже утверждений проверьте П (для правильного утверждения) и Ф (для неверного утверждения).}% % Insert text(s) for NEW LANGUAGE(S), e.g. Italian \or \newcommand{\aq@pre} % only one answer is true; choose right answer {Per ciascuna delle domande che seguono, solo una delle risposte proposte è vera. È necessario scegliere la risposta giusta senza alcuna giustificazione.}% \newcommand{\aq@preVF} % only one answer is true; check corresponding box {Per ciascuna delle seguenti affermazioni, selezionare la casella \textbf{V} (l'affermazione è vera) o la casella \textbf{F} (l'affermazione è falsa).}% \or %% TODO 中文 \newcommand{\aq@pre}{对于以下提出的各个问题,仅有一个答案是正确的,请选择你认为正确的答案(不需要提供理由)。}% \newcommand{\aq@preVF}{对于以下各项陈述,根据陈述内容的正误选择相应的选项(正确的选择“正”,错误的选择“误”)。}% \or % unknown \newcommand{\aq@pre}{\aqpretxt}% \newcommand{\aq@preVF}{\aqpretxtVF}% \fi % \newcommand*{\AQms}{\aq@ms}% \def\aq@ms(#1,#2){\vrule height #1pt depth #2pt width 0pt} \newcommand*{\altersquare}{\mbox{\vbox{\hrule\hbox to 6pt{\vrule height 5.2pt \hfil\vrule}\hrule}}}% \@ifundefined{square}{\let\square\altersquare}{}% \newcommand*{\dingsquare}{\ding{114}}% \newcommand*{\dingchecksquare}{\mbox{\ding{114}\hspace{-.7em}\raisebox{.2ex}[1ex]{\ding{51}}}} \newcommand*{\aq@style@title}{\textbf}% \newcommand*{\aq@style@numquest}{\textbf}% \newcommand*{\aq@style@numrep}{\textbf}% \newcommand{\aq@title}{% \hline% \hfil{\aq@style@title{\cmdAQ@global@tone}}\hfil% & \hfil{\aq@style@title{\cmdAQ@global@ttwo}}\hfil\\ \hline% \ifAQ@global@long \endfirsthead \hline \hfil{\aq@style@title{\cmdAQ@global@tone}}\hfil% & \hfil{\aq@style@title{\cmdAQ@global@ttwo}}\hfil\\ \hline% \endhead & \raisebox{-1em}\hfill{\emph{\aqfoottext}} \\ \hline \endfoot \endlastfoot\fi }% \newcommand{\AQmessage}[1]{% \multicolumn{2}{|l|}{% \begin{minipage}{\textwidth-\tabcolsep*2-\arrayrulewidth*2}% #1 \end{minipage}}\\ \hline% }% \newcommand{\aq@melange}{% \setrannum{\aq@alea}{1}{\value{aq@numb}}% \ifcase\aq@alea% \or \global\let\aq@tempfirst\aq@arga \or \global\let\aq@tempfirst\aq@argb \or \global\let\aq@tempfirst\aq@argc \or \global\let\aq@tempfirst\aq@argd \or \global\let\aq@tempfirst\aq@arge \fi \setcounter{alea@numfirst}{\aq@alea}% \setrannum{\aq@alea}{1}{\value{aq@numb}}% \ifcase\aq@alea% \or \global\let\aq@templast\aq@arga \or \global\let\aq@templast\aq@argb \or \global\let\aq@templast\aq@argc \or \global\let\aq@templast\aq@argd \or \global\let\aq@templast\aq@arge \fi \setcounter{alea@numlast}{\aq@alea}% \global\let\aq@temp\aq@tempfirst% \global\let\aq@tempfirst\aq@templast% \global\let\aq@templast\aq@temp% \global\expandafter\let\csname aq@arg\alph{alea@numfirst}% \endcsname\aq@tempfirst% \global\expandafter\let\csname aq@arg\alph{alea@numlast}% \endcsname\aq@templast% }% %<-------------------------> \newcommand{\aq@hauteurbox}[1]{% \setbox\aq@tempbox=% \vbox{\parbox[t]{\textwidth-\tabcolsep*4-\arrayrulewidth*3-\cmdAQ@global@lq}% {\cmdAQ@global@symb\quad\mbox{#1}}}% \cmdAQ@global@symb remplace $\square$ \aq@dimtmpa\ht\aq@tempbox\relax% \aq@dimtmpb\dp\aq@tempbox\relax% \advance\aq@dimtmpa by\aq@dimtmpb}% %<-------------------------> \newcommand{\aq@adjust}[1]{% \setbox\aq@tempbox=% \vbox{% \parbox[t]{\cmdAQ@global@lq}{\aq@style@numquest{\number\value{AQ@numquestion}.}\hspace{3pt}#1}}% \aq@dimtmpa\ht\aq@tempbox \aq@dimtmpb\dp\aq@tempbox \aq@wdquest\wd\aq@wdquest \advance\aq@dimtmpa by\aq@dimtmpb\relax% \aq@hauteurquest=\aq@dimtmpa \aq@hauteurbox{\aq@arga}% \aq@hauteurprop=\aq@dimtmpa \aq@hauteurbox{\aq@argb}% \advance\aq@hauteurprop by\aq@dimtmpa\relax% \ifnum\value{aq@numb}>2\relax \aq@hauteurbox{\aq@argc}% \advance\aq@hauteurprop by\aq@dimtmpa\relax\fi \ifnum\value{aq@numb}>3\relax \aq@hauteurbox{\aq@argd}% \advance\aq@hauteurprop by\aq@dimtmpa\relax\fi \ifnum\value{aq@numb}>4\relax \aq@hauteurbox{\aq@arge}% \advance\aq@hauteurprop by\aq@dimtmpa\relax\fi \ifdim\aq@hauteurquest<\aq@hauteurprop% \global\aq@dimtmp=0pt \aq@dimtmpa\ht\aq@tempbox \aq@dimtmpb\dp\aq@tempbox \advance\aq@dimtmpa by3pt \advance\aq@dimtmpb by2pt \vrule height\aq@dimtmpa depth\aq@dimtmpb width0pt \else \advance\aq@hauteurquest by-\aq@hauteurprop \divide\aq@hauteurquest by\theaq@numb\relax \divide\aq@hauteurquest by2\relax% \global\aq@dimtmp=\aq@hauteurquest\fi }% %<-------------------------> \newcommand{\aq@prop}[2]{% \setbox\aq@tempbox=\vbox{#1}% \aq@wdprop\wd\aq@tempbox \aq@dimtmpa\ht\aq@tempbox\advance\aq@dimtmpa by\aqheightadvance\advance\aq@dimtmpa by\aq@dimtmp\relax \aq@dimtmpb\dp\aq@tempbox\advance\aq@dimtmpb by\aqdepthadvance\advance\aq@dimtmpb by\aq@dimtmp\relax \ifAQ@global@VF\hfil\fi \ifAQ@global@transparent\def\cmdAQ@global@corsymb{$\bigcirc$}% \def\cmdAQ@global@symb{}\fi \ifAQ@global@numprop\stepcounter{AQ@numprop}% {\aq@style@numrep{(\cmdAQ@global@propstyle{AQ@numprop})}}% \else \ifAQ@global@nosquare \else% \ifAQ@global@correction \def\@stop{1} \@for\goodrep:=\cmdAQ@local@br\do{% \ifnum\@stop<6 % \global\let\mysymb\cmdAQ@global@symb \ifthenelse{\equal{\goodrep}{#2}}{% \global\let\mysymb\cmdAQ@global@corsymb \def\@stop{9}}{% }% \fi}% \mysymb\hspace*{6pt}% \else \cmdAQ@global@symb\hspace*{6pt}% \fi \fi \fi \ifAQ@global@transparent \vrule height0pt depth0pt width\aq@wdprop \else \ignorespaces#1% \fi \vrule height\aq@dimtmpa depth\aq@dimtmpb width0pt \ifAQ@global@VF\hfil\fi}% %<-------------------------> \newcommand{\AQquestion}[3][]{% \setkeys[AQ]{local}{#1}% \stepcounter{AQ@numquestion}% \setcounter{AQ@numprop}{0} % v0.93 \setcounter{aq@numb}{0}% \@for\liste:=#3\do{% \stepcounter{aq@numb}% \begingroup \ifnum\aqlocall@ng=3 \nogreekalph\fi \global\expandafter\let\csname aq@arg\alph{aq@numb}\endcsname\liste \endgroup}% \ifAQ@global@alea\ifAQ@global@VF \else \aq@n@arg=0 % \loop\ifnum\aq@n@arg<\value{aq@numb}\aq@melange\advance\aq@n@arg by1\repeat\fi \fi \aq@adjust{#2}% \multirow{1}{\cmdAQ@global@lq}[\cmdAQ@local@pq]{% \ifAQ@global@num\aq@style@numquest{\cmdAQ@global@numstyle{AQ@numquestion}.}% \hspace{3pt}\fi \ifAQ@global@transparent% \hrule height0pt depth0pt width\aq@wdquest% \else #2\vss \fi }% &\setkeys[AQ]{local}{#1}% \aq@prop{\aq@arga}{1}\\% \ifAQ@global@sep\cline{2-2}\fi &\setkeys[AQ]{local}{#1}% \aq@prop{\aq@argb}{2}\\ \ifAQ@global@sep\cline{2-2}\fi \ifnum\value{aq@numb}=2\hline\else\ifAQ@global@sep\cline{2-2}\fi &\setkeys[AQ]{local}{#1}% \aq@prop{\aq@argc}{3}\\ \ifnum\value{aq@numb}=3\hline\else\ifAQ@global@sep\cline{2-2}\fi &\setkeys[AQ]{local}{#1}% \aq@prop{\aq@argd}{4}\\ \ifnum\value{aq@numb}=4\hline\else\ifAQ@global@sep\cline{2-2}\fi &\setkeys[AQ]{local}{#1}% \aq@prop{\aq@arge}{5}\\ \hline\fi\fi\fi}% %<-------------------------> \def\aqtextfortrue{\textbf{V}} \def\aqtextforfalse{\textbf{F}} \newcommand{\aq@questionVF}[2][]{% \setkeys[AQ]{local}{#1} \stepcounter{AQ@numquestion}% \setcounter{AQ@numprop}{0}% v0.93 \ifcase\aqlocall@ng \protected@xdef\aq@arga{\textbf{V}} \protected@xdef\aq@argb{\textbf{F}} \or \protected@xdef\aq@arga{\textbf{T}} \protected@xdef\aq@argb{\textbf{F}} \or \protected@xdef\aq@arga{\textbf{R}} \protected@xdef\aq@argb{\textbf{F}} \or \protected@xdef\aq@arga{\textbf{Σ}} \protected@xdef\aq@argb{\textbf{Λ}} \or %--- wjb \protected@xdef\aq@arga{\textbf{П}} \protected@xdef\aq@argb{\textbf{Ф}} \or \protected@xdef\aq@arga{\textbf{V}} \protected@xdef\aq@argb{\textbf{F}} \or \protected@xdef\aq@arga{\textbf{正}} \protected@xdef\aq@argb{\textbf{误}} \or \protected@xdef\aq@arga{\aqtextfortrue} \protected@xdef\aq@argb{\aqtextforfalse} \fi \setcounter{aq@numb}{2}% \aq@adjust{#2}% \multirow{3}{\cmdAQ@global@lq}[\cmdAQ@local@pq]{% \ifAQ@global@num\aq@style@numquest{\cmdAQ@global@numstyle{AQ@numquestion}.}\hspace{3pt}\fi #2\vss}% &\setkeys[AQ]{local}{#1}\aq@prop{\aq@arga}{1}\\ \ifAQ@global@sep \cline{2-2}\fi &\setkeys[AQ]{local}{#1}\aq@prop{\aq@argb}{2}\\ \hline}% %<-------------------------> \newenvironment{alterqcm}[1][]{% \ifAQ@global@numprop \setkeys [AQ] {global} {nosquare = true}{}\fi \setkeys[AQ]{global}{#1}% \ifx\aqutil@empty\cmdAQ@global@points \else \points{\cmdAQ@global@points} \fi \setcounter{AQ@numquestion}{\cmdAQ@global@numbreak}% \ifAQ@global@VF\let\AQquestion\aq@questionVF\let\aq@pre\aq@preVF\fi \ifAQ@global@pre\aq@pre\par\cmdAQ@global@afterpreskip\fi \ifAQ@global@long% \setlength\LTleft{0pt}% \setlength\LTright\fill% \setlength{\LTpre}{\intextsep}% \setlength{\LTpost}{\intextsep}% \begin{longtable}[l]{% @{}|>{\cmdAQ@global@size}p{\cmdAQ@global@lq}!{\extracolsep{\fill}}% |>{\cmdAQ@global@size}p{\textwidth-\tabcolsep*4-\arrayrulewidth*3-\cmdAQ@global@lq}|@{}}% \else \begin{tabular}{% @{}|>{\cmdAQ@global@size}p{\cmdAQ@global@lq}% |>{\cmdAQ@global@size}p{% \textwidth-\tabcolsep*4-\arrayrulewidth*3-\cmdAQ@global@lq}% |@{}}% \fi \ifAQ@global@title\aq@title\else\hline\fi% }% {\ifAQ@global@long \end{longtable}% \else \end{tabular}% \fi }% %<-------------------------> % #1 chemin & #2 theme & #3 liste de numéros % code de JC Charpentier %----------------------------------------------------------% \newcommand\InputQuestionList[3]{% \aq@tdml@a={}% \aq@tdml@b={}% \ifx\relax#3\relax\else \tdml@#3,\@nil,\expandafter\tdml@clean\the\aq@tdml@a\@nil \fi \expandafter\gdef\expandafter\last@val\expandafter{\the\aq@tdml@b}% \AQ@TA{#1}{#2}{\the\aq@tdml@a}% \AQ@TB{#1}{#2}{\last@val}} %----------------------------------------------------------% \long\def\tdml@#1,{% \ifx\@nil#1\relax \else \expandafter\addtotoks\the\aq@tdml@b,\to\aq@tdml@a \aq@tdml@b={#1}% \expandafter\tdml@ \fi } %----------------------------------------------------------% \long\def\addtotoks#1\to#2{% #2=\expandafter{\the#2#1}% }% %----------------------------------------------------------% \long\def\tdml@clean,#1\@nil{% \ifx\relax#1\relax \aq@tdml@a{}% \else \tdml@@clean#1\@nil \fi } %----------------------------------------------------------% \long\def\tdml@@clean#1,\@nil{% \aq@tdml@a{#1}% }% %----------------------------------------------------------% %----------------------------------------------------------% \newcommand\AQ@TA[3]{\@for\nb:=#3\do{% \input #1#2\nb}% }% \newcommand\AQ@TB[3]{\input#1#2#3}% %----------------------------------------------------------% % from forloop.sty \newcommand{\aq@forLoop}[5][1] {% \setcounter{#4}{#2}% \ifthenelse{\value{#4}<#3}% {#5\addtocounter{#4}{#1}% \aq@forLoop[#1]{\value{#4}}{#3}{#4}{#5}% }% {\ifthenelse{\value{#4}=#3}% {#5}{}}}% %----------------------------------------------------------% \def\aq@tvi(#1,#2){\vrule height #1pt depth #2pt width 0pt} \define@cmdkey [AQ] {ann} {propstyle}[true]{} \define@boolkey[AQ] {ann} {VF}[true]{} \presetkeys [AQ] {ann} {propstyle = \arabic, VF = false}{} \newcommand*{\AQannexe}[4][]{% \setkeys[AQ]{ann}{#1}% \aq@tmp=#4 % \advance\aq@tmp by 1 % \begin{tabular}{*{\number\aq@tmp}{|>{\hfill}c}|}\hline% \ifAQ@ann@VF% N&V&F% \else N\aq@forLoop{1}{#4}{aq@identCol}% {& \cmdAQ@ann@propstyle{aq@identCol}}\fi \tabularnewline\hline% \aq@forLoop{#2}{#3}{aq@identRow} {\number\value{aq@identRow}&% \aq@forLoop{2}{\number\aq@tmp}{aq@identCol}% {$\ $% \ifthenelse{\equal{\value{aq@identCol}}{#4}}{}{&}% }% \tabularnewline\hline}% \end{tabular}% }% %----------------------------------------------------------% \newcommand\AQpoints[1]{% \marginpar{% \begin{tabular}{|c|} \hline \textbf{#1}\\ \hline\\ \hline \end{tabular}}} \endinput