用 \newcommand 定义自己的命令
在导言区写 \newcommand{\name}{replacement},用 [n] 指定参数 #1 到 #n;此后 \name 在文本和数学公式中都会被替换为它的定义。
不带参数的命令
命令可以减少输入,并让记号保持一致。在导言区定义一次,就能在任何地方使用。
集合和产品名称的简写
\documentclass{article}
\usepackage{amssymb}
\newcommand{\R}{\mathbb{R}}
\newcommand{\product}{Scissor LaTeX}
\begin{document}
Every $x \in \R$ has a square $x^2 \ge 0$.
This page was typeset by \product.
\end{document}参数和默认值
名称后面的 [n] 表示命令接受几个参数;在定义中它们写作 #1、#2 等。第二个方括号为第一个参数指定默认值,使其成为可选参数。
参数和可选的第一个参数
\documentclass{article}
\newcommand{\vect}[1]{\mathbf{#1}}
\newcommand{\norm}[1]{\left\lVert #1 \right\rVert}
\newcommand{\greet}[2][Hello]{#1, #2!}
\begin{document}
The length of $\vect{v}$ is $\norm{\vect{v}}$.
\greet{Erika} \greet[Good morning]{John}
\end{document}修改已有的命令
\renewcommand 替换一个已经存在的命令,\providecommand 只在命令尚不存在时才定义它。在 TeX 安装中,对已被占用的名称使用 \newcommand 会报错;这时请使用 \renewcommand。
\renewcommand 和 \providecommand
\documentclass{article}
\renewcommand{\emph}[1]{\textbf{#1}}
\providecommand{\R}{\mathbb{R}}
\begin{document}
This is \emph{emphasised} in bold now, and $\R$ is defined.
\end{document}运算符名称
sin 和 log 等函数名以直立体排版,并带有正确的间距。\DeclareMathOperator(amsmath)可以定义你自己的运算符;带星号的形式像 \max 一样,在独立公式中把上下限放在下方。
\DeclareMathOperator 及其带星号的形式
\documentclass{article}
\usepackage{amsmath}
\DeclareMathOperator{\Var}{Var}
\DeclareMathOperator*{\argmax}{arg\,max}
\begin{document}
\[
\Var(X) = \mathbb{E}\left[(X - \mu)^2\right],
\qquad
\hat{\theta} = \argmax_{\theta} L(\theta)
\]
\end{document}自定义环境
\newenvironment{name}[n]{before}{after} 定义一个环境:“before”代码在 \begin{name} 处运行,“after”代码在 \end{name} 处运行。参数可以在“before”部分中使用。
带参数的环境
\documentclass{article}
\newenvironment{task}[1]
{\par\noindent\textbf{Task #1.}\ }
{\par}
\begin{document}
\begin{task}{44}
Measure the rainfall every morning.
\end{task}
\end{document}可用的写法
| 命令 | 在 Scissor LaTeX 中 | 说明 |
|---|---|---|
\newcommand, \renewcommand, \providecommand | 可用 | 最多 9 个参数,第一个参数可以是带默认值的可选参数。带星号的形式也可用。 |
\DeclareRobustCommand | 可用 | 与 \newcommand 相同。 |
\newenvironment, \renewenvironment | 可用 | 支持参数和默认值。 |
\DeclareMathOperator, \DeclareMathOperator* | 可用 | |
\def\name{...}, \gdef, \edef, \xdef | 部分可用 | 简单的定义和 #1 形式的参数可用;\def\pt(#1,#2){...} 这类带分隔符的参数无法匹配,会产生错乱的输出。 |
\let\new\old | 可用 | |
\NewDocumentCommand, \RenewDocumentCommand (xparse) | 不支持 | 定义会被丢弃,在使用该命令的地方会报告为未知命令。 |
\DeclarePairedDelimiter (mathtools) | 可用 | |
\makeatletter, \makeatother | 接受 | 名称中带 @ 的命令不会运行。 |
定义会在排版之前展开,所以命令可以用在文本、数学公式、图表标题和章节标题中。为防止死循环,展开达到安全上限时会停止,并在“问题”标签页中给出提示。
xparse 命令
xparse 的 \NewDocumentCommand 不会被读取。定义会被丢弃,在使用该命令的地方,它的名称会被跳过并给出提示,而参数留在文本中。
不支持 \NewDocumentCommand
\documentclass{article}
\usepackage{xparse}
\NewDocumentCommand{\pair}{m m}{(#1, #2)}
\begin{document}
The pair \pair{a}{b} loses its parentheses and comma.
\end{document}“问题”标签页: Skipped 1 unknown command: \pair
要解决这个问题,请用 \newcommand{\pair}[2]{(#1, #2)} 写出同样的命令。对于可选参数,带默认值的 \newcommand 可以满足常见需求。
与 TeX 安装的不同之处
xparse 和 mathtools 的手册在 CTAN 上:xparse、mathtools。关于运算符和函数名,另请参见求和、积分和函数名。
常见问题
如何在 LaTeX 中定义新命令?
在导言区写 \newcommand{\name}{text}。若要两个参数,在名称后面加上 [2],并在文本中使用 #1 和 #2。
\newcommand 和 \def 有什么区别?
\newcommand 会检查名称是否可用,并支持一个可选参数。\def 是底层的 TeX 命令;它会不加询问地覆盖已有定义。请优先使用 \newcommand 和 \renewcommand。
\NewDocumentCommand 在 Scissor LaTeX 中可用吗?
不可用。请用 \newcommand 改写这类命令,它支持必选参数和一个可选参数。
本页的每个示例都在构建网站时由 Scissor LaTeX 排版。 最后更新:2026-11-07