Chuyển đến nội dung

Tự định nghĩa lệnh với \newcommand

Viết \newcommand{\name}{replacement} trong phần mở đầu, thêm [n] cho các đối số #1 đến #n; từ đó trở đi \name được thay bằng định nghĩa của nó, cả trong văn bản lẫn trong công thức toán.

Lệnh không có đối số

Một lệnh riêng giúp bớt gõ phím và giữ cho ký hiệu nhất quán. Hãy định nghĩa nó một lần trong phần mở đầu và dùng ở bất cứ đâu.

Lối tắt cho tập hợp và tên sản phẩm

\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}
Dàn trang bởi Scissor LaTeX: Lối tắt cho tập hợp và tên sản phẩm

Đối số và giá trị mặc định

[n] sau tên lệnh cho biết lệnh nhận bao nhiêu đối số; bên trong định nghĩa, chúng là #1, #2, v.v. Cặp ngoặc vuông thứ hai đặt giá trị mặc định cho đối số đầu tiên, khiến nó trở thành tùy chọn.

Đối số và đối số đầu tiên tùy chọn

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

Thay đổi một lệnh có sẵn

\renewcommand thay thế một lệnh đã tồn tại, còn \providecommand chỉ định nghĩa lệnh nếu nó chưa tồn tại. Trong một bản cài đặt TeX, dùng \newcommand cho một tên đã được dùng sẽ gây lỗi; khi đó hãy dùng \renewcommand.

\renewcommand và \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}

Tên toán tử

Các tên hàm như sin và log được in đứng với khoảng cách phù hợp. \DeclareMathOperator (amsmath) giúp bạn tạo toán tử riêng; dạng có dấu sao đặt cận ở bên dưới trong công thức hiển thị, giống như \max.

\DeclareMathOperator và dạng có dấu sao

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

Môi trường của riêng bạn

\newenvironment{name}[n]{before}{after} định nghĩa một môi trường: đoạn mã "before" chạy tại \begin{name} và đoạn mã "after" chạy tại \end{name}. Các đối số có thể được dùng trong phần "before".

Một môi trường có đối số

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

Những gì hoạt động

LệnhTrong Scissor LaTeXGhi chú
\newcommand, \renewcommand, \providecommandHoạt độngTối đa 9 đối số, đối số đầu tiên có thể tùy chọn với giá trị mặc định. Cả các dạng có dấu sao.
\DeclareRobustCommandHoạt độngNhư \newcommand.
\newenvironment, \renewenvironmentHoạt độngCó đối số và giá trị mặc định.
\DeclareMathOperator, \DeclareMathOperator*Hoạt động
\def\name{...}, \gdef, \edef, \xdefMột phầnCác định nghĩa đơn giản và đối số kiểu #1 hoạt động; tham số có dấu phân cách như \def\pt(#1,#2){...} không được khớp và cho kết quả bị lỗi.
\let\new\oldHoạt động
\NewDocumentCommand, \RenewDocumentCommand (xparse)Không hỗ trợĐịnh nghĩa bị bỏ qua và lệnh được báo là không xác định ở nơi nó được dùng.
\DeclarePairedDelimiter (mathtools)Hoạt động
\makeatletter, \makeatotherĐược chấp nhậnCác lệnh có @ trong tên không được thực thi.

Các định nghĩa được khai triển trước khi dàn trang, nên một lệnh có thể được dùng trong văn bản, trong công thức toán, trong chú thích và trong tiêu đề mục. Để tránh vòng lặp vô hạn, việc khai triển dừng lại ở một giới hạn an toàn, kèm theo một thông báo trong thẻ Sự cố.

Lệnh xparse

\NewDocumentCommand của xparse không được đọc. Định nghĩa bị bỏ qua, và ở nơi lệnh được dùng, tên lệnh bị bỏ qua kèm một thông báo, còn các đối số của nó vẫn nằm lại trong văn bản.

\NewDocumentCommand không được hỗ trợ

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

Thẻ Sự cố: Skipped 1 unknown command: \pair

Để sửa, hãy viết lại cùng lệnh đó bằng \newcommand{\pair}[2]{(#1, #2)}. Với đối số tùy chọn, \newcommand có giá trị mặc định đáp ứng được trường hợp thường gặp.

Khác biệt so với một bản cài đặt TeX

Tài liệu hướng dẫn của xparse và mathtools có trên CTAN: xparse, mathtools. Về toán tử và tên hàm, xem thêm Tổng, tích phân và tên hàm.

Hỏi và đáp

Làm thế nào để định nghĩa một lệnh mới trong LaTeX?

Viết \newcommand{\name}{text} trong phần mở đầu. Thêm [2] sau tên lệnh để có hai đối số và dùng #1 cùng #2 trong phần văn bản.

\newcommand và \def khác nhau thế nào?

\newcommand kiểm tra xem tên đó còn trống không và hỗ trợ một đối số tùy chọn. \def là lệnh TeX cấp thấp; nó ghi đè mà không hỏi. Hãy ưu tiên \newcommand và \renewcommand.

\NewDocumentCommand có hoạt động trong Scissor LaTeX không?

Không. Hãy viết lại những lệnh như vậy bằng \newcommand, vốn đáp ứng các đối số bắt buộc và một đối số tùy chọn.

Mọi ví dụ trên trang này đều được Scissor LaTeX dàn trang khi xây dựng trang web. Cập nhật lần cuối 2026-11-07.