Опубликован: 07.02.2007 | Доступ: свободный | Студентов: 4014 / 1341 | Оценка: 4.56 / 3.95 | Длительность: 23:09:00
Специальности: Художник
Лекция 4:

Оформление текста в целом

Настройка программы makeindex

В предыдущих разделах мы объясняли, как и какую информацию можно передавать программе makeindex. Теперь объясним, как добиться того, чтобы она обрабатывала эту информацию по-иному.

Если "запустить программу makeindex с ключом c", то есть сказать

makeindex -c  исходный\_файл

то при обработке idx-файла программой makeindex пробелы в начале и конце записей будут игнорироваться, а два и более пробела будут рассматриваться как один. Благодаря этому записи \index{Кошка} и \index{ Кошка} будут рассматриваться как относящиеся к одному и тому же ключевому слову. Без этого ключа программа {makeindex} отведет в указателе отдельную строку для кошки, начинающейся с пробела.

Можно задать по своему усмотрению имя файла, в который программа makeindex запишет результаты своей работы. Для этого надо воспользоваться ключом o (в примере мы употребили еще и ключ c, но это не обязательно):

makeindex -c -o выходной\_файл исходный\_файл

Чтобы задать отличное от стандартного имя файла с протоколом трансляции, надо аналогичным образом воспользоваться ключом t.

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

Чтобы подключить стилевой файл к makeindex, надо запустить эту программу с ключом s, после которого, через пробел, указывается имя стилевого файла (по традиции он имеет расширение ist). Если стилевой файл называется mystyle.ist, то можно сказать так:

makeindex -s mystyle.ist исходный_файл

Теперь обсудим, что можно менять с помощью стилевого файла. Как мог заметить читатель, программа makeindex автоматически записывает строку

\begin{theindex}

в начало ind-файла и

\end{theindex}

в его конец. Часто требуется, чтобы в начало или конец ind - файла автоматически записывалось что-то еще (команда \sloppy в начало, например). Для того, чтобы после \begin{theindex} было на отдельной строке написано еще и \sloppy, надо в стилевом файле написать так:

preamble "\\begin{theindex}\n
        \\sloppy\n"

Здесь preamble - имя стилевого параметра, определяющего, что записывается в начало всякого ind - файла. Остальной текст — содержание этой записи. Правила записи в стилевом файле для makeindex таковы:

  • строковая константа, задающая стилевой параметр, ограничена с обеих сторон знаками "(кавычки);
  • эта строковая константа может реально состоять и из нескольких строк; место, где кончается одна строка и начинается другая, обозначается \n (конец строки воспринимается просто как пробел и не означает конца строки в ind - файле);
  • если в строковую константу должны входить символы \ или ", то их надо обозначать \\ и \" соответственно, а все остальные символы набираются непосредственно.

Параметр postamble определяет, что записывается в конец ind - файла. По умолчанию это

"\n\n\\end{theindex}\n"

(иными словами: начать с новой строки, одну строку пропустить, написать \end{theindex}, строку закончить).

Следующие три параметра определяют, чем отделяются номера страниц от ключевых слов: "delim_0" — для ключевых слов "верхнего уровня", "delim_1" и "delim_2" — для слов первого и второго уровня подчинения. По умолчанию все три этих параметра определены как ", "(запятая и пробел), вследствие чего номера страниц отделяются от слов запятыми. В русских текстах эти запятые ставить не принято, поэтому все три этих параметра стоит переопределить на "":

\begin{Example}
\verb?delim_0 ""?\\
\verb?delim_1 ""?\\
\verb?delim_2 ""?
\end{Example}

Параметр "group_skip" определяет, что записывается в ind - файл между группами слов, начинающихся на одну букву. Значение по умолчанию - "\\n\n \\indexspace\n" (" пропустить строку, написать слово \indexspace и начать с новой строки").

Перед каждой группой терминов, начинающихся с новой буквы, можно (как это и сделано в указателе к книге, которую вы держите в руках) напечатать на отдельной строке эту букву. Для этого в стилевом файле надо написать

headings_flag 1

При этом буквы будут напечатаны тем же шрифтом, что и остальной текст указателя. Чтобы шрифт был другим, надо в стилевом файле определить параметры heading_prefix и heading_suffix. Первый из них определяет, какой TeX'овский текст запишется в ind - файл перед буквой, второй — что запишется после буквы. Если, например, нужно, чтобы шрифт, которым печатаются буквы-заголовки, имел размер \large и был полужирным, то можно написать

heading_prefix "{\\normalfont\\large\\bfseries "
heading_suffix "}"

(вспомните, что для получения символа \ надо написать \\; пробел после bfseries необходим, чтобы в ind-файле имя команды не слилось с последующей буквой).

Если в указателе присутствуют термины, начинающиеся с символа, не являющегося буквой, то они будут выделены в отдельную группу; если в стилевом файле написано headings_flag 1, то перед этой группой будет напечатано слово Symbols. Если вас это не устраивает, надо в стилевом файле определить строковую константу symhead_positive. Если, например, написать

symhead_positive ""

то перед этой группой вообще никакого заголовка не будет; если хотите, чтобы вместо Symbols был другой заголовок, напишите вместо "" этот заголовок (в двойных кавычках, разумеется).

Если программы makeindex нет

Теперь рассмотрим вторую возможность — как самостоятельно обработать автоматически созданный с помощью LaTeX'а полуфабрикат предметного указателя.

Если не писать самостоятельно программу для обработки idx-файлов, то можно, по крайней мере, сделать следующее.

Во-первых, надо отсортировать строки idx-файла (средствами текстового редактора, например). После этого остается проблема, что делать с командами \indexentry. После того, как вы отсортируете idx - файл (и сохраните, для надежности, отсортированный файл под другим именем, скажем, myindex.tex), надо определить команду \indexentry таким образом, чтобы она делала ту же работу, которую призван делать \item. Для этого надо написать в преамбуле следующее:

\newcommand{\indexentry}[2]{item #1 #2}

После этого TeX будет воспринимать каждую запись вида

\indexentry{Кошки}{5}

так же, как если бы вместо этого было написано

\item Кошки 5

и можно будет просто написать в конце документа

\begin{theindex}
\input{myindex.tex}
\end{theindex}

Пока что воспринимайте этот рецепт чисто догматически; по прочтении "Создание новых команд" , в которой подробно рассмотрен процесс определения новых команд, вы поймете, почему этот рецепт работает.

Нина Казачек
Нина Казачек
Василий Майоров
Василий Майоров