Михаил Голуб

От редакции "КвШ": Наш "Словарь компьютерного бизнеса" пополняется сегодня статьей о феномене, который невозможно по любым формальным признакам отнести к миру этого самого бизнеса. Но согласитесь, ведь именно парадоксы позволяют лучше разобраться в сути любого явления. Некоммерческие каналы распространения программ – тема, к которой мы еще не раз будем возвращаться на страницах нашего журнала.

Набор формул на компьютере

Сколько премудрости было вложено в попытки представить формулы в виде обычного текста: и написание индексов в строку ("O2" вместо "O2"), и рисование дробной черты как серии минусов, символов подчеркивания или аналогичных им... Решения в основном брались из языков программирования, где запись математических выражений была формализована иным, чем в трудах математиков, образом. До сих пор люди, пишущие в Word for Windows, используют звёздочку как знак умножения (ввести символ "•" несомненно сложнее).
Распространение графических устройств (мониторов, принтеров и прочих) в корне изменило подход к проблеме. Теперь формулу можно было "нарисовать" на экране и/или на принтере. Нельзя сказать, что такие формулы хорошо воспринимались.
Сравните




или даже



и



Формула, непосредственно набранная в Word, будет выглядеть примерно так



Применив некоторые ухищрения, в Word можно получить



Вопреки распространенному заблуждению, Word при всей его мощи не позволяет набирать формулы. Технология набора формул для Word — OLE (object linking and embedding), то есть связывание с объектом или его вставка. Формулы для Word могут быть выполнены в виде картинок, созданных графической программой типа Paint, Corel Draw! или Equation Editor (упрощенный вариант MathType).
Для редактирования любого такого объекта следует запустить соответствующую программу, например, Equation Editor для редактирования формулы. Это значит, что если их у вас 100, то для редактирования следует 100 раз запустить Equation Editor... Это не проблема, если вы представляете себе заранее, как выглядит каждое математическое выражение. Если же вам понадобилось заменить ? на ? из-за того, что в следующем разделе под ? будет пониматься совсем другая физическая величина (и такое обозначение — общепринято), то дело плохо. Гуру Word BASIC способен написать межзадачный обмен, позволяющий автоматизировать этот процесс. Но стоит ли тратить на это время?
Формат Word, принятый в качестве стандарта обмена документами на платформе Windows, не слишком жалуют люди из племени Unix (и тем и другим, впрочем, равно доступен формат RTF –- который сам по себе родом из "Юникс-мира"). Переносимость документов — важное свойство, востребованное в эру безбумажных технологий. Ведь гораздо проще получить небольшой документ по электронной почте (или как-либо иначе из сети Интернет), чем в обычном почтовом конверте. Я уже не говорю о переводе зарубежных изданий, формулы из которых можно просто заимствовать, если есть исходный электронный вариант.
Всех перечисленных выше недостатков лишён TЕX (читается как "тэх"). Автором программы и книги о ней является американский математик с мировым именем Дональд Эрвин Кнут (Donald Ervin Knuth), автор знаменитого трёхтомника "Искусство программирования для ЭВМ" и соавтор недавно вышедшей в русском переводе "Конкретной математики". Нелишне будет заметить, что в качестве исследовательской задачи в третьем томе "Искусства…" автор предложил доказать великую теорему Ферма.
Желающие познакомиться поближе с этим выдающимся человеком могут найти его в Интернете по адресу www.cs.faculty.stanford.edu/~knuth/index.html. История создания TЕX хорошо изложена на странице Общества пользователей кириллического TЕX (CyrTUG) www.cemi.rssi.ru/cyrtug/.Там же можно выйти на все интернетовские ресурсы TЕX, а также узнать о литературе по TЕX на русском и английском языках.
Существует так назваемая "всеобъемлющая сеть TЕX": CTAN (Comprehensive TЕX Archive Network), имеющая в Интернете "зеркала" — точные копии. По крайней мере одна из таких копий находится в России по адресу ftp://ftp.chg.ru/pub/TeX.
Не следует, однако, с криком "Долой!" избавляться от Word и бежать за TЕX. Не всё так просто: идеология последнего пришла из эпохи текстовых терминалов и связана с созданием текстовых файлов, в которых все намерения автора передаются соответствующими командами. Этих команд много, но их можно запомнить.
"А, опять учить новую программу!" — скажет пользователь. И будет прав. TЕX до настоящего времени не обзавёлся адекватной ему графической оболочкой (известная сегодня система Scientific Word лишь в какой-то степени приближается к этому).
Для набора документов в формате TЕX пользователю понадобится любой текстовый редактор, то есть программа, позволяющая создать и изменять текстовые файлы. В Windows такой программой является NotePad (блокнот). Ни Word, ни "Лексикон" не являются "редакторами", они стоят на ступеньку выше, они — текстовые процессоры (word processor). Сам TЕX при всей простоте своего интерфейса является примером еще более высокой технологии. С этих позиций о TЕX нельзя говорить как о редакторе, в котором набран текст, и, строго говоря, нельзя сравнивать с ним Word.
Тем не менее научные работники, а точнее — математики и физики в большинстве своём — используют TЕX не для получения оригинал-макетов, а для написания статей. Документ TЕX может быть легко создан программой (простота формата), а попытка добраться к записи в формате Word потребует умения работать с двоичными файлами. Формат TЕX не меняется, чего не скажешь о Word. В Unix-мире имеются целые системы на базе TЕX (texinfo, tgrind). Переносимость TЕX ограничена только проблемой множественности кодировок кириллицы, но и это легко преодолевается.
Документ TЕX обычно существенно компактнее документа Word. TЕX преобразует подготовленный для него документ в некий универсальный (device independent) формат (DVI), который понимают так называемые DVI-драйверы. Они позволяют вывести уже оформленный документ на экран, напечатать его на любом принтере, включая полиграфическое оборудование (базовое разрешение программы METAFONT, создающей шрифты для TЕX — 2602 точек на дюйм). Изображение текста, которое DVI-драйвер выводит на экран, – это именно то, что будет напечатано.

И, наконец, самое главное. Мало кто в нашей стране может похвастаться работой с легальной версией Word. Большинство же реализаций TЕX и шрифтов для него распространяются свободно для некоммерческого использования. TЕX реализован для всех существующих платформ.

Прежде чем принять решение об использовании TЕX, взглянем с высоты птичьего полета: что же мы делаем, работая на компьютере? Может быть, за удобства, предоставляемые Microsoft Office, мы все же чем-то платим?

Нетрадиционный взгляд на компьютер

Итак, что делает человек, работая на компьютере?
1. Запускает программы.
2. Вводит данные.
3. Программирует.
Кажется, больше ничего... Действительно, включив питание ПК, мы заставляем машину запускать POST (самопроверку), BIOS (базовую систему ввода/вывода), операционную систему (например, Windows). Ввод команд в командной строке или щелчки мышью — это ввод данных для интерпретатора командной строки или для программы работы с мышью и экраном. В результате — опять запуск программы. Редактирование: запуск программы редактора и ввод текста, представляющего собой данные для этой программы. Выполнение функций редактирования (поиск, замена и прочее) — снова ввод данных, но на этот раз данные интерпретируются программой-редактором и выполняются как программа. Есть редакторы, команды которых можно записать отдельно и выполнить как программу.
Написание и отладка программы — это редактирование (ввод данных) с последующей компиляцией (запуск программы), компоновкой (запуск программы), подготовкой данных (ввод данных, программирование) и выполнением (запуск программы).
Заметим, что совершенно не важно, имеет ли место диалоговое общение программы и пользователя или пакетное (пользователь ждёт результаты), имеем ли мы дело с графическим интерфейсом или нет.
Представьте себе теперь, что вместо последовательности вызовов пунктов меню Word "Вставить", "Символ" и выбора необходимого символа (скажем, б) для его вставки вы просто пишете \alpha. И то и другое — "две функции в одном флаконе", здесь присутствуют и ввод данных, и программирование. Выучить мнемоническое имя (в нашем примере alpha) не труднее, чем запомнить, где находится список символов в меню.

TЕX — курс молодого бойца

Это ужасно неблагодарное дело — описывать чужую программу, да еще известную в изложении как самого автора, так и многочисленных пользователей. "Библия" TЕX — The TЕX book — переведена на русский язык под названием "Все про TЕX". На странице CyrTUG в сети Интернет есть список ресурсов и литературы по TЕX.
Слово TЕX — это набор заглавных греческих букв: тау, эпсилон и хи, являющихся корнем слова "техника", в числе прочих словарных значений имеющего значение "искусство". TЕX не рекомендуется путать с TЕX (тэкс), являющейся совсем другой программой. Англофоны и франкофоны, не имеющие звука "х", произносят TЕX как "тэк". К Дональду Кнуту это не относится, он — полиглот.
Первое, что нужно знать о TЕX, — его форматы. Формат, созданный автором как базовый, Plain, принимается по умолчанию и в оригинале поддерживает только американский вариант английского языка. Существует целый ряд его русификаций.
Plain TЕX не слишком удобен для изысков в области набора и вёрстки математических текстов, но сама TЕX book написана именно в нем. Для упрощения жизни TЕXовских "чайников", а также для интеграции многочисленных и хитроумных наработок Лэсли Лэмпорт (Leslie Lamport) создал свой формат LaTЕX, а Майкл Дэвид Спивак (Michael David Spivak) — AMS-TЕX. Цель LaTЕX — на единой основе (\begin{окружение}...\end{окружение}) дать возможность широкому кругу пользователей решать почти все возникающие задачи по написанию статей при минимуме знаний. LaTЕX кардинально переопределяет почти все назначения Plain TЕX, то есть почти не похож на "предка".
LaTЕX нередко встраивают в тело программы TЕX, и таким образом, часто можно слышать: "О TЕX я не знаю, я пользуюсь LaTЕX".

Пример
1. Документ для Plain TЕX (или AMS-TЕX без "редакторских штучек"):
Hello!
\end

2. Документ для LaTЕX:
\documentstyle{article}
Hello!
\end{document}

В новой версии LaTЕX, известной как



вместо \documentstyle используется \documentclass.
Абзацы в документе TЕX отделяются пустой строкой или командой \par (так же, как в формате RTF). Ведущие и пробелы в строчках игнорируются, несколько пробелов считаются одним, одиночный конец строки считается пробелом, двойной (и более) преобразуется в конец абзаца. Абзацный отступ (indent) делается автоматически, автоматически делаются выравнивание и переносы. При этом решается задача оптимизации эстетического качества абзаца.
Будучи издательской системой, TЕX выполняет кернирование (kerning), то есть сближает или отдаляет соседние буквы в зависимости от того, какую пару они образуют. Пример:



Здесь тонкие линии показывают (примерно) середину буквы "О". Смещенная вверх буква "О" соответствует положению по горизонтали, которое она занимает при выключенном кернировании. Небольшое различие в положении букв может сильно влиять на восприятие текста и даже на его расположение. В Word кернирование может быть включено. Кстати, в Word вам не удастся сделать такой "составной" символ.
Для набора формул в TЕX следует ввести знак доллара ($). Дональд Кнут объясняет это тем, что "математика должна стоить дорого". Одиночный $ начинает и заканчивает формулу в тексте, а двойной ($$) — выключную (вынесенную). Пример: $A= \int B dx$ преобразуется в



Обратите внимание, что распределение пробелов и выбор специального математического курсива сделаны автоматически. В документах, созданных с помощью Word и Equation Editor, почему-то часто пределы интегрирования налетают на знак интеграла. В TЕX для этого придется сделать не особо корректный трюк со шрифтами, а иначе расположение всех элементов формулы будет правильным:



$A= \int_a^b B dx$



$A= \int \limits_a^b B dx$
Часто бывает нужно вставить "неразрывный пробел" (в Word это делается нажатием Ctrl+Shift+Space) для того, чтобы исключить попадание двух связанных слов на разные строки, например, "проф. Иванов". Между "проф." и "Иванов" стоит тильда (~).
Непрофессиональные наборщики не видят разницы между дефисом, минусом, коротким и длинным тире (машинописью в скобках показан способ набора, названия клавишей относятся к Word):

"-" дефис (-)
"–" минус ($-$)
"–" короткое тире (en-dash) (--) Ctrl+Minus
"—" длинное тире (em-dash) (---) Ctrl+Alt+Minus

Нет такой математической формулы, которую нельзя было бы набрать в TЕX.
Изменение шрифта в тексте по желанию пользователя делается с помощью предопределённых командных последовательностей: \bf — жирный шрифт, \it — курсив. Чтобы ограничить область действия любых установок, используют фигурные скобки. Пример: {\bf жирный} и {\it курсивный} > жирный и курсивный.
Ясно, что набор несложных текстов, коими являются любые школьные методические материалы или пособия по математике (графики не рассматриваются), практически не требует никакой серьёзной подготовки.

Пример
{\bf Теорема.} Доказать, что сумма квадратов катетов равна квадрату гипотенузы.
{\it Доказательство.} Рассмотрим ... $ \blacksquare$
Теорема. Доказать, что сумма квадратов катетов равна квадрату гипотенузы. Доказательство. Рассмотрим ... ¦

Еще одной особенностью TЕX является возможность комментировать текст. Например A% после символа процента всё, включая символ конца строки, пропадает даст просто A. Можно самому контролировать, какие и когда вносились изменения:

% это определение позволяет закомментировать любой кусок
% текста между \comment\ и \endcomment:
\long\def\comment\#1\endcomment{}
% Эта теорема исключена из программы в 1999 году
\comment
{\bf Теорема.} Доказать, что сумма квадратов катетов равна квадрату гипотенузы.
\{\it Доказательство.} Рассмотрим ... $\blacksquare$
\endcomment

Доступность

TЕX доступен практически всем желающим. Дело не только в том, что каналы для его распространения имеют некоммерческий характер. Для многих преподавателей и школьников еще более существенно другое обстоятельство: TЕX-системы работают даже под управлением DOS и даже на PC/XT! Конечно, малое быстродействие и малый объем памяти не позволят создавать большие документы в виде одного файла, но этого никто и не заставляет делать. Более того, набор текста возможен на любой технике, а его трансляция в DVI может быть произведена на более мощной машине. Единственным ограничением DOS является отсутствие длинных имён файлов, что принципиально только при обмене документами с пользователями LaTЕX, работающими под Unix, Mac OS, OS/2 и Windows 9x/NT.
TЕX позволяет организовать ввод/вывод текстовых файлов, проделать вычисления с размерами или целыми числами. Я, например, заставил TЕX "проговаривать" числительные на двух языках; при желании можно добавить к таким числительным наименование денежной единицы:

% \Bitem — моя команда формирующая отступ равный длине
% первого выражения в фигурных скобках
% \Rus, \Eng\ — мои команды для указания языка
% \ — обязательный пробел
\Bitem{1234567890 =}{\VerbNumeral{1234567890}\Rus\it\currency\ или
\smallcurrency}
\Bitem{1234567890 =}{\VerbNumeral{1234567890}\Eng\it\currency\ or
\smallcurrency}

1234567890 = один миллиард двести тридцать четыре миллиона пятьсот шестьдесят семь тысяч восемьсот девяносто рублей или копеек

1234567890 = one milliard two hundred thirty four million five hundred sixty seven thousand eight hundred ninety dollars or cents

Возможность определять новые команды, да еще и с параметрами, позволяет упростить технику набора и редактирования. Помните задачу о замене альфа на бета. В TЕX её можно решить так:

\let\ALPHA=\alpha % сохранить определение \alpha в \ALPHA
\def\alpha{\beta} % теперь вместо \alpha будет подставлена \beta

И все! Никаких проблем с многократным запуском редактора формул! Никакого листания, никакого редактирования! Вам кажется, что это искусственная задача? Нисколько.
Я принимал участие в подготовке учебного пособия. В нём поток был обозначен буквой J, причём из-за большой номенклатуры обозначений и множества разных тем не было уверенности, что J не означает чего-то еще, поэтому было решено потоки выделить каллиграфическим шрифт



Многократный набор команды \Cal мне показался утомительным, и я "обозвал" этот символ \J. После окончательной методической проработки пособия автором выяснилось, что проблем с конфликтом имен нет, а вид каллиграфической буквы не вписывается в образ учебного пособия (применение таких символов характерно для сложных математизированных трудов). Что было делать? Конечно, просто переопределить \J! Добрая сотня из трёх с лишним сотен формул автоматически изменилась.
Какая свобода для внесения изменений! Захотел учитель добавить закон Ома — добавил, и если с означало плотность, а не удельную электропроводность, переопределил его, скажем, на ?.

Плата за удовольствие

Любая уTЕXа не остается безнаказанной. Как и в Word, в TЕX просто получаются простые вещи. Если нужна жутко сложная таблица, хитрый способ верстки страниц или невообразимо сложная процедура индексирования, то из TЕXника придется превратиться в TЕXперта. Работа последнего представляет собой программирование на столь запутанном языке, что со стороны это выглядит манией. Например, организация циклического алгоритма в TЕX (команды \loop... \repeat) несложна, но выполнена с помощью рекурсии и таит в себе подводные камни, если внутри тела цикла захочется сделать проверку (\if или аналогичную).
Замечательный интерфейс подготовки таблиц Word 97 с возможностью поворота текста не поддерживается TЕX, а может быть реализован только с использованием PostScript. Это же относится к надписям под углом, вдоль кривой, разным цветом и тому подобным. Основной объект TЕX — прямоугольник (box). Каждая буква, строка, абзац и страница — это прямоугольник. Существует коммерческий



где возможности TЕX расширены и поддерживается векторность шрифта. Скорее всего, TЕX не будет развиваться в этом направлении, так как для украшательства существуют другие средства.

Автоматизация с помощью TЕX

Как уже упоминалось в начале, TЕX может быть использован как программа обработки текста. Сам TЕX способен создавать текстовые файлы, и другие программы способны делать документы TЕX. Одним из таких примеров является свободно распространяемая программа tgrind, позволяющая оформить исходный текст программ в соответствии с правилами, описанными в файле vgrindefs (для DOS —vgrindef).
Так, например, некая программа на Fortran может быть оформлена tgrind в приведенном ниже виде с автоматической нумерацией страниц, строк, указанием начала и конца программного блока (в данном случае подпрограмм). Ключевые слова, строки и комментарии выделены. Мне представляется, что tgrind может быть очень полезен для подготовки пособий по информатике и даже для оформления результатов работы. Программа tgrind может быть использована как средство разбиения по страницам любого текста, причем в нём автоматически будут выделены ключевые слова, указанные в vgrindef.
Более того, tgrind подставляет дату, что даёт возможность контролировать время выполнения задания, если преобразование в документ TЕX, обработка с помощью TЕX и печать выполняются в пакетном режиме, а промежуточные файлы недоступны для редактирования (нельзя исправить дату и время вручную).



Документ TЕX может быть легко увеличен. Если в наличии есть принтер формата A1, то можно напечатать плакат. Возможна также печать слайдов (прозрачек), причем некоторые реализации DVI-драйверов позволяют не только поворачивать, но и отражать, и транспонировать страницу. Последнее позволяет напечатать текст не на верхней, а на нижней стороне слайда, так что при указании карандашом или ручкой нужного места во время демонстрации можно только поцарапать пленку, но текст стереть не удастся.
Удивительным образом TЕX стал не только средством издания математической и физической литературы на разных языках, но и стандартом для представления формул. Так, например, современные версии "матричной лаборатории" MATLAB (см. статью Владимира Дьяконова, "КвШ" 3/99) поумолчанию интерпретируют подписи к графикам и обозначения осей в нотации TЕX. Это значит, что команда xlabel('x_i') поставит xi в качестве обозначения оси x.
Свободно распространяемая программа gnuplot, не имеющая, вопреки своему названию, отношения к проекту GNU (GNU – это проект создания программных продуктов со свободно распространяемыми исходными текстами; мы намерены рассказать об этом проекте в ближайших номерах нашего журнала. – Примю ред.), способна записывать результат построенных ею графиков в нескольких форматах для LaTЕX в виде растрового или векторного файла (различных форматов) или в виде файла формата PostScript, понятного многим DVI- драйверам.
Используя ставшие стандартными де-факто расширения TЕX, можно строить графики прямо в TЕX, используя механизм \special вставки любых объектов, понимаемых DVI- драйверами. Если последний не умеет обрабатывать то или иное расширение, оно просто им игнорируется. В последнее время я часто строю графики прямо в документе, используя этот механизм.



1 — линейная функция;
2 — квадратичная функция.
Удобство его в том, что вся мощь символов TЕX может быть использована для обозначения точек, причём в подписи к рисунку будут использованы те же символы. Это же относится и к обозначениям линий, и к надписям на графике.

Итого...

Приведу несколько соображений о TЕX "под занавес".
· TЕX на сегодняшний день не имеет сколь-нибудь серьезных конкурентов в области набора и вёрстки математических текстов. Скорость набора в TЕX очень велика.
· TЕX сам заботится о полиграфической изысканности документов. Он не потерпит жидких и переполненных строк и избежит множества последовательных переносов.
· TЕX допускает набор формул любой степени сложности.
· TЕX может быть настроен пользователем в зависимости от квалификации последнего.
· Документ TЕX и его любая часть могут быть результатом выполнения другой программы.
· TЕX использует текстовые файлы и для ввода, и для вывода. Он может быть использован как генератор документов.
· В TЕX имеются расширения, допускающие его трансляцию в другие форматы (PDF, PostScript, HTML) и включение в документ произвольной графики, включая цветное фото.