> 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/uk/komandi/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/52b8bcde98af4d656de23ea167a4051ebaa89726)

## Середовища

У наступному прикладі використовується `tabular` середовище для верстки невеликої таблиці. `tabular` приймає додатковий аргумент `{ c c c }` який визначає вирівнювання комірок — див. [Таблиці](/latex/uk/risunki-ta-tablici/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/d2bc5316715e9f2abeb297f9bca7398b183b8727)

Деякі середовища приймають необов’язкові аргументи, які зазвичай передаються в дужках (`[...]`).

## Визначення нового середовища

Щоб визначити нове середовище, використайте `\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/0645687ed0567941b13fcf1c9066a03c14e0de1d)

Якщо порівняти наше визначення `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` середовища.

### Визначення середовищ, що приймають аргументи

Давайте вдосконалимо попередній приклад, щоб зробити таке:

* використати необов’язковий аргумент для набору заголовка. Якщо заголовок не вказано, використати значення за замовчуванням `Це рамка`;
* використати другий аргумент, який містить матеріал для набору перед текстом, який ми подаємо всередині самого середовища.

Отже, маємо 2 аргументи:

* перший (аргумент 1) є необов’язковим;
* другий (аргумент 2) — ні.

Це означає `numarg`=2.

Ми можемо використати таке визначення оновленого `boxed` середовище:

```latex
\newenvironment{boxed}[2][This is a box]
    {\begin{center}
    Аргумент 1 (\#1)=#1\\[1ex]
    \begin{tabular}{{{!}}p{0.9\textwidth}{{!}}}
    \hline\\
    Аргумент 2 (\#2)=#2\\[2ex]
    }
    {
    \\\\\hline
    \end{tabular}
    \end{center}
    }
```

Ця вдосконалена версія відрізняється від початкової таким чином:

* \[numarg] присутній і має значення 2;
* \[optarg\_default] також присутній, що робить перший аргумент необов’язковим із значенням за замовчуванням `Це рамка`.

Наступний приклад демонструє деякі способи використання нашого оновленого `boxed` середовище:

```latex
\documentclass{article}
Зверніть увагу на значення за замовчуванням для першого
аргументу, яке задається як [This is a box]
\newenvironment{boxed}[2][This is a box]
    {\begin{center}
    Аргумент 1 (\#1)=#1\\[1ex]
    \begin{tabular}{|p{0.9\textwidth}|}
    \hline\\
    Аргумент 2 (\#2)=#2\\[2ex]
    }
    {
    \\\\\hline
    \end{tabular}
    \end{center}
    }
\begin{document}
\textbf{Приклад 1}: Використайте значення за замовчуванням для першого аргументу:

\begin{boxed}{Some preliminary text}
Цей текст \textit{всередині} середовища.
\end{boxed}

Цей текст \textit{поза} середовищем.

\vskip12pt

\textbf{Приклад 2}: Надайте значення для першого аргументу:

\begin{boxed}[This is not the default value]{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/0d9489b8c9e1fa8310450858cde18f9ddfe07d22)

### Нумеровані середовища

Нумеровані середовища можна створити вручну або безпосередньо за допомогою команди `\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}{Sample Environment}[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/ca2b6e9e235405473836e6b7172ca913a2a6b37c)

#### Деякі зауваги

* У вручну визначеному `прикладі` середовищі команда `\newcounter{example}[section]` створює лічильник, також званий `прикладі`. `прикладі` Лічильник:
  * збільшується на 1 за допомогою `\refstepcounter{example}` всередині визначення середовища;
  * скидається щоразу, коли починається нова `\section{...}` секція;
  * змінна, поточне значення якої можна надрукувати за допомогою `\theexample`. Див. [статтю про лічильники](/latex/uk/formatuvannya/10-counters.md) щоб дізнатися більше.
* Команда `\newtheorem` безпосередньо створює нумероване середовище й приймає три параметри:
  * назва нового середовища: `SampleEnv` у нашому прикладі;
  * текст, який потрібно надрукувати жирним на початку рядка: `Sample Environment` у нашому прикладі;
  * необов’язковий параметр, який визначає, коли лічильник скидається; а якщо його використано, перед лічильником ставиться значення того лічильника, за яким виконується скидання: `section` у нашому прикладі.

Функція [`amsthm` accents](https://ctan.org/pkg/amsthm?lang=en), разом із `amsmath`, надають корисні додаткові визначення поруч із `\newtheorem`; див. [Теореми та докази](/latex/uk/specializovani/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/e9defb0f90e5729600bd5599d1f892ddc3927e36)

## Додаткове читання

Докладніше див.:

* [Команди](/latex/uk/komandi/01-commands.md)
* [Розуміння пакетів і файлів класів](/latex/uk/faili-klasiv/01-understanding-packages-and-class-files.md)
* [Створення власного пакета](/latex/uk/faili-klasiv/03-writing-your-own-package.md)
* [Створення власного класу](/latex/uk/faili-klasiv/04-writing-your-own-class.md)
* [Довжини в LaTeX](/latex/uk/formatuvannya/01-lengths-in-latex.md)
* [Використання кольорів у LaTeX](/latex/uk/formatuvannya/13-using-colors-in-latex.md)
* [Розмір сторінки та поля](/latex/uk/formatuvannya/07-page-size-and-margins.md)
* [Список пакетів і файлів класів](/latex/uk/faili-klasiv/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/uk/komandi/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.
