Лекция 6 Аппарат издания (ссылки, оглавление, индексы) Библиографические ссылки • На прошлой лекции я говорил о том, что список литературы формируется внутри обстановки thebibliography. Каждое библиографическое описание оформляется на первый взгляд произвольно (на самом деле есть очень жесткие правила, в разных странах и разных изданиях различные, но нам это сейчас не существенно). Единственное ТеХ-овское ограничение заключается в том, что каждое описание начинается с команды \bibitem{…}, у которой в скобках написан ключ – условное имя этого описания. Этот ключ можно (и нужно) использовать при ссылках на данное издание в тексте, с помощью команды \cite{…}. • ТеХ заменяет описания и ссылки одинаковыми номерами (хотя иногда описания не нумеруются, а особым образом кодируются, – этот вопрос лучше сейчас не рассматривать). Для нас главный вопрос – как при характерной для ТеХа однопроходной обработки текста обеспечить согласованность номеров. Согласование номеров ссылок • Для согласования ТеХ создает и использует специальный файл с расширением .aux (который используется и для других целей). Каждое вхождение команды \bibitem в разделе библиографии формирует строку в этом файле, такого типа • • • • \bibcite{AVL}{1} \bibcite{AndrFal}{2} \bibcite{4Russians}{3} \bibcite{Gribov}{4} • Файл, сохранившийся от предыдущей обработки текста, читается и по мере сил используется при следующей обработке, которая, конечно создает свежий вариант этого файла. Если старый и новый вариант не совпали, ТеХ предупреждает пользователя о несовпадении. • Ссылки, не имеющие описаний, отмечаются знаком ? и информацией в протоколе обработки. Метки в тексте • Часто хочется делать в тексте перекрестные ссылки – отправлять читателя к какому-то месту в прошлом или будущем тексте. Такие ссылки могут указывать на страницу текста или на нумерованный объект – раздел текста, упражнение, рисунок, таблицу, формулу или теорему (или что-то еще). Все такие ссылки организуются по такому же принципу, как библиографические ссылки. • В нужном (упоминаемом) месте командой \label{key} ставится метка с именем key. В любом месте текста на эту метку можно сослаться. При этом команда \pageref{key} воспроизводит номер страницы, на которой находится ссылка, а команда \ref{key} воспроизводит номер объекта. Таким образом, можно писать • В теореме \ref{t:Euler} на стр. \pageref{t:Euler} было установлено, что . . . Информация о метках • Информация о метках передается, как уже говорилось, через файл .aux отдельными строками вида • \newlabel{prikr}{{8.9}{200}} • \newlabel{Kruskal}{{8.4}{202}} • Последнее число – всегда номер страницы, а перед ним – номер объекта, который зависит от типа объекта; автор должен сам разбираться, раздел это, формула или что-то еще. • Источником информации для этих данных является команда \refstepcounter, с которой мы уже встречались. Эта команда вызывается обычно командами, изменяющими счетчики: • \chapter – заголовок главы • \section – заголовок параграфа • \subsection – заголовок подпараграфа. • Об этих командах нам еще предстоит много говорить. Рубрикация текста • В файле .aux есть еще и такие строчки • \@writefile{toc}{\contentsline {chapter}{\numberline {1.}Некоторые определения из теории множе\IeC {\cyrs }\IeC {\cyrt }\IeC {\cyrv }}{6}} • \@writefile{toc}{\contentsline {section}{\numberline {1.1.}Основные определения}{6}} • \@writefile{toc}{\contentsline {section}{\numberline {1.2.}Прямое произведение}}{7}} • \@writefile{toc}{\contentsline {section}{\numberline {1.3.}Разбиения}{9}} • \@writefile{lof}{\contentsline {figure}{\numberline {1.1}{\ignorespaces На левом рисунке разбиение крупнее чем на правом.}}{10}} Рубрикация (продолжение) • На самом деле русских букв там нет, они закодированы: • \@writefile{toc}{\contentsline {chapter}{\numberline {1.} \IeC {\CYRN }\IeC {\cyre }\IeC {\cyrk }\IeC {\cyro }\IeC {\cyrt }\IeC {\cyro }\IeC {\cyrr }\IeC {\cyrery }\IeC {\cyre } \IeC {\cyro }\IeC {\cyrp }\IeC {\cyrr }\IeC {\cyre }\IeC {\cyrd }\IeC {\cyre }\IeC {\cyrl }\IeC {\cyre }\IeC {\cyrn }\IeC {\cyri }\IeC {\cyrya } \IeC {\cyri }\IeC {\cyrz } \IeC {\cyrt }\IeC {\cyre }\IeC {\cyro }\IeC {\cyrr }\IeC {\cyri }\IeC {\cyri } \IeC {\cyrm }\IeC {\cyrn }\IeC {\cyro }\IeC {\cyrzh }\IeC {\cyre }\IeC {\cyrs }\IeC {\cyrt }\IeC {\cyrv }}{6}} • Я для простоты перекодировал в нормальные буквы все, кроме маленького синего фрагмента. Что же значат эти строчки? • Выпишем снова строчки примера, почти удалив тексты. • \@writefile{toc}{\contentsline {1.}Неко. . .}{6}} • \@writefile{toc}{\contentsline {1.1.}Основ. . .}{6}} • \@writefile{toc}{\contentsline {1.2.}Прям. . .}}{7}} • \@writefile{toc}{\contentsline {1.3.}Разб. . .}{9}} • \@writefile{lof}{\contentsline {1.1}{\ignorespaces На ле. . . {chapter}{\numberline {section}{\numberline {section}{\numberline {section}{\numberline {figure}{\numberline ом.}}{10}} Команда \@writefile{fn}{txt} • Мы ясно видим команды, очевидно, записи в файл, у которой первый параметр – это условное имя файла, а второй параметр – записываемая строка. Например, две последние строки: • \@writefile{toc}{\contentsline {section}{\numberline {1.3.}Разб. . .}{9}} • \@writefile{lof}{\contentsline {figure}{\numberline {1.1}{\ignorespaces На ле. . . ом.}}{10}} • Первая строка записывается в файл с расширением toc, а вторая в файл с расширением lof. А еще есть файл lot. Это аббревиатуры для • table of contents • list of figures • list of tables Файлы аппарата книги • Перечисленные на предыдущем слайде файлы создаются при завершении работы над документом. Условием их создания является наличие в документе соответствующих команд (соответствие очевидно): • \tableofcontents • \listoffigures • \listoftables • Сами по себе эти команды вызывают построение в месте, где находятся команды, соответственно оглавления, списка рисунков и списка таблиц. Файлы toc, lof и lot дают для них необходимую информацию. Поэтому, очевидно, • Для построения оглавления и пр. используются файлы предыдущего пропуска. • Форматирование оглавления и пр. определяется не файлами данных, и изменяется дополнительно. Список упражнений • Посмотрим, что я должен был бы сделать, если бы захотел иметь список упражнений по аналогии с уже названными стандартными списками. • Мне была бы нужна команда \listofexercises (название очевидно, и менять его было бы неправильно), которая читает файл с расширением (каким? Тоже естественно) .loe и переводит содержимое этого файла в нужную форму. • Кроме того, файл нужно готовить. Имеется команда записи в файл, имеющая формат • \addcontentsline{ext}{key}{entry} • В нашем случае в качестве ext мы должны записать loe, в качестве key любое слово (оно используется при формировании оглавления для определения типа записи, а в упражнениях все записи равноправны), в entry поля с номером и страницей. Список упражнений (продолжение) • Команду \listofexercises нужно писать по аналогии с \listoftables, которую можно найти в описаниях стилей ТеХа • \newcommand\listoftables{% сделаем \listofexercises • \section*{\listtablename\@mkboth% • {\MakeUppercase\listtablename}% • {\MakeUppercase\listtablename}}% • \@starttoc{lot}} % сделаем loe • \let\l@table\l@figure • Ясно, что здесь нужно ввести команду (прямо и введем) • \newcommand\listexercisename{Список упражнений} • и заменить копирование команды для строки списка \let\l@exercise\l@figure Список упражнений (самое трудное) • Я не смог быстро написать самое трудное место – подготовку файла для списка упражнений при закрытии документа. На этом я свой пример и закончу. Снова про команды рубрикации • • • • • • • • • Я уже упоминал команды \chapter \section \subsection К ним еще нужно добавить команды \part – заголовок части \subsubsection – заголовок подпункта \appendix – заголовок приложения. Все эти команды имеют соответствующие им счетчики, образующие естественную иерархию. Они готовят данные для ссылок и для оглавления, а также, что очень важно, для так наз. колонтитулов – специального оформления страницы. Вариант команд рубрикации с * • У каждой из перечисленных команд рубрикации есть вариант со знаком *, например, кроме команды \section есть команда \section*. При ее использовании не вырабатывается и не изменяется номер (в данном случае параграфа), и информация о заголовке не поступает автоматически в оглавление. Если такая информация требуется, ее нужно добавить так, как это описывалось раньше. • Не меняются автоматически и колонтитулы. Но этот вопрос мы отложим на более позднее время, о колонтитулах нужно говорить еще много.