Взаимодействие TeX с другими программами: заманчивые перспективы и проблемы пользовательского интерфейса.

Знаменский С.В.
Красноярский государственный университет


TeX невероятнейшим образом сочетает два ценнейших несовместимых между собой качества. С одной стороны, он есть стандартный и стабильный способ представления научно-технической информации: статья по математике, набранная вчера (или десять лет назад) в одной точке земного шара, в точности воспроизводится в любой другой точке на любом компьютере не слабее IBM PC XT. С другой стороны, TeX непрерывно расширяется, обрастая новыми утилитами и пакетами и вот уже второе десятилетие остается системой, обеспечивающей издание материалов с математическими формулами, описаниями алгоритмов и другими сложными структурными элементами с непревзойденным качеством.

К сожалению, в России многочисленные варианты русификации плохо совмещаются между собой, а распространение наиболее часто используемых пакетов связывается с коммерческой выгодой. Именно это обстоятельство осложняет создание информационных баз данных электронных препринтов, статей и других информационных систем.

Законченная в 1992 г. В.К. Малышевым оболочка TIS (TeX Integrated System) представлявшая собой несомненный прорыв в обеспечении пользователя TeX дружелюбным интерфейсом, обладает рядом несомненных достоинств: возможность подгрузки недостающих шрифтов с дискет или по сети, гипертекстовый HELP как по самой оболочке так и по LaTeXу, разделение рабочей директории и директории для временных файлов, удобные средства работы с файлами, включая перекодировку и другие новшества, в том числе добавление команд, определенных пользователем. Именно эта оболочка по-видимому является наиболее распространенной в России, несмотря на трудности изменения конфигурации и отсутствие встроенной поддержки AMSTeX, AMSFonts и AMSLaTeX.

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

О характере возникающих здесь сложностей можно судить по пакету MFPIC, реализующему возможности богатейшего графического языка METAFONT в виде графических команд высокого уровня, непосредственно включаемых в документ. При обработке TeX возникает файл с расширением MF, представляющий собой программу на METAFONT. На него надо напустить MF.EXE (или MF386.EXE) с указанием режима работы (mode). Режим этот включает в себя в частности расчетное разрешение и поэтому зависит как от установленного принтера и режима его использования, так и от ориентации печати (ландшафт или портрет), а также от того, захотите ли вы при печати все увеличить или уменьшить. В результате получается GF-файл, расширение которого есть урезанное до трех символов слово, первая часть которого -разрешение (DPI), а вторая -"GF" и TFM-файл. Далее полученный GF-файл надо сконвертировать в PK и положить его так, чтобы драйверам было его видно, но по возможности не вместе с основными PK-файлами шрифтов, так как те нужно сохранять, а этот надо будет удалить по окончанию работы, причем человеку, работающему одновременно с несколькими принтерами или распечатывающему с разным увеличением желательно иметь одновременно несколько вариантов этого файла в разных поддиректориях. Далее надо снова запустить TeX, он должен увидеть TFM-файл (в текущей директории он их не видит), и только после этого можно увидеть результат.

Для работы с конкретным принтером в конкретной конфигурации все это в принципе можно организовать и в рамках TIS с помощью командного файла, если использовать скрытые в сотнях килобайт документации описания соответствующих опций командной строки, переменных окружения и конфигурационных файлов. Однако для другого принтера или распечатки тетрадкой всю работу придется делать заново.

Попытка избавить пользователя от этих проблем была предпринята в рамках проекта, инициированного РФФИ. В 1995 г. автором был сформирован, отлажен и установлен на нескольких десятках компьютеров в вузах Красноярска и в МИРАН неофициальный дистрибутив TeX РФФИ.

Дистрибутив предназначался для установки на IBM PC совместимых компьютерах под DOS. Возможна работа в DOS - окне MS WINDOWS 3.1. Органически включая в себя новейшие программы EMTeX и те наиболее мощные из современные пакетов программ, которые эффективно работают на IBM PC (DVIPS, MFPIC, BM2FONT, XYMTeX, MUSICTeX), он содержит оболочку, предоставляющую пользователю следующие возможности:

1. "Запуская" любой исходный *.tex файл из привычной российскому пользователю оболочки (NC, VC, DN), не задумываться о том, в каком из стандартных TeX'овских форматов (Plain, AMSTeX, LaTeX209, LaTeX2e или корректной русификации любого из перечисленных) он выполнен.
2. Распечатывать материал в портретном, ландшафтном режиме или тетрадкой, наблюдая при просмотре в точности те же шрифты и поля, которые окажутся при печати, в наиболее удобном для пользователя ракурсе.
3. Вставлять в текст рисунки - как из графических файлов (PCX,BMP,GIF, в том числе 16 и 256 цветов, доводя их до нужного размера либо, автоматически учитывая настоящий размер, использовать команды TeX для центрирования, обведения в рамку и т.д.), так и описанные в тексте документа графическим языком высокого уровня (MFPIC) и идеально выполненные METAFONT'ом; те, и другие - как в портретном, так и в ландшафтном режиме или тетрадкой;
4. Оперативно переконфигурировать систему на любой из нескольких десятков принтеров, поддерживаемых EMTeX и на любой из нескольких десятков видеорежимов, вплоть до VESA 1280х1024, сохраняя максимальное качество распечатки на всех используемых принтерах;
5. Система создаёт все временные и постоянные файлы либо в текущей директории, либо в специально для этого предназначенной пользователем; Назначив её на отдельном диске, пользователь резко снижает риск потерять свои исходные файлы из-за системного сбоя;
6. Предпринят ряд мер, чтобы, не снижая возможностей устанавливаемой системы, свести к минимуму суммарный объем файлов, копируемых при установке на твердый диск: автоматическое создание форматных файлов, автоматическая генерация шрифтов METAFONT'ом, перегруппировка исходных архивов, использование пакета SAUTER и т.д.
6. Оболочка легко настраивается на любимый ASCI редактор пользователя, а при работе подсказывает естественную последовательность операций. (Для пользователей, располагающих лучшим для работы в TeX на PC редактором MultiEdit 7.0, существуют макросы, обеспечивающие дополнительный комфорт.)

Дистрибутив помог отработать различные варианты возможного взаимодействия связанных с TeX программ. Однако он не попал в открытый доступ в результате заявления руководства ассоциации CYRYUG о том, что шрифты ассоциации семейства LH, лежащие на CTAN и как бы имеющие статус PUBLIC DOMAIN, (а на них именно базировался дистрибутив) не могут быть включены в дистрибутив РФФИ без юридически оформленного соглашения РФФИ с авторами шрифтов, руководством ассоциации и издательством "МИР".

Другой причиной нераспространения дистрибутива явилась более широкая сетевая постановка задачи, потребовавшая нетривиальной проработки взаимодействия различных кодировок и структуры директорий под UNIX и DOS.

Речь о новом проекте РФФИ "Русский ТеХ". Целями проекта является во-первых, утверждение стандартного (de-facto) способа представления русскоязычных статей, препринтов и других научных разработок в сетевых информационных системах России, основанного на системе TeX, а во-вторых обеспечение (на уровне SOFTWARE) надежной основы для качественного издания научно-технической литературы.

Возникла потребность в организации интегрированной системы TeX, обладающей следующими особенностями:
- Расширяемость и корректируемость системы без угроз совместимости по документированным параметрам
- Стандартная структура директорий (TDS), позволяющая держать на сервере в одном дереве TeX для разных платформ
- Спектр четко выраженных режимов работы: с предоставлением пользователю услуг всех сколько-нибудь эффективных сервисных программ, широкого спектра шрифтов и средств управления ими (вплоть до заказа из TeX эффектов типа "серый обведенный с черной тенью") - для подготовки качественных изданий - и режим жесткого ограничения всех новшеств - для экспорта файлов в общедоступные архивы или пользователям с ограниченными возможностями. К сожалению, невозможно просто фиксировать один "стандартный" вариант пакета, поскольку есть пакеты, ориентированные только на LaTeX, есть ориентированные только на AmSTeX, есть и пользователи - активные сторонники PLAIN.

В рамках наиболее широкого из этих режимов привлекательны следующие черты:
- Минимально возможный размер возникающего на экране в ходе рабочего цикла меню по возможностями лишь с теми пунктами, которые имеют смысл в текущий момент. Информация, выведенная напоследок TeX или утилитой настолько важна для пользователя, что должна быть максимально доступна без дополнительных нажатий клавиш.
- Открытость системы для замен старых и включения новых утилит и драйверов, в том числе таких обычно трудно подключаемых как MFPIC и BM2FONT.
- Обеспечение пользователю удобного доступа ко всем возможностям драйверов.
- Настройки размера листов и расположения (ландшафт, портрет, формирование книжки, размеры полей), обеспечивающие верное соответствие изображения на экране с распечаткой на бумаге
- Возможность сохранения и воспроизведения этих настроек на других компьютере и принтере, оснащенном аналогичной системой
- Возможность для каждого из часто используемых вариантов таких настроек зафиксировать удобную начальную позицию и режим просмотра
- Автоматическое определение формата обрабатываемого файла (очень полезно при обработке полученных по сети файлов)
- Клавиша для действия "по умолчанию", позволяющая не задумываться о выборе очередной операции при подключении утилит (makeindex, bibtex, mfpic и других), усложняющих цикл обработки файлов.
- Возможность установки новых утилит или обновления старых простой распаковкой архивов без дополнительного конфигурирования.

Многим имеющим опыт установки и конфигурирования TeX эта программа покажется утопией. Изменение формата и опций командной строки при появлении новой версии не редкость, и те утилиты, которые в устаревшем варианте понимали друг друга без проблем, в новых версиях могут начать конфликтовать. Свежий пример: внезапно выяснилось, что в дистрибутиве РФФИ-95 после очередного обновления драйверов EmTeX вдруг из-за недокументированного изменения опции /fm перестала работать автоматическая генерация шрифтов в ландшафтном режиме для принтеров с различным разрешением по горизонтали и вертикали. Хотя дефект коснулся ничтожно малой доли пользователей, его устранение потребовало от автора значительных усилий. Можно ли теоретически исключить, а практически свести к минимуму риск подобных проявлений в сложной, гибкой, динамично разрастающейся системе? И если да, то как это сделать?

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

Поскольку имена заведомо не всех из этих файлов известны оболочке, то они должны иметь специфическое расширение, например, TXC (TeX Config). Язык их должен быть расширяем с обеспечением максимально возможной совместимости в обе стороны. Это означает, что не только новые версии языка должны понимать старые команды, но старая версия оболочки должна максимально корректно интерпретировать текст, написанный для новых версий, то есть часть команд должна игнорироваться, часть заменяться устаревшими аналогами, а часть генерировать сообщения об ошибках. Этого по-видимому можно добиться, разрешив длинные (до 128 байт) идентификаторы и условившись, что не найденный в словаре идентификатор укорачивается на один байт до тех пор, пока не удастся найти подходящую замену либо до пустой строки с выдачей сообщения об ошибке.

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

Что же и как может и должно описываться в конфигурационных файлах?
- Команды, выполняемые при входе в систему (прежде всего, создание необходимых директорий),
- Название пункта, высвечиваемого в меню для вызова программы,
- Условия появления этого пункта меню (существование файлов для обработки и~т.д.),
- Имя клавиши для запуска из меню (если несколько пунктов окажутся на одной клавише, она должна лишь передвигать по ним курсор, но не запускать ни один из них),
- Справка для контекстной помощи,
- Ключевое слово для обозначения набора команд, задаваемых в других конфигурационных файлах и выполняемых после нажатия кнопки меню перед основными командами,
- Последовательность выполняемых по запуску из меню команд с командными строками и переменными окружения выраженными как функции глобальных переменных,
- Ключевое слово для обозначения набора команд, задаваемых в других конфигурационных файлах и выполняемых после выполнения основных команд,
- Команды модификации глобальных переменных (по меньшей мере, глобальной переменной NEXTITEM), задающий очередное действие по умолчанию,
- Команды, добавляемые перед началом других (указывается, каких именно) видов работы
- Команды, добавляемые после окончания других (указывается, каких именно) видов работы
- Команды, выполняемые при выходе из системы (прежде всего, удаление временных файлов).

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

Создание системы с новыми качествами предполагается осуществить на основе оболочки TIS (В.К.Малышев), а, если здесь возникнут проблемы, то на основе разработок РФФИ-95.


Знаменский С.В.
znamensk@math.kgu.krasnoyarsk.su

© 1996 Institute of Computation Technologies SB RAS, Novosibirsk