Журнал LinuxFormat - перейти на главную

LXF83:LaTeX

Материал из Linuxformat
Перейти к: навигация, поиск
LaTeX

Листинги и текст на сайте автора

Содержание

LaTeX — компьютерная типография

Часть 1 Евгений Балдин начинает новую серию статей, посвященных LaTeX — истинной TeXнологии. Создание книг еще никогда не было таким интересным.

Человеческая цивилизация зависит от книг. Передача знаний от поколения к поколению это то, что делает человека разумным. Написание книги всегда было/есть/будет одним из самых сложных видов деятельности. LaTeX берет на себя техническую часть по подготовке рукописи, оставляя человеку больше времени на творчество, и, в тоже время, позволяя ему контролировать весь процесс создания от начала и до конца.

«Если кто-то другой набирает ваше произведение, то у вас нет возможности контролировать появление ошибок; если же вы выполняете эту работу самостоятельно, то можете винить только себя» — Дональд Э. Кнут.


Немного истории

Есть популярная идея по поводу того, что «история учит тому, что ничему не учит». Возможно, это так. Но чтобы понять логику текущих событий и явлений, все-таки необходимо знать как «оно» зарождалось и почему «оно» до сих пор существует.

Доисторический период

Сначала вообще не было компьютеров, и люди писали все вручную. Но прогресс неумолим — и вслед за печатной машиной появилась коммерческая выгода от создания книг. Время шло, процесс печати удешевлялся — все были довольны, пока не случилось вот что…

Роль Человека в истории

Дональд Эрвин Кнут (Donald Ervin Knuth) является одним из немногих людей, благодаря которым информатика заслуженно носит звание научной дисциплины. Произведение, которое принесло ему широкую известность, это «пятитомник» «Искусство программирования» [1]. После того, как в 1975 году был издан третий том «пятитомника», издатель окончательно избавился от печатной машины с металлическим набором типа «монотип» и заменил его на фотонаборное устройство. Результат превзошел все ожидания: получив оттиски, сделанные по новой технологии, Д. Э. Кнут, который как раз подготовил второе издание второго тома, сильно загрустил. Сама мысль, что книги, на написание которых он потратил свыше пятнадцати лет, будут так плохо выглядеть, не давала Кнуту покоя.

Новые машины были не аналоговыми, а дискретными. Буквы составлялись из точек — «это объект для компьютерной науки» — подумал Кнут и решил научить компьютер делать буквы из точек такими как надо, то есть красивыми. Поначалу задача казалась несложной. Кнут потом признавал, что это был его личный рекорд по недооценке сложности проекта.

«Лучший способ разобраться до конца — это попробовать научить этому компьютер.» — Д. Э. Кнут.

(thumbnail)
Эмблемы TeX и METAFONT, созданные Дуайном Бибби, взяты с домашней странички Д.Э.Кнута. Пингвина, судя по заголовку EPS, создал сотрудник Adobe Systems Inc. Нил Такер (Neal Tucker).

Примерно через десять лет после начала работы над проектом системы METAFONT (создание шрифтов) и TeX (лучшая программа разбиения абзацев на строки) были стабилизированы (версия 2.7 для METAFONT и 3.1 для TeX). Кнут отошел от активной разработки. В дальнейшем METAFONT и TeX модифицировались только для целей исправления ошибок. На текущий момент рабочая версия METAFONT равна 2.71828, а TeX — 3.141592. Кнут завещал, что после его смерти версии будут заморожены и равны числу <math>e</math> и числу <math>\pi</math> соответственно, а все оставшиеся неисправленные ошибки будут считаться особенностями реализации.

На текущий момент TeX, скорее всего, самая свободная от ошибок программа. Код TeX выпускался отдельной книгой «TeX: The Program» (ISBN 0201134373), за обнаружение ошибки в своей программе Кнут выплачивает вознаграждение. TeX является примером свободной программы, которая возникла в академической среде задолго до наступления эпохи GPL.

«Математическая формула не может быть чьей-то „собственностью“! Она принадлежит Богу.» — Д. Э. Кнут.

Сегодня мастер на пенсии и все свое время посвящает написанию «пятитомника». На его домашней страничке можно заметить, что дело явно движется. Ждем результата с нетерпением.

Техническое отступление

В основу TeX была заложена относительно простая идея. TeX работает только с боксами (box) и клеем (glue). Элементарные боксы — это буквы, которые объединяются в боксы-слова, которые в свою очередь сливаются в боксы-строчки, боксы-абзацы и так далее. Между боксами «разлит» клей, который имеет ширину по умолчанию и степени увеличения/уменьшения этой ширины. Объединяясь в бокс более высокого порядка, элементарные боксы могут шевелиться, но как только найдено оптимальное решение, это состояние замораживается и полученный бокс выступает как единое целое. Наилучшее решение находится с помощью системы штрафов за то, что клея использовано больше или меньше оптимального значения, а также за разрывы абзаца в неподходящем месте. Чем меньше штрафа было получено, тем размещение «красивее». В зависимости от системы штрафов меняется форматирование.

Первоначально Кнут предполагал, что у TeX будет множество модификаций, ибо каждая типография будет держать мастера-TeXника для создания своей версии TeX под свои нужды. Вначале TeX не являлся в полном смысле языком программирования. Управляющие конструкции были добавлены в него позже, когда стало понятно, что развитие TeXнологии пошло совсем по другому пути.

А началось все с Лесли Лэмпорта, который в начале 80-х годов начал разработку издательской системы LaTeX, в основе которой лежал TeX. LaTeX представляет из себя набор макросов на языке TeX, позволяющих решить ту или иную задачу. Иными словами, это сборник рецептов. Чтобы выбрать сценарий стирки в автоматической стиральной машине, нет необходимости думать в терминах числа оборотов, уровня воды и количества порошка — достаточно просто выбрать готовое решение. Чтобы пользоваться системой LaTeX, не надо быть TeXником — достаточно выбрать готовый стиль и использовать несколько простых команд в зависимости от того, что нужно сделать.

Дистрибутивы LaTeX

LaTeX, собственно говоря, как и Linux, не является монолитной программой. Он состоит из набора пакетов/программ, причем не фиксированного, что позволяет создавать дистрибутивы, преследующие ту или иную цель.

На сегодня все дистрибутивы LaTeX имеют общий корень, и этот корень носит название CTAN или The Comprehensive TeX Archive Network (http://www.ctan.org). CTAN — это репозитарий, в который стекаются все сколь-нибудь стоящие наработки в области TeX-строения. CTAN — это множество зеркалируемых серверов по всему миру. Модель была настолько успешна, что ее взяло на вооружение Perl-сообщество, организовав CPAN — The Comprehensive Perl Archive Network (http://www.cpan.org).

Наиболее известным в среде GNU/Linux является дистрибутив teTeX. (http://www.tug.org/tetex/). Если вы не знаете, что за дистрибутив стоит на вашем компьютере, то это, скорее всего, teTeX. Этот дистрибутив был создан Томасом Эшером (Thomas Esser). Первая публичная версия в 1994 влезала на три дискетки. В мае 2006 года Томас принял решение о прекращении поддержки своего детища в пользу настоящего флагмана TeX-сообщества (TUG — TeX User Groups, http://www.tug.org/) - дистрибутива TeX Live (http://www.tug.org/texlive/).

(thumbnail)
Пример набора текста в текстовом редакторе – слева. Просмотр результата набора – справа.

TeX Live создавался как дистрибутив, который можно было запускать прямо с CD. Базой для дистрибутива стал teTeX. Первая версия TeX Live была выпущена в 1996 году. Со временем дистрибутив рос, и к 2003 году TeX Live стал «влезать» только на DVD. Каждый год выпускается новая версия дистрибутива. Текущая нумерация идет по номеру года. TeX Live поддерживает все сколько-нибудь распространенные платформы. TeX, вообще, отличается исключительной переносимостью.

TeX Live — это свободное ПО. «Хранители» дистрибутива используют определение понятия свободы, принятое FSF (http://www.gnu.org/philosophy/free-sw.html) или сообществом Debian (http://www.debian.org/social_contract#guidelines). В случае конфликтов этих определений обычно принимается сторона FSF.

TeX Live был размещен на DVD, который прилагался к LXF79, так что этот дистрибутив вполне можно «потрогать руками» уже сейчас.

Запускаем LaTeX

Предполагается, что дистрибутив LaTeX на вашем компьютере уже установлен и настроен. Если это не так, то потревожьте по этому поводу суперпользователя. Обычно проблем с установкой не возникает. Возможные шероховатости с русским языком в современных дистрибутивах возникают по недоразумению. Основной дистрибутив GNU/Linux на сегодня это teTeX. В будущем, по возможности, рекомендуется переходить на TeX Live.

По традиции, для начала скажем «Здравствуй, мир!!!». Для этого в любом удобном для вас текстовом редакторе [2] создайте файл helloworld.tex, примерно следующего содержания:

%helloworld.tex
%выбор класса документа
\documentclass{article}
%Чтобы можно было использовать русские буквы в формулах
%но в случае использования предупреждать об этом
\usepackage[warn]{mathtext}
%выбор внутренней TeX-кодировки
%можно опустить - вызываю по привычке
\usepackage[T2A]{fontenc}
%выбор кодовой страницы документа
\usepackage[koi8-r]{inputenc}
%выбор языка документа
\usepackage[english,russian]{babel}
%начинать первый параграф с красной строки
\usepackage{indentfirst}
%конец преамбулы и начало текста
\begin{document}
%Поздравляем мир
\LARGE Здравствуй мир !!!
%конец текста
\end{document}

Комментарии, которые начинаются со знака % можно опускать. Все, что идет до \begin{document} называется преамбулой или «шапкой». Преамбула определяет вид итогового документа. Нет необходимости каждый раз набивать эти строчки с нуля. Для этого достаточно обучить текстовый редактор вставлять их автоматически при создании нового tex-файла. После создания текста его необходимо откомпилировать:

> latex helloworld.tex
This is pdfeTeXk, Version 3.141592-1.30.3-2.2 (Web2C 7.5.5)
%&-line parsing enabled.
entering extended mode
(./helloworld.tex
LaTeX2e <2003/12/01>

…

(./helloworld.aux) [1] (./helloworld.aux) )
Output written on helloworld.dvi (1 page, 240 bytes).
Transcript written on helloworld.log.
>

В качестве результата LaTeX выдает файл helloworld.dvi. Далее есть выбор:

  • просмотреть результат с помощью xdvi:
> xdvi helloworld.dvi
  • преобразовать dvi в PostScript [3] и просмотреть его с помощью gv, а потом распечатать на PostScript-принтере (если он есть, естественно):
> dvips helloworld
> gv helloworld.ps
> lpr helloworld.ps
  • сделать PDF [4] , ну и, естественно, просмотреть его с помощью Acrobat Reader:
> dvips helloworld
> ps2pdf helloworld.ps helloworld.pdf
> acroread helloworld.pdf

Во всех случаях вы увидите одно и то же:

Img 83 102 1.png

Проблемы с компиляцией

Случается, что при наборе допускается ошибка, тогда при компиляции исходника LaTeX может затребовать дополнительную информацию.

Если просто запустить latex без каких-либо инструкций, то на экране появится приглашение:

> latex
This is pdfeTeXk, Version 3.141592-1.30.3-2.2 (Web2C 7.5.5)
%&-line parsing enabled.
**

LaTeX ждет ввода имени текстового файла, чтобы начать его обработку. Можно прервать ожидание по ^C. Если же правильно задать файл при запуске latex, но при этом ошибиться в коде, то LaTeX выдаст сообщение об ошибке с номером строчки, где возникла проблема, и предложит сделать выбор:

! Undefined control sequence.
l.11 \errorinbody
? h
The control sequence at the end of the top line
of your error message was never \def’ed. If you have
misspelled it (e.g., `\hobx’), type `I’ and the correct
spelling (e.g., `I\hbox’). Otherwise just continue,
and I’ll forget about whatever was undefined.
? x

На запрос (?) можно ввести h, тогда будет выдана догадка о том, с чем может быть связана ошибка, или x, чтобы прервать компиляцию. В случае обычного перевода строки компиляция продолжится до следующей ошибки или до самого конца. Краткую информацию об управляющих командах можно получить введя ?.

Добрый совет: увидели ошибку — сразу же исправьте. Следующие предупреждения могут быть следствием предыдущей ошибки.

Интерактивный режим для работы с ошибками LaTeX — довольно мощный инструмент разбирательства, но на первых порах лучше следовать «Доброму совету». Текстовые редакторы, в которых предусмотрена поддержка редактирования файлов LaTeX, обычно позволяют локализовать ошибку на основании выданного сообщения.

LaTeX-конвейер

В процессе работы LaTeX читает и записывает несколько файлов. Полезно знать, что это за файлы, и зачем они нужны.

LaTeX-конвейер.

На вход подается текстовый файл с LaTeX-разметкой. Традиционно файл имеет расширение tex.

В качестве результата на выходе получается файл с тем же самым именем, что и на входе, но с расширением dvi. dvi — device-independent (не зависящий от устройства) формат, который хранит информацию о форматировании текста и размещении всех его элементов на странице, но без самих букв и картинок. Программы, преобразующие dvi-файл в другое представление, называются dvi-драйверами.

xdvi преобразует dvi-файл в картинку на экране монитора. Это очень продвинутый драйвер. Он реалистично представляет вид напечатанной страницы, поддерживает гиперссылки и позволяет организовать обратную связь с текстом. Еще одним популярным dvi-драйвером является dvips. dvips производит качественный PostScript, который уже можно распечатать на принтере либо напрямую (если принтер поддерживает PostScript аппаратно), либо через программный интерпретатор ghostscript. Существуют и другие dvi-драйверы: например, dvi2tty пытается перевести dvi обратно в текст, dvilj переводить dvi в инструкции PCL для принтеров HP, dvipdf транслирует dvi в pdf. Обилие dvi-драйверов позволяет рассмотреть/напечатать dvi-файлы практически в любой ситуации.

Свободный программный интерпретатор Ghostscript (gs) в свою очередь позволяет преобразовывать PostScript-файлы (.ps) в другие форматы. Обычно PDF получают именно из PostScript с помощью скрипта ps2pdf.

Графика в LaTeX добавляется через eps-файлы. EPS или Encapsulated PostScript — это векторный графический формат, который представляет собой инструкции на языке PostScript с некоторыми ограничениями. Одно из основных требований заключается в том, что в заголовке epsфайла обязательно должны быть указаны его размеры (BoundingBox). Пример заголовка eps, сделанного из примера «Здравствуй, мир!!!»:

%!PS-Adobe-2.0 EPSF-2.0
%%Creator: dvips(k) 5.95b Copyright 2005 Radical Eye Software
%%Title: helloworld.dvi
%%BoundingBox: 148 651 288 668
%%DocumentFonts: SFRM1728
%%EndComments

Перечислим теперь остальные файлы, который участвуют в этом круговороте:

1) Внешние файлы.

  • fmt Форматный файл. Содержит, главным образом, все команды LaTeX’а в предварительно откомпилированной форме. Также содержит информацию о переносах. При изменении значений глобальных переменных TeX требуется пересборка форматного файла: texconfig init.
  • cls, sty Определение макета и структуры документа. Класс документа (.cls) выбирается с помощью инструкции \documentclass. Дополнительные возможности и изменение поведения класса по умолчанию достигается с помощь пакетов (.sty) выбираемых посредством инструкции \usepackage.
  • tfm Метрики шрифтов. Размеры и правила взаимодействия литер друг с другом.
  • fd Приведение внешних названий шрифтов к виду, принятому в LaTeX.
  • pfb Векторные Type1 шрифты.
  • pk (mf) Растровые pk-шрифты по мере необходимости создаются из векторных mf-шрифтов (METAFONT) с необходимым разрешением. При печати качество не страдает, но при просмотре из-за низкого разрешения дисплея предпочтительнее векторные шрифты.

2) Файлы, создаваемые в процессе LaTeX-конвейера. Обычно для получения итоговой копии документа требуется несколько раз запускать LaTeX. При первом проходе записывается некоторое число информационных файлов, которые при последующих проходах используются для нумерации ссылок, составления оглавления и тому подобное.

  • log Файл протокола. Сюда стекается вся информация, имеющая отношение к компиляции. Фактически дублирует стандартный вывод на экран.
  • aux Информация о перекрестных ссылках.
  • toc Файл оглавления (table of contents).
  • lof Список иллюстраций (list of figures).
  • lot Список таблиц (list of tables).
  • bbl Список литературы, сформированный с помощью программы BibTeX. На первых порах можно обойтись без этой TeXнологии, но для серьезных проектов управление списком литературы становится не менее серьезной задачей.
  • ind Предметный указатель, сформированный программой MakeIndex. В каждой уважающей себя и несущей полезную информацию книге есть

такой. Для составления используются idx-файлы. Организация указателя — это отдельная задача.

Выше описан описан «классический» LaTeX-конвейер. Программа LaTeX может быть заменена на pdflatex, тогда на выходе сразу будет получаться pdf, а графическая информация должна быть представлена в форматах png или pdf. Возможны и другие вариации, но в целом структура остается той же.

Литература

LaTeX’у уже свыше двадцати лет. За время своего существования многие из его частей существенно переделывались и усовершенствовались. База же, в виде TeX, до сих пор остается стабильной основой. Видимо, поэтому документация к LaTeX устаревает с очень большой неохотой.

Доступных в России книг по LaTeX относительно немного. С другой стороны, если вы сможете добыть хоть одну из перечисленных в этом разделе, то для обычного набора вам, скорее всего, будет ее достаточно. Логичная организация позволяет LaTeX расширяться без особого ущерба для совместимости.

Для более подробного ознакомления с конкретными пакетами следует обратиться к документации, сопровождающей пакет. Чего-чего, а описаний в дистрибутиве LaTeX хватает. Также для поиска того или иного решения можно обратиться к сайту CTAN (http://www.ctan.org) или TUG (http://www.tug.org).

Классика

  • Д. Э. Кнут. «Все про TeX»: Пер. с англ. — М.: Вильямс, 2003, 560 с, ISBN 5-8459-0382-3 (рус.)

Библия TeX. Для обычного набора текстов в LaTeX информация, собранная в этой книге, не обязательна. TeXпертам и тем, кто таковыми себя считает, читать по нескольку раз. Книга содержит сквозной разноуровневый по сложности материал. При прочтении можно выбирать свой уровень.

  • Д. Э. Кнут. «Все про METAFONT»: Пер. с англ. — М.: Вильямс, 2003, 384 с, ISBN 5-8459-0442-0 (рус.)

Все, что сказано про библию TeX, относится и к этой библии METAFONT. Если вы создаете иллюстрации с использованием MetaPost, то эту книгу следует прочитать хотя бы для общего развития.

  • Д. Э. Кнут. «Компьютерная типография»: Пер. с англ. — М.: Мир, 2003, 686 с, ISBN 5-03-3361-0

Сборник статей Д. Кнута, написанных в процессе создания TeX и METAFONT. В книге подробно разобраны алгоритмы, которые легли в основу TeX, и перечислены те проблемы, что необходимо решить в процессе создания «компьютерной типографии». Книга интересна и исторически — в плане становления одного из самых успешных компьютерных проектов.

Учебники и справочники

  • Г. Грэтцер. «Первые шаги в LaTeX» Пер. с англ. — М.: Мир, 2000, 172 с, ISBN 5-03-0033661-0

Новичкам посвящается. Компактный учебник, позволяющий быстро освоить базовые приемы. Упор на математику.

  • М. Гуссенс, Ф. Миттельбах и А. Самарин. "Путеводитель по пакету LaTeX и его расширению LaTeX2 ": Пер. с англ. — Мир, 1999, 606 с, ISBN 5-03-003325-4

Очень полное и исчерпывающее справочное руководство по основным пакетам и приемам LaTeX. На английском недавно вышло второе издание этой книги. Возможно со временем она доберется и до нас. Это моя основная «рабочая» книга по LaTeX.

  • М. Гуссенс, С. Ратц и Ф. Миттельбах. «Путеводитель по пакету LaTeX и его графическим расширениям. Иллюстрирование документов при помощи TeX’а и PostScript’а»: Пер. с англ. — Мир, 2002, 621 с, ISBN 5-03-003388-2

При подготовке основного путеводителя авторы обнаружили, что описание систем для создания рисунков по объему начинает превосходить базовый текст. Пришлось выделить это в отдельную книгу. Здесь есть все: от шахмат, нот и электронных схем до трюков с PostScript и MetaPost. Очень полезный учебник-справочник для тех, кто самостоятельно делает иллюстрации.

  • М. Гуссенс, С. Ратц. «Путеводитель по пакету LaTeX и его Web-приложениям»: Пер. с англ. — Мир, 2001, 604 с, ISBN 5-03-003387-4

Лучше бы авторы описали бы еще несколько пакетов LaTeX. На мой взгляд, эта книга — дань моде. С другой стороны, здесь расписано все, что связано с PDF и что с ним можно сделать. Любителям XML посвящается.

  • «Не очень краткое введение LaTeX2 . Или LaTeX2 за 94 минуты» Перевод Бориса Тоботраса от 1999 г. Электронная версия и исходные тексты доступны здесь: http://xtalk.msk.su/TeX/.

В названии все сказано. Самый доступный и маленький из имеющихся на сегодня русскоязычных учебников. Из недостатков: отсутствует информация о кириллизации. Полезно для начального изучения.

LaTeX в России

  • С. М. Львовский. «Набор и верстка в системе LaTeX. — 3-е издание» — М.: МЦНМО, 2003, 448 с.

Хороший переплет. Основной упор на математику. Классика жанра. Автор ориентируется на нестандартную русификацию, которая имеет свои преимущества, хотя и спорные. Есть свободная электронная версия, которую можно взять, например, здесь: http://www.mccme.ru/free-books/

  • И. А. Котельников, П. З. Чеботаев. «LaTeX по-русски. — 3-е издание» — Новосибирск: Сибирский хронограф, 2004, 496 с, ISBN 5-87550-195-2

Очень качественный учебник. Предыдущее 2-е издание было моей настольной книгой. К сожалению, качество переплета не очень высокое, что не позволяет активно работать с этой книгой.

  • А. И. Роженко. «Искусство верстки в LaTeX’е» — Новосибирск: Изд. ИВМиМГ СО РАН, 2005. — 398 с, ISBN 5-901548-25-6

Краткий и достаточно исчерпывающий справочник с упором на разработанные автором макросы. В январском номере Linux Format была моя рецензия на эту книгу. Обсуждаются особенности русского стиля. Из недостатков: есть привязка к альтернативной операционной системе.

Кроме перечисленного, полезной может оказаться электронная документация, созданная В. Сюткиным, которую можно можно скачать здесь: http://www-sbras.nsc.ru/win/docs/TeX/LaTeX2e/docs_koi.html

Примечания

  1. На сайте мастера http://www-cs-faculty.stanford.edu/~knuth/ можно найти предварительные версии пока не опубликованных глав четвертого тома.
  2. Лучше чтобы этим редактором оказался emacs – в каждой шутке есть только доля шутки.
  3. PostScript — язык описания страниц, разработан Джоном Уорноком и Чаком Гешке из Adobe Systems Inc.. Интерпретаторы PostScript, аппаратные или программные (ghostscript), широко используется при печати документов.
  4. PDF — Portable Document Format. Этот формат, как и PostScript, создан фирмой Adobe Systems. Является стандартом для электронной документации.
Персональные инструменты
купить
подписаться
Яндекс.Метрика