Перейти к содержанию

Собственные команды с \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}
Свёрстано в Scissor LaTeX: Сокращения для множеств и названия продукта

Аргументы и значение по умолчанию

[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 определяет команду, только если её ещё нет. \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

\NewDocumentCommand из xparse не читается. Определение отбрасывается, а там, где команда используется, её имя пропускается с сообщением, а аргументы остаются в тексте.

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