> 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/formatirovanie/10-counters.md).

# Счётчики

## Введение в счётчики LaTeX

Создание макетов на основе LaTeX — это специализированная форма программирования: вы используете язык верстки (команды LaTeX), чтобы задавать «инструкции», которые приводят к результату: скомпилированному документу LaTeX в виде PDF-файла. Как и в любом программировании, вам, скорее всего, понадобится LaTeX для временного хранения целочисленных значений для последующего повторного использования в вашем документе (коде) — вам может понадобиться:

* верстать эти сохранённые целые числа в вашем документе
* обеспечивать автоматическую нумерацию определённых элементов вашего документа
* использовать их как переменные для управления условным кодом (или циклами)
* изменять и обновлять их значения, увеличивая/уменьшая на фиксированное значение
* сбрасывать их к совершенно другим значениям

Такие операции с целыми числами чрезвычайно распространены в «обычных» языках программирования, таких как Javascript, C, Lua или любой другой язык на ваш выбор, где вы обычно объявляете (создаёте имя для) переменную (для хранения целого числа), а затем присваиваете ей значение. Язык верстки LaTeX предоставляет похожие возможности, хотя и реализованные совсем иначе, как мы увидим ниже.

По сути, счётчик LaTeX — это имя «переменной LaTeX», используемой для хранения целых значений, которые могут применяться для перечисленных выше действий и многого другого. Сам LaTeX использует множество внутренних счётчиков, которые обеспечивают нумерацию страниц, разделов, таблиц, рисунков, маркированных/нумерованных списков и т. д. В этой статье объясняется, как получить доступ к этим счётчикам и изменять их, а также как создавать и использовать новые.

## Команды LaTeX для работы со счётчиками

Вот список команд счётчиков LaTeX со ссылками на их описание в следующих разделах.

Создание и увеличение счётчиков:

* [`\newcounter{somecounter}[anothercounter]`](#newcountersomecounteranothercounter)
* [`\setcounter{somecounter}{number}`](#setcountersomecounternumber)
* [`\addtocounter{somecounter}{number}`](#addtocountersomecounternumber)
* [`\stepcounter{somecounter}`](#stepcountersomecounter)
* [`\refstepcounter{somecounter}`](#refstepcountersomecounter)

Получение и вывод значений счётчика:

* [`\arabic{somecounter}`](#arabicsomecounter)
* [`\roman{somecounter}`](#romansomecounter)
* [`\Roman{somecounter}`](#romanoutput)
* [`\alph{somecounter}`](#alphsomecounter)
* [`\Alph{somecounter}`](#alphoutput)
* [`\fnsymbol{somecounter}`](#fnsymbolsomecounter)
* [`\value{somecounter}`](#valuesomecounter)

Другие команды счётчика:

* [`\counterwithin{somecounter}{anothercounter}`](#counterwithinsomecounteranothercounter)
* [`\counterwithout{somecounter}{anothercounter}`](#counterwithoutsomecounteranothercounter)

### Создание и увеличение счётчиков

#### \newcounter{somecounter}\[anothercounter]

Используется для определения нового счётчика. Второй аргумент, заключённый в `[]`, является необязательным, но если он используется, то определяет `*somecounter*` как новый счётчик, который сбрасывается, когда `*anothercounter*` увеличивается. `\newcounter` часто используется в более простой форме `\newcounter{*somecounter*}` что создаёт `*somecounter*` и инициализирует его значением 0.

* **Примечание**: Для каждого счётчика, созданного командой `\newcounter` команда *также* определяет команду, которую можно использовать для набора значения счётчика. Например, `\newcounter{*mycounter*}` определяет команду под названием `\the*mycounter*`. Пример показан в следующем фрагменте кода LaTeX, который вы можете открыть в Overleaf как полностью готовый документ по ссылке ниже:

```latex
\newcounter{mycounter}
\setcounter{mycounter}{42}
Теперь вы можете написать \verb|\themycounter|, чтобы получить \themycounter.
```

[Откройте этот фрагмент LaTeX в Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Using+newcounter\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cnewcounter%7Bmycounter%7D%0A%5Csetcounter%7Bmycounter%7D%7B42%7D%0AYou+can+now+write+%5Cverb%7C%5Cthemycounter%7C+to+obtain+%5Cthemycounter.%0A%5Cend%7Bdocument%7D)

Этот пример даёт $$\text{You can now write }\verb|\themycounter|\text{ to obtain 42.}$$

* **Примечание**: Если `*mycounter*` уже был определён, LaTeX выдаст ошибку `c@mycounter already defined`, как показано в следующем примере, который вы можете открыть в Overleaf.

```latex
\newcounter{mycounter}
...много кода... но мы забываем и снова пишем \verb|\newcounter{mycounter}|
\newcounter{mycounter}
```

[Откройте этот ***код, вызывающий ошибку*** в Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Using+newcounter\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cnewcounter%7Bmycounter%7D%0A...lots+of+code...+but+we+forget+and+write+%5Cverb%7C%5Cnewcounter%7Bmycounter%7D%7C+again%0A%5Cnewcounter%7Bmycounter%7D%0A%5Cend%7Bdocument%7D)

#### \setcounter{somecounter}{number}

Устанавливает `*somecounter*` так, чтобы он содержал значение `*number*`.

* **Примечание**: `*number*` может быть положительным или отрицательным.

Пример показан в следующем фрагменте кода LaTeX, который вы можете открыть в Overleaf как полностью готовый документ по предоставленной ссылке:

```latex
\noindent Создайте новый счётчик \texttt{myvar} и присвойте ему значение \texttt{42}.
\vspace{10pt}

\newcounter{myvar}
\setcounter{myvar}{42}

\noindent При записи \verb|\themymar| выводится \texttt{\themyvar}.
\vspace{10pt}

\noindent Затем мы изменим \texttt{myvar} на \texttt{-42}, записав \verb|\setcounter{myvar}{-42}|
\setcounter{myvar}{-42}. Теперь запись \verb|\themyvar| выводит \texttt{\themyvar}.
```

[Откройте этот фрагмент LaTeX в Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Using+newcounter\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cnoindent+Create+a+new+counter+%5Ctexttt%7Bmyvar%7D+and+assign+it+the+value+%5Ctexttt%7B42%7D.%0A%5Cvspace%7B10pt%7D%0A%0A%5Cnewcounter%7Bmyvar%7D%0A%5Csetcounter%7Bmyvar%7D%7B42%7D+%0A%0A%5Cnoindent+Writing+%5Cverb%7C%5Cthemymar%7C+typesets+%5Ctexttt%7B%5Cthemyvar%7D.%0A%5Cvspace%7B10pt%7D%0A%0A%5Cnoindent+Next%2C+we%27ll+change+%5Ctexttt%7Bmyvar%7D+to+%5Ctexttt%7B-42%7D%2C+writing+%5Cverb%7C%5Csetcounter%7Bmyvar%7D%7B-42%7D%7C%0A%5Csetcounter%7Bmyvar%7D%7B-42%7D.+Now%2C+writing+%5Cverb%7C%5Cthemyvar%7C+outputs+%5Ctexttt%7B%5Cthemyvar%7D.%0A%5Cend%7Bdocument%7D)

#### \addtocounter{somecounter}{number}

Увеличивает счётчик `*somecounter*` на величину `*number*`.

* **Примечание**: `*number*` может быть положительной — чтобы увеличить значение счётчика, или отрицательной — чтобы уменьшить его. Например:

```latex
\addtocounter{somecounter}{-1} % уменьшает somecounter на 1
```

Пример показан в следующем фрагменте кода LaTeX, который вы можете открыть в Overleaf как полностью готовый документ по предоставленной ссылке:

```latex
\noindent Создайте новый счётчик \texttt{myvar} и присвойте ему значение \texttt{42}.
\vspace{10pt}

\newcounter{myvar}
\setcounter{myvar}{42}

\noindent При записи \verb|\themymar| выводится \texttt{\themyvar}.
\vspace{10pt}

\noindent Затем мы изменим \texttt{myvar} на \texttt{142}, записав \verb|\addtocounter{myvar}{100}|\addtocounter{myvar}{100}. Теперь запись \verb|\themyvar| выводит \texttt{\themyvar}.
```

[Откройте этот фрагмент LaTeX в Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Using+addtocounter\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cnoindent+Create+a+new+counter+%5Ctexttt%7Bmyvar%7D+and+assign+it+the+value+%5Ctexttt%7B42%7D.%0A%5Cvspace%7B10pt%7D%0A%0A%5Cnewcounter%7Bmyvar%7D%0A%5Csetcounter%7Bmyvar%7D%7B42%7D+%0A%0A%5Cnoindent+Writing+%5Cverb%7C%5Cthemymar%7C+typesets+%5Ctexttt%7B%5Cthemyvar%7D.%0A%5Cvspace%7B10pt%7D%0A%0A%5Cnoindent+Next%2C+we%E2%80%99ll+change+%5Ctexttt%7Bmyvar%7D+to+%5Ctexttt%7B142%7D+by+writing+%5Cverb%7C%5Caddtocounter%7Bmyvar%7D%7B100%7D%7C%5Caddtocounter%7Bmyvar%7D%7B100%7D.+Now%2C+writing+%5Cverb%7C%5Cthemyvar%7C+outputs+%5Ctexttt%7B%5Cthemyvar%7D.%0A%5Cend%7Bdocument%7D)

#### \stepcounter{somecounter}

Увеличивает `*somecounter*` на 1. Пример показан в следующем фрагменте кода LaTeX, который вы можете открыть в Overleaf как полностью готовый документ по предоставленной ссылке:

```latex
Если мы создадим новый счётчик, записав \verb|\newcounter{mycounter}|
\newcounter{mycounter}, то счётчик \texttt{mycounter} создаётся и
инициализируется нулём, как вы можете увидеть, если запишете \verb|\themycounter|:
\texttt{mycounter} в настоящее время хранит: \themycounter.

Если теперь мы запишем \verb|\stepcounter{mycounter}|\stepcounter{mycounter}, то
\verb|\themycounter| теперь содержит значение \themycounter.
```

[Откройте этот фрагмент LaTeX в Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Using+stepcounter\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0AIf+we+create+a+new+counter+by+writing+%5Cverb%7C%5Cnewcounter%7Bmycounter%7D%7C%0A%5Cnewcounter%7Bmycounter%7D+then+the+counter+%5Ctexttt%7Bmycounter%7D+is+created+and+%0Ainitialized+to+zero%2C+as+you+can+see+if+you+write+%5Cverb%7C%5Cthemycounter%7C%3A%0A%5Ctexttt%7Bmycounter%7D+currently+stores%3A+%5Cthemycounter.+%0A%0AIf+we+now+write+%5Cverb%7C%5Cstepcounter%7Bmycounter%7D%7C%5Cstepcounter%7Bmycounter%7D+then+%0A%5Cverb%7C%5Cthemycounter%7C+now+contains+the+value+%5Cthemycounter.%0A%5Cend%7Bdocument%7D)

#### \refstepcounter{somecounter}

Увеличивает `*somecounter*` на 1 и делает его доступным для механизма ссылок, также устанавливая значение так, чтобы вы могли использовать `\label` после этого.

**Пример использования \refstepcounter**

Следующий пример использует `\refstepcounter` для создания нового счётчика для `example` окружения и использует `\label` и `\ref` для иллюстрации ссылок с использованием `example` переменной счётчика.

```latex
\documentclass{article}

\newcounter{example}[section]
\newenvironment{example}[1][]{\refstepcounter{example}\par\medskip
   \noindent\textbf{Пример~\theexample. #1} \rmfamily}{\medskip}

\begin{document}
\section{Три примера}
\begin{example}
Создайте метку в этом первом примере \verb|\label{ex:1}|\label{ex:1}. Это первый пример. Счётчик \texttt{example} будет сбрасываться в начале каждого нового раздела документа \verb|\section|.
\end{example}

\begin{example}
А вот ещё один пронумерованный пример. Создайте вторую метку \verb|\label{ex:2}|\label{ex:2}, чтобы позже сослаться на неё. В примере \ref{ex:1} мы читаем... что-то.
\end{example}

\begin{example}
А вот ещё один пронумерованный пример: используйте \verb|\theexample|, чтобы набрать номер, который сейчас присвоен счётчику \texttt{example}: это \theexample.
\end{example}

\section{Ещё один раздел}
Мы только что начали новый раздел, что означает, что счётчик \texttt{example} был установлен в \theexample.
Мы будем ссылаться на примеры из предыдущего раздела (примеры \ref{ex:1} и \ref{ex:2}). Это просто заполнитель без какого-либо смысла, кроме как содержать текст. Счётчик \texttt{section} для этого раздела можно набрать с помощью \verb|\thesection|: ему в настоящее время присвоено значение \thesection.

\begin{example}
Это первый пример в этом разделе: счётчик \texttt{example} был увеличен и теперь установлен в \theexample.
\end{example}
\end{document}
```

[Откройте этот `\refstepcounter` пример в Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=An+example+using+refstepcounter\&snip=%5Cdocumentclass%7Barticle%7D%0A%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%5Cbegin%7Bdocument%7D%0A%5Csection%7BThree+examples%7D%0A%5Cbegin%7Bexample%7D%0ACreate+a+label+in+this+first+example+%5Cverb%7C%5Clabel%7Bex%3A1%7D%7C%5Clabel%7Bex%3A1%7D.+This+is+the+first+example.+The+%5Ctexttt%7Bexample%7D+counter+will+be+reset+at+the+start+of+each+new+each+document+%5Cverb%7C%5Csection%7C.%0A%5Cend%7Bexample%7D%0A%0A%5Cbegin%7Bexample%7D%0AAnd+here%27s+another+numbered+example.+Create+a+second+%5Cverb%7C%5Clabel%7Bex%3A2%7D%7C%5Clabel%7Bex%3A2%7D+to+later+reference+this+one.+In+Example+%5Cref%7Bex%3A1%7D+we+read...+something.+%0A%5Cend%7Bexample%7D%0A%0A%5Cbegin%7Bexample%7D%0AAnd+here%27s+another+numbered+example%3A+use+%5Cverb%7C%5Ctheexample%7C+to+typeset+the+number+currently+assigned+to+the+%5Ctexttt%7Bexample%7D+counter%3A+it+is++%5Ctheexample.%0A%5Cend%7Bexample%7D%0A%0A%5Csection%7BAnother+section%7D%0AWe%27ve+just+started+a+new+section+meaning+that+the++%5Ctexttt%7Bexample%7D+counter+has+been+set+to+%5Ctheexample.++%0AWe%27ll+reference+examples+from+the+previous+section+%28Examples+%5Cref%7Bex%3A1%7D+and+%5Cref%7Bex%3A2%7D%29.++This+is+a+dummy+section+with+no+purpose+whatsoever+but+to+contain+text.+The+%5Ctexttt%7Bsection%7D+counter+for+this+section+can+be+typeset+using+%5Cverb%7C%5Cthesection%7C%3A+it+is++currently+assigned+the+value+of+%5Cthesection.%0A%0A%5Cbegin%7Bexample%7D%0AThis+is+the+first+example+in+this+section%3A+the+%5Ctexttt%7Bexample%7D+counter+has+been+stepped+and+now+set+to+%5Ctheexample.+%0A%5Cend%7Bexample%7D%0A%5Cend%7Bdocument%7D)

**Краткое содержание кода**

В этом примере новое окружение `example` определяется, это окружение имеет 3 команды, относящиеся к счётчикам:

* `\newcounter{example}[section]`: Создаёт новый счётчик под названием `example` который будет сбрасываться до 0 каждый раз, когда счётчик `section` увеличивается. Вы можете подставить любой другой счётчик вместо `section` или опустить параметр, если вы не хотите, чтобы ваш счётчик автоматически сбрасывался.
* `\refstepcounter{example}`: Увеличивает `example` счётчик на 1 и делает его доступным для механизма ссылок, так что вы можете использовать `\label` после этого.
* `\theexample`: Выводит текущее значение счётчика `example`.

Дополнительную информацию о пользовательских окружениях см. [в статье о создании новых окружений](/latex/ru/komandy/02-environments.md#defining-a-new-environment)

### Получение и вывод значений счётчика

Следующие обсуждения основаны на настройках LaTeX по умолчанию до любых изменений, применённых пакетами, загруженными пользователем.

#### \arabic{somecounter}

Вывести представление `*somecounter*` в виде арабских цифр: 1, 2, 3...

#### \roman{somecounter}

Вывести представление `*somecounter*` в виде строчной римской цифры: i, ii, iii...

* **Примечание**: Если `*somecounter*` $$\leq$$ `0` вывод не производится. Кроме того, преобразование *чрезвычайно* больших целых чисел в строчные римские цифры может занять много времени — и приводит к длинной последовательности `m` символов (обозначающих число `1000`).
* **СОВЕТ**: Если вас интересует алгоритм, который TeX использует для преобразования арабских чисел в римские, вы можете прочитать об этом в этой статье о [Алгоритмах для римских чисел](https://www.hanshq.net/roman-numerals.html#tex).

#### \Roman{somecounter}

Вывести представление `*somecounter*` в виде прописной римской цифры: I, II, III...

* **Примечание**: Если `*somecounter*` $$\leq$$ `0` вывод не производится. Кроме того, преобразование *чрезвычайно* преобразование больших целых чисел в прописные римские цифры может занять много времени — и приводит к длинной последовательности `M` символов (обозначающих число `1000`).
* **СОВЕТ**: Если вас интересует алгоритм, который TeX использует для преобразования арабских чисел в римские, вы можете прочитать об этом в этой статье о [Алгоритмах для римских чисел](https://www.hanshq.net/roman-numerals.html#tex).

#### \alph{somecounter}

Вывести представление `*somecounter*` в виде строчной буквы, где a=1, b=2, c=3...

* **Примечание**: `*somecounter*` должно быть в диапазоне `1` $$\leq$$ `*somecounter*` $$\leq$$ `26`, в противном случае будет вызвана ошибка `! LaTeX Error: Counter too large.`

#### \Alph{somecounter}

Вывести представление `*somecounter*` в виде прописной буквы, где A=1, B=2, C=3...

* **Примечание**: `*somecounter*` должно быть в диапазоне `1` $$\leq$$ `*somecounter*` $$\leq$$ `26`, в противном случае будет вызвана ошибка `! LaTeX Error: Counter too large.`

#### \fnsymbol{somecounter}

Вывести представление `*somecounter*` в виде символа сноски, где 1 =∗, 2 =†...

* **Примечание**: `*somecounter*` должно быть в диапазоне `1` $$\leq$$ `*somecounter*` $$\leq$$ `9`, в противном случае будет вызвана ошибка `! LaTeX Error: Counter too large.`

|                          |                                          |
| ------------------------ | ---------------------------------------- |
| Значение `*somecounter*` | Символ, набираемый с помощью `\fnsymbol` |
| 1                        | \*                                       |
| 2                        | †                                        |
| 3                        | ‡                                        |
| 4                        | §                                        |
| 5                        | ¶                                        |
| 6                        | ∥                                        |
| 7                        | ∗∗                                       |
| 8                        | ††                                       |
| 9                        | ‡‡                                       |

#### Пример вывода значений счётчика

Следующий пример демонстрирует использование команд `\arabic{*somecounter*}`, `\roman{*somecounter*}`, `\Roman{*somecounter*}`, `\alph{*somecounter*}`, `\Alph{*somecounter*}`, и `\fnsymbol{*somecounter*}`.

```latex
\newcounter{somecounter}
\setcounter{somecounter}{9}
\begin{itemize}
    \item \verb|\arabic{somecounter}| набирает значение \texttt{somecounter} \thesomecounter{} как \arabic{somecounter}
    \item \verb|\roman{somecounter}| набирает значение \texttt{somecounter} \thesomecounter{} как \roman{somecounter}
    \item \verb|\Roman{somecounter}| набирает значение \texttt{somecounter} \thesomecounter{} как \Roman{somecounter}
    \item \verb|\alph{somecounter}| набирает значение \texttt{somecounter} \thesomecounter{} как \alph{somecounter}
   \item \verb|\Alph{somecounter}| набирает значение \texttt{somecounter} \thesomecounter{} как \Alph{somecounter}
    \item \verb|\fnsymbol{somecounter}| набирает значение \texttt{somecounter} \thesomecounter{} как \fnsymbol{somecounter}
\end{itemize}
```

[Откройте этот фрагмент LaTeX в Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Converting+counter+values\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cnewcounter%7Bsomecounter%7D%0A%5Csetcounter%7Bsomecounter%7D%7B9%7D%0A%5Cbegin%7Bitemize%7D%0A++++%5Citem+%5Cverb%7C%5Carabic%7Bsomecounter%7D%7C+typesets+the+%5Ctexttt%7Bsomecounter%7D+value+of++%5Cthesomecounter%7B%7D+as+%5Carabic%7Bsomecounter%7D+%0A++++%5Citem+%5Cverb%7C%5Croman%7Bsomecounter%7D%7C+typesets+the+%5Ctexttt%7Bsomecounter%7D+value+of++%5Cthesomecounter%7B%7D+as++%5Croman%7Bsomecounter%7D%0A++++%5Citem+%5Cverb%7C%5CRoman%7Bsomecounter%7D%7C+typesets+the+%5Ctexttt%7Bsomecounter%7D+value+of++%5Cthesomecounter%7B%7D+as++%5CRoman%7Bsomecounter%7D%0A++++%5Citem+%5Cverb%7C%5Calph%7Bsomecounter%7D%7C+typesets+the+%5Ctexttt%7Bsomecounter%7D+value+of++%5Cthesomecounter%7B%7D+as++%5Calph%7Bsomecounter%7D%0A+++%5Citem+%5Cverb%7C%5CAlph%7Bsomecounter%7D%7C+typesets+the+%5Ctexttt%7Bsomecounter%7D+value+of++%5Cthesomecounter%7B%7D+as++%5CAlph%7Bsomecounter%7D%0A++++%5Citem+%5Cverb%7C%5Cfnsymbol%7Bsomecounter%7D%7C+typesets+the+%5Ctexttt%7Bsomecounter%7D+value+of++%5Cthesomecounter%7B%7D+as++%5Cfnsymbol%7Bsomecounter%7D%0A%5Cend%7Bitemize%7D%0A%5Cend%7Bdocument%7D)

Этот пример даёт следующий вывод:

![Пример преобразования счётчиков в LaTeX](/files/4683946192606ba64ed01d43f0eca3087e72b3e7)

#### \value{somecounter}

Назначение этой команды, как описано в исходном коде LaTeX, — «Для доступа к значению счётчика как числа TeX»: то есть вы используете `\value{somecounter}` её в ситуациях, когда LaTeX ожидает обработку числового значения.

**(Необязательные) справочные заметки о команде \value**

Соблазнительно думать, что команда `\value{*somecounter*}` будет *непосредственно* набирает значение `*somecounter*`, но это не так. Она предназначена для использования внутри других команд, чтобы получить доступ к значению счётчика как числу TeX, в отличие от команды `\thesomecounter` которая выводит напечатанное представление `*somecounter*`.

В исходном коде LaTeX, `\value` определена так:

```latex
\def\value#1{\csname c@#1\endcsname}
```

Следовательно, `\value{*somecounter*}` создаёт экземпляр внутренней для LaTeX управляющей последовательности `\c@somecounter` которая содержит значение счётчика `*somecounter*`.

**Пример**

Следующий пример показывает один базовый вариант использования `\value`.

```latex
\noindent Начните с объявления двух новых счётчиков:
\begin{verbatim}
\newcounter{first}
\newcounter{second}
\end{verbatim}

\newcounter{first}
\newcounter{second}

\noindent Спустя некоторое время в вашем коде вы задаёте их значения:
\begin{verbatim}
\setcounter{first}{100}
\setcounter{second}{50}
\end{verbatim}

\setcounter{first}{100}
\setcounter{second}{50}
\noindent Затем вы пишете ещё код \LaTeX{}...\vspace{10pt}

\noindent В какой-то момент может понадобиться добавить значение счётчика \texttt{second} к счётчику \texttt{first}. Один из способов сделать это — использовать \verb|\value|, чтобы получить \textit{текущее} значение, хранящееся в счётчике \texttt{second}:

\begin{verbatim}
\addtocounter{first}{\value{second}}
\end{verbatim}

\addtocounter{first}{\value{second}}\noindent Значение \texttt{first} можно вывести с помощью \verb|\thefirst|: \thefirst. Мы также можем написать \verb|\the\value{first}|, что тоже набирает \the\value{first}. Однако запись \verb|\value{first}| вызовет ошибку \texttt{Missing number, treated as zero}, потому что тогда \LaTeX{} пытается выполнить внутреннюю команду \verb|\c@first|. Раскомментируйте следующую строку, чтобы вызвать ошибку:
\begin{verbatim}
%\value{first}
\end{verbatim}
%\value{first}
```

[Откройте этот фрагмент кода в Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Using+the+value+command\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cnoindent+Start+by+declaring+two+new+counters%3A%0A%5Cbegin%7Bverbatim%7D%0A%5Cnewcounter%7Bfirst%7D%0A%5Cnewcounter%7Bsecond%7D++++%0A%5Cend%7Bverbatim%7D%0A%0A%5Cnewcounter%7Bfirst%7D%0A%5Cnewcounter%7Bsecond%7D%0A%0A%5Cnoindent+Sometime+later+in+your+code+you+set+their+values%3A%0A%5Cbegin%7Bverbatim%7D%0A%5Csetcounter%7Bfirst%7D%7B100%7D%0A%5Csetcounter%7Bsecond%7D%7B50%7D++++%0A%5Cend%7Bverbatim%7D%0A%0A%5Csetcounter%7Bfirst%7D%7B100%7D%0A%5Csetcounter%7Bsecond%7D%7B50%7D++%0A%5Cnoindent+Then+you+write+more+%5CLaTeX%7B%7D+code...%5Cvspace%7B10pt%7D%0A%0A%5Cnoindent+At+some+point+we+might+want+to+add+the+value+of+counter+%5Ctexttt%7Bsecond%7D+to+counter+%5Ctexttt%7Bfirst%7D.+One+way+to+do+that+is+using+%5Cverb%7C%5Cvalue%7C+to+obtain+the+%5Ctextit%7Bcurrent%7D+value+stored+in+the+%5Ctexttt%7Bsecond%7D+counter%3A%0A%0A%5Cbegin%7Bverbatim%7D%0A%5Caddtocounter%7Bfirst%7D%7B%5Cvalue%7Bsecond%7D%7D%0A%5Cend%7Bverbatim%7D%0A%0A%5Caddtocounter%7Bfirst%7D%7B%5Cvalue%7Bsecond%7D%7D%5Cnoindent+The+value+of+%5Ctexttt%7Bfirst%7D+can+be+output+by+%5Cverb%7C%5Cthefirst%7C%3A+%5Cthefirst.+We+can+also+write+%5Cverb%7C%5Cthe%5Cvalue%7Bfirst%7D%7C+which+also+typesets+%5Cthe%5Cvalue%7Bfirst%7D.+However%2C++writing+%5Cverb%7C%5Cvalue%7Bfirst%7D%7C+will+generate+the+error+%5Ctexttt%7BMissing+number%2C+treated+as+zero%7D+because+%5CLaTeX%7B%7D+then+tries+to+execute+the+internal+command+%5Cverb%7C%5Cc%40first%7C.+Uncomment+the+following+line+to+generate+the+error%3A%0A%5Cbegin%7Bverbatim%7D%0A%25%5Cvalue%7Bfirst%7D%0A%5Cend%7Bverbatim%7D%0A%25%5Cvalue%7Bfirst%7D%0A%5Cend%7Bdocument%7D)

Этот пример выдаёт следующий результат:

![Пример использования команды \value](/files/89578961a2f104f5f587e930407b588f7c67718b)

### Другие команды счётчика

Здесь мы описываем команды `\counterwithin` и `\counterwithout` которые возникли в [`chngcntr` пакет](https://ctan.org/pkg/chngcntr) но теперь интегрированы в сам LaTeX — см. [LaTeX News, апрель 2018](https://www.latex-project.org/news/latex2e-news/ltnews28.pdf). `chngcntr` [документация пакета](https://mirror.ox.ac.uk/sites/ctan.org/macros/latex/contrib/chngcntr/chngcntr.pdf) содержит следующие комментарии, которые помогают понять назначение этих команд:

Вкл. `\counterwithin`:

> Иногда желательно изменить счётчик, определённый с помощью `\newcounter{<ctr>}` так, чтобы он действовал так, как если бы был определён как `\newcounter{<ctr>}[<within>]`. Пакет предоставляет команду `\counterwithin{<ctr>}{<within>}` которая это делает.

Вкл. `\counterwithout`:

> Точно так же команда `\counterwithout{<ctr>}{<within>}` изменяет счётчик, который был создан с помощью `\newcounter{<ctr>}[<within>]` так, чтобы он действовал так, как если бы был создан с помощью `\newcounter{<ctr>}`.

По сути, эти две команды предоставляют метод связывать (`\counterwithin`) или отвязывать (`\counterwithout`) два счётчика после их определения.

**\counterwithin{somecounter}{anothercounter}**

Сбросы `*somecounter*` до 0 всякий раз, когда `*anothercounter*` увеличивается, механизм, который связывает два счётчика. Помимо создания связи, эта команда переопределяет то, что выводится с помощью `\the*somecounter*`: вместо вывода значения счётчика `*somecounter*` она выдаёт `<значение anothercounter>**.**<значение somecounter>`. Звёздочная форма (`\counterwithin*{somecounter}{anothercounter}`) не переопределяет формат вывода `*somecounter*`, как показывает следующий пример — выберите ссылку под кодом, чтобы открыть его в Overleaf:

```latex
\documentclass{article}
\begin{document}
\section{A short example}
\newcounter{example}
\counterwithin{example}{section}
\newcounter{exampletwo}
\counterwithin*{exampletwo}{section}
\setcounter{example}{100}
\setcounter{exampletwo}{100}
\begin{itemize}
\item \verb|\theexample| набирает \theexample
\item \verb|\theexampletwo| набирает \theexampletwo
\end{itemize}
\end{document}
```

[Откройте этот `\counterwithin` пример в Overleaf](https://www.overleaf.com/docs?engine=\&snip_name=Example+of+starred+version+of+counterwithin\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Csection%7BA+short+example%7D%0A%5Cnewcounter%7Bexample%7D%0A%5Ccounterwithin%7Bexample%7D%7Bsection%7D%0A%5Cnewcounter%7Bexampletwo%7D%0A%5Ccounterwithin%2A%7Bexampletwo%7D%7Bsection%7D%0A%5Csetcounter%7Bexample%7D%7B100%7D%0A%5Csetcounter%7Bexampletwo%7D%7B100%7D%0A%5Cbegin%7Bitemize%7D%0A%5Citem+%5Cverb%7C%5Ctheexample%7C+typesets+%5Ctheexample%0A%5Citem+%5Cverb%7C%5Ctheexampletwo%7C+typesets+%5Ctheexampletwo%0A%5Cend%7Bitemize%7D%0A%5Cend%7Bdocument%7D)

Этот пример выдаёт следующий результат:

![Использование команды \counterwithin](/files/25aa446110641a2a297b65fbee1f1c8e0afa6e97)

Вы можете использовать `\counterwithin` со стандартными счётчиками, предоставляемыми LaTeX, такими как:

* `section`: используется для `\section` команда
* `equation` используется для `equation` окружения

или со счётчиками, которые вы создали.

**Пример \counterwithin и \counterwithin\***

Следующий код содержит более полный пример использования `\counterwithin` и `\counterwithin*`; выберите ссылку под кодом, чтобы открыть его в Overleaf:

```latex
\documentclass{article}
\counterwithin{equation}{section}
\newcounter{example}
\counterwithin*{example}{section}
\newenvironment{example}[1][]{%
\stepcounter{example}%
\par\vspace{5pt}\noindent
\fbox{\textbf{Example~\thesection.\theexample}}%
\hrulefill\par\vspace{10pt}\noindent\rmfamily}%
{\par\noindent\hrulefill\vrule width10pt height2pt depth2pt\par}
\begin{document}
\section{First equation}
Некоторый вводный текст...
\begin{example}
\begin{equation}
    f(x)=\frac{x}{1+x^2}
\end{equation}
\end{example}

\subsection{Подробнее}
\begin{example}
Здесь мы обсуждаем
\begin{equation}
    f(x)=\frac{x+1}{x-1}
\end{equation}
... но ничего не говорим
\end{example}

\subsubsection{Ещё подробнее}
\begin{example}
\begin{equation}
    f(x)=\frac{x^2}{1+x^3}
\end{equation}
\begin{equation}
    f(x+\delta x)=\frac{(x+\delta x)^2}{1+(x+\delta x)^3}
\end{equation}
\end{example}

\section{Third equation}
\begin{example}
Следующая функция...
\begin{equation}
    f_1(x)=\frac{x+1}{x-1}
\end{equation}
..является функцией
\begin{equation}
    f_2(x)=\frac{x^2}{1+x^3}
\end{equation}
\begin{equation}
    f_3(x)=\frac{3+ x^2}{1-x^3}
\end{equation}
\end{example}
\end{document}
```

[Откройте этот `\counterwithin` пример в Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+of+using+counterwithin\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Ccounterwithin%7Bequation%7D%7Bsection%7D%0A%5Cnewcounter%7Bexample%7D%0A%5Ccounterwithin%2A%7Bexample%7D%7Bsection%7D%0A%5Cnewenvironment%7Bexample%7D%5B1%5D%5B%5D%7B%25%0A%5Cstepcounter%7Bexample%7D%25%0A%5Cpar%5Cvspace%7B5pt%7D%5Cnoindent%0A%5Cfbox%7B%5Ctextbf%7BExample%7E%5Cthesection.%5Ctheexample%7D%7D%25%0A%5Chrulefill%5Cpar%5Cvspace%7B10pt%7D%5Cnoindent%5Crmfamily%7D%25%0A%7B%5Cpar%5Cnoindent%5Chrulefill%5Cvrule+width10pt+height2pt+depth2pt%5Cpar%7D%0A%5Cbegin%7Bdocument%7D%0A%5Csection%7BFirst+equation%7D%0ASome+introductory+text...%0A%5Cbegin%7Bexample%7D%0A%5Cbegin%7Bequation%7D%0A++++f%28x%29%3D%5Cfrac%7Bx%7D%7B1%2Bx%5E2%7D%0A%5Cend%7Bequation%7D%0A%5Cend%7Bexample%7D%0A%0A%5Csubsection%7BMore+detail%7D%0A%5Cbegin%7Bexample%7D%0AHere+we+discuss%0A%5Cbegin%7Bequation%7D%0A++++f%28x%29%3D%5Cfrac%7Bx%2B1%7D%7Bx-1%7D%0A%5Cend%7Bequation%7D%0A...+but+don%27t+say+anything%0A%5Cend%7Bexample%7D%0A%0A%5Csubsubsection%7BEven+more+detail%7D%0A%5Cbegin%7Bexample%7D%0A%5Cbegin%7Bequation%7D%0A++++f%28x%29%3D%5Cfrac%7Bx%5E2%7D%7B1%2Bx%5E3%7D%0A%5Cend%7Bequation%7D%0A%5Cbegin%7Bequation%7D%0A++++f%28x%2B%5Cdelta+x%29%3D%5Cfrac%7B%28x%2B%5Cdelta+x%29%5E2%7D%7B1%2B%28x%2B%5Cdelta+x%29%5E3%7D%0A%5Cend%7Bequation%7D%0A%5Cend%7Bexample%7D%0A%0A%5Csection%7BThird+equation%7D%0A%5Cbegin%7Bexample%7D%0AThe+following+function...%0A%5Cbegin%7Bequation%7D%0A++++f_1%28x%29%3D%5Cfrac%7Bx%2B1%7D%7Bx-1%7D%0A%5Cend%7Bequation%7D%0A..is+a+function%0A%5Cbegin%7Bequation%7D%0A++++f_2%28x%29%3D%5Cfrac%7Bx%5E2%7D%7B1%2Bx%5E3%7D%0A%5Cend%7Bequation%7D%0A%5Cbegin%7Bequation%7D%0A++++f_3%28x%29%3D%5Cfrac%7B3%2B+x%5E2%7D%7B1-x%5E3%7D%0A%5Cend%7Bequation%7D%0A%5Cend%7Bexample%7D%0A%5Cend%7Bdocument%7D)

Этот пример выдаёт следующий результат:

![Использование команды \counterwithin](/files/3c2799a0edf565d7232855ac35e54932e7920afa)

**Краткое содержание кода**

* `\newcounter{example}`: Это создаёт новый счётчик для использования в нашем окружении, также называемый `example`
* `\counterwithin*{example}{section}`: Это связывает наш `example` счётчик с `section` счётчиком, используемым внутри команды `\section` : каждый раз, когда мы выдаём команду `\section` команда `example` счётчик сбрасывается до нуля. Обратите внимание, что мы использовали звёздочную версию `\counterwithin*` чтобы избежать переопределения `\theexample`
* Затем мы создаём новое окружение, также называемое `example`. Внутри этого окружения мы используем `\stepcounter{example}` чтобы увеличивать счётчик окружения. Также обратите внимание, что мы пишем `\textbf{Пример~\thesection.\theexample}` чтобы вывести **Пример** `<номер раздела>.<номер примера>`

```latex
\newenvironment{example}[1][]{%
\stepcounter{example}%
\par\vspace{5pt}\noindent
\fbox{\textbf{Example~\thesection.\theexample}}%
\hrulefill\par\vspace{10pt}\noindent\rmfamily}%
{\par\noindent\hrulefill\vrule width10pt height2pt depth2pt}
```

**\counterwithout{somecounter}{anothercounter}**

`\counterwithout{*somecounter*}{*anothercounter*}` удаляет связь между `*somecounter*` и `*anothercounter*` так, чтобы они были независимыми. Для любой пары счётчиков можно переключаться между использованием `\counterwithout` и `\counterwithin`, как показывает следующий пример для `example` и `section` счётчиков — вы можете открыть этот пример в Overleaf, используя ссылку, приведённую ниже кода.

```latex
\section{First equation}
\begin{example}
\begin{equation}
    f(x)=\frac{x}{1+x^2}
\end{equation}
\end{example}

\subsection{Второе уравнение}
\begin{example}
\begin{equation}
    f(x)=\frac{x+1}{x-1}
\end{equation}
\end{example}
\vspace{6pt}\noindent Обратите внимание, как счётчик \texttt{example} сбрасывается в начале Раздела \ref{sec:n0}.
\section{Third equation}
\label{sec:n0}
\begin{example}
\begin{equation}
    f(x)=\frac{x+1}{x-1}
\end{equation}
\end{example}
\vspace{6pt}\noindent Здесь мы написали \verb|\counterwithout{example}{section}|, так что \texttt{example} больше не сбрасывается в начале раздела. В Разделах \ref{sec:n1} и \ref{sec:n2} счётчик \texttt{example} продолжает увеличиваться. \counterwithout{example}{section}
\section{Четвёртое уравнение}
\label{sec:n1}
\begin{example}
\begin{equation}
    f(x)=\frac{x^2+x^3}{1+x^3}
\end{equation}
\end{example}
\section{Пятое уравнение}
\label{sec:n2}
\begin{example}
\begin{equation}
    f(x,k)=\frac{x^2-x^k}{1+x^3}
\end{equation}
\end{example}
```

[Откройте этот `\counterwithout` пример в Overleaf](<https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+of+using+counterwithout\&snip=\documentclass{article}&#xA;\counterwithin{equation}{section}&#xA;\newcounter{example}&#xA;\counterwithin*{example}{section}&#xA;\newenvironment{example}\[1]\[]{%&#xA;\stepcounter{example}%&#xA;\par\vspace{3pt}\noindent&#xA;\fbox{\textbf{Example~\thesection.\theexample}}%&#xA;\hrulefill\par\vspace{3pt}\noindent\rmfamily}%&#xA;{\par\noindent\hrulefill\vrule+width10pt+height2pt+depth2pt\par}&#xA;\begin{document}&#xA;\section{First+equation}&#xA;\begin{example}&#xA;\begin{equation}&#xA;++++f(x)=\frac{x}{1+x^2}&#xA;\end{equation}&#xA;\end{example}&#xA;&#xA;\subsection{Second+equation}&#xA;\begin{example}&#xA;\begin{equation}&#xA;++++f(x)=\frac{x+1}{x-1}&#xA;\end{equation}&#xA;\end{example}&#xA;\vspace{6pt}\noindent+Note+how+the+\texttt{example}+counter+is+reset+at+the+start+Section+\ref{sec:n0}.+&#xA;\section{Third+equation}&#xA;\label{sec:n0}&#xA;\begin{example}&#xA;\begin{equation}&#xA;++++f(x)=\frac{x+1}{x-1}&#xA;\end{equation}&#xA;\end{example}&#xA;\vspace{6pt}\noindent+Here,+we+wrote+\verb|\counterwithout{example}{section}|+so+that+\texttt{example}+is+no+longer+reset+at+the+start+of+a+section.+In+Sections+\ref{sec:n1}+and+\ref{sec:n2}+the+\texttt{example}+counter+keeps+increasing.+\counterwithout{example}{section}&#xA;\section{Fourth+equation}&#xA;\label{sec:n1}&#xA;\begin{example}&#xA;\begin{equation}&#xA;++++f(x)=\frac{x^2+x^3}{1+x^3}&#xA;\end{equation}&#xA;\end{example}&#xA;\section{Fifth+equation}&#xA;\label{sec:n2}&#xA;\begin{example}&#xA;\begin{equation}&#xA;++++f(x,k)=\frac{x^2-x^k}{1+x^3}&#xA;\end{equation}&#xA;\end{example}&#xA;\end{document}>)

Этот пример выдаёт следующий результат:

![Использование команды counterwithout](/files/8661e0d3e923736a5f36ccf7dbde57ee826e748b)

## Пример

### enumerate

Это `enumerate` Среда списка использует четыре *счётчика* переменных, которые отслеживают текущее значение метки для каждого уровня:

|             |                                     |
| ----------- | ----------------------------------- |
| **Уровень** | **`enumerate`** переменная счётчика |
| Уровень 1   | `enumi`                             |
| Уровень 2   | `enumii`                            |
| Уровень 3   | `enumiii`                           |
| Уровень 4   | `enumiv`                            |

Эти счётчики можно изменить с помощью `\setcounter` команды. См. пример ниже — который не обязательно является лучшим решением (см. [списки Overleaf](/latex/ru/osnovy-latex/04-lists.md) статью для получения дополнительной информации):

```latex
Этот пример показывает один из способов изменить нумерацию списка; здесь значение счётчика \texttt{enumi} изменяется, чтобы нумерация списка начиналась с 4 (оно увеличивается командой \verb|\item|):

\begin{enumerate}
\setcounter{enumi}{3}
\item Что-то.
\item Что-то ещё.
\item Ещё один элемент.
\item Последний пункт в списке.
\end{enumerate}
```

[Откройте этот пример в Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Modifying+an+enumerate+counter\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Csection%7BIntroduction%7D%0AThis+example+shows+one+way+to+change+the+numbering+of+a+list%3B+here%2C+changing+the+value+of+the+%5Ctexttt%7Benumi%7D+counter+to+start+the+list+numbering+at+4+%28it+is+incremented+by+the+%5Cverb%7C%5Citem%7C+command%29%3A%0A%0A%5Cbegin%7Benumerate%7D%0A%5Csetcounter%7Benumi%7D%7B3%7D%0A%5Citem+Something.%0A%5Citem+Something+else.%0A%5Citem+Another+element.%0A%5Citem+The+last+item+in+the+list.%0A%5Cend%7Benumerate%7D%0A%5Cend%7Bdocument%7D)

Этот пример выдаёт следующий результат:

![Изменение счётчика enumerate](/files/38463e871ee43d8ca9333c193a12e209a436a6a9)

## Счётчики по умолчанию в LaTeX

| Использование             | Название                                                                                                      |
| ------------------------- | ------------------------------------------------------------------------------------------------------------- |
| Для структуры документа   | <p>- часть<br>- глава<br>- раздел<br>- подраздел<br>- подподраздел<br>- абзац<br>- подабзац<br>- страница</p> |
| Для плавающих объектов    | <p>- уравнение<br>- рисунок<br>- таблица</p>                                                                  |
| Для сносок                | <p>- footnote<br>- mpfootnote</p>                                                                             |
| Для `enumerate` окружения | <p>- enumi<br>- enumii<br>- enumiii<br>- enumiv</p>                                                           |

## Дополнительное чтение

Для получения дополнительной информации см.:

* [Окружения](/latex/ru/komandy/02-environments.md)
* [Команды](/latex/ru/komandy/01-commands.md)
* [Списки](/latex/ru/osnovy-latex/04-lists.md)
* [Нумерация страниц](/latex/ru/formatirovanie/03-page-numbering.md)
* [Разделы и главы](/latex/ru/struktura-dokumenta/01-sections-and-chapters.md)
* [Математические выражения](/latex/ru/matematika/01-mathematical-expressions.md)
* [Вставка изображений](/latex/ru/drugie-temy/27-inserting-images.md)
* [Таблицы](/latex/ru/risunki-i-tablicy/01-tables.md)
* [Оформление экзаменов в LaTeX](/latex/ru/specializirovannye/09-typesetting-exams-in-latex.md)
* [Создание собственного пакета](/latex/ru/faily-klassov/03-writing-your-own-package.md)
* [Создание собственного класса](/latex/ru/faily-klassov/04-writing-your-own-class.md)
* [Не слишком краткое введение в LaTeX2ε](http://www.ctan.org/tex-archive/info/lshort/)


---

# 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/formatirovanie/10-counters.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.
