我有以下最小工作示例——为什么不起作用\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,不允许其他字符类型)或单个非字母字符。因此,从句法角度来看,宏名称\bbm20
和bbm15
在 LaTeX 文档中使用无效。
如果您必须创建单独的宏名称,我建议您使用\bbmXX
和bbmXVX
,即使用大写罗马“数字”而不是阿拉伯数字。