本文へ移動

\newcommand で自分のコマンドを作る

プリアンブルに \newcommand{\name}{replacement} と書き、引数 #1 から #n を使うなら [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}
Scissor LaTeX による組版: 集合と製品名のショートカット

引数と既定値

名前の後の [n] で、コマンドが受け取る引数の数を指定します。定義の中では、引数は #1、#2 などで表します。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 はまだ存在しない場合に限ってコマンドを定義します。使用済みの名前に \newcommand を使うと TeX のインストール環境ではエラーになるので、その場合は \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 つ取るなら名前の後に [2] を付け、テキストの中で #1 と #2 を使います。

\newcommand と \def の違いは何ですか?

\newcommand は名前が使われていないかを確認し、省略可能な引数にも対応します。\def は低水準の TeX のコマンドで、確認せずに上書きします。\newcommand と \renewcommand を使うことをおすすめします。

Scissor LaTeX で \NewDocumentCommand は使えますか?

いいえ。そのようなコマンドは \newcommand で書き直してください。必須の引数と 1 つの省略可能な引数に対応できます。

このページの例はすべて、サイトのビルド時に Scissor LaTeX で組版されています。 最終更新:2026-11-07