Przejdź do treści

Własne polecenia z \newcommand

Wpisz \newcommand{\name}{replacement} w preambule, z [n] dla argumentów od #1 do #n; od tego miejsca \name jest zastępowane swoją definicją, zarówno w tekście, jak i w matematyce.

Polecenie bez argumentów

Własne polecenie oszczędza pisania i pozwala zachować spójną notację. Zdefiniuj je raz w preambule i używaj w dowolnym miejscu.

Skróty dla zbiorów i nazwy produktu

\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}
Złożone przez Scissor LaTeX: Skróty dla zbiorów i nazwy produktu

Argumenty i wartość domyślna

[n] po nazwie określa, ile argumentów przyjmuje polecenie; wewnątrz definicji są to #1, #2 i tak dalej. Drugi nawias kwadratowy nadaje pierwszemu argumentowi wartość domyślną, dzięki czemu staje się on opcjonalny.

Argumenty i opcjonalny pierwszy argument

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

Zmiana istniejącego polecenia

\renewcommand zastępuje polecenie, które już istnieje, a \providecommand definiuje polecenie tylko wtedy, gdy jeszcze nie istnieje. \newcommand dla zajętej nazwy jest w instalacji TeX błędem; w takim przypadku użyj \renewcommand.

\renewcommand i \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}

Nazwy operatorów

Nazwy funkcji, takie jak sin i log, są składane prostym krojem z właściwymi odstępami. \DeclareMathOperator (amsmath) tworzy własne operatory; wersja z gwiazdką umieszcza w wzorach wystawionych granice pod spodem, tak jak \max.

\DeclareMathOperator i jego wersja z gwiazdką

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

Własne środowiska

\newenvironment{name}[n]{before}{after} definiuje środowisko: kod „before” wykonuje się przy \begin{name}, a kod „after” przy \end{name}. Argumentów można używać w części „before”.

Środowisko z argumentem

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

Co działa

PolecenieW Scissor LaTeXUwagi
\newcommand, \renewcommand, \providecommandDziałaDo 9 argumentów, opcjonalny pierwszy argument z wartością domyślną. Także wersje z gwiazdką.
\DeclareRobustCommandDziałaJak \newcommand.
\newenvironment, \renewenvironmentDziałaZ argumentami i wartością domyślną.
\DeclareMathOperator, \DeclareMathOperator*Działa
\def\name{...}, \gdef, \edef, \xdefCzęściowoProste definicje i argumenty w stylu #1 działają; parametry z ogranicznikami, takie jak \def\pt(#1,#2){...}, nie są dopasowywane i dają zniekształcony wynik.
\let\new\oldDziała
\NewDocumentCommand, \RenewDocumentCommand (xparse)NieobsługiwaneDefinicja jest pomijana, a polecenie jest zgłaszane jako nieznane tam, gdzie zostało użyte.
\DeclarePairedDelimiter (mathtools)Działa
\makeatletter, \makeatotherAkceptowanePolecenia z @ w nazwie nie są wykonywane.

Definicje są rozwijane przed składem, więc polecenia można użyć w tekście, w matematyce, w podpisach i w tytułach rozdziałów. Aby zapobiec pętlom, rozwijanie zatrzymuje się po osiągnięciu limitu bezpieczeństwa, z komunikatem w karcie Problemy.

Polecenia xparse

\NewDocumentCommand z pakietu xparse nie jest odczytywane. Definicja jest pomijana, a w miejscu użycia polecenia jego nazwa jest pomijana z komunikatem, podczas gdy jego argumenty zostają w tekście.

\NewDocumentCommand nie jest obsługiwane

\documentclass{article}
\usepackage{xparse}
\NewDocumentCommand{\pair}{m m}{(#1, #2)}
\begin{document}
The pair \pair{a}{b} loses its parentheses and comma.
\end{document}

Karta Problemy: Skipped 1 unknown command: \pair

Aby to naprawić, zapisz to samo polecenie jako \newcommand{\pair}[2]{(#1, #2)}. W przypadku argumentów opcjonalnych \newcommand z wartością domyślną wystarcza w typowych sytuacjach.

Czym różni się od instalacji TeX

Dokumentacja pakietów xparse i mathtools jest dostępna w CTAN: xparse, mathtools. O operatorach i nazwach funkcji przeczytasz też na stronie Sumy, całki i nazwy funkcji.

Pytania i odpowiedzi

Jak zdefiniować nowe polecenie w LaTeX?

Wpisz \newcommand{\name}{text} w preambule. Dodaj [2] po nazwie, aby uzyskać dwa argumenty, i użyj #1 oraz #2 w tekście.

Czym różni się \newcommand od \def?

\newcommand sprawdza, czy nazwa jest wolna, i obsługuje argument opcjonalny. \def to niskopoziomowe polecenie TeX; nadpisuje bez pytania. Lepiej używać \newcommand i \renewcommand.

Czy \NewDocumentCommand działa w Scissor LaTeX?

Nie. Przepisz takie polecenia za pomocą \newcommand, które obsługuje argumenty obowiązkowe i jeden argument opcjonalny.

Każdy przykład na tej stronie jest składany przez Scissor LaTeX podczas budowania witryny. Ostatnia aktualizacja: 2026-11-07.