错误消息:!\bbm 的使用与其定义不匹配

错误消息:!\bbm 的使用与其定义不匹配

我有以下最小工作示例——为什么不起作用\def\bbm15?我得到的错误是

*File: umsb.fd 2013/01/14 v3.01 AMS symbols B
)
! Use of \bbm doesn't match its definition.
l.16 \bbm1
          5 %this generates an error!
? 
! Emergency stop.
l.16 \bbm1
          5 %this generates an error!
End of file on the terminal!*

最小工作示例:

\documentclass{article} 
\usepackage{mathtools}
\usepackage{amsmath,amsthm,amsfonts}

\def\bbm15{\renewcommand{\arraystretch}{1.5}\begin{bmatrix}}
\def\bbm20{\renewcommand{\arraystretch}{2.0}\begin{bmatrix}}
\def\ebm{\end{bmatrix}}

\begin{document}
\begin{equation}    
X = 
%\bbm20 %this works fine!    
%\bbm15 %this generates an error!    
\renewcommand{\arraystretch}{1.5}\begin{bmatrix} %this works fine!    
X_{11} & X_{12} & \cdots & X_{1p} \\    
X_{21} & X_{22} & \cdots & X_{2p} \\    
\vdots & \vdots & \ddots & \cdots \\    
X_{n1} & X_{n2} & \cdots & X_{np}     
\ebm     
.    
\end{equation}

\end{document}

答案1

\def\bbm15{..}

定义\bbm必须遵循15

\def\bbm20{..}

重新定义\bbm,以便必须遵循20

所以这个定义之后\bm15就会出现问题所示的错误。

如果你使用,\newcommand你会被警告重新定义

\newcommand\bbmA{\arraystretch}{1.5}\begin{bmatrix}}
\newcommand\bbmB{\arraystretch}{2.0}\begin{bmatrix}}

然后你可以使用\bbmA\bbmB但也许我会建议

\newcommand\bbm[1][1.5]{\arraystretch}{#1}\begin{bmatrix}}

并使用\bbm\bbm[2]

答案2

之所以\bbm20会出现“工作正常”的情况,正如你所说,但实际上\bbm15却不是,这是巧合;大卫的回答提供了更详尽的解释。当然,如果你撤销两个指令的顺序,即,如果您在 之前 而不是 之后\def定义,您会发现会引发错误,而现在“工作正常”。 (如果您使用而不是来创建宏和,您将收到一些有用的消息,提醒您注意语法错误问题。)\bbm20\bbm15\bbm20\bbm15\newcommand\def\bbm15\bbm20

发生了什么事?一般来说,TeX 和 LaTeX 宏的名称必须由大写和小写字母(A 到 Z 和 a 到 z,不允许其他字符类型)或单个非字母字符。因此,从句法角度来看,宏名称\bbm20bbm15在 LaTeX 文档中使用无效。

如果您必须创建单独的宏名称,我建议您使用\bbmXXbbmXVX,即使用大写罗马“数字”而不是阿拉伯数字。

相关内容