رفتن به محتوا

دستورهای خودتان با \newcommand

در مقدمهٔ سند بنویسید \newcommand{\name}{replacement} و برای آرگومان‌های #1 تا #n از [n] استفاده کنید؛ از آن به بعد \name در متن و در ریاضی با تعریفش جایگزین می‌شود.

دستوری بدون آرگومان

یک دستور در تایپ صرفه‌جویی می‌کند و نمادگذاری را یکدست نگه می‌دارد. آن را یک بار در مقدمهٔ سند (preamble) تعریف کنید و هر جا خواستید به کار ببرید.

میان‌بُر برای مجموعه‌ها و نام یک محصول

\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 فقط وقتی دستوری را تعریف می‌کند که هنوز وجود نداشته باشد. در یک نصب TeX، \newcommand برای نامی که قبلاً گرفته شده خطا است؛ در این حالت از \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کار می‌کندتا ۹ آرگومان، و یک آرگومان اول اختیاری با مقدار پیش‌فرض. شکل‌های ستاره‌دار هم.
\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.