Problème avec une nouvelle commande
Depuis que je prends un cours d'algèbre linéaire, j'ai souvent besoin d'écrire M (mxn, K) et je trouve ça ennuyeux.
J'ai essayé de définir une commande: \newcommand{\M}[3]{M(#1 \times #2, #3)}mais cela donne une sortie étrange:
Hoe puis-je résoudre ce problème? Merci d'avance
Réponses
Si vous définissez
\newcommand{\M}[3]{M(#1 \times #2, #3)}
alors la syntaxe d'entrée doit être
\M{2}{2}{\mathbb{R}}
et pas
\M{2,2,\mathbb{R}}
qui reproduit en effet l'étrange sortie et, éventuellement, certains messages d'erreur.
Exemple:
\documentclass{article}
\usepackage{amsmath,amssymb}
\newcommand{\RR}{\mathbb{R}} % the reals
\newcommand{\M}[3]{M(#1\times #2,#3)}
\begin{document}
Good syntax \verb|\M{2}{2}{\RR}| yields $A\in\M{2}{2}{\RR}$
Bad syntax \verb|\M{2,2,\RR}| yields $A\in\M{2,2,\RR}$
\end{document}
Pouvez-vous faire fonctionner la syntaxe, certes plus simple? Oui.
\documentclass{article}
\usepackage{amsmath,amssymb}
%\usepackage{xparse}% not needed for LaTeX 2020-10-01 or later
\newcommand{\RR}{\mathbb{R}} % the reals
\NewDocumentCommand{\M}{>{\SplitArgument{2}{,}}m}{\MLONG#1}
\NewDocumentCommand{\MLONG}{mmm}{M(#1\times #2,#3)}
\begin{document}
Good new syntax \verb|\M{2,2,\RR}| yields $A\in\M{2,2,\RR}$
\end{document}
Où est le secret? Le préprocesseur \SplitArgument{2}{,}dit à LaTeX de lire l'argument, qui doit contenir deux virgules, et de passer #1comme
{<a>}{<b>}{<c>}
quand l'argument est <a>,<b>,<c>. Nous pouvons donc alimenter l'argument transformé à \MLONGcelui qui lit trois arguments standard.
Comme l'a dit Campa, vous devez toujours fournir un MWE
Pour le moment, jetez un œil à
\documentclass[12pt]{article}
\usepackage[a4paper]{geometry}
\usepackage{mathtools,amsfonts}
\newcommand{\M}[3]{\ensuremath{M(#1 \times #2, #3)}}
\begin{document}
\M{1}{2}{\mathbb{R}}
\end{document}
donnant
comme prévu.
Comme les autres réponses identifiées, le problème était que vous deviez écrire \M{2}{2}{R}pour utiliser votre macro dans le document.
Il est compréhensible que vous souhaitiez éviter de l'écrire de cette façon, car les accolades sont difficiles à taper. egreg a montré un moyen de réduire (mais pas d'éliminer) les accolades avec LaTeX moderne.
Si vous souhaitez utiliser une syntaxe similaire à celle que vous avez écrite dans le texte de votre question, une autre approche est l'ancienne définition de style TeX
\def\M(#1x#2,#3){M(#1 \times #2, \mathbb{#3})}
Ensuite, vous pouvez écrire \M(2x2,R)dans votre document.