新命令的问题

新命令的问题

因为我正在上线性代数课,所以我经常需要写 M(mxn, K),我觉得这很烦人。

我尝试定义一个命令:\newcommand{\M}[3]{M(#1 \times #2, #3)}但是这给出了一个奇怪的输出:

在此处输入图片描述

我该如何解决这个问题?提前致谢

答案1

如果你定义

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

那么输入语法应该是

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

不是

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

这确实重现了奇怪的输出,并且可能还重现了一些错误消息。

例子:

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

在此处输入图片描述

你能让这个显然更简单的语法发挥作用吗?是的。

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

在此处输入图片描述

秘密在哪里?预处理器\SplitArgument{2}{,}告诉 LaTeX 读取参数(该参数应包含两个逗号),并将其传递#1

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

当参数为 时<a>,<b>,<c>。因此,我们可以将转换后的参数输入到\MLONG读取三个标准参数的函数中。

答案2

正如 Campa 所说,你应该始终提供MWE

目前,请看一下

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

给予

在此处输入图片描述

正如预期的那样。

答案3

正如其他答案所指出的,问题在于您需要\M{2}{2}{R}在文档中写入才能使用宏。

可以理解您想避免以这种方式编写,因为花括号很难输入。egreg 展示了一种使用现代 LaTeX 减少(但不消除)花括号的方法。

如果你想使用类似于你在问题文本中写的方式的语法,另一种方法是旧的 TeX 样式定义

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

然后您就可以\M(2x2,R)在文档中写入内容了。

相关内容