> 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/struktura-dokumenta/04-indices.md).

# Индексы

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

## Введение

Рассмотрим простой рабочий пример.

```latex
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{imakeidx}
\makeindex

\begin{document}
\section{Introduction}
В этом примере будут использоваться несколько ключевых слов\index{keywords}
которые важны и заслуживают того, чтобы появиться в указателе\index{Index}.

Такие термины, как generate\index{generate} и some\index{others}, будут
тоже появляться.

\printindex
\end{document}
```

[Откройте этот пример в Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Index+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5BT1%5D%7Bfontenc%7D%0A%5Cusepackage%7Bimakeidx%7D%0A%5Cmakeindex%0A%0A%5Cbegin%7Bdocument%7D%0A%5Csection%7BIntroduction%7D%0AIn+this+example%2C+several+keywords%5Cindex%7Bkeywords%7D+will+be+used+%0Awhich+are+important+and+deserve+to+appear+in+the+Index%5Cindex%7BIndex%7D.%0A%0ATerms+like+generate%5Cindex%7Bgenerate%7D+and+some%5Cindex%7Bothers%7D+will+%0Aalso+show+up.+%0A%0A%5Cprintindex%0A%5Cend%7Bdocument%7D)

Следующее изображение показывает результат, полученный в приведённом выше примере:

![Index1OLV2.png](/files/8a73ef2cc22137601e26156aea1cded04287d58c)

Сначала пакет подключается в преамбуле строкой

```latex
\usepackage{imakeidx}
```

Затем команда `\makeindex` необходима для работы указателя и может принимать некоторые параметры для настройки его внешнего вида; в следующих разделах это станет ясно.

Чтобы добавить запись в указатель, используется команда `\index{}` где добавляемое слово указывается в качестве параметра. Будьте внимательны: это не выведет слово в текущем месте, а только в указателе.

Наконец, команда `\printindex` на самом деле выведет указатель. Если вы используете специальную локализацию с помощью `babel` пакета, заголовок будет переведён соответствующим образом.

Примечание: вместо `imakeidx`, пакет `makeidx` может быть подключён, но предоставляет меньше возможностей настройки.

## Указатели в Overleaf

При добавлении указателя в проект на Overleaf **важно отметить** что для корректной компиляции указателя основной `.tex` файл должен находиться в корневом каталоге проекта, *вне каких-либо папок*. Это гарантирует, что вспомогательные файлы, необходимые для создания указателя, кэшируются таким образом, чтобы компилятор мог к ним обратиться.

## Записи и подзаписи

Как уже было сказано в предыдущем разделе, команда `\index` добавит переданное ей слово в указатель, но это не единственный способ её использования.

```latex
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{imakeidx}
\makeindex

\begin{document}
\section{Introduction}
В этом примере будут использоваться несколько ключевых слов\index{keywords}
которые важны и заслуживают того, чтобы появиться в указателе\index{Index}.

Такие термины, как generate\index{generate} и some\index{others}, тоже
появляться. Термины в указателе также могут быть вложенными \index{Index!nested}

\clearpage

\section{Second section}
Этот второй раздел\index{section} может содержать какое-то особое слово,
и расширять уже используемые\index{keywords!used}.

\printindex
\end{document}
```

[Откройте этот пример в Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Index+example+2\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5BT1%5D%7Bfontenc%7D%0A%5Cusepackage%7Bimakeidx%7D%0A%5Cmakeindex%0A%0A%5Cbegin%7Bdocument%7D%0A%5Csection%7BIntroduction%7D%0AIn+this+example%2C+several+keywords%5Cindex%7Bkeywords%7D+will+be+used+%0Awhich+are+important+and+deserve+to+appear+in+the+Index%5Cindex%7BIndex%7D.%0A%0ATerms+like+generate%5Cindex%7Bgenerate%7D+and+some%5Cindex%7Bothers%7D+will+also+%0Ashow+up.+Terms+in+the+index+can+also+be+nested+%5Cindex%7BIndex%21nested%7D%0A%0A%5Cclearpage%0A%0A%5Csection%7BSecond+section%7D%0AThis+second+section%5Cindex%7Bsection%7D+may+include+some+special+word%2C+%0Aand+expand+the+ones+already+used%5Cindex%7Bkeywords%21used%7D.%0A%0A%5Cprintindex%0A%5Cend%7Bdocument%7D)

Следующее изображение показывает результат, полученный в приведённом выше примере:

![Index2OLV2.png](/files/4fa2a81cc665dd637b6a84581b7ac9c5e934bc5a)

Распространённая практика — расширять термины в указателе, добавляя специальные прилагательные. Например, слово *Поле* может иметь особое значение, если перед ним стоит прилагательное *конечный* или если после него следует *характеристики 0*, и может быть немного обременительно добавлять разные виды *Поле*в качестве отдельных записей в указатель. В таких случаях можно добавить восклицательный знак "!", который добавит термины после этого знака как подзаписи основного слова *Поле*.

В примере слово "Index" имеет подзапись "nested".

## Форматирование указателя

Простое форматирование указателя, например изменение заголовка указателя, добавление нескольких колонок и изменение ширины столбца, можно легко выполнить, передав необязательные значения команде `\makeindex`:

```latex
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{imakeidx}
\makeindex[columns=3, title=Alphabetical Index]

\begin{document}
\section{Introduction}
В этом примере будут использоваться несколько ключевых слов\index{keywords} которые
важны и заслуживают того, чтобы появиться в указателе\index{Index}.

Такие термины, как generate\index{generate} и some\index{others}, тоже
появляться. Термины в указателе также могут быть вложенными \index{Index!nested}

\clearpage

\section{Second section}
Этот второй раздел\index{section} может содержать какое-то особое слово,
и расширять уже используемые\index{keywords!used}.

\printindex
\end{document}
```

[Откройте этот пример в Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Index+example+3\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5BT1%5D%7Bfontenc%7D%0A%5Cusepackage%7Bimakeidx%7D%0A%5Cmakeindex%5Bcolumns%3D3%2C+title%3DAlphabetical+Index%5D%0A%0A%5Cbegin%7Bdocument%7D%0A%5Csection%7BIntroduction%7D%0AIn+this+example%2C+several+keywords%5Cindex%7Bkeywords%7D+will+be+used+which+%0Aare+important+and+deserve+to+appear+in+the+Index%5Cindex%7BIndex%7D.%0A%0ATerms+like+generate%5Cindex%7Bgenerate%7D+and+some%5Cindex%7Bothers%7D+will+also+%0Ashow+up.+Terms+in+the+index+can+also+be+nested+%5Cindex%7BIndex%21nested%7D%0A%0A%5Cclearpage%0A%0A%5Csection%7BSecond+section%7D%0AThis+second+section%5Cindex%7Bsection%7D+may+include+some+special+word%2C+%0Aand+expand+the+ones+already+used%5Cindex%7Bkeywords%21used%7D.%0A%0A%5Cprintindex%0A%5Cend%7Bdocument%7D)

Следующее изображение показывает результат, полученный в приведённом выше примере:

![Index3OLV2.png](/files/bc1c5a8d47d3b2f8c0a2c9ded51088f69726da4b)

В этом примере указатель представлен в трёхколоночном формате с параметром `columns=3`, а заголовок изменён на "Alphabetical Index" с помощью `title=Alphabetical Index`; эти параметры передаются `\makeindex` в преамбуле. См. [справочное руководство](#reference-guide) для списка доступных параметров и их описания.

### Использование файлов стилей

Для дальнейшей настройки указателя можно использовать файл стилей. Файлы стилей сообщают `makeindex` о предполагаемом формате конечного вывода. Файлы стилей содержат список `<key, value>` пар. Например, если нужно группировать термины в указателе по первой букве и выравнивать номера страниц по правому краю, следующий файл стилей справится с этой задачей:

```latex
headings_flag 1

heading_prefix "\n\\centering\\large\\sffamily\\bfseries%
\\noindent\\textbf{"heading_suffix "}\\par\\nopagebreak\n"

item_0 "\n \\item \\small "

delim_0 " \\hfill "
delim_1 " \\hfill "
delim_2 " \\hfill "
```

Ключи изменяют разные элементы вывода указателя:

* `headings_flag 1` включает группировку, вставляя заголовок группы (символы, числа или буквы) перед новой группой.
* `heading_prefix` форматирует заголовок, вставляемый перед началом новой буквы. Использует обычные команды форматирования для семейства шрифта, размера шрифта и выравнивания, но обратные слэши должны быть экранированы двойным обратным слэшем вместо одного.
* `item_0` то, что будет вставлено между двумя основными элементами.
* `delim_*` это разделитель, который будет вставлен между ключом и первым номером страницы.

Полный список ключей и значений для использования в файле .ist см. [Таблица, включённая в справочное руководство](#keys-to-create-styles-files).

Предположим, что предыдущий файл сохранён как "example\_style.ist". Чтобы использовать его в документе, добавим параметр `options= -s example_style.ist` к `\makeindex` команде.

```latex
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{imakeidx}
\makeindex[columns=3, title=Alphabetical Index,
           options= -s example_style.ist]

\begin{document}

\tableofcontents

\section{Introduction}
В этом примере будут использоваться несколько ключевых слов\index{keywords} которые важны и заслуживают того, чтобы появиться в указателе\index{Index}.

Такие термины, как generate\index{generate}, отличный\index{great} список и некоторые другие\index{others} термины, которые могут быть важными\index{important}
тоже появятся. Термины в указателе также могут быть вложенными \index{Index!nested}

\clearpage

\section{Second section}
Этот второй раздел\index{section} может содержать какое-то особое слово и расширять уже используемые\index{keywords!used}.

\printindex
\end{document}
```

[Откройте пример с использованием файла стиля указателя на Overleaf](https://www.overleaf.com/project/new/template/20614?id=70756423\&templateName=Using+an+index+style+file\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

Следующее изображение показывает результат, полученный в приведённом выше примере:

![Index4OLV2.png](/files/4952bf6d918d90b46d7a30743eec15fdd751289c)

## Включение указателя в оглавление

По умолчанию указатель не включается в оглавление, это легко изменить.

```latex
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{imakeidx}
\makeindex[columns=3, title=Alphabetical Index, intoc]

\begin{document}
\tableofcontents

\section{Introduction}
В этом примере будут
использоваться несколько ключевых слов
Index\index{Index}.

Такие термины, как generate\index{generate} и some\index{others}
тоже появятся. Термины в указателе также могут быть
вложенными \index{Index!nested}

\clearpage

\section{Second section}
Этот второй раздел\index{section} может содержать какое-то особое
слово и расширять уже используемые\index{keywords!used}.

\printindex
\end{document}
```

[Откройте этот пример в Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Index+example+3\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5BT1%5D%7Bfontenc%7D%0A%5Cusepackage%7Bimakeidx%7D%0A%5Cmakeindex%5Bcolumns%3D3%2C+title%3DAlphabetical+Index%2C+intoc%5D%0A%0A%5Cbegin%7Bdocument%7D%0A%5Ctableofcontents%0A%0A%5Csection%7BIntroduction%7D%0AIn+this+example%2C+several+keywords%5Cindex%7Bkeywords%7D+will+be+%0Aused+which+are+important+and+deserve+to+appear+in+the+%0AIndex%5Cindex%7BIndex%7D.%0A%0ATerms+like+generate%5Cindex%7Bgenerate%7D+and+some%5Cindex%7Bothers%7D+%0Awill+also+show+up.+Terms+in+the+index+can+also+be+%0Anested+%5Cindex%7BIndex%21nested%7D%0A%0A%5Cclearpage%0A%0A%5Csection%7BSecond+section%7D%0AThis+second+section%5Cindex%7Bsection%7D+may+include+some+special+%0Aword%2C+and+expand+the+ones+already+used%5Cindex%7Bkeywords%21used%7D.%0A%0A%5Cprintindex%0A%5Cend%7Bdocument%7D)

Следующее изображение показывает результат, полученный в приведённом выше примере:

![Index5OLV2.png](/files/2e09ee475e8ec38a68c08ebad28ae3c4c738b774)

Добавив параметр `intoc` к команде `\makeindex` включается добавление заголовка указателя в оглавление.

## Справочное руководство

### Параметры команды \makeindex

**title**

Заголовок, который выводится в начале данного указателя. Пример приведён в разделе форматирования указателя.

**intoc**

Если указан этот параметр, заголовок указателя помещается в оглавление.

**columns**

Использует синтаксис key=value; значение должно быть целым числом, задающим количество столбцов. Значение по умолчанию — 2.

**columnsep**

Задаёт величину промежутка между столбцами. Синтаксис должен быть key=value; например, columnsep=2em.

**columnseprule**

Если указан этот параметр, между столбцами будет отображаться вертикальная линия.

### Ключи для создания файлов стилей

Следующая таблица показывает ключи, значения по умолчанию и описания для создания файлов стилей .ist.

| key                         | Описание                                                                                                                                                                                                                                                                                                                                  |
| --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `actual <char>`             | '@' Символ, указывающий, что следующая запись должна появиться в выходном файле.                                                                                                                                                                                                                                                          |
| `arg_close <char>`          | '}' Закрывающий разделитель аргумента записи указателя.                                                                                                                                                                                                                                                                                   |
| `arg_open <char>`           | '{' Открывающий разделитель аргумента записи указателя.                                                                                                                                                                                                                                                                                   |
| `encap <char>`              | ' Символ, указывающий, что остальная часть списка аргументов будет использована как команда-оболочка для номера страницы.                                                                                                                                                                                                                 |
| `escape <char>`             | '\\\\' Символ, экранирующий следующую букву, если только его предыдущий символ сам не является символом экранирования. Примечание: quote используется для экранирования буквы, которая следует сразу за ним, но если перед ним стоит символ экранирования, он рассматривается как обычный символ. Эти два символа должны быть различными. |
| `keyword <string>`          | "\\\indexentry" Команда, которая сообщает makeindex, что её аргумент является записью указателя.                                                                                                                                                                                                                                          |
| `level <char>`              | '!' Разделитель, обозначающий новый уровень подэлемента.                                                                                                                                                                                                                                                                                  |
| `quote <char>`              | '"' Примечание: quote используется для экранирования буквы, которая следует сразу за ним, но если перед ним стоит символ экранирования, он рассматривается как обычный символ. Эти два символа должны быть различными.                                                                                                                    |
| `range_close <char>`        | ')' Закрывающий разделитель, обозначающий конец явного диапазона страниц.                                                                                                                                                                                                                                                                 |
| `range_open <char>`         | '(' Открывающий разделитель, обозначающий начало явного диапазона страниц.                                                                                                                                                                                                                                                                |
| `preamble <string>`         | "\\\begin{theindex}\n" Преамбула выходного файла.                                                                                                                                                                                                                                                                                         |
| `postamble <string>`        | "\n\n\\\end{theindex}\n" Постамбула выходного файла.                                                                                                                                                                                                                                                                                      |
| `setpage_prefix <string>`   | "\n \\\setcounter{page}{" Префикс команды, задающей начальный номер страницы.                                                                                                                                                                                                                                                             |
| `setpage_suffix <string>`   | "}\n" Суффикс команды, задающей начальный номер страницы.                                                                                                                                                                                                                                                                                 |
| `group_skip <string>`       | "\n\n \\\indexspace\n" Вертикальный отступ, вставляемый перед началом новой группы.                                                                                                                                                                                                                                                       |
| `headings_flag <string>`    | 0 Флаг, определяющий обработку заголовков новых групп, которые вставляются перед новой группой (символы, числа и 26 букв): положительные значения приводят к вставке заглавной буквы между префиксом и суффиксом, а отрицательные — к вставке строчной буквы (по умолчанию 0, что не создаёт заголовок).                                  |
| `heading_prefix <string>`   | "" Префикс заголовка, вставляемый перед началом новой буквы.                                                                                                                                                                                                                                                                              |
| `symhead_positive <string>` | "Symbols" Заголовок для символов, вставляемый если headings\_flag положителен.                                                                                                                                                                                                                                                            |
| `symhead_negative <string>` | "symbols" Заголовок для символов, вставляемый если headings\_flag отрицателен.                                                                                                                                                                                                                                                            |
| `numhead_positive <string>` | "Numbers" Заголовок для чисел, вставляемый если headings\_flag положителен.                                                                                                                                                                                                                                                               |
| `numhead_negative <string>` | "numbers" Заголовок для чисел, вставляемый если headings\_flag отрицателен.                                                                                                                                                                                                                                                               |
| `item_0 <string>`           | "\n \\\item " Команда, вставляемая между двумя основными (нулевого уровня) элементами.                                                                                                                                                                                                                                                    |
| `item_1 <string>`           | "\n \\\subitem " Команда, вставляемая между двумя вторичными (первого уровня) элементами.                                                                                                                                                                                                                                                 |
| `item_2 <string>`           | "\n \\\subsubitem " Команда, вставляемая между двумя элементами второго уровня.                                                                                                                                                                                                                                                           |
| `item_01 <string>`          | "\n \\\subitem " Команда, вставляемая между элементом нулевого уровня и элементом первого уровня.                                                                                                                                                                                                                                         |
| `item_x1 <string>`          | "\n \\\subitem " Команда, вставляемая между элементом нулевого уровня и элементом первого уровня, где у элемента нулевого уровня нет связанных номеров страниц.                                                                                                                                                                           |
| `item_12 <string>`          | "\n \\\subsubitem " Команда, вставляемая между элементом первого уровня и элементом второго уровня.                                                                                                                                                                                                                                       |
| `item_x2 <string>`          | "\n \\\subsubitem " Команда, вставляемая между элементом первого уровня и элементом второго уровня, где у элемента первого уровня нет связанных номеров страниц.                                                                                                                                                                          |
| `delim_0 <string>`          | ", " Разделитель, вставляемый между ключом нулевого уровня и его первым номером страницы (по умолчанию: запятая, затем пробел).                                                                                                                                                                                                           |
| `delim_1 <string>`          | ", " Разделитель, вставляемый между ключом первого уровня и его первым номером страницы (по умолчанию: запятая, затем пробел).                                                                                                                                                                                                            |
| `delim_2 <string>`          | ", " Разделитель, вставляемый между ключом второго уровня и его первым номером страницы (по умолчанию: запятая, затем пробел).                                                                                                                                                                                                            |
| `delim_n <string>`          | ", " Разделитель, вставляемый между двумя номерами страниц для одного и того же ключа на любом уровне (по умолчанию: запятая, затем пробел).                                                                                                                                                                                              |
| `delim_r <string>`          | "--" Делитель, вставляемый между начальным и конечным номерами страниц диапазона.                                                                                                                                                                                                                                                         |
| `delim_t <string>`          | "" Разделитель, вставляемый в конце списка страниц. Этот разделитель не влияет на записи, у которых нет связанного списка страниц.                                                                                                                                                                                                        |
| `encap_prefix <string>`     | "\\\\" Первая часть префикса команды, которая оборачивает номер страницы.                                                                                                                                                                                                                                                                 |
| `encap_infix <string>`      | "{" Вторая часть префикса команды, которая оборачивает номер страницы.                                                                                                                                                                                                                                                                    |
| `encap_suffix <string>`     | "}". Суффикс команды, которая оборачивает номер страницы.                                                                                                                                                                                                                                                                                 |
| `line_max <number>`         | 72 Максимальная длина строки в выводе, после которой строка переносится.                                                                                                                                                                                                                                                                  |
| `indent_space <string>`     | "\t\t" Пробел, вставляемый перед перенесённой строкой (по умолчанию: два таба).                                                                                                                                                                                                                                                           |
| `indent_length <number>`    | 16 Длина indent\_space (по умолчанию: 16, что эквивалентно 2 табам).                                                                                                                                                                                                                                                                      |

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

Подробнее см.:

* [Глоссарии](/latex/ru/struktura-dokumenta/05-glossaries.md)
* [Списки таблиц и рисунков](/latex/ru/risunki-i-tablicy/03-lists-of-tables-and-figures.md)
* [Оглавление](/latex/ru/struktura-dokumenta/02-table-of-contents.md)
* [Разделы и главы](/latex/ru/struktura-dokumenta/01-sections-and-chapters.md)
* [Гиперссылки](/latex/ru/struktura-dokumenta/09-hyperlinks.md)
* [Поддержка международных языков](/latex/ru/yazyki/03-international-language-support.md)
* [Перекрёстные ссылки на разделы и уравнения](/latex/ru/struktura-dokumenta/03-cross-referencing-sections-equations-and-floats.md)
* [Управление в большом проекте](/latex/ru/struktura-dokumenta/07-management-in-a-large-project.md)
* [Многофайловые проекты LaTeX](/latex/ru/struktura-dokumenta/08-multi-file-latex-projects.md)
* [Документация пакета imakeidx](http://mirror.math.ku.edu/tex-archive/macros/latex/contrib/imakeidx/imakeidx.pdf)


---

# 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/struktura-dokumenta/04-indices.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.
