Tex: подробное описание С. М. Львовский


Download 1.51 Mb.
Pdf ko'rish
bet81/143
Sana08.05.2023
Hajmi1.51 Mb.
#1444247
1   ...   77   78   79   80   81   82   83   84   ...   143
Bog'liq
LaTeX-Lvovsky

4.4. Предметный указатель
L
A
TEX окажет Вам помощь в создании предметного указатель к Вашему документу. В отли
чие, однако, от списка литературы, который при использовании вышеописанных команд \cite
и \bibitem получается совершенно автоматически, процесс создания указателя автоматизи

рован в L
A
TEXе не полностью. Именно, Вы можете сделать две вещи:
• Если Вам уже известно, на каких страницах расположены те термины, на которые
Вы собираетесь сослаться в указателе, Вы можете организовать печать предметного
указателя с помощью окружения theindex. Если предметный указатель должен завер

шать документ, то можно, на худой конец, напечатать весь документ, кроме указателя,
и вручную выписать требуемые номера страниц
2
.
• Если первый способ Вас не устраивает, то можно специальным образом пометить в
файле термины, на которые Вы собираетесь ссылаться в предметном указателе. При
этом средствами L
A
TEXа создается полуфабрикат, из которого предметный указатель
получится после некоторой дополнительной обработки.
Разберем эти две возможности последовательно.
Внутри окружения theindex каждый элемент указателя вводится командой \item; ко

манды \subitem и \subsubitem вводят элементы указателя, печатающиеся с дополнитель

ными отступами (обычно это
— уточнения к заглавному слову). Наконец, команда \indexspace
создает дополнительный вертикальный пробел (его можно использовать для отделения раз

личных разделов указателя друг от друга):
Компьютеры 25 и далее
IBM-совместимые 28
ремонт 35
цены 30
болгарские 26
Принтеры 40
Кошки 120
Собаки 140
–156
\begin{theindex}
\item kOMPX@TERY 25 I DALEE
\subitem IBM-SOWMESTIMYE
28
\subsubitem REMONT 35
\subsubitem CENY 30
\subitem BOLGARSKIE 26
\item pRINTERY 40
\indexspace
\item kO[KI 120
\item sOBAKI 140--156
\end{theindex}
2
У Вас может возникнуть искушение пометить все места, на которые будете ссылаться, с помощью коман

ды \label, а в окружении theindex сослаться на них с помощью \pageref. При этом, однако, есть опасность,
что TEXу не хватит памяти для обработки такого огромного числа ссылок.


IV.4. ТИТУЛ, ОГЛАВЛЕНИЕ И ПР.
109
Предметный указатель, получаемый из окружения theindex, печатается L
A
TEXом в две ко
лонки (даже тогда, когда сам документ печатается в одну колонку). Кроме того, L
A
TEX авто
матически дает списку литературы заглавие, определяемое командой \indexname (см. раз

дел 3.3). Если Вас не устраивает, что это название
— английское, его можно переопределить
(см. там же).
Теперь рассмотрим вторую возможность
— как с помощью L
A
TEXа автоматически со
здать полуфабрикат предметного указателя. Для этого нужно сделать две вещи. Во-первых,
в преамбулу документа необходимо включить команду \makeindex. Во-вторых, при усло

вии, что это сделано, можно пометить те места в тексте, на которые Вы хотите сослаться в
предметном указателе, командой \index. У этой команды один обязательный аргумент

текст Вашей пометки (как правило, такая пометка
— это просто заглавное слово будущего
предметного указателя). L
A
TEX запишет информацию о том, на какие страницы попали Ваши
пометки, в специальный файл с тем же именем, что и у Вашего файла, и расширением .idx
(мы будем называть его idx-файлом). Пусть, например, в исходном файле встречались такие
фрагменты:
mNOGIE L@DI L@BQT DOMA[NIH KO[EK.\index{kO[KI}
....
hORO[O TAKVE IMETX SOBAKU.\index{sOBAKI}
.....
mALO KTO RISKNET DERVATX DOMA TAKU@ DIKU@
KO[KU,\index{kO[KI} KAK TIGR.
Предположим, что первая ссылка на кошек попала на страницу 5, ссылка на собак попала
на страницу 7, а вторая ссылка на кошек попала на страницу 9. Тогда в idx-файл запишется
вот что:
\indexentry{kO[KI}{5}
\indexentry{sOBAKI}{7}
\indexentry{kO[KI}{9}
Полученный таким образом idx-файл
— это и есть полуфабрикат списка литературы, со
зданный L
A
TEXом. Использовать этот полуфабрикат, однако же, еще нельзя по следующим
причинам:
• Ссылки в idx-файле расположены не по алфавиту (или каким-то другим разумным
образом), а записаны
«в порядке поступления».
• В idx-файле может присутствовать несколько строк с одним заглавным словом и ссыл
ками на разные страницы; в готовом указателе естественно было бы такие ссылки объ

единить.
• Все строки idx-файла равноправны, в нем отсутствует иерархия ссылок вроде той, что
получается при использовании команд наподобие \subitem в окружении theindex.
• Команда \indexentry, с которой начинается каждая строка idx-файла, не определена
в L
A
TEXе (это сделано сознательно!).
Поэтому, получив idx-файл, Вы должны его каким-либо образом обработать; идеально, ес

ли в результате получится файл с отсортированными (по алфавиту, скажем) терминами и с
командами \item, \subitem и т. д., так что можно будет написать


IV.4. ТИТУЛ, ОГЛАВЛЕНИЕ И ПР.
110
\begin{theindex}
\input < имя_файла >
\end{theindex}
Если Вы немного умеете программировать, Вы сможете осуществить такую обработку про

граммным путем самостоятельно; кроме того, к реализациям TEXа нередко прилагаются про
граммы для обработки idx-файлов (учтите, однако, что, если такая программа получена с
Запада, то слова с русскими буквами она, наверное, будет сортировать неправильно). Чтобы
установить иерархию терминов (\subitem и т. п.), Вам придется поработать вручную (как
отмечал Дональд Кнут, составление предметного указателя
— процесс творческий, и полно
стью передоверять его компьютеру не следует).
Как быть, если программы для обработки idx-файлов у Вас нет и самостоятельно на

писать ее Вы не можете? Во-первых, отсортировать строки idx-файла можно и без спе

циальной программы, средствами текстового редактора (в хороших редакторах такая воз

можность обычно предусмотрена). После этого остается проблема, что делать с команда

ми \indexentry. Если Ваших программистских умений не хватает на то, чтобы преобразо

вать каждое \indexentry в \item, то есть еще одна возможность: осуществить это преоб

разование средствами самого L
A
TEXа. Именно, после того, как Вы отсортируете строки
idx
-файла (и сохраните, для надежности, отсортированный файл под другим именем, ска

жем, myindex.tex), надо определить оставленную неопределенной команду \indexentry
таким образом, чтобы она делала ту же работу, которую призван делать \item. Для этого
надо написать в преамбуле следующее:
\newcommand{\indexentry}[2]{\item #1 #2}
После этого TEX будет воспринимать каждую запись вида
\indexentry{kO[KI}{5}
так же, как если бы вместо этого было написано
\item kO[KI 5
и можно будет просто написать в конце документа
\begin{theindex}
\input myindex.tex
\end{theindex}
Пока что воспринимайте этот рецепт чисто догматически; по прочтении главы
VII
, в которой
подробно рассмотрен процесс определения новых команд, Вы поймете, почему все получает

ся именно так.
В аргументе команды \index может быть любой текст и любые TEXовские команды — все это в
неизменном виде будет переписано в idx-файл. Единственное ограничение
— не должно быть «несба
лансированных
» фигурных скобок.
Если в файле присутствуют команды \index, но в преамбуле нет команды \makeindex, то в idx-файл
ничего записываться не будет.
Наконец, еще одна тонкость: команду \index нельзя использовать внутри необязательного аргу

мента таких команд, как \caption или \section, \chapter и т. п.


IV.4. ТИТУЛ, ОГЛАВЛЕНИЕ И ПР.
111

Download 1.51 Mb.

Do'stlaringiz bilan baham:
1   ...   77   78   79   80   81   82   83   84   ...   143




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling