Современная TEXнология
АрхивПрошло уже более двадцати лет с тех пор, как профессор Стэнфордского университета Дональд Э. Кнут сделал общедоступной свою систему для подготовки научных публикаций TEX.
Прошло уже более двадцати лет с тех пор, как профессор Стэнфордского университета Дональд Э. Кнут сделал общедоступной свою систему для подготовки научных публикаций TEX1. Но ее популярность продолжает расти и сегодня. Например, число посетителей главного TEX-сайта Великобритании www.tex.ac.uk за последние семь лет (с 1996-го по 2002-й) увеличилось в десять раз, достигнув более миллиона в месяц.
Значительная часть современных научных трудов по математике, физике, программированию и некоторым другим создается на TEXе. Хотя TEX используется прежде всего в научных кругах — это универсальная система, сложность которой, однако, делает ее практически недоступной для среднестатистического пользователя. Но для последнего есть широкий выбор возможностей: Microsoft Word, Sun Star Writer, AbiWord для Linux… Относительно редкая частота использования TEX для научных публикаций в России свидетельствует о незнании возможностей этой системы, во многом идеальной для своей области применения. Официальный российский TEX-сайт www.cemi.rssi.ru/cyrtug влачит жалкое существование — он давно не обновлялся, и с начала 1998 года по начало нынешнего его посетили только около 27 тысяч раз. А ведь TEX произносится не как «текс», а именно как «тех», то есть «по-русски».
По сравнению с программами, подобными текстовому процессору Microsoft Word, от нелицензионной копии которого автор отказался более пяти лет назад, TEX-система не тешит пользователя иллюзиями, что сложные проблемы можно решить просто, она дает полный контроль над обстановкой, имеет открытые и несложные для машинной обработки форматы данных, позволяет максимально быстро и качественно вводить математические формулы и, будучи созданной и развиваемой учеными в процессе работы над конкретными проектами, обеспечивает базу для здоровой научной прагматики.
Здесь стоит привести официальное мнение пользователей TEX из США (цитата из документа «Just What Is TEX?» главного сайта TUG — TEX Users Group). «Вопрос использования TEX может послужить основанием для религиозных войн, так как те, кто использует его возможности для подготовки математических книг и статей, считают, что никакое сочетание других имеющихся средств не сможет обеспечить производство высококачественных полиграфических изданий при их подготовке самим автором. Мы с радостью предоставим материал для проверки тому, кто захочет доказать обратное. (Пользователей TEX относительно мало, и их проблемы слишком сложны, поэтому Microsoft, Quark или Adobe не проявляют заинтересованности.) С другой стороны, если вам нужно средство для создания газеты, книги-романа, эффектного объявления или письма тете Генриете, то, если вы не используете его для чего-нибудь еще (скажем, диссертации), это средство не для вас».
В силу того, что любая TEX-система очень сложна (едва ли найдется хоть один человек, который знает все возможности ее современных вариантов) и состоит из большого числа разнотипных компонентов, беглое знакомство с которыми требует нескольких лет ее интенсивного использования, начинающим важно получать консультацию опытных TEXнологов и иметь под рукой всю необходимую литературу, большая часть которой доступна только на английском. Но не все так драматично: если использовать правильно сконфигурированный, наиболее популярный пакет LATEX, то новичку понадобится лишь минимальная стартовая поддержка, частью которой может послужить эта статья.
Ее история
Однажды, во второй половине 1970-х, Дональд Кнут получил гранки второго тома своего многотомника «Искусство программирования для ЭВМ», посмотрел их и сказал что-то похожее на «хех!». Это была реакция на первые образцы новой компьютерной полиграфии, качество которой было настолько низким, что он решил отказаться от издания с ее использованием. Подумав немного, он сказал приблизительно следующее: «Я ученый-компьютерщик. Я должен что-то сделать с этим». Это «что-то» превратилось в разработку системы, которая дает все возможности настоящей типографии кроме ощущения, может быть, запаха краски. Кнуту пришлось изучить традиционные типографские методы для качественной печати математических формул и подходы к разработке рисунков знаков, так как нужных шрифтов не существовало. Он предполагал, что на все про все ему понадобится полгода. Однако для завершения работы понадобилось почти десять лет и значительная помощь других специалистов.
Приблизительно через год после начала работы Американское математическое общество пригласило Кнута прочитать лекцию на свободную тему, возможно, лишь косвенно связанную с чистой математикой. Он решил говорить о компьютерных науках на службе математики и представил основы своих новых разработок TEX и METAFONT2 (средство создания шрифтов для TEX). Тогда же был отмечен ряд привлекательных свойств TEX:
- он предназначается для прямого использования авторами, которые точно знают, что им нужно;
- он пришел из академического источника;
- за него не нужно платить деньги (математики традиционно небогаты — карандаш, бумага, мел и доска — вот и все их исследовательские приборы до появления систем компьютерной алгебры);
- его входные и выходные данные одинаковы для компьютеров разных архитектур.
Работая над своими книгами, Кнут имел дело со всеми тонкостями академических публикаций: сносками, вставками и т. п. Ему пришлось создать язык описания документа, пригодный не только для компьютера, но и для обмена информацией между людьми, и использовал алгоритмы для форматирования текста, которые до сих пор никто не смог улучшить.
Изначально в TEX использовалось
7-разрядное кодирование, но с 1990 года используется 8-разрядное, обеспечивающее работу с документами, содержащими фрагменты на нескольких языках, что сделало его, в частности, весьма популярным в восточной Европе.
Кнут обещает вознаграждение всякому, нашедшему ошибку в его программах (TEX и METAFONT) и соответствующих им пяти книгах [2–6]. Текущая цена ошибки — $327,68.
Состав и структура
Фундаментальные компоненты любой TEX-системы — это программы tex (собственно TEX), mf (METAFONT), bibtex (BibTEX), mpost (MetaPost) — их исходники на языке литературного программирования WEB (транслируется в Паскаль и затем, если нужно, в C++ перед компиляцией) свободно доступны в CTAN (/systems/knuth). Используя WEB, можно получить одновременно программу и великолепную документацию к ней [3, 5].
TEX — это компилирующийся универсальный язык программирования. Энтузиасты даже написали на нем транслятор с Бейсика.
Алгоритм на TEX записывается с помощью средств, подобных препроцессору C++, то есть макроподстановок, условной трансляции, включения файлов и т. п., к которым добавлены возможности для работы с переменными и файлами, то есть можно организовывать ветвления и, используя рекурсивные макросы, циклы, но не переходы. Файловые операции включают в себя только последовательные чтение и запись. Синтаксически TEX-текст состоит из собственно текста, макросов и примитивных команд, причем последние внешне не различаются и выглядят, за исключением нескольких особых случаев, как последовательности, начинающиеся со специального escape-символа, за которым следуют либо буквы, либо одиночный символ. В Plain TEX и LATEX escape-символом является знак обратной наклонной черты \ (backslash), а в Texinfo — @. Макросы не обязательно вызывать явно — они могут вызываться сами в определенных контекстах, подобно конструкторам/деструкторам C++ или процедурам-демонам фреймовых систем.
TEX имеет 256 регистров для хранения каждого из множества типов данных для работы со специфически полиграфическими объектами, то есть наборных коробок для шрифтов, различных видов заполнителей вертикальных и горизонтальных промежутков и т. п. В TEX имеется также 256 целочисленных регистров (для чисел из диапазона от –231 до 231) и столько же регистров для хранения размеров до 5,7 метра с точностью до 54 нанометров. Оба типа регистров отличаются только назначением и совместимы по присваиванию. С размерами и числами можно использовать четыре обычные арифметические операции. Однако TEX дает возможность использовать гораздо больше 256 переменных каждого типа. Дело в том, что числом 256 ограничивается только число переменных в одной области программы, а областей может быть много: одна, глобальная, есть всегда, и можно сделать нужное число локальных, образуемых простым их заключением в фигурные скобки. Кроме того, локальные области могут вкладываться друг в друга. Ситуация очень похожа на использование фигурных скобок в C++. Есть в TEX и 256 логических регистров, и регистры для хранения разного рода специальной информации. Работа с логическими выражениями реализована по минимуму. Нет, например, операции отрицания.
Недостатком TEX является отсутствие средств для вызова других программ. Например, при подготовке указателей к книге список строк нужно отсортировывать. Выполнять сортировку средствами самого TEX слишком громоздко и неэффективно. Гораздо лучшим решением было бы вызвать внешнее средство сортировки, например, программу sort, но это невозможно сделать изнутри TEX-программы. На практике подобные задачи решаются двумя прогонами TEX, между которыми используются внешние средства.
Дополнительная информация об оформлении или структуре простого текста (plain text) вносится в него при помощи разметки текста (markup). TEX после подключения макроопределений задает разметку текста входных документов. Различают физическую (или процедурную) и логическую разметки.
При физической разметке точно указывается, что нужно сделать с выбранным фрагментом текста: показать курсивом, приподнять, центрировать, сжать, подчеркнуть и т. п. При логической разметке указывается структурный смысл выбранного фрагмента: примечание, начало раздела, конец подраздела, ссылка на другой фрагмент и т. п.
Логическую разметку всегда можно преобразовать в физическую, используя выбранный стиль. Имея наборы документов в логической разметке, можно придавать им при печати наиболее привлекательный вид, своевременно получая от специалистов-дизайнеров новейшие стили. Преобразование физической разметки в логическую формальными средствами практически невозможно.
Макропакеты Plain и Eplain TEX задают процедурную разметку, а LATEX, ConTEXt и Texinfo — логическую.
METAFONT используется для создания высококачественных растровых (bitmap) шрифтов. Шрифты для него описываются на специальном языке со значительной долей декларативности в семантике: рисунки знаков задаются, как правило, системами уравнений, решаемых автоматически. Шрифты на этом языке — масштабируемые, растр знаков создается для конкретных устройств вывода, но не интерпретацией в реальном времени, как для шрифтов Adobe PostScript или TrueType, а предварительной компиляцией, то есть METAFONT — это еще и растеризатор (raster image processor, RIP). Компиляция позволяет описывать сколь угодно сложные формы и проводить высококачественную растеризацию с коррекцией, но плата за это — время. Результат работы METAFONT — это не только двоичные матрицы для символов в файле формата pk (packed), но и файл метрик шрифта формата tfm (TEX font metric), в котором описываются размеры каждого символа шрифта. Кнут «заморозил» развитие METAFONT, из-за чего у этой программной системы, имеющей возможности для развития и модификации не меньшие, чем сам TEX, практически нет вариантов.
BibTEX — система, разработанная к концу 1980-х Ореном Поташником, для удобной работы с библиографией в TEX-документах [7]. Она является примером системы, задачи которой не могут быть решены простыми средствами.
В первой половине 1990-х Джоном Д. Хобби из AT&T создал MetaPost — последний в серии необходимых компонентов любой TEX-системы. Эта программа используется для подготовки графических иллюстраций. Она практически идентична METAFONT и отличается от него лишь тремя деталями:
- создает не растровые картинки, а масштабируемые в формате PostScript, поэтому;
- не имеет возможностей для растеризации;
- не имеет встроенных возможностей для показа рисунков знаков на экране. Ее можно использовать для преобразования шрифтов METAFONT в шрифт Adobe Type 3. Возможности MetaPost во многом превзошел созданный к 1998 году графический макропакет Xy-pic.
Упрощенно взаимосвязи основных компонентов классической TEX-системы представлены на схеме, из которой видно, что помимо собственной системы шрифтов можно использовать масштабируемые шрифты Adobe Type 1 и 3, а также TrueType. Использование в TEX фирменных шрифтов осложнено тем, что в них часто не определен полный диапазон нужных знаков. Остроту последней проблемы во многом снимают виртуальные шрифты, позволяющие объединять в себе знаки из разных шрифтовых файлов и задавать нужную кодировку. Программа Dvips обеспечивает подключение к TEX возможностей языка PostScript, которые значительно превосходят возможности языка dvi-файлов3 Д. Кнута, а программа Ghostscript (gs) позволяет печатать ps-файлы на не-PostScript-принтере, а также конвертировать их в другие форматы, например в pdf или растровые картинки. Работа с масштабируемыми не-mf-шрифтами основана на Dvips и Ghostscript.
Возможности конкретной TEX-системы определяются подключаемым стандартным макропакетом. Кнут в своей книге «The TEX book» [2] описал макропакет Plain. В 1990-е Карл Берри и Стивен Смит значительно расширили его функции своим макропакетом Eplain (Expanded Plain), доведя их до уровня LATEX [7, 12]. Сам же LATEX Лесли Лэмпорта, появившийся еще в 1980-е и постоянно развивающийся, является самой значительной работой после той, которую проделал Кнут. К нему созданы сотни разнообразных стилей. Известный макропакет AMS-TEX [10, 12], созданный Американским математическим обществом, ныне является частью LATEX. Весьма интересным, появившимся в конце 1990-х, макропакетом является ConTEXt [8]. Он позволяет, в частности, создавать цветные интерактивные pdf-документы и печатать сложные химические структуры. Пока ConTEXt не поддерживает в полном объеме работу с текстами на русском. Особым макропакетом является Texinfo — это стандарт для ведения документации в GNU. Он позволяет из одного исходника получать как печатные издания, так и гипертекстовые документы GNU info или html.
Кроме базовых к любой TEX-системе можно подключать макропакеты для расширения ее отдельных возможностей. Среди них стоит отметить графические PiCTEX [11] и Xy-pic [9], интересный своим объектно-ориентированным языком описания рисунков, Babel — для поддержки работы с многоязычными текстами в LATEX и TreeTEX — для рисования бинарных деревьев. Есть также специальные макропакеты для нотной записи, описания принципиальных электрических схем, импорта графики и др.
Существуют программы-конверторы SGML, HTML и RTF в LATEX и TEX в HTML. Хотя идеальной средой для TEX является Unix, его варианты существуют практически для всех операционных систем, включая, конечно, Microsoft Windows и Mac OS.
Всего в каталоге CTAN4 насчитывается около 1200 документированных компонентов TEX. Кроме того, ряд программ доступны помимо CTAN.
Конкуренты,
перспективы и дистрибутивы…
Поскольку Кнут отказался развивать свои системы, в 1992 году началась реализация проекта NTS (New Typesetting System) с целью разработки системы, превосходящей TEX. В рамках проекта разрабатывается e-TEX. Работа идет очень медленно. Единственным заметным достижением стала возможность использования обычной математической нотации при расчетах, в частности в логических конструкциях.
Наиболее перспективными ныне являются разрабатываемые TEX-системы Omega (W) и PDFTEX. W значительно расширяет рамки ограничений классической системы, оставаясь максимально совместимой с нею. W позволяет использовать 16-разрядное кодирование, в частности Unicode, количество регистров каждого типа увеличивается до 65536, дает возможность работать с фрагментами текстов разной ориентации: европейской — слева направо и сверху вниз, арабской — справа налево и сверху вниз, японской — сверху вниз и справа налево, старомонгольской — сверху вниз и слева направо. Система PDFTEX может сохранять файлы в формате pdf вместо dvi и позволяет использовать дополнительные возможности этого формата (цвет, все типы шрифтов и шрифтовых манипуляций, интерактивность и прочее). Перспективными также являются разработки подключения TEX как заключительного звена к системам SGML и XML. Хотя нельзя не отметить, что в последние несколько лет разработка новых компонентов TEX несколько замедлилась.
Автор интенсивно использует TEX уже более семи лет, и системы WYSIWYG5 вызывают у него теперь лишь чувства, похожие на соблазн, который испытывает уставший человек, видящий удобную инвалидную коляску с мотором… Это мнение не бесспорно, поэтому для TEX существует ряд WYSIWYG-редакторов, лучшие из которых — LyX и TEXmacs, причем последний, по мнению его автора, позволяет сконцентрироваться именно на логической структуре текста, а не на визуальной.
В настоящее время используются еще две системы, во многом схожие с TEX, — это Troff и Lout. Первая является одной из самых древних средств компьютерной полиграфии, корни которой уходят в разработки AT&T конца 1960-х. Это весьма гибкая и мощная система, но крайне громоздкая и уже неразвивающаяся. Она применяется до сих пор, так как на ней написана большая часть документации к Unix — страницы руководства. Сейчас ее вытесняет Texinfo. Система Lout, созданная в 1990-е в университете Сиднея в основном Джеффри Х. Кингстоном, является потомком неудачливого конкурента TEX, системы Scribe Брайана К. Рейда. Она целиком основана на фундаменте языка PostScript, что до появления программ Dvips и особенно PDFTEX давало ей некоторые преимущества…
Есть несколько известных дистрибутивов TEX. Практически в каждом дистрибутиве Linux есть пакет teTEX, содержащий все необходимое. Можно заказать диски CD-ROM TEX-Live или Dante CTAN. Для MS-DOS и OS/2 есть хорошо зарекомендовавший себя дистрибутив emTEX. Для среды Microsoft Windows неплохим выбором будет либо дистрибутив MikTEX, либо fpTEX — версия teTEX. Есть еще дистрибутив BaKoMa TEX с улучшенной поддержкой русского языка. На Apple Macintosh можно использовать дистрибутив OzTEX. Перечислены только бесплатные или условно-бесплатные (shareware) программы.
Главный веб-сайт TEX — www. tug.org. На нем и на других сайтах CTAN есть поисковые серверы, используя которые, можно быстро найти необходимые файлы.
1 TEX — торговая марка Американского математического общества (American Mathematical Society).
2 METAFONT — торговая марка компании Addison Wesley Publishing.
3 dvi — Device Independent — мобильный бинарный формат для результата компиляции документа TEX.
4 CTAN — Comprehensive TEX Archive Network — полная сеть TEX-архивов, поддерживаемая более чем на шестидесяти ftp-серверах по всему миру, среди которых, например, ftp://ftp.dante.de/ tex-archive.
5 WYSIWYG — What Your See Is What Your Get — системы типа Microsoft Word, которые позволяют редактировать документ в виде, приближенном к напечатанному.
Литература |