Problema con il nuovo comando

Oct 28 2020

Dato che sto seguendo un corso di algebra lineare, spesso ho bisogno di scrivere M (mxn, K) e lo trovo fastidioso.

Ho provato a definire un comando: \newcommand{\M}[3]{M(#1 \times #2, #3)}ma questo dà uno strano output:

Hoe posso risolvere questo problema? Grazie in anticipo

Risposte

9 egreg Oct 28 2020 at 16:04

Se definisci

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

allora la sintassi di input dovrebbe essere

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

e non

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

che effettivamente riproduce lo strano output e, eventualmente, alcuni messaggi di errore.

Esempio:

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

Riesci a far funzionare la sintassi, certamente più semplice? Sì.

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

Dov'è il segreto? Il preprocessore \SplitArgument{2}{,}dice a LaTeX di leggere l'argomento, che dovrebbe contenere due virgole, e di passare #1come

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

quando l'argomento è <a>,<b>,<c>. Quindi possiamo fornire l'argomento trasformato a \MLONGquello che legge tre argomenti standard.

3 Denis Oct 28 2020 at 15:52

Come ha detto Campa, dovresti sempre fornire un file MWE

Per il momento, dai un'occhiata

\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

come previsto.

NickMatteo Oct 29 2020 at 08:33

Come le altre risposte identificate, il problema era che devi scrivere \M{2}{2}{R}per usare la tua macro nel documento.

È comprensibile che tu voglia evitare di scriverlo in questo modo, poiché le parentesi graffe sono difficili da digitare. egreg ha mostrato un modo per ridurre (ma non eliminare) le parentesi graffe con il moderno LaTeX.

Se vuoi usare una sintassi simile a come l'hai scritta nel testo della tua domanda, un altro approccio è la vecchia definizione in stile TeX

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

Quindi puoi scrivere \M(2x2,R)nel tuo documento.