На главную

Библиотека Интернет Индустрии I2R.ru

Rambler's Top100

Малобюджетные сайты...

Продвижение веб-сайта...

Контент и авторское право...

Забобрить эту страницу! Забобрить! Блог Библиотека Сайтостроительства на toodoo
  Поиск:   
Рассылки для занятых...»
I2R » И2Р Программы » Мир Linux » Программы и Работа в Linux

Сказ про TeXmacs, или как прикручивали шрифты TeX к графическому режиму, и что из этого получилось

В условиях острого недостатка средств визуального редактирования под Linux каждый текстовый процессор для этой операционной системы непременно становится предметом активного обсуждения в русскоязычном Интернете. Разбираются мельчайшие подробности русификации AbiWord и способы прикрутки новых шрифтов к Ted, равно как и сравнительные достоинства ApplixWord и StarWriter. Да и наша недавняя статья о LyX лишь развивает линии, намеченные предшественниками. Однако же существует программа данного класса, о которой в Сети как будто не обнаруживается почти никакой информации на русском языке. Да и на иностранных-то сайтах трудно найти что-либо, кроме рекламы, заимствованной из ее собственной документации. Имя этой программе – TeXmacs, а автора ее зовут Joris van der Hoeven.

Чем объясняется этот заговор молчания? Возможно, дело в том, что TeXmacs, что называется, «из коробки» обнаруживает способность работать с русскими текстами, так что тема русификации, столь важная в других случаях, не может послужить источником вдохновения. Впрочем, это, как мы увидим, только так кажется. А может быть, пользователей Linux сбивает с толку название программы, недвусмысленно указывающее на то, что она должна иметь отношение к TeX и Emacs. Ну а у этих двух явлений, при всей их разноплановости, общая черта по крайней мере одна: неисчерпаемость. Так что писать о них надлежит не коротенькие заметки в Сети, а толстенные талмуды.

Наследие Emacs

Однако уже первое знакомство с TeXmacs убеждает в самостоятельном характере этой программы, который подчеркивается ее оригинальным (и весьма приятным) графическим интерфейсом. Более того, признаки влияния Emacs в ней отнюдь не бросается в глаза, если не считать заимствованной из этого редактора системы «горячих клавиш» и некоторых рудиментов концепции буферов. То и другое, скажем так, терпимо, хотя и не представляется особенно полезным. Ведь потребность в визуальных редакторах обычно возникает у недавних Windows-мигрантов, а не у людей, досконально освоивших Emacs со всеми его клавиатурными комбинациями. Ну а список буферов в TeXmacs всё равно ограничивается окнами открытых документов, так что заимствованный из Emacs пункт меню «Буфер» можно было бы с успехом переименовать в «Окно» и переместить из начала строки меню куда-нибудь поближе к ее концу.

Правда, есть у TeXmacs и еще одна черта, роднящая его не только с Emacs, но и с консольными редакторами вообще. В программе практически полностью отсутствуют диалоговые окна, так что в тех случаях, когда вызванная тем или иным способом команда требует задания каких-либо параметров, общение с пользователем происходит через строку состояния. Что, конечно, не очень удобно. Например, если пользователь выберет в меню команду «установить поля», ему придется последовательно отвечать на вопросы о величине каждого из четырех полей, не забывая присовокуплять к введенной цифре название единицы измерения (например, cm, mm или in). Впрочем, похоже, что это не концептуальная особенность программы, а просто следствие нежелания автора пользоваться общераспространенными графическими библиотеками, типа gtk или motif.

Однако родство с Emacs станет по-настоящему очевидным, когда у нас возникнет желание заняться настройкой программы. Как выясняется, никаких интерактивных средств на сей случай не предусмотрено. Правда, в строке меню имеется пункт под названием «Опции», но он, во-первых, весьма беден по содержанию, и, во-вторых, установленные в нем параметры (можно, например, поменять язык интерфейса программы) действуют только на текущий сеанс. Что же, залезаем в программный каталог TeXmacs в надежде найти что-нибудь вроде конфигурационного файла (отметим, что имя этого каталога хранится в переменной $TEXMACS_PATH и соответствует /usr/share/TeXmacs, если программа устанавливалась из бинарного пакета; в противном случае придется поискать где-то в районе /usr/local/lib). На первый взгляд – абсолютно ничего. Так можно провести некоторое время в недоумении, пока не сообразишь присмотреться к каталогу $TEXMACS_PATH/progs, в котором обнаруживается целый куст инициализационных сценариев. Эти файлы имеют специфическое расширение .scm, но написаны они, по существу, на диалекте макроязыка Emacs lisp.

Правда, разобраться в содержимом папки progs будет несколько легче, чем в аналогичном хозяйстве для Emacs. Всё-таки сценариев в данном случае не так уж много, и они хорошо систематизированы. Кроме того, в TeXmacs нет ничего похожего на компилированные файлы .elc, назначение которых бывает затруднительно определить, если под рукой нет исходников. С другой стороны, расплатой за читабельность кода является довольно продолжительное время, уходящее на его обработку в процессе загрузки программы. Но так или иначе, а было бы недурно отыскать хоть какие-нибудь указания на методику обращения с этими файлами в документации к программе. Увы, автор программы, по-видимому, не предполагал, что потребность в информации такого рода может возникнуть у рядовых пользователей. Иначе чем объяснить то обстоятельство, что редактировать нам придется именно те файлы, которые находятся в программном каталоге TeXmacs? Ведь ничего похожего на файл ~/.emacs, который бы специально предназначался для задания пользовательских настроек, здесь не обнаруживается.

Влияние LaTeX

Взаимосвязь между TeXmacs и TeX/LaTeX гораздо более очевидна и бросается в глаза уже при беглом знакомстве с интерфейсом программы. Скажем, в меню «Документ» мы обнаруживаем подменю «Стиль», которое позволяет сделать выбор между такими вариантами, как «Письмо», «Статья», «Книга», «Семинар». Что это такое? Да не что иное, как стандартные классы документов LaTeX. Точно так же не вызывает сомнения происхождение большинства пунктов меню «Вставка», через которое в документ можно включить заголовки разного уровня, а также такие окружения, как «Стихи», «Цитата», «Код», «Замечание», «Пример». Здесь же находим команды, управляющие расстановкой отступов между абзацами и разрывов страниц, которые также выдержаны вполне в духе идеологии LaTeX. В общем, сама собой напрашивается аналогия с таким текстовым процессором, как LyX, где доступ к командам LaTeX осуществляется именно с помощью подобных элементов пользовательского интерфейса. Подобно LyX, TeXmacs изначально ориентирован на создание структурированного документа, оформление которого в соответствии с выбранным стилем программа берет на себя. Единственное внешнее отличие (правда, говорящее, на мой взгляд, не в пользу TeXmacs) заключается в том, что здесь можно лишь вставлять различные элементы структуры, но нельзя, например, оформить уже набранный абзац в качестве заголовка того или иного уровня.

На самом же деле разница гораздо глубже, ибо TeXmacs – вовсе не графическая оболочка для LaTeX, а совершенно самостоятельный текстовый процессор. Поэтому наличие аналогов для распространенных команд LaTeX здесь не дань необходимости, а плод сознательного стремления автора создать программу, пригодную для подготовки документов полиграфического качества. Однако решается эта задача совершенно иными средствами. Об этом говорит уже самый формат документов TeXmacs (они имеют расширение .tm), который не имеет с LaTeX ничего общего, ибо основан на SGML. Что, в общем-то, и неудивительно: TeX/LaTeX – язык слишком своеобразный, и к тому же обладающий внутренним совершенством, так что его сложно использовать как основу для новых разработок. Соответственно, TeXmacs не нуждается в каких-либо внешних компиляторах: получив команду распечатать документ, он самостоятельно создает PostScript-файл, который потом и посылается на печать через Ghostscript. А коль скоро одна и та же программа управляет отображением текста на экране и его переводом в формат PostScript, не так уж сложно сделать результаты обоих процессов максимально близкими друг к другу. По этой причине TeXmacs, в отличие от LyX, обеспечивает не некую условную визуализацию, а настоящий режим WYSIWYG. В процессе редактирования не отображаются разве что разрывы страниц. Зато переносы расставляются тут же, причем с учетом выбранного языка.

Надо заметить, что используемый в TeXmacs алгоритм переносов также заимствован из TeX. Сам по себе данный факт не следует считать признаком тесной связи с этой издательской системой: просто файлы переносов TeX хороши тем, что распространяются свободно и дают вполне удовлетворительный результат. А использовать их ныне можно в любом визуальном редакторе – было бы желание. Так что в этом плане TeXmacs мог бы послужить образцом для всех разработчиков некоммерческих текстовых процессоров. Однако есть одна область, где TeXmacs по-настоящему зависим от TeX: для оформления текста в нем по умолчанию используются шрифты в формате METAFONT. Некоторые из них имеются в комплекте программы, но недостающие приходится брать из дерева каталогов TeX. Кроме того, использование технологии METAFONT, как известно, требует генерации растровых pk-шрифтов, для чего необходимы компиляторы, которые опять-таки не являются частью TeXmacs, а поставляются в составе дистрибутива teTeX. А вот к чему такой выбор приводит – об этом сказ особый.

Гримасы русификации

Выше уже было отмечено, что специально заниматься русификацией TeXmacs как будто бы нет необходимости: всё уже сделано за нас. Более того: хотя в TeXmacs изначально предусмотрена поддержка ряда языков, русский удостоился особого внимания. В меню обнаруживается несколько специальных команд, имеющих отношение к работе с кириллицей, а методике такой работы посвящено отдельное электронное руководство. Тронутый такой заботой, пользователь принимается вводить текст и… наблюдает на экране хорошо знакомую бХОПНю. По крайней мере, в том случае, если в его системе принята кодировка koi8. Попутно обнаруживается, что нельзя пользоваться и английской клавиатурой: пока мы не пометим текст явным образом как английский (это делается через меню «Текст»–> «Язык»), вместо латинских букв будут печататься соответствующие им русские.

Первую проблему можно легко исправить, если выбрать в меню «Опции» –> «клавиатура» –> «русский» пункт «koi8-r». Но не делать же это в каждом сеансе? Поэтому остается залезть в файл $TEXMACS_PATH/progs/init.scm, управляющий начальной загрузкой инициализационных сценариев. Там в числе прочего обнаруживаются следующие две строчки:

(exec-file "$TEXMACS_PATH/progs/keyboard/russian" "translit.scm")
(exec-file "$TEXMACS_PATH/progs/keyboard/russian" "cp1251.scm")

Первая строка как раз и заставляет английскую клавиатуру работать в качестве «фонетической» русской раскладки, что может быть полезно для тех, кому приходится иметь дело с русским языком в системах с иной локализацией. Мы же можем ее безбоязненно закомментировать. Что же касается файла cp1251.scm, то он является практически пустым, и, в сущности, не нужен даже в том случае, если наша система локализована на базе этой кодировки. (Вернее, в нем содержится один маленький фокус с буквой «ё», смысл которого станет ясен из дальнейшего). Если же вы используете koi8, то замените название этого файла на koi8.scm. После чего поведение как русской, так и английской клавиатуры в TeXmacs придет в норму.

Но не обольщайтесь. Ибо установили вы не раскладку для koi8, а как раз наоборот: переходник с koi8-клавиатуры на кодировку cp1251. Именно она будет использоваться для отображения текста на экране и записи его в файл. В той же кодировке составлен файл переносов и файл $TEXMACS_PATH/langs/natural/dic/english-russian.scm, отвечающий за русификацию интерфейса. Что, в общем-то, лично меня ни в коей мере не угнетает, поскольку сам я работаю исключительно с cp1251. Да и как же иначе? Не говоря уж о том, что данная кодировка является наиболее логичной, только в ней имеются все необходимые типографские символы, (типа парных кавычек) без которых нет смысла говорить о полиграфическом качестве оформления текста. Однако же давайте задумаемся, почему автор программы (или автор ее русификации) предпочел выбрать именно эту кодировку? Оказывается, по одной единственной причине: cp1251 совместима с кодировкой кириллических шрифтов для TeX, которые по умолчанию используются в TeXmacs. И сделать так пришлось потому, что TeXmacs, будучи WYSIWYG-приложением, не предусматривает механизма перекодировки входного файла, подобного тому, который обеспечивается загрузкой пакетов fontenc и inputenc в LaTeX. То есть навязывают нам, в сущности, вовсе не cp1251, а TeX'овскую кодировку T2A.

Но ведь такой подход не только идеологически неверен, но и весьма наивен. Ну хорошо, cp1251 совпадает с T2A в русской части (и то кроме буквы «ё» – не зря же для ее печати понадобилось переопределять поведение клавиатуры), но ведь это уже не будет соответствовать истине для символов других славянских алфавитов. А что, если мы пожелаем сделать украинскую или сербскую локализацию? Неужели напрямую писать текст в T2A? Текст, который нельзя будет прочесть никаким «Штирлицем», ибо внутренние кодировки TeX вообще-то предназначаются только для откомпилированных файлов .dvi. Никто и никогда не допускал мысли о возможности использовать их напрямую для набора текстов. Главная причина этого достаточно очевидна: в таких кодировках активно используются те ячейки кодовой таблицы, которые вне системы TeX зарезервированы за управляющими кодами и, соответственно, не должны применяться в текстовых файлах.

Увы, похоже, что данное соображение нисколько не смущает автора TeXmacs. Так, в файле $TEXMACS_PATH/progs/keyboard/accents.scm (он отвечает за некоторые общие параметры клавиатуры) встречаем несколько строчек приблизительно следующего вида:

("- - -" " ")

Приведенная строка задает клавиатурную комбинацию для печати символа «длинное тире». А вот то, что мы обозначили как пробел в кавычках – это на самом деле символ с десятичным кодом 22, который соответствует этому самому длинному тире в латинской кодировке для TeX T1 (равно как и в кириллической T2A). И дело даже не в том, что вносить изменения в подобный файл будет сложно без шестнадцатеричного редактора. Но интересно знать, как бы автор выкручивался из положения, если бы ему понадобился символ с кодом 12 (прогон страницы)? Или с кодом 13 (перенос строки)? А ведь на привязку символов к данным кодам в TeX нет никакого запрета.

Еще одна любопытная вещь обнаружится, если мы попробуем преобразовать подготовленный в TeXmacs документ в формат LaTeX. TeXmacs предусматривает такую возможность, хотя автор честно признается, что качество конвертера пока оставляет желать лучшего. Открываем полученный файл в текстовом редакторе, и… первым делом обнаруживаем, что строчная буква «я» всюду превратилась в заглавную. Заглавное же «Я» вообще стало двойным латинским S. Речь, естественно, идет о тексте в cp1251, в противном случае проблема возникла бы с твердым знаком. В чем тут дело? Оказывается, мы опять расплачиваемся за неуклюжую попытку учесть различия между кодировками, на сей раз латинскими: TeX'овской T1 и общепринятой iso-8859-1. Лечится такое поведение путем истребления из файла $TEXMACS_PATH/progs/convert/tmtex.scm следующих двух строчек:

((equal? c #\337) (tmtex-text-sub "SS" l))
((equal? c #\377) (tmtex-text-sub "Я" l))

Но не забавно ли, что, ради того, чтобы сделать документ понятным для LaTeX, приходится перегонять его из внутренней TeX'овской же кодировки в общепринятую? И, как видим, проблема вовсе не ограничивается русификацией, ибо различия между двумя западноевропейскими кодировками – приблизительно такого же порядка, как между cp1251 и T2A.

Как с этим бороться

А теперь зададимся вопросом: а для чего вообще понадобилось связываться со шрифтовым хозяйством TeX? Может быть, TeXmacs умеет корректно обрабатывать содержащиеся в шрифтах лигатуры (под лигатурой в TeX понимается сочетание двух символов, которые должны быть заменены или дополнены третьим символом при компиляции документа)? Да нет, не похоже. Или программа знает, как обращаться с акцентами-модификаторами? Ничего подобного. Правда, в TeXmacs предусмотрены специальные клавиатурные комбинации для печати акцентированных латинских символов, в готовом виде содержащихся в кодировке T1, но вот составить новый символ из буквы и акцента нельзя. Мало того, если в LaTeX кодировка рассматривается как один из атрибутов шрифта, то TeXmacs, имея дело со внутренними кодировками TeX, ничего, в сущности, о них не знает. Шрифты в разных кодировках являются для него, как и для большинства визуальных редакторов, совершенно различными гарнитурами, и уже дело пользователя следить за тем, чтобы выбранный шрифт соответствовал языку текста.

Недоумение еще больше возрастает, когда мы обнаруживаем, что TeXmacs, оказывается, прекрасно умеет обращаться и со шрифтами, установленными в системе XWindow (по крайней мере, в формате Type 1 – насчет остальных ничего сказать не могу). Некоторый набор таких гарнитур (естественно, только латинских, и, естественно, в кодировке Adobe Standard, то есть, в сущности, в той же iso-8859-1) изначально доступен через меню программы. О такой мелочи, как различия кодировок, автор «забыл» предупредить в документации. А эти различия, как мы уже убедились, как раз таковы, чтобы сделать абсолютно бессмысленными попытки сочетания шрифтового хозяйства TeX и XWindow в одном документе. Но, быть может, имеет смысл полностью переориентировать TeXmacs на шрифты Type 1, разом ликвидировав тем самым все вышеописанные проблемы?

Для разрешения этой задачи нам, во-первых, понадобится некий малый джентльменский набор кириллических гарнитур Type 1, состоящий из серифного, санссерифного и машинописного шрифтов. Я бы рекомендовал использовать шрифты в cp1251, но, если предпочтете koi8, не забудьте сконвертировать в эту кодировку файлы, отвечающие за русификацию интерфейса и русский перенос. Кроме того, для полноты операции желательно наличие совместимых гарнитур в западноевропейской кодировке. Далее я ради простоты картины буду исходить из предположения, что у нас имеется базовый набор коммерческих гарнитур от Paratype: NewtonC, PragmaticaC и CourierC для кириллицы, NewtonA, PragmaticaA и CourierA для западноевропейских алфавитов.

Шрифты эти, естественно, должны быть корректно установлены в системе XWindow. Далее мы могли бы сделать их доступными TeXmacs, внеся несколько дополнительных строк (по образцу уже имеющихся) в файлы TEXMACS_PATH/progs/fonts/x-fonts.scm и TEXMACS_PATH/progs/menu/main-menu.scm, которые, как это явствует из их названий, отвечают за загрузку шрифтов XWindow и конфигурацию меню. Но ведь мы хотели полностью отказаться от использования шрифтов системы TeX? Чтобы сделать это с наименьшими затратами, целесообразно переопределить шрифты roman и cyrillic, используемые программой по умолчанию. Для этой цели лучше всего создать новый файл, взяв за основу основу один из сценариев, ведающих загрузкой шрифтов (хотя бы тот же самый x-fonts.scm). Файл этот в нашем случае должен содержать следующие вхождения:

((roman rm medium right $s $d) (ps paratype-newtona-medium-r-normal $s $d))
((roman rm medium italic $s $d) (ps paratype-newtona-medium-i-normal $s $d))
((roman rm bold right $s $d) (ps paratype-newtona-bold-r-normal $s $d))
((roman rm bold italic $s $d) (ps paratype-newtona-bold-i-normal $s $d))

((cyrillic rm medium right $s $d) (ps paratype-newtonc-medium-r-normal $s $d))
((cyrillic rm medium italic $s $d) (ps paratype-newtonc-medium-i-normal $s $d))
((cyrillic rm bold right $s $d) (ps paratype-newtonc-bold-r-normal $s $d))
((cyrillic rm bold italic $s $d) (ps paratype-newtonc-bold-i-normal $s $d))

Далее создаются аналогичные строчки для гарнитур Pragmatica и Courier: помимо названий шрифтов меняется только показатель «rm» (т. е. roman) соответственно на «ss» (sansserif) и «tt» (typewriter). После чего надлежит сделать созданный файл доступным TeXmacs, прописав его загрузку в TEXMACS_PATH/progs/init.scm. Только загружаться он должен ранее всех прочих файлов из каталога TEXMACS_PATH/progs/fonts, если, конечно, у нас нет желания заниматься их редактированием на предмет истребления конфликтующих вхождений.

После этого не помешает просмотреть файлы из каталога TEXMACS_PATH/progs/keyboard (в первую очередь accents.scm) и вычистить из них те команды, которые имеют смысл только для кодировки T1. Кроиме того, целесообразно будет по-новому определить клавиатурные комбинации для печати наиболее распространенных типографских знаков препинания (то есть короткого и длинного тире, многоточия и парных кавычек всех видов). Нижеследующие определения будут работать правильно как для iso-8859-1, так и для cp1251:

("- -" "<символ с кодом 150>")
("- - -" "<символ с кодом 151>")
(". . ." "<символ с кодом 133>")
("< <" "<символ с кодом 171>")
("> >" "<символ с кодом 187>")
("` `" "<символ с кодом 147>")
("' '" "<символ с кодом 148>")
(", ," "<символ с кодом 130>")

Конечно, чтобы вставить в файл все перечисленные знаки, придется воспользоваться редактором со встроенной таблицей символов. Linux ведь не Windows – получить любой символ путем набора его кода на числовом блоке клавиатуры нельзя. Но это хотя бы не запретные коды из диапазона 0–32.

А теперь последний вопрос: стоит ли всем этим заниматься? Возможно, и стоит: ведь визуальных редакторов под Linux – раз, два и обчелся, а уж способность работать с многоязычными документами – свойство и вовсе уникальное. Только следует иметь в виду, что ваши наработки в TeXmacs не будут совместимы решительно ни с чем. Потому тот недостаток конвертера в формат LaTeX, о котором было сказано выше – далеко не единственный. Файлы, полученные с его помощью, производят страшноватое впечатление, и, главное, напрочь лишены той информации о шрифтовом форматировании и использованных языках, которая во внутреннем формате TeXmacs сохраняется достаточно эффективным способом. Ну а конвертеры для HTML и RTF пока лишь числятся в планах автора, и, соответственно, надежда на них слабая. Так что – думайте сами, решайте сами…

Анонсы статей сайта Softerra

Алексей Крюков
Softerra

Лучшие статьи раздела читайте в еженедельном сетевом журнале
"I2R Computer"
Подпишитесь на рассылку
"Мир Linux. И2Р"
Подписка на Subscribe.Ru
Другие разделы
Идеология
Программы
Linux против Microsoft
Установка и первые шаги
Практикум в Linux
Фольклор
Новое в разделе
FAQ по Linux
I2R-Журналы
I2R Business
I2R Web Creation
I2R Computer
рассылки библиотеки +
И2Р Программы
Всё о Windows
Программирование
Софт
Мир Linux
Галерея Попова
Каталог I2R
Партнеры
Amicus Studio
NunDesign
Горящие путевки, идеи путешествийMegaTIS.Ru

2000-2008 г.   
Все авторские права соблюдены.
Rambler's Top100