> 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/ru/komandy/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/706108691bd807f415bfe53df9126bad9b7cd6ae)

## Окружения

В следующем примере используется `tabular` окружение для набора небольшой таблицы. `tabular` принимает дополнительный аргумент `{ c c c }` который определяет выравнивание ячеек — см. [Таблицы](/latex/ru/risunki-i-tablicy/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/1fa830d8d75bf3a752973897ee6f57563e769cf8)

Некоторые окружения принимают необязательные аргументы, которые обычно передаются в квадратных скобках (`[...]`).

## Определение нового окружения

Чтобы определить новое окружение, используйте `\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/7bff3a3266650e44749e7774929bac299fbb7db4)

Если мы сравним наше определение `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/db2622c59f16453219b9b121c5b64768c7369bf3)

### Нумерованные окружения

Нумерованные окружения можно создать либо вручную, либо напрямую с помощью команды `\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/d0942c3cd953105390b80bf211ef1aff3572a995)

#### Несколько замечаний

* В определённом вручную `окружении` команда `\newcounter{example}[section]` создаёт счётчик, также называемый `окружении`. `окружении` счётчик:
  * увеличивается на 1 с помощью `\refstepcounter{example}` внутри определения окружения;
  * сбрасывается каждый раз, когда начинается новый `\section{...}` ;
  * переменная, текущее значение которой можно набрать с помощью `\theexample`. См. [статью о счётчиках](/latex/ru/formatirovanie/10-counters.md) чтобы узнать больше.
* Команда `\newtheorem` напрямую создаёт нумерованное окружение и принимает три параметра:
  * имя нового окружения: `SampleEnv` в нашем примере;
  * текст, который будет напечатан жирным в начале строки: `Пример окружения` в нашем примере;
  * необязательный параметр, который определяет, когда счётчик сбрасывается; и если он используется, перед значением счётчика ставится значение этого счётчика сброса: `section` в нашем примере.

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

## Дальнейшее чтение

Дополнительную информацию см. на:

* [Команды](/latex/ru/komandy/01-commands.md)
* [Понимание пакетов и файлов классов](/latex/ru/faily-klassov/01-understanding-packages-and-class-files.md)
* [Написание собственного пакета](/latex/ru/faily-klassov/03-writing-your-own-package.md)
* [Написание собственного класса](/latex/ru/faily-klassov/04-writing-your-own-class.md)
* [Длины в LaTeX](/latex/ru/formatirovanie/01-lengths-in-latex.md)
* [Использование цветов в LaTeX](/latex/ru/formatirovanie/13-using-colors-in-latex.md)
* [Размер страницы и поля](/latex/ru/formatirovanie/07-page-size-and-margins.md)
* [Список пакетов и файлов классов](/latex/ru/faily-klassov/02-overleaf-and-tex-live.md)
* [Не совсем краткое введение в LaTeX2ε](http://www.ctan.org/tex-archive/info/lshort/)
* [LaTeX/Создание\_пакетов на 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/ru/komandy/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.
