div.main {margin-left: 20pt; margin-right: 20pt}LyX и LaTeX: организация взаимодействия. Часть 1 Автор: Алексей
Крюков, basileia@yandex.ru Опубликовано:
20.03.2002 Оригинал: http://www.softerra.ru/freeos/16826/
Статьи, посвященные разного рода текстовым
процессорам под Linux, традиционно принято начинать с общих рассуждений о
назначении и пользе данного класса программ. И для этого есть серьезные
основания. Ведь первое и естественное желание, возникающее у Windows-мигранта,
впервые обратившегося к Linux, заключается в том, чтобы продолжить работу со
своими данными, представленными, скорее всего, в текстовой форме. Начиная поиск
подходящего софта, пользователь видит перед собой несколько облегченных
редакторов (которым, соответственно, для серьезной научной работы – грош цена),
а также монументальный StarOffice, до сих пор не способный нормально работать с
русскими текстами. Ныне это положение меняется благодаря активной разработке
проекта OpenOffice.org и ожидаемому StarOffice 6.0. И всё же принудительная сила
реальности заставляет признать, что Linux традиционно ориентирован на подготовку
файлов в простом текстовом формате, а вовсе не на работу с документами в режиме
WYSIWYG.
Данное явление может оцениваться по-разному.
Можно, конечно, в совершенстве освоить какой-нибудь текстовый редактор и после
этого свысока поглядывать на пользователей текстовых процессоров, неспособных
избавиться от привычки злоупотреблять оформительскими эффектами. Увы, практика
показывает, что некоторые элементы оформления текста необходимо вносить уже на
этапе его ввода. Скажем, выделение полужирным и курсивом часто несет смысловую
нагрузку. Ну а если речь идет о тексте научном, то в нем наверняка понадобятся
подстрочные примечания и таблицы. И еще хуже, если придется ссылаться на
иностранную литературу: тогда не обойтись без совмещения в одном документе
нескольких кодовых страниц, каковое, естественно, потребует смены шрифтов.
Таким образом, единственным выходом из положения
становится подготовка документов на языках текстовой разметки (TeX и HTML),
позволяющих задать нужные элементы форматирования в виде тегов. Однако изучение
языка разметки требует определенных усилий, и не всякому пользователю дается
легко. К тому же не всем приходится составлять многостраничные оригинал-макеты.
Сочинять же служебное письмо со справочником по командам LaTeX на коленях –
занятие едва ли осмысленное. Вот тут-то и приходит на помощь текстовый процессор
LyX, представляющий собой уникальную попытку соединить одно из основных
достоинств Linux – интеграцию с системой LaTeX с возможностью подготовки
документов в визуальном режиме.
По LyX существуют неплохие руководства на
русском языке. Это труды Владимира Игнатова и Алексея Федорчука, послужившие
отправной точкой при написании этой статьи. Но, во-первых, развитие LyX не стоит
на месте, и некоторые рекомендации этих авторов, скажем так, слегка устарели. А
во-вторых, их работы – это, прежде всего, руководства по русификации,
построенные по принципу: делай так-то – получишь такой-то результат. Я же хотел
бы подробнее описать сам механизм взаимодействия LyX с LaTeX, так, чтобы,
во-первых, стал ясен внутренний смысл практических действий по начальной
настройке программы, и, во-вторых, чтобы пользователю легче было понять, в каком
случае LyX действительно может облегчить его работу, а в каком – проще заняться
написанием исходников LaTeX напрямую.
Итак, LyX – это не что иное, как графическая
надстройка над системой LaTeX, наличие которой в установленном виде необходимо
для его нормального функционирования. И если открыть подготовленный в LyX файл в
простом текстовом редакторе, можно увидеть нечто внешне сходное с исходником
LaTeX. На это как будто указывает знак backslash, с которого начинаются все
команды. Однако же аргументы этих команд не заключаются в фигурные скобки, а
просто отделяются пробелом, да и в качестве знака комментария используется
символ # (а не %, как в LaTeX). Кроме того, странное впечатление производит
структура текста с многочисленными переносами строк: с новой строки начинается
каждая команда. И лишь когда мы дадим команду распечатать текст (или просмотреть
DVI или postscript), программа в качестве промежуточного этапа сгенерирует
настоящий документ LaTeX (файл с расширением .tex), который при желании можно
будет разыскать где-то в недрах каталога /tmp.
Для чего же понадобилось создавать специальный
язык разметки, нужный только как переходный этап? На этот вопрос легко ответить
всякому, кому приходилось видеть html-код, сгенерированный визуальными
редакторами. Этот ход оттого и получается неудобочитаемым, что такие редакторы
стремятся «на лету» исполнять команды пользователя, не пытаясь воссоздать их
внутреннюю логику. А ведь язык LaTeX значительно сложнее, чем html, и
последствия могут быть хуже. Приведу такой пример. Для пометки текста на
иностранном языке в LaTeX обычно используются команды-декларации
selectlanguage{}. Такая команда будет действовать до появления следующей
декларации, отменяющей ее, например: Русский текст.
selectlanguage{english} Some text in English.
selectlanguage{russian} Снова русский текст.
Однако можно сделать и по-иному, заключив
команду переключения языка в фигурные скобки вместе с относящимся к ней текстом,
так, чтобы она действовала только на него: Русский текст.
{selectlanguage{english} Some text in English.}
Снова русский текст.
Очевидно, что первый способ предпочтительнее для
выделения целых абзацев текста, второй же – для фрагментов в несколько слов.
Ясно также, что программе куда легче оценить объем каждого отрывка при
компиляции текста для печати, чем пытаться судить о намерениях пользователя в
процессе редактирования. Так вот, LyX прекрасно справляется с этой задачей, так
что в данном конкретном случае к расставленным им командам LaTeX сложно
придраться самому строгому критику. Ну а для того, чтобы обеспечить сохранение
данных в процессе работы, как раз и нужен упрощенный язык разметки, по
возможности снимающий все разночтения, подобные описанному выше.
Преобразование своего внутреннего формата в документ LaTeX, по существу,
является основной задачей программы, и потому львиная доля настроек LyX связана
именно с регулированием этого процесса.
Настройки LyX
Заглянув в программный каталог LyX (скорее
всего, /usr/share/lyx), можно обнаружить там файл lyxrc.defaults, содержащий
некий набор основных настроек программы. Этот файл автоматически копируется и в
поддиректорию .lyx в домашнем каталоге пользователя. Тем не менее, авторы
программы настоятельно советуют не вносить в него никаких изменений, а создать
вместо этого в том же каталоге файл lyxrc, в котором и упражняться по своему
усмотрению, взяв за основу тот же самый lyxrc.defaults, а также специальный файл
lyxrc.example, содержащий образцы всех допустимых команд с комментариями к ним.
По этой причине и основным содержанием существующих на данный момент руководств
по LyX являются рекомендации по обращению с lyxrc.
Однако та версия LyX, которая ныне входит в
состав всех современных дистрибутивов Linux и доступна с сайта производителя
(1.1.6) слегка обогнала свою собственную документацию, и попытки создания файла
lyxrc, скорее всего, не дадут в ней желаемого эффекта. Дело в том, что настройки
свои она хранит в файле под названием preferences, который, хотя и не отличается
по синтаксису от lyxrc, однако не рекомендован для ручной правки. Это и не
нужно: в программе имеется диалог «Preferences…», где и вносятся все необходимые
настройки. Диалог этот содержит несколько вкладок, в числе которых первой идет
Look & Feel. Смысл содержащихся на ней опций понятен без особых объяснений.
В частности, здесь можно:
определить шрифт для различных элементов интерфейса;
определить экранные шрифты для вводимого текста (трех категорий: с
засечками, без засечек и машинописный), а также их кодировку;
отключить заставку, появляющуюся при запуске программы (чем пренебрегать
ни в коем случае нельзя, потому что заставка эта маячит на экране гораздо
дольше, чем от нее требуется);
и многое другое.
Ну, а следующим номером идет вкладка под
названием «Lang Opts» с двумя вкладками второго уровня: «Spel checker» и «Язык»
(именно так; русификация программы, по-видимому, отстает от изменений в ее
интерфейсе, откуда и происходит русско-английский диалект). Эта вкладка наиболее
интересна для нас, так как здесь сосредоточено большинство опций, относящихся к
русификации LyX. Впрочем, разделить их следует не на две, а на три группы:
Рассмотрим их по порядку.
Проверка орфографии
С этим дело обстоит проще всего. В принципе, LyX
по умолчанию использует словарь, одноименный с языком документа. Поэтому, если
ваш словарь для ispell/aspell и в самом деле называется russian (а для koi8 это
так), на вкладке «Spell checker» можно оставить всё как есть. Иное дело, если
вам хотелось бы набирать текст в cp1251. В принципе, на этот случай имеется
опция «use input encoding», которая позволяет передавать программе проверки
орфографии название используемой кодировки. Но толку от нее мало: едва ли
словарь для koi8 сможет воспринимать какие-то кодировки кроме своей собственной.
А вот завесить ispell с ее помощью очень даже можно. Поэтому остается лишь
раздобыть словарь в требуемой кодировке , после чего пометить флажок «use
alternative language» и в расположенном рядом с ним текстовом поле ввести
название соответствующего файла (для cp1251 он называется russianw).
Настройки клавиатурного ввода
Почитав документацию к LyX, можно убедиться, что
его разработчики не имели ничего против использования своего детища с
клавиатурами, отличными от английской. Тем удивительнее, что при первой попытке
ввести какой-либо текст с кириллической раскладки на экране не появляется
никаких символов. И всё же LyX не является «неправильным» приложением, поскольку
его можно обучить понимать символы иностранных алфавитов. Для этой цели
существует файл cyrillic.bind, распространяемый вместе с LyX в составе
дистрибутивов фирмы ALTLinux. Если же вы не являетесь счастливым пользователем
ее продукции, можете поискать данный файл где-либо в Сети или даже написать его
самостоятельно. Синтаксис его очень прост: каждая строка имеет вид bind "Cyrillic_a" "self-insert"
Естественно, то же самое придется повторить для
каждой буквы русского алфавита (точные их названия можно найти в описании
какой-либо кириллической раскладки клавиатуры из каталога /etc/X11/xkb). Потом
этот файл помещается в каталог LyX/bind (в usr/share или в домашнем каталоге
пользователя) и прописывается (без расширения .bind) всё в том же диалоге
«Preferences…» (вкладка «Look & Feel», на ней вкладка «Interface», на ней
поле ввода «Bind file». С тем же успехом можно и вручную вставить в упомянутый
файл preferences строку вида bind_file cyrillic
По крайней мере, именно такая рекомендация
содержится во всех руководствах.
Вот только следует иметь в виду, что файлы из
каталога bind вообще-то предназначены для задания настроек клавиатуры. И потому
обрести возможность работы с русскими буквами, лишившись зато привычных
клавиатурных комбинаций (даже таких обычных, как «слово вправо – слово влево») –
это, очевидно, не тот эффект, которого мы хотели достичь. Иногда удается
обмануть LyX, прописав сразу два bind-файла. Но – не всегда, и в любом случае
этого нельзя сделать через пользовательский интерфейс. Да и не нужно, потому что
никто не заставляет нас использовать cyrillic.bind в чистом виде: гораздо лучше
слить его содержимое с каким-либо из имеющихся в комплекте bind-файлов (по
умолчанию используется cua.bind), поместить образовавшийся файл у себя в
~/.lyx/bind и использовать его в свое удовольствие.
Создание пользовательского bind-файла
целесообразно и по иной причине. Дело в том, что существует одна категория
настроек LyX, которые нельзя выполнить через пользовательский интерфейс, и это
как раз настройки клавиатурных комбинаций. Между тем некоторые из них
традиционно было принято определять в lyxrc. Собственно, и сейчас никто не
мешает употреблять в файле preferences команды вида bind "любая_клавиша" "любая_команда"
Только вот надо иметь в виду, что они будут
начисто снесены при первой же попытке изменить какие-либо настройки LyX в
интерактивном режиме. Очевидно, из этой ситуации может быть три выхода:
один раз задать настройки в диалоге «Preferences...», после чего править
одноименный файл только вручную;
править не preferences, а lyxrc.defaults, что, как мы отметили, не
рекомендуется разработчиками;
или же как раз и размещать все настройки клавиатуры там, где для них,
собственно говоря, настоящее место, то есть в пользовательском bind-файле.
Помимо системной клавиатуры, LyX может работать
и со своим внутренним переключателем раскладок. Придуман этот
механизм прежде всего для удобства печати западноевропейских акцентированных
символов. Дело в том, что в LaTeX для этой цели существуют специальные команды,
с которыми LyX и должен сообразовываться. Пользы от этого, по-моему, в наших
условиях мало. Вот если бы LyX умел динамически переключать экранный шрифт в
зависимости от языка текста... А так акцентированные символы всё равно
превращаются на экране в нечто, зависящее от используемой кодировки, так что,
зная синтаксис соответствующих команд TeX, гораздо проще вводить их напрямую. Но
как бы то ни было, возможность использования дополнительных раскладок
существует. И потому полезно знать, что для их описания используются специальные
файлы с расширением .kmap, хранящиеся в подкаталоге kbd программной директории
lyx. В комплект поставки входит и описание русской раскладки для кодировки
koi8-r (разумеется, она не нужна, если клавиатура уже русифицирована с помощью
cyrillic.bind). Можно написать новую раскладку и самостоятельно: синтаксис этих
файлов очень прост и к тому же хорошо описан в документации.
Дополнительных раскладок может быть подключено
две (primary и secondary). В файле lyxrc.example приводится следующий пример их
настройки: kbmap true
kbmap_primary german
kbmap_secondary american
Ручное включение данных строк в конфигурационный
файл эквивалентно следующей последовательности действий: вызываем диалог
«Preferences...», на нем открываем вкладку «Lang Opts» и вкладку следующего
уровня «Язык», там активизируем опцию «Keyboard map» и прописываем нужные
значения в ставших после этого доступными полях «1st» и «2nd». Хотелось бы
только предостеречь насчет задания раскладки american: здесь имеется в виду
вполне определенный файл american.kmap, содержащий описание
международной раскладки с «мертвыми клавишами». Если это не тот эффект,
который вам нужен, то не вписывайте в поле «2nd» ничего или впишите значение
«null». Стандартную же американскую клавиатуру в LyX определять вообще не нужно:
она получается сама собой (вернее, берется из системы) при третьем состоянии
переключателя (обе раскладки отключены). К сожалению, этих состояний будет
именно три даже в том случае, если одна из раскладок не задана.
Задав дополнительные раскладки, необходимо
назначить клавиши, с помощью которых мы сможем получить к ним доступ. В
lyxrc.example предлагается включить для этого в конфигурационный файл строку bind "Pause" "keymap-toggle"
Разумеется, «Пауза» здесь только для примера:
можно назначить любую другую клавишу. Существуют также команды «keymap-primary»,
«keymap-secondary» и «keymap-off», обеспечивающие быстрый доступ к трем
состояниям переключателя. Выше было отмечено, что помещать эти команды, если уж
в них возникла необходимость, лучше всего в предварительно созданном
пользовательском bind-файле.
|