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