Перейти до вмісту

Власні команди з \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.