Макропакеты и форматы
Если получить программу TeX из кнутовского исходного текста (то есть перевести псевдокод в Pascal или C, а затем скомпилировать), то использовать полученную программу (" чистый TeX" — по-английски говорят еще "virgin TeX") для обработки текстов будет еще невозможно: чистый TeX не знает смысла ни спецзнаков2), ни макросов. В него встроены только "примитивные команды" (стр. 240).
Стало быть, прежде чем использовать TeX для дела, его надо обучить смыслу тех многочисленных макросов, которые используются в реальных tex-файлах. Набор TeX'овских макросов, используемый для обработки текстов, называется макропакетом. С одним из TeX'овских макропакетов вы уже неплохо знакомы: это тот самый LaTeX, которому посвящена вся эта книга.
Как же TeX узнает определения макросов из используемого вами макропакета? Ответ таков. Среди известных чистому TeX'у примитивных команд есть и команда, предназначенная для определения макросов (чем-то похожая на известные вам \newcommand и \renewcommand); если перед началом файла с текстом и формулами, который вы хотите обработать, приписать "исходный текст макропакета" — список всех используемых в макропакете (скажем, том же LaTeX'е) макроопределений — и передать полученный файл для обработки программе TeX, то TeX сначала узнает смысл используемых вами макросов, а к моменту начала собственно текста будет уже "во всеоружии" и благополучно создаст нужный вам dvi-файл.
На практике, однако, так никогда не делается: макропакеты имеют достаточно большой размер, и обработка их TeX'ом даже на современных компьютерах происходит не мгновенно, а уж в конце семидесятых годов потери времени при работе по такой схеме были бы совершенно неприемлемы. Поэтому Кнут применил в этом месте следующую оптимизацию: при установке TeX'а для работы с каким-то макропакетом TeX считывает исходный текст этого макропакета и записывает содержимое своих внутренних таблиц в специальный файл, называемый форматным; при запуске для работы с текстом TeX предварительно считывает информацию о макросах, содержащуюся в макропакете, из форматного файла (или попросту " формата", как иногда говорят), что существенно быстрее, чем всякий раз обрабатывать исходный текст макропакета заново.
(Строго говоря, сказанное в предыдущем абзаце не вполне соответствует действительности. Использование файлов формата — не только оптимизация, поскольку таблицы переносов, необходимые для верстки абзацев, могут быть обработаны TeX'ом только на стадии генерации форматного файла.)
Первый макропакет написал одновременно с программой TeX сам Кнут: это пакет Plain TeX, который также описан в книге [2].
Следующим после Plain TeX'а макропакетом, получившим распространение, стал AMS-TeX, созданный Майклом Спиваком (Michael Spivak). По сравнению с Plain TeX'ом в него были добавлены удобные средства для набора сложных формул, особенно многострочных. Подчеркнем, что всех AMS-TeX'овских эффектов можно добиться и в Plain TeX'е — возможности TeX'а новый макропакет расширить не может, — но там это требует громоздких записей и довольно серьезного знания TeX'овских внутренних механизмов; Спивак создал для этих целей удобные сокращенные обозначения (то есть макроопределения!), которыми математики стали с удовольствием пользоваться (и до сих пор пользуются).
В 1984 году Лесли Лэмпорт (Leslie Lamport) создал макропакет LaTeX (его заключительная версия, вышедшая в 1989 году, называется LaTeX 2.09). Возможно, одной из важнейших новых черт LaTeX 'а явилась возможность автоматической нумерации и — главное — автоматической генерации ссылок с помощью команд \label, \ref и \pageref. Достижение этого эффекта средствами Plain TeX'а требует весьма изощренного программирования.
Наконец, в 1995 году появилась новая версия LaTeX'а, а именно тот самый LaTeX, описанию которого посвящена вся эта книга. Одним из первоначальных толчков к коренной переработке LaTeX'а было желание включить в него возможности AMS-TeX'а, в частности, возможность пользоваться символьными шрифтами Американского математического общества (в "старом" LaTeX'е добавлять новые шрифты сверх стандартного комплекта было довольно неудобно). В настоящее время поддержкой и совершенствованием системы LaTeX занимается группа TeXнологов (Frank Mittelbach, Michel Goossens и другие); после первоначального периода быстрых изменений LaTeX практически стабилизировался, хотя раз в год и выходит новая версия.
Подведем предварительные итоги: при практической работе программу TeX запускают не просто так, но с указанием форматного файла, соответствующего используемому макропакету; форматные файлы генерируются при установке TeX'а из исходных текстов макропакетов. Отметим еще, что исходные тексты макропакетов переносимы между платформами (DOS, Linux и т.п.), а форматные файлы зависят от реализации TeX'а.