Historique des modifications [retour]
cliquez ici pour masquer/afficher la révision 5

15 Nov '15, 22:14

unbonpetit's gravatar image

unbonpetit
1.8k18

Le message d'erreur est dû à l'espace qui est devant le `\relax` dans l'appel à `\my@intervalle` La macro `\my@intervalle` est récursive (j'en profite pour faire remarquer que la récursivité n'est pas terminale, mais on s'en fiche un peu) et donc, lorsqu'elle est appelée avec via `\interff{1,2}`, elle reçoit comme argument `#1` : `1` et comme argument `#2` : `2, \relax \noexpand`. \relax\noexpand`. Pourquoi avoir mis ce `\noexpand` dans l'appel `\interff`, mystère. Bon, comme l'argument `#2` ne commence pas par `\relax`, elle prend la branche `\else` et s'appelle-elle même avec son argument `#2` c'est-à-dire `\my@intervalle 2, \relax \noexpand\@eolst`. \relax\noexpand\@eolst`. Son premier argument `#1` est alors `2` et son 2e argument est `\relax \noexpand`. Rebelotte, ` \relax\noexpand`. Rebelote, comme `#2` ne commence pas par `\relax` mais par un espace (c'est lui la cause du plantage !), elle s'appelle à nouveau elle-même avec `\my@intervalle \relax\noexpand\@eolst`. Et là, c'est le crash puisqu'il n'y a plus de virgule pour satisfaire l'argument délimité. Je suggère et j'utilise, pour une saisie quasi-naturelle des intervalles la macro `\I` ainsi définie : \documentclass{article} \usepackage{amsmath} \usepackage[frenchb]{babel} \newcommand\mathactive[1]{\mathcode`#1"8000 \begingroup \lccode`~`#1 \lowercase{\endgroup\def~}} \newcommand\I{% \begingroup \mathactive\;{\mathpunct{}\mathpunct{\mathchar`\;}}% \mathactive\[{\right\delimiter\delcode`\[ \endgroup}% \mathactive\]{\right\delimiter\delcode`\] \endgroup}% \left\delimiter\delcode`} \begin{document} L'intervalle $\I[\dfrac12;3[$ et $\I]-1;+\infty[$. \end{document}
cliquez ici pour masquer/afficher la révision 4

15 Nov '15, 22:11

unbonpetit's gravatar image

unbonpetit
1.8k18

La macro `\my@intervalle` est récursive (j'en profite pour faire remarquer que la récursivité n'est pas terminale, mais on s'en fiche un peu) et donc, lorsqu'elle est appelée avec via `\interff{1,2}`, elle reçoit comme argument `#1` : `1` et comme argument `#2` : `2, \relax \noexpand`. Pourquoi avoir mis ce `\noexpand` dans l'appel `\interff`, mystère. Bon, comme l'argument `#2` n'est ne commence pas vide, par `\relax`, elle prend la branche `\else` et s'appelle-elle même avec son argument `#2` c'est-à-dire `\my@intervalle 2, \relax \noexpand\@eolst`. Son premier argument `#1` est alors `2` et son 2e argument est `\relax \noexpand`. Rebelotte, comme `#1` n'est `#2` ne commence pas vide, par `\relax` mais par un espace (c'est lui la cause du plantage !), elle s'appelle à nouveau elle-même avec `\my@intervalle \relax \noexpand\@eolst`. \relax\noexpand\@eolst`. Et là, c'est le crash puisqu'il n'y a plus de virgule pour satisfaire l'argument délimité. Je suggère et j'utilise, pour une saisie quasi-naturelle des intervalles la macro `\I` ainsi définie : \documentclass{article} \usepackage{amsmath} \usepackage[frenchb]{babel} \newcommand\mathactive[1]{\mathcode`#1"8000 \begingroup \lccode`~`#1 \lowercase{\endgroup\def~}} \newcommand\I{% \begingroup \mathactive\;{\mathpunct{}\mathpunct{\mathchar`\;}}% \mathactive\[{\right\delimiter\delcode`\[ \endgroup}% \mathactive\]{\right\delimiter\delcode`\] \endgroup}% \left\delimiter\delcode`} \begin{document} L'intervalle $\I[\dfrac12;3[$ et $\I]-1;+\infty[$. \end{document}
cliquez ici pour masquer/afficher la révision 3

15 Nov '15, 18:42

unbonpetit's gravatar image

unbonpetit
1.8k18

cliquez ici pour masquer/afficher la révision 2

15 Nov '15, 18:42

unbonpetit's gravatar image

unbonpetit
1.8k18

cliquez ici pour masquer/afficher la révision 1

15 Nov '15, 18:41

unbonpetit's gravatar image

unbonpetit
1.8k18

C'est votre première visite ici ? Consultez la FAQ !

×