Рассказав об основных свойствах TEX в своей декабрьской статье (см. «КвШ» №10 (14)), я решил предложить читателям результат своих дальнейших размышлений на эту тему.

. HTML до сих пор не способен полноценно поддерживать формулы, а шрифты TrueType не слишком балуют обилием символов. Как преодолеть эти барьеры?

TEX и Word как средства подготовки статей и Web-страниц

На сегодняшний день практически на каждой мало-мальски производительной персоналке установлен Word for Windows, который не умеет работать с формулами, но зато поддерживает включение объектов других программ (OLE). Формулы Equation Editor как раз могут быть такими объектами. Я слышал немало нареканий по поводу набора формул в Equation Editor. Вот они.

1. Качество формул оставляет желать лучшего, индексы часто налетают на символы, к которым они относятся.

2. Скорость набора формул невелика. Набор громоздких формул практически невозможен из-за этого.

3. Внесение сквозных изменений в формулы приходится делать вручную, каждый раз запуская Equation Editor. Автоматизация этого процесса требует программирования для Windows.

Многие помнят текстовый процессор ChiWriter. Оказывается, при всей его неприхотливости к машинным ресурсам первые два пункта сводят его преимущества на нет. На сегодняшний день ChiWriter, не выдержав конкуренции, сошел с дистанции, оставив после себя многочисленные конверторы в другие форматы (в обычный текст, TEX, RTF).

TEX избежал этих недостатков, он не имеет той призрачной прелести, которая зовется WYSIWIG. Многим знакома эта аббревиатура What You See Is What You Get – что видите, то и получите. Эта милая ложь привлекает всех, кто хочет думать не о процессе, а о результате. Набрал человек абзац в Word for Windows, и текст сам собой оказался выровненным, да еще и переносы появились... Дело в том, что даже Page Layout View и Print Preview (разметка страницы и предварительный просмотр) не слишком точно воспроизводят то, что будет напечатано. Это естественно, ведь для этого потребуется захватить много больше ресурсов машины, анализировать на лету большой фрагмент документа, а то и весь документ, и бедный пользователь самого современного компьютера будет наблюдать, как медленно появляются вводимые буквы на экране.

Примерно та же проблема есть и в HTML. Конечно, можно использовать редакторы HTML (например, FrontPage Express или Word’97), но с их помощью бывает легче загубить документ, чем отредактировать его. Кроме того, никто не обещал, что автоматически сгенерированный документ будет сделан эффективно, то есть компактно и без ошибок. HTML плохо приспособлен для написания статей, и формулы приходится включать как картинки.

На сегодняшний день TEX, несмотря на свою сложность, не имеет конкурентов. Статья, книга или постер с формулами любой сложности могут быть быстро набраны в любом текстовом редакторе на любой платформе (DOS, Windows, UNIX, MacOS). Документы TEX могут быть трансформированы в PostScript или PDF без использования Adobe Distiller. В некотором смысле TEX – это транслятор текстовых документов со специальными командами в формат, не зависящий от устройства (экрана, принтера, фотонаборной машины и прочих) – DVI. DVI обладает столь же высокой межплатформенной переносимостью, что и исходный документ TEX. Настоящая статья также набрана в TEX и преобразована в HTML с помощью программы TtH. На сегодня существуют версии TEX (Omega и Lambda), позволяющие работать с текстовыми файлами в формате UNICODE (два байта на символ), то есть одновременно со всеми языками народов мира. HTML также бывает «уникодным». Пока программа TtH не достигла совершенства, и полученный документ в формате HTML нужно дорабатывать вручную. Тем не менее TtH создает компактный HTML-текст, который несложно редактировать.

Word’97 позволяет читать и записывать документы в формате HTML и RTF (как в виде UNICODE, так и в традиционном – Word-6.0/95). Конечно, все определяется качеством фильтра – программы, импортирующей и экспортирующей HTML в/из документ(а) Word for Windows. Скорость и качество преобразования больших файлов едва ли можно признать удовлетворительными. Избыточный объeм кода HTML приводит к замедлению загрузки и интерпретации документа при чтении его из сети Интернет.

2 B | ! 2 B - i.e. the ?

Бедный Шекспир! Если бы он знал, что знаменитую фразу Гамлета можно так упаковать, он бы ушел в монастырь и никогда бы ничего не оставил потомкам. Примерно такую работу по кодированию приходится выполнять при создании HTML-документа, заменяя < на < и вставляя более тонкие и менее очевидные конструкции.

Как же представить формулу в HTML? Есть два пути – традиционный, в виде картинки, и нетрадиционный – в виде сложной таблицы с применением шрифта типа Symbol.

Первый путь реализует знаменитый скрипт laTEX2html для UNIX (есть версии для DOS) и Word for Windows. Он имеет то преимущество, что независимо от используемых шрифтов на экране можно прочитать этот документ. Недостатков также хватает. Во-первых, картинки с формулами по объему больше, чем текстовая информация, заключенная в них. Например,

A = B

состоит из пяти-десяти байт, а картинка в формате GIF содержит до 300 байт.

Во-вторых, разрешение экрана составляет от 72 до 120 точек на дюйм, в то время как разрешение даже 9-иголочного принтера достигает 240 точек на дюйм. Максимальное разрешение струйной печати на обычной бумаге порядка 600 – 800 точек на дюйм, а лазерной – более 1000. Разрешение струйной и лазерной печати на специальной бумаге 1500 и более. Это означает, что формула, которая на экране выглядит хорошо, при печати станет безобразной из-за неизбежной зернистости увеличенного изображения. Едва ли драйверы принтеров (включая Perfect Imaging System от Epson) могут подавить этот эффект на черно-белых изображениях формул.

Если шрифт в исходной формуле не превосходил по размеру десять пунктов, то придется угадывать что за символы были использованы в качестве индексов, ибо их размер в этом случае окажется столь невелик, что низкое разрешение экрана (то есть малое число пикселов изображения) не позволит прорисовать его отчетливо. При печати зернистость усугубит этот дефект.

Второй метод, реализуемый программой TtH, – генерация формул как сложных таблиц – не имеет дефектов отображения и печати, но сложности есть и здесь. Формально нельзя воспроизвести изощренный механизм оформления формулы в TEX при использовании шрифтов типа TrueType и ограничений HTML. Вы никак не поставите «крышку» или черту над символом в строке, вы можете лишь намекнуть на это: [^(a)].

В вынесенной формуле это можно сделать таблицей:

^
a

Это не слишком красиво, но вполне читаемо, а после доработки руками занимает около 60 байт – небольшая плата за возможность видеть и печатать при любом увеличении.

Другая проблема – спецсимволы. Конечно, в UNICODE это решается проще, но зачем удваивать объем документа ради сотни-другой греческих букв? Читатель вашего HTML-документа должен иметь шрифты с символами в нужной кодировке. При этом возникает проблема переносимости, но есть надежда, что и она будет решена при выпуске новых версий программ навигации (browsers).

Иногда технологии поддержки серверов бывают достаточно изощренными. Например, вся информация готовится на машине-клиенте под управлением ОС Windows, а затем автоматически переносится на сервер, работающий под управлением ОС Linux, и при этом происходит автоматическая перекодировка букв с CP-1251 в KOI-8. Все будет отлично, пока вы не используете экзотические символы. Последние окажутся испорченными из-за неоднозначного соответствия кодовых таблиц. Те же проблемы могут возникнуть при отсутствии нужных шрифтов на клиенте (машине пользователя), а также при попытке создать документ на иностранном языке. Спецсимволы в кодовой таблице CP-1251 (ANSI Cyrillic) могут разительно отличаться от символов CP-1250 (ANSI Central European).

Третья проблема касается обоих методов создания HTML-файлов: известная программа чтения страниц в текстовом режиме Lynx не поддерживает (очевидно) ни графики, ни таблиц, ни шрифтов.

Есть еще неприятности при представлении формул картинками: центровка формул в строке почти всегда неправильная; извлечение текста связано с процедурой распознавания символов в изображении низкого разрешения; одна и та же греческая буква (или специальный символ) будет представлена разными изображениями столько раз, сколько она встретится в тексте.

Что же все-таки делать?

Следует выбростить все буквы и спецсимволы, без которых можно обойтись. Вместо

α = β + γ

часто можно написать

a = b + g.

По возможности исключайте сложные символы, заменяйте их текстом. Имейте в виду, что для TEX вы можете использовать кодировку DOS (CP-866), а для HTML вам может понадобиться кодировка Windows (CP-1251).

Есть множество проблем представления формул, отмечу лишь некоторые из них. Почти все эти рекомендации можно отнести и к формулам, набираемым в Word for Windows и Equation Editor.

  • Чтобы номер формулы точно попадал на левую или правую границу страницы (окна), следует заключить формулу в таблицу на всю ширину (), состоящую из трех колонок: примерно одинаковых левой и правой колонок с выравниванием влево и вправо, соответственно, и средней с выравниванием по центру. Если номер формулы находится слева, то в правой колонке нужно поставить столько неразрывных пробелов (&nbsp;), чтобы левая и правая колонки были почти одинаковы. Формула помещается в среднюю колонку.
  • Дроби, верхние и нижние индексы один под другим и прочие сходные элементы получаются применением команды
    внутри одной колонки. Выравнивание по высоте достигается использованием неразрывных пробелов на отдельных строках.
  • Сделать большим (продолжить) квадратный корень нельзя, поэтому вытягивайте формулу под ним в строку. Иначе используйте большой размер шрифта и пытайтесь подогнать к нему подкоренное выражение.
  • Сложность нескольких вложенных таблиц может оказаться достаточной для того, чтобы Word’97 не смог открыть HTML-документ или работать с ним.
  • Для имитации распределения пробелов в TEX следует использовать тонкие пробелы (шпации). Это достигается переключением на меньший шрифт и вставкой неразрывного пробела: &nbsp;.
    * Одиночные индексы лучше выполнять с помощью и .

    Некоторые конструкции TEX и HTML не будут соответствовать друг другу, и при просмотре эти документы будут выглядеть по-разному.

    Ниже приводится фрагмент реального документа в формате HTML.

    Из молекулярно-кинетической теории известно, что

  • где M – молекулярная масса. Для молекул кислорода d = 3,6 A, M = 32 г/моль. Пусть p = 1 атм, T = 300 K.

    Не только руками

    Многие коммерческие программы умеют читать и писать документы в формате Word for Windows, обмениваться с ним через буфер текстом, сохраняя при этом форматирование и шрифты. Едва ли это простая задача для пользователя, так как Windows – закрытая система, а библиотеки для работы с приложениями Microsoft – коммерческие. RTF слишком сложен, так как в нем описываются скорее не команды, а результат форматирования. Однако это не проблема, если выбрать TEX или HTML. Используя эти форматы, можно не только автоматически создать документ, но и в дальнейшем преобразовать его в другой формат (например, PostScript), допускающий использование более изощренных средств оформления, таких как цвет, возможность выстраивать текст вдоль наклонной линии или даже кривой.

    Одним из классических приемов оформления текстов являются свободно распространяемые (бесплатные) средства grind из UNIX, такие как vgrind и tgrind. Эти небольшие программные пакеты преобразуют исходные тексты пользовательских программ в изящно отформатированные документы. Пакет tgrind формирует документ в формате TEX.

    Я увидел в Сети некий аналог tgrind – SCC (source code colorizer), но в отличие от него выходным файлом SCC является HTML. SCC – shareware, то есть коммерческая программа. В отличие от vgrind и tgrind, к ней не прилагается настроечный файл типа vgrindefs, в котором можно легко и быстро описать конструкции практически любого языка программирования или даже текста.

    На базе tgrind я сделал три пакета – tgrindr, tgrindrc и hgrind – для DOS, представляющие собой tgrind, поддерживающий русский язык в альтернативной кодировке, русский язык и цвет (рассчитана на преобразование выходного документа в PostScript), и преобразователь в HTML соответственно. Все они используют стандартный vgrindefs (в DOS его имя сокращается до vgrindef) для описания элементов того или иного языка программирования. Цветом выделяются не только синтаксические элементы (строки, ключевые слова, комментарии), но и цифры, что очень удобно при поиске ошибок в программах.

    FAR и дальше

    Пользователи платформы Win-32 (Windows/9x/NT) нередко работают с файловой системой через программу-оболочку FAR Евгения Рошала (так он сам себя называет; читая его имя в английской транскрипции, хочется добавить мягкий знак в конец его фамилии), автора знаменитого паковщика RAR. FAR является условно бесплатной программой (shareware), но распространяется бесплатно для обитателей бывшего СССР. FAR – консольное приложение, запускаемое через CONAGENT, то есть выглядит оно как приложение DOS, при этом являясь программой для Win-32. Ресурсы FAR в значительной степени открыты, и многие пользователи пишут к нему программы-добавления (plugin).

    Среди этих добавлений следует особо отметить детище Игоря Русских. Я имею в виду его Colorer (можно найти там же, где и FAR в каталоге Plugins). Программа позволяет настраивать синтаксическую подсветку с помощью настройки в HTML-подобном формате. Это очень глубокая идея. Игорь использует настройки такого же вида и для своего научного калькулятора с выводом результата одновременно в 4 системах счисления и в показательной форме. Та же система дает возможность расширять набор функций калькулятора. В версии 3.0 Colorer есть программа HTMLCOL, которая позволяет создать раскрашенный исходный код в формате HTML, причем цветовая палитра будет выбрана та же, что и для подсветки синтаксиса в редакторе. По настраиваемости эта программа вне конкуренции.

    TEXнические итоги

    Я не сторонник навязывания технологии «командно-ориентированных» документов тем, кого устраивает офисная технология Microsoft. Вместе с тем я не могу не отметить, что TEX все-таки единственная полноценная издательская система для математических текстов. TEX – открытая и хорошо документированная система, на базе которой делаются даже справочные пакеты типа TEXinfo, создающие одновременно и вариант руководств «для печати», и подручные справочники (on-line help) для автоматического поиска и чтения с экрана.