Problem mit neuem Befehl

Oct 28 2020

Da ich eine Klasse in linearer Algebra besuche, muss ich oft M (mxn, K) schreiben und finde es ärgerlich.

Ich habe versucht, einen Befehl zu definieren, \newcommand{\M}[3]{M(#1 \times #2, #3)}aber dies ergibt eine seltsame Ausgabe:

Wie kann ich dieses Problem lösen? Danke im Voraus

Antworten

9 egreg Oct 28 2020 at 16:04

Wenn Sie definieren

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

dann sollte die Eingabesyntax sein

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

und nicht

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

Dies reproduziert in der Tat die seltsame Ausgabe und möglicherweise einige Fehlermeldungen.

Beispiel:

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

Können Sie die zugegebenermaßen einfachere Syntax zum Laufen bringen? Ja.

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

Wo ist das Geheimnis? Der Präprozessor \SplitArgument{2}{,}weist LaTeX an, das Argument, das zwei Kommas enthalten soll, zu lesen und #1als zu übergeben

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

wenn das Argument ist <a>,<b>,<c>. Wir können also das transformierte Argument mit \MLONGdrei Standardargumenten versehen.

3 Denis Oct 28 2020 at 15:52

Wie Campa sagte, sollten Sie immer eine zur Verfügung stellen MWE

Schauen Sie sich für den Moment an

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

geben

wie erwartet.

NickMatteo Oct 29 2020 at 08:33

Wie die anderen Antworten zeigten, bestand das Problem darin, dass Sie schreiben müssen \M{2}{2}{R}, um Ihr Makro im Dokument zu verwenden.

Es ist verständlich, dass Sie es vermeiden möchten, es so zu schreiben, da geschweifte Klammern schwer zu tippen sind. Egreg zeigte einen Weg, um geschweifte Klammern mit modernem LaTeX zu reduzieren (aber nicht zu eliminieren).

Wenn Sie eine Syntax verwenden möchten, die der Art und Weise ähnelt, wie Sie sie im Text Ihrer Frage geschrieben haben, ist die alte Definition im TeX-Stil ein anderer Ansatz

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

Dann können Sie \M(2x2,R)in Ihr Dokument schreiben .