如何避免定义 \newcommand 时出现此错误?

如何避免定义 \newcommand 时出现此错误?

我想定义这个宏:

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

相关内容