Erreur sur un environnement

Bonjour,

Je suis en train d’crire un nouvel environnement et en ajoutant un
\ifthenelse, deux/trois modifs plus loin, une erreur
« File ended while scanning use of \TX@get@body. »
est apparue. Mme en simplifiant l’extrme l’environnement pour revenir
l’ancienne version, elle ne disparat pas :frowning:

Je pense qu’il y a un problme idiot, mais je ne le trouve pas. Le but de
l’environnement est essentiellement de faire en sorte que
\begin{qcm}{3}
cre un
\begin{tabular}{lll} % 3 « l »
et j’ai un traitement particulier faire si l’argument vaut 1 (j’ai
simplifi ici).

Merci,
Cline

\documentclass{article}

\usepackage{array,ifthen,tabularx}

\newenvironment{qcm}[1]{
\begin{tabular}{*{#1}{l}}
}{
\end{tabular}
}

\newcommand{\temp}{0}

\newenvironment{qcm2}[1]{
\renewcommand{\temp}{#1}
\ifthenelse{\equal{#1}{1}}{
\begin{tabularx}{\linewidth}{X}
}{
\begin{tabular}{*{#1}{l}}
}
}{
\ifthenelse{\equal{\temp}{1}}{
\end{tabularx}
}{
\end{tabular}
}
}

\begin{document}

\begin{qcm}{2}
a & b \
\end{qcm}

\begin{qcm2}{2}
a & b \ % Le \ cre une ligne supplmentaire, c’est louche…
\end{qcm2}

\begin{qcm2}{1} % Erreur
a \
\end{qcm2}

\end{document}

Le 12 mars 2020 à 23:32, Céline Chevalier xyz@xyz.tld a écrit :

Bonjour,

Je suis en train d’écrire un nouvel environnement et en ajoutant un \ifthenelse, deux/trois modifs plus loin, une erreur
“File ended while scanning use of \TX@get@body.”
est apparue. Même en simplifiant à l’extrême l’environnement pour revenir à l’ancienne version, elle ne disparaît pas :frowning:

Je pense qu’il y a un problème idiot, mais je ne le trouve pas. Le but de l’environnement est essentiellement de faire en sorte que
\begin{qcm}{3}
crée un
\begin{tabular}{lll} % 3 “l”
et j’ai un traitement particulier à faire si l’argument vaut 1 (j’ai simplifié ici).

Merci,
Céline

\documentclass{article}

\usepackage{array,ifthen,tabularx}

\newenvironment{qcm}[1]{
\begin{tabular}{*{#1}{l}}
}{
\end{tabular}
}

\newcommand{\temp}{0}

\newenvironment{qcm2}[1]{
\renewcommand{\temp}{#1}
\ifthenelse{\equal{#1}{1}}{
\begin{tabularx}{\linewidth}{X}
}{
\begin{tabular}{*{#1}{l}}
}
}{
\ifthenelse{\equal{\temp}{1}}{
\end{tabularx}
}{
\end{tabular}
}
}

\begin{document}

\begin{qcm}{2}
a & b \
\end{qcm}

\begin{qcm2}{2}
a & b \ % Le \ crée une ligne supplémentaire, c’est louche…
\end{qcm2}

\begin{qcm2}{1} % Erreur
a \
\end{qcm2}

\end{document}

Quand tu définis un environnement machin, latex définit en fait deux commandes : \machin et \endmachin. Du coup quand tu définis un environnement en utilisant une autre environnement, c’est souvent plus sûr d’utiliser les deux commandes que l’environnement. Dans le cas présent, je crois que c’est dit dans la doc de tabularx.

Pour le même genre de raisons, il est déconseillé de mettre des chiffres dans le nom d’un environnement car la commande \qcm2 ne se comportera pas obligatoirement comme tu l’attends (même si ici il semble ne pas y avoir de problème).

\documentclass{article}

\usepackage{array,ifthen,tabularx}

\newcommand{\temp}{0}

\newenvironment{qcmtwo}[1]{
\renewcommand{\temp}{#1}
\ifthenelse{\equal{#1}{1}}{
\tabularx{\linewidth}{X}
}{
\tabular{*{#1}{l}}
}
}{
\ifthenelse{\equal{\temp}{1}}{
\endtabularx
}{
\endtabular
}
}

\begin{document}

\begin{qcmtwo}{2}
a & b \ % Le \ crée une ligne supplémentaire, c’est louche…
\end{qcmtwo}

\begin{qcmtwo}{1} % Erreur
a \
\end{qcmtwo}

\end{document}


Michel Bovani
xyz@xyz.tld
https://paroles.mathriochka.net

Bonsoir Michel,

Quand tu dfinis un environnement machin, latex dfinit en fait deux
commandes : \machin et \endmachin. Du coup quand tu dfinis un
environnement en utilisant une autre environnement, c?est souvent plus
sr d?utiliser les deux commandes que l?environnement. Dans le cas
prsent, je crois que c?est dit dans la doc de tabularx.

Alors a pour le coup, je n’y aurais jamais pens… Merci !
Effectivement, a rsout mon problme, mme dans la version complte de la
dfinition de l’environnement.

Enfin il reste un petit problme: je ne peux toujours pas mettre \ en fin
de dernire ligne de

\begin{qcm2}{2}
a & b \
c & d \ % ← celui-l
\end{qcm}

car cela cre une ligne supplmentaire (vide) dans le tableau. Il faut
crire

\begin{qcm2}{2}
a & b \
c & d
\end{qcm}

Je le vois bien dans l’exemple complet car il y a des >{bla} avant les
dfinitions de colonnes et j’obtiens:

bla a bla b
bla c bla d
bla

Bizarrement, ce n’est pas le cas avec \begin{qcm2}{1} (qui utilise donc
tabularx).

Tu saurais d’o a peut venir ?

Pour le mme genre de raisons, il est dconseill de mettre des chiffres
dans le nom d?un environnement car la commande \qcm2 ne se comportera pas
obligatoirement comme tu l?attends (mme si ici il semble ne pas y avoir de
problme).

Oui, a ce n’tait que pour le mail la liste, d’habitude j’aurais crit
qcmdeux. Mais merci quand mme pour le conseil.

Merci !
Cline

Bonjour Céline,

Le 13 mars 2020 à 00:45, Céline Chevalier xyz@xyz.tld a écrit :

Enfin il reste un petit problème: je ne peux toujours pas mettre \ en fin de dernière ligne de

\begin{qcm2}{2}
a & b \
c & d \ % ← celui-là
\end{qcm}

car cela crée une ligne supplémentaire (vide) dans le tableau. Il faut écrire

\begin{qcm2}{2}
a & b \
c & d
\end{qcm}

Je le vois bien dans l’exemple complet car il y a des >{bla} avant les
définitions de colonnes et j’obtiens:

bla a bla b
bla c bla d
bla

Bizarrement, ce n’est pas le cas avec \begin{qcm2}{1} (qui utilise donc tabularx).

Tu saurais d’où ça peut venir ?

Non, mais ces trucs là, ça n’arrive qu’aux jeunes :-p

\documentclass{article}
\usepackage{array,tabularx}

\newenvironment{qcmtwo}[1]{
\def\tempa{#1}\def\tempb{1}
\ifx\tempa\tempb\tabularx{\linewidth}{X}\else\tabular{*{#1}{l}}\fi%
}
{
\ifx\tempa\tempb\endtabularx\else\endtabular\fi
}

\begin{document}

\begin{tabular}{ll}
a&b\
c&d\
\end{tabular}

\begin{qcmtwo}{2}
a & b \ % Le \ crée une ligne supplémentaire, c’est louche…
c&d\
\end{qcmtwo}

\begin{tabular}{ll}
a&b\
c&d\
\end{tabular}

\end{document}


Michel Bovani
xyz@xyz.tld
https://paroles.mathriochka.net

Le 13 mars 2020 à 08:30, Michel Bovani xyz@xyz.tld a écrit :

Bonjour Céline,

Le 13 mars 2020 à 00:45, Céline Chevalier <xyz@xyz.tld mailto:xyz@xyz.tld> a écrit :

Enfin il reste un petit problème: je ne peux toujours pas mettre \ en fin de dernière ligne de

\begin{qcm2}{2}
a & b \
c & d \ % ← celui-là
\end{qcm}

car cela crée une ligne supplémentaire (vide) dans le tableau. Il faut écrire

\begin{qcm2}{2}
a & b \
c & d
\end{qcm}

Je le vois bien dans l’exemple complet car il y a des >{bla} avant les
définitions de colonnes et j’obtiens:

bla a bla b
bla c bla d
bla

Bizarrement, ce n’est pas le cas avec \begin{qcm2}{1} (qui utilise donc tabularx).

Tu saurais d’où ça peut venir ?

Non, mais ces trucs là, ça n’arrive qu’aux jeunes :-p

Remarque que là c’est dans le cas tabularx que ça marche plus, ça t’avance pas beaucoup !

\documentclass{article}
\usepackage{array,tabularx}

\newenvironment{qcmtwo}[1]{
\def\tempa{#1}\def\tempb{1}
\ifx\tempa\tempb\tabularx{\linewidth}{X}\else\tabular{*{#1}{l}}\fi%
}
{
\ifx\tempa\tempb\endtabularx\else\endtabular\fi
}

\begin{document}

\begin{tabular}{ll}
a&b\
c&d\
\end{tabular}

\begin{qcmtwo}{2}
a & b \ % Le \ crée une ligne supplémentaire, c’est louche…
c&d\
\end{qcmtwo}

\begin{tabular}{ll}
a&b\
c&d\
\end{tabular}

\end{document}


Michel Bovani
xyz@xyz.tld mailto:xyz@xyz.tld
https://paroles.mathriochka.net


Michel Bovani
xyz@xyz.tld
https://paroles.mathriochka.net

Le 13 mars 2020 à 09:23, Michel Bovani xyz@xyz.tld a écrit :

Remarque que là c’est dans le cas tabularx que ça marche plus, ça t’avance pas beaucoup !

Le truc c’est que tabularx c’est une carlislerie, c’est pas un vrai environnement ! Ça vaut le coup de lire la doc : comme d’hab, ce que fait Carlisle est assez stupéfiant !

Cette chose là peut-être ?
J’ai ajouté des \hline pour m’y retrouver, mais on peut les retirer.
Note que l’appel de array est superflu car tabularx l’appelle.

\documentclass{article}
\usepackage{ifthen,tabularx}
\newif\iftoto
\newcommand{\temp}{0}
\newenvironment{qcmtwo}[1]{
\ifthenelse{\equal{#1}{1}}{
\tototrue \tabularx{\linewidth}{X}
}{
\tabular{*{#1}{l}}
}
}
{\iftoto\relax\else\endtabular\fi}

\begin{document}

\begin{qcmtwo}{2}
a & b \
\hline
\end{qcmtwo}

\begin{qcmtwo}{1}
a \
\hline
\end{qcmtwo}

\end{document}


Michel Bovani
xyz@xyz.tld
https://paroles.mathriochka.net