Sur ce fil du site tex.stackexchange, intitulé Arguments of custom commands as comma separated list?, on trouve différentes propositions pour écrire une macro dont les arguments sont séparés par des virgules.

Désireux de m'en servir pour taper les intervalles de façon plus générique, j'ai essayé d'adapter le code :

Ouvrir dans l'éditeur
\documentclass{article}
\usepackage{amsmath}
\makeatletter
\def\my@intervalle #1,#2\@eolst{%
\ifx\relax#2\relax
#1
\else
\my@intervalle #2\@eolst%
\fi}
\newcommand{\interff}[1]{%
\left[
\my@intervalle #1, \relax\noexpand\@eolst%
\right]
}
\newcommand{\interffold}[2]{\left[#1~;~#2\right]}
\makeatother
\begin{document}
$\interff{1,2}$
$\interffold{1,2}$
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

J'obtiens le message suivant lors de la compilation :

Ouvrir dans l'éditeur
Runaway argument?
\relax \noexpand \@eolst \fi \fi \right ] $
! Paragraph ended before \my@intervalle was complete.
<to be read again>
\par l.38
?
! Missing $ inserted.
<inserted text>
$ l.38
?
! Missing \right. inserted.
<inserted text>
\right . l.38
?
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Est-ce que quelqu'un peut m'aider à obtenir le résultat souhaité ?

Posée 15 Nov '15, 18:04

vincentxavier's gravatar image

vincentxavier
3315
Taux d'acceptation : 0%

Modifiée 15 Nov '15, 21:08

Pathe's gravatar image

Pathe ♦♦
7.6k49210252


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. 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.

Son premier argument #1 est alors 2 et son 2e argument est \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 :

Ouvrir dans l'éditeur
\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}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Lien permanent

Publiée 15 Nov '15, 18:41

unbonpetit's gravatar image

unbonpetit ♦♦
1.8k18
Taux d'acceptation : 68%

Modifiée 15 Nov '15, 22:14

Ça correspond à l'intuition que j'avais sur cette macro, mais pas vu que c'était l'espace surnuméraire qui causait le souci. Je note la macro proposée qui répond également à mon problème, modulo le souci d'ouverture/fermeture des [] qui va poser souci dans le document .tex final.

(15 Nov '15, 23:05) vincentxavier vincentxavier's gravatar image

Il faudrait convertir cette réponse en commentaire et en expurger toute forme de politesse (le « merci »).

(15 Nov '15, 23:13) unbonpetit ♦♦ unbonpetit's gravatar image

@vincentxavier Attention ! Cette réponse était un commentaire plutôt qu'une réponse et a été convertie comme tel.

(15 Nov '15, 23:13) denis ♦♦ denis's gravatar image

@vincentxavier Les formules de politesse et les signatures sont à éviter : celle(s) de votre contribution a (ont) été supprimée(s).

(16 Nov '15, 10:06) denis ♦♦ denis's gravatar image
Votre réponse
[Masquer l'aperçu]

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Mots-clés de la question :

×1

Question posée : 15 Nov '15, 18:04

Question vue : 5,045 fois

Dernière mise à jour : 16 Nov '15, 10:11

Questions similaires

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

×