Emacs для начинающих

       

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


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

Первую проблему можно легко исправить, если выбрать в меню -> -> пункт . Но не делать же это в каждом сеансе? Поэтому остается залезть в файл $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.


Содержание раздела