Problema com novo comando

Oct 28 2020

Como estou tendo aulas de álgebra linear, muitas vezes preciso escrever M (mxn, K) e acho isso irritante.

Tentei definir um comando: \newcommand{\M}[3]{M(#1 \times #2, #3)}mas isso dá uma saída estranha:

Como posso resolver esse problema? desde já, obrigado

Respostas

9 egreg Oct 28 2020 at 16:04

Se você definir

\newcommand{\M}[3]{M(#1 \times #2, #3)}

então a sintaxe de entrada deve ser

\M{2}{2}{\mathbb{R}}

e não

\M{2,2,\mathbb{R}}

que de fato reproduz a saída estranha e, possivelmente, algumas mensagens de erro.

Exemplo:

\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}

Você consegue fazer a sintaxe, reconhecidamente mais fácil, funcionar? Sim.

\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}

Onde está o segredo? O pré-processador \SplitArgument{2}{,}diz ao LaTeX para ler o argumento, que deve conter duas vírgulas, e passar #1como

{<a>}{<b>}{<c>}

quando o argumento é <a>,<b>,<c>. Portanto, podemos alimentar o argumento transformado \MLONGque lê três argumentos padrão.

3 Denis Oct 28 2020 at 15:52

Como disse a Campa, você deve sempre fornecer um MWE

Por enquanto, dê uma olhada em

\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} 

dando

como esperado.

NickMatteo Oct 29 2020 at 08:33

Como as outras respostas identificaram, o problema era que você precisa escrever \M{2}{2}{R}para usar sua macro no documento.

É compreensível que você queira evitar escrever dessa forma, já que as chaves são difíceis de digitar. A egreg mostrou uma maneira de reduzir (mas não eliminar) as chaves com o LaTeX moderno.

Se você quiser usar uma sintaxe semelhante à forma como você escreveu no texto de sua pergunta, outra abordagem é a velha definição de estilo TeX

\def\M(#1x#2,#3){M(#1 \times #2, \mathbb{#3})}

Então você pode escrever \M(2x2,R)em seu documento.