> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/ar/alawamr/02-environments.md).

# البيئات

تُستخدم بيئات LaTeX لتطبيق نوع أو أكثر من تأثيرات التنضيد الخاصة على قسم من محتوى مستندك. تشرح هذه المقالة كيفية استخدام البيئات الموجودة وتعريف بيئات جديدة.

## مقدمة

تبدأ البيئة بـ `\begin{name}` وتنتهي بـ `\end{name}`:

```
\begin{name}
محتواك هنا...
...يأتي هنا...
\end{name}
```

حيث إن «`الاسم`» هو اسم البيئة المستخدمة—كما في المثال التالي باستخدام «`center`» لتنسيق فقرة من النص (في الوسط):

```latex
\documentclass{article}
\begin{document}
\begin{center}
هذا عرض توضيحي لبيئة \texttt{center}.
ستكون هذه الفقرة من النص \textit{مُوسَّطة} لأنها
موجودة داخل بيئة خاصة. توفر البيئات
طريقة فعالة لتعديل كتل النص داخل مستندك.
\end{center}
\end{document}
```

[افتح هذا المثال في Overleaf.](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Simple+environment+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Bcenter%7D%0AThis+is+a+demonstration+of+the+%5Ctexttt%7Bcenter%7D+environment.+%0AThis+paragraph+of+text+will+be+%5Ctextit%7Bcentred%7D+because+it+is+%0Acontained+within+a+special+environment.+Environments+provide+%0Aan+efficient+way+to+modify+blocks+of+text+within+your+document.%0A%5Cend%7Bcenter%7D%0A%5Cend%7Bdocument%7D)

ينتج هذا المثال المخرجات التالية:

![صورة توضح المحاذاة الوسطية](/files/47b3f462f5e875ecdbfd25f5bea5187c2bc91f9b)

## البيئات

المثال التالي يستخدم `tabular` بيئة لتنسيق جدول صغير. `tabular` تتطلب وسيطًا إضافيًا `{ c c c }` الذي يحدد محاذاة الخلايا—انظر [الجداول](/latex/ar/alashkal-waljdawl/01-tables.md) المقال للمزيد من المعلومات.

```latex
\documentclass{article}
\begin{document}
\begin{tabular}{ c c c }
  cell1 & cell2 & cell3 \\
  cell4 & cell5 & cell6 \\
  cell7 & cell8 & cell9 \\
 \end{tabular}
\end{document}
```

[افتح هذا المثال في Overleaf.](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Simple+tabular+environment+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegin%7Btabular%7D%7B+c+c+c+%7D+%0A++cell1+%26+cell2+%26+cell3+%5C%5C+%0A++cell4+%26+cell5+%26+cell6+%5C%5C+%0A++cell7+%26+cell8+%26+cell9+%5C%5C+%0A+%5Cend%7Btabular%7D%0A%5Cend%7Bdocument%7D)

ينتج هذا المثال المخرجات التالية:

![مثال على بيئة tabular](/files/77737a100096df5eb900b9a6cbdc3761979cc82b)

تقبل بعض البيئات وسائط اختيارية تُمرَّر عادةً داخل أقواس (`[...]`).

## تعريف بيئة جديدة

لتعريف بيئة جديدة استخدم `\newenvironment` الأمر الذي يكون شكله العام:

```
\newenvironment{name}[numarg][optarg_default]{begin_def}{end_def}
```

حيث:

* `الاسم` هو اسم هذا الوسيط المعرّف من قبل المستخدم؛
* `numarg` هو عدد الوسائط، من 1 إلى 9، التي تقبلها هذه البيئة. إذا `[numarg]` تم حذفها، فإن البيئة لا تقبل أي وسائط—مثل [`boxed` البيئة المعرّفة في المثال التالي](#defining-simple-environments);
* `optarg_default` يجعل الوسيط الأول اختياريًا ويوفر قيمة افتراضية—أي القيمة المستخدمة إذا لم تُقدَّم قيمة وسيط اختياري؛
* `begin_def` هو كود LaTeX الذي يُنفَّذ عند بدء البيئة (فتحها)، أي عندما تكتب `\begin{name}`. داخل هذا الكود يمكنك استخدام الوسائط التي تقبلها البيئة—لاحظ أن الوسيط الاختياري هو #1 والوسائط المتبقية يمكن الوصول إليها باستخدام #2 حتى #numarg;
* `end_def` هو كود LaTeX الذي يُنفَّذ عند انتهاء البيئة (إغلاقها)؛ أي عندما تكتب `\end{name}`. لا يمكنك استخدام أي من الوسائط داخل هذا المقطع من الكود.

### تعريف البيئات البسيطة

في هذا المثال الأول، نعرّف `boxed` البيئة التي لا تأخذ أي وسائط. ترسم إطارًا حول النص الموجود داخل البيئة:

```latex
\documentclass{article}
%يمكننا تعريف البيئة في المقدمة
\newenvironment{boxed}
    {\begin{center}
    \begin{tabular}{|p{0.9\textwidth}|}
    \hline\\
    }
    {
    \\\\\hline
    \end{tabular}
    \end{center}
    }
%
\begin{document}
الآن يمكننا استخدام بيئة \texttt{boxed} في مستندنا:

\begin{boxed}
يتم تنسيق هذا النص داخل بيئة \texttt{boxed}.
\end{boxed}

يتم تنضيد هذا النص خارج بيئة \texttt{boxed}.
\end{document}
```

[افتح هذا المثال في Overleaf.](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Creating+a+new+environment\&snip=%5Cdocumentclass%7Barticle%7D%0A%25We+can+define+the+environment+in+the+preamble%0A%5Cnewenvironment%7Bboxed%7D%0A++++%7B%5Cbegin%7Bcenter%7D%0A++++%5Cbegin%7Btabular%7D%7B%7Cp%7B0.9%5Ctextwidth%7D%7C%7D%0A++++%5Chline%5C%5C%0A++++%7D%0A++++%7B+%0A++++%5C%5C%5C%5C%5Chline%0A++++%5Cend%7Btabular%7D+%0A++++%5Cend%7Bcenter%7D%0A++++%7D%0A%25%0A%5Cbegin%7Bdocument%7D%0ANow+we+can+use+the+%5Ctexttt%7Bboxed%7D+environment+in+our+document%3A%0A%0A%5Cbegin%7Bboxed%7D%0AThis+text+is+formatted+within+the+%5Ctexttt%7Bboxed%7D+environment.%0A%5Cend%7Bboxed%7D%0A%0AThis+text+is+typeset+outside+the+%5Ctexttt%7Bboxed%7D+environment.%0A%5Cend%7Bdocument%7D)

ينتج هذا المثال المخرجات التالية:

![عرض بيئة LaTeX مخصصة](/files/5913fe2a5ff6b3f0758662cd6c6ba172f1771b06)

إذا قارنا تعريفنا لـ `boxed` مع الصيغة العامة لـ `\newenvironment` يمكننا أن نرى:

* `الاسم` هو `boxed`;
* لا `[numarg]` أو `[optarg_default]` مُقدَّمان لأن هذه البيئة لا تأخذ أي وسائط؛
* `begin_def` هو كود LaTeX—الموجود بين زوج من الأقواس المعقوفة `{...}`—الذي يُنفَّذ عندما *تبدأ البيئة* (تُفتح):

```latex
\begin{center}
    \begin{tabular}{|p{0.9\textwidth}|}
    \hline\\
```

* `end_def` هو كود LaTeX—الموجود بين زوج من الأقواس المعقوفة `{...}`—الذي يُنفَّذ عندما *تتوقف* (تُغلق):

```latex
    \\\\\hline
    \end{tabular}
    \end{center}
```

في المثال، `begin_def` تبدأ `center` بيئة وداخلها تُفتح بيئة `tabular` لرسم خطوط عمودية وخط أفقي حول النص الذي نضعه في البيئة. `end_def` يرسم خطًا أفقيًا آخر ثم يُغلق `tabular` و `center` البيئات.

### تعريف البيئات التي تأخذ وسائط

لنعزّز المثال السابق للقيام بما يلي:

* استخدام وسيط اختياري لتنضيد عنوان. إذا لم يُقدَّم عنوان، فاستخدم القيمة الافتراضية `هذا صندوق`;
* استخدام وسيط ثانٍ يحتوي على مادة تُنضَّد قبل النص الذي نوفّره داخل البيئة نفسها.

لذا لدينا وسيطان:

* الأول (الوسيط 1) اختياري؛
* الثاني (الوسيط 2) ليس كذلك.

هذا يعني `numarg`=2.

يمكننا استخدام التعريف التالي للنسخة المحدَّثة من `boxed` البيئة:

```latex
\newenvironment{boxed}[2][هذا صندوق]
    {\begin{center}
    Argument 1 (\#1)=#1\\[1ex]
    \begin{tabular}{{{!}}p{0.9\textwidth}{{!}}}
    \hline\\
    Argument 2 (\#2)=#2\\[2ex]
    }
    {
    \\\\\hline
    \end{tabular}
    \end{center}
    }
```

تختلف هذه النسخة المحسَّنة عن الأصل في الطرق التالية:

* \[numarg] موجودة وقيمتها 2؛
* \[optarg\_default] موجودة أيضًا، مما يجعل الوسيط الأول اختياريًا بقيمة افتراضية `هذا صندوق`.

يوضح المثال التالي بعض استخدامات نسختنا المطوَّرة من `boxed` البيئة:

```latex
\documentclass{article}
% لاحظ أن القيمة الافتراضية للوسيط الأول
% مقدَّمة بواسطة [هذا صندوق]
\newenvironment{boxed}[2][هذا صندوق]
    {\begin{center}
    Argument 1 (\#1)=#1\\[1ex]
    \begin{tabular}{|p{0.9\textwidth}|}
    \hline\\
    Argument 2 (\#2)=#2\\[2ex]
    }
    {
    \\\\\hline
    \end{tabular}
    \end{center}
    }
\begin{document}
\textbf{Example 1}: استخدم القيمة الافتراضية للوسيط الأول:

\begin{boxed}{Some preliminary text}
هذا النص \textit{داخل} البيئة.
\end{boxed}

هذا النص \textit{خارج} البيئة.

\vskip12pt

\textbf{Example 2}: قدّم قيمة للوسيط الأول:

\begin{boxed}[هذه ليست القيمة الافتراضية]{Some more preliminary text}
هذا النص لا يزال \textit{داخل} البيئة.
\end{boxed}

هذا النص أيضًا \textit{خارج} البيئة.
\end{document}
```

[افتح هذا المثال في Overleaf.](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Environment+with+an+optional+argument\&snip=%5Cdocumentclass%7Barticle%7D%0A%25+Note+the+default+value+for+the+first%0A%25+argument+is+provided+by+%5BThis+is+a+box%5D%0A%5Cnewenvironment%7Bboxed%7D%5B2%5D%5BThis+is+a+box%5D%0A++++%7B%5Cbegin%7Bcenter%7D%0A++++Argument+1+%28%5C%231%29%3D%231%5C%5C%5B1ex%5D%0A++++%5Cbegin%7Btabular%7D%7B%7Cp%7B0.9%5Ctextwidth%7D%7C%7D%0A++++%5Chline%5C%5C%0A++++Argument+2+%28%5C%232%29%3D%232%5C%5C%5B2ex%5D%0A++++%7D%0A++++%7B+%0A++++%5C%5C%5C%5C%5Chline%0A++++%5Cend%7Btabular%7D+%0A++++%5Cend%7Bcenter%7D%0A++++%7D%0A%5Cbegin%7Bdocument%7D%0A%5Ctextbf%7BExample+1%7D%3A+Use+the+default+value+for+the+first+argument%3A%0A+%0A%5Cbegin%7Bboxed%7D%7BSome+preliminary+text%7D%0AThis+text+is+%5Ctextit%7Binside%7D+the+environment.%0A%5Cend%7Bboxed%7D%0A%0AThis+text+is+%5Ctextit%7Boutside%7D+the+environment.%0A%0A%5Cvskip12pt%0A%0A%5Ctextbf%7BExample+2%7D%3A+Provide+a+value+for+the+first+argument%3A%0A+%0A%5Cbegin%7Bboxed%7D%5BThis+is+not+the+default+value%5D%7BSome+more+preliminary+text%7D%0AThis+text+is+still+%5Ctextit%7Binside%7D+the+environment.%0A%5Cend%7Bboxed%7D%0A%0AThis+text+is+also+%5Ctextit%7Boutside%7D+the+environment.%0A%5Cend%7Bdocument%7D)

ينتج هذا المثال المخرجات التالية:

![بيئة مع وسيط اختياري](/files/2b3269db57200ca76147bdc87e7da6191fa55c99)

### البيئات المرقمة

يمكن إنشاء البيئات المرقمة يدويًا أو مباشرةً باستخدام الأمر `\newtheorem`، كما يوضحه المثال التالي:

```latex
\documentclass{article}
% عرّف بيئتنا المرقمة ضمن المقدمة
\newcounter{example}[section]
\newenvironment{example}[1][]{\refstepcounter{example}\par\medskip
   \noindent \textbf{مثال~\theexample. #1} \rmfamily}{\medskip}

% بيئة مرقمة أخرى معرّفة باستخدام \newtheorem
\usepackage{amsmath} % لاستخدام الأمر \newtheorem
\newtheorem{SampleEnv}{بيئة نموذجية}[section]
\begin{document}

\section{البيئات المرقمة المعرّفة من قبل المستخدم}

\begin{example}
أول بيئة مرقمة معرّفة من قبل المستخدم (الرقم \theexample).
\end{example}

\begin{example}
ثاني بيئة مرقمة معرّفة من قبل المستخدم (الرقم \theexample).
\end{example}

\section{المزيد من البيئات المرقمة المعرّفة من قبل المستخدم}
لاحظ كيف أعيد ترقيم المثال بدءًا من 1:

\begin{example}
أول بيئة مرقمة معرّفة من قبل المستخدم (الرقم \theexample).
\end{example}

\begin{SampleEnv}
بيئة معرّفة من قبل المستخدم أُنشئت باستخدام الأمر \verb|\newtheorem|.
\end{SampleEnv}
\end{document}
```

[افتح هذا المثال في Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Creating+a+numbered+environment\&snip=%5Cdocumentclass%7Barticle%7D%0A%25+Define+our+numbered+environment+within+the+preamble%0A%5Cnewcounter%7Bexample%7D%5Bsection%5D%0A%5Cnewenvironment%7Bexample%7D%5B1%5D%5B%5D%7B%5Crefstepcounter%7Bexample%7D%5Cpar%5Cmedskip%0A+++%5Cnoindent+%5Ctextbf%7BExample%7E%5Ctheexample.+%231%7D+%5Crmfamily%7D%7B%5Cmedskip%7D%0A%0A%25+Another+numbered+environment+defined+with+%5Cnewtheorem%0A%5Cusepackage%7Bamsmath%7D+%25+For+the+%5Cnewtheorem+command%0A%5Cnewtheorem%7BSampleEnv%7D%7BSample+Environment%7D%5Bsection%5D%0A%5Cbegin%7Bdocument%7D%0A%0A%5Csection%7BUser-defined+numbered+environments%7D%0A%0A%5Cbegin%7Bexample%7D%0AFirst+user-defined+numbered+environment+%28number+%5Ctheexample%29.%0A%5Cend%7Bexample%7D%0A%0A%5Cbegin%7Bexample%7D%0ASecond+user-defined+numbered+environment+%28number+%5Ctheexample%29.%0A%5Cend%7Bexample%7D%0A%0A%5Csection%7BMore+user-defined+numbered+environments%7D%0ANote+how+the+example+numbering+has+restarted+at+1%3A%0A%0A%5Cbegin%7Bexample%7D%0AFirst+user-defined+numbered+environment+%28number+%5Ctheexample%29.%0A%5Cend%7Bexample%7D%0A%0A%5Cbegin%7BSampleEnv%7D%0AUser-defined+environment+created+with+the+%5Cverb%7C%5Cnewtheorem%7C+command.%0A%5Cend%7BSampleEnv%7D%0A%5Cend%7Bdocument%7D)

ينتج هذا المثال المخرجات التالية:

![مثال يوضح البيئات المرقمة المعرّفة من قبل المستخدم](/files/c0c3f98a10d86fa87a56e5a9f753e1d78cc519be)

#### بعض الملاحظات

* في البيئة `المعرَّفة يدويًا` المثال `\newcounter{example}[section]` ينشئ الأمر `المعرَّفة يدويًا`. الحزمة `المعرَّفة يدويًا` عدادًا، ويُسمّى أيضًا
  * يُزاد بمقدار 1 باستخدام `\refstepcounter{example}` داخل تعريف البيئة؛
  * يُعاد ضبطه كلما بدأت `\section{...}` جديدًا؛
  * متغيرًا يمكن تنضيده باستخدام قيمته الحالية عبر `\theexample`. انظر [المقال عن العدادات](/latex/ar/altnsyq/10-counters.md) للمزيد من التعلم.
* الأمر `\newtheorem` ينشئ مباشرةً بيئة مرقمة ويأخذ ثلاثة معاملات:
  * اسم البيئة الجديدة: `SampleEnv` في مثالنا؛
  * النص الذي سيُطبع بخط عريض في بداية السطر: `بيئة نموذجية` في مثالنا؛
  * وسيط اختياري يحدد متى يُعاد ضبط العداد؛ وإذا استُخدم، تُسبق قيمة هذا العداد بقيمة عداد إعادة الضبط: `section` في مثالنا.

ال [`amsthm` الحزمة](https://ctan.org/pkg/amsthm?lang=en)، إلى جانب `amsmath`، توفر تعريفات إضافية مفيدة إلى جانب `\newtheorem`؛ انظر [النظريات والبراهين](/latex/ar/khas-balmjal/01-theorems-and-proofs.md) للمزيد من التفاصيل.

## إعادة تعريف البيئات الموجودة

يمكن إعادة تعريف البيئات باستخدام `\renewenvironment` الذي يطابق تركيبه النحوي `\newenvironment`—انظر القسم [تعريف بيئة جديدة](#defining-a-new-environment) لشرح المعاملات المختلفة:

```
\newenvironment{name}[numarg][optarg_default]{begin_def}{end_def}
```

المثال التالي يعيد تعريف بيئة `itemize` —وهذا مجرد مثال لتوضيح العملية، ولا ينبغي اعتباره داخل مستند حقيقي. البيئة الجديدة `itemize` لم تعد تُنتِج قائمة نقطية؛ بل تُوسِّط النص داخلها وتؤكده (تُميِّله) (باستخدام الأمر `\em` الأمر).

```latex
\documentclass{article}
% أعد تعريف البيئة في المقدمة
\renewenvironment{itemize}
{\begin{center}\em}
{\end{center}}
\begin{document}

\begin{itemize}
لقد أعدنا تعريف بيئة \texttt{itemize} بحيث إن أي نص
داخلها يكون مُوسَّطًا ومؤكدًا (مائلًا). وهي لم تعد تنشئ
قائمة نقطية---وهذا مجرد مثال وليس مقصودًا للاستخدام
في المستندات الحقيقية!
\end{itemize}
\end{document}
```

[افتح هذا المثال في Overleaf.](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Redefining+an+existing+environment\&snip=%5Cdocumentclass%7Barticle%7D%0A%25+Redefine+the+environment+in+the+preamble%0A%5Crenewenvironment%7Bitemize%7D%0A%7B%5Cbegin%7Bcenter%7D%5Cem%7D%0A%7B%5Cend%7Bcenter%7D%7D%0A%5Cbegin%7Bdocument%7D%0A%0A%5Cbegin%7Bitemize%7D%0AWe+have+redefined+the+%5Ctexttt%7Bitemize%7D+environment+so+that+any+text+%0Awithin+it+is+centred+and+emphasised+%28italicized%29.+It+no+longer+creates%0Aa+bulleted+list---this+is+only+an+example+and+not+intended+for+use+%0Ain+real+documents%21%0A%5Cend%7Bitemize%7D%0A%5Cend%7Bdocument%7D)

ينتج هذا المثال المخرجات التالية:

![مثال مع بيئة itemize معرّفة من جديد](/files/fc5c43674cac40de1209abe75d420440b3a0173b)

## قراءة إضافية

لمزيد من المعلومات، انظر:

* [الأوامر](/latex/ar/alawamr/01-commands.md)
* [فهم الحزم وملفات الأصناف](/latex/ar/mlfat-alfeh/01-understanding-packages-and-class-files.md)
* [كتابة حزمة خاصة بك](/latex/ar/mlfat-alfeh/03-writing-your-own-package.md)
* [كتابة صنف خاص بك](/latex/ar/mlfat-alfeh/04-writing-your-own-class.md)
* [الأطوال في LaTeX](/latex/ar/altnsyq/01-lengths-in-latex.md)
* [استخدام الألوان في LaTeX](/latex/ar/altnsyq/13-using-colors-in-latex.md)
* [حجم الصفحة والهوامش](/latex/ar/altnsyq/07-page-size-and-margins.md)
* [قائمة الحزم وملفات الأصناف](/latex/ar/mlfat-alfeh/02-overleaf-and-tex-live.md)
* [المقدمة التي ليست قصيرة جدًا إلى LaTeX2ε](http://www.ctan.org/tex-archive/info/lshort/)
* [LaTeX/Creating\_Packages على WikiBooks](http://en.wikibooks.org/wiki/LaTeX/Creating_Packages)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/ar/alawamr/02-environments.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
