TeX

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 23:19, 25 мая 2017.
TeX
TeX logo.svg.png
1024px-Texniccenter.png
Разработчики: Дональд Кнут
Выпущена: 1978
Постоянный выпуск: 3.14159265 / январь 2014
Состояние разработки: Поддерживается
Написана на: Изначально WEB
Операционная система: Кроссплатформенное
Локализация: TeX
Тип ПО: Компьютерная вёрстка
Лицензия: Пермиссивная
Веб-сайт http://tug.org

TEX — представляет собой машинно-независимый язык форматирования полиграфических документов. Автор TEX’а, профессор Станфордского университета США Дональд Кнут, определяет TEX как “инструмент для превращения набранного компьютерным образом манускрипта в документ, полиграфическое качество которого сопоставимо с тем, что дают самые современные печатающие устройства”.[1]

История системы TEX

Дональд Кнут создал TEX для того, чтобы издать в хорошем качестве свою очередную книгу. Главным отличием системы от конкурентов на момент создания была возможность высококачественной разметки математических формул. По мере совершенствования системы в неё были добавлены лучшие алгоритмы, реализованные учениками Кнута:

  • Алгоритм вёрстки абзацев в TEX превосходит по визуальному качеству текста жадный алгоритм, используемый в большинстве остальных систем
  • Алгоритм разбиения на страницы: TEX разбивает текст на страницы так, чтобы абзацы и плавающие вставки были расположены оптимальным образом. При этом изменяются вертикальные интервалы между элементами
  • Специально для TEX был разработан алгоритм расстановки переносов, подходящий для большинства естественных языков

Большое количество положительных черт в системе TEX привело к тому, что многие идеи были переняты конкурентами:

  • Фирма Design Science сделала редактор формул Math Type, пытающийся повторить соответствующую функциональность TEX.
  • Урезанная версия этой программы, названная Equation Editor, является стандартным средством набора формул в Microsoft Office (в 2007-м году Microsoft предложила собственный инструмент набора формул)
  • Microsoft Word 2007, наконец, научился сжимать пробелы в абзаце (а не только растягивать). Естественно, алгоритму Word ещё далеко до алгоритма TEX, перебирающего все возможные варианты разбиения абзаца с использованием методов динамического программирования.
  • Алгоритм расстановки переносов TEX перекочевал во многие системы обработки текста (особенно в те, что с открытым исходным кодом)

Вёрстка текста

TEX рассматривает текст, как набор взаимно вложенных прямоугольных блоков, между которыми расположено растяжимое пустое пространство («клей»). Каждый блок имеет вертикальный или горизонтальный режим:

  1. Содержимое блоков, имеющих вертикальный режим, раскладывается по вертикали. Такие блоки могут разбиваться на страницы
  2. Содержимое блоков, имеющих горизонтальный режим, раскладывается по горизонтали. Такие блоки могут разбиваться на строки

Например, документ состоит из блоков-абзацев, которые располагаются вертикально друг под другом, и разбиваются на страницы. Абзац — это блок с горизонтальным режимом, разбитый на строки. Кроме того, имеются «плавающие вставки» — блоки, которые TEX может произвольно располагать на страницах. Используются для вставки таблиц и рисунков

Фундамент форматирующего инструмента TEX

Фундамент форматирующего инструмента TEX образуют более 300 команд примитивов (Около трех сотен встроенных в программу TEX команд, неразложимых на более простые функциональные компоненты). Примитивы осуществляют операции нижнего уровня, неразложимые на более простые функциональные компоненты. На основе примитивов можно строить макрокоманды, которые могут иметь параметры и включать другие макрокоманды]. Совокупность макрокоманд, подчиненных общим функциональным целям, объединяются в макронадстройки.

Виды макронадстроек

Plain TEX

Первая макронадстройка TEX’а, данная Дональдом Кнутомв качестве принятого по умолчанию формата подготавливаемых публикаций, называется Plain TEX и содержит приблизительно 600 макрокоманд. Эти макрокоманды определяют типы и размеры шрифтов заголовков и основного текста, высоту и ширину страниц, промежутки между строками и между абзацами, отступ на первой строке абзаца, тип нумерации страниц (числа римские или арабские) и многое другое. Формат Plain TEX есть стартовая точка для построения практически всех новых макронадстроек. Большинство его макроопределений настолько фундаментальны, что как правило включаются в другие макронадстройки без каких-либо модификаций.

LaTEX

LaTEX — макронадстройка TEX’а, предназначенная для автоматизации подготовки к публикации научно-технических документов стандартных типов. К стандартным типам документов относятся статьи, доклады, книги и деловые письма. Первая версия LaTEX’а появилась в 1985 году. Автор ее — Лесли Лампорт. Концепцией LaTEX’а является идея стиля документа, которая реализуется выбором надлежащего базового стиля и группы корректирующих стилей, дополняющих базовый. Система команд LaTEX’а имеет форматы, отличные от форматов команд TEX’а. Команды LaTEX’а более стандартизованы и поэтому проще в использовании. Большинство команд реализует цельные процедуры верстки, позволяя пользователю не вникать в весьма непростые детали этих процедур.

AMS-TEX

Еще одной важной макронадстройкой является AMS-TEX. Это программное обеспечение разработано и поддерживается Американским математическим обществом. Оно содержит средства подготовки публикаций в стандартах, принятых в американских математических журналах. AMS-TEX располагает великолепной коллекцией шрифтов, в том числе кириллических с своеобразными лигатурами. Украшением этой коллекции служат математические шрифты, уникальные по количеству и разнообразию представленных в них символов. Эта макронадстройка имеет вариант, совместимый с макронадстойкой LaTEX.

Формат команд TEX’а

Формат команд TEX’а имеют параметры стиля — команды LaTEX’а, используемые для построения файлов описания стиля, но которые пользователь может переопределять в собственном документе.
Формат команд TEX’а следующий.

Команды начинаются ключевым символом \ и имеют имена, состоящие только из букв. За именем команды могут следовать аргументы и параметры. Аргумент задается или числом, или последовательностью символов. Если в команде требуется числовой аргумент, он приравнивается имени команды. Знак равенства не является обязательным, его обычно включают для наглядности. Число может быть выражено безразмерной или размерной величиной или командой, которой уже присвоено некоторое значение. Не все аргументы являются обязательными. Параметром команды как правило является фрагмент текста. Признаком конца команды без аргументов и параметров является не буква. Этот символ будет воспринят как начало фрагмента текста, следующего за командой. Если это пробел, он игнорируется, и в этом случае может понадобиться вставка обязательного пробела. Если выдается несколько команд подряд, разделителем служит символ \. TEX различает строчные и прописные буквы.
команды

Построение макрокоманд средствами TEX’а

TEX имеет более мощные и гибкие средства для введения макрокоманд. Макрокоманды, описанные в файле Plain TEX и в TEXbook’е, являются развиваемыми, они очень эффективны и остроумно используют многие аспекты языка примитивов.
Процедура написания макрокоманд на TEX’е достаточно сложная. Отладка макрокоманд также чревата проблемами, т.к. TEX в большой степени является интерпретируемым языком: ошибка в макрокоманде не может быть обнаружена, пока макрокоманда не используется. Макрокоманда есть совокупность сгруппированных команд и фрагментов текста, объединяемых общим названием. Введение в исходный текст этого названия вызовет исполнение всех команд данной макрокоманды и вставку всех определенных в ней фрагментов. Если внутренние команды включают параметры, макрокоманда строится так, чтобы при вызове ее можно было задать все требуемые параметры. Команда определения макрокоманды содержит имя, названия параметров, если они нужны, и тело макрокоманды, причем названия параметров в командах тела макрокоманды должны совпадать с теми, что заданы при имени макрокоманды. Поскольку с помощью названий в этих командах лишь фиксируются положения параметров, принято говорить, что определение макрокоманды может включать формальные параметры. Команда вызова макрокоманды есть введение ее имени и фактических значений параметров. При исполнении макрокоманды эти значения будут подставлены вместо соответствующих формальных параметров, и, таким образом, будет выполнена именно требуемая конкретная последовательность команд.

Простейшая форма определения макрокоманд в TEX’е следующая:

\def\<имя>#1#2...{........#1.....#2.......}

<Имя> есть название, присвоенное макрокоманде, уникальное в наборе макрокоманд. Символ # и последующее число задают формальное название параметра (их может не быть или быть не более 9). Группирующие скобки содержат фрагмент, подставляемый в документ в месте указания в нем данной макрокоманды.

Интересные факты о TEX

  • Для написания TEX Дональд Кнут создал концепцию «литературного программирования», заключающуюся в генерации документации и исходного кода программы по тексту, язык которого близок к естественному языку
  • Начиная с версии 3.0 номер версии TEX асимптотически приближается к числу π (текущая версия 3,1415926). Такая нумерация отражает всё более незначительные изменения, вносимые в исходный код. После смерти Кнута TEX получит версию π, и все ошибки будут считаться особенностями
  • Дональд Кнут предлагает денежное вознаграждение тем, кто найдёт ошибки в системе TEX. Начальная сумма была равна $2,56 за ошибку, и удваивалась каждый год, пока не достигла $327,68

См. также

  • CTAN — архив документации и программного обеспечения для TeX
  • TUG — группа пользователей TeX’а

Источники

  1. Руководство для пользователей. И.А.Грицаенко, С.В.Клименко [Электронный ресурс]: LaTEX. Руководство для пользователей. 07.03.2017. Режим доступа:http://www.tex.uniyar.ac.ru/doc/ltus1.pdf