我想定义这个宏:
\newcommand{stackonetwo}{\begin{smallmatrix} 1 \\ 2 \end{smallmatrix}}
但我认为编译器不喜欢\\
新命令。它返回错误Missing number, treated as zero
。为什么会发生此错误,以及如何正确避免此错误并执行我想要的操作?
答案1
你说你得到了错误缺失数字,但最好还是看看第一的错误。如果您(或您的编辑器)滚动浏览错误,TeX 将尝试恢复,但这种恢复通常会引入虚假的后续错误。
\documentclass{article}
\usepackage{amsmath}
\newcommand{stackonetwo}{\begin{smallmatrix} 1 \\ 2 \end{smallmatrix}}
\begin{document}
\end{document}
产生错误
! LaTeX Error: Missing \begin{document}.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.5 ...egin{smallmatrix} 1 \\ 2 \end{smallmatrix}}
只有当你滚动过去你才会看到
! Missing number, treated as zero.
<to be read again>
a
l.5 ...egin{smallmatrix} 1 \\ 2 \end{smallmatrix}}
?
然后如果你滚动过去,TeX 就会变得非常混乱,你会得到
! Missing control sequence inserted.
<inserted text>
\inaccessible
l.5 ...egin{smallmatrix} 1 \\ 2 \end{smallmatrix}}
?
最初的错误是由于缺少了其中的字母\
,\stackonetwo
导致字母“脱离”定义,并开始排版为一段文字。\begin{document}
如果你修复了该错误,那么
\documentclass{article}
\usepackage{amsmath}
\newcommand{\stackonetwo}{\begin{smallmatrix} 1 \\ 2 \end{smallmatrix}}
\begin{document}
\end{document}
运行时没有错误,并且在数学模式下使用时将按预期排版矩阵。
答案2
\
您的命令有两个问题。首先,给定的命令名称前没有。其次,smallmatrix
环境需要在数学模式下调用。考虑到这两个因素,编译问题已解决。
\documentclass{standalone}
\usepackage{amsmath}
\newcommand{\stackonetwo}{$\begin{smallmatrix} 1 \\ 2 \end{smallmatrix}$}
\begin{document}
\stackonetwo
\end{document}
编辑1: 作为文森特正确指出的是,上面的代码与命令的数学模式用法相冲突。或者,下面的版本允许在文本和数学模式下使用命令。
\documentclass{standalone}
\usepackage{amsmath}
\newcommand{\DefineNamedFunction}[1]{
\expandafter\providecommand\csname#1\endcsname
{\ensuremath{\begin{smallmatrix} 1 \\ 2 \end{smallmatrix}}}
}
\begin{document}
\DefineNamedFunction{stackonetwo}
$\stackonetwo$
\stackonetwo
\end{document}
编辑2:根据建议大卫·卡莱尔(针对埃格尔),我的代码的更好的版本可能如下。
\documentclass{standalone}
\usepackage{amsmath}
\newcommand{\DefineNamedFunction}[1]{%
\expandafter\newcommand\csname#1\endcsname
{\ensuremath{\begin{smallmatrix} 1 \\ 2 \end{smallmatrix}}}%
}
\begin{document}
\DefineNamedFunction{stackonetwo}
$\stackonetwo$
\stackonetwo
\end{document}