x non R y
Bonjour à tous,
J'ai une relation binaire $R$ sur un ensemble $X$, et deux éléments $x,y \in X$.
Je veux écrire que $x$ n'est pas en relation avec $y$.
Quand je fais x \not R y ça donne un truc moche :
$$x \not R y$$
Y a-t-il une autre façon de faire ?
Evidemment, je pourrais aussi écrire $\neg(xRy)$, mais j'aime bien savoir.
Merci d'avance
Martial
J'ai une relation binaire $R$ sur un ensemble $X$, et deux éléments $x,y \in X$.
Je veux écrire que $x$ n'est pas en relation avec $y$.
Quand je fais x \not R y ça donne un truc moche :
$$x \not R y$$
Y a-t-il une autre façon de faire ?
Evidemment, je pourrais aussi écrire $\neg(xRy)$, mais j'aime bien savoir.
Merci d'avance
Martial
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Donc je maintiens quand même ma question : y a-t-il une autre syntaxe possible ?
J’imagine que l’on souhaite qu’elle soit par dessus ?
Comme pour « n’est pas égal » ou pour « n’appartient pas » ?
Édit : coquille grotesque
Tu as drôlement bien fait de poser la question !
1) Le rendu ici est différent car le forum n'utilise pas le logiciel LaTeX, seulement une syntaxe ressemblante pour les expressions mathématiques.
2) Les symboles mathématiques n'ont pas le même espacement autour suivant leur fonction que, dans de nombreux cas, seul l'auteur du document connaît. Par exemple, le $R$ de la relation $PV = nRT$ (pour les gaz parfaits) est très bien comme ça : c'est une simple constante. Pour les variables, les constantes, les chiffres, la classe \mathord (i.e., symbole ordinaire) est en général assignée par défaut, donc il n'y a rien de particulier à faire. Mais à cause de ça, si tu écris « x \mathcal{R} y » alors que $\mathcal{R}$ est censé être une relation binaire, ce n'est pas bon (les trois symboles sont collés les uns aux autres). Il faut écrire quelque chose comme « x \mathrel{\mathcal{R}} y » pour que l'espacement autour du $\mathcal{R}$ soit correct. Mieux : encapsuler ça dans une macro (voir ci-dessous).
Une relation binaire doit être mise dans \mathrel pour donner le bon espacement. Pour un opérateur binaire comme $+$ ou $\times$, c'est \mathbin qu'il faut, etc. Les 8 classes de symboles possibles sont indiquées dans le TeXbook (voir le tableau en bas de ce message). En plus de \mathord, \mathbin et \mathrel, on peut utiliser \mathop, \mathopen, \mathclose, \mathpunct et \mathinner pour changer la classe d'un symbole ou d'une sous-formule.
Afin de barrer ton $\mathcal{R}$ tout en gardant le bon espacement, je propose de plagier la définition de \notin et d'encapsuler :
Mais si je veux un $R$ normal au lieu de $\mathcal{R}$ il me suffit de remplacer $\mathcal{R}$ par $R$ dans ce que tu me proposes, ou c'est plus compliqué que ça ?
Oh bah il te suffit de tester, non ? Je pense que ça devrait fonctionner.
Voici une façon de faire un petit peu meilleure : La différence, c'est l'utilisation de \NewDocumentCommand à la place de \newcommand ou \newcommand*. D'une part, c'est plus puissant si on veut prendre des arguments optionnels, “splitter” autour d'un caractère particulier, etc. Mais surtout, \NewDocumentCommand définit nos macros avec la primitive TeX \protected. C'est un peu technique, mais cela a pour conséquence que les macros ainsi définies auront moins de chances de poser problème si elles sont utilisées dans un argument comme celui
de \chapter, \section, etc. (en fait, \protected@write, \protected@edef, \protected@xdef, \write, \edef, \xdef, \message...), commandes qui développent d'emblée tout ce qui est développable et non « protégé ».
C'est une bonne habitude à prendre. En gros, toute macro utilisateur qui n'est pas destinée à produire un résultat uniquement par développement, via un code de ce genre : (ni à être développée dans un \typeout, un \write...) devrait a priori être « protégée ».
Remarque technique : \notin utilise un mécanisme similaire (\DeclareRobustCommand) que j'avais oublié de plagier dans mon premier message. La primitive \protected utilisée par \NewDocumentCommand est plus moderne. Elle nécessite les extensions e-TeX — qui sont omniprésentes aujourd'hui — mais protège la macro définie dans plus de situations que \DeclareRobustCommand ne le fait (cette dernière protège dans \protected@write, \protected@edef et \protected@xdef mais pas dans \edef ou dans \write, par exemple).
Si tu ne comprends rien à ce qui précède, ne t'inquiète pas. Dis-toi juste que \NewDocumentCommand, c'est vachement bien et tu peux l'utiliser à la place de \newcommand. Au lieu d'indiquer le nombre d'arguments et au plus un argument optionnel, tu mets un 'm' pour chaque argument obligatoire (m pour mandatory) et un 'o' ou 'O{valeur par défaut}' pour chaque argument optionnel. Il y a plein d'autres possibilités ; faire 'texdoc xparse' pour la documentation.
Pour les curieux qui voudraient voir la différence entre les deux approches, on peut utiliser par exemple :
Merci à Martial pour la question intéressante et à Brian de nous faire profiter de ses compétences franchement spectaculaires !
Bon, d'accord, je suis moins une bille en TDE qu'en latex, fort heureusement. Quoique j'ai quand même fait des progrès. Tu t'en souviens peut-être, mon 1er post : "Ma nullité transcendantale en latex" doit dater d'un peu moins d'un an. A l'époque je savais à peine écrire $\forall n \in \omega$...